diff --git a/dist/js-data-rethinkdb.js b/dist/js-data-rethinkdb.js index d97db94..02ee664 100644 --- a/dist/js-data-rethinkdb.js +++ b/dist/js-data-rethinkdb.js @@ -9,6 +9,210 @@ var jsDataAdapter = require('js-data-adapter'); var rethinkdbdash = _interopDefault(require('rethinkdbdash')); var underscore = _interopDefault(require('mout/string/underscore')); +var asyncGenerator = function () { + function AwaitValue(value) { + this.value = value; + } + + function AsyncGenerator(gen) { + var front, back; + + function send(key, arg) { + return new Promise(function (resolve, reject) { + var request = { + key: key, + arg: arg, + resolve: resolve, + reject: reject, + next: null + }; + + if (back) { + back = back.next = request; + } else { + front = back = request; + resume(key, arg); + } + }); + } + + function resume(key, arg) { + try { + var result = gen[key](arg); + var value = result.value; + + if (value instanceof AwaitValue) { + Promise.resolve(value.value).then(function (arg) { + resume("next", arg); + }, function (arg) { + resume("throw", arg); + }); + } else { + settle(result.done ? "return" : "normal", result.value); + } + } catch (err) { + settle("throw", err); + } + } + + function settle(type, value) { + switch (type) { + case "return": + front.resolve({ + value: value, + done: true + }); + break; + + case "throw": + front.reject(value); + break; + + default: + front.resolve({ + value: value, + done: false + }); + break; + } + + front = front.next; + + if (front) { + resume(front.key, front.arg); + } else { + back = null; + } + } + + this._invoke = send; + + if (typeof gen.return !== "function") { + this.return = undefined; + } + } + + if (typeof Symbol === "function" && Symbol.asyncIterator) { + AsyncGenerator.prototype[Symbol.asyncIterator] = function () { + return this; + }; + } + + AsyncGenerator.prototype.next = function (arg) { + return this._invoke("next", arg); + }; + + AsyncGenerator.prototype.throw = function (arg) { + return this._invoke("throw", arg); + }; + + AsyncGenerator.prototype.return = function (arg) { + return this._invoke("return", arg); + }; + + return { + wrap: function (fn) { + return function () { + return new AsyncGenerator(fn.apply(this, arguments)); + }; + }, + await: function (value) { + return new AwaitValue(value); + } + }; +}(); + + + + + + + + + + + + + + + +var get = function get(object, property, receiver) { + if (object === null) object = Function.prototype; + var desc = Object.getOwnPropertyDescriptor(object, property); + + if (desc === undefined) { + var parent = Object.getPrototypeOf(object); + + if (parent === null) { + return undefined; + } else { + return get(parent, property, receiver); + } + } else if ("value" in desc) { + return desc.value; + } else { + var getter = desc.get; + + if (getter === undefined) { + return undefined; + } + + return getter.call(receiver); + } +}; + + + + + + + + + + + + + + + + + +var set = function set(object, property, value, receiver) { + var desc = Object.getOwnPropertyDescriptor(object, property); + + if (desc === undefined) { + var parent = Object.getPrototypeOf(object); + + if (parent !== null) { + set(parent, property, value, receiver); + } + } else if ("value" in desc && desc.writable) { + desc.value = value; + } else { + var setter = desc.set; + + if (setter !== undefined) { + setter.call(receiver, value); + } + } + + return value; +}; + + + + + + + + + + + + + + + var toConsumableArray = function (arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; @@ -410,14 +614,14 @@ jsDataAdapter.Adapter.extend({ updateOpts.returnChanges = true; return this.selectTable(mapper, opts).get(id).update(props, updateOpts).run(this.getOpt('runOpts', opts)).then(function (cursor) { - var record = void 0; _this5._handleErrors(cursor); - if (cursor && cursor.changes && cursor.changes.length && cursor.changes[0].new_val) { - record = cursor.changes[0].new_val; - } else { + if (cursor.skipped) { throw new Error('Not Found'); + } else if (cursor && cursor.changes && cursor.changes.length && cursor.changes[0].new_val) { + return [cursor.changes[0].new_val, cursor]; + } else { + return _this5._find(mapper, id, opts); } - return [record, cursor]; }); }, _updateAll: function _updateAll(mapper, props, query, opts) { @@ -1095,12 +1299,98 @@ jsDataAdapter.Adapter.extend({ * otherwise `false` if the current version is not beta. */ var version = { - full: '3.0.0-rc.2', + full: '3.0.0-rc.3', major: 3, minor: 0, patch: 0 }; +/** + * {@link RethinkDBAdapter} class. + * + * @example ES2015 modules import + * import {RethinkDBAdapter} from 'js-data-rethinkdb' + * const adapter = new RethinkDBAdapter() + * + * @example CommonJS import + * var RethinkDBAdapter = require('js-data-rethinkdb').RethinkDBAdapter + * var adapter = new RethinkDBAdapter() + * + * @name module:js-data-rethinkdb.RethinkDBAdapter + * @see RethinkDBAdapter + * @type {Constructor} + */ + +/** + * Registered as `js-data-rethinkdb` in NPM. + * + * @example Install from NPM + * npm i --save js-data-rethinkdb@beta js-data@beta rethinkdbdash + * + * @example ES2015 modules import + * import {RethinkDBAdapter} from 'js-data-rethinkdb' + * const adapter = new RethinkDBAdapter() + * + * @example CommonJS import + * var RethinkDBAdapter = require('js-data-rethinkdb').RethinkDBAdapter + * var adapter = new RethinkDBAdapter() + * + * @module js-data-rethinkdb + */ + +/** + * Create a subclass of this RethinkDBAdapter: + * @example RethinkDBAdapter.extend + * // Normally you would do: import {RethinkDBAdapter} from 'js-data-rethinkdb' + * const JSDataRethinkDB = require('js-data-rethinkdb@3.0.0-beta.8') + * const {RethinkDBAdapter} = JSDataRethinkDB + * console.log('Using JSDataRethinkDB v' + JSDataRethinkDB.version.full) + * + * // Extend the class using ES2015 class syntax. + * class CustomRethinkDBAdapterClass extends RethinkDBAdapter { + * foo () { return 'bar' } + * static beep () { return 'boop' } + * } + * const customRethinkDBAdapter = new CustomRethinkDBAdapterClass() + * console.log(customRethinkDBAdapter.foo()) + * console.log(CustomRethinkDBAdapterClass.beep()) + * + * // Extend the class using alternate method. + * const OtherRethinkDBAdapterClass = RethinkDBAdapter.extend({ + * foo () { return 'bar' } + * }, { + * beep () { return 'boop' } + * }) + * const otherRethinkDBAdapter = new OtherRethinkDBAdapterClass() + * console.log(otherRethinkDBAdapter.foo()) + * console.log(OtherRethinkDBAdapterClass.beep()) + * + * // Extend the class, providing a custom constructor. + * function AnotherRethinkDBAdapterClass () { + * RethinkDBAdapter.call(this) + * this.created_at = new Date().getTime() + * } + * RethinkDBAdapter.extend({ + * constructor: AnotherRethinkDBAdapterClass, + * foo () { return 'bar' } + * }, { + * beep () { return 'boop' } + * }) + * const anotherRethinkDBAdapter = new AnotherRethinkDBAdapterClass() + * console.log(anotherRethinkDBAdapter.created_at) + * console.log(anotherRethinkDBAdapter.foo()) + * console.log(AnotherRethinkDBAdapterClass.beep()) + * + * @method RethinkDBAdapter.extend + * @param {object} [props={}] Properties to add to the prototype of the + * subclass. + * @param {object} [props.constructor] Provide a custom constructor function + * to be used as the subclass itself. + * @param {object} [classProps={}] Static properties to add to the subclass. + * @returns {Constructor} Subclass of this RethinkDBAdapter class. + * @since 3.0.0 + */ + exports.OPERATORS = OPERATORS; exports.RethinkDBAdapter = RethinkDBAdapter; exports.version = version; diff --git a/dist/js-data-rethinkdb.js.map b/dist/js-data-rethinkdb.js.map index a246c89..df3f089 100644 --- a/dist/js-data-rethinkdb.js.map +++ b/dist/js-data-rethinkdb.js.map @@ -1 +1 @@ -{"version":3,"file":null,"sources":["../src/index.js"],"sourcesContent":["import {utils} from 'js-data'\nimport {\n Adapter,\n reserved\n} from 'js-data-adapter'\nimport rethinkdbdash from 'rethinkdbdash'\nimport underscore from 'mout/string/underscore'\n\nconst __super__ = Adapter.prototype\n\nconst R_OPTS_DEFAULTS = {\n db: 'test'\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 module:js-data-rethinkdb.OPERATORS\n * @property {function} = Equality operator.\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 */\nexport const OPERATORS = {\n '=': equal,\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\nObject.freeze(OPERATORS)\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 {RethinkDBAdapter} from 'js-data-rethinkdb'\n *\n * // Create a store to hold your Mappers\n * const store = new Container()\n *\n * // Create an instance of RethinkDBAdapter with default settings\n * const adapter = new RethinkDBAdapter()\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 options.\n * @param {boolean} [opts.debug=false] See {@link Adapter#debug}.\n * @param {object} [opts.deleteOpts={}] See {@link RethinkDBAdapter#deleteOpts}.\n * @param {object} [opts.insertOpts={}] See {@link RethinkDBAdapter#insertOpts}.\n * @param {object} [opts.operators={@link module:js-data-rethinkdb.OPERATORS}] See {@link RethinkDBAdapter#operators}.\n * @param {object} [opts.r] See {@link RethinkDBAdapter#r}.\n * @param {boolean} [opts.raw=false] See {@link Adapter#raw}.\n * @param {object} [opts.rOpts={}] See {@link RethinkDBAdapter#rOpts}.\n * @param {object} [opts.runOpts={}] See {@link RethinkDBAdapter#runOpts}.\n * @param {object} [opts.updateOpts={}] See {@link RethinkDBAdapter#updateOpts}.\n */\nexport function RethinkDBAdapter (opts) {\n utils.classCallCheck(this, RethinkDBAdapter)\n opts || (opts = {})\n\n // Setup non-enumerable properties\n Object.defineProperties(this, {\n /**\n * The rethinkdbdash instance used by this adapter. Use this directly when\n * you need to write custom queries.\n *\n * @example Use default instance.\n * import {RethinkDBAdapter} from 'js-data-rethinkdb'\n * const adapter = new RethinkDBAdapter()\n * adapter.r.dbDrop('foo').then(...)\n *\n * @example Configure default instance.\n * import {RethinkDBAdapter} from 'js-data-rethinkdb'\n * const adapter = new RethinkDBAdapter({\n * rOpts: {\n * user: 'myUser',\n * password: 'myPassword'\n * }\n * })\n * adapter.r.dbDrop('foo').then(...)\n *\n * @example Provide a custom instance.\n * import rethinkdbdash from 'rethinkdbdash'\n * import {RethinkDBAdapter} from 'js-data-rethinkdb'\n * const r = rethinkdbdash()\n * const adapter = new RethinkDBAdapter({\n * r: r\n * })\n * adapter.r.dbDrop('foo').then(...)\n *\n * @name RethinkDBAdapter#r\n * @type {object}\n */\n r: {\n writable: true,\n value: undefined\n },\n databases: {\n value: {}\n },\n indices: {\n value: {}\n },\n tables: {\n value: {}\n }\n })\n\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 this.insertOpts || (this.insertOpts = {})\n utils.fillIn(this.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 this.updateOpts || (this.updateOpts = {})\n utils.fillIn(this.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 this.deleteOpts || (this.deleteOpts = {})\n utils.fillIn(this.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 this.runOpts || (this.runOpts = {})\n utils.fillIn(this.runOpts, RUN_OPTS_DEFAULTS)\n\n /**\n * Override the default predicate functions for the specified operators.\n *\n * @name RethinkDBAdapter#operators\n * @type {object}\n * @default {}\n */\n this.operators || (this.operators = {})\n utils.fillIn(this.operators, OPERATORS)\n\n /**\n * Options to pass to a new `rethinkdbdash` instance, if one was not provided\n * at {@link RethinkDBAdapter#r}. See the [rethinkdbdash README][readme] for\n * instance options.\n *\n * [readme]: https://github.com/neumino/rethinkdbdash#importing-the-driver\n *\n * @example Connect to localhost:8080, and let the driver find other instances.\n * import {RethinkDBAdapter} from 'js-data-rethinkdb'\n * const adapter = new RethinkDBAdapter({\n * rOpts: {\n * discovery: true\n * }\n * })\n *\n * @example Connect to and only to localhost:8080.\n * import {RethinkDBAdapter} from 'js-data-rethinkdb'\n * const adapter = new RethinkDBAdapter()\n *\n * @example Do not create a connection pool.\n * import {RethinkDBAdapter} from 'js-data-rethinkdb'\n * const adapter = new RethinkDBAdapter({\n * rOpts: {\n * pool: false\n * }\n * })\n *\n * @example Connect to a cluster seeding from `192.168.0.100`, `192.168.0.101`, `192.168.0.102`.\n * import {RethinkDBAdapter} from 'js-data-rethinkdb'\n * const adapter = new RethinkDBAdapter({\n * rOpts: {\n * servers: [\n * { host: '192.168.0.100', port: 28015 },\n * { host: '192.168.0.101', port: 28015 },\n * { host: '192.168.0.102', port: 28015 }\n * ]\n * }\n * })\n *\n * @name RethinkDBAdapter#rOpts\n * @see https://github.com/neumino/rethinkdbdash#importing-the-driver\n * @type {object}\n */\n this.rOpts || (this.rOpts = {})\n utils.fillIn(this.rOpts, R_OPTS_DEFAULTS)\n\n this.r || (this.r = rethinkdbdash(this.rOpts))\n}\n\nAdapter.extend({\n constructor: RethinkDBAdapter,\n\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 _count (mapper, query, opts) {\n opts || (opts = {})\n query || (query = {})\n\n return this.filterSequence(this.selectTable(mapper, opts), query)\n .count()\n .run(this.getOpt('runOpts', opts))\n .then((count) => [count, {}])\n },\n\n _create (mapper, props, opts) {\n props || (props = {})\n opts || (opts = {})\n\n const insertOpts = this.getOpt('insertOpts', opts)\n insertOpts.returnChanges = true\n\n return this.selectTable(mapper, opts)\n .insert(props, insertOpts)\n .run(this.getOpt('runOpts', opts))\n .then((cursor) => {\n this._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 return [record, cursor]\n })\n },\n\n _createMany (mapper, props, opts) {\n props || (props = {})\n opts || (opts = {})\n\n const insertOpts = this.getOpt('insertOpts', opts)\n insertOpts.returnChanges = true\n\n return this.selectTable(mapper, opts)\n .insert(props, insertOpts)\n .run(this.getOpt('runOpts', opts))\n .then((cursor) => {\n this._handleErrors(cursor)\n let records = []\n if (cursor && cursor.changes && cursor.changes.length && cursor.changes) {\n records = cursor.changes.map((change) => change.new_val)\n }\n return [records, cursor]\n })\n },\n\n _destroy (mapper, id, opts) {\n opts || (opts = {})\n\n return this.selectTable(mapper, opts)\n .get(id)\n .delete(this.getOpt('deleteOpts', opts))\n .run(this.getOpt('runOpts', opts))\n .then((cursor) => {\n this._handleErrors(cursor)\n return [undefined, cursor]\n })\n },\n\n _destroyAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n\n return this.filterSequence(this.selectTable(mapper, opts), query)\n .delete(this.getOpt('deleteOpts', opts))\n .run(this.getOpt('runOpts', opts))\n .then((cursor) => {\n this._handleErrors(cursor)\n return [undefined, cursor]\n })\n },\n\n _find (mapper, id, opts) {\n opts || (opts = {})\n\n return this._pluck(mapper, this.selectTable(mapper, opts).get(id), opts)\n .run(this.getOpt('runOpts', opts))\n .then((record) => [record, {}])\n },\n\n _findAll (mapper, query, opts) {\n opts || (opts = {})\n query || (query = {})\n\n return this._pluck(mapper, this.filterSequence(this.selectTable(mapper, opts), query), opts)\n .run(this.getOpt('runOpts', opts))\n .then((records) => [records, {}])\n },\n\n _pluck (mapper, rql, opts) {\n if (utils.isString(opts.fields)) {\n opts.fields = [opts.fields]\n }\n if (utils.isArray(opts.fields)) {\n return rql.pluck(...opts.fields)\n }\n return rql\n },\n\n _sum (mapper, field, query, opts) {\n if (!utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts || (opts = {})\n query || (query = {})\n\n return this.filterSequence(this.selectTable(mapper, opts), query)\n .sum(field)\n .run(this.getOpt('runOpts', opts))\n .then((sum) => [sum, {}])\n },\n\n _update (mapper, id, props, opts) {\n props || (props = {})\n opts || (opts = {})\n\n const updateOpts = this.getOpt('updateOpts', opts)\n updateOpts.returnChanges = true\n\n return this.selectTable(mapper, opts)\n .get(id)\n .update(props, updateOpts)\n .run(this.getOpt('runOpts', opts))\n .then((cursor) => {\n let record\n this._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 return [record, cursor]\n })\n },\n\n _updateAll (mapper, props, query, opts) {\n props || (props = {})\n query || (query = {})\n opts || (opts = {})\n\n const updateOpts = this.getOpt('updateOpts', opts)\n updateOpts.returnChanges = true\n\n return this.filterSequence(this.selectTable(mapper, opts), query)\n .update(props, updateOpts)\n .run(this.getOpt('runOpts', opts))\n .then((cursor) => {\n let records = []\n this._handleErrors(cursor)\n if (cursor && cursor.changes && cursor.changes.length) {\n records = cursor.changes.map((change) => change.new_val)\n }\n return [records, cursor]\n })\n },\n\n _updateMany (mapper, records, opts) {\n records || (records = [])\n opts || (opts = {})\n\n const insertOpts = this.getOpt('insertOpts', opts)\n insertOpts.returnChanges = true\n insertOpts.conflict = 'update'\n\n return this.selectTable(mapper, opts)\n .insert(records, insertOpts)\n .run(this.getOpt('runOpts', opts))\n .then((cursor) => {\n records = []\n this._handleErrors(cursor)\n if (cursor && cursor.changes && cursor.changes.length) {\n records = cursor.changes.map((change) => change.new_val)\n }\n return [records, cursor]\n })\n },\n\n _applyWhereFromObject (where) {\n const fields = []\n const ops = []\n const predicates = []\n utils.forOwn(where, (clause, field) => {\n if (!utils.isObject(clause)) {\n clause = {\n '==': clause\n }\n }\n utils.forOwn(clause, (expr, op) => {\n fields.push(field)\n ops.push(op)\n predicates.push(expr)\n })\n })\n return {\n fields,\n ops,\n predicates\n }\n },\n\n _applyWhereFromArray (where) {\n const groups = []\n where.forEach((_where, i) => {\n if (utils.isString(_where)) {\n return\n }\n const prev = where[i - 1]\n const parser = utils.isArray(_where) ? this._applyWhereFromArray : this._applyWhereFromObject\n const group = parser.call(this, _where)\n if (prev === 'or') {\n group.isOr = true\n }\n groups.push(group)\n })\n groups.isArray = true\n return groups\n },\n\n _testObjectGroup (rql, group, row, opts) {\n let i\n const r = this.r\n const fields = group.fields\n const ops = group.ops\n const predicates = group.predicates\n const len = ops.length\n for (i = 0; i < len; i++) {\n let op = ops[i]\n const isOr = op.charAt(0) === '|'\n op = isOr ? op.substr(1) : op\n const predicateFn = this.getOperator(op, opts)\n if (predicateFn) {\n const predicateResult = predicateFn(r, row, fields[i], predicates[i])\n if (isOr) {\n rql = rql ? rql.or(predicateResult) : predicateResult\n } else {\n rql = rql ? rql.and(predicateResult) : predicateResult\n }\n } else {\n throw new Error(`Operator ${op} not supported!`)\n }\n }\n return rql\n },\n\n _testArrayGroup (rql, groups, row, opts) {\n let i\n const len = groups.length\n for (i = 0; i < len; i++) {\n const group = groups[i]\n let subQuery\n if (group.isArray) {\n subQuery = this._testArrayGroup(rql, group, row, opts)\n } else {\n subQuery = this._testObjectGroup(null, group, row, opts)\n }\n if (groups[i - 1]) {\n if (group.isOr) {\n rql = rql.or(subQuery)\n } else {\n rql = rql.and(subQuery)\n }\n } else {\n rql = rql ? rql.and(subQuery) : subQuery\n }\n }\n return rql\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 r = this.r\n\n query = utils.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 utils.forOwn(query, (config, keyword) => {\n if (reserved.indexOf(keyword) === -1) {\n if (utils.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 let groups\n\n if (utils.isObject(query.where) && Object.keys(query.where).length !== 0) {\n groups = this._applyWhereFromArray([query.where])\n } else if (utils.isArray(query.where)) {\n groups = this._applyWhereFromArray(query.where)\n }\n\n if (groups) {\n rql = rql.filter((row) => this._testArrayGroup(null, groups, row, opts) || true)\n }\n\n // Sort\n if (query.orderBy) {\n if (utils.isString(query.orderBy)) {\n query.orderBy = [\n [query.orderBy, 'asc']\n ]\n }\n for (var i = 0; i < query.orderBy.length; i++) {\n if (utils.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 selectDb (opts) {\n return this.r.db(utils.isUndefined(opts.db) ? this.rOpts.db : opts.db)\n },\n\n selectTable (mapper, opts) {\n return this.selectDb(opts).table(mapper.table || underscore(mapper.name))\n },\n\n waitForDb (opts) {\n opts || (opts = {})\n const db = utils.isUndefined(opts.db) ? this.rOpts.db : opts.db\n if (!this.databases[db]) {\n this.databases[db] = this.r.branch(\n this.r.dbList().contains(db),\n true,\n this.r.dbCreate(db)\n ).run()\n }\n return this.databases[db]\n },\n\n waitForTable (mapper, opts) {\n opts || (opts = {})\n const table = utils.isString(mapper) ? mapper : (mapper.table || underscore(mapper.name))\n let db = utils.isUndefined(opts.db) ? this.rOpts.db : opts.db\n return this.waitForDb(opts).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, opts) {\n opts || (opts = {})\n let db = utils.isUndefined(opts.db) ? this.rOpts.db : opts.db\n return this.waitForDb(opts).then(() => this.waitForTable(table, opts)).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 /**\n * Return the number of records that match the selection query.\n *\n * @name RethinkDBAdapter#count\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 * @return {Promise}\n */\n count (mapper, query, opts) {\n opts || (opts = {})\n query || (query = {})\n\n return this.waitForTable(mapper, opts)\n .then(() => __super__.count.call(this, mapper, query, opts))\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 props || (props = {})\n opts || (opts = {})\n\n return this.waitForTable(mapper, opts)\n .then(() => __super__.create.call(this, mapper, props, opts))\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 props || (props = {})\n opts || (opts = {})\n\n return this.waitForTable(mapper, opts)\n .then(() => __super__.createMany.call(this, mapper, props, opts))\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 opts || (opts = {})\n\n return this.waitForTable(mapper, opts)\n .then(() => __super__.destroy.call(this, mapper, id, opts))\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 opts || (opts = {})\n query || (query = {})\n\n return this.waitForTable(mapper, opts)\n .then(() => __super__.destroyAll.call(this, mapper, query, opts))\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 {string[]} [opts.fields] Select a subset of fields to be returned.\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 opts || (opts = {})\n opts.with || (opts.with = [])\n\n const relationList = mapper.relationList || []\n let tasks = [this.waitForTable(mapper, opts)]\n\n relationList.forEach((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(this.waitForIndex(mapper.table || underscore(mapper.name), def.foreignKey, opts))\n } else {\n tasks.push(this.waitForIndex(relationDef.table || underscore(relationDef.name), def.foreignKey, opts))\n }\n }\n })\n return Promise.all(tasks).then(() => __super__.find.call(this, mapper, id, opts))\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 {string[]} [opts.fields] Select a subset of fields to be returned.\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 opts || (opts = {})\n opts.with || (opts.with = [])\n query || (query = {})\n\n const relationList = mapper.relationList || []\n let tasks = [this.waitForTable(mapper, opts)]\n\n relationList.forEach((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(this.waitForIndex(mapper.table || underscore(mapper.name), def.foreignKey, opts))\n } else {\n tasks.push(this.waitForIndex(relationDef.table || underscore(relationDef.name), def.foreignKey, opts))\n }\n }\n })\n return Promise.all(tasks).then(() => __super__.findAll.call(this, mapper, query, opts))\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 utils.isUndefined(opts.operators[operator]) ? ownOps[operator] : opts.operators[operator]\n },\n\n /**\n * Return the sum of the specified field of records that match the selection\n * query.\n *\n * @name RethinkDBAdapter#sum\n * @method\n * @param {object} mapper The mapper.\n * @param {string} field The field to sum.\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 * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n opts || (opts = {})\n query || (query = {})\n\n return this.waitForTable(mapper, opts)\n .then(() => __super__.sum.call(this, mapper, field, query, opts))\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 props || (props = {})\n opts || (opts = {})\n\n return this.waitForTable(mapper, opts)\n .then(() => __super__.update.call(this, mapper, id, props, opts))\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 props || (props = {})\n query || (query = {})\n opts || (opts = {})\n\n return this.waitForTable(mapper, opts)\n .then(() => __super__.updateAll.call(this, mapper, props, query, opts))\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 records || (records = [])\n opts || (opts = {})\n\n return this.waitForTable(mapper, opts)\n .then(() => __super__.updateMany.call(this, mapper, records, opts))\n }\n})\n\n/**\n * Details of the current version of the `js-data-rethinkdb` module.\n *\n * @example ES2015 modules import\n * import {version} from 'js-data-rethinkdb'\n * console.log(version.full)\n *\n * @example CommonJS import\n * var version = require('js-data-rethinkdb').version\n * console.log(version.full)\n *\n * @name module:js-data-rethinkdb.version\n * @type {object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexport const version = '<%= version %>'\n\n/**\n * {@link RethinkDBAdapter} class.\n *\n * @example ES2015 modules import\n * import {RethinkDBAdapter} from 'js-data-rethinkdb'\n * const adapter = new RethinkDBAdapter()\n *\n * @example CommonJS import\n * var RethinkDBAdapter = require('js-data-rethinkdb').RethinkDBAdapter\n * var adapter = new RethinkDBAdapter()\n *\n * @name module:js-data-rethinkdb.RethinkDBAdapter\n * @see RethinkDBAdapter\n * @type {Constructor}\n */\n\n/**\n * Registered as `js-data-rethinkdb` in NPM.\n *\n * @example Install from NPM\n * npm i --save js-data-rethinkdb@beta js-data@beta rethinkdbdash\n *\n * @example ES2015 modules import\n * import {RethinkDBAdapter} from 'js-data-rethinkdb'\n * const adapter = new RethinkDBAdapter()\n *\n * @example CommonJS import\n * var RethinkDBAdapter = require('js-data-rethinkdb').RethinkDBAdapter\n * var adapter = new RethinkDBAdapter()\n *\n * @module js-data-rethinkdb\n */\n\n/**\n * Create a subclass of this RethinkDBAdapter:\n * @example RethinkDBAdapter.extend\n * // Normally you would do: import {RethinkDBAdapter} from 'js-data-rethinkdb'\n * const JSDataRethinkDB = require('js-data-rethinkdb@3.0.0-beta.8')\n * const {RethinkDBAdapter} = JSDataRethinkDB\n * console.log('Using JSDataRethinkDB v' + JSDataRethinkDB.version.full)\n *\n * // Extend the class using ES2015 class syntax.\n * class CustomRethinkDBAdapterClass extends RethinkDBAdapter {\n * foo () { return 'bar' }\n * static beep () { return 'boop' }\n * }\n * const customRethinkDBAdapter = new CustomRethinkDBAdapterClass()\n * console.log(customRethinkDBAdapter.foo())\n * console.log(CustomRethinkDBAdapterClass.beep())\n *\n * // Extend the class using alternate method.\n * const OtherRethinkDBAdapterClass = RethinkDBAdapter.extend({\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const otherRethinkDBAdapter = new OtherRethinkDBAdapterClass()\n * console.log(otherRethinkDBAdapter.foo())\n * console.log(OtherRethinkDBAdapterClass.beep())\n *\n * // Extend the class, providing a custom constructor.\n * function AnotherRethinkDBAdapterClass () {\n * RethinkDBAdapter.call(this)\n * this.created_at = new Date().getTime()\n * }\n * RethinkDBAdapter.extend({\n * constructor: AnotherRethinkDBAdapterClass,\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const anotherRethinkDBAdapter = new AnotherRethinkDBAdapterClass()\n * console.log(anotherRethinkDBAdapter.created_at)\n * console.log(anotherRethinkDBAdapter.foo())\n * console.log(AnotherRethinkDBAdapterClass.beep())\n *\n * @method RethinkDBAdapter.extend\n * @param {object} [props={}] Properties to add to the prototype of the\n * subclass.\n * @param {object} [props.constructor] Provide a custom constructor function\n * to be used as the subclass itself.\n * @param {object} [classProps={}] Static properties to add to the subclass.\n * @returns {Constructor} Subclass of this RethinkDBAdapter class.\n * @since 3.0.0\n */\n"],"names":["Adapter","utils","reserved"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":null,"sources":["../src/index.js"],"sourcesContent":["import {utils} from 'js-data'\nimport {\n Adapter,\n reserved\n} from 'js-data-adapter'\nimport rethinkdbdash from 'rethinkdbdash'\nimport underscore from 'mout/string/underscore'\n\nconst __super__ = Adapter.prototype\n\nconst R_OPTS_DEFAULTS = {\n db: 'test'\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 module:js-data-rethinkdb.OPERATORS\n * @property {function} = Equality operator.\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 */\nexport const OPERATORS = {\n '=': equal,\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\nObject.freeze(OPERATORS)\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 {RethinkDBAdapter} from 'js-data-rethinkdb'\n *\n * // Create a store to hold your Mappers\n * const store = new Container()\n *\n * // Create an instance of RethinkDBAdapter with default settings\n * const adapter = new RethinkDBAdapter()\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 options.\n * @param {boolean} [opts.debug=false] See {@link Adapter#debug}.\n * @param {object} [opts.deleteOpts={}] See {@link RethinkDBAdapter#deleteOpts}.\n * @param {object} [opts.insertOpts={}] See {@link RethinkDBAdapter#insertOpts}.\n * @param {object} [opts.operators={@link module:js-data-rethinkdb.OPERATORS}] See {@link RethinkDBAdapter#operators}.\n * @param {object} [opts.r] See {@link RethinkDBAdapter#r}.\n * @param {boolean} [opts.raw=false] See {@link Adapter#raw}.\n * @param {object} [opts.rOpts={}] See {@link RethinkDBAdapter#rOpts}.\n * @param {object} [opts.runOpts={}] See {@link RethinkDBAdapter#runOpts}.\n * @param {object} [opts.updateOpts={}] See {@link RethinkDBAdapter#updateOpts}.\n */\nexport function RethinkDBAdapter (opts) {\n utils.classCallCheck(this, RethinkDBAdapter)\n opts || (opts = {})\n\n // Setup non-enumerable properties\n Object.defineProperties(this, {\n /**\n * The rethinkdbdash instance used by this adapter. Use this directly when\n * you need to write custom queries.\n *\n * @example Use default instance.\n * import {RethinkDBAdapter} from 'js-data-rethinkdb'\n * const adapter = new RethinkDBAdapter()\n * adapter.r.dbDrop('foo').then(...)\n *\n * @example Configure default instance.\n * import {RethinkDBAdapter} from 'js-data-rethinkdb'\n * const adapter = new RethinkDBAdapter({\n * rOpts: {\n * user: 'myUser',\n * password: 'myPassword'\n * }\n * })\n * adapter.r.dbDrop('foo').then(...)\n *\n * @example Provide a custom instance.\n * import rethinkdbdash from 'rethinkdbdash'\n * import {RethinkDBAdapter} from 'js-data-rethinkdb'\n * const r = rethinkdbdash()\n * const adapter = new RethinkDBAdapter({\n * r: r\n * })\n * adapter.r.dbDrop('foo').then(...)\n *\n * @name RethinkDBAdapter#r\n * @type {object}\n */\n r: {\n writable: true,\n value: undefined\n },\n databases: {\n value: {}\n },\n indices: {\n value: {}\n },\n tables: {\n value: {}\n }\n })\n\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 this.insertOpts || (this.insertOpts = {})\n utils.fillIn(this.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 this.updateOpts || (this.updateOpts = {})\n utils.fillIn(this.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 this.deleteOpts || (this.deleteOpts = {})\n utils.fillIn(this.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 this.runOpts || (this.runOpts = {})\n utils.fillIn(this.runOpts, RUN_OPTS_DEFAULTS)\n\n /**\n * Override the default predicate functions for the specified operators.\n *\n * @name RethinkDBAdapter#operators\n * @type {object}\n * @default {}\n */\n this.operators || (this.operators = {})\n utils.fillIn(this.operators, OPERATORS)\n\n /**\n * Options to pass to a new `rethinkdbdash` instance, if one was not provided\n * at {@link RethinkDBAdapter#r}. See the [rethinkdbdash README][readme] for\n * instance options.\n *\n * [readme]: https://github.com/neumino/rethinkdbdash#importing-the-driver\n *\n * @example Connect to localhost:8080, and let the driver find other instances.\n * import {RethinkDBAdapter} from 'js-data-rethinkdb'\n * const adapter = new RethinkDBAdapter({\n * rOpts: {\n * discovery: true\n * }\n * })\n *\n * @example Connect to and only to localhost:8080.\n * import {RethinkDBAdapter} from 'js-data-rethinkdb'\n * const adapter = new RethinkDBAdapter()\n *\n * @example Do not create a connection pool.\n * import {RethinkDBAdapter} from 'js-data-rethinkdb'\n * const adapter = new RethinkDBAdapter({\n * rOpts: {\n * pool: false\n * }\n * })\n *\n * @example Connect to a cluster seeding from `192.168.0.100`, `192.168.0.101`, `192.168.0.102`.\n * import {RethinkDBAdapter} from 'js-data-rethinkdb'\n * const adapter = new RethinkDBAdapter({\n * rOpts: {\n * servers: [\n * { host: '192.168.0.100', port: 28015 },\n * { host: '192.168.0.101', port: 28015 },\n * { host: '192.168.0.102', port: 28015 }\n * ]\n * }\n * })\n *\n * @name RethinkDBAdapter#rOpts\n * @see https://github.com/neumino/rethinkdbdash#importing-the-driver\n * @type {object}\n */\n this.rOpts || (this.rOpts = {})\n utils.fillIn(this.rOpts, R_OPTS_DEFAULTS)\n\n this.r || (this.r = rethinkdbdash(this.rOpts))\n}\n\nAdapter.extend({\n constructor: RethinkDBAdapter,\n\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 _count (mapper, query, opts) {\n opts || (opts = {})\n query || (query = {})\n\n return this.filterSequence(this.selectTable(mapper, opts), query)\n .count()\n .run(this.getOpt('runOpts', opts))\n .then((count) => [count, {}])\n },\n\n _create (mapper, props, opts) {\n props || (props = {})\n opts || (opts = {})\n\n const insertOpts = this.getOpt('insertOpts', opts)\n insertOpts.returnChanges = true\n\n return this.selectTable(mapper, opts)\n .insert(props, insertOpts)\n .run(this.getOpt('runOpts', opts))\n .then((cursor) => {\n this._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 return [record, cursor]\n })\n },\n\n _createMany (mapper, props, opts) {\n props || (props = {})\n opts || (opts = {})\n\n const insertOpts = this.getOpt('insertOpts', opts)\n insertOpts.returnChanges = true\n\n return this.selectTable(mapper, opts)\n .insert(props, insertOpts)\n .run(this.getOpt('runOpts', opts))\n .then((cursor) => {\n this._handleErrors(cursor)\n let records = []\n if (cursor && cursor.changes && cursor.changes.length && cursor.changes) {\n records = cursor.changes.map((change) => change.new_val)\n }\n return [records, cursor]\n })\n },\n\n _destroy (mapper, id, opts) {\n opts || (opts = {})\n\n return this.selectTable(mapper, opts)\n .get(id)\n .delete(this.getOpt('deleteOpts', opts))\n .run(this.getOpt('runOpts', opts))\n .then((cursor) => {\n this._handleErrors(cursor)\n return [undefined, cursor]\n })\n },\n\n _destroyAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n\n return this.filterSequence(this.selectTable(mapper, opts), query)\n .delete(this.getOpt('deleteOpts', opts))\n .run(this.getOpt('runOpts', opts))\n .then((cursor) => {\n this._handleErrors(cursor)\n return [undefined, cursor]\n })\n },\n\n _find (mapper, id, opts) {\n opts || (opts = {})\n\n return this._pluck(mapper, this.selectTable(mapper, opts).get(id), opts)\n .run(this.getOpt('runOpts', opts))\n .then((record) => [record, {}])\n },\n\n _findAll (mapper, query, opts) {\n opts || (opts = {})\n query || (query = {})\n\n return this._pluck(mapper, this.filterSequence(this.selectTable(mapper, opts), query), opts)\n .run(this.getOpt('runOpts', opts))\n .then((records) => [records, {}])\n },\n\n _pluck (mapper, rql, opts) {\n if (utils.isString(opts.fields)) {\n opts.fields = [opts.fields]\n }\n if (utils.isArray(opts.fields)) {\n return rql.pluck(...opts.fields)\n }\n return rql\n },\n\n _sum (mapper, field, query, opts) {\n if (!utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts || (opts = {})\n query || (query = {})\n\n return this.filterSequence(this.selectTable(mapper, opts), query)\n .sum(field)\n .run(this.getOpt('runOpts', opts))\n .then((sum) => [sum, {}])\n },\n\n _update (mapper, id, props, opts) {\n props || (props = {})\n opts || (opts = {})\n\n const updateOpts = this.getOpt('updateOpts', opts)\n updateOpts.returnChanges = true\n\n return this.selectTable(mapper, opts)\n .get(id)\n .update(props, updateOpts)\n .run(this.getOpt('runOpts', opts))\n .then((cursor) => {\n this._handleErrors(cursor)\n if (cursor.skipped) {\n throw new Error('Not Found')\n } else if (cursor && cursor.changes && cursor.changes.length && cursor.changes[0].new_val) {\n return [cursor.changes[0].new_val, cursor]\n } else {\n return this._find(mapper, id, opts)\n }\n })\n },\n\n _updateAll (mapper, props, query, opts) {\n props || (props = {})\n query || (query = {})\n opts || (opts = {})\n\n const updateOpts = this.getOpt('updateOpts', opts)\n updateOpts.returnChanges = true\n\n return this.filterSequence(this.selectTable(mapper, opts), query)\n .update(props, updateOpts)\n .run(this.getOpt('runOpts', opts))\n .then((cursor) => {\n let records = []\n this._handleErrors(cursor)\n if (cursor && cursor.changes && cursor.changes.length) {\n records = cursor.changes.map((change) => change.new_val)\n }\n return [records, cursor]\n })\n },\n\n _updateMany (mapper, records, opts) {\n records || (records = [])\n opts || (opts = {})\n\n const insertOpts = this.getOpt('insertOpts', opts)\n insertOpts.returnChanges = true\n insertOpts.conflict = 'update'\n\n return this.selectTable(mapper, opts)\n .insert(records, insertOpts)\n .run(this.getOpt('runOpts', opts))\n .then((cursor) => {\n records = []\n this._handleErrors(cursor)\n if (cursor && cursor.changes && cursor.changes.length) {\n records = cursor.changes.map((change) => change.new_val)\n }\n return [records, cursor]\n })\n },\n\n _applyWhereFromObject (where) {\n const fields = []\n const ops = []\n const predicates = []\n utils.forOwn(where, (clause, field) => {\n if (!utils.isObject(clause)) {\n clause = {\n '==': clause\n }\n }\n utils.forOwn(clause, (expr, op) => {\n fields.push(field)\n ops.push(op)\n predicates.push(expr)\n })\n })\n return {\n fields,\n ops,\n predicates\n }\n },\n\n _applyWhereFromArray (where) {\n const groups = []\n where.forEach((_where, i) => {\n if (utils.isString(_where)) {\n return\n }\n const prev = where[i - 1]\n const parser = utils.isArray(_where) ? this._applyWhereFromArray : this._applyWhereFromObject\n const group = parser.call(this, _where)\n if (prev === 'or') {\n group.isOr = true\n }\n groups.push(group)\n })\n groups.isArray = true\n return groups\n },\n\n _testObjectGroup (rql, group, row, opts) {\n let i\n const r = this.r\n const fields = group.fields\n const ops = group.ops\n const predicates = group.predicates\n const len = ops.length\n for (i = 0; i < len; i++) {\n let op = ops[i]\n const isOr = op.charAt(0) === '|'\n op = isOr ? op.substr(1) : op\n const predicateFn = this.getOperator(op, opts)\n if (predicateFn) {\n const predicateResult = predicateFn(r, row, fields[i], predicates[i])\n if (isOr) {\n rql = rql ? rql.or(predicateResult) : predicateResult\n } else {\n rql = rql ? rql.and(predicateResult) : predicateResult\n }\n } else {\n throw new Error(`Operator ${op} not supported!`)\n }\n }\n return rql\n },\n\n _testArrayGroup (rql, groups, row, opts) {\n let i\n const len = groups.length\n for (i = 0; i < len; i++) {\n const group = groups[i]\n let subQuery\n if (group.isArray) {\n subQuery = this._testArrayGroup(rql, group, row, opts)\n } else {\n subQuery = this._testObjectGroup(null, group, row, opts)\n }\n if (groups[i - 1]) {\n if (group.isOr) {\n rql = rql.or(subQuery)\n } else {\n rql = rql.and(subQuery)\n }\n } else {\n rql = rql ? rql.and(subQuery) : subQuery\n }\n }\n return rql\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 r = this.r\n\n query = utils.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 utils.forOwn(query, (config, keyword) => {\n if (reserved.indexOf(keyword) === -1) {\n if (utils.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 let groups\n\n if (utils.isObject(query.where) && Object.keys(query.where).length !== 0) {\n groups = this._applyWhereFromArray([query.where])\n } else if (utils.isArray(query.where)) {\n groups = this._applyWhereFromArray(query.where)\n }\n\n if (groups) {\n rql = rql.filter((row) => this._testArrayGroup(null, groups, row, opts) || true)\n }\n\n // Sort\n if (query.orderBy) {\n if (utils.isString(query.orderBy)) {\n query.orderBy = [\n [query.orderBy, 'asc']\n ]\n }\n for (var i = 0; i < query.orderBy.length; i++) {\n if (utils.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 selectDb (opts) {\n return this.r.db(utils.isUndefined(opts.db) ? this.rOpts.db : opts.db)\n },\n\n selectTable (mapper, opts) {\n return this.selectDb(opts).table(mapper.table || underscore(mapper.name))\n },\n\n waitForDb (opts) {\n opts || (opts = {})\n const db = utils.isUndefined(opts.db) ? this.rOpts.db : opts.db\n if (!this.databases[db]) {\n this.databases[db] = this.r.branch(\n this.r.dbList().contains(db),\n true,\n this.r.dbCreate(db)\n ).run()\n }\n return this.databases[db]\n },\n\n waitForTable (mapper, opts) {\n opts || (opts = {})\n const table = utils.isString(mapper) ? mapper : (mapper.table || underscore(mapper.name))\n let db = utils.isUndefined(opts.db) ? this.rOpts.db : opts.db\n return this.waitForDb(opts).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, opts) {\n opts || (opts = {})\n let db = utils.isUndefined(opts.db) ? this.rOpts.db : opts.db\n return this.waitForDb(opts).then(() => this.waitForTable(table, opts)).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 /**\n * Return the number of records that match the selection query.\n *\n * @name RethinkDBAdapter#count\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 * @return {Promise}\n */\n count (mapper, query, opts) {\n opts || (opts = {})\n query || (query = {})\n\n return this.waitForTable(mapper, opts)\n .then(() => __super__.count.call(this, mapper, query, opts))\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 props || (props = {})\n opts || (opts = {})\n\n return this.waitForTable(mapper, opts)\n .then(() => __super__.create.call(this, mapper, props, opts))\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 props || (props = {})\n opts || (opts = {})\n\n return this.waitForTable(mapper, opts)\n .then(() => __super__.createMany.call(this, mapper, props, opts))\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 opts || (opts = {})\n\n return this.waitForTable(mapper, opts)\n .then(() => __super__.destroy.call(this, mapper, id, opts))\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 opts || (opts = {})\n query || (query = {})\n\n return this.waitForTable(mapper, opts)\n .then(() => __super__.destroyAll.call(this, mapper, query, opts))\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 {string[]} [opts.fields] Select a subset of fields to be returned.\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 opts || (opts = {})\n opts.with || (opts.with = [])\n\n const relationList = mapper.relationList || []\n let tasks = [this.waitForTable(mapper, opts)]\n\n relationList.forEach((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(this.waitForIndex(mapper.table || underscore(mapper.name), def.foreignKey, opts))\n } else {\n tasks.push(this.waitForIndex(relationDef.table || underscore(relationDef.name), def.foreignKey, opts))\n }\n }\n })\n return Promise.all(tasks).then(() => __super__.find.call(this, mapper, id, opts))\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 {string[]} [opts.fields] Select a subset of fields to be returned.\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 opts || (opts = {})\n opts.with || (opts.with = [])\n query || (query = {})\n\n const relationList = mapper.relationList || []\n let tasks = [this.waitForTable(mapper, opts)]\n\n relationList.forEach((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(this.waitForIndex(mapper.table || underscore(mapper.name), def.foreignKey, opts))\n } else {\n tasks.push(this.waitForIndex(relationDef.table || underscore(relationDef.name), def.foreignKey, opts))\n }\n }\n })\n return Promise.all(tasks).then(() => __super__.findAll.call(this, mapper, query, opts))\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 utils.isUndefined(opts.operators[operator]) ? ownOps[operator] : opts.operators[operator]\n },\n\n /**\n * Return the sum of the specified field of records that match the selection\n * query.\n *\n * @name RethinkDBAdapter#sum\n * @method\n * @param {object} mapper The mapper.\n * @param {string} field The field to sum.\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 * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n opts || (opts = {})\n query || (query = {})\n\n return this.waitForTable(mapper, opts)\n .then(() => __super__.sum.call(this, mapper, field, query, opts))\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 props || (props = {})\n opts || (opts = {})\n\n return this.waitForTable(mapper, opts)\n .then(() => __super__.update.call(this, mapper, id, props, opts))\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 props || (props = {})\n query || (query = {})\n opts || (opts = {})\n\n return this.waitForTable(mapper, opts)\n .then(() => __super__.updateAll.call(this, mapper, props, query, opts))\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 records || (records = [])\n opts || (opts = {})\n\n return this.waitForTable(mapper, opts)\n .then(() => __super__.updateMany.call(this, mapper, records, opts))\n }\n})\n\n/**\n * Details of the current version of the `js-data-rethinkdb` module.\n *\n * @example ES2015 modules import\n * import {version} from 'js-data-rethinkdb'\n * console.log(version.full)\n *\n * @example CommonJS import\n * var version = require('js-data-rethinkdb').version\n * console.log(version.full)\n *\n * @name module:js-data-rethinkdb.version\n * @type {object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexport const version = '<%= version %>'\n\n/**\n * {@link RethinkDBAdapter} class.\n *\n * @example ES2015 modules import\n * import {RethinkDBAdapter} from 'js-data-rethinkdb'\n * const adapter = new RethinkDBAdapter()\n *\n * @example CommonJS import\n * var RethinkDBAdapter = require('js-data-rethinkdb').RethinkDBAdapter\n * var adapter = new RethinkDBAdapter()\n *\n * @name module:js-data-rethinkdb.RethinkDBAdapter\n * @see RethinkDBAdapter\n * @type {Constructor}\n */\n\n/**\n * Registered as `js-data-rethinkdb` in NPM.\n *\n * @example Install from NPM\n * npm i --save js-data-rethinkdb@beta js-data@beta rethinkdbdash\n *\n * @example ES2015 modules import\n * import {RethinkDBAdapter} from 'js-data-rethinkdb'\n * const adapter = new RethinkDBAdapter()\n *\n * @example CommonJS import\n * var RethinkDBAdapter = require('js-data-rethinkdb').RethinkDBAdapter\n * var adapter = new RethinkDBAdapter()\n *\n * @module js-data-rethinkdb\n */\n\n/**\n * Create a subclass of this RethinkDBAdapter:\n * @example RethinkDBAdapter.extend\n * // Normally you would do: import {RethinkDBAdapter} from 'js-data-rethinkdb'\n * const JSDataRethinkDB = require('js-data-rethinkdb@3.0.0-beta.8')\n * const {RethinkDBAdapter} = JSDataRethinkDB\n * console.log('Using JSDataRethinkDB v' + JSDataRethinkDB.version.full)\n *\n * // Extend the class using ES2015 class syntax.\n * class CustomRethinkDBAdapterClass extends RethinkDBAdapter {\n * foo () { return 'bar' }\n * static beep () { return 'boop' }\n * }\n * const customRethinkDBAdapter = new CustomRethinkDBAdapterClass()\n * console.log(customRethinkDBAdapter.foo())\n * console.log(CustomRethinkDBAdapterClass.beep())\n *\n * // Extend the class using alternate method.\n * const OtherRethinkDBAdapterClass = RethinkDBAdapter.extend({\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const otherRethinkDBAdapter = new OtherRethinkDBAdapterClass()\n * console.log(otherRethinkDBAdapter.foo())\n * console.log(OtherRethinkDBAdapterClass.beep())\n *\n * // Extend the class, providing a custom constructor.\n * function AnotherRethinkDBAdapterClass () {\n * RethinkDBAdapter.call(this)\n * this.created_at = new Date().getTime()\n * }\n * RethinkDBAdapter.extend({\n * constructor: AnotherRethinkDBAdapterClass,\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const anotherRethinkDBAdapter = new AnotherRethinkDBAdapterClass()\n * console.log(anotherRethinkDBAdapter.created_at)\n * console.log(anotherRethinkDBAdapter.foo())\n * console.log(AnotherRethinkDBAdapterClass.beep())\n *\n * @method RethinkDBAdapter.extend\n * @param {object} [props={}] Properties to add to the prototype of the\n * subclass.\n * @param {object} [props.constructor] Provide a custom constructor function\n * to be used as the subclass itself.\n * @param {object} [classProps={}] Static properties to add to the subclass.\n * @returns {Constructor} Subclass of this RethinkDBAdapter class.\n * @since 3.0.0\n */\n"],"names":["__super__","Adapter","prototype","R_OPTS_DEFAULTS","INSERT_OPTS_DEFAULTS","UPDATE_OPTS_DEFAULTS","DELETE_OPTS_DEFAULTS","RUN_OPTS_DEFAULTS","equal","r","row","field","value","default","eq","notEqual","ne","OPERATORS","gt","ge","lt","le","setIntersection","expr","count","contains","not","Object","freeze","RethinkDBAdapter","opts","classCallCheck","defineProperties","undefined","call","insertOpts","fillIn","updateOpts","deleteOpts","runOpts","operators","rOpts","rethinkdbdash","extend","cursor","errors","first_error","Error","mapper","query","filterSequence","selectTable","run","getOpt","then","props","returnChanges","insert","_handleErrors","record","changes","length","new_val","records","map","change","id","get","delete","_pluck","rql","utils","isString","fields","isArray","pluck","sum","update","skipped","_find","conflict","where","ops","predicates","forOwn","clause","isObject","op","push","groups","forEach","_where","i","prev","parser","_applyWhereFromArray","_applyWhereFromObject","group","isOr","len","charAt","substr","predicateFn","getOperator","predicateResult","or","and","subQuery","_testArrayGroup","_testObjectGroup","sequence","plainCopy","orderBy","sort","skip","offset","config","keyword","reserved","indexOf","keys","filter","toUpperCase","desc","limit","db","isUndefined","selectDb","table","underscore","name","databases","branch","dbList","dbCreate","waitForDb","tables","tableList","tableCreate","index","waitForTable","indices","indexList","indexCreate","indexWait","create","createMany","destroy","destroyAll","with","relationList","tasks","def","relationName","relation","relationDef","getRelation","foreignKey","type","waitForIndex","Promise","all","find","findAll","operator","ownOps","updateAll","updateMany","version"],"mappings":"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"} \ No newline at end of file