diff --git a/CHANGELOG.md b/CHANGELOG.md index ce8103e..219dfa1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +##### 3.0.0-alpha.9 - 06 March 2016 + +###### Other +- Upgraded js-data-adapter + ##### 3.0.0-alpha.8 - 06 March 2016 ###### Other diff --git a/dist/js-data-rethinkdb.js b/dist/js-data-rethinkdb.js index 817ab97..2f7cee4 100644 --- a/dist/js-data-rethinkdb.js +++ b/dist/js-data-rethinkdb.js @@ -75,15 +75,6 @@ var DEFAULTS = { */ db: 'test', - /** - * Whether to log debugging information. - * - * @name RethinkDBAdapter#debug - * @type {boolean} - * @default false - */ - debug: false, - /** * RethinkDB host. * @@ -118,16 +109,7 @@ var DEFAULTS = { * @type {number} * @default 10 */ - port: 28015, - - /** - * Whether to return a more detailed response object. - * - * @name RethinkDBAdapter#raw - * @type {boolean} - * @default false - */ - raw: false + port: 28015 }; var INSERT_OPTS_DEFAULTS = {}; @@ -243,7 +225,7 @@ function RethinkDBAdapter(opts) { classCallCheck(self, RethinkDBAdapter); opts || (opts = {}); fillIn(opts, DEFAULTS); - Adapter__default.call(this, opts); + Adapter__default.call(self, opts); /** * Default options to pass to r#insert. diff --git a/dist/js-data-rethinkdb.js.map b/dist/js-data-rethinkdb.js.map index dcc68da..04bfecf 100644 --- a/dist/js-data-rethinkdb.js.map +++ b/dist/js-data-rethinkdb.js.map @@ -1 +1 @@ -{"version":3,"file":"js-data-rethinkdb.js","sources":["../src/index.js"],"sourcesContent":["import {utils} from 'js-data'\nimport Adapter from 'js-data-adapter'\nimport {\n reserved,\n Response\n} from 'js-data-adapter'\nimport rethinkdbdash from 'rethinkdbdash'\nimport underscore from 'mout/string/underscore'\nimport unique from 'mout/array/unique'\n\nconst {\n addHiddenPropsToTarget,\n classCallCheck,\n extend,\n fillIn,\n forEachRelation,\n forOwn,\n get,\n isArray,\n isObject,\n isString,\n isUndefined,\n omit,\n plainCopy,\n resolve\n} = utils\n\nconst withoutRelations = function (mapper, props) {\n return omit(props, mapper.relationFields || [])\n}\n\nconst DEFAULTS = {\n /**\n * RethinkDB authorization key.\n *\n * @name RethinkDBAdapter#authKey\n * @type {string}\n */\n authKey: '',\n\n /**\n * Buffer size for connection pool.\n *\n * @name RethinkDBAdapter#bufferSize\n * @type {number}\n * @default 10\n */\n bufferSize: 10,\n\n /**\n * Default database.\n *\n * @name RethinkDBAdapter#db\n * @type {string}\n * @default \"test\"\n */\n db: 'test',\n\n /**\n * Whether to log debugging information.\n *\n * @name RethinkDBAdapter#debug\n * @type {boolean}\n * @default false\n */\n debug: false,\n\n /**\n * RethinkDB host.\n *\n * @name RethinkDBAdapter#host\n * @type {string}\n * @default \"localhost\"\n */\n host: 'localhost',\n\n /**\n * Minimum connections in pool.\n *\n * @name RethinkDBAdapter#min\n * @type {number}\n * @default 10\n */\n min: 10,\n\n /**\n * Maximum connections in pool.\n *\n * @name RethinkDBAdapter#max\n * @type {number}\n * @default 50\n */\n max: 50,\n\n /**\n * RethinkDB port.\n *\n * @name RethinkDBAdapter#port\n * @type {number}\n * @default 10\n */\n port: 28015,\n\n /**\n * Whether to return a more detailed response object.\n *\n * @name RethinkDBAdapter#raw\n * @type {boolean}\n * @default false\n */\n raw: false\n}\n\nconst INSERT_OPTS_DEFAULTS = {}\nconst UPDATE_OPTS_DEFAULTS = {}\nconst DELETE_OPTS_DEFAULTS = {}\nconst RUN_OPTS_DEFAULTS = {}\n\nconst equal = function (r, row, field, value) {\n return row(field).default(null).eq(value)\n}\n\nconst notEqual = function (r, row, field, value) {\n return row(field).default(null).ne(value)\n}\n\n/**\n * Default predicate functions for the filtering operators.\n *\n * @name RethinkDBAdapter.OPERATORS\n * @property {Function} == Equality operator.\n * @property {Function} != Inequality operator.\n * @property {Function} > \"Greater than\" operator.\n * @property {Function} >= \"Greater than or equal to\" operator.\n * @property {Function} < \"Less than\" operator.\n * @property {Function} <= \"Less than or equal to\" operator.\n * @property {Function} isectEmpty Operator to test that the intersection\n * between two arrays is empty.\n * @property {Function} isectNotEmpty Operator to test that the intersection\n * between two arrays is NOT empty.\n * @property {Function} in Operator to test whether a value is found in the\n * provided array.\n * @property {Function} notIn Operator to test whether a value is NOT found in\n * the provided array.\n * @property {Function} contains Operator to test whether an array contains the\n * provided value.\n * @property {Function} notContains Operator to test whether an array does NOT\n * contain the provided value.\n */\nconst OPERATORS = {\n '==': equal,\n '===': equal,\n '!=': notEqual,\n '!==': notEqual,\n '>': function (r, row, field, value) {\n return row(field).default(null).gt(value)\n },\n '>=': function (r, row, field, value) {\n return row(field).default(null).ge(value)\n },\n '<': function (r, row, field, value) {\n return row(field).default(null).lt(value)\n },\n '<=': function (r, row, field, value) {\n return row(field).default(null).le(value)\n },\n 'isectEmpty': function (r, row, field, value) {\n return row(field).default([]).setIntersection(r.expr(value).default([])).count().eq(0)\n },\n 'isectNotEmpty': function (r, row, field, value) {\n return row(field).default([]).setIntersection(r.expr(value).default([])).count().ne(0)\n },\n 'in': function (r, row, field, value) {\n return r.expr(value).default(r.expr([])).contains(row(field).default(null))\n },\n 'notIn': function (r, row, field, value) {\n return r.expr(value).default(r.expr([])).contains(row(field).default(null)).not()\n },\n 'contains': function (r, row, field, value) {\n return row(field).default([]).contains(value)\n },\n 'notContains': function (r, row, field, value) {\n return row(field).default([]).contains(value).not()\n }\n}\n\n/**\n * RethinkDBAdapter class.\n *\n * @example\n * // Use Container instead of DataStore on the server\n * import {Container} from 'js-data'\n * import RethinkdbDBAdapter from 'js-data-rethinkdb'\n *\n * // Create a store to hold your Mappers\n * const store = new Container()\n *\n * // Create an instance of RethinkdbDBAdapter with default settings\n * const adapter = new RethinkdbDBAdapter()\n *\n * // Mappers in \"store\" will use the RethinkDB adapter by default\n * store.registerAdapter('rethinkdb', adapter, { default: true })\n *\n * // Create a Mapper that maps to a \"user\" table\n * store.defineMapper('user')\n *\n * @class RethinkDBAdapter\n * @extends Adapter\n * @param {Object} [opts] Configuration opts.\n * @param {string} [opts.authKey=\"\"] RethinkDB authorization key.\n * @param {number} [opts.bufferSize=10] Buffer size for connection pool.\n * @param {string} [opts.db=\"test\"] Default database.\n * @param {boolean} [opts.debug=false] Whether to log debugging information.\n * @param {string} [opts.host=\"localhost\"] RethinkDB host.\n * @param {number} [opts.max=50] Maximum connections in pool.\n * @param {number} [opts.min=10] Minimum connections in pool.\n * @param {Object} [opts.operators] Override the default predicate functions for\n * specified operators.\n * @param {number} [opts.port=28015] RethinkDB port.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed response object.\n */\nexport default function RethinkDBAdapter (opts) {\n const self = this\n classCallCheck(self, RethinkDBAdapter)\n opts || (opts = {})\n fillIn(opts, DEFAULTS)\n Adapter.call(this, opts)\n\n /**\n * Default options to pass to r#insert.\n *\n * @name RethinkDBAdapter#insertOpts\n * @type {Object}\n * @default {}\n */\n self.insertOpts || (self.insertOpts = {})\n fillIn(self.insertOpts, INSERT_OPTS_DEFAULTS)\n\n /**\n * Default options to pass to r#update.\n *\n * @name RethinkDBAdapter#updateOpts\n * @type {Object}\n * @default {}\n */\n self.updateOpts || (self.updateOpts = {})\n fillIn(self.updateOpts, UPDATE_OPTS_DEFAULTS)\n\n /**\n * Default options to pass to r#delete.\n *\n * @name RethinkDBAdapter#deleteOpts\n * @type {Object}\n * @default {}\n */\n self.deleteOpts || (self.deleteOpts = {})\n fillIn(self.deleteOpts, DELETE_OPTS_DEFAULTS)\n\n /**\n * Default options to pass to r#run.\n *\n * @name RethinkDBAdapter#runOpts\n * @type {Object}\n * @default {}\n */\n self.runOpts || (self.runOpts = {})\n fillIn(self.runOpts, RUN_OPTS_DEFAULTS)\n\n /**\n * Override the default predicate functions for specified operators.\n *\n * @name RethinkDBAdapter#operators\n * @type {Object}\n * @default {}\n */\n self.operators || (self.operators = {})\n\n /**\n * The rethinkdbdash instance used by this adapter. Use this directly when you\n * need to write custom queries.\n *\n * @name RethinkDBAdapter#r\n * @type {Object}\n */\n self.r = rethinkdbdash(opts)\n self.databases = {}\n self.tables = {}\n self.indices = {}\n}\n\n// Setup prototype inheritance from Adapter\nRethinkDBAdapter.prototype = Object.create(Adapter.prototype, {\n constructor: {\n value: RethinkDBAdapter,\n enumerable: false,\n writable: true,\n configurable: true\n }\n})\n\nObject.defineProperty(RethinkDBAdapter, '__super__', {\n configurable: true,\n value: Adapter\n})\n\n/**\n * Alternative to ES6 class syntax for extending `RethinkDBAdapter`.\n *\n * @name RethinkDBAdapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the RethinkDBAdapter.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the RethinkDBAdapter itself.\n * @return {Object} RethinkDBAdapter of `RethinkDBAdapter`.\n */\nRethinkDBAdapter.extend = extend\n\naddHiddenPropsToTarget(RethinkDBAdapter.prototype, {\n _handleErrors (cursor) {\n if (cursor && cursor.errors > 0) {\n if (cursor.first_error) {\n throw new Error(cursor.first_error)\n }\n throw new Error('Unknown RethinkDB Error')\n }\n },\n\n selectDb (opts) {\n return this.r.db(isUndefined(opts.db) ? this.db : opts.db)\n },\n\n selectTable (mapper, opts) {\n return this.selectDb(opts).table(mapper.table || underscore(mapper.name))\n },\n\n /**\n * Apply the specified selection query to the provided RQL sequence.\n *\n * @name RethinkDBAdapter#filterSequence\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {Object} [opts.operators] Override the default predicate functions\n * for specified operators.\n */\n filterSequence (sequence, query, opts) {\n const self = this\n const r = self.r\n\n query = plainCopy(query || {})\n opts || (opts = {})\n opts.operators || (opts.operators = {})\n query.where || (query.where = {})\n query.orderBy || (query.orderBy = query.sort)\n query.orderBy || (query.orderBy = [])\n query.skip || (query.skip = query.offset)\n\n // Transform non-keyword properties to \"where\" clause configuration\n forOwn(query, function (config, keyword) {\n if (reserved.indexOf(keyword) === -1) {\n if (isObject(config)) {\n query.where[keyword] = config\n } else {\n query.where[keyword] = {\n '==': config\n }\n }\n delete query[keyword]\n }\n })\n\n let rql = sequence\n\n // Filter\n if (Object.keys(query.where).length !== 0) {\n // Filter sequence using filter function\n rql = rql.filter(function (row) {\n let subQuery\n // Apply filter for each field\n forOwn(query.where, function (criteria, field) {\n if (!isObject(criteria)) {\n criteria = { '==': criteria }\n }\n // Apply filter for each operator\n forOwn(criteria, function (value, operator) {\n let isOr = false\n if (operator && operator[0] === '|') {\n operator = operator.substr(1)\n isOr = true\n }\n let predicateFn = self.getOperator(operator, opts)\n if (predicateFn) {\n const predicateResult = predicateFn(r, row, field, value)\n if (isOr) {\n subQuery = subQuery ? subQuery.or(predicateResult) : predicateResult\n } else {\n subQuery = subQuery ? subQuery.and(predicateResult) : predicateResult\n }\n }\n })\n })\n return subQuery || true\n })\n }\n\n // Sort\n if (query.orderBy) {\n if (isString(query.orderBy)) {\n query.orderBy = [\n [query.orderBy, 'asc']\n ]\n }\n for (var i = 0; i < query.orderBy.length; i++) {\n if (isString(query.orderBy[i])) {\n query.orderBy[i] = [query.orderBy[i], 'asc']\n }\n rql = (query.orderBy[i][1] || '').toUpperCase() === 'DESC' ? rql.orderBy(r.desc(query.orderBy[i][0])) : rql.orderBy(query.orderBy[i][0])\n }\n }\n\n // Offset\n if (query.skip) {\n rql = rql.skip(+query.skip)\n }\n\n // Limit\n if (query.limit) {\n rql = rql.limit(+query.limit)\n }\n\n return rql\n },\n\n waitForDb (opts) {\n const self = this\n opts || (opts = {})\n const db = isUndefined(opts.db) ? self.db : opts.db\n if (!self.databases[db]) {\n self.databases[db] = self.r.branch(\n self.r.dbList().contains(db),\n true,\n self.r.dbCreate(db)\n ).run()\n }\n return self.databases[db]\n },\n\n /**\n * Create a new record.\n *\n * @name RethinkDBAdapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The record to be created.\n * @param {Object} [opts] Configuration options.\n * @param {Object} [opts.insertOpts] Options to pass to r#insert.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {Object} [opts.runOpts] Options to pass to r#run.\n * @return {Promise}\n */\n create (mapper, props, opts) {\n const self = this\n let op\n props || (props = {})\n opts || (opts = {})\n\n return self.waitForTable(mapper, opts).then(function () {\n // beforeCreate lifecycle hook\n op = opts.op = 'beforeCreate'\n return resolve(self[op](mapper, props, opts))\n }).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = isUndefined(_props) ? props : _props\n const insertOpts = self.getOpt('insertOpts', opts)\n insertOpts.returnChanges = true\n return self.selectTable(mapper, opts).insert(props, insertOpts).run(self.getOpt('runOpts', opts))\n }).then(function (cursor) {\n self._handleErrors(cursor)\n let record\n if (cursor && cursor.changes && cursor.changes.length && cursor.changes[0].new_val) {\n record = cursor.changes[0].new_val\n }\n let response = new Response(record, cursor, 'create')\n response.created = record ? 1 : 0\n response = self.respond(response, opts)\n\n // afterCreate lifecycle hook\n op = opts.op = 'afterCreate'\n return resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Create multiple records in a single batch.\n *\n * @name RethinkDBAdapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The records to be created.\n * @param {Object} [opts] Configuration options.\n * @param {Object} [opts.insertOpts] Options to pass to r#insert.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {Object} [opts.runOpts] Options to pass to r#run.\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n const self = this\n let op\n props || (props = {})\n opts || (opts = {})\n\n return self.waitForTable(mapper, opts).then(function () {\n // beforeCreateMany lifecycle hook\n op = opts.op = 'beforeCreateMany'\n return resolve(self[op](mapper, props, opts))\n }).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = isUndefined(_props) ? props : _props\n const insertOpts = self.getOpt('insertOpts', opts)\n insertOpts.returnChanges = true\n _props = props.map(function (record) {\n return withoutRelations(mapper, record)\n })\n return self.selectTable(mapper, opts).insert(_props, insertOpts).run(self.getOpt('runOpts', opts))\n }).then(function (cursor) {\n self._handleErrors(cursor)\n let records = []\n if (cursor && cursor.changes && cursor.changes.length && cursor.changes) {\n records = cursor.changes.map(function (change) {\n return change.new_val\n })\n }\n let result = new Response(records, cursor, 'createMany')\n result.created = records.length\n result = self.getOpt('raw', opts) ? result : result.data\n\n // afterCreateMany lifecycle hook\n op = opts.op = 'afterCreateMany'\n return resolve(self[op](mapper, props, opts, result)).then(function (_result) {\n // Allow for re-assignment from lifecycle hook\n return isUndefined(_result) ? result : _result\n })\n })\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name RethinkDBAdapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {Object} [opts.deleteOpts] Options to pass to r#delete.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {Object} [opts.runOpts] Options to pass to r#run.\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n const self = this\n let op\n opts || (opts = {})\n\n return self.waitForTable(mapper, opts).then(function () {\n // beforeDestroy lifecycle hook\n op = opts.op = 'beforeDestroy'\n return resolve(self[op](mapper, id, opts))\n }).then(function () {\n op = opts.op = 'destroy'\n self.dbg(op, id, opts)\n return self.selectTable(mapper, opts).get(id).delete(self.getOpt('deleteOpts', opts)).run(self.getOpt('runOpts', opts))\n }).then(function (cursor) {\n let result = new Response(undefined, cursor, 'destroy')\n result = self.getOpt('raw', opts) ? result : undefined\n\n // afterDestroy lifecycle hook\n op = opts.op = 'afterDestroy'\n return resolve(self[op](mapper, id, opts, result)).then(function (_result) {\n // Allow for re-assignment from lifecycle hook\n return isUndefined(_result) ? result : _result\n })\n })\n },\n\n /**\n * Destroy the records that match the selection query.\n *\n * @name RethinkDBAdapter#destroyAll\n * @method\n * @param {Object} mapper the mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {Object} [opts.deleteOpts] Options to pass to r#delete.\n * @param {Object} [opts.operators] Override the default predicate functions\n * for specified operators.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {Object} [opts.runOpts] Options to pass to r#run.\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n const self = this\n let op\n query || (query = {})\n opts || (opts = {})\n\n return self.waitForTable(mapper, opts).then(function () {\n // beforeDestroyAll lifecycle hook\n op = opts.op = 'beforeDestroyAll'\n return resolve(self[op](mapper, query, opts))\n }).then(function () {\n op = opts.op = 'destroyAll'\n self.dbg(op, query, opts)\n return self\n .filterSequence(self.selectTable(mapper, opts), query)\n .delete(self.getOpt('deleteOpts', opts))\n .run(self.getOpt('runOpts', opts))\n }).then(function (cursor) {\n let result = new Response(undefined, cursor, 'destroyAll')\n result = self.getOpt('raw', opts) ? result : undefined\n\n // afterDestroyAll lifecycle hook\n op = opts.op = 'afterDestroyAll'\n return resolve(self[op](mapper, query, opts, result)).then(function (_result) {\n // Allow for re-assignment from lifecycle hook\n return isUndefined(_result) ? result : _result\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name RethinkDBAdapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {Object} [opts.runOpts] Options to pass to r#run.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n find (mapper, id, opts) {\n const self = this\n let record, op\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n const relationList = mapper.relationList || []\n let tasks = [self.waitForTable(mapper, opts)]\n\n relationList.forEach(function (def) {\n const relationName = def.relation\n const relationDef = def.getRelation()\n if (!opts.with || opts.with.indexOf(relationName) === -1) {\n return\n }\n if (def.foreignKey && def.type !== 'belongsTo') {\n if (def.type === 'belongsTo') {\n tasks.push(self.waitForIndex(mapper.table || underscore(mapper.name), def.foreignKey, opts))\n } else {\n tasks.push(self.waitForIndex(relationDef.table || underscore(relationDef.name), def.foreignKey, opts))\n }\n }\n })\n return Promise.all(tasks).then(function () {\n // beforeFind lifecycle hook\n op = opts.op = 'beforeFind'\n return resolve(self[op](mapper, id, opts))\n }).then(function () {\n op = opts.op = 'find'\n self.dbg(op, id, opts)\n return self.selectTable(mapper, opts).get(id).run(self.getOpt('runOpts', opts))\n }).then(function (_record) {\n if (!_record) {\n return\n }\n record = _record\n const tasks = []\n\n forEachRelation(mapper, opts, function (def, __opts) {\n const relatedMapper = def.getRelation()\n let task\n\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasOne') {\n task = self.loadHasOne(mapper, def, record, __opts)\n } else {\n task = self.loadHasMany(mapper, def, record, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n let localKeys = []\n let itemKeys = get(record, def.localKeys) || []\n itemKeys = isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n localKeys = localKeys.concat(itemKeys)\n task = self.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': unique(localKeys).filter(function (x) { return x })\n }\n }\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems)\n })\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.findAll(relatedMapper, {\n where: {\n [def.foreignKeys]: {\n 'contains': get(record, mapper.idAttribute)\n }\n }\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems)\n })\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, record, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n\n return Promise.all(tasks)\n }).then(function () {\n let result = new Response(record, {}, 'find')\n result.found = record ? 1 : 0\n result = self.getOpt('raw', opts) ? result : result.data\n\n // afterFind lifecycle hook\n op = opts.op = 'afterFind'\n return resolve(self[op](mapper, id, opts, result)).then(function (_result) {\n // Allow for re-assignment from lifecycle hook\n return isUndefined(_result) ? result : _result\n })\n })\n },\n\n /**\n * Retrieve the records that match the selection query.\n *\n * @name RethinkDBAdapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {Object} [opts.operators] Override the default predicate functions\n * for specified operators.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {Object} [opts.runOpts] Options to pass to r#run.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n const self = this\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n let records = []\n let op\n const relationList = mapper.relationList || []\n let tasks = [self.waitForTable(mapper, opts)]\n\n relationList.forEach(function (def) {\n const relationName = def.relation\n const relationDef = def.getRelation()\n if (!opts.with || opts.with.indexOf(relationName) === -1) {\n return\n }\n if (def.foreignKey && def.type !== 'belongsTo') {\n if (def.type === 'belongsTo') {\n tasks.push(self.waitForIndex(mapper.table || underscore(mapper.name), def.foreignKey, opts))\n } else {\n tasks.push(self.waitForIndex(relationDef.table || underscore(relationDef.name), def.foreignKey, opts))\n }\n }\n })\n return Promise.all(tasks).then(function () {\n // beforeFindAll lifecycle hook\n op = opts.op = 'beforeFindAll'\n return resolve(self[op](mapper, query, opts))\n }).then(function () {\n op = opts.op = 'findAll'\n self.dbg(op, query, opts)\n return self.filterSequence(self.selectTable(mapper, opts), query).run(self.getOpt('runOpts', opts))\n }).then(function (_records) {\n records = _records\n const tasks = []\n forEachRelation(mapper, opts, function (def, __opts) {\n const relatedMapper = def.getRelation()\n const idAttribute = mapper.idAttribute\n let task\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasMany') {\n task = self.loadHasMany(mapper, def, records, __opts)\n } else {\n task = self.loadHasOne(mapper, def, records, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n let localKeys = []\n records.forEach(function (item) {\n let itemKeys = item[def.localKeys] || []\n itemKeys = isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n localKeys = localKeys.concat(itemKeys)\n })\n task = self.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': unique(localKeys).filter(function (x) { return x })\n }\n }\n }, __opts).then(function (relatedItems) {\n records.forEach(function (item) {\n let attached = []\n let itemKeys = get(item, def.localKeys) || []\n itemKeys = isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n relatedItems.forEach(function (relatedItem) {\n if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) {\n attached.push(relatedItem)\n }\n })\n def.setLocalField(item, attached)\n })\n return relatedItems\n })\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.findAll(relatedMapper, {\n where: {\n [def.foreignKeys]: {\n 'isectNotEmpty': records.map(function (record) {\n return get(record, idAttribute)\n })\n }\n }\n }, __opts).then(function (relatedItems) {\n const foreignKeysField = def.foreignKeys\n records.forEach(function (record) {\n const _relatedItems = []\n const id = get(record, idAttribute)\n relatedItems.forEach(function (relatedItem) {\n const foreignKeys = get(relatedItems, foreignKeysField) || []\n if (foreignKeys.indexOf(id) !== -1) {\n _relatedItems.push(relatedItem)\n }\n })\n def.setLocalField(record, _relatedItems)\n })\n })\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, records, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n return Promise.all(tasks)\n }).then(function () {\n records || (records = [])\n let result = new Response(records, {}, 'findAll')\n result.found = records.length\n result = self.getOpt('raw', opts) ? result : result.data\n\n // afterFindAll lifecycle hook\n op = opts.op = 'afterFindAll'\n return resolve(self[op](mapper, query, opts, result)).then(function (_result) {\n // Allow for re-assignment from lifecycle hook\n return isUndefined(_result) ? result : _result\n })\n })\n },\n\n /**\n * Resolve the predicate function for the specified operator based on the\n * given options and this adapter's settings.\n *\n * @name RethinkDBAdapter#getOperator\n * @method\n * @param {string} operator The name of the operator.\n * @param {Object} [opts] Configuration options.\n * @param {Object} [opts.operators] Override the default predicate functions\n * for specified operators.\n * @return {*} The predicate function for the specified operator.\n */\n getOperator (operator, opts) {\n opts || (opts = {})\n opts.operators || (opts.operators = {})\n let ownOps = this.operators || {}\n return isUndefined(opts.operators[operator]) ? ownOps[operator] || OPERATORS[operator] : opts.operators[operator]\n },\n\n /**\n * Apply the given update to the record with the specified primary key.\n *\n * @name RethinkDBAdapter#update\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id The primary key of the record to be updated.\n * @param {Object} props The update to apply to the record.\n * @param {Object} [opts] Configuration options.\n * @param {Object} [opts.updateOpts] Options to pass to r#update.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {Object} [opts.runOpts] Options to pass to r#run.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n const self = this\n props || (props = {})\n opts || (opts = {})\n let op\n\n return self.waitForTable(mapper, opts).then(function () {\n // beforeUpdate lifecycle hook\n op = opts.op = 'beforeUpdate'\n return resolve(self[op](mapper, id, props, opts))\n }).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = isUndefined(_props) ? props : _props\n const updateOpts = self.getOpt('updateOpts', opts)\n updateOpts.returnChanges = true\n return self.selectTable(mapper, opts).get(id).update(withoutRelations(mapper, props), updateOpts).run(self.getOpt('runOpts', opts))\n }).then(function (cursor) {\n let record\n self._handleErrors(cursor)\n if (cursor && cursor.changes && cursor.changes.length && cursor.changes[0].new_val) {\n record = cursor.changes[0].new_val\n } else {\n throw new Error('Not Found')\n }\n let result = new Response(record, cursor, 'update')\n result.updated = 1\n result = self.getOpt('raw', opts) ? result : result.data\n\n // afterUpdate lifecycle hook\n op = opts.op = 'afterUpdate'\n return resolve(self[op](mapper, id, props, opts, result)).then(function (_result) {\n // Allow for re-assignment from lifecycle hook\n return isUndefined(_result) ? result : _result\n })\n })\n },\n\n /**\n * Apply the given update to all records that match the selection query.\n *\n * @name RethinkDBAdapter#updateAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The update to apply to the selected records.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {Object} [opts.operators] Override the default predicate functions\n * for specified operators.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {Object} [opts.runOpts] Options to pass to r#run.\n * @param {Object} [opts.updateOpts] Options to pass to r#update.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n const self = this\n props || (props = {})\n query || (query = {})\n opts || (opts = {})\n let op\n\n return self.waitForTable(mapper, opts).then(function () {\n // beforeUpdateAll lifecycle hook\n op = opts.op = 'beforeUpdateAll'\n return resolve(self[op](mapper, props, query, opts))\n }).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = isUndefined(_props) ? props : _props\n const updateOpts = self.getOpt('updateOpts', opts)\n updateOpts.returnChanges = true\n return self.filterSequence(self.selectTable(mapper, opts), query).update(withoutRelations(mapper, props), updateOpts).run(self.getOpt('runOpts', opts))\n }).then(function (cursor) {\n let records = []\n self._handleErrors(cursor)\n if (cursor && cursor.changes && cursor.changes.length) {\n records = cursor.changes.map(function (change) { return change.new_val })\n }\n let result = new Response(records, cursor, 'update')\n result.updated = records.length\n result = self.getOpt('raw', opts) ? result : result.data\n\n // afterUpdateAll lifecycle hook\n op = opts.op = 'afterUpdateAll'\n return resolve(self[op](mapper, props, query, opts, result)).then(function (_result) {\n // Allow for re-assignment from lifecycle hook\n return isUndefined(_result) ? result : _result\n })\n })\n },\n\n /**\n * Update the given records in a single batch.\n *\n * @name RethinkDBAdapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object[]} records The records to update.\n * @param {Object} [opts] Configuration options.\n * @param {Object} [opts.insertOpts] Options to pass to r#insert.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {Object} [opts.runOpts] Options to pass to r#run.\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n const self = this\n records || (records = [])\n opts || (opts = {})\n let op\n const idAttribute = mapper.idAttribute\n\n records = records.filter(function (record) {\n return get(record, idAttribute)\n })\n\n return self.waitForTable(mapper, opts).then(function () {\n // beforeUpdateMany lifecycle hook\n op = opts.op = 'beforeUpdateMany'\n return resolve(self[op](mapper, records, opts))\n }).then(function (_records) {\n // Allow for re-assignment from lifecycle hook\n _records = isUndefined(_records) ? records : _records\n const insertOpts = self.getOpt('insertOpts', opts)\n insertOpts.returnChanges = true\n insertOpts.conflict = 'update'\n _records = _records.map(function (record) {\n return withoutRelations(mapper, record)\n })\n return self.selectTable(mapper, opts).insert(_records, insertOpts).run(self.getOpt('runOpts', opts))\n }).then(function (cursor) {\n let updatedRecords\n self._handleErrors(cursor)\n if (cursor && cursor.changes && cursor.changes.length) {\n updatedRecords = cursor.changes.map(function (change) { return change.new_val })\n }\n let result = new Response(updatedRecords || [], cursor, 'update')\n result.updated = result.data.length\n result = self.getOpt('raw', opts) ? result : result.data\n\n // afterUpdateMany lifecycle hook\n op = opts.op = 'afterUpdateMany'\n return resolve(self[op](mapper, records, opts, result)).then(function (_result) {\n // Allow for re-assignment from lifecycle hook\n return isUndefined(_result) ? result : _result\n })\n })\n },\n\n waitForTable (mapper, options) {\n const table = isString(mapper) ? mapper : (mapper.table || underscore(mapper.name))\n options = options || {}\n let db = isUndefined(options.db) ? this.db : options.db\n return this.waitForDb(options).then(() => {\n this.tables[db] = this.tables[db] || {}\n if (!this.tables[db][table]) {\n this.tables[db][table] = this.r.branch(this.r.db(db).tableList().contains(table), true, this.r.db(db).tableCreate(table)).run()\n }\n return this.tables[db][table]\n })\n },\n\n waitForIndex (table, index, options) {\n options = options || {}\n let db = isUndefined(options.db) ? this.db : options.db\n return this.waitForDb(options).then(() => this.waitForTable(table, options)).then(() => {\n this.indices[db] = this.indices[db] || {}\n this.indices[db][table] = this.indices[db][table] || {}\n if (!this.tables[db][table][index]) {\n this.tables[db][table][index] = this.r.branch(this.r.db(db).table(table).indexList().contains(index), true, this.r.db(db).table(table).indexCreate(index)).run().then(() => {\n return this.r.db(db).table(table).indexWait(index).run()\n })\n }\n return this.tables[db][table][index]\n })\n }\n})\n\nRethinkDBAdapter.OPERATORS = OPERATORS\n"],"names":["utils","Adapter","reserved","Response"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"js-data-rethinkdb.js","sources":["../src/index.js"],"sourcesContent":["import {utils} from 'js-data'\nimport Adapter from 'js-data-adapter'\nimport {\n reserved,\n Response\n} from 'js-data-adapter'\nimport rethinkdbdash from 'rethinkdbdash'\nimport underscore from 'mout/string/underscore'\nimport unique from 'mout/array/unique'\n\nconst {\n addHiddenPropsToTarget,\n classCallCheck,\n extend,\n fillIn,\n forEachRelation,\n forOwn,\n get,\n isArray,\n isObject,\n isString,\n isUndefined,\n omit,\n plainCopy,\n resolve\n} = utils\n\nconst withoutRelations = function (mapper, props) {\n return omit(props, mapper.relationFields || [])\n}\n\nconst DEFAULTS = {\n /**\n * RethinkDB authorization key.\n *\n * @name RethinkDBAdapter#authKey\n * @type {string}\n */\n authKey: '',\n\n /**\n * Buffer size for connection pool.\n *\n * @name RethinkDBAdapter#bufferSize\n * @type {number}\n * @default 10\n */\n bufferSize: 10,\n\n /**\n * Default database.\n *\n * @name RethinkDBAdapter#db\n * @type {string}\n * @default \"test\"\n */\n db: 'test',\n\n /**\n * RethinkDB host.\n *\n * @name RethinkDBAdapter#host\n * @type {string}\n * @default \"localhost\"\n */\n host: 'localhost',\n\n /**\n * Minimum connections in pool.\n *\n * @name RethinkDBAdapter#min\n * @type {number}\n * @default 10\n */\n min: 10,\n\n /**\n * Maximum connections in pool.\n *\n * @name RethinkDBAdapter#max\n * @type {number}\n * @default 50\n */\n max: 50,\n\n /**\n * RethinkDB port.\n *\n * @name RethinkDBAdapter#port\n * @type {number}\n * @default 10\n */\n port: 28015\n}\n\nconst INSERT_OPTS_DEFAULTS = {}\nconst UPDATE_OPTS_DEFAULTS = {}\nconst DELETE_OPTS_DEFAULTS = {}\nconst RUN_OPTS_DEFAULTS = {}\n\nconst equal = function (r, row, field, value) {\n return row(field).default(null).eq(value)\n}\n\nconst notEqual = function (r, row, field, value) {\n return row(field).default(null).ne(value)\n}\n\n/**\n * Default predicate functions for the filtering operators.\n *\n * @name RethinkDBAdapter.OPERATORS\n * @property {Function} == Equality operator.\n * @property {Function} != Inequality operator.\n * @property {Function} > \"Greater than\" operator.\n * @property {Function} >= \"Greater than or equal to\" operator.\n * @property {Function} < \"Less than\" operator.\n * @property {Function} <= \"Less than or equal to\" operator.\n * @property {Function} isectEmpty Operator to test that the intersection\n * between two arrays is empty.\n * @property {Function} isectNotEmpty Operator to test that the intersection\n * between two arrays is NOT empty.\n * @property {Function} in Operator to test whether a value is found in the\n * provided array.\n * @property {Function} notIn Operator to test whether a value is NOT found in\n * the provided array.\n * @property {Function} contains Operator to test whether an array contains the\n * provided value.\n * @property {Function} notContains Operator to test whether an array does NOT\n * contain the provided value.\n */\nconst OPERATORS = {\n '==': equal,\n '===': equal,\n '!=': notEqual,\n '!==': notEqual,\n '>': function (r, row, field, value) {\n return row(field).default(null).gt(value)\n },\n '>=': function (r, row, field, value) {\n return row(field).default(null).ge(value)\n },\n '<': function (r, row, field, value) {\n return row(field).default(null).lt(value)\n },\n '<=': function (r, row, field, value) {\n return row(field).default(null).le(value)\n },\n 'isectEmpty': function (r, row, field, value) {\n return row(field).default([]).setIntersection(r.expr(value).default([])).count().eq(0)\n },\n 'isectNotEmpty': function (r, row, field, value) {\n return row(field).default([]).setIntersection(r.expr(value).default([])).count().ne(0)\n },\n 'in': function (r, row, field, value) {\n return r.expr(value).default(r.expr([])).contains(row(field).default(null))\n },\n 'notIn': function (r, row, field, value) {\n return r.expr(value).default(r.expr([])).contains(row(field).default(null)).not()\n },\n 'contains': function (r, row, field, value) {\n return row(field).default([]).contains(value)\n },\n 'notContains': function (r, row, field, value) {\n return row(field).default([]).contains(value).not()\n }\n}\n\n/**\n * RethinkDBAdapter class.\n *\n * @example\n * // Use Container instead of DataStore on the server\n * import {Container} from 'js-data'\n * import RethinkdbDBAdapter from 'js-data-rethinkdb'\n *\n * // Create a store to hold your Mappers\n * const store = new Container()\n *\n * // Create an instance of RethinkdbDBAdapter with default settings\n * const adapter = new RethinkdbDBAdapter()\n *\n * // Mappers in \"store\" will use the RethinkDB adapter by default\n * store.registerAdapter('rethinkdb', adapter, { default: true })\n *\n * // Create a Mapper that maps to a \"user\" table\n * store.defineMapper('user')\n *\n * @class RethinkDBAdapter\n * @extends Adapter\n * @param {Object} [opts] Configuration opts.\n * @param {string} [opts.authKey=\"\"] RethinkDB authorization key.\n * @param {number} [opts.bufferSize=10] Buffer size for connection pool.\n * @param {string} [opts.db=\"test\"] Default database.\n * @param {boolean} [opts.debug=false] Whether to log debugging information.\n * @param {string} [opts.host=\"localhost\"] RethinkDB host.\n * @param {number} [opts.max=50] Maximum connections in pool.\n * @param {number} [opts.min=10] Minimum connections in pool.\n * @param {Object} [opts.operators] Override the default predicate functions for\n * specified operators.\n * @param {number} [opts.port=28015] RethinkDB port.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed response object.\n */\nexport default function RethinkDBAdapter (opts) {\n const self = this\n classCallCheck(self, RethinkDBAdapter)\n opts || (opts = {})\n fillIn(opts, DEFAULTS)\n Adapter.call(self, opts)\n\n /**\n * Default options to pass to r#insert.\n *\n * @name RethinkDBAdapter#insertOpts\n * @type {Object}\n * @default {}\n */\n self.insertOpts || (self.insertOpts = {})\n fillIn(self.insertOpts, INSERT_OPTS_DEFAULTS)\n\n /**\n * Default options to pass to r#update.\n *\n * @name RethinkDBAdapter#updateOpts\n * @type {Object}\n * @default {}\n */\n self.updateOpts || (self.updateOpts = {})\n fillIn(self.updateOpts, UPDATE_OPTS_DEFAULTS)\n\n /**\n * Default options to pass to r#delete.\n *\n * @name RethinkDBAdapter#deleteOpts\n * @type {Object}\n * @default {}\n */\n self.deleteOpts || (self.deleteOpts = {})\n fillIn(self.deleteOpts, DELETE_OPTS_DEFAULTS)\n\n /**\n * Default options to pass to r#run.\n *\n * @name RethinkDBAdapter#runOpts\n * @type {Object}\n * @default {}\n */\n self.runOpts || (self.runOpts = {})\n fillIn(self.runOpts, RUN_OPTS_DEFAULTS)\n\n /**\n * Override the default predicate functions for specified operators.\n *\n * @name RethinkDBAdapter#operators\n * @type {Object}\n * @default {}\n */\n self.operators || (self.operators = {})\n\n /**\n * The rethinkdbdash instance used by this adapter. Use this directly when you\n * need to write custom queries.\n *\n * @name RethinkDBAdapter#r\n * @type {Object}\n */\n self.r = rethinkdbdash(opts)\n self.databases = {}\n self.tables = {}\n self.indices = {}\n}\n\n// Setup prototype inheritance from Adapter\nRethinkDBAdapter.prototype = Object.create(Adapter.prototype, {\n constructor: {\n value: RethinkDBAdapter,\n enumerable: false,\n writable: true,\n configurable: true\n }\n})\n\nObject.defineProperty(RethinkDBAdapter, '__super__', {\n configurable: true,\n value: Adapter\n})\n\n/**\n * Alternative to ES6 class syntax for extending `RethinkDBAdapter`.\n *\n * @name RethinkDBAdapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the RethinkDBAdapter.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the RethinkDBAdapter itself.\n * @return {Object} RethinkDBAdapter of `RethinkDBAdapter`.\n */\nRethinkDBAdapter.extend = extend\n\naddHiddenPropsToTarget(RethinkDBAdapter.prototype, {\n _handleErrors (cursor) {\n if (cursor && cursor.errors > 0) {\n if (cursor.first_error) {\n throw new Error(cursor.first_error)\n }\n throw new Error('Unknown RethinkDB Error')\n }\n },\n\n selectDb (opts) {\n return this.r.db(isUndefined(opts.db) ? this.db : opts.db)\n },\n\n selectTable (mapper, opts) {\n return this.selectDb(opts).table(mapper.table || underscore(mapper.name))\n },\n\n /**\n * Apply the specified selection query to the provided RQL sequence.\n *\n * @name RethinkDBAdapter#filterSequence\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {Object} [opts.operators] Override the default predicate functions\n * for specified operators.\n */\n filterSequence (sequence, query, opts) {\n const self = this\n const r = self.r\n\n query = plainCopy(query || {})\n opts || (opts = {})\n opts.operators || (opts.operators = {})\n query.where || (query.where = {})\n query.orderBy || (query.orderBy = query.sort)\n query.orderBy || (query.orderBy = [])\n query.skip || (query.skip = query.offset)\n\n // Transform non-keyword properties to \"where\" clause configuration\n forOwn(query, function (config, keyword) {\n if (reserved.indexOf(keyword) === -1) {\n if (isObject(config)) {\n query.where[keyword] = config\n } else {\n query.where[keyword] = {\n '==': config\n }\n }\n delete query[keyword]\n }\n })\n\n let rql = sequence\n\n // Filter\n if (Object.keys(query.where).length !== 0) {\n // Filter sequence using filter function\n rql = rql.filter(function (row) {\n let subQuery\n // Apply filter for each field\n forOwn(query.where, function (criteria, field) {\n if (!isObject(criteria)) {\n criteria = { '==': criteria }\n }\n // Apply filter for each operator\n forOwn(criteria, function (value, operator) {\n let isOr = false\n if (operator && operator[0] === '|') {\n operator = operator.substr(1)\n isOr = true\n }\n let predicateFn = self.getOperator(operator, opts)\n if (predicateFn) {\n const predicateResult = predicateFn(r, row, field, value)\n if (isOr) {\n subQuery = subQuery ? subQuery.or(predicateResult) : predicateResult\n } else {\n subQuery = subQuery ? subQuery.and(predicateResult) : predicateResult\n }\n }\n })\n })\n return subQuery || true\n })\n }\n\n // Sort\n if (query.orderBy) {\n if (isString(query.orderBy)) {\n query.orderBy = [\n [query.orderBy, 'asc']\n ]\n }\n for (var i = 0; i < query.orderBy.length; i++) {\n if (isString(query.orderBy[i])) {\n query.orderBy[i] = [query.orderBy[i], 'asc']\n }\n rql = (query.orderBy[i][1] || '').toUpperCase() === 'DESC' ? rql.orderBy(r.desc(query.orderBy[i][0])) : rql.orderBy(query.orderBy[i][0])\n }\n }\n\n // Offset\n if (query.skip) {\n rql = rql.skip(+query.skip)\n }\n\n // Limit\n if (query.limit) {\n rql = rql.limit(+query.limit)\n }\n\n return rql\n },\n\n waitForDb (opts) {\n const self = this\n opts || (opts = {})\n const db = isUndefined(opts.db) ? self.db : opts.db\n if (!self.databases[db]) {\n self.databases[db] = self.r.branch(\n self.r.dbList().contains(db),\n true,\n self.r.dbCreate(db)\n ).run()\n }\n return self.databases[db]\n },\n\n /**\n * Create a new record.\n *\n * @name RethinkDBAdapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The record to be created.\n * @param {Object} [opts] Configuration options.\n * @param {Object} [opts.insertOpts] Options to pass to r#insert.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {Object} [opts.runOpts] Options to pass to r#run.\n * @return {Promise}\n */\n create (mapper, props, opts) {\n const self = this\n let op\n props || (props = {})\n opts || (opts = {})\n\n return self.waitForTable(mapper, opts).then(function () {\n // beforeCreate lifecycle hook\n op = opts.op = 'beforeCreate'\n return resolve(self[op](mapper, props, opts))\n }).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = isUndefined(_props) ? props : _props\n const insertOpts = self.getOpt('insertOpts', opts)\n insertOpts.returnChanges = true\n return self.selectTable(mapper, opts).insert(props, insertOpts).run(self.getOpt('runOpts', opts))\n }).then(function (cursor) {\n self._handleErrors(cursor)\n let record\n if (cursor && cursor.changes && cursor.changes.length && cursor.changes[0].new_val) {\n record = cursor.changes[0].new_val\n }\n let response = new Response(record, cursor, 'create')\n response.created = record ? 1 : 0\n response = self.respond(response, opts)\n\n // afterCreate lifecycle hook\n op = opts.op = 'afterCreate'\n return resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Create multiple records in a single batch.\n *\n * @name RethinkDBAdapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The records to be created.\n * @param {Object} [opts] Configuration options.\n * @param {Object} [opts.insertOpts] Options to pass to r#insert.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {Object} [opts.runOpts] Options to pass to r#run.\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n const self = this\n let op\n props || (props = {})\n opts || (opts = {})\n\n return self.waitForTable(mapper, opts).then(function () {\n // beforeCreateMany lifecycle hook\n op = opts.op = 'beforeCreateMany'\n return resolve(self[op](mapper, props, opts))\n }).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = isUndefined(_props) ? props : _props\n const insertOpts = self.getOpt('insertOpts', opts)\n insertOpts.returnChanges = true\n _props = props.map(function (record) {\n return withoutRelations(mapper, record)\n })\n return self.selectTable(mapper, opts).insert(_props, insertOpts).run(self.getOpt('runOpts', opts))\n }).then(function (cursor) {\n self._handleErrors(cursor)\n let records = []\n if (cursor && cursor.changes && cursor.changes.length && cursor.changes) {\n records = cursor.changes.map(function (change) {\n return change.new_val\n })\n }\n let result = new Response(records, cursor, 'createMany')\n result.created = records.length\n result = self.getOpt('raw', opts) ? result : result.data\n\n // afterCreateMany lifecycle hook\n op = opts.op = 'afterCreateMany'\n return resolve(self[op](mapper, props, opts, result)).then(function (_result) {\n // Allow for re-assignment from lifecycle hook\n return isUndefined(_result) ? result : _result\n })\n })\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name RethinkDBAdapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {Object} [opts.deleteOpts] Options to pass to r#delete.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {Object} [opts.runOpts] Options to pass to r#run.\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n const self = this\n let op\n opts || (opts = {})\n\n return self.waitForTable(mapper, opts).then(function () {\n // beforeDestroy lifecycle hook\n op = opts.op = 'beforeDestroy'\n return resolve(self[op](mapper, id, opts))\n }).then(function () {\n op = opts.op = 'destroy'\n self.dbg(op, id, opts)\n return self.selectTable(mapper, opts).get(id).delete(self.getOpt('deleteOpts', opts)).run(self.getOpt('runOpts', opts))\n }).then(function (cursor) {\n let result = new Response(undefined, cursor, 'destroy')\n result = self.getOpt('raw', opts) ? result : undefined\n\n // afterDestroy lifecycle hook\n op = opts.op = 'afterDestroy'\n return resolve(self[op](mapper, id, opts, result)).then(function (_result) {\n // Allow for re-assignment from lifecycle hook\n return isUndefined(_result) ? result : _result\n })\n })\n },\n\n /**\n * Destroy the records that match the selection query.\n *\n * @name RethinkDBAdapter#destroyAll\n * @method\n * @param {Object} mapper the mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {Object} [opts.deleteOpts] Options to pass to r#delete.\n * @param {Object} [opts.operators] Override the default predicate functions\n * for specified operators.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {Object} [opts.runOpts] Options to pass to r#run.\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n const self = this\n let op\n query || (query = {})\n opts || (opts = {})\n\n return self.waitForTable(mapper, opts).then(function () {\n // beforeDestroyAll lifecycle hook\n op = opts.op = 'beforeDestroyAll'\n return resolve(self[op](mapper, query, opts))\n }).then(function () {\n op = opts.op = 'destroyAll'\n self.dbg(op, query, opts)\n return self\n .filterSequence(self.selectTable(mapper, opts), query)\n .delete(self.getOpt('deleteOpts', opts))\n .run(self.getOpt('runOpts', opts))\n }).then(function (cursor) {\n let result = new Response(undefined, cursor, 'destroyAll')\n result = self.getOpt('raw', opts) ? result : undefined\n\n // afterDestroyAll lifecycle hook\n op = opts.op = 'afterDestroyAll'\n return resolve(self[op](mapper, query, opts, result)).then(function (_result) {\n // Allow for re-assignment from lifecycle hook\n return isUndefined(_result) ? result : _result\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name RethinkDBAdapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {Object} [opts.runOpts] Options to pass to r#run.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n find (mapper, id, opts) {\n const self = this\n let record, op\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n const relationList = mapper.relationList || []\n let tasks = [self.waitForTable(mapper, opts)]\n\n relationList.forEach(function (def) {\n const relationName = def.relation\n const relationDef = def.getRelation()\n if (!opts.with || opts.with.indexOf(relationName) === -1) {\n return\n }\n if (def.foreignKey && def.type !== 'belongsTo') {\n if (def.type === 'belongsTo') {\n tasks.push(self.waitForIndex(mapper.table || underscore(mapper.name), def.foreignKey, opts))\n } else {\n tasks.push(self.waitForIndex(relationDef.table || underscore(relationDef.name), def.foreignKey, opts))\n }\n }\n })\n return Promise.all(tasks).then(function () {\n // beforeFind lifecycle hook\n op = opts.op = 'beforeFind'\n return resolve(self[op](mapper, id, opts))\n }).then(function () {\n op = opts.op = 'find'\n self.dbg(op, id, opts)\n return self.selectTable(mapper, opts).get(id).run(self.getOpt('runOpts', opts))\n }).then(function (_record) {\n if (!_record) {\n return\n }\n record = _record\n const tasks = []\n\n forEachRelation(mapper, opts, function (def, __opts) {\n const relatedMapper = def.getRelation()\n let task\n\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasOne') {\n task = self.loadHasOne(mapper, def, record, __opts)\n } else {\n task = self.loadHasMany(mapper, def, record, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n let localKeys = []\n let itemKeys = get(record, def.localKeys) || []\n itemKeys = isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n localKeys = localKeys.concat(itemKeys)\n task = self.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': unique(localKeys).filter(function (x) { return x })\n }\n }\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems)\n })\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.findAll(relatedMapper, {\n where: {\n [def.foreignKeys]: {\n 'contains': get(record, mapper.idAttribute)\n }\n }\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems)\n })\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, record, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n\n return Promise.all(tasks)\n }).then(function () {\n let result = new Response(record, {}, 'find')\n result.found = record ? 1 : 0\n result = self.getOpt('raw', opts) ? result : result.data\n\n // afterFind lifecycle hook\n op = opts.op = 'afterFind'\n return resolve(self[op](mapper, id, opts, result)).then(function (_result) {\n // Allow for re-assignment from lifecycle hook\n return isUndefined(_result) ? result : _result\n })\n })\n },\n\n /**\n * Retrieve the records that match the selection query.\n *\n * @name RethinkDBAdapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {Object} [opts.operators] Override the default predicate functions\n * for specified operators.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {Object} [opts.runOpts] Options to pass to r#run.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n const self = this\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n let records = []\n let op\n const relationList = mapper.relationList || []\n let tasks = [self.waitForTable(mapper, opts)]\n\n relationList.forEach(function (def) {\n const relationName = def.relation\n const relationDef = def.getRelation()\n if (!opts.with || opts.with.indexOf(relationName) === -1) {\n return\n }\n if (def.foreignKey && def.type !== 'belongsTo') {\n if (def.type === 'belongsTo') {\n tasks.push(self.waitForIndex(mapper.table || underscore(mapper.name), def.foreignKey, opts))\n } else {\n tasks.push(self.waitForIndex(relationDef.table || underscore(relationDef.name), def.foreignKey, opts))\n }\n }\n })\n return Promise.all(tasks).then(function () {\n // beforeFindAll lifecycle hook\n op = opts.op = 'beforeFindAll'\n return resolve(self[op](mapper, query, opts))\n }).then(function () {\n op = opts.op = 'findAll'\n self.dbg(op, query, opts)\n return self.filterSequence(self.selectTable(mapper, opts), query).run(self.getOpt('runOpts', opts))\n }).then(function (_records) {\n records = _records\n const tasks = []\n forEachRelation(mapper, opts, function (def, __opts) {\n const relatedMapper = def.getRelation()\n const idAttribute = mapper.idAttribute\n let task\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasMany') {\n task = self.loadHasMany(mapper, def, records, __opts)\n } else {\n task = self.loadHasOne(mapper, def, records, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n let localKeys = []\n records.forEach(function (item) {\n let itemKeys = item[def.localKeys] || []\n itemKeys = isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n localKeys = localKeys.concat(itemKeys)\n })\n task = self.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': unique(localKeys).filter(function (x) { return x })\n }\n }\n }, __opts).then(function (relatedItems) {\n records.forEach(function (item) {\n let attached = []\n let itemKeys = get(item, def.localKeys) || []\n itemKeys = isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n relatedItems.forEach(function (relatedItem) {\n if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) {\n attached.push(relatedItem)\n }\n })\n def.setLocalField(item, attached)\n })\n return relatedItems\n })\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.findAll(relatedMapper, {\n where: {\n [def.foreignKeys]: {\n 'isectNotEmpty': records.map(function (record) {\n return get(record, idAttribute)\n })\n }\n }\n }, __opts).then(function (relatedItems) {\n const foreignKeysField = def.foreignKeys\n records.forEach(function (record) {\n const _relatedItems = []\n const id = get(record, idAttribute)\n relatedItems.forEach(function (relatedItem) {\n const foreignKeys = get(relatedItems, foreignKeysField) || []\n if (foreignKeys.indexOf(id) !== -1) {\n _relatedItems.push(relatedItem)\n }\n })\n def.setLocalField(record, _relatedItems)\n })\n })\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, records, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n return Promise.all(tasks)\n }).then(function () {\n records || (records = [])\n let result = new Response(records, {}, 'findAll')\n result.found = records.length\n result = self.getOpt('raw', opts) ? result : result.data\n\n // afterFindAll lifecycle hook\n op = opts.op = 'afterFindAll'\n return resolve(self[op](mapper, query, opts, result)).then(function (_result) {\n // Allow for re-assignment from lifecycle hook\n return isUndefined(_result) ? result : _result\n })\n })\n },\n\n /**\n * Resolve the predicate function for the specified operator based on the\n * given options and this adapter's settings.\n *\n * @name RethinkDBAdapter#getOperator\n * @method\n * @param {string} operator The name of the operator.\n * @param {Object} [opts] Configuration options.\n * @param {Object} [opts.operators] Override the default predicate functions\n * for specified operators.\n * @return {*} The predicate function for the specified operator.\n */\n getOperator (operator, opts) {\n opts || (opts = {})\n opts.operators || (opts.operators = {})\n let ownOps = this.operators || {}\n return isUndefined(opts.operators[operator]) ? ownOps[operator] || OPERATORS[operator] : opts.operators[operator]\n },\n\n /**\n * Apply the given update to the record with the specified primary key.\n *\n * @name RethinkDBAdapter#update\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id The primary key of the record to be updated.\n * @param {Object} props The update to apply to the record.\n * @param {Object} [opts] Configuration options.\n * @param {Object} [opts.updateOpts] Options to pass to r#update.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {Object} [opts.runOpts] Options to pass to r#run.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n const self = this\n props || (props = {})\n opts || (opts = {})\n let op\n\n return self.waitForTable(mapper, opts).then(function () {\n // beforeUpdate lifecycle hook\n op = opts.op = 'beforeUpdate'\n return resolve(self[op](mapper, id, props, opts))\n }).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = isUndefined(_props) ? props : _props\n const updateOpts = self.getOpt('updateOpts', opts)\n updateOpts.returnChanges = true\n return self.selectTable(mapper, opts).get(id).update(withoutRelations(mapper, props), updateOpts).run(self.getOpt('runOpts', opts))\n }).then(function (cursor) {\n let record\n self._handleErrors(cursor)\n if (cursor && cursor.changes && cursor.changes.length && cursor.changes[0].new_val) {\n record = cursor.changes[0].new_val\n } else {\n throw new Error('Not Found')\n }\n let result = new Response(record, cursor, 'update')\n result.updated = 1\n result = self.getOpt('raw', opts) ? result : result.data\n\n // afterUpdate lifecycle hook\n op = opts.op = 'afterUpdate'\n return resolve(self[op](mapper, id, props, opts, result)).then(function (_result) {\n // Allow for re-assignment from lifecycle hook\n return isUndefined(_result) ? result : _result\n })\n })\n },\n\n /**\n * Apply the given update to all records that match the selection query.\n *\n * @name RethinkDBAdapter#updateAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The update to apply to the selected records.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {Object} [opts.operators] Override the default predicate functions\n * for specified operators.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {Object} [opts.runOpts] Options to pass to r#run.\n * @param {Object} [opts.updateOpts] Options to pass to r#update.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n const self = this\n props || (props = {})\n query || (query = {})\n opts || (opts = {})\n let op\n\n return self.waitForTable(mapper, opts).then(function () {\n // beforeUpdateAll lifecycle hook\n op = opts.op = 'beforeUpdateAll'\n return resolve(self[op](mapper, props, query, opts))\n }).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = isUndefined(_props) ? props : _props\n const updateOpts = self.getOpt('updateOpts', opts)\n updateOpts.returnChanges = true\n return self.filterSequence(self.selectTable(mapper, opts), query).update(withoutRelations(mapper, props), updateOpts).run(self.getOpt('runOpts', opts))\n }).then(function (cursor) {\n let records = []\n self._handleErrors(cursor)\n if (cursor && cursor.changes && cursor.changes.length) {\n records = cursor.changes.map(function (change) { return change.new_val })\n }\n let result = new Response(records, cursor, 'update')\n result.updated = records.length\n result = self.getOpt('raw', opts) ? result : result.data\n\n // afterUpdateAll lifecycle hook\n op = opts.op = 'afterUpdateAll'\n return resolve(self[op](mapper, props, query, opts, result)).then(function (_result) {\n // Allow for re-assignment from lifecycle hook\n return isUndefined(_result) ? result : _result\n })\n })\n },\n\n /**\n * Update the given records in a single batch.\n *\n * @name RethinkDBAdapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object[]} records The records to update.\n * @param {Object} [opts] Configuration options.\n * @param {Object} [opts.insertOpts] Options to pass to r#insert.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {Object} [opts.runOpts] Options to pass to r#run.\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n const self = this\n records || (records = [])\n opts || (opts = {})\n let op\n const idAttribute = mapper.idAttribute\n\n records = records.filter(function (record) {\n return get(record, idAttribute)\n })\n\n return self.waitForTable(mapper, opts).then(function () {\n // beforeUpdateMany lifecycle hook\n op = opts.op = 'beforeUpdateMany'\n return resolve(self[op](mapper, records, opts))\n }).then(function (_records) {\n // Allow for re-assignment from lifecycle hook\n _records = isUndefined(_records) ? records : _records\n const insertOpts = self.getOpt('insertOpts', opts)\n insertOpts.returnChanges = true\n insertOpts.conflict = 'update'\n _records = _records.map(function (record) {\n return withoutRelations(mapper, record)\n })\n return self.selectTable(mapper, opts).insert(_records, insertOpts).run(self.getOpt('runOpts', opts))\n }).then(function (cursor) {\n let updatedRecords\n self._handleErrors(cursor)\n if (cursor && cursor.changes && cursor.changes.length) {\n updatedRecords = cursor.changes.map(function (change) { return change.new_val })\n }\n let result = new Response(updatedRecords || [], cursor, 'update')\n result.updated = result.data.length\n result = self.getOpt('raw', opts) ? result : result.data\n\n // afterUpdateMany lifecycle hook\n op = opts.op = 'afterUpdateMany'\n return resolve(self[op](mapper, records, opts, result)).then(function (_result) {\n // Allow for re-assignment from lifecycle hook\n return isUndefined(_result) ? result : _result\n })\n })\n },\n\n waitForTable (mapper, options) {\n const table = isString(mapper) ? mapper : (mapper.table || underscore(mapper.name))\n options = options || {}\n let db = isUndefined(options.db) ? this.db : options.db\n return this.waitForDb(options).then(() => {\n this.tables[db] = this.tables[db] || {}\n if (!this.tables[db][table]) {\n this.tables[db][table] = this.r.branch(this.r.db(db).tableList().contains(table), true, this.r.db(db).tableCreate(table)).run()\n }\n return this.tables[db][table]\n })\n },\n\n waitForIndex (table, index, options) {\n options = options || {}\n let db = isUndefined(options.db) ? this.db : options.db\n return this.waitForDb(options).then(() => this.waitForTable(table, options)).then(() => {\n this.indices[db] = this.indices[db] || {}\n this.indices[db][table] = this.indices[db][table] || {}\n if (!this.tables[db][table][index]) {\n this.tables[db][table][index] = this.r.branch(this.r.db(db).table(table).indexList().contains(index), true, this.r.db(db).table(table).indexCreate(index)).run().then(() => {\n return this.r.db(db).table(table).indexWait(index).run()\n })\n }\n return this.tables[db][table][index]\n })\n }\n})\n\nRethinkDBAdapter.OPERATORS = OPERATORS\n"],"names":["utils","Adapter","reserved","Response"],"mappings":"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"} \ No newline at end of file diff --git a/package.json b/package.json index 7081612..b41d523 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "js-data-rethinkdb", "description": "RethinkDB adapter for js-data.", - "version": "3.0.0-alpha.8", + "version": "3.0.0-alpha.9", "homepage": "https://github.com/js-data/js-data-rethinkdb", "repository": { "type": "git", @@ -46,7 +46,7 @@ "ci": "npm run test && cat coverage/lcov.info | coveralls || true && cat ./coverage/lcov.info | codacy-coverage || true" }, "dependencies": { - "js-data-adapter": "0.1.0", + "js-data-adapter": "0.1.2", "mout": "0.12.0" }, "peerDependencies": { diff --git a/src/index.js b/src/index.js index 6e80313..7f53900 100644 --- a/src/index.js +++ b/src/index.js @@ -56,15 +56,6 @@ const DEFAULTS = { */ db: 'test', - /** - * Whether to log debugging information. - * - * @name RethinkDBAdapter#debug - * @type {boolean} - * @default false - */ - debug: false, - /** * RethinkDB host. * @@ -99,16 +90,7 @@ const DEFAULTS = { * @type {number} * @default 10 */ - port: 28015, - - /** - * Whether to return a more detailed response object. - * - * @name RethinkDBAdapter#raw - * @type {boolean} - * @default false - */ - raw: false + port: 28015 } const INSERT_OPTS_DEFAULTS = {} @@ -224,7 +206,7 @@ export default function RethinkDBAdapter (opts) { classCallCheck(self, RethinkDBAdapter) opts || (opts = {}) fillIn(opts, DEFAULTS) - Adapter.call(this, opts) + Adapter.call(self, opts) /** * Default options to pass to r#insert.