diff --git a/CHANGELOG.md b/CHANGELOG.md index 9856d68f..e2d474e2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +##### 2.10.1 - 13 February 2018 + +###### Bug fixes +- #492 - Fixed bug where pending queries were used even when pending queries were set to disabled. Thanks @eldridge + ##### 2.10.0 - 22 September 2016 ###### Backwards compatible changes diff --git a/dist/js-data-debug.js b/dist/js-data-debug.js index d431d423..5f385c2c 100644 --- a/dist/js-data-debug.js +++ b/dist/js-data-debug.js @@ -1,6 +1,6 @@ /*! * js-data - * @version 2.10.0 - Homepage + * @version 2.10.1 - Homepage * @author Jason Dobry * @copyright (c) 2014-2016 Jason Dobry * @license MIT @@ -95,10 +95,10 @@ return /******/ (function(modules) { // webpackBootstrap }, version: { - full: '2.10.0', + full: '2.10.1', major: parseInt('2', 10), minor: parseInt('10', 10), - patch: parseInt('0', 10), + patch: parseInt('1', 10), alpha: true ? 'false' : false, beta: true ? 'false' : false } @@ -114,7 +114,7 @@ return /******/ (function(modules) { // webpackBootstrap value: true }); - var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; + var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /* jshint eqeqeq:false */ @@ -447,26 +447,24 @@ return /******/ (function(modules) { // webpackBootstrap // Apply 'orderBy' if (orderBy) { - (function () { - var index = 0; - _utils2.default.forEach(orderBy, function (def, i) { - if (_utils2.default._s(def)) { - orderBy[i] = [def, 'ASC']; - } else if (!_utils2.default._a(def)) { - throw new _errors2.default.IA('DS.filter("' + resourceName + '"[, params][, options]): ' + _utils2.default.toJson(def) + ': Must be a string or an array!', { - params: { - 'orderBy[i]': { - actual: typeof def === 'undefined' ? 'undefined' : _typeof(def), - expected: 'string|array' - } + var index = 0; + _utils2.default.forEach(orderBy, function (def, i) { + if (_utils2.default._s(def)) { + orderBy[i] = [def, 'ASC']; + } else if (!_utils2.default._a(def)) { + throw new _errors2.default.IA('DS.filter("' + resourceName + '"[, params][, options]): ' + _utils2.default.toJson(def) + ': Must be a string or an array!', { + params: { + 'orderBy[i]': { + actual: typeof def === 'undefined' ? 'undefined' : _typeof(def), + expected: 'string|array' } - }); - } - }); - filtered = _utils2.default.sort(filtered, function (a, b) { - return compare(orderBy, index, a, b); - }); - })(); + } + }); + } + }); + filtered = _utils2.default.sort(filtered, function (a, b) { + return compare(orderBy, index, a, b); + }); } var limit = _utils2.default._n(params.limit) ? params.limit : null; @@ -653,7 +651,7 @@ return /******/ (function(modules) { // webpackBootstrap value: true }); - var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; /* jshint eqeqeq:false */ + var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; /* jshint eqeqeq:false */ /** * Mix of ES6 and CommonJS module imports because the interop of Babel + Webpack + ES6 modules + CommonJS isn't very good. @@ -1079,7 +1077,7 @@ return /******/ (function(modules) { // webpackBootstrap throw new _errors2.default.IA('"options" must be an object!'); } forEach(toPromisify, function (name) { - if (typeof options[name] === 'function' && options[name].toString().indexOf('for (var _len = arg') === -1) { + if (typeof options[name] === 'function' && options[name].toString().indexOf('for (var _len3 = arg') === -1) { options[name] = _this.promisify(options[name]); } }); @@ -1334,36 +1332,30 @@ return /******/ (function(modules) { // webpackBootstrap return undefined; }; prop.set = function (children) { - var _this2 = this; - if (children && children.length) { - (function () { - var id = get(_this2, definition.idAttribute); - if (foreignKey) { - forEach(children, function (child) { - set(child, foreignKey, id); - }); - } else if (localKeys) { - (function () { - var keys = []; - forEach(children, function (child) { - keys.push(get(child, definition.getResource(relationName).idAttribute)); - }); - set(_this2, localKeys, keys); - })(); - } else if (foreignKeys) { - forEach(children, function (child) { - var keys = get(child, foreignKeys); - if (keys) { - if (!contains(keys, id)) { - keys.push(id); - } - } else { - set(child, foreignKeys, [id]); + var id = get(this, definition.idAttribute); + if (foreignKey) { + forEach(children, function (child) { + set(child, foreignKey, id); + }); + } else if (localKeys) { + var keys = []; + forEach(children, function (child) { + keys.push(get(child, definition.getResource(relationName).idAttribute)); + }); + set(this, localKeys, keys); + } else if (foreignKeys) { + forEach(children, function (child) { + var keys = get(child, foreignKeys); + if (keys) { + if (!contains(keys, id)) { + keys.push(id); } - }); - } - })(); + } else { + set(child, foreignKeys, [id]); + } + }); + } } return get(this, localField); }; @@ -1399,20 +1391,18 @@ return /******/ (function(modules) { // webpackBootstrap } } if (def.get) { - (function () { - var orig = prop.get; - prop.get = function () { - var _this3 = this; + var orig = prop.get; + prop.get = function () { + var _this2 = this; - return def.get(definition, def, this, function () { - for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { - args[_key4] = arguments[_key4]; - } + return def.get(definition, def, this, function () { + for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { + args[_key4] = arguments[_key4]; + } - return orig.apply(_this3, args); - }); - }; - })(); + return orig.apply(_this2, args); + }); + }; } Object.defineProperty(target, localField, prop); } @@ -3140,8 +3130,6 @@ return /******/ (function(modules) { // webpackBootstrap value: true }); - var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; - var _utils = __webpack_require__(2); var _utils2 = _interopRequireDefault(_utils); @@ -3152,9 +3140,9 @@ return /******/ (function(modules) { // webpackBootstrap function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - var NER = _errors2.default.NER; - var IA = _errors2.default.IA; - var R = _errors2.default.R; + var NER = _errors2.default.NER, + IA = _errors2.default.IA, + R = _errors2.default.R; var fakeId = 'DS_' + new Date().getTime(); @@ -3191,55 +3179,47 @@ return /******/ (function(modules) { // webpackBootstrap // @param options.ignoredChanges Array of strings or regular expressions of fields, the changes of which are to be ignored. // @returns The changes of the given item, if any. changes: function changes(resourceName, id, options) { - var _check$call = check.call(this, 'changes', resourceName, id, options); - - var _this = _check$call._this; - var definition = _check$call.definition; - var _resourceName = _check$call._resourceName; - var _id = _check$call._id; - var _options = _check$call._options; - + var _check$call = check.call(this, 'changes', resourceName, id, options), + _this = _check$call._this, + definition = _check$call.definition, + _resourceName = _check$call._resourceName, + _id = _check$call._id, + _options = _check$call._options; var item = definition.get(_id); if (item) { - var _ret = function () { - var observer = _this.store[_resourceName].observers[_id]; - if (observer && typeof observer === 'function') { - // force observation handler to be fired for item if there are changes and `Object.observe` is not available - observer.deliver(); - } + var observer = _this.store[_resourceName].observers[_id]; + if (observer && typeof observer === 'function') { + // force observation handler to be fired for item if there are changes and `Object.observe` is not available + observer.deliver(); + } - var ignoredChanges = _options.ignoredChanges || []; - // add linked relations to list of ignored changes - _utils2.default.forEach(definition.relationFields, function (field) { - if (!_utils2.default.contains(ignoredChanges, field)) { - ignoredChanges.push(field); + var ignoredChanges = _utils2.default.copy(_options.ignoredChanges || []); + // add linked relations to list of ignored changes + _utils2.default.forEach(definition.relationFields, function (field) { + if (!_utils2.default.contains(ignoredChanges, field)) { + ignoredChanges.push(field); + } + }); + // calculate changes + var diff = _utils2.default.diffObjectFromOldObject(item, _this.store[_resourceName].previousAttributes[_id], _utils2.default.equals, ignoredChanges); + // remove functions from diff + _utils2.default.forOwn(diff, function (changeset, name) { + var toKeep = []; + _utils2.default.forOwn(changeset, function (value, field) { + if (!_utils2.default.isFunction(value)) { + toKeep.push(field); } }); - // calculate changes - var diff = _utils2.default.diffObjectFromOldObject(item, _this.store[_resourceName].previousAttributes[_id], _utils2.default.equals, ignoredChanges); - // remove functions from diff - _utils2.default.forOwn(diff, function (changeset, name) { - var toKeep = []; - _utils2.default.forOwn(changeset, function (value, field) { - if (!_utils2.default.isFunction(value)) { - toKeep.push(field); - } - }); - diff[name] = _utils2.default.pick(diff[name], toKeep); - }); - // definitely ignore changes to linked relations - _utils2.default.forEach(definition.relationFields, function (field) { - delete diff.added[field]; - delete diff.removed[field]; - delete diff.changed[field]; - }); - return { - v: diff - }; - }(); - - if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v; + diff[name] = _utils2.default.pick(diff[name], toKeep); + }); + // definitely ignore changes to linked relations + _utils2.default.forEach(definition.relationFields, function (field) { + delete diff.added[field]; + delete diff.removed[field]; + delete diff.changed[field]; + }); + return diff; } }, @@ -3250,12 +3230,11 @@ return /******/ (function(modules) { // webpackBootstrap // @param id The primary key of the item whose change history is to be returned. // @returns The change history of the given item, if any. changeHistory: function changeHistory(resourceName, id) { - var _check$call2 = check.call(this, 'changeHistory', resourceName, id || fakeId); - - var _this = _check$call2._this; - var definition = _check$call2.definition; - var _resourceName = _check$call2._resourceName; - var _id = _check$call2._id; + var _check$call2 = check.call(this, 'changeHistory', resourceName, id || fakeId), + _this = _check$call2._this, + definition = _check$call2.definition, + _resourceName = _check$call2._resourceName, + _id = _check$call2._id; var resource = _this.store[_resourceName]; @@ -3273,12 +3252,11 @@ return /******/ (function(modules) { // webpackBootstrap } }, commit: function commit(resourceName, id) { - var _check$call3 = check.call(this, 'commit', resourceName, id); - - var _this = _check$call3._this; - var definition = _check$call3.definition; - var _resourceName = _check$call3._resourceName; - var _id = _check$call3._id; + var _check$call3 = check.call(this, 'commit', resourceName, id), + _this = _check$call3._this, + definition = _check$call3.definition, + _resourceName = _check$call3._resourceName, + _id = _check$call3._id; var resource = _this.store[_resourceName]; var item = _this.store[_resourceName].index[_id]; @@ -3358,15 +3336,13 @@ return /******/ (function(modules) { // webpackBootstrap var relationData = _utils2.default.get(attrs, def.localField); if (relationData) { if (_utils2.default.isArray(relationData)) { - (function () { - var array = []; - var Resource = definition.getResource(def.relation); - var _options = options.orig(); - _utils2.default.forEach(relationData, function (relationDataItem) { - array.push(Resource.createInstance(relationDataItem, _options)); - }); - _utils2.default.set(attrs, def.localField, array); - })(); + var array = []; + var Resource = definition.getResource(def.relation); + var _options = options.orig(); + _utils2.default.forEach(relationData, function (relationDataItem) { + array.push(Resource.createInstance(relationDataItem, _options)); + }); + _utils2.default.set(attrs, def.localField, array); } else if (_utils2.default.isObject(relationData)) { _utils2.default.set(attrs, def.localField, definition.getResource(def.relation).createInstance(relationData, options.orig())); } @@ -3489,14 +3465,14 @@ return /******/ (function(modules) { // webpackBootstrap // @returns The item with the given primary key if it's in the store. // / get: function get(resourceName, id) { - var _check$call4 = check.call(this, 'get', resourceName, id); - - var _this = _check$call4._this; - var _resourceName = _check$call4._resourceName; - var _id = _check$call4._id; + var _check$call4 = check.call(this, 'get', resourceName, id), + _this = _check$call4._this, + _resourceName = _check$call4._resourceName, + _id = _check$call4._id; // return the item if it exists + return _this.store[_resourceName].index[_id]; }, @@ -3543,11 +3519,9 @@ return /******/ (function(modules) { // webpackBootstrap // @param id The primary key of the item. // @returns Whether the item with the given primary key has any changes. hasChanges: function hasChanges(resourceName, id) { - var _check$call5 = check.call(this, 'hasChanges', resourceName, id); - - var definition = _check$call5.definition; - var _id = _check$call5._id; - + var _check$call5 = check.call(this, 'hasChanges', resourceName, id), + definition = _check$call5.definition, + _id = _check$call5._id; return definition.get(_id) ? diffIsEmpty(definition.changes(_id)) : false; }, @@ -3560,11 +3534,10 @@ return /******/ (function(modules) { // webpackBootstrap // @param id The primary key of the item. // @returns Whether the item with the given primary key is a temporary item. isNew: function isNew(resourceName, id) { - var _check$call6 = check.call(this, 'isNew', resourceName, id || fakeId); - - var _this = _check$call6._this; - var _resourceName = _check$call6._resourceName; - var _id = _check$call6._id; + var _check$call6 = check.call(this, 'isNew', resourceName, id || fakeId), + _this = _check$call6._this, + _resourceName = _check$call6._resourceName, + _id = _check$call6._id; var resource = _this.store[_resourceName]; @@ -3578,11 +3551,10 @@ return /******/ (function(modules) { // webpackBootstrap // @param id The primary key of the item. // @returns Timestamp from the last time the item was changed. lastModified: function lastModified(resourceName, id) { - var _check$call7 = check.call(this, 'lastModified', resourceName, id || fakeId); - - var _this = _check$call7._this; - var _resourceName = _check$call7._resourceName; - var _id = _check$call7._id; + var _check$call7 = check.call(this, 'lastModified', resourceName, id || fakeId), + _this = _check$call7._this, + _resourceName = _check$call7._resourceName, + _id = _check$call7._id; var resource = _this.store[_resourceName]; @@ -3602,11 +3574,10 @@ return /******/ (function(modules) { // webpackBootstrap // @param id The primary key of the item. // @returns Timestamp from the last time the item was saved. lastSaved: function lastSaved(resourceName, id) { - var _check$call8 = check.call(this, 'lastSaved', resourceName, id || fakeId); - - var _this = _check$call8._this; - var _resourceName = _check$call8._resourceName; - var _id = _check$call8._id; + var _check$call8 = check.call(this, 'lastSaved', resourceName, id || fakeId), + _this = _check$call8._this, + _resourceName = _check$call8._resourceName, + _id = _check$call8._id; var resource = _this.store[_resourceName]; @@ -3623,11 +3594,10 @@ return /******/ (function(modules) { // webpackBootstrap // @param id The primary key of the item. // @returns The previous attributes of the item previous: function previous(resourceName, id) { - var _check$call9 = check.call(this, 'previous', resourceName, id); - - var _this = _check$call9._this; - var _resourceName = _check$call9._resourceName; - var _id = _check$call9._id; + var _check$call9 = check.call(this, 'previous', resourceName, id), + _this = _check$call9._this, + _resourceName = _check$call9._resourceName, + _id = _check$call9._id; var resource = _this.store[_resourceName]; @@ -3643,14 +3613,12 @@ return /******/ (function(modules) { // webpackBootstrap // @param options Optional configuration. // @returns The reverted item revert: function revert(resourceName, id, options) { - var _check$call10 = check.call(this, 'revert', resourceName, id, options); - - var _this = _check$call10._this; - var definition = _check$call10.definition; - var _resourceName = _check$call10._resourceName; - var _id = _check$call10._id; - var _options = _check$call10._options; - + var _check$call10 = check.call(this, 'revert', resourceName, id, options), + _this = _check$call10._this, + definition = _check$call10.definition, + _resourceName = _check$call10._resourceName, + _id = _check$call10._id, + _options = _check$call10._options; var preserve = _options.preserve || []; var injectObj = {}; @@ -3658,26 +3626,20 @@ return /******/ (function(modules) { // webpackBootstrap if (preserve.length === 0) { injectObj = _this.previous(_resourceName, _id); } else { - var _ret3 = function () { - var instance = definition.get(id); - var previousInstance = _this.previous(_resourceName, _id); + var instance = definition.get(id); + var previousInstance = _this.previous(_resourceName, _id); - if (!instance) { - return { - v: void 0 - }; - } - - _utils2.default.forOwn(instance, function (value, key) { - if (_utils2.default.contains(preserve, key)) { - injectObj[key] = instance[key]; - } else { - injectObj[key] = previousInstance[key]; - } - }); - }(); + if (!instance) { + return; + } - if ((typeof _ret3 === 'undefined' ? 'undefined' : _typeof(_ret3)) === "object") return _ret3.v; + _utils2.default.forOwn(instance, function (value, key) { + if (_utils2.default.contains(preserve, key)) { + injectObj[key] = instance[key]; + } else { + injectObj[key] = previousInstance[key]; + } + }); } return definition.inject(injectObj, { @@ -3692,9 +3654,6 @@ return /******/ (function(modules) { // webpackBootstrap 'use strict'; - var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; /* jshint evil:true, loopfunc:true */ - - var _utils = __webpack_require__(2); var _utils2 = _interopRequireDefault(_utils); @@ -3716,6 +3675,7 @@ return /******/ (function(modules) { // webpackBootstrap * User.update(id, attrs[, options]) // DS method proxied on a Resource * user.DSUpdate(attrs[, options]) // DS method proxied on an Instance */ + /* jshint evil:true, loopfunc:true */ var instanceMethods = ['compute', 'eject', 'refresh', 'save', 'update', 'destroy', 'loadRelations', 'changeHistory', 'changes', 'commit', 'hasChanges', 'isNew', 'lastModified', 'lastSaved', 'previous', 'revert']; module.exports = function defineResource(definition) { @@ -3764,377 +3724,365 @@ return /******/ (function(modules) { // webpackBootstrap } try { - var def; - - var _class; - - var _ret = function () { - // Resources can inherit from another resource instead of inheriting directly from the data store defaults. - if (definition.extends && definitions[definition.extends]) { - // Inherit from another resource - Resource.prototype = definitions[definition.extends]; - } else { - // Inherit from global defaults - Resource.prototype = _this.defaults; - } - definitions[definition.name] = new Resource(definition); - - def = definitions[definition.name]; + // Resources can inherit from another resource instead of inheriting directly from the data store defaults. + if (definition.extends && definitions[definition.extends]) { + // Inherit from another resource + Resource.prototype = definitions[definition.extends]; + } else { + // Inherit from global defaults + Resource.prototype = _this.defaults; + } + definitions[definition.name] = new Resource(definition); + var def = definitions[definition.name]; - def.getResource = function (resourceName) { - return _this.definitions[resourceName]; - }; + def.getResource = function (resourceName) { + return _this.definitions[resourceName]; + }; - def.logFn('Preparing resource.'); + def.logFn('Preparing resource.'); - if (!_utils2.default._s(def.idAttribute)) { - throw new _errors2.default.IA('"idAttribute" must be a string!'); - } + if (!_utils2.default._s(def.idAttribute)) { + throw new _errors2.default.IA('"idAttribute" must be a string!'); + } - // Setup nested parent configuration - if (def.relations) { - def.relationList = []; - def.relationFields = []; - _utils2.default.forOwn(def.relations, function (relatedModels, type) { - _utils2.default.forOwn(relatedModels, function (defs, relationName) { - if (!_utils2.default._a(defs)) { - relatedModels[relationName] = [defs]; + // Setup nested parent configuration + if (def.relations) { + def.relationList = []; + def.relationFields = []; + _utils2.default.forOwn(def.relations, function (relatedModels, type) { + _utils2.default.forOwn(relatedModels, function (defs, relationName) { + if (!_utils2.default._a(defs)) { + relatedModels[relationName] = [defs]; + } + _utils2.default.forEach(relatedModels[relationName], function (d) { + d.type = type; + d.relation = relationName; + d.name = def.name; + def.relationList.push(d); + if (d.localField) { + def.relationFields.push(d.localField); } - _utils2.default.forEach(relatedModels[relationName], function (d) { - d.type = type; - d.relation = relationName; - d.name = def.name; - def.relationList.push(d); - if (d.localField) { - def.relationFields.push(d.localField); - } - }); }); }); - if (def.relations.belongsTo) { - def.parents = {}; - _utils2.default.forOwn(def.relations.belongsTo, function (relatedModel, modelName) { - _utils2.default.forEach(relatedModel, function (relation) { - if (relation.parent) { - def.parent = modelName; - def.parentKey = relation.localKey; - def.parentField = relation.localField; - def.parents[modelName] = { - key: def.parentKey, - field: def.parentField - }; - } - }); + }); + if (def.relations.belongsTo) { + def.parents = {}; + _utils2.default.forOwn(def.relations.belongsTo, function (relatedModel, modelName) { + _utils2.default.forEach(relatedModel, function (relation) { + if (relation.parent) { + def.parent = modelName; + def.parentKey = relation.localKey; + def.parentField = relation.localField; + def.parents[modelName] = { + key: def.parentKey, + field: def.parentField + }; + } }); - } - if (typeof Object.freeze === 'function') { - Object.freeze(def.relations); - Object.freeze(def.relationList); - } + }); } + if (typeof Object.freeze === 'function') { + Object.freeze(def.relations); + Object.freeze(def.relationList); + } + } - // Create the wrapper class for the new resource - _class = def['class'] = _utils2.default.pascalCase(def.name); - - try { - if (typeof def.useClass === 'function') { - if (def.csp) { - def[_class] = function () { - def.useClass.call(this); - }; - } else { - def[_class] = new Function('def', 'return function ' + _class + '() { def.useClass.call(this); }')(def); // eslint-disable-line - } - def[_class].prototype = function (proto) { - function Ctor() {} - - Ctor.prototype = proto; - return new Ctor(); - }(def.useClass.prototype); - } else if (def.csp) { - def[_class] = function () {}; + // Create the wrapper class for the new resource + var _class = def['class'] = _utils2.default.pascalCase(def.name); + try { + if (typeof def.useClass === 'function') { + if (def.csp) { + def[_class] = function () { + def.useClass.call(this); + }; } else { - def[_class] = new Function('return function ' + _class + '() {}')(); // eslint-disable-line + def[_class] = new Function('def', 'return function ' + _class + '() { def.useClass.call(this); }')(def); // eslint-disable-line } - } catch (e) { + def[_class].prototype = function (proto) { + function Ctor() {} + + Ctor.prototype = proto; + return new Ctor(); + }(def.useClass.prototype); + } else if (def.csp) { def[_class] = function () {}; + } else { + def[_class] = new Function('return function ' + _class + '() {}')(); // eslint-disable-line } + } catch (e) { + def[_class] = function () {}; + } - // Apply developer-defined instance methods - _utils2.default.forOwn(def.methods, function (fn, m) { - def[_class].prototype[m] = fn; - }); + // Apply developer-defined instance methods + _utils2.default.forOwn(def.methods, function (fn, m) { + def[_class].prototype[m] = fn; + }); - /** - * var user = User.createInstance({ id: 1 }) - * user.set('foo', 'bar') - */ - def[_class].prototype.set = function (key, value) { - var _this2 = this; - - _utils2.default.set(this, key, value); - def.compute(this); - if (def.instanceEvents) { - setTimeout(function () { - _this2.emit('DS.change', def, _this2); - }, 0); - } - def.handleChange(this); - return this; - }; + /** + * var user = User.createInstance({ id: 1 }) + * user.set('foo', 'bar') + */ + def[_class].prototype.set = function (key, value) { + var _this2 = this; - /** - * var user = User.createInstance({ id: 1 }) - * user.get('id') // 1 - */ - def[_class].prototype.get = function (key) { - return _utils2.default.get(this, key); - }; + _utils2.default.set(this, key, value); + def.compute(this); + if (def.instanceEvents) { + setTimeout(function () { + _this2.emit('DS.change', def, _this2); + }, 0); + } + def.handleChange(this); + return this; + }; - // Setup the relation links - _utils2.default.applyRelationGettersToTarget(_this, def, def[_class].prototype); + /** + * var user = User.createInstance({ id: 1 }) + * user.get('id') // 1 + */ + def[_class].prototype.get = function (key) { + return _utils2.default.get(this, key); + }; - var parentOmit = null; - if (!def.hasOwnProperty('omit')) { - parentOmit = def.omit; - def.omit = []; - } else { - parentOmit = _this.defaults.omit; - } - def.omit = def.omit.concat(parentOmit || []); + // Setup the relation links + _utils2.default.applyRelationGettersToTarget(_this, def, def[_class].prototype); + + var parentOmit = null; + if (!def.hasOwnProperty('omit')) { + parentOmit = def.omit; + def.omit = []; + } else { + parentOmit = _this.defaults.omit; + } + def.omit = def.omit.concat(parentOmit || []); - // Prepare for computed properties - _utils2.default.forOwn(def.computed, function (fn, field) { - if (_utils2.default.isFunction(fn)) { - def.computed[field] = [fn]; + // Prepare for computed properties + _utils2.default.forOwn(def.computed, function (fn, field) { + if (_utils2.default.isFunction(fn)) { + def.computed[field] = [fn]; + fn = def.computed[field]; + } + if (def.methods && field in def.methods) { + def.errorFn('Computed property "' + field + '" conflicts with previously defined prototype method!'); + } + def.omit.push(field); + if (_utils2.default.isArray(fn)) { + var deps; + if (fn.length === 1) { + var match = fn[0].toString().match(/function.*?\(([\s\S]*?)\)/); + deps = match[1].split(','); + deps = _utils2.default.filter(deps, function (x) { + return x; + }); + def.computed[field] = deps.concat(fn); fn = def.computed[field]; - } - if (def.methods && field in def.methods) { - def.errorFn('Computed property "' + field + '" conflicts with previously defined prototype method!'); - } - def.omit.push(field); - if (_utils2.default.isArray(fn)) { - var deps; - if (fn.length === 1) { - var match = fn[0].toString().match(/function.*?\(([\s\S]*?)\)/); - deps = match[1].split(','); - deps = _utils2.default.filter(deps, function (x) { - return x; - }); - def.computed[field] = deps.concat(fn); - fn = def.computed[field]; - if (deps.length) { - def.errorFn('Use the computed property array syntax for compatibility with minified code!'); - } + if (deps.length) { + def.errorFn('Use the computed property array syntax for compatibility with minified code!'); } - deps = fn.slice(0, fn.length - 1); - _utils2.default.forEach(deps, function (val, index) { - deps[index] = val.trim(); - }); - fn.deps = _utils2.default.filter(deps, function (dep) { - return !!dep; - }); - } else if (_utils2.default.isObject(fn)) { - Object.defineProperty(def[_class].prototype, field, fn); } - }); - - // add instance proxies of DS methods - _utils2.default.forEach(instanceMethods, function (name) { - def[_class].prototype['DS' + _utils2.default.pascalCase(name)] = function () { - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - args.unshift(this[def.idAttribute] || this); - args.unshift(def.name); - return _this[name].apply(_this, args); - }; - }); + deps = fn.slice(0, fn.length - 1); + _utils2.default.forEach(deps, function (val, index) { + deps[index] = val.trim(); + }); + fn.deps = _utils2.default.filter(deps, function (dep) { + return !!dep; + }); + } else if (_utils2.default.isObject(fn)) { + Object.defineProperty(def[_class].prototype, field, fn); + } + }); - // manually add instance proxy for DS#create - def[_class].prototype.DSCreate = function () { - for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - args[_key2] = arguments[_key2]; + // add instance proxies of DS methods + _utils2.default.forEach(instanceMethods, function (name) { + def[_class].prototype['DS' + _utils2.default.pascalCase(name)] = function () { + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; } - args.unshift(this); + args.unshift(this[def.idAttribute] || this); args.unshift(def.name); - return _this.create.apply(_this, args); + return _this[name].apply(_this, args); }; + }); - // Initialize store data for the new resource - _this.store[def.name] = { - collection: [], - expiresHeap: new _utils2.default.BinaryHeap(function (x) { - return x.expires; - }, function (x, y) { - return x.item === y; - }), - completedQueries: {}, - queryData: {}, - pendingQueries: {}, - index: {}, - modified: {}, - saved: {}, - previousAttributes: {}, - observers: {}, - changeHistories: {}, - changeHistory: [], - collectionModified: 0, - temporaryItems: {} - }; + // manually add instance proxy for DS#create + def[_class].prototype.DSCreate = function () { + for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } - var resource = _this.store[def.name]; + args.unshift(this); + args.unshift(def.name); + return _this.create.apply(_this, args); + }; - // start the reaping - if (def.reapInterval) { - setInterval(function () { - return def.reap(); - }, def.reapInterval); - } + // Initialize store data for the new resource + _this.store[def.name] = { + collection: [], + expiresHeap: new _utils2.default.BinaryHeap(function (x) { + return x.expires; + }, function (x, y) { + return x.item === y; + }), + completedQueries: {}, + queryData: {}, + pendingQueries: {}, + index: {}, + modified: {}, + saved: {}, + previousAttributes: {}, + observers: {}, + changeHistories: {}, + changeHistory: [], + collectionModified: 0, + temporaryItems: {} + }; - // proxy DS methods with shorthand ones - var fns = ['registerAdapter', 'getAdapterName', 'getAdapter', 'is', '!clear']; - for (var key in _this) { - if (typeof _this[key] === 'function') { - fns.push(key); - } - } + var resource = _this.store[def.name]; - /** - * Create the Resource shorthands that proxy DS methods. e.g. - * - * var store = new JSData.DS() - * var User = store.defineResource('user') - * - * store.update(resourceName, id, attrs[, options]) // DS method - * User.update(id, attrs[, options]) // DS method proxied on a Resource - */ - _utils2.default.forEach(fns, function (key) { - var k = key; - if (k[0] === '!') { - return; - } - if (_this[k].shorthand !== false) { - def[k] = function () { - for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { - args[_key3] = arguments[_key3]; - } + // start the reaping + if (def.reapInterval) { + setInterval(function () { + return def.reap(); + }, def.reapInterval); + } - args.unshift(def.name); - return _this[k].apply(_this, args); - }; - def[k].before = function (fn) { - var orig = def[k]; - def[k] = function () { - for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { - args[_key4] = arguments[_key4]; - } + // proxy DS methods with shorthand ones + var fns = ['registerAdapter', 'getAdapterName', 'getAdapter', 'is', '!clear']; + for (var key in _this) { + if (typeof _this[key] === 'function') { + fns.push(key); + } + } - return orig.apply(def, fn.apply(def, args) || args); - }; - }; - } else { + /** + * Create the Resource shorthands that proxy DS methods. e.g. + * + * var store = new JSData.DS() + * var User = store.defineResource('user') + * + * store.update(resourceName, id, attrs[, options]) // DS method + * User.update(id, attrs[, options]) // DS method proxied on a Resource + */ + _utils2.default.forEach(fns, function (key) { + var k = key; + if (k[0] === '!') { + return; + } + if (_this[k].shorthand !== false) { + def[k] = function () { + for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { + args[_key3] = arguments[_key3]; + } + + args.unshift(def.name); + return _this[k].apply(_this, args); + }; + def[k].before = function (fn) { + var orig = def[k]; def[k] = function () { - for (var _len5 = arguments.length, args = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) { - args[_key5] = arguments[_key5]; + for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { + args[_key4] = arguments[_key4]; } - return _this[k].apply(_this, args); + return orig.apply(def, fn.apply(def, args) || args); }; - } - }); + }; + } else { + def[k] = function () { + for (var _len5 = arguments.length, args = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) { + args[_key5] = arguments[_key5]; + } - def.beforeValidate = _utils2.default.promisify(def.beforeValidate); - def.validate = _utils2.default.promisify(def.validate); - def.afterValidate = _utils2.default.promisify(def.afterValidate); - def.beforeCreate = _utils2.default.promisify(def.beforeCreate); - def.afterCreate = _utils2.default.promisify(def.afterCreate); - def.afterFind = _utils2.default.promisify(def.afterFind); - def.afterFindAll = _utils2.default.promisify(def.afterFindAll); - def.afterLoadRelations = _utils2.default.promisify(def.afterLoadRelations); - def.beforeUpdate = _utils2.default.promisify(def.beforeUpdate); - def.afterUpdate = _utils2.default.promisify(def.afterUpdate); - def.beforeDestroy = _utils2.default.promisify(def.beforeDestroy); - def.afterDestroy = _utils2.default.promisify(def.afterDestroy); - - var defaultAdapter = void 0; - if (def.hasOwnProperty('defaultAdapter')) { - defaultAdapter = def.defaultAdapter; + return _this[k].apply(_this, args); + }; } + }); - // setup "actions" - _utils2.default.forOwn(def.actions, function (action, name) { - if (def[name] && !def.actions[name]) { - throw new Error('Cannot override existing method "' + name + '"!'); + def.beforeValidate = _utils2.default.promisify(def.beforeValidate); + def.validate = _utils2.default.promisify(def.validate); + def.afterValidate = _utils2.default.promisify(def.afterValidate); + def.beforeCreate = _utils2.default.promisify(def.beforeCreate); + def.afterCreate = _utils2.default.promisify(def.afterCreate); + def.afterFind = _utils2.default.promisify(def.afterFind); + def.afterFindAll = _utils2.default.promisify(def.afterFindAll); + def.afterLoadRelations = _utils2.default.promisify(def.afterLoadRelations); + def.beforeUpdate = _utils2.default.promisify(def.beforeUpdate); + def.afterUpdate = _utils2.default.promisify(def.afterUpdate); + def.beforeDestroy = _utils2.default.promisify(def.beforeDestroy); + def.afterDestroy = _utils2.default.promisify(def.afterDestroy); + + var defaultAdapter = void 0; + if (def.hasOwnProperty('defaultAdapter')) { + defaultAdapter = def.defaultAdapter; + } + + // setup "actions" + _utils2.default.forOwn(def.actions, function (action, name) { + if (def[name] && !def.actions[name]) { + throw new Error('Cannot override existing method "' + name + '"!'); + } + action.request = action.request || function (config) { + return config; + }; + action.response = action.response || function (response) { + return response; + }; + action.responseError = action.responseError || function (err) { + return _utils2.default.Promise.reject(err); + }; + def[name] = function (id, options) { + if (_utils2.default._o(id)) { + options = id; } - action.request = action.request || function (config) { - return config; - }; - action.response = action.response || function (response) { - return response; - }; - action.responseError = action.responseError || function (err) { - return _utils2.default.Promise.reject(err); - }; - def[name] = function (id, options) { - if (_utils2.default._o(id)) { - options = id; - } - options = options || {}; - var adapter = def.getAdapter(action.adapter || defaultAdapter || 'http'); - var config = _utils2.default.deepMixIn({}, action); - if (!options.hasOwnProperty('endpoint') && config.endpoint) { - options.endpoint = config.endpoint; - } - if (typeof options.getEndpoint === 'function') { - config.url = options.getEndpoint(def, options); - } else { - var _args = [options.basePath || def.basePath || adapter.defaults.basePath, adapter.getEndpoint(def, _utils2.default._sn(id) ? id : null, options)]; - if (_utils2.default._sn(id)) { - _args.push(id); - } - _args.push(action.pathname || name); - config.url = _utils2.default.makePath.apply(null, _args); + options = options || {}; + var adapter = def.getAdapter(action.adapter || defaultAdapter || 'http'); + var config = _utils2.default.deepMixIn({}, action); + if (!options.hasOwnProperty('endpoint') && config.endpoint) { + options.endpoint = config.endpoint; + } + if (typeof options.getEndpoint === 'function') { + config.url = options.getEndpoint(def, options); + } else { + var _args = [options.basePath || def.basePath || adapter.defaults.basePath, adapter.getEndpoint(def, _utils2.default._sn(id) ? id : null, options)]; + if (_utils2.default._sn(id)) { + _args.push(id); } - config.method = config.method || 'GET'; - config.resourceName = def.name; - _utils2.default.deepMixIn(config, options); - return new _utils2.default.Promise(function (resolve) { - return resolve(config); - }).then(options.request || action.request).then(function (config) { - return adapter.HTTP(config); - }).then(function (data) { - if (data && data.config) { - data.config.resourceName = def.name; - } - return data; - }).then(options.response || action.response, options.responseError || action.responseError); - }; - }); - - // mix in events - _utils2.default.Events(def); - - def.handleChange = function (data) { - resource.collectionModified = _utils2.default.updateTimestamp(resource.collectionModified); - if (def.notify) { - setTimeout(function () { - def.emit('DS.change', def, data); - }, 0); + _args.push(action.pathname || name); + config.url = _utils2.default.makePath.apply(null, _args); } + config.method = config.method || 'GET'; + config.resourceName = def.name; + _utils2.default.deepMixIn(config, options); + return new _utils2.default.Promise(function (resolve) { + return resolve(config); + }).then(options.request || action.request).then(function (config) { + return adapter.HTTP(config); + }).then(function (data) { + if (data && data.config) { + data.config.resourceName = def.name; + } + return data; + }).then(options.response || action.response, options.responseError || action.responseError); }; + }); - def.logFn('Done preparing resource.'); + // mix in events + _utils2.default.Events(def); - return { - v: def - }; - }(); + def.handleChange = function (data) { + resource.collectionModified = _utils2.default.updateTimestamp(resource.collectionModified); + if (def.notify) { + setTimeout(function () { + def.emit('DS.change', def, data); + }, 0); + } + }; + + def.logFn('Done preparing resource.'); - if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v; + return def; } catch (err) { _this.defaults.errorFn(err); delete definitions[definition.name]; @@ -4149,8 +4097,6 @@ return /******/ (function(modules) { // webpackBootstrap 'use strict'; - var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; - /* jshint eqeqeq:false */ /** * Eject an item from the store, if it is currently in the store. @@ -4194,66 +4140,60 @@ return /******/ (function(modules) { // webpackBootstrap } } if (found) { - var _ret = function () { - // lifecycle - definition.beforeEject(options, item); - if (options.notify) { - definition.emit('DS.beforeEject', definition, item); - } - - // find the item in any ($$injected) cached queries - var toRemove = []; - DSUtils.forOwn(resource.queryData, function (items, queryHash) { - if (items.$$injected) { - DSUtils.remove(items, item); - } - // optionally remove any empty queries - if (!items.length && options.clearEmptyQueries) { - toRemove.push(queryHash); - } - }); + // lifecycle + definition.beforeEject(options, item); + if (options.notify) { + definition.emit('DS.beforeEject', definition, item); + } - // clean up - DSUtils.forEach(resource.changeHistories[id], function (changeRecord) { - DSUtils.remove(resource.changeHistory, changeRecord); - }); - DSUtils.forEach(toRemove, function (queryHash) { - delete resource.completedQueries[queryHash]; - delete resource.queryData[queryHash]; - }); - if (resource.observers[id] && typeof resource.observers[id].close === 'function') { - // stop observation - resource.observers[id].close(); + // find the item in any ($$injected) cached queries + var toRemove = []; + DSUtils.forOwn(resource.queryData, function (items, queryHash) { + if (items.$$injected) { + DSUtils.remove(items, item); } - delete resource.observers[id]; - delete resource.index[id]; - delete resource.previousAttributes[id]; - delete resource.completedQueries[id]; - delete resource.pendingQueries[id]; - delete resource.changeHistories[id]; - delete resource.modified[id]; - delete resource.saved[id]; - if (definition.instanceEvents && item.off) { - item.off(); + // optionally remove any empty queries + if (!items.length && options.clearEmptyQueries) { + toRemove.push(queryHash); } + }); - // remove it from the store - resource.collection.splice(i, 1); - // collection has been modified - definition.handleChange(item); - - // lifecycle - definition.afterEject(options, item); - if (options.notify) { - definition.emit('DS.afterEject', definition, item); - } + // clean up + DSUtils.forEach(resource.changeHistories[id], function (changeRecord) { + DSUtils.remove(resource.changeHistory, changeRecord); + }); + DSUtils.forEach(toRemove, function (queryHash) { + delete resource.completedQueries[queryHash]; + delete resource.queryData[queryHash]; + }); + if (resource.observers[id] && typeof resource.observers[id].close === 'function') { + // stop observation + resource.observers[id].close(); + } + delete resource.observers[id]; + delete resource.index[id]; + delete resource.previousAttributes[id]; + delete resource.completedQueries[id]; + delete resource.pendingQueries[id]; + delete resource.changeHistories[id]; + delete resource.modified[id]; + delete resource.saved[id]; + if (definition.instanceEvents && item.off) { + item.off(); + } + + // remove it from the store + resource.collection.splice(i, 1); + // collection has been modified + definition.handleChange(item); - return { - v: item - }; - }(); + // lifecycle + definition.afterEject(options, item); + if (options.notify) { + definition.emit('DS.afterEject', definition, item); + } - if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v; + return item; } }; @@ -4496,13 +4436,11 @@ return /******/ (function(modules) { // webpackBootstrap var idA = definition.idAttribute; // compute the primary key if necessary if (c && c[idA]) { - (function () { - var args = []; - _utils2.default.forEach(c[idA].deps, function (dep) { - args.push(attrs[dep]); - }); - attrs[idA] = c[idA][c[idA].length - 1].apply(attrs, args); - })(); + var args = []; + _utils2.default.forEach(c[idA].deps, function (dep) { + args.push(attrs[dep]); + }); + attrs[idA] = c[idA][c[idA].length - 1].apply(attrs, args); } else if (options.temporary) { attrs[idA] = _utils2.default.guid(); } @@ -4513,161 +4451,157 @@ return /******/ (function(modules) { // webpackBootstrap throw error; } else { try { - (function () { - // when injecting object that contain their nested relations, this code - // will recursively inject them into their proper places in the data store. - // Magic! - _utils2.default.forEach(definition.relationList, function (def) { - var relationName = def.relation; - var relationDef = _this.definitions[relationName]; - var toInject = attrs[def.localField]; - if (typeof def.inject === 'function') { - def.inject(definition, def, attrs); - } else if (toInject && def.inject !== false) { - if (!relationDef) { - throw new _errors2.default.R(definition.name + ' relation is defined but the resource is not!'); - } - // handle injecting hasMany relations - if (_utils2.default._a(toInject)) { - (function () { - var items = []; - _utils2.default.forEach(toInject, function (toInjectItem) { - if (toInjectItem !== _this.store[relationName].index[toInjectItem[relationDef.idAttribute]]) { - try { - var injectedItem = relationDef.inject(toInjectItem, options.orig()); - if (def.foreignKey) { - _utils2.default.set(injectedItem, def.foreignKey, attrs[definition.idAttribute]); - } - items.push(injectedItem); - } catch (err) { - options.errorFn(err, 'Failed to inject ' + def.type + ' relation: "' + relationName + '"!'); - } - } - }); - })(); - } else { - // handle injecting belongsTo and hasOne relations - if (toInject !== _this.store[relationName].index[toInject[relationDef.idAttribute]]) { + // when injecting object that contain their nested relations, this code + // will recursively inject them into their proper places in the data store. + // Magic! + _utils2.default.forEach(definition.relationList, function (def) { + var relationName = def.relation; + var relationDef = _this.definitions[relationName]; + var toInject = attrs[def.localField]; + if (typeof def.inject === 'function') { + def.inject(definition, def, attrs); + } else if (toInject && def.inject !== false) { + if (!relationDef) { + throw new _errors2.default.R(definition.name + ' relation is defined but the resource is not!'); + } + // handle injecting hasMany relations + if (_utils2.default._a(toInject)) { + var items = []; + _utils2.default.forEach(toInject, function (toInjectItem) { + if (toInjectItem !== _this.store[relationName].index[toInjectItem[relationDef.idAttribute]]) { try { - var _injected = relationDef.inject(attrs[def.localField], options.orig()); + var injectedItem = relationDef.inject(toInjectItem, options.orig()); if (def.foreignKey) { - _utils2.default.set(_injected, def.foreignKey, attrs[definition.idAttribute]); - } - if (def.localKey) { - _utils2.default.set(attrs, def.localKey, _utils2.default.get(_injected, relationDef.idAttribute)); + _utils2.default.set(injectedItem, def.foreignKey, attrs[definition.idAttribute]); } + items.push(injectedItem); } catch (err) { options.errorFn(err, 'Failed to inject ' + def.type + ' relation: "' + relationName + '"!'); } } + }); + } else { + // handle injecting belongsTo and hasOne relations + if (toInject !== _this.store[relationName].index[toInject[relationDef.idAttribute]]) { + try { + var _injected = relationDef.inject(attrs[def.localField], options.orig()); + if (def.foreignKey) { + _utils2.default.set(_injected, def.foreignKey, attrs[definition.idAttribute]); + } + if (def.localKey) { + _utils2.default.set(attrs, def.localKey, _utils2.default.get(_injected, relationDef.idAttribute)); + } + } catch (err) { + options.errorFn(err, 'Failed to inject ' + def.type + ' relation: "' + relationName + '"!'); + } } } - }); + } + }); - // primary key of item being injected - var id = attrs[idA]; - // item being injected - var item = definition.get(id); - // 0 if the item is new, otherwise the previous last modified timestamp of the item - var initialLastModified = item ? resource.modified[id] : 0; - - // item is new - if (!item) { - if (attrs instanceof definition[definition['class']]) { - item = attrs; - } else { - item = new definition[definition['class']](); - if (options.applyDefaultsOnInject && options.defaultValues) { - _utils2.default.deepMixIn(item, _utils2.default.copy(options.defaultValues)); - } + // primary key of item being injected + var id = attrs[idA]; + // item being injected + var item = definition.get(id); + // 0 if the item is new, otherwise the previous last modified timestamp of the item + var initialLastModified = item ? resource.modified[id] : 0; + + // item is new + if (!item) { + if (attrs instanceof definition[definition['class']]) { + item = attrs; + } else { + item = new definition[definition['class']](); + if (options.applyDefaultsOnInject && options.defaultValues) { + _utils2.default.deepMixIn(item, _utils2.default.copy(options.defaultValues)); } + } - if (definition.instanceEvents && typeof item.emit !== 'function') { - _utils2.default.Events(item); + if (definition.instanceEvents && typeof item.emit !== 'function') { + _utils2.default.Events(item); + } + // remove relation properties from the item, since those relations have been injected by now + _utils2.default.forEach(definition.relationList, function (def) { + if (typeof def.link === 'boolean' ? def.link : !!definition.linkRelations) { + delete attrs[def.localField]; } - // remove relation properties from the item, since those relations have been injected by now - _utils2.default.forEach(definition.relationList, function (def) { - if (typeof def.link === 'boolean' ? def.link : !!definition.linkRelations) { - delete attrs[def.localField]; - } - }); + }); - // copy remaining properties to the injected item - _utils2.default.deepMixIn(item, attrs); + // copy remaining properties to the injected item + _utils2.default.deepMixIn(item, attrs); - // add item to collection - resource.collection.push(item); - resource.changeHistories[id] = []; + // add item to collection + resource.collection.push(item); + resource.changeHistories[id] = []; - // create the observer handler for the data to be injected - var _react = makeObserverHandler.call(_this, definition, resource); + // create the observer handler for the data to be injected + var _react = makeObserverHandler.call(_this, definition, resource); - // If we're in the browser, start observation - if (definition.watchChanges) { - resource.observers[id] = new _this.observe.ObjectObserver(item); - resource.observers[id].open(_react, item); - } + // If we're in the browser, start observation + if (definition.watchChanges) { + resource.observers[id] = new _this.observe.ObjectObserver(item); + resource.observers[id].open(_react, item); + } - // index item - resource.index[id] = item; - // fire observation handler for the first time - _react.call(item, {}, {}, {}, null, true); - // save "previous" attributes of the injected item, for change diffs later - resource.previousAttributes[id] = _utils2.default.copy(item, null, null, null, definition.relationFields); - // mark item as temporary if guid has been generated - if (options.temporary) { - resource.temporaryItems[id] = true; - } - } else { - // item is being re-injected - // new properties take precedence - if (options.onConflict === 'merge') { - _utils2.default.deepMixIn(item, attrs); - _utils2.default.forOwn(definition.computed, function (fn, field) { - _utils2.default.compute.call(item, fn, field); - }); - } else if (options.onConflict === 'replace') { - _utils2.default.forOwn(definition.computed, function (fn, field) { - _utils2.default.compute.call(attrs, fn, field); - }); - _utils2.default.forOwn(item, function (v, k) { - if (k !== definition.idAttribute) { - if (!attrs.hasOwnProperty(k)) { - delete item[k]; - } - } - }); - _utils2.default.forOwn(attrs, function (v, k) { - if (k !== definition.idAttribute) { - item[k] = v; + // index item + resource.index[id] = item; + // fire observation handler for the first time + _react.call(item, {}, {}, {}, null, true); + // save "previous" attributes of the injected item, for change diffs later + resource.previousAttributes[id] = _utils2.default.copy(item, null, null, null, definition.relationFields); + // mark item as temporary if guid has been generated + if (options.temporary) { + resource.temporaryItems[id] = true; + } + } else { + // item is being re-injected + // new properties take precedence + if (options.onConflict === 'merge') { + _utils2.default.deepMixIn(item, attrs); + _utils2.default.forOwn(definition.computed, function (fn, field) { + _utils2.default.compute.call(item, fn, field); + }); + } else if (options.onConflict === 'replace') { + _utils2.default.forOwn(definition.computed, function (fn, field) { + _utils2.default.compute.call(attrs, fn, field); + }); + _utils2.default.forOwn(item, function (v, k) { + if (k !== definition.idAttribute) { + if (!attrs.hasOwnProperty(k)) { + delete item[k]; } - }); - } + } + }); + _utils2.default.forOwn(attrs, function (v, k) { + if (k !== definition.idAttribute) { + item[k] = v; + } + }); + } - if (definition.resetHistoryOnInject) { - // clear change history for item - _this.commit(definition.name, id); - } - if (resource.observers[id] && typeof resource.observers[id] === 'function') { - // force observation callback to be fired if there are any changes to the item and `Object.observe` is not available - resource.observers[id].deliver(); - } + if (definition.resetHistoryOnInject) { + // clear change history for item + _this.commit(definition.name, id); } - // update modified timestamp of item - resource.modified[id] = initialLastModified && resource.modified[id] === initialLastModified ? _utils2.default.updateTimestamp(resource.modified[id]) : resource.modified[id]; - - // reset expiry tracking for item - resource.expiresHeap.remove(item); - var timestamp = new Date().getTime(); - resource.expiresHeap.push({ - item: item, - timestamp: timestamp, - expires: definition.maxAge ? timestamp + definition.maxAge : Number.MAX_VALUE - }); + if (resource.observers[id] && typeof resource.observers[id] === 'function') { + // force observation callback to be fired if there are any changes to the item and `Object.observe` is not available + resource.observers[id].deliver(); + } + } + // update modified timestamp of item + resource.modified[id] = initialLastModified && resource.modified[id] === initialLastModified ? _utils2.default.updateTimestamp(resource.modified[id]) : resource.modified[id]; + + // reset expiry tracking for item + resource.expiresHeap.remove(item); + var timestamp = new Date().getTime(); + resource.expiresHeap.push({ + item: item, + timestamp: timestamp, + expires: definition.maxAge ? timestamp + definition.maxAge : Number.MAX_VALUE + }); - // final injected item - injected = item; - })(); + // final injected item + injected = item; } catch (err) { options.errorFn(err, attrs); } @@ -5089,8 +5023,9 @@ return /******/ (function(modules) { // webpackBootstrap } }).then(function (item) { if (!item) { + var query = void 0; var usePendingFind = DSUtils.isFunction(options.usePendingFind) ? options.usePendingFind.call(this, resourceName, id, options) : options.usePendingFind; - if (!(id in resource.pendingQueries) && usePendingFind) { + if (!(id in resource.pendingQueries) || !usePendingFind) { var promise = void 0; var strategy = options.findStrategy || options.strategy; @@ -5115,7 +5050,7 @@ return /******/ (function(modules) { // webpackBootstrap promise = _this.adapters[adapter].find(definition, id, options); } - resource.pendingQueries[id] = promise.then(function (data) { + query = promise.then(function (data) { return options.afterFind.call(data, options, data); }).then(function (data) { // Query is no longer pending @@ -5132,8 +5067,14 @@ return /******/ (function(modules) { // webpackBootstrap return definition.createInstance(data, options.orig()); } }); + + if (usePendingFind) { + resource.pendingQueries[id] = query; + } + } else { + query = resource.pendingQueries[id]; } - return resource.pendingQueries[id]; + return query; } else { // resolve immediately with the item return item; @@ -5253,8 +5194,9 @@ return /******/ (function(modules) { // webpackBootstrap } }).then(function (items) { if (!items) { + var query = void 0; var usePendingFindAll = DSUtils.isFunction(options.usePendingFindAll) ? options.usePendingFindAll.call(this, resourceName, params, options) : options.usePendingFindAll; - if (!(queryHash in resource.pendingQueries) && usePendingFindAll) { + if (!(queryHash in resource.pendingQueries) || !usePendingFindAll) { var promise = void 0; var strategy = options.findAllStrategy || options.strategy; @@ -5279,7 +5221,7 @@ return /******/ (function(modules) { // webpackBootstrap promise = _this.adapters[adapter].findAll(definition, params, options); } - resource.pendingQueries[queryHash] = promise.then(function (data) { + query = promise.then(function (data) { return options.afterFindAll.call(data, options, data); }).then(function (data) { // Query is no longer pending @@ -5296,9 +5238,15 @@ return /******/ (function(modules) { // webpackBootstrap return data; } }); + + if (usePendingFindAll) { + resource.pendingQueries[queryHash] = query; + } + } else { + query = resource.pendingQueries[queryHash]; } - return resource.pendingQueries[queryHash]; + return query; } else { // resolve immediately with the items return items; @@ -5332,8 +5280,8 @@ return /******/ (function(modules) { // webpackBootstrap */ module.exports = function loadRelations(resourceName, instance, relations, options) { var _this = this; - var DSUtils = _this.utils; - var DSErrors = _this.errors; + var DSUtils = _this.utils, + DSErrors = _this.errors; var definition = _this.definitions[resourceName]; var _options = void 0; @@ -5356,79 +5304,77 @@ return /******/ (function(modules) { // webpackBootstrap } else if (!DSUtils._a(relations)) { reject(new DSErrors.IA('"relations" must be a string or an array!')); } else { - (function () { - _options = DSUtils._(definition, options); - _options.logFn('loadRelations', instance, relations, _options); - - var tasks = []; - - DSUtils.forEach(definition.relationList, function (def) { - var relationName = def.relation; - var relationDef = definition.getResource(relationName); - var __options = DSUtils._(relationDef, options); - - // relations can be loaded based on resource name or field name - if (!relations.length || DSUtils.contains(relations, relationName) || DSUtils.contains(relations, def.localField)) { - var task = void 0; - var params = {}; - if (__options.allowSimpleWhere) { - params[def.foreignKey] = instance[definition.idAttribute]; - } else { - params.where = {}; - params.where[def.foreignKey] = { - '==': instance[definition.idAttribute] - }; - } + _options = DSUtils._(definition, options); + _options.logFn('loadRelations', instance, relations, _options); + + var tasks = []; + + DSUtils.forEach(definition.relationList, function (def) { + var relationName = def.relation; + var relationDef = definition.getResource(relationName); + var __options = DSUtils._(relationDef, options); + + // relations can be loaded based on resource name or field name + if (!relations.length || DSUtils.contains(relations, relationName) || DSUtils.contains(relations, def.localField)) { + var task = void 0; + var params = {}; + if (__options.allowSimpleWhere) { + params[def.foreignKey] = instance[definition.idAttribute]; + } else { + params.where = {}; + params.where[def.foreignKey] = { + '==': instance[definition.idAttribute] + }; + } - var orig = __options.orig(); - var defKey = def.localKey ? DSUtils.get(instance, def.localKey) : null; - var hasDefKey = !!(defKey || defKey === 0); + var orig = __options.orig(); + var defKey = def.localKey ? DSUtils.get(instance, def.localKey) : null; + var hasDefKey = !!(defKey || defKey === 0); - if (typeof def.load === 'function') { - task = def.load(definition, def, instance, orig); - } else { - if (def.type === 'hasMany') { - if (def.localKeys) { - delete params[def.foreignKey]; - var keys = DSUtils.get(instance, def.localKeys) || []; - keys = DSUtils._a(keys) ? keys : DSUtils.keys(keys); - params.where = _defineProperty({}, relationDef.idAttribute, { - 'in': keys - }); - orig.localKeys = keys; - } else if (def.foreignKeys) { - delete params[def.foreignKey]; - params.where = _defineProperty({}, def.foreignKeys, { - contains: instance[definition.idAttribute] - }); - } - task = relationDef.findAll(params, orig); - } else if (def.type === 'hasOne') { - if (def.localKey && hasDefKey) { - task = relationDef.find(defKey, orig); - } else if (def.foreignKey) { - task = relationDef.findAll(params, orig).then(function (hasOnes) { - return hasOnes.length ? hasOnes[0] : null; - }); - } - } else if (hasDefKey) { + if (typeof def.load === 'function') { + task = def.load(definition, def, instance, orig); + } else { + if (def.type === 'hasMany') { + if (def.localKeys) { + delete params[def.foreignKey]; + var keys = DSUtils.get(instance, def.localKeys) || []; + keys = DSUtils._a(keys) ? keys : DSUtils.keys(keys); + params.where = _defineProperty({}, relationDef.idAttribute, { + 'in': keys + }); + orig.localKeys = keys; + } else if (def.foreignKeys) { + delete params[def.foreignKey]; + params.where = _defineProperty({}, def.foreignKeys, { + contains: instance[definition.idAttribute] + }); + } + task = relationDef.findAll(params, orig); + } else if (def.type === 'hasOne') { + if (def.localKey && hasDefKey) { task = relationDef.find(defKey, orig); + } else if (def.foreignKey) { + task = relationDef.findAll(params, orig).then(function (hasOnes) { + return hasOnes.length ? hasOnes[0] : null; + }); } + } else if (hasDefKey) { + task = relationDef.find(defKey, orig); } + } - if (task) { - if (!_options.linkRelations) { - task = task.then(function (data) { - instance[def.localField] = data; - }); - } - tasks.push(task); + if (task) { + if (!_options.linkRelations) { + task = task.then(function (data) { + instance[def.localField] = data; + }); } + tasks.push(task); } - }); + } + }); - resolve(tasks); - })(); + resolve(tasks); } }).then(function (tasks) { return DSUtils.Promise.all(tasks); @@ -5443,8 +5389,6 @@ return /******/ (function(modules) { // webpackBootstrap 'use strict'; - var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; - /** * Find expired items of the specified resource type and perform the configured action. * @@ -5489,32 +5433,24 @@ return /******/ (function(modules) { // webpackBootstrap } if (options.reapAction === 'inject') { - (function () { - var timestamp = new Date().getTime(); - DSUtils.forEach(items, function (item) { - resource.expiresHeap.push({ - item: item, - timestamp: timestamp, - expires: definition.maxAge ? timestamp + definition.maxAge : Number.MAX_VALUE - }); + var timestamp = new Date().getTime(); + DSUtils.forEach(items, function (item) { + resource.expiresHeap.push({ + item: item, + timestamp: timestamp, + expires: definition.maxAge ? timestamp + definition.maxAge : Number.MAX_VALUE }); - })(); + }); } else if (options.reapAction === 'eject') { DSUtils.forEach(items, function (item) { definition.eject(item[definition.idAttribute]); }); } else if (options.reapAction === 'refresh') { - var _ret2 = function () { - var tasks = []; - DSUtils.forEach(items, function (item) { - tasks.push(definition.refresh(item[definition.idAttribute])); - }); - return { - v: DSUtils.Promise.all(tasks) - }; - }(); - - if ((typeof _ret2 === 'undefined' ? 'undefined' : _typeof(_ret2)) === "object") return _ret2.v; + var tasks = []; + DSUtils.forEach(items, function (item) { + tasks.push(definition.refresh(item[definition.idAttribute])); + }); + return DSUtils.Promise.all(tasks); } return items; }).then(function (items) { @@ -5535,8 +5471,6 @@ return /******/ (function(modules) { // webpackBootstrap 'use strict'; - var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; - /** * Save a single item in its present state. * @@ -5547,8 +5481,8 @@ return /******/ (function(modules) { // webpackBootstrap */ module.exports = function save(resourceName, id, options) { var _this = this; - var DSUtils = _this.utils; - var DSErrors = _this.errors; + var DSUtils = _this.utils, + DSErrors = _this.errors; var definition = _this.definitions[resourceName]; var resource = _this.store[resourceName]; @@ -5586,39 +5520,31 @@ return /******/ (function(modules) { // webpackBootstrap } // only send changed properties to the adapter if (options.changesOnly) { - var key; - - var _ret = function () { - if (resource.observers[id] && typeof resource.observers[id] === 'function') { - resource.observers[id].deliver(); - } - var toKeep = []; - var changes = definition.changes(id); - - for (key in changes.added) { - toKeep.push(key); - } - for (key in changes.changed) { - toKeep.push(key); - } - DSUtils.forEach(options.always, function (property) { - toKeep.push(property); - }); - changes = DSUtils.pick(attrs, toKeep); - // no changes? no save - if (DSUtils.isEmpty(changes)) { - // no changes, return - options.logFn('save - no changes', id, options); - noChanges = true; - return { - v: attrs - }; - } else { - attrs = changes; - } - }(); + if (resource.observers[id] && typeof resource.observers[id] === 'function') { + resource.observers[id].deliver(); + } + var toKeep = []; + var changes = definition.changes(id); - if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v; + for (var key in changes.added) { + toKeep.push(key); + } + for (key in changes.changed) { + toKeep.push(key); + } + DSUtils.forEach(options.always, function (property) { + toKeep.push(property); + }); + changes = DSUtils.pick(attrs, toKeep); + // no changes? no save + if (DSUtils.isEmpty(changes)) { + // no changes, return + options.logFn('save - no changes', id, options); + noChanges = true; + return attrs; + } else { + attrs = changes; + } } adapter = definition.getAdapterName(options); return _this.adapters[adapter].update(definition, id, DSUtils.omit(attrs, options.omit), options); @@ -5666,8 +5592,8 @@ return /******/ (function(modules) { // webpackBootstrap */ module.exports = function update(resourceName, id, attrs, options) { var _this = this; - var DSUtils = _this.utils; - var DSErrors = _this.errors; + var DSUtils = _this.utils, + DSErrors = _this.errors; var definition = _this.definitions[resourceName]; var adapter = void 0; @@ -5731,8 +5657,6 @@ return /******/ (function(modules) { // webpackBootstrap 'use strict'; - var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; - /** * Update a collection of items using the supplied properties hash. * @@ -5744,8 +5668,8 @@ return /******/ (function(modules) { // webpackBootstrap */ module.exports = function updateAll(resourceName, attrs, params, options) { var _this = this; - var DSUtils = _this.utils; - var DSErrors = _this.errors; + var DSUtils = _this.utils, + DSErrors = _this.errors; var definition = _this.definitions[resourceName]; var adapter = void 0; @@ -5783,37 +5707,25 @@ return /******/ (function(modules) { // webpackBootstrap } var origOptions = options.orig(); if (options.cacheResponse) { - var _ret = function () { - // inject the updated items into the store - var injected = definition.inject(data, origOptions); - var resource = _this.store[resourceName]; - // mark the items as "saved" - DSUtils.forEach(injected, function (i) { - var id = i[definition.idAttribute]; - resource.saved[id] = DSUtils.updateTimestamp(resource.saved[id]); - if (!definition.resetHistoryOnInject) { - resource.previousAttributes[id] = DSUtils.copy(i, null, null, null, definition.relationFields); - } - }); - return { - v: injected - }; - }(); - - if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v; + // inject the updated items into the store + var injected = definition.inject(data, origOptions); + var resource = _this.store[resourceName]; + // mark the items as "saved" + DSUtils.forEach(injected, function (i) { + var id = i[definition.idAttribute]; + resource.saved[id] = DSUtils.updateTimestamp(resource.saved[id]); + if (!definition.resetHistoryOnInject) { + resource.previousAttributes[id] = DSUtils.copy(i, null, null, null, definition.relationFields); + } + }); + return injected; } else { - var _ret2 = function () { - // just return instances - var instances = []; - DSUtils.forEach(data, function (item) { - instances.push(definition.createInstance(item, origOptions)); - }); - return { - v: instances - }; - }(); - - if ((typeof _ret2 === 'undefined' ? 'undefined' : _typeof(_ret2)) === "object") return _ret2.v; + // just return instances + var instances = []; + DSUtils.forEach(data, function (item) { + instances.push(definition.createInstance(item, origOptions)); + }); + return instances; } }).then(function (items) { return DSUtils.respond(items, { adapter: adapter }, options); diff --git a/dist/js-data-debug.js.map b/dist/js-data-debug.js.map index 09b3cb8b..8a36a899 100644 --- a/dist/js-data-debug.js.map +++ b/dist/js-data-debug.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap fddaa3a55430ff39835f","webpack:///./src/index.js","webpack:///./src/datastore/index.js","webpack:///./src/utils.js","webpack:///./src/errors.js","webpack:///./~/yabh/dist/yabh.js","webpack:///./~/mout/array/forEach.js","webpack:///./~/mout/array/slice.js","webpack:///./~/mout/object/forOwn.js","webpack:///./~/mout/object/hasOwn.js","webpack:///./~/mout/object/forIn.js","webpack:///./~/mout/array/contains.js","webpack:///./~/mout/array/indexOf.js","webpack:///./~/mout/object/deepMixIn.js","webpack:///./~/mout/lang/isPlainObject.js","webpack:///./~/mout/string/pascalCase.js","webpack:///./~/mout/lang/toString.js","webpack:///./~/mout/string/camelCase.js","webpack:///./~/mout/string/replaceAccents.js","webpack:///./~/mout/string/removeNonWord.js","webpack:///./~/mout/string/upperCase.js","webpack:///./~/mout/string/lowerCase.js","webpack:///./~/mout/array/remove.js","webpack:///./~/mout/object/pick.js","webpack:///./~/mout/object/keys.js","webpack:///./~/mout/array/sort.js","webpack:///./~/mout/object/get.js","webpack:///./~/mout/lang/isPrimitive.js","webpack:///./~/mout/object/set.js","webpack:///./~/mout/object/namespace.js","webpack:///./lib/observe-js/observe.js","webpack:///./~/mout/random/guid.js","webpack:///./~/mout/random/randHex.js","webpack:///./~/mout/random/choice.js","webpack:///./~/mout/random/randInt.js","webpack:///./~/mout/number/MIN_INT.js","webpack:///./~/mout/number/MAX_INT.js","webpack:///./~/mout/random/rand.js","webpack:///./~/mout/random/random.js","webpack:///./~/mout/lang/isArray.js","webpack:///./~/mout/lang/isKind.js","webpack:///./~/mout/lang/kindOf.js","webpack:///./src/datastore/sync_methods/index.js","webpack:///./src/datastore/sync_methods/defineResource.js","webpack:///./src/datastore/sync_methods/eject.js","webpack:///./src/datastore/sync_methods/ejectAll.js","webpack:///./src/datastore/sync_methods/filter.js","webpack:///./src/datastore/sync_methods/inject.js","webpack:///./src/datastore/async_methods/index.js","webpack:///./src/datastore/async_methods/create.js","webpack:///./src/datastore/async_methods/destroy.js","webpack:///./src/datastore/async_methods/destroyAll.js","webpack:///./src/datastore/async_methods/find.js","webpack:///./src/datastore/async_methods/findAll.js","webpack:///./src/datastore/async_methods/loadRelations.js","webpack:///./src/datastore/async_methods/reap.js","webpack:///./src/datastore/async_methods/save.js","webpack:///./src/datastore/async_methods/update.js","webpack:///./src/datastore/async_methods/updateAll.js"],"names":["module","exports","DS","DSUtils","DSErrors","createStore","options","version","full","major","parseInt","minor","patch","alpha","beta","lifecycleNoopCb","resource","attrs","cb","lifecycleNoop","compare","orderBy","index","a","b","def","cA","get","cB","_s","upperCase","length","Defaults","error","Error","err","name","defaultsPrototype","prototype","actions","afterCreate","afterCreateCollection","afterCreateInstance","afterDestroy","afterEject","afterFind","afterFindAll","afterInject","afterLoadRelations","afterReap","afterUpdate","afterValidate","allowSimpleWhere","applyDefaultsOnInject","basePath","beforeCreate","beforeCreateCollection","beforeCreateInstance","beforeDestroy","beforeEject","beforeInject","beforeReap","beforeUpdate","beforeValidate","bypassCache","cacheResponse","w","csp","clearEmptyQueries","computed","defaultAdapter","debug","defaultValues","eagerEject","eagerInject","endpoint","console","c","errorHandler","Promise","reject","fallbackAdapters","findStrictCache","idAttribute","ignoredChanges","instanceEvents","keepChangeHistory","linkRelations","log","d","e","info","logFn","_this","maxAge","methods","notify","omit","onConflict","reapAction","reapInterval","relationsEnumerable","resetHistoryOnInject","returnMeta","scopes","strategy","upsert","useClass","useFilter","usePendingFind","usePendingFindAll","validate","watchChanges","escapeRegExp","percentRegExp","underscoreRegExp","escape","pattern","replace","like","flags","RegExp","defaultFilter","collection","resourceName","params","definition","definitions","idA","store","filtered","where","reserved","skip","offset","limit","sort","_o","forOwn","value","key","isEmpty","filter","first","keep","excludeTemporary","temporaryItems","clause","field","term","op","expr","isOr","val","substr","intersection","indexOf","contains","exec","undefined","_a","forEach","i","IA","toJson","actual","expected","_n","slice","Math","min","adapters","defaults","observe","v","k","concat","P","spread","then","arr","apply","Events","errorIfNotExist","adapter","getAdapterName","Adapter","isFunction","default","instance","NER","class","ejected","ejectAll","completedQueries","queryData","args","defaultHandler","dsPrototype","shorthand","getAdapter","registerAdapter","errors","utils","addMethods","target","obj","before","fn","orig","BinaryHeap","require","deepMixIn","pascalCase","remove","pick","_keys","set","guid","File","objectProto","Object","toString","window","_isArray","call","isArray","Array","isRegExp","isString","isObject","isDate","isNumber","type","isStringOrNumber","isStringOrNumberErr","isObjectErr","isArrayErr","result","array1","array2","item","push","array","thisObj","results","events","defineProperties","on","func","ctx","f","off","listeners","splice","emit","shift","toPromisify","isBlacklisted","copy","source","destination","stackSource","stackDest","blacklist","Date","getTime","match","lastIndex","create","getPrototypeOf","hasOwnProperty","equals","o1","o2","t1","t2","keySet","charAt","resolveId","idOrInstance","resolveItem","isValidString","join","items","separator","makePath","_","parent","constructor","promisify","O","Options","self","_sn","_snErr","_oErr","_aErr","applyScope","scope","_params","unshift","_scope","scopeDef","compute","deps","dep","diffObjectFromOldObject","fillIn","fromJson","json","JSON","parse","keys","bl","toRemove","resolve","promise","stringify","updateTimestamp","timestamp","newTimestamp","now","removeCircular","object","rmCirc","nu","Boolean","Number","String","cur","respond","response","meta","applyRelationGettersToTarget","relationList","relationName","relation","localField","localKey","foreignKey","localKeys","foreignKeys","enumerable","link","prop","hasKey","getResource","getAll","children","id","child","sibling","defineProperty","IllegalArgumentError","message","captureStackTrace","RuntimeError","NonexistentResourceError","R","fakeId","diffIsEmpty","diff","added","removed","changed","check","fnName","_resourceName","_id","_options","changes","observer","observers","deliver","relationFields","previousAttributes","changeset","toKeep","changeHistory","errorFn","changeHistories","commit","changeRecord","createInstance","relationData","Resource","relationDataItem","Constructor","createCollection","fetch","__this","findAll","data","$$injected","writable","defineResource","digest","Platform","performMicrotaskCheckpoint","eject","ids","hasChanges","inject","isNew","lastModified","modified","collectionModified","lastSaved","saved","previous","revert","preserve","injectObj","previousInstance","instanceMethods","extends","_class","relations","relatedModels","defs","belongsTo","parents","relatedModel","modelName","parentKey","parentField","freeze","Function","proto","Ctor","m","setTimeout","handleChange","parentOmit","split","x","trim","DSCreate","expiresHeap","expires","y","pendingQueries","setInterval","reap","fns","action","request","config","responseError","getEndpoint","url","pathname","method","HTTP","found","queryHash","close","makeObserverHandler","_react","oldValueFn","firstTime","innerId","_inject","injected","temporary","relationDef","toInject","toInjectItem","injectedItem","initialLastModified","ObjectObserver","open","MAX_VALUE","destroy","destroyAll","find","loadRelations","refresh","catch","refreshAll","existing","save","update","updateAll","rejectionError","created","toEject","expired","findStrategy","makeFallbackCall","findFallbackAdapters","processResults","date","findAllStrategy","findAllFallbackAdapters","tasks","__options","task","defKey","hasDefKey","load","hasOnes","all","expiredItem","peek","pop","noChanges","changesOnly","always","property","origOptions","instances"],"mappings":"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La;AAMbxK,QAAKwK;AANQ,E;;;;;;AC1Cf;AACA;AACA;AACA;AACA,EAAC,oBAAoB;;AAErB;AACA;AACA,cAAa,MAAM;AACnB,cAAa,SAAS;AACtB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAa,MAAM;AACnB,cAAa,SAAS;AACtB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAmB,YAAY;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,EAAC;AACD,iC;;;;;;;;AC/IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;AClBA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAS;AACT;AACA,UAAS;AACT;AACA;;AAEA;AACA;AACA,UAAS;AACT;AACA,UAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;AChCA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;;AAEA;;;;;;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;ACTA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,0BAAyB,iBAAiB;AAC1C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;ACzEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;;;;;;;AC1BA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;;;;;;;;;;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA2C;AAC3C;AACA;AACA;;;;;;;;AClBA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AClCA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;ACTA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;ACXA;;AAEA;AACA;AACA;AACA;AACA;AACA,qBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;ACfA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;;AAEA;;;;;;;;;;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;ACpDA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;AClBA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;;;;;;;;;ACdA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;;AAEA;;;;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA,wCAAuC;AACvC,oBAAmB,YAAY,EAAE;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAmB,eAAe;AAClC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,oBAAmB,qBAAqB;AACxC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,8BAA6B;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;;AAEA;AACA,MAAK;;AAEL;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,sBAAqB,oBAAoB;AACzC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,yBAAwB;AACxB,2BAA0B;AAC1B,2BAA0B;AAC1B;AACA;AACA;AACA;;AAEA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAmB,0BAA0B;AAC7C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,wDAAuD;AACvD;AACA;AACA;;AAEA,EAAC;;;;;;;AC/hBD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACtBA;;AAEA;;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","file":"./dist/js-data-debug.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"JSData\"] = factory();\n\telse\n\t\troot[\"JSData\"] = factory();\n})(this, function() {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap fddaa3a55430ff39835f\n **/","import DS from './datastore/index'\nimport DSUtils from './utils'\nimport DSErrors from './errors'\n\n/**\n * The library export.\n * - window.JSData\n * - require('js-data')\n * - define(['js-data', function (JSData) { ... }]);\n * - import JSData from 'js-data'\n */\nmodule.exports = {\n DS,\n DSUtils,\n DSErrors,\n createStore (options) {\n return new DS(options)\n },\n version: {\n full: '<%= pkg.version %>',\n major: parseInt('<%= major %>', 10),\n minor: parseInt('<%= minor %>', 10),\n patch: parseInt('<%= patch %>', 10),\n alpha: '<%= alpha %>' !== 'false' ? '<%= alpha %>' : false,\n beta: '<%= beta %>' !== 'false' ? '<%= beta %>' : false\n }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/index.js\n **/","/* jshint eqeqeq:false */\nimport DSUtils from '../utils'\nimport DSErrors from '../errors'\nimport syncMethods from './sync_methods/index'\nimport asyncMethods from './async_methods/index'\n\nfunction lifecycleNoopCb (resource, attrs, cb) {\n cb(null, attrs)\n}\n\nfunction lifecycleNoop (resource, attrs) {\n return attrs\n}\n\nfunction compare (orderBy, index, a, b) {\n let def = orderBy[index]\n let cA = DSUtils.get(a, def[0])\n let cB = DSUtils.get(b, def[0])\n if (DSUtils._s(cA)) {\n cA = DSUtils.upperCase(cA)\n }\n if (DSUtils._s(cB)) {\n cB = DSUtils.upperCase(cB)\n }\n if (def[1] === 'DESC') {\n if (cB < cA) {\n return -1\n } else if (cB > cA) {\n return 1\n } else {\n if (index < orderBy.length - 1) {\n return compare(orderBy, index + 1, a, b)\n } else {\n return 0\n }\n }\n } else {\n if (cA < cB) {\n return -1\n } else if (cA > cB) {\n return 1\n } else {\n if (index < orderBy.length - 1) {\n return compare(orderBy, index + 1, a, b)\n } else {\n return 0\n }\n }\n }\n}\n\nclass Defaults {\n errorFn (a, b) {\n if (this.error && typeof this.error === 'function') {\n try {\n if (typeof a === 'string') {\n throw new Error(a)\n } else {\n throw a\n }\n } catch (err) {\n a = err\n }\n this.error(this.name || null, a || null, b || null)\n }\n }\n}\n\nvar defaultsPrototype = Defaults.prototype\n\ndefaultsPrototype.actions = {}\ndefaultsPrototype.afterCreate = lifecycleNoopCb\ndefaultsPrototype.afterCreateCollection = lifecycleNoop\ndefaultsPrototype.afterCreateInstance = lifecycleNoop\ndefaultsPrototype.afterDestroy = lifecycleNoopCb\ndefaultsPrototype.afterEject = lifecycleNoop\ndefaultsPrototype.afterFind = lifecycleNoopCb\ndefaultsPrototype.afterFindAll = lifecycleNoopCb\ndefaultsPrototype.afterInject = lifecycleNoop\ndefaultsPrototype.afterLoadRelations = lifecycleNoopCb\ndefaultsPrototype.afterReap = lifecycleNoop\ndefaultsPrototype.afterUpdate = lifecycleNoopCb\ndefaultsPrototype.afterValidate = lifecycleNoopCb\ndefaultsPrototype.allowSimpleWhere = true\ndefaultsPrototype.applyDefaultsOnInject = false\ndefaultsPrototype.basePath = ''\ndefaultsPrototype.beforeCreate = lifecycleNoopCb\ndefaultsPrototype.beforeCreateCollection = lifecycleNoop\ndefaultsPrototype.beforeCreateInstance = lifecycleNoop\ndefaultsPrototype.beforeDestroy = lifecycleNoopCb\ndefaultsPrototype.beforeEject = lifecycleNoop\ndefaultsPrototype.beforeInject = lifecycleNoop\ndefaultsPrototype.beforeReap = lifecycleNoop\ndefaultsPrototype.beforeUpdate = lifecycleNoopCb\ndefaultsPrototype.beforeValidate = lifecycleNoopCb\ndefaultsPrototype.bypassCache = false\ndefaultsPrototype.cacheResponse = !!DSUtils.w\ndefaultsPrototype.csp = false\ndefaultsPrototype.clearEmptyQueries = true\ndefaultsPrototype.computed = {}\ndefaultsPrototype.defaultAdapter = 'http'\ndefaultsPrototype.debug = false\ndefaultsPrototype.defaultValues = {}\ndefaultsPrototype.eagerEject = false\n// TODO: Implement eagerInject in DS#create\ndefaultsPrototype.eagerInject = false\ndefaultsPrototype.endpoint = ''\ndefaultsPrototype.error = console ? (a, b, c) => console[typeof console.error === 'function' ? 'error' : 'log'](a, b, c) : false\ndefaultsPrototype.errorHandler = function (...args) {\n return DSUtils.Promise.reject(args[0])\n}\ndefaultsPrototype.fallbackAdapters = ['http']\ndefaultsPrototype.findStrictCache = false\ndefaultsPrototype.idAttribute = 'id'\ndefaultsPrototype.ignoredChanges = [/\\$/]\ndefaultsPrototype.instanceEvents = !!DSUtils.w\ndefaultsPrototype.keepChangeHistory = false\ndefaultsPrototype.linkRelations = !!DSUtils.w\ndefaultsPrototype.log = console ? (a, b, c, d, e) => console[typeof console.info === 'function' ? 'info' : 'log'](a, b, c, d, e) : false\n\ndefaultsPrototype.logFn = function (a, b, c, d) {\n let _this = this\n if (_this.debug && _this.log && typeof _this.log === 'function') {\n _this.log(_this.name || null, a || null, b || null, c || null, d || null)\n }\n}\n\ndefaultsPrototype.maxAge = false\ndefaultsPrototype.methods = {}\ndefaultsPrototype.notify = !!DSUtils.w\ndefaultsPrototype.omit = []\ndefaultsPrototype.onConflict = 'merge'\ndefaultsPrototype.reapAction = DSUtils.w ? 'inject' : 'none'\ndefaultsPrototype.reapInterval = DSUtils.w ? 30000 : false\ndefaultsPrototype.relationsEnumerable = false\ndefaultsPrototype.resetHistoryOnInject = true\ndefaultsPrototype.returnMeta = false\ndefaultsPrototype.scopes = {}\ndefaultsPrototype.strategy = 'single'\ndefaultsPrototype.upsert = !!DSUtils.w\ndefaultsPrototype.useClass = true\ndefaultsPrototype.useFilter = false\ndefaultsPrototype.usePendingFind = true\ndefaultsPrototype.usePendingFindAll = true\ndefaultsPrototype.validate = lifecycleNoopCb\ndefaultsPrototype.watchChanges = !!DSUtils.w\n\nlet escapeRegExp = /([.*+?^=!:${}()|[\\]\\/\\\\])/g\nlet percentRegExp = /%/g\nlet underscoreRegExp = /_/g\n\nfunction escape (pattern) {\n return pattern.replace(escapeRegExp, '\\\\$1')\n}\n\nfunction like (pattern, flags) {\n return new RegExp(`^${(escape(pattern).replace(percentRegExp, '.*').replace(underscoreRegExp, '.'))}$`, flags)\n}\n\ndefaultsPrototype.defaultFilter = function (collection, resourceName, params, options) {\n let definition = this.definitions[resourceName]\n let idA = 'id'\n let resource\n if (definition) {\n idA = definition.idAttribute\n resource = this.store[resourceName]\n }\n let filtered = collection\n let where = null\n let reserved = {\n skip: '',\n offset: '',\n where: '',\n limit: '',\n orderBy: '',\n sort: ''\n }\n\n params = params || {}\n options = options || {}\n\n if (DSUtils._o(params.where)) {\n where = params.where\n } else {\n where = {}\n }\n\n if (options.allowSimpleWhere) {\n DSUtils.forOwn(params, function (value, key) {\n if (!(key in reserved) && !(key in where)) {\n where[key] = {\n '==': value\n }\n }\n })\n }\n\n if (DSUtils.isEmpty(where)) {\n where = null\n }\n\n if (where) {\n filtered = DSUtils.filter(filtered, function (attrs) {\n let first = true\n let keep = true\n\n if (options.excludeTemporary && resource && resource.temporaryItems[attrs[idA]]) {\n return false\n }\n\n DSUtils.forOwn(where, function (clause, field) {\n if (!DSUtils._o(clause)) {\n clause = {\n '==': clause\n }\n }\n DSUtils.forOwn(clause, function (term, op) {\n let expr\n let isOr = op[0] === '|'\n let val = DSUtils.get(attrs, field)\n op = isOr ? op.substr(1) : op\n if (op === '==') {\n expr = val == term // eslint-disable-line\n } else if (op === '===') {\n expr = val === term\n } else if (op === '!=') {\n expr = val != term // eslint-disable-line\n } else if (op === '!==') {\n expr = val !== term\n } else if (op === '>') {\n expr = val > term\n } else if (op === '>=') {\n expr = val >= term\n } else if (op === '<') {\n expr = val < term\n } else if (op === '<=') {\n expr = val <= term\n } else if (op === 'isectEmpty') {\n expr = !DSUtils.intersection((val || []), (term || [])).length\n } else if (op === 'isectNotEmpty') {\n expr = DSUtils.intersection((val || []), (term || [])).length\n } else if (op === 'in') {\n if (DSUtils._s(term)) {\n expr = term.indexOf(val) !== -1\n } else {\n expr = DSUtils.contains(term, val)\n }\n } else if (op === 'notIn') {\n if (DSUtils._s(term)) {\n expr = term.indexOf(val) === -1\n } else {\n expr = !DSUtils.contains(term, val)\n }\n } else if (op.indexOf('like') === 0) {\n expr = like(term, op.substr(4)).exec(val) !== null\n } else if (op.indexOf('notLike') === 0) {\n expr = like(term, op.substr(7)).exec(val) === null\n } else if (op === 'contains') {\n if (DSUtils._s(val)) {\n expr = val.indexOf(term) !== -1\n } else {\n expr = DSUtils.contains(val, term)\n }\n } else if (op === 'notContains') {\n if (DSUtils._s(val)) {\n expr = val.indexOf(term) === -1\n } else {\n expr = !DSUtils.contains(val, term)\n }\n }\n if (expr !== undefined) {\n keep = first ? expr : (isOr ? keep || expr : keep && expr)\n }\n first = false\n })\n })\n\n return keep\n })\n } else if (options.excludeTemporary && resource) {\n filtered = DSUtils.filter(filtered, function (attrs) {\n return resource.temporaryItems[attrs[idA]]\n })\n }\n\n let orderBy = null\n\n if (DSUtils._s(params.orderBy)) {\n orderBy = [\n [params.orderBy, 'ASC']\n ]\n } else if (DSUtils._a(params.orderBy)) {\n orderBy = params.orderBy\n }\n\n if (!orderBy && DSUtils._s(params.sort)) {\n orderBy = [\n [params.sort, 'ASC']\n ]\n } else if (!orderBy && DSUtils._a(params.sort)) {\n orderBy = params.sort\n }\n\n // Apply 'orderBy'\n if (orderBy) {\n let index = 0\n DSUtils.forEach(orderBy, function (def, i) {\n if (DSUtils._s(def)) {\n orderBy[i] = [def, 'ASC']\n } else if (!DSUtils._a(def)) {\n throw new DSErrors.IA(`DS.filter(\"${resourceName}\"[, params][, options]): ${DSUtils.toJson(def)}: Must be a string or an array!`, {\n params: {\n 'orderBy[i]': {\n actual: typeof def,\n expected: 'string|array'\n }\n }\n })\n }\n })\n filtered = DSUtils.sort(filtered, function (a, b) {\n return compare(orderBy, index, a, b)\n })\n }\n\n let limit = DSUtils._n(params.limit) ? params.limit : null\n let skip = null\n\n if (DSUtils._n(params.skip)) {\n skip = params.skip\n } else if (DSUtils._n(params.offset)) {\n skip = params.offset\n }\n\n // Apply 'limit' and 'skip'\n if (limit && skip) {\n filtered = DSUtils.slice(filtered, skip, Math.min(filtered.length, skip + limit))\n } else if (DSUtils._n(limit)) {\n filtered = DSUtils.slice(filtered, 0, Math.min(filtered.length, limit))\n } else if (DSUtils._n(skip)) {\n if (skip < filtered.length) {\n filtered = DSUtils.slice(filtered, skip)\n } else {\n filtered = []\n }\n }\n\n return filtered === collection ? filtered.slice() : filtered\n}\n\nclass DS {\n constructor (options) {\n let _this = this\n options = options || {}\n\n _this.store = {}\n _this.definitions = {}\n _this.adapters = {}\n _this.defaults = new Defaults()\n _this.observe = DSUtils.observe\n DSUtils.forOwn(options, function (v, k) {\n if (k === 'omit') {\n _this.defaults.omit = v.concat(Defaults.prototype.omit)\n } else {\n _this.defaults[k] = v\n }\n })\n _this.defaults.logFn('new data store created', _this.defaults)\n\n let P = DSUtils.Promise\n\n if (P && !P.prototype.spread) {\n P.prototype.spread = function (cb) {\n return this.then(function (arr) {\n return cb.apply(this, arr)\n })\n }\n }\n\n DSUtils.Events(_this)\n }\n\n getAdapterName (options) {\n let errorIfNotExist = false\n options = options || {}\n this.defaults.logFn('getAdapterName', options)\n if (DSUtils._s(options)) {\n errorIfNotExist = true\n options = {\n adapter: options\n }\n }\n if (this.adapters[options.adapter]) {\n return options.adapter\n } else if (errorIfNotExist) {\n throw new Error(`${options.adapter} is not a registered adapter!`)\n } else {\n return options.defaultAdapter\n }\n }\n\n getAdapter (options) {\n options = options || {}\n this.defaults.logFn('getAdapter', options)\n return this.adapters[this.getAdapterName(options)]\n }\n\n registerAdapter (name, Adapter, options) {\n let _this = this\n options = options || {}\n _this.defaults.logFn('registerAdapter', name, Adapter, options)\n if (DSUtils.isFunction(Adapter)) {\n _this.adapters[name] = new Adapter(options)\n } else {\n _this.adapters[name] = Adapter\n }\n if (options.default) {\n _this.defaults.defaultAdapter = name\n }\n _this.defaults.logFn(`default adapter is ${_this.defaults.defaultAdapter}`)\n }\n\n is (resourceName, instance) {\n let definition = this.definitions[resourceName]\n if (!definition) {\n throw new DSErrors.NER(resourceName)\n }\n return instance instanceof definition[definition.class]\n }\n\n clear () {\n let ejected = {}\n DSUtils.forOwn(this.definitions, (definition) => {\n let name = definition.name\n ejected[name] = definition.ejectAll()\n this.store[name].completedQueries = {}\n this.store[name].queryData = {}\n })\n return ejected\n }\n\n errorFn (...args) {\n let options = args[args.length - 1]\n let defaultHandler = this.defaults.errorHandler\n let errorHandler = options ? options.errorHandler : defaultHandler\n errorHandler = errorHandler || defaultHandler\n return function (err) {\n return errorHandler(err, ...args)\n }\n }\n}\n\nvar dsPrototype = DS.prototype\n\ndsPrototype.getAdapterName.shorthand = false\ndsPrototype.getAdapter.shorthand = false\ndsPrototype.registerAdapter.shorthand = false\ndsPrototype.errors = DSErrors\ndsPrototype.utils = DSUtils\n\nfunction addMethods (target, obj) {\n DSUtils.forOwn(obj, function (v, k) {\n target[k] = v\n target[k].before = function (fn) {\n let orig = target[k]\n target[k] = function (...args) {\n return orig.apply(this, fn.apply(this, args) || args)\n }\n }\n })\n}\n\naddMethods(dsPrototype, syncMethods)\naddMethods(dsPrototype, asyncMethods)\n\nexport default DS\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/datastore/index.js\n **/","/* jshint eqeqeq:false */\n\n/**\n * Mix of ES6 and CommonJS module imports because the interop of Babel + Webpack + ES6 modules + CommonJS isn't very good.\n */\nimport DSErrors from './errors'\nlet BinaryHeap = require('yabh')\nlet forEach = require('mout/array/forEach')\nlet slice = require('mout/array/slice')\nlet forOwn = require('mout/object/forOwn')\nlet contains = require('mout/array/contains')\nlet deepMixIn = require('mout/object/deepMixIn')\nlet pascalCase = require('mout/string/pascalCase')\nlet remove = require('mout/array/remove')\nlet pick = require('mout/object/pick')\nlet _keys = require('mout/object/keys')\nlet sort = require('mout/array/sort')\nlet upperCase = require('mout/string/upperCase')\nlet get = require('mout/object/get')\nlet set = require('mout/object/set')\nlet observe = require('../lib/observe-js/observe.js')\nlet guid = require('mout/random/guid')\nlet w, P, File\nlet objectProto = Object.prototype\nlet toString = objectProto.toString\n\n/**\n * Attempt to detect the global Promise constructor.\n * JSData will still work without one, as long you do something like this:\n *\n * var JSData = require('js-data');\n * JSData.DSUtils.Promise = MyPromiseLib;\n */\ntry {\n P = Promise\n} catch (e) {\n console.error('js-data requires a global Promise constructor!')\n}\n\ntry {\n File = window.File\n} catch (e) {\n File = function () {}\n}\n\nfunction _isArray (value) {\n return toString.call(value) === '[object Array]' || false\n}\n\nlet isArray = Array.isArray || _isArray\n\nfunction isRegExp (value) {\n return toString.call(value) === '[object RegExp]' || false\n}\n\n// adapted from lodash.isString\nfunction isString (value) {\n return typeof value === 'string' || (value && typeof value === 'object' && toString.call(value) === '[object String]') || false\n}\n\nfunction isObject (value) {\n return toString.call(value) === '[object Object]' || false\n}\n\n// adapted from lodash.isDate\nfunction isDate (value) {\n return (value && typeof value === 'object' && toString.call(value) === '[object Date]') || false\n}\n\n// adapted from lodash.isNumber\nfunction isNumber (value) {\n let type = typeof value\n return type === 'number' || (value && type === 'object' && toString.call(value) === '[object Number]') || false\n}\n\n// adapted from lodash.isFunction\nfunction isFunction (value) {\n return typeof value === 'function' || (value && toString.call(value) === '[object Function]') || false\n}\n\n// shorthand argument checking functions, using these shaves 1.18 kb off of the minified build\nfunction isStringOrNumber (value) {\n return isString(value) || isNumber(value)\n}\n\nfunction isStringOrNumberErr (field) {\n return new DSErrors.IA(`\"${field}\" must be a string or a number!`)\n}\n\nfunction isObjectErr (field) {\n return new DSErrors.IA(`\"${field}\" must be an object!`)\n}\n\nfunction isArrayErr (field) {\n return new DSErrors.IA(`\"${field}\" must be an array!`)\n}\n\n// adapted from mout.isEmpty\nfunction isEmpty (val) {\n if (val == null) { // jshint ignore:line\n // typeof null == 'object' so we check it first\n return true\n } else if (typeof val === 'string' || isArray(val)) {\n return !val.length\n } else if (typeof val === 'object') {\n let result = true\n forOwn(val, function () {\n result = false\n return false // break loop\n })\n return result\n } else {\n return true\n }\n}\n\n// Find the intersection between two arrays\nfunction intersection (array1, array2) {\n if (!array1 || !array2) {\n return []\n }\n let result = []\n let item\n for (let i = 0, length = array1.length; i < length; i++) {\n item = array1[i]\n if (contains(result, item)) {\n continue\n }\n if (contains(array2, item)) {\n result.push(item)\n }\n }\n return result\n}\n\nfunction filter (array, cb, thisObj) {\n let results = []\n forEach(array, function (value, key, arr) {\n if (cb(value, key, arr)) {\n results.push(value)\n }\n }, thisObj)\n return results\n}\n\n/**\n * Attempt to detect whether we are in the browser.\n */\ntry {\n w = window\n w = {}\n} catch (e) {\n w = null\n}\n\n/**\n * Event mixin. Usage:\n *\n * function handler() { ... }\n * Events(myObject);\n * myObject.on('foo', handler);\n * myObject.emit('foo', 'some', 'data');\n * myObject.off('foo', handler);\n */\nfunction Events (target) {\n let events = {}\n target = target || this\n Object.defineProperties(target, {\n on: {\n value: function (type, func, ctx) {\n events[type] = events[type] || []\n events[type].push({\n f: func,\n c: ctx\n })\n }\n },\n off: {\n value: function (type, func) {\n let listeners = events[type]\n if (!listeners) {\n events = {}\n } else if (func) {\n for (let i = 0; i < listeners.length; i++) {\n if (listeners[i].f === func) {\n listeners.splice(i, 1)\n break\n }\n }\n } else {\n listeners.splice(0, listeners.length)\n }\n }\n },\n emit: {\n value: function (...args) {\n let listeners = events[args.shift()] || []\n if (listeners) {\n for (let i = 0; i < listeners.length; i++) {\n listeners[i].f.apply(listeners[i].c, args)\n }\n }\n }\n }\n })\n}\n\n/**\n * Lifecycle hooks that should support promises.\n */\nlet toPromisify = [\n 'beforeValidate',\n 'validate',\n 'afterValidate',\n 'beforeCreate',\n 'afterCreate',\n 'beforeUpdate',\n 'afterUpdate',\n 'beforeDestroy',\n 'afterDestroy'\n]\n\n/**\n * Return whether \"prop\" is in the blacklist.\n */\nlet isBlacklisted = observe.isBlacklisted\n\n// adapted from angular.copy\nfunction copy (source, destination, stackSource, stackDest, blacklist) {\n if (!destination) {\n destination = source\n if (source) {\n if (isArray(source)) {\n destination = copy(source, [], stackSource, stackDest, blacklist)\n } else if (isDate(source)) {\n destination = new Date(source.getTime())\n } else if (isRegExp(source)) {\n destination = new RegExp(source.source, source.toString().match(/[^\\/]*$/)[0])\n destination.lastIndex = source.lastIndex\n } else if (isObject(source)) {\n destination = copy(source, Object.create(Object.getPrototypeOf(source)), stackSource, stackDest, blacklist)\n }\n }\n } else {\n if (source === destination) {\n throw new Error('Cannot copy! Source and destination are identical.')\n }\n\n stackSource = stackSource || []\n stackDest = stackDest || []\n\n if (isObject(source)) {\n let index = stackSource.indexOf(source)\n if (index !== -1) {\n return stackDest[index]\n }\n\n stackSource.push(source)\n stackDest.push(destination)\n }\n\n let result\n if (isArray(source)) {\n let i\n destination.length = 0\n for (i = 0; i < source.length; i++) {\n result = copy(source[i], null, stackSource, stackDest, blacklist)\n if (isObject(source[i])) {\n stackSource.push(source[i])\n stackDest.push(result)\n }\n destination.push(result)\n }\n } else {\n if (isArray(destination)) {\n destination.length = 0\n } else {\n forEach(destination, function (value, key) {\n delete destination[key]\n })\n }\n for (let key in source) {\n if (source.hasOwnProperty(key)) {\n if (isBlacklisted(key, blacklist)) {\n continue\n }\n result = copy(source[key], null, stackSource, stackDest, blacklist)\n if (isObject(source[key])) {\n stackSource.push(source[key])\n stackDest.push(result)\n }\n destination[key] = result\n }\n }\n }\n }\n return destination\n}\n\n// adapted from angular.equals\nfunction equals (o1, o2) {\n if (o1 === o2) {\n return true\n }\n if (o1 === null || o2 === null) {\n return false\n }\n if (o1 !== o1 && o2 !== o2) { // eslint-disable-line\n return true\n } // NaN === NaN\n var t1 = typeof o1\n var t2 = typeof o2\n var length, key, keySet\n if (t1 == t2) { // eslint-disable-line\n if (t1 == 'object') { // eslint-disable-line\n if (isArray(o1)) {\n if (!isArray(o2)) {\n return false\n }\n if ((length = o1.length) === o2.length) { // jshint ignore:line\n for (key = 0; key < length; key++) {\n if (!equals(o1[key], o2[key])) {\n return false\n }\n }\n return true\n }\n } else if (isDate(o1)) {\n if (!isDate(o2)) {\n return false\n }\n return equals(o1.getTime(), o2.getTime())\n } else if (isRegExp(o1) && isRegExp(o2)) {\n return o1.toString() == o2.toString() // eslint-disable-line\n } else {\n if (isArray(o2)) {\n return false\n }\n keySet = {}\n for (key in o1) {\n if (key.charAt(0) === '$' || isFunction(o1[key])) {\n continue\n }\n if (!equals(o1[key], o2[key])) {\n return false\n }\n keySet[key] = true\n }\n for (key in o2) {\n if (!keySet.hasOwnProperty(key) &&\n key.charAt(0) !== '$' &&\n o2[key] !== undefined && !isFunction(o2[key])) {\n return false\n }\n }\n return true\n }\n }\n }\n return false\n}\n\n/**\n * Given either an instance or the primary key of an instance, return the primary key.\n */\nfunction resolveId (definition, idOrInstance) {\n if (isString(idOrInstance) || isNumber(idOrInstance)) {\n return idOrInstance\n } else if (idOrInstance && definition) {\n return idOrInstance[definition.idAttribute] || idOrInstance\n } else {\n return idOrInstance\n }\n}\n\n/**\n * Given either an instance or the primary key of an instance, return the instance.\n */\nfunction resolveItem (resource, idOrInstance) {\n if (resource && (isString(idOrInstance) || isNumber(idOrInstance))) {\n return resource.index[idOrInstance] || idOrInstance\n } else {\n return idOrInstance\n }\n}\n\nfunction isValidString (val) {\n return (val != null && val !== '') // jshint ignore:line\n}\n\nfunction join (items, separator) {\n separator = separator || ''\n return filter(items, isValidString).join(separator)\n}\n\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nexport default {\n Promise: P,\n /**\n * Method to wrap an \"options\" object so that it will inherit from\n * some parent object, such as a resource definition.\n */\n _ (parent, options) {\n let _this = this\n parent = parent || {}\n options = options || {}\n if (options && options.constructor === parent.constructor) {\n return options\n } else if (!isObject(options)) {\n throw new DSErrors.IA('\"options\" must be an object!')\n }\n forEach(toPromisify, function (name) {\n if (typeof options[name] === 'function' && options[name].toString().indexOf('for (var _len = arg') === -1) {\n options[name] = _this.promisify(options[name])\n }\n })\n // Dynamic constructor function\n let O = function Options (attrs) {\n let self = this\n forOwn(attrs, function (value, key) {\n self[key] = value\n })\n }\n // Inherit from some parent object\n O.prototype = parent\n // Give us a way to get the original options back.\n O.prototype.orig = function () {\n let orig = {}\n forOwn(this, function (value, key) {\n orig[key] = value\n })\n return orig\n }\n return new O(options)\n },\n _n: isNumber,\n _s: isString,\n _sn: isStringOrNumber,\n _snErr: isStringOrNumberErr,\n _o: isObject,\n _oErr: isObjectErr,\n _a: isArray,\n _aErr: isArrayErr,\n applyScope (definition, params, options) {\n let scope = options.scope\n let _params = copy(params)\n if (scope) {\n if (isString(scope)) {\n scope = [scope]\n }\n } else {\n scope = []\n }\n scope.unshift('defaultScope')\n forEach(scope, function (_scope) {\n let scopeDef = options.scopes[_scope]\n if (typeof scopeDef === 'function') {\n deepMixIn(params, scopeDef(definition))\n } else if (scopeDef) {\n deepMixIn(params, scopeDef)\n }\n })\n deepMixIn(params, _params)\n },\n compute (fn, field) {\n let _this = this\n let args = []\n if (!isObject(fn)) {\n forEach(fn.deps, function (dep) {\n args.push(get(_this, dep))\n })\n // compute property\n set(_this, field, fn[fn.length - 1].apply(_this, args))\n }\n },\n contains,\n copy,\n deepMixIn,\n diffObjectFromOldObject: observe.diffObjectFromOldObject,\n BinaryHeap,\n equals,\n Events,\n filter,\n fillIn (target, obj) {\n forOwn(obj, function (v, k) {\n if (!(k in target)) {\n target[k] = v\n }\n })\n return target\n },\n forEach,\n forOwn,\n fromJson (json) {\n return isString(json) ? JSON.parse(json) : json\n },\n get,\n guid,\n intersection,\n isArray,\n isBlacklisted,\n isEmpty,\n isFunction,\n isObject,\n isNumber,\n isString,\n keys: _keys,\n makePath,\n observe,\n omit (obj, bl) {\n let toRemove = []\n forOwn(obj, function (v, k) {\n if (isBlacklisted(k, bl)) {\n toRemove.push(k)\n }\n })\n forEach(toRemove, function (k) {\n delete obj[k]\n })\n return obj\n },\n pascalCase,\n pick,\n // Turn the given node-style callback function into one that can return a promise.\n promisify (fn, target) {\n let _this = this\n if (!fn) {\n return\n } else if (typeof fn !== 'function') {\n throw new Error('Can only promisify functions!')\n }\n return function (...args) {\n return new _this.Promise(function (resolve, reject) {\n args.push(function (err, result) {\n if (err) {\n reject(err)\n } else {\n resolve(result)\n }\n })\n\n try {\n let promise = fn.apply(target || this, args)\n if (promise && promise.then) {\n promise.then(resolve, reject)\n }\n } catch (err) {\n reject(err)\n }\n })\n }\n },\n remove,\n set,\n slice,\n sort,\n toJson: JSON.stringify,\n updateTimestamp (timestamp) {\n let newTimestamp = typeof Date.now === 'function' ? Date.now() : new Date().getTime()\n if (timestamp && newTimestamp <= timestamp) {\n return timestamp + 1\n } else {\n return newTimestamp\n }\n },\n upperCase,\n // Return a copy of \"object\" with cycles removed.\n removeCircular (object) {\n return (function rmCirc (value, ctx) {\n let i\n let nu\n\n if (\n typeof value === 'object' &&\n value !== null &&\n !(value instanceof Boolean) &&\n !(value instanceof Date) &&\n !(value instanceof Number) &&\n !(value instanceof RegExp) &&\n !(value instanceof String) &&\n (!File || !(value instanceof File))\n ) {\n // check if current object points back to itself\n let cur = ctx.cur\n var parent = ctx.ctx\n while (parent) {\n if (parent.cur === cur) {\n return undefined\n }\n parent = parent.ctx\n }\n\n if (isArray(value)) {\n nu = []\n for (i = 0; i < value.length; i += 1) {\n nu[i] = rmCirc(value[i], {ctx, cur: value[i]})\n }\n } else {\n nu = {}\n forOwn(value, function (v, k) {\n nu[k] = rmCirc(value[k], {ctx, cur: value[k]})\n })\n }\n return nu\n }\n return value\n }(object, {ctx: null, cur: object}))\n },\n resolveItem,\n resolveId,\n respond (response, meta, options) {\n if (options.returnMeta === 'array') {\n return [response, meta]\n } else if (options.returnMeta === 'object') {\n return {response, meta}\n } else {\n return response\n }\n },\n w,\n // This is where the magic of relations happens.\n applyRelationGettersToTarget (store, definition, target) {\n this.forEach(definition.relationList, def => {\n let relationName = def.relation\n let localField = def.localField\n let localKey = def.localKey\n let foreignKey = def.foreignKey\n let localKeys = def.localKeys\n let foreignKeys = def.foreignKeys\n let enumerable = typeof def.enumerable === 'boolean' ? def.enumerable : !!definition.relationsEnumerable\n if (typeof def.link === 'boolean' ? def.link : !!definition.linkRelations) {\n delete target[localField]\n let prop = {\n enumerable\n }\n if (def.type === 'belongsTo') {\n prop.get = function () {\n let key = get(this, localKey)\n let hasKey = !!(key || key === 0)\n return hasKey ? definition.getResource(relationName).get(key) : undefined\n }\n prop.set = function (parent) {\n if (parent) {\n set(this, localKey, get(parent, definition.getResource(relationName).idAttribute))\n }\n return get(this, localField)\n }\n } else if (def.type === 'hasMany') {\n prop.get = function () {\n let params = {}\n if (foreignKey) {\n params[foreignKey] = this[definition.idAttribute]\n return definition.getResource(relationName).defaultFilter.call(store, store.store[relationName].collection, relationName, params, {allowSimpleWhere: true})\n } else if (localKeys) {\n let keys = get(this, localKeys) || []\n return definition.getResource(relationName).getAll(isArray(keys) ? keys : _keys(keys))\n } else if (foreignKeys) {\n set(params, `where.${foreignKeys}.contains`, this[definition.idAttribute])\n return definition.getResource(relationName).defaultFilter.call(store, store.store[relationName].collection, relationName, params)\n }\n return undefined\n }\n prop.set = function (children) {\n if (children && children.length) {\n let id = get(this, definition.idAttribute)\n if (foreignKey) {\n forEach(children, function (child) {\n set(child, foreignKey, id)\n })\n } else if (localKeys) {\n let keys = []\n forEach(children, function (child) {\n keys.push(get(child, definition.getResource(relationName).idAttribute))\n })\n set(this, localKeys, keys)\n } else if (foreignKeys) {\n forEach(children, function (child) {\n let keys = get(child, foreignKeys)\n if (keys) {\n if (!contains(keys, id)) {\n keys.push(id)\n }\n } else {\n set(child, foreignKeys, [id])\n }\n })\n }\n }\n return get(this, localField)\n }\n } else if (def.type === 'hasOne') {\n if (localKey) {\n prop.get = function () {\n let key = get(this, localKey)\n let hasKey = !!(key || key === 0)\n return hasKey ? definition.getResource(relationName).get(key) : undefined\n }\n prop.set = function (sibling) {\n if (sibling) {\n set(this, localKey, get(sibling, definition.getResource(relationName).idAttribute))\n }\n return get(this, localField)\n }\n } else {\n prop.get = function () {\n let params = {}\n params[foreignKey] = this[definition.idAttribute]\n let items = params[foreignKey] ? definition.getResource(relationName).defaultFilter.call(store, store.store[relationName].collection, relationName, params, {allowSimpleWhere: true}) : []\n if (items.length) {\n return items[0]\n }\n return undefined\n }\n prop.set = function (sibling) {\n if (sibling) {\n set(sibling, foreignKey, get(this, definition.idAttribute))\n }\n return get(this, localField)\n }\n }\n }\n if (def.get) {\n let orig = prop.get\n prop.get = function () {\n return def.get(definition, def, this, (...args) => orig.apply(this, args))\n }\n }\n Object.defineProperty(target, localField, prop)\n }\n })\n }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/utils.js\n **/","/**\n * Thrown during a method call when an argument passed into the method is invalid.\n */\nclass IllegalArgumentError extends Error {\n constructor (message) {\n super()\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, this.constructor)\n }\n this.type = this.constructor.name\n this.message = message\n }\n}\n\n/**\n * Thrown when an invariant is violated or unrecoverable error is encountered during execution.\n */\nclass RuntimeError extends Error {\n constructor (message) {\n super()\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, this.constructor)\n }\n this.type = this.constructor.name\n this.message = message\n }\n}\n\n/**\n * Thrown when attempting to access or work with a non-existent resource.\n */\nclass NonexistentResourceError extends Error {\n constructor (resourceName) {\n super()\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, this.constructor)\n }\n this.type = this.constructor.name\n this.message = `${resourceName} is not a registered resource!`\n }\n}\n\nexport default {\n IllegalArgumentError,\n IA: IllegalArgumentError,\n RuntimeError,\n R: RuntimeError,\n NonexistentResourceError,\n NER: NonexistentResourceError\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/errors.js\n **/","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define('yabh', factory) :\n (global.BinaryHeap = factory());\n}(this, function () { 'use strict';\n\n /**\n * @method bubbleUp\n * @param {array} heap The heap.\n * @param {function} weightFunc The weight function.\n * @param {number} n The index of the element to bubble up.\n */\n var bubbleUp = function bubbleUp(heap, weightFunc, n) {\n var element = heap[n];\n var weight = weightFunc(element);\n // When at 0, an element can not go up any further.\n while (n > 0) {\n // Compute the parent element's index, and fetch it.\n var parentN = Math.floor((n + 1) / 2) - 1;\n var parent = heap[parentN];\n // If the parent has a lesser weight, things are in order and we\n // are done.\n if (weight >= weightFunc(parent)) {\n break;\n } else {\n heap[parentN] = element;\n heap[n] = parent;\n n = parentN;\n }\n }\n };\n\n /**\n * @method bubbleDown\n * @param {array} heap The heap.\n * @param {function} weightFunc The weight function.\n * @param {number} n The index of the element to sink down.\n */\n var bubbleDown = function bubbleDown(heap, weightFunc, n) {\n var length = heap.length;\n var node = heap[n];\n var nodeWeight = weightFunc(node);\n\n while (true) {\n var child2N = (n + 1) * 2;\n var child1N = child2N - 1;\n var swap = null;\n if (child1N < length) {\n var child1 = heap[child1N];\n var child1Weight = weightFunc(child1);\n // If the score is less than our node's, we need to swap.\n if (child1Weight < nodeWeight) {\n swap = child1N;\n }\n }\n // Do the same checks for the other child.\n if (child2N < length) {\n var child2 = heap[child2N];\n var child2Weight = weightFunc(child2);\n if (child2Weight < (swap === null ? nodeWeight : weightFunc(heap[child1N]))) {\n swap = child2N;\n }\n }\n\n if (swap === null) {\n break;\n } else {\n heap[n] = heap[swap];\n heap[swap] = node;\n n = swap;\n }\n }\n };\n\n function BinaryHeap(weightFunc, compareFunc) {\n if (!weightFunc) {\n weightFunc = function weightFunc(x) {\n return x;\n };\n }\n if (!compareFunc) {\n compareFunc = function compareFunc(x, y) {\n return x === y;\n };\n }\n if (typeof weightFunc !== 'function') {\n throw new Error('BinaryHeap([weightFunc][, compareFunc]): \"weightFunc\" must be a function!');\n }\n if (typeof compareFunc !== 'function') {\n throw new Error('BinaryHeap([weightFunc][, compareFunc]): \"compareFunc\" must be a function!');\n }\n this.weightFunc = weightFunc;\n this.compareFunc = compareFunc;\n this.heap = [];\n }\n\n var BHProto = BinaryHeap.prototype;\n\n BHProto.push = function (node) {\n this.heap.push(node);\n bubbleUp(this.heap, this.weightFunc, this.heap.length - 1);\n };\n\n BHProto.peek = function () {\n return this.heap[0];\n };\n\n BHProto.pop = function () {\n var front = this.heap[0];\n var end = this.heap.pop();\n if (this.heap.length > 0) {\n this.heap[0] = end;\n bubbleDown(this.heap, this.weightFunc, 0);\n }\n return front;\n };\n\n BHProto.remove = function (node) {\n var length = this.heap.length;\n for (var i = 0; i < length; i++) {\n if (this.compareFunc(this.heap[i], node)) {\n var removed = this.heap[i];\n var end = this.heap.pop();\n if (i !== length - 1) {\n this.heap[i] = end;\n bubbleUp(this.heap, this.weightFunc, i);\n bubbleDown(this.heap, this.weightFunc, i);\n }\n return removed;\n }\n }\n return null;\n };\n\n BHProto.removeAll = function () {\n this.heap = [];\n };\n\n BHProto.size = function () {\n return this.heap.length;\n };\n\n return BinaryHeap;\n\n}));\n//# sourceMappingURL=yabh.js.map\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/yabh/dist/yabh.js\n ** module id = 4\n ** module chunks = 0\n **/","\n\n /**\n * Array forEach\n */\n function forEach(arr, callback, thisObj) {\n if (arr == null) {\n return;\n }\n var i = -1,\n len = arr.length;\n while (++i < len) {\n // we iterate over sparse items since there is no way to make it\n // work properly on IE 7-8. see #64\n if ( callback.call(thisObj, arr[i], i, arr) === false ) {\n break;\n }\n }\n }\n\n module.exports = forEach;\n\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/array/forEach.js\n ** module id = 5\n ** module chunks = 0\n **/","\n\n /**\n * Create slice of source array or array-like object\n */\n function slice(arr, start, end){\n var len = arr.length;\n\n if (start == null) {\n start = 0;\n } else if (start < 0) {\n start = Math.max(len + start, 0);\n } else {\n start = Math.min(start, len);\n }\n\n if (end == null) {\n end = len;\n } else if (end < 0) {\n end = Math.max(len + end, 0);\n } else {\n end = Math.min(end, len);\n }\n\n var result = [];\n while (start < end) {\n result.push(arr[start++]);\n }\n\n return result;\n }\n\n module.exports = slice;\n\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/array/slice.js\n ** module id = 6\n ** module chunks = 0\n **/","var hasOwn = require('./hasOwn');\nvar forIn = require('./forIn');\n\n /**\n * Similar to Array/forEach but works over object properties and fixes Don't\n * Enum bug on IE.\n * based on: http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation\n */\n function forOwn(obj, fn, thisObj){\n forIn(obj, function(val, key){\n if (hasOwn(obj, key)) {\n return fn.call(thisObj, obj[key], key, obj);\n }\n });\n }\n\n module.exports = forOwn;\n\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/object/forOwn.js\n ** module id = 7\n ** module chunks = 0\n **/","\n\n /**\n * Safer Object.hasOwnProperty\n */\n function hasOwn(obj, prop){\n return Object.prototype.hasOwnProperty.call(obj, prop);\n }\n\n module.exports = hasOwn;\n\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/object/hasOwn.js\n ** module id = 8\n ** module chunks = 0\n **/","var hasOwn = require('./hasOwn');\n\n var _hasDontEnumBug,\n _dontEnums;\n\n function checkDontEnum(){\n _dontEnums = [\n 'toString',\n 'toLocaleString',\n 'valueOf',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'constructor'\n ];\n\n _hasDontEnumBug = true;\n\n for (var key in {'toString': null}) {\n _hasDontEnumBug = false;\n }\n }\n\n /**\n * Similar to Array/forEach but works over object properties and fixes Don't\n * Enum bug on IE.\n * based on: http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation\n */\n function forIn(obj, fn, thisObj){\n var key, i = 0;\n // no need to check if argument is a real object that way we can use\n // it for arrays, functions, date, etc.\n\n //post-pone check till needed\n if (_hasDontEnumBug == null) checkDontEnum();\n\n for (key in obj) {\n if (exec(fn, obj, key, thisObj) === false) {\n break;\n }\n }\n\n\n if (_hasDontEnumBug) {\n var ctor = obj.constructor,\n isProto = !!ctor && obj === ctor.prototype;\n\n while (key = _dontEnums[i++]) {\n // For constructor, if it is a prototype object the constructor\n // is always non-enumerable unless defined otherwise (and\n // enumerated above). For non-prototype objects, it will have\n // to be defined on this object, since it cannot be defined on\n // any prototype objects.\n //\n // For other [[DontEnum]] properties, check if the value is\n // different than Object prototype value.\n if (\n (key !== 'constructor' ||\n (!isProto && hasOwn(obj, key))) &&\n obj[key] !== Object.prototype[key]\n ) {\n if (exec(fn, obj, key, thisObj) === false) {\n break;\n }\n }\n }\n }\n }\n\n function exec(fn, obj, key, thisObj){\n return fn.call(thisObj, obj[key], key, obj);\n }\n\n module.exports = forIn;\n\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/object/forIn.js\n ** module id = 9\n ** module chunks = 0\n **/","var indexOf = require('./indexOf');\n\n /**\n * If array contains values.\n */\n function contains(arr, val) {\n return indexOf(arr, val) !== -1;\n }\n module.exports = contains;\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/array/contains.js\n ** module id = 10\n ** module chunks = 0\n **/","\n\n /**\n * Array.indexOf\n */\n function indexOf(arr, item, fromIndex) {\n fromIndex = fromIndex || 0;\n if (arr == null) {\n return -1;\n }\n\n var len = arr.length,\n i = fromIndex < 0 ? len + fromIndex : fromIndex;\n while (i < len) {\n // we iterate over sparse items since there is no way to make it\n // work properly on IE 7-8. see #64\n if (arr[i] === item) {\n return i;\n }\n\n i++;\n }\n\n return -1;\n }\n\n module.exports = indexOf;\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/array/indexOf.js\n ** module id = 11\n ** module chunks = 0\n **/","var forOwn = require('./forOwn');\nvar isPlainObject = require('../lang/isPlainObject');\n\n /**\n * Mixes objects into the target object, recursively mixing existing child\n * objects.\n */\n function deepMixIn(target, objects) {\n var i = 0,\n n = arguments.length,\n obj;\n\n while(++i < n){\n obj = arguments[i];\n if (obj) {\n forOwn(obj, copyProp, target);\n }\n }\n\n return target;\n }\n\n function copyProp(val, key) {\n var existing = this[key];\n if (isPlainObject(val) && isPlainObject(existing)) {\n deepMixIn(existing, val);\n } else {\n this[key] = val;\n }\n }\n\n module.exports = deepMixIn;\n\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/object/deepMixIn.js\n ** module id = 12\n ** module chunks = 0\n **/","\n\n /**\n * Checks if the value is created by the `Object` constructor.\n */\n function isPlainObject(value) {\n return (!!value && typeof value === 'object' &&\n value.constructor === Object);\n }\n\n module.exports = isPlainObject;\n\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/lang/isPlainObject.js\n ** module id = 13\n ** module chunks = 0\n **/","var toString = require('../lang/toString');\nvar camelCase = require('./camelCase');\nvar upperCase = require('./upperCase');\n /**\n * camelCase + UPPERCASE first char\n */\n function pascalCase(str){\n str = toString(str);\n return camelCase(str).replace(/^[a-z]/, upperCase);\n }\n\n module.exports = pascalCase;\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/string/pascalCase.js\n ** module id = 14\n ** module chunks = 0\n **/","\n\n /**\n * Typecast a value to a String, using an empty string value for null or\n * undefined.\n */\n function toString(val){\n return val == null ? '' : val.toString();\n }\n\n module.exports = toString;\n\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/lang/toString.js\n ** module id = 15\n ** module chunks = 0\n **/","var toString = require('../lang/toString');\nvar replaceAccents = require('./replaceAccents');\nvar removeNonWord = require('./removeNonWord');\nvar upperCase = require('./upperCase');\nvar lowerCase = require('./lowerCase');\n /**\n * Convert string to camelCase text.\n */\n function camelCase(str){\n str = toString(str);\n str = replaceAccents(str);\n str = removeNonWord(str)\n .replace(/[\\-_]/g, ' ') //convert all hyphens and underscores to spaces\n .replace(/\\s[a-z]/g, upperCase) //convert first char of each word to UPPERCASE\n .replace(/\\s+/g, '') //remove spaces\n .replace(/^[A-Z]/g, lowerCase); //convert first char to lowercase\n return str;\n }\n module.exports = camelCase;\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/string/camelCase.js\n ** module id = 16\n ** module chunks = 0\n **/","var toString = require('../lang/toString');\n /**\n * Replaces all accented chars with regular ones\n */\n function replaceAccents(str){\n str = toString(str);\n\n // verifies if the String has accents and replace them\n if (str.search(/[\\xC0-\\xFF]/g) > -1) {\n str = str\n .replace(/[\\xC0-\\xC5]/g, \"A\")\n .replace(/[\\xC6]/g, \"AE\")\n .replace(/[\\xC7]/g, \"C\")\n .replace(/[\\xC8-\\xCB]/g, \"E\")\n .replace(/[\\xCC-\\xCF]/g, \"I\")\n .replace(/[\\xD0]/g, \"D\")\n .replace(/[\\xD1]/g, \"N\")\n .replace(/[\\xD2-\\xD6\\xD8]/g, \"O\")\n .replace(/[\\xD9-\\xDC]/g, \"U\")\n .replace(/[\\xDD]/g, \"Y\")\n .replace(/[\\xDE]/g, \"P\")\n .replace(/[\\xE0-\\xE5]/g, \"a\")\n .replace(/[\\xE6]/g, \"ae\")\n .replace(/[\\xE7]/g, \"c\")\n .replace(/[\\xE8-\\xEB]/g, \"e\")\n .replace(/[\\xEC-\\xEF]/g, \"i\")\n .replace(/[\\xF1]/g, \"n\")\n .replace(/[\\xF2-\\xF6\\xF8]/g, \"o\")\n .replace(/[\\xF9-\\xFC]/g, \"u\")\n .replace(/[\\xFE]/g, \"p\")\n .replace(/[\\xFD\\xFF]/g, \"y\");\n }\n return str;\n }\n module.exports = replaceAccents;\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/string/replaceAccents.js\n ** module id = 17\n ** module chunks = 0\n **/","var toString = require('../lang/toString');\n // This pattern is generated by the _build/pattern-removeNonWord.js script\n var PATTERN = /[^\\x20\\x2D0-9A-Z\\x5Fa-z\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF]/g;\n\n /**\n * Remove non-word chars.\n */\n function removeNonWord(str){\n str = toString(str);\n return str.replace(PATTERN, '');\n }\n\n module.exports = removeNonWord;\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/string/removeNonWord.js\n ** module id = 18\n ** module chunks = 0\n **/","var toString = require('../lang/toString');\n /**\n * \"Safer\" String.toUpperCase()\n */\n function upperCase(str){\n str = toString(str);\n return str.toUpperCase();\n }\n module.exports = upperCase;\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/string/upperCase.js\n ** module id = 19\n ** module chunks = 0\n **/","var toString = require('../lang/toString');\n /**\n * \"Safer\" String.toLowerCase()\n */\n function lowerCase(str){\n str = toString(str);\n return str.toLowerCase();\n }\n\n module.exports = lowerCase;\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/string/lowerCase.js\n ** module id = 20\n ** module chunks = 0\n **/","var indexOf = require('./indexOf');\n\n /**\n * Remove a single item from the array.\n * (it won't remove duplicates, just a single item)\n */\n function remove(arr, item){\n var idx = indexOf(arr, item);\n if (idx !== -1) arr.splice(idx, 1);\n }\n\n module.exports = remove;\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/array/remove.js\n ** module id = 21\n ** module chunks = 0\n **/","var slice = require('../array/slice');\n\n /**\n * Return a copy of the object, filtered to only have values for the whitelisted keys.\n */\n function pick(obj, var_keys){\n var keys = typeof arguments[1] !== 'string'? arguments[1] : slice(arguments, 1),\n out = {},\n i = 0, key;\n while (key = keys[i++]) {\n out[key] = obj[key];\n }\n return out;\n }\n\n module.exports = pick;\n\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/object/pick.js\n ** module id = 22\n ** module chunks = 0\n **/","var forOwn = require('./forOwn');\n\n /**\n * Get object keys\n */\n var keys = Object.keys || function (obj) {\n var keys = [];\n forOwn(obj, function(val, key){\n keys.push(key);\n });\n return keys;\n };\n\n module.exports = keys;\n\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/object/keys.js\n ** module id = 23\n ** module chunks = 0\n **/","\n\n /**\n * Merge sort (http://en.wikipedia.org/wiki/Merge_sort)\n */\n function mergeSort(arr, compareFn) {\n if (arr == null) {\n return [];\n } else if (arr.length < 2) {\n return arr;\n }\n\n if (compareFn == null) {\n compareFn = defaultCompare;\n }\n\n var mid, left, right;\n\n mid = ~~(arr.length / 2);\n left = mergeSort( arr.slice(0, mid), compareFn );\n right = mergeSort( arr.slice(mid, arr.length), compareFn );\n\n return merge(left, right, compareFn);\n }\n\n function defaultCompare(a, b) {\n return a < b ? -1 : (a > b? 1 : 0);\n }\n\n function merge(left, right, compareFn) {\n var result = [];\n\n while (left.length && right.length) {\n if (compareFn(left[0], right[0]) <= 0) {\n // if 0 it should preserve same order (stable)\n result.push(left.shift());\n } else {\n result.push(right.shift());\n }\n }\n\n if (left.length) {\n result.push.apply(result, left);\n }\n\n if (right.length) {\n result.push.apply(result, right);\n }\n\n return result;\n }\n\n module.exports = mergeSort;\n\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/array/sort.js\n ** module id = 24\n ** module chunks = 0\n **/","var isPrimitive = require('../lang/isPrimitive');\n\n /**\n * get \"nested\" object property\n */\n function get(obj, prop){\n var parts = prop.split('.'),\n last = parts.pop();\n\n while (prop = parts.shift()) {\n obj = obj[prop];\n if (obj == null) return;\n }\n\n return obj[last];\n }\n\n module.exports = get;\n\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/object/get.js\n ** module id = 25\n ** module chunks = 0\n **/","\n\n /**\n * Checks if the object is a primitive\n */\n function isPrimitive(value) {\n // Using switch fallthrough because it's simple to read and is\n // generally fast: http://jsperf.com/testing-value-is-primitive/5\n switch (typeof value) {\n case \"string\":\n case \"number\":\n case \"boolean\":\n return true;\n }\n\n return value == null;\n }\n\n module.exports = isPrimitive;\n\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/lang/isPrimitive.js\n ** module id = 26\n ** module chunks = 0\n **/","var namespace = require('./namespace');\n\n /**\n * set \"nested\" object property\n */\n function set(obj, prop, val){\n var parts = (/^(.+)\\.(.+)$/).exec(prop);\n if (parts){\n namespace(obj, parts[1])[parts[2]] = val;\n } else {\n obj[prop] = val;\n }\n }\n\n module.exports = set;\n\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/object/set.js\n ** module id = 27\n ** module chunks = 0\n **/","var forEach = require('../array/forEach');\n\n /**\n * Create nested object if non-existent\n */\n function namespace(obj, path){\n if (!path) return obj;\n forEach(path.split('.'), function(key){\n if (!obj[key]) {\n obj[key] = {};\n }\n obj = obj[key];\n });\n return obj;\n }\n\n module.exports = namespace;\n\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/object/namespace.js\n ** module id = 28\n ** module chunks = 0\n **/","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n// Modifications\n// Copyright 2014-2015 Jason Dobry\n//\n// Summary of modifications:\n// Fixed use of \"delete\" keyword for IE8 compatibility\n// Exposed diffObjectFromOldObject on the exported object\n// Added the \"equals\" argument to diffObjectFromOldObject to be used to check equality\n// Added a way in diffObjectFromOldObject to ignore changes to certain properties\n// Removed all code related to:\n// - ArrayObserver\n// - ArraySplice\n// - PathObserver\n// - CompoundObserver\n// - Path\n// - ObserverTransform\n\n(function(global) {\n var testingExposeCycleCount = global.testingExposeCycleCount;\n\n // Detect and do basic sanity checking on Object/Array.observe.\n function detectObjectObserve() {\n if (typeof Object.observe !== 'function' ||\n typeof Array.observe !== 'function') {\n return false;\n }\n\n var records = [];\n\n function callback(recs) {\n records = recs;\n }\n\n var test = {};\n var arr = [];\n Object.observe(test, callback);\n Array.observe(arr, callback);\n test.id = 1;\n test.id = 2;\n delete test.id;\n arr.push(1, 2);\n arr.length = 0;\n\n Object.deliverChangeRecords(callback);\n if (records.length !== 5)\n return false;\n\n if (records[0].type != 'add' ||\n records[1].type != 'update' ||\n records[2].type != 'delete' ||\n records[3].type != 'splice' ||\n records[4].type != 'splice') {\n return false;\n }\n\n Object.unobserve(test, callback);\n Array.unobserve(arr, callback);\n\n return true;\n }\n\n var hasObserve = detectObjectObserve();\n\n var createObject = ('__proto__' in {}) ?\n function(obj) { return obj; } :\n function(obj) {\n var proto = obj.__proto__;\n if (!proto)\n return obj;\n var newObject = Object.create(proto);\n Object.getOwnPropertyNames(obj).forEach(function(name) {\n Object.defineProperty(newObject, name,\n Object.getOwnPropertyDescriptor(obj, name));\n });\n return newObject;\n };\n\n var MAX_DIRTY_CHECK_CYCLES = 1000;\n\n function dirtyCheck(observer) {\n var cycles = 0;\n while (cycles < MAX_DIRTY_CHECK_CYCLES && observer.check_()) {\n cycles++;\n }\n if (testingExposeCycleCount)\n global.dirtyCheckCycleCount = cycles;\n\n return cycles > 0;\n }\n\n function objectIsEmpty(object) {\n for (var prop in object)\n return false;\n return true;\n }\n\n function diffIsEmpty(diff) {\n return objectIsEmpty(diff.added) &&\n objectIsEmpty(diff.removed) &&\n objectIsEmpty(diff.changed);\n }\n\n function isBlacklisted(prop, bl) {\n if (!bl || !bl.length) {\n return false;\n }\n var matches;\n for (var i = 0; i < bl.length; i++) {\n if ((Object.prototype.toString.call(bl[i]) === '[object RegExp]' && bl[i].test(prop)) || bl[i] === prop) {\n return matches = prop;\n }\n }\n return !!matches;\n }\n\n function diffObjectFromOldObject(object, oldObject, equals, bl) {\n var added = {};\n var removed = {};\n var changed = {};\n\n for (var prop in oldObject) {\n var newValue = object[prop];\n\n if (isBlacklisted(prop, bl))\n continue;\n\n if (newValue !== undefined && (equals ? equals(newValue, oldObject[prop]) : newValue === oldObject[prop]))\n continue;\n\n if (!(prop in object)) {\n removed[prop] = undefined;\n continue;\n }\n\n if (equals ? !equals(newValue, oldObject[prop]) : newValue !== oldObject[prop])\n changed[prop] = newValue;\n }\n\n for (var prop in object) {\n if (prop in oldObject)\n continue;\n\n if (isBlacklisted(prop, bl))\n continue;\n\n added[prop] = object[prop];\n }\n\n if (Array.isArray(object) && object.length !== oldObject.length)\n changed.length = object.length;\n\n return {\n added: added,\n removed: removed,\n changed: changed\n };\n }\n\n var eomTasks = [];\n function runEOMTasks() {\n if (!eomTasks.length)\n return false;\n\n for (var i = 0; i < eomTasks.length; i++) {\n eomTasks[i]();\n }\n eomTasks.length = 0;\n return true;\n }\n\n var runEOM = hasObserve ? (function(){\n return function(fn) {\n return Promise.resolve().then(fn);\n }\n })() :\n (function() {\n return function(fn) {\n eomTasks.push(fn);\n };\n })();\n\n var observedObjectCache = [];\n\n function newObservedObject() {\n var observer;\n var object;\n var discardRecords = false;\n var first = true;\n\n function callback(records) {\n if (observer && observer.state_ === OPENED && !discardRecords)\n observer.check_(records);\n }\n\n return {\n open: function(obs) {\n if (observer)\n throw Error('ObservedObject in use');\n\n if (!first)\n Object.deliverChangeRecords(callback);\n\n observer = obs;\n first = false;\n },\n observe: function(obj, arrayObserve) {\n object = obj;\n if (arrayObserve)\n Array.observe(object, callback);\n else\n Object.observe(object, callback);\n },\n deliver: function(discard) {\n discardRecords = discard;\n Object.deliverChangeRecords(callback);\n discardRecords = false;\n },\n close: function() {\n observer = undefined;\n Object.unobserve(object, callback);\n observedObjectCache.push(this);\n }\n };\n }\n\n function getObservedObject(observer, object, arrayObserve) {\n var dir = observedObjectCache.pop() || newObservedObject();\n dir.open(observer);\n dir.observe(object, arrayObserve);\n return dir;\n }\n\n var UNOPENED = 0;\n var OPENED = 1;\n var CLOSED = 2;\n\n var nextObserverId = 1;\n\n function Observer() {\n this.state_ = UNOPENED;\n this.callback_ = undefined;\n this.target_ = undefined; // TODO(rafaelw): Should be WeakRef\n this.directObserver_ = undefined;\n this.value_ = undefined;\n this.id_ = nextObserverId++;\n }\n\n Observer.prototype = {\n open: function(callback, target) {\n if (this.state_ != UNOPENED)\n throw Error('Observer has already been opened.');\n\n addToAll(this);\n this.callback_ = callback;\n this.target_ = target;\n this.connect_();\n this.state_ = OPENED;\n return this.value_;\n },\n\n close: function() {\n if (this.state_ != OPENED)\n return;\n\n removeFromAll(this);\n this.disconnect_();\n this.value_ = undefined;\n this.callback_ = undefined;\n this.target_ = undefined;\n this.state_ = CLOSED;\n },\n\n deliver: function() {\n if (this.state_ != OPENED)\n return;\n\n dirtyCheck(this);\n },\n\n report_: function(changes) {\n try {\n this.callback_.apply(this.target_, changes);\n } catch (ex) {\n Observer._errorThrownDuringCallback = true;\n console.error('Exception caught during observer callback: ' +\n (ex.stack || ex));\n }\n },\n\n discardChanges: function() {\n this.check_(undefined, true);\n return this.value_;\n }\n }\n\n var collectObservers = !hasObserve;\n var allObservers;\n Observer._allObserversCount = 0;\n\n if (collectObservers) {\n allObservers = [];\n }\n\n function addToAll(observer) {\n Observer._allObserversCount++;\n if (!collectObservers)\n return;\n\n allObservers.push(observer);\n }\n\n function removeFromAll(observer) {\n Observer._allObserversCount--;\n }\n\n var runningMicrotaskCheckpoint = false;\n\n global.Platform = global.Platform || {};\n\n global.Platform.performMicrotaskCheckpoint = function() {\n if (runningMicrotaskCheckpoint)\n return;\n\n if (!collectObservers)\n return;\n\n runningMicrotaskCheckpoint = true;\n\n var cycles = 0;\n var anyChanged, toCheck;\n\n do {\n cycles++;\n toCheck = allObservers;\n allObservers = [];\n anyChanged = false;\n\n for (var i = 0; i < toCheck.length; i++) {\n var observer = toCheck[i];\n if (observer.state_ != OPENED)\n continue;\n\n if (observer.check_())\n anyChanged = true;\n\n allObservers.push(observer);\n }\n if (runEOMTasks())\n anyChanged = true;\n } while (cycles < MAX_DIRTY_CHECK_CYCLES && anyChanged);\n\n if (testingExposeCycleCount)\n global.dirtyCheckCycleCount = cycles;\n\n runningMicrotaskCheckpoint = false;\n };\n\n if (collectObservers) {\n global.Platform.clearObservers = function() {\n allObservers = [];\n };\n }\n\n function ObjectObserver(object) {\n Observer.call(this);\n this.value_ = object;\n this.oldObject_ = undefined;\n }\n\n ObjectObserver.prototype = createObject({\n __proto__: Observer.prototype,\n\n arrayObserve: false,\n\n connect_: function(callback, target) {\n if (hasObserve) {\n this.directObserver_ = getObservedObject(this, this.value_,\n this.arrayObserve);\n } else {\n this.oldObject_ = this.copyObject(this.value_);\n }\n\n },\n\n copyObject: function(object) {\n var copy = Array.isArray(object) ? [] : {};\n for (var prop in object) {\n copy[prop] = object[prop];\n };\n if (Array.isArray(object))\n copy.length = object.length;\n return copy;\n },\n\n check_: function(changeRecords, skipChanges) {\n var diff;\n var oldValues;\n if (hasObserve) {\n if (!changeRecords)\n return false;\n\n oldValues = {};\n diff = diffObjectFromChangeRecords(this.value_, changeRecords,\n oldValues);\n } else {\n oldValues = this.oldObject_;\n diff = diffObjectFromOldObject(this.value_, this.oldObject_);\n }\n\n if (diffIsEmpty(diff))\n return false;\n\n if (!hasObserve)\n this.oldObject_ = this.copyObject(this.value_);\n\n this.report_([\n diff.added || {},\n diff.removed || {},\n diff.changed || {},\n function(property) {\n return oldValues[property];\n }\n ]);\n\n return true;\n },\n\n disconnect_: function() {\n if (hasObserve) {\n this.directObserver_.close();\n this.directObserver_ = undefined;\n } else {\n this.oldObject_ = undefined;\n }\n },\n\n deliver: function() {\n if (this.state_ != OPENED)\n return;\n\n if (hasObserve)\n this.directObserver_.deliver(false);\n else\n dirtyCheck(this);\n },\n\n discardChanges: function() {\n if (this.directObserver_)\n this.directObserver_.deliver(true);\n else\n this.oldObject_ = this.copyObject(this.value_);\n\n return this.value_;\n }\n });\n\n var observerSentinel = {};\n\n var expectedRecordTypes = {\n add: true,\n update: true,\n 'delete': true\n };\n\n function diffObjectFromChangeRecords(object, changeRecords, oldValues) {\n var added = {};\n var removed = {};\n\n for (var i = 0; i < changeRecords.length; i++) {\n var record = changeRecords[i];\n if (!expectedRecordTypes[record.type]) {\n console.error('Unknown changeRecord type: ' + record.type);\n console.error(record);\n continue;\n }\n\n if (!(record.name in oldValues))\n oldValues[record.name] = record.oldValue;\n\n if (record.type == 'update')\n continue;\n\n if (record.type == 'add') {\n if (record.name in removed)\n delete removed[record.name];\n else\n added[record.name] = true;\n\n continue;\n }\n\n // type = 'delete'\n if (record.name in added) {\n delete added[record.name];\n delete oldValues[record.name];\n } else {\n removed[record.name] = true;\n }\n }\n\n for (var prop in added)\n added[prop] = object[prop];\n\n for (var prop in removed)\n removed[prop] = undefined;\n\n var changed = {};\n for (var prop in oldValues) {\n if (prop in added || prop in removed)\n continue;\n\n var newValue = object[prop];\n if (oldValues[prop] !== newValue)\n changed[prop] = newValue;\n }\n\n return {\n added: added,\n removed: removed,\n changed: changed\n };\n }\n\n // Export the observe-js object for **Node.js**, with backwards-compatibility\n // for the old `require()` API. Also ensure `exports` is not a DOM Element.\n // If we're in the browser, export as a global object.\n\n global.Observer = Observer;\n global.isBlacklisted = isBlacklisted;\n global.Observer.runEOM_ = runEOM;\n global.Observer.observerSentinel_ = observerSentinel; // for testing.\n global.Observer.hasObjectObserve = hasObserve;\n global.diffObjectFromOldObject = diffObjectFromOldObject;\n global.ObjectObserver = ObjectObserver;\n\n})(exports);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./lib/observe-js/observe.js\n ** module id = 29\n ** module chunks = 0\n **/","var randHex = require('./randHex');\nvar choice = require('./choice');\n\n /**\n * Returns pseudo-random guid (UUID v4)\n * IMPORTANT: it's not totally \"safe\" since randHex/choice uses Math.random\n * by default and sequences can be predicted in some cases. See the\n * \"random/random\" documentation for more info about it and how to replace\n * the default PRNG.\n */\n function guid() {\n return (\n randHex(8)+'-'+\n randHex(4)+'-'+\n // v4 UUID always contain \"4\" at this position to specify it was\n // randomly generated\n '4' + randHex(3) +'-'+\n // v4 UUID always contain chars [a,b,8,9] at this position\n choice(8, 9, 'a', 'b') + randHex(3)+'-'+\n randHex(12)\n );\n }\n module.exports = guid;\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/random/guid.js\n ** module id = 30\n ** module chunks = 0\n **/","var choice = require('./choice');\n\n var _chars = '0123456789abcdef'.split('');\n\n /**\n * Returns a random hexadecimal string\n */\n function randHex(size){\n size = size && size > 0? size : 6;\n var str = '';\n while (size--) {\n str += choice(_chars);\n }\n return str;\n }\n\n module.exports = randHex;\n\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/random/randHex.js\n ** module id = 31\n ** module chunks = 0\n **/","var randInt = require('./randInt');\nvar isArray = require('../lang/isArray');\n\n /**\n * Returns a random element from the supplied arguments\n * or from the array (if single argument is an array).\n */\n function choice(items) {\n var target = (arguments.length === 1 && isArray(items))? items : arguments;\n return target[ randInt(0, target.length - 1) ];\n }\n\n module.exports = choice;\n\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/random/choice.js\n ** module id = 32\n ** module chunks = 0\n **/","var MIN_INT = require('../number/MIN_INT');\nvar MAX_INT = require('../number/MAX_INT');\nvar rand = require('./rand');\n\n /**\n * Gets random integer inside range or snap to min/max values.\n */\n function randInt(min, max){\n min = min == null? MIN_INT : ~~min;\n max = max == null? MAX_INT : ~~max;\n // can't be max + 0.5 otherwise it will round up if `rand`\n // returns `max` causing it to overflow range.\n // -0.5 and + 0.49 are required to avoid bias caused by rounding\n return Math.round( rand(min - 0.5, max + 0.499999999999) );\n }\n\n module.exports = randInt;\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/random/randInt.js\n ** module id = 33\n ** module chunks = 0\n **/","/**\n * @constant Minimum 32-bit signed integer value (-2^31).\n */\n\n module.exports = -2147483648;\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/number/MIN_INT.js\n ** module id = 34\n ** module chunks = 0\n **/","/**\n * @constant Maximum 32-bit signed integer value. (2^31 - 1)\n */\n\n module.exports = 2147483647;\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/number/MAX_INT.js\n ** module id = 35\n ** module chunks = 0\n **/","var random = require('./random');\nvar MIN_INT = require('../number/MIN_INT');\nvar MAX_INT = require('../number/MAX_INT');\n\n /**\n * Returns random number inside range\n */\n function rand(min, max){\n min = min == null? MIN_INT : min;\n max = max == null? MAX_INT : max;\n return min + (max - min) * random();\n }\n\n module.exports = rand;\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/random/rand.js\n ** module id = 36\n ** module chunks = 0\n **/","\n\n /**\n * Just a wrapper to Math.random. No methods inside mout/random should call\n * Math.random() directly so we can inject the pseudo-random number\n * generator if needed (ie. in case we need a seeded random or a better\n * algorithm than the native one)\n */\n function random(){\n return random.get();\n }\n\n // we expose the method so it can be swapped if needed\n random.get = Math.random;\n\n module.exports = random;\n\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/random/random.js\n ** module id = 37\n ** module chunks = 0\n **/","var isKind = require('./isKind');\n /**\n */\n var isArray = Array.isArray || function (val) {\n return isKind(val, 'Array');\n };\n module.exports = isArray;\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/lang/isArray.js\n ** module id = 38\n ** module chunks = 0\n **/","var kindOf = require('./kindOf');\n /**\n * Check if value is from a specific \"kind\".\n */\n function isKind(val, kind){\n return kindOf(val) === kind;\n }\n module.exports = isKind;\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/lang/isKind.js\n ** module id = 39\n ** module chunks = 0\n **/","\n\n var _rKind = /^\\[object (.*)\\]$/,\n _toString = Object.prototype.toString,\n UNDEF;\n\n /**\n * Gets the \"kind\" of value. (e.g. \"String\", \"Number\", etc)\n */\n function kindOf(val) {\n if (val === null) {\n return 'Null';\n } else if (val === UNDEF) {\n return 'Undefined';\n } else {\n return _rKind.exec( _toString.call(val) )[1];\n }\n }\n module.exports = kindOf;\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/lang/kindOf.js\n ** module id = 40\n ** module chunks = 0\n **/","import DSUtils from '../../utils'\nimport DSErrors from '../../errors'\n\nlet {NER, IA, R} = DSErrors\nconst fakeId = `DS_${new Date().getTime()}`\n\nfunction diffIsEmpty (diff) {\n return !(DSUtils.isEmpty(diff.added) &&\n DSUtils.isEmpty(diff.removed) &&\n DSUtils.isEmpty(diff.changed))\n}\n\nfunction check (fnName, resourceName, id, options) {\n let _this = this\n let definition = _this.definitions[resourceName]\n options = options || {}\n\n id = DSUtils.resolveId(definition, id)\n if (!definition) {\n throw new NER(resourceName)\n } else if (!DSUtils._sn(id)) {\n throw DSUtils._snErr('id')\n }\n id = id === fakeId ? undefined : id\n\n options = DSUtils._(definition, options)\n\n options.logFn(fnName, id, options)\n\n return {_this, definition, _resourceName: resourceName, _id: id, _options: options}\n}\n\nexport default {\n // Return the changes for the given item, if any.\n //\n // @param resourceName The name of the type of resource of the item whose changes are to be returned.\n // @param id The primary key of the item whose changes are to be returned.\n // @param options Optional configuration.\n // @param options.ignoredChanges Array of strings or regular expressions of fields, the changes of which are to be ignored.\n // @returns The changes of the given item, if any.\n changes (resourceName, id, options) {\n let {_this, definition, _resourceName, _id, _options} = check.call(this, 'changes', resourceName, id, options)\n\n let item = definition.get(_id)\n if (item) {\n let observer = _this.store[_resourceName].observers[_id]\n if (observer && typeof observer === 'function') {\n // force observation handler to be fired for item if there are changes and `Object.observe` is not available\n observer.deliver()\n }\n\n let ignoredChanges = _options.ignoredChanges || []\n // add linked relations to list of ignored changes\n DSUtils.forEach(definition.relationFields, function (field) {\n if (!DSUtils.contains(ignoredChanges, field)) {\n ignoredChanges.push(field)\n }\n })\n // calculate changes\n let diff = DSUtils.diffObjectFromOldObject(item, _this.store[_resourceName].previousAttributes[_id], DSUtils.equals, ignoredChanges)\n // remove functions from diff\n DSUtils.forOwn(diff, function (changeset, name) {\n let toKeep = []\n DSUtils.forOwn(changeset, function (value, field) {\n if (!DSUtils.isFunction(value)) {\n toKeep.push(field)\n }\n })\n diff[name] = DSUtils.pick(diff[name], toKeep)\n })\n // definitely ignore changes to linked relations\n DSUtils.forEach(definition.relationFields, function (field) {\n delete diff.added[field]\n delete diff.removed[field]\n delete diff.changed[field]\n })\n return diff\n }\n },\n\n // Return the change history of the given item, if any.\n //\n // @param resourceName The name of the type of resource of the item whose change history is to be returned.\n // @param id The primary key of the item whose change history is to be returned.\n // @returns The change history of the given item, if any.\n changeHistory (resourceName, id) {\n let {_this, definition, _resourceName, _id} = check.call(this, 'changeHistory', resourceName, id || fakeId)\n let resource = _this.store[_resourceName]\n\n if (!definition.keepChangeHistory) {\n definition.errorFn('changeHistory is disabled for this resource!')\n } else {\n if (_resourceName) {\n let item = definition.get(_id)\n if (item) {\n return resource.changeHistories[_id]\n }\n } else {\n return resource.changeHistory\n }\n }\n },\n\n commit (resourceName, id) {\n let {_this, definition, _resourceName, _id} = check.call(this, 'commit', resourceName, id)\n let resource = _this.store[_resourceName]\n let item = _this.store[_resourceName].index[_id]\n if (item) {\n const relationFields = definition.relationFields || []\n const previousAttributes = {}\n for (let key in item) {\n if (relationFields.indexOf(key) === -1) {\n previousAttributes[key] = DSUtils.copy(item[key], null, null, null, [])\n }\n }\n resource.previousAttributes[_id] = previousAttributes\n }\n\n if (resource.changeHistories[_id].length) {\n DSUtils.forEach(resource.changeHistories[_id], function (changeRecord) {\n DSUtils.remove(resource.changeHistory, changeRecord)\n })\n resource.changeHistories[_id].splice(0, resource.changeHistories[_id].length)\n }\n return item\n },\n\n // Re-compute the computed properties of the given item.\n //\n // @param resourceName The name of the type of resource of the item whose computed properties are to be re-computed.\n // @param instance The instance whose computed properties are to be re-computed.\n // @returns The item whose computed properties were re-computed.\n compute (resourceName, instance) {\n let _this = this\n let definition = _this.definitions[resourceName]\n\n instance = DSUtils.resolveItem(_this.store[resourceName], instance)\n if (!definition) {\n throw new NER(resourceName)\n } else if (!instance) {\n throw new R('Item not in the store!')\n } else if (!DSUtils._o(instance) && !DSUtils._sn(instance)) {\n throw new IA('\"instance\" must be an object, string or number!')\n }\n\n definition.logFn('compute', instance)\n\n // re-compute all computed properties\n DSUtils.forOwn(definition.computed, function (fn, field) {\n DSUtils.compute.call(instance, fn, field)\n })\n return instance\n },\n\n // Factory function to create an instance of the specified Resource.\n //\n // @param resourceName The name of the type of resource of which to create an instance.\n // @param attrs Hash of properties with which to initialize the instance.\n // @param options Optional configuration.\n // @param options.defaultValues Default values with which to initialize the instance.\n // @returns The new instance.\n createInstance (resourceName, attrs, options) {\n let definition = this.definitions[resourceName]\n let item\n\n attrs = attrs || {}\n\n if (!definition) {\n throw new NER(resourceName)\n } else if (attrs && !DSUtils.isObject(attrs)) {\n throw new IA('\"attrs\" must be an object!')\n }\n\n options = DSUtils._(definition, options)\n\n const relationList = definition.relationList || []\n if (relationList.length) {\n DSUtils.forEach(relationList, function (def) {\n const relationData = DSUtils.get(attrs, def.localField)\n if (relationData) {\n if (DSUtils.isArray(relationData)) {\n const array = []\n const Resource = definition.getResource(def.relation)\n const _options = options.orig()\n DSUtils.forEach(relationData, function (relationDataItem) {\n array.push(Resource.createInstance(relationDataItem, _options))\n })\n DSUtils.set(attrs, def.localField, array)\n } else if (DSUtils.isObject(relationData)) {\n DSUtils.set(attrs, def.localField, definition.getResource(def.relation).createInstance(relationData, options.orig()))\n }\n }\n })\n }\n\n options.logFn('createInstance', attrs, options)\n\n // lifecycle\n options.beforeCreateInstance(options, attrs)\n\n // grab instance constructor function from Resource definition\n let Constructor = definition[definition.class]\n\n // create instance\n item = new Constructor()\n\n if (definition.instanceEvents) {\n DSUtils.Events(item)\n }\n\n // add default values\n if (options.defaultValues) {\n DSUtils.deepMixIn(item, DSUtils.copy(options.defaultValues))\n }\n DSUtils.deepMixIn(item, attrs)\n\n // compute computed properties\n if (definition.computed) {\n definition.compute(item)\n }\n // lifecycle\n options.afterCreateInstance(options, item)\n return item\n },\n\n // Create a new collection of the specified Resource.\n //\n // @param resourceName The name of the type of resource of which to create a collection\n // @param arr Possibly empty array of data from which to create the collection.\n // @param params The criteria by which to filter items. Will be passed to `DS#findAll` if `fetch` is called. See http://www.js-data.io/docs/query-syntax\n // @param options Optional configuration.\n // @param options.notify Whether to call the beforeCreateCollection and afterCreateCollection lifecycle hooks..\n // @returns The new collection.\n createCollection (resourceName, arr, params, options) {\n let _this = this\n let definition = _this.definitions[resourceName]\n\n arr = arr || []\n params = params || {}\n\n if (!definition) {\n throw new NER(resourceName)\n } else if (arr && !DSUtils.isArray(arr)) {\n throw new IA('\"arr\" must be an array!')\n }\n\n options = DSUtils._(definition, options)\n\n options.logFn('createCollection', arr, options)\n\n // lifecycle\n options.beforeCreateCollection(options, arr)\n\n // define the API for this collection\n Object.defineProperties(arr, {\n // Call DS#findAll with the params of this collection, filling the collection with the results.\n fetch: {\n value: function (params, options) {\n let __this = this\n __this.params = params || __this.params\n return definition.findAll(__this.params, options).then(function (data) {\n if (data === __this) {\n return __this\n }\n data.unshift(__this.length)\n data.unshift(0)\n __this.splice.apply(__this, data)\n data.shift()\n data.shift()\n if (data.$$injected) {\n _this.store[resourceName].queryData[DSUtils.toJson(__this.params)] = __this\n __this.$$injected = true\n }\n return __this\n })\n }\n },\n // params for this collection. See http://www.js-data.io/docs/query-syntax\n params: {\n value: params,\n writable: true\n },\n // name of the resource type of this collection\n resourceName: {\n value: resourceName\n }\n })\n\n // lifecycle\n options.afterCreateCollection(options, arr)\n return arr\n },\n defineResource: require('./defineResource'),\n digest () {\n this.observe.Platform.performMicrotaskCheckpoint()\n },\n eject: require('./eject'),\n ejectAll: require('./ejectAll'),\n filter: require('./filter'),\n\n // Return the item with the given primary key if its in the store.\n //\n // @param resourceName The name of the type of resource of the item to retrieve.\n // @param id The primary key of the item to retrieve.\n // @returns The item with the given primary key if it's in the store.\n // /\n get (resourceName, id) {\n let {_this, _resourceName, _id} = check.call(this, 'get', resourceName, id)\n\n // return the item if it exists\n return _this.store[_resourceName].index[_id]\n },\n\n // Return the items in the store that have the given primary keys.\n //\n // @param resourceName The name of the type of resource of the items to retrieve.\n // @param ids The primary keys of the items to retrieve.\n // @returns The items with the given primary keys if they're in the store.\n getAll (resourceName, ids) {\n let _this = this\n let definition = _this.definitions[resourceName]\n let resource = _this.store[resourceName]\n let collection = []\n\n if (!definition) {\n throw new NER(resourceName)\n } else if (ids && !DSUtils._a(ids)) {\n throw DSUtils._aErr('ids')\n }\n\n definition.logFn('getAll', ids)\n\n if (DSUtils._a(ids)) {\n // return just the items with the given primary keys\n let length = ids.length\n for (var i = 0; i < length; i++) {\n if (resource.index[ids[i]]) {\n collection.push(resource.index[ids[i]])\n }\n }\n } else {\n // most efficient of retrieving ALL items from the store\n collection = resource.collection.slice()\n }\n\n return collection\n },\n\n // Return the whether the item with the given primary key has any changes.\n //\n // @param resourceName The name of the type of resource of the item.\n // @param id The primary key of the item.\n // @returns Whether the item with the given primary key has any changes.\n hasChanges (resourceName, id) {\n let {definition, _id} = check.call(this, 'hasChanges', resourceName, id)\n\n return definition.get(_id) ? diffIsEmpty(definition.changes(_id)) : false\n },\n inject: require('./inject'),\n\n // Return whether the item with the given primary key is a temporary item.\n //\n // @param resourceName The name of the type of resource of the item.\n // @param id The primary key of the item.\n // @returns Whether the item with the given primary key is a temporary item.\n isNew (resourceName, id) {\n let {_this, _resourceName, _id} = check.call(this, 'isNew', resourceName, id || fakeId)\n let resource = _this.store[_resourceName]\n\n return !!resource.temporaryItems[_id]\n },\n\n // Return the timestamp from the last time the item with the given primary key was changed.\n //\n // @param resourceName The name of the type of resource of the item.\n // @param id The primary key of the item.\n // @returns Timestamp from the last time the item was changed.\n lastModified (resourceName, id) {\n let {_this, _resourceName, _id} = check.call(this, 'lastModified', resourceName, id || fakeId)\n let resource = _this.store[_resourceName]\n\n if (_id) {\n if (!(_id in resource.modified)) {\n resource.modified[_id] = 0\n }\n return resource.modified[_id]\n }\n return resource.collectionModified\n },\n\n // Return the timestamp from the last time the item with the given primary key was saved via an adapter.\n //\n // @param resourceName The name of the type of resource of the item.\n // @param id The primary key of the item.\n // @returns Timestamp from the last time the item was saved.\n lastSaved (resourceName, id) {\n let {_this, _resourceName, _id} = check.call(this, 'lastSaved', resourceName, id || fakeId)\n let resource = _this.store[_resourceName]\n\n if (!(_id in resource.saved)) {\n resource.saved[_id] = 0\n }\n return resource.saved[_id]\n },\n\n // Return the previous attributes of the item with the given primary key before it was changed.\n //\n // @param resourceName The name of the type of resource of the item.\n // @param id The primary key of the item.\n // @returns The previous attributes of the item\n previous (resourceName, id) {\n let {_this, _resourceName, _id} = check.call(this, 'previous', resourceName, id)\n let resource = _this.store[_resourceName]\n\n // return resource from cache\n return resource.previousAttributes[_id] ? DSUtils.copy(resource.previousAttributes[_id]) : undefined\n },\n\n // Revert all attributes of the item with the given primary key to their previous values.\n //\n // @param resourceName The name of the type of resource of the item.\n // @param id The primary key of the item.\n // @param options Optional configuration.\n // @returns The reverted item\n revert (resourceName, id, options) {\n let {_this, definition, _resourceName, _id, _options} = check.call(this, 'revert', resourceName, id, options)\n\n let preserve = _options.preserve || []\n let injectObj = {}\n\n if (preserve.length === 0) {\n injectObj = _this.previous(_resourceName, _id)\n } else {\n let instance = definition.get(id)\n let previousInstance = _this.previous(_resourceName, _id)\n\n if (!instance) { return }\n\n DSUtils.forOwn(instance, function (value, key) {\n if (DSUtils.contains(preserve, key)) {\n injectObj[key] = instance[key]\n } else {\n injectObj[key] = previousInstance[key]\n }\n })\n }\n\n return definition.inject(injectObj, {\n onConflict: 'replace'\n })\n }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/datastore/sync_methods/index.js\n **/","/* jshint evil:true, loopfunc:true */\nimport DSUtils from '../../utils'\nimport DSErrors from '../../errors'\n\n/**\n * These are DS methods that will be proxied by instances. e.g.\n *\n * var store = new JSData.DS()\n * var User = store.defineResource('user')\n * var user = User.createInstance({ id: 1 })\n *\n * store.update(resourceName, id, attrs[, options]) // DS method\n * User.update(id, attrs[, options]) // DS method proxied on a Resource\n * user.DSUpdate(attrs[, options]) // DS method proxied on an Instance\n */\nlet instanceMethods = [\n 'compute',\n 'eject',\n 'refresh',\n 'save',\n 'update',\n 'destroy',\n 'loadRelations',\n 'changeHistory',\n 'changes',\n 'commit',\n 'hasChanges',\n 'isNew',\n 'lastModified',\n 'lastSaved',\n 'previous',\n 'revert'\n]\n\nmodule.exports = function defineResource (definition) {\n let _this = this\n let definitions = _this.definitions\n\n /**\n * This allows the name-only definition shorthand.\n * store.defineResource('user') is the same as store.defineResource({ name: 'user'})\n */\n if (DSUtils._s(definition)) {\n definition = {\n name: definition.replace(/\\s/gi, '')\n }\n }\n if (!DSUtils._o(definition)) {\n throw DSUtils._oErr('definition')\n } else if (!DSUtils._s(definition.name)) {\n throw new DSErrors.IA('\"name\" must be a string!')\n } else if (definitions[definition.name]) {\n throw new DSErrors.R(`${definition.name} is already registered!`)\n }\n\n /**\n * Dynamic Resource constructor function.\n *\n * A Resource inherits from the defaults of the data store that created it.\n */\n function Resource (options) {\n this.defaultValues = {}\n this.methods = {}\n this.computed = {}\n this.scopes = {}\n this.actions = {}\n DSUtils.deepMixIn(this, options)\n let parent = _this.defaults\n if (definition.extends && definitions[definition.extends]) {\n parent = definitions[definition.extends]\n }\n DSUtils.fillIn(this.defaultValues, parent.defaultValues)\n DSUtils.fillIn(this.methods, parent.methods)\n DSUtils.fillIn(this.computed, parent.computed)\n DSUtils.fillIn(this.scopes, parent.scopes)\n DSUtils.fillIn(this.actions, parent.actions)\n this.endpoint = ('endpoint' in options) ? options.endpoint : this.name\n }\n\n try {\n // Resources can inherit from another resource instead of inheriting directly from the data store defaults.\n if (definition.extends && definitions[definition.extends]) {\n // Inherit from another resource\n Resource.prototype = definitions[definition.extends]\n } else {\n // Inherit from global defaults\n Resource.prototype = _this.defaults\n }\n definitions[definition.name] = new Resource(definition)\n\n var def = definitions[definition.name]\n\n def.getResource = function (resourceName) { return _this.definitions[resourceName] }\n\n def.logFn('Preparing resource.')\n\n if (!DSUtils._s(def.idAttribute)) {\n throw new DSErrors.IA('\"idAttribute\" must be a string!')\n }\n\n // Setup nested parent configuration\n if (def.relations) {\n def.relationList = []\n def.relationFields = []\n DSUtils.forOwn(def.relations, function (relatedModels, type) {\n DSUtils.forOwn(relatedModels, function (defs, relationName) {\n if (!DSUtils._a(defs)) {\n relatedModels[relationName] = [defs]\n }\n DSUtils.forEach(relatedModels[relationName], function (d) {\n d.type = type\n d.relation = relationName\n d.name = def.name\n def.relationList.push(d)\n if (d.localField) {\n def.relationFields.push(d.localField)\n }\n })\n })\n })\n if (def.relations.belongsTo) {\n def.parents = {}\n DSUtils.forOwn(def.relations.belongsTo, function (relatedModel, modelName) {\n DSUtils.forEach(relatedModel, function (relation) {\n if (relation.parent) {\n def.parent = modelName\n def.parentKey = relation.localKey\n def.parentField = relation.localField\n def.parents[modelName] = {\n key: def.parentKey,\n field: def.parentField\n }\n }\n })\n })\n }\n if (typeof Object.freeze === 'function') {\n Object.freeze(def.relations)\n Object.freeze(def.relationList)\n }\n }\n\n // Create the wrapper class for the new resource\n var _class = def['class'] = DSUtils.pascalCase(def.name)\n try {\n if (typeof def.useClass === 'function') {\n if (def.csp) {\n def[_class] = function () { def.useClass.call(this) }\n } else {\n def[_class] = new Function('def', `return function ${_class}() { def.useClass.call(this); }`)(def) // eslint-disable-line\n }\n def[_class].prototype = (function (proto) {\n function Ctor () {\n }\n\n Ctor.prototype = proto\n return new Ctor()\n })(def.useClass.prototype)\n } else if (def.csp) {\n def[_class] = function () { }\n } else {\n def[_class] = new Function(`return function ${_class}() {}`)() // eslint-disable-line\n }\n } catch (e) {\n def[_class] = function () {}\n }\n\n // Apply developer-defined instance methods\n DSUtils.forOwn(def.methods, function (fn, m) {\n def[_class].prototype[m] = fn\n })\n\n /**\n * var user = User.createInstance({ id: 1 })\n * user.set('foo', 'bar')\n */\n def[_class].prototype.set = function (key, value) {\n DSUtils.set(this, key, value)\n def.compute(this)\n if (def.instanceEvents) {\n setTimeout(() => {\n this.emit('DS.change', def, this)\n }, 0)\n }\n def.handleChange(this)\n return this\n }\n\n /**\n * var user = User.createInstance({ id: 1 })\n * user.get('id') // 1\n */\n def[_class].prototype.get = function (key) {\n return DSUtils.get(this, key)\n }\n\n // Setup the relation links\n DSUtils.applyRelationGettersToTarget(_this, def, def[_class].prototype)\n\n let parentOmit = null\n if (!def.hasOwnProperty('omit')) {\n parentOmit = def.omit\n def.omit = []\n } else {\n parentOmit = _this.defaults.omit\n }\n def.omit = def.omit.concat(parentOmit || [])\n\n // Prepare for computed properties\n DSUtils.forOwn(def.computed, function (fn, field) {\n if (DSUtils.isFunction(fn)) {\n def.computed[field] = [fn]\n fn = def.computed[field]\n }\n if (def.methods && field in def.methods) {\n def.errorFn(`Computed property \"${field}\" conflicts with previously defined prototype method!`)\n }\n def.omit.push(field)\n if (DSUtils.isArray(fn)) {\n var deps\n if (fn.length === 1) {\n let match = fn[0].toString().match(/function.*?\\(([\\s\\S]*?)\\)/)\n deps = match[1].split(',')\n deps = DSUtils.filter(deps, function (x) { return x })\n def.computed[field] = deps.concat(fn)\n fn = def.computed[field]\n if (deps.length) {\n def.errorFn('Use the computed property array syntax for compatibility with minified code!')\n }\n }\n deps = fn.slice(0, fn.length - 1)\n DSUtils.forEach(deps, function (val, index) {\n deps[index] = val.trim()\n })\n fn.deps = DSUtils.filter(deps, function (dep) {\n return !!dep\n })\n } else if (DSUtils.isObject(fn)) {\n Object.defineProperty(def[_class].prototype, field, fn)\n }\n })\n\n // add instance proxies of DS methods\n DSUtils.forEach(instanceMethods, function (name) {\n def[_class].prototype[`DS${DSUtils.pascalCase(name)}`] = function (...args) {\n args.unshift(this[def.idAttribute] || this)\n args.unshift(def.name)\n return _this[name].apply(_this, args)\n }\n })\n\n // manually add instance proxy for DS#create\n def[_class].prototype.DSCreate = function (...args) {\n args.unshift(this)\n args.unshift(def.name)\n return _this.create.apply(_this, args)\n }\n\n // Initialize store data for the new resource\n _this.store[def.name] = {\n collection: [],\n expiresHeap: new DSUtils.BinaryHeap(function (x) { return x.expires }, function (x, y) { return x.item === y }),\n completedQueries: {},\n queryData: {},\n pendingQueries: {},\n index: {},\n modified: {},\n saved: {},\n previousAttributes: {},\n observers: {},\n changeHistories: {},\n changeHistory: [],\n collectionModified: 0,\n temporaryItems: {}\n }\n\n let resource = _this.store[def.name]\n\n // start the reaping\n if (def.reapInterval) {\n setInterval(() => def.reap(), def.reapInterval)\n }\n\n // proxy DS methods with shorthand ones\n let fns = ['registerAdapter', 'getAdapterName', 'getAdapter', 'is', '!clear']\n for (let key in _this) {\n if (typeof _this[key] === 'function') {\n fns.push(key)\n }\n }\n\n /**\n * Create the Resource shorthands that proxy DS methods. e.g.\n *\n * var store = new JSData.DS()\n * var User = store.defineResource('user')\n *\n * store.update(resourceName, id, attrs[, options]) // DS method\n * User.update(id, attrs[, options]) // DS method proxied on a Resource\n */\n DSUtils.forEach(fns, function (key) {\n let k = key\n if (k[0] === '!') {\n return\n }\n if (_this[k].shorthand !== false) {\n def[k] = function (...args) {\n args.unshift(def.name)\n return _this[k].apply(_this, args)\n }\n def[k].before = function (fn) {\n let orig = def[k]\n def[k] = function (...args) {\n return orig.apply(def, fn.apply(def, args) || args)\n }\n }\n } else {\n def[k] = function (...args) { return _this[k].apply(_this, args) }\n }\n })\n\n def.beforeValidate = DSUtils.promisify(def.beforeValidate)\n def.validate = DSUtils.promisify(def.validate)\n def.afterValidate = DSUtils.promisify(def.afterValidate)\n def.beforeCreate = DSUtils.promisify(def.beforeCreate)\n def.afterCreate = DSUtils.promisify(def.afterCreate)\n def.afterFind = DSUtils.promisify(def.afterFind)\n def.afterFindAll = DSUtils.promisify(def.afterFindAll)\n def.afterLoadRelations = DSUtils.promisify(def.afterLoadRelations)\n def.beforeUpdate = DSUtils.promisify(def.beforeUpdate)\n def.afterUpdate = DSUtils.promisify(def.afterUpdate)\n def.beforeDestroy = DSUtils.promisify(def.beforeDestroy)\n def.afterDestroy = DSUtils.promisify(def.afterDestroy)\n\n let defaultAdapter\n if (def.hasOwnProperty('defaultAdapter')) {\n defaultAdapter = def.defaultAdapter\n }\n\n // setup \"actions\"\n DSUtils.forOwn(def.actions, function (action, name) {\n if (def[name] && !def.actions[name]) {\n throw new Error(`Cannot override existing method \"${name}\"!`)\n }\n action.request = action.request || function (config) { return config }\n action.response = action.response || function (response) { return response }\n action.responseError = action.responseError || function (err) { return DSUtils.Promise.reject(err) }\n def[name] = function (id, options) {\n if (DSUtils._o(id)) {\n options = id\n }\n options = options || {}\n let adapter = def.getAdapter(action.adapter || defaultAdapter || 'http')\n let config = DSUtils.deepMixIn({}, action)\n if (!options.hasOwnProperty('endpoint') && config.endpoint) {\n options.endpoint = config.endpoint\n }\n if (typeof options.getEndpoint === 'function') {\n config.url = options.getEndpoint(def, options)\n } else {\n let args = [options.basePath || def.basePath || adapter.defaults.basePath, adapter.getEndpoint(def, DSUtils._sn(id) ? id : null, options)]\n if (DSUtils._sn(id)) {\n args.push(id)\n }\n args.push(action.pathname || name)\n config.url = DSUtils.makePath.apply(null, args)\n }\n config.method = config.method || 'GET'\n config.resourceName = def.name\n DSUtils.deepMixIn(config, options)\n return new DSUtils.Promise(function (resolve) { return resolve(config) })\n .then(options.request || action.request)\n .then(function (config) { return adapter.HTTP(config) })\n .then(function (data) {\n if (data && data.config) {\n data.config.resourceName = def.name\n }\n return data\n })\n .then(options.response || action.response, options.responseError || action.responseError)\n }\n })\n\n // mix in events\n DSUtils.Events(def)\n\n def.handleChange = function (data) {\n resource.collectionModified = DSUtils.updateTimestamp(resource.collectionModified)\n if (def.notify) {\n setTimeout(() => {\n def.emit('DS.change', def, data)\n }, 0)\n }\n }\n\n def.logFn('Done preparing resource.')\n\n return def\n } catch (err) {\n _this.defaults.errorFn(err)\n delete definitions[definition.name]\n delete _this.store[definition.name]\n throw err\n }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/datastore/sync_methods/defineResource.js\n **/","/* jshint eqeqeq:false */\n/**\n * Eject an item from the store, if it is currently in the store.\n *\n * @param resourceName The name of the resource type of the item eject.\n * @param id The primary key of the item to eject.\n * @param options Optional configuration.\n * @param options.notify Whether to emit the \"DS.beforeEject\" and \"DS.afterEject\" events\n * @param options.clearEmptyQueries Whether to remove cached findAll queries that become empty as a result of this method call.\n * @returns The ejected item if one was ejected.\n */\nmodule.exports = function eject (resourceName, id, options) {\n let _this = this\n let DSUtils = _this.utils\n let definition = _this.definitions[resourceName]\n let resource = _this.store[resourceName]\n let item\n let found = false\n\n id = DSUtils.resolveId(definition, id)\n\n if (!definition) {\n throw new _this.errors.NER(resourceName)\n } else if (!DSUtils._sn(id)) {\n throw DSUtils._snErr('id')\n }\n\n options = DSUtils._(definition, options)\n\n options.logFn('eject', id, options)\n\n // find the item to eject\n for (var i = 0; i < resource.collection.length; i++) {\n if (resource.collection[i][definition.idAttribute] == id) { // eslint-disable-line\n item = resource.collection[i]\n // remove its expiration timestamp\n resource.expiresHeap.remove(item)\n found = true\n break\n }\n }\n if (found) {\n // lifecycle\n definition.beforeEject(options, item)\n if (options.notify) {\n definition.emit('DS.beforeEject', definition, item)\n }\n\n // find the item in any ($$injected) cached queries\n let toRemove = []\n DSUtils.forOwn(resource.queryData, function (items, queryHash) {\n if (items.$$injected) {\n DSUtils.remove(items, item)\n }\n // optionally remove any empty queries\n if (!items.length && options.clearEmptyQueries) {\n toRemove.push(queryHash)\n }\n })\n\n // clean up\n DSUtils.forEach(resource.changeHistories[id], function (changeRecord) {\n DSUtils.remove(resource.changeHistory, changeRecord)\n })\n DSUtils.forEach(toRemove, function (queryHash) {\n delete resource.completedQueries[queryHash]\n delete resource.queryData[queryHash]\n })\n if (resource.observers[id] && typeof resource.observers[id].close === 'function') {\n // stop observation\n resource.observers[id].close()\n }\n delete resource.observers[id]\n delete resource.index[id]\n delete resource.previousAttributes[id]\n delete resource.completedQueries[id]\n delete resource.pendingQueries[id]\n delete resource.changeHistories[id]\n delete resource.modified[id]\n delete resource.saved[id]\n if (definition.instanceEvents && item.off) {\n item.off()\n }\n\n // remove it from the store\n resource.collection.splice(i, 1)\n // collection has been modified\n definition.handleChange(item)\n\n // lifecycle\n definition.afterEject(options, item)\n if (options.notify) {\n definition.emit('DS.afterEject', definition, item)\n }\n\n return item\n }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/datastore/sync_methods/eject.js\n **/","/**\n * Eject a collection of items from the store, if any items currently in the store match the given criteria.\n *\n * @param resourceName The name of the resource type of the items eject.\n * @param params The criteria by which to match items to eject. See http://www.js-data.io/docs/query-syntax\n * @param options Optional configuration.\n * @returns The collection of items that were ejected, if any.\n */\nmodule.exports = function ejectAll (resourceName, params, options) {\n let _this = this\n let DSUtils = _this.utils\n let definition = _this.definitions[resourceName]\n params = params || {}\n\n if (!definition) {\n throw new _this.errors.NER(resourceName)\n } else if (!DSUtils._o(params)) {\n throw DSUtils._oErr('params')\n }\n\n options = DSUtils._(definition, options)\n definition.logFn('ejectAll', params, options)\n\n DSUtils.applyScope(definition, params, options)\n\n let resource = _this.store[resourceName]\n let queryHash = DSUtils.toJson(params)\n\n // get items that match the criteria\n let items\n\n if (DSUtils.isEmpty(params)) {\n items = definition.getAll()\n // remove all completed queries if ejecting all items\n resource.completedQueries = {}\n } else {\n items = definition.filter(params)\n // remove matching completed query, if any\n delete resource.completedQueries[queryHash]\n }\n // prepare to remove matching items\n DSUtils.forEach(items, function (item) {\n if (item && item[definition.idAttribute]) {\n definition.eject(item[definition.idAttribute], options)\n }\n })\n // collection has been modified\n definition.handleChange(items)\n return items\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/datastore/sync_methods/ejectAll.js\n **/","/**\n * Return the subset of items currently in the store that match the given criteria.\n *\n * The actual filtering is delegated to DS#defaults.defaultFilter, which can be overridden by developers.\n *\n * @param resourceName The name of the resource type of the items to filter.\n * @param params The criteria by which to filter items. See http://www.js-data.io/docs/query-syntax\n * @param options Optional configuration.\n * @returns Matching items.\n */\nmodule.exports = function filter (resourceName, params, options) {\n let _this = this\n let DSUtils = _this.utils\n let definition = _this.definitions[resourceName]\n\n if (!definition) {\n throw new _this.errors.NER(resourceName)\n } else if (params && !DSUtils._o(params)) {\n throw DSUtils._oErr('params')\n }\n\n // Protect against null\n params = params || {}\n options = DSUtils._(definition, options)\n options.logFn('filter', params, options)\n\n DSUtils.applyScope(definition, params, options)\n\n // delegate filtering to DS#defaults.defaultFilter, which can be overridden by developers.\n return definition.defaultFilter.call(_this, _this.store[resourceName].collection, resourceName, params, options)\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/datastore/sync_methods/filter.js\n **/","import DSUtils from '../../utils'\nimport DSErrors from '../../errors'\n\n/**\n * This is a beast of a file, but it's where a significant portion of the magic happens.\n *\n * DS#inject makes up the core of how data gets into the store.\n */\n\n/**\n * This factory function produces an observer handler function tailor-made for the current item being injected.\n *\n * The observer handler is what allows computed properties and change tracking to function.\n *\n * @param definition Resource definition produced by DS#defineResource\n * @param resource Resource data as internally stored by the data store\n * @returns {Function} Observer handler function\n * @private\n */\nfunction makeObserverHandler (definition, resource) {\n var DS = this\n\n // using \"var\" avoids a JSHint error\n var name = definition.name\n\n /**\n * This will be called by observe-js when a new change record is available for the observed object\n *\n * @param added Change record for added properties\n * @param removed Change record for removed properties\n * @param changed Change record for changed properties\n * @param oldValueFn Function that can be used to get the previous value of a changed property\n * @param firstTime Whether this is the first time this function is being called for the given item. Will only be true once.\n */\n return function _react (added, removed, changed, oldValueFn, firstTime) {\n let target = this\n let item\n\n // Get the previous primary key of the observed item, in-case some knucklehead changed it\n let innerId = (oldValueFn && oldValueFn(definition.idAttribute)) ? oldValueFn(definition.idAttribute) : target[definition.idAttribute]\n\n // Ignore changes to relation links\n DSUtils.forEach(definition.relationFields, function (field) {\n delete added[field]\n delete removed[field]\n delete changed[field]\n })\n\n // Detect whether there are actually any changes\n if (!DSUtils.isEmpty(added) || !DSUtils.isEmpty(removed) || !DSUtils.isEmpty(changed) || firstTime) {\n item = DS.get(name, innerId)\n\n // update item and collection \"modified\" timestamps\n resource.modified[innerId] = DSUtils.updateTimestamp(resource.modified[innerId])\n\n if (item && definition.instanceEvents) {\n setTimeout(function () {\n item.emit('DS.change', definition, item)\n }, 0)\n }\n\n definition.handleChange(item)\n\n // Save a change record for the item\n if (definition.keepChangeHistory) {\n let changeRecord = {\n resourceName: name,\n target: item,\n added,\n removed,\n changed,\n timestamp: resource.modified[innerId]\n }\n resource.changeHistories[innerId].push(changeRecord)\n resource.changeHistory.push(changeRecord)\n }\n }\n\n // Recompute computed properties if any computed properties depend on changed properties\n if (definition.computed) {\n item = item || DS.get(name, innerId)\n DSUtils.forOwn(definition.computed, function (fn, field) {\n if (DSUtils._o(fn)) {\n return\n }\n let compute = false\n // check if required fields changed\n DSUtils.forEach(fn.deps, function (dep) {\n if (dep in added || dep in removed || dep in changed || !(field in item)) {\n compute = true\n }\n })\n compute = compute || !fn.deps.length\n if (compute) {\n DSUtils.compute.call(item, fn, field)\n }\n })\n }\n\n if (definition.idAttribute in changed) {\n definition.errorFn(`Doh! You just changed the primary key of an object! Your data for the \"${name}\" resource is now in an undefined (probably broken) state.`)\n }\n }\n}\n\n/**\n * A recursive function for injecting data into the store.\n *\n * @param definition Resource definition produced by DS#defineResource\n * @param resource Resource data as internally stored by the data store\n * @param attrs The data to be injected. Will be an object or an array of objects.\n * @param options Optional configuration.\n * @returns The injected data\n * @private\n */\nfunction _inject (definition, resource, attrs, options) {\n let _this = this\n let injected\n\n if (DSUtils._a(attrs)) {\n // have an array of objects, go ahead and inject each one individually and return the resulting array\n injected = []\n for (var i = 0; i < attrs.length; i++) {\n injected.push(_inject.call(_this, definition, resource, attrs[i], options))\n }\n } else {\n // check if \"idAttribute\" is a computed property\n let c = definition.computed\n let idA = definition.idAttribute\n // compute the primary key if necessary\n if (c && c[idA]) {\n let args = []\n DSUtils.forEach(c[idA].deps, function (dep) {\n args.push(attrs[dep])\n })\n attrs[idA] = c[idA][c[idA].length - 1].apply(attrs, args)\n } else if (options.temporary) {\n attrs[idA] = DSUtils.guid()\n }\n\n if (!(idA in attrs)) {\n let error = new DSErrors.R(`${definition.name}.inject: \"attrs\" must contain the property specified by \"idAttribute\"!`)\n options.errorFn(error)\n throw error\n } else {\n try {\n // when injecting object that contain their nested relations, this code\n // will recursively inject them into their proper places in the data store.\n // Magic!\n DSUtils.forEach(definition.relationList, function (def) {\n let relationName = def.relation\n let relationDef = _this.definitions[relationName]\n let toInject = attrs[def.localField]\n if (typeof def.inject === 'function') {\n def.inject(definition, def, attrs)\n } else if (toInject && def.inject !== false) {\n if (!relationDef) {\n throw new DSErrors.R(`${definition.name} relation is defined but the resource is not!`)\n }\n // handle injecting hasMany relations\n if (DSUtils._a(toInject)) {\n let items = []\n DSUtils.forEach(toInject, function (toInjectItem) {\n if (toInjectItem !== _this.store[relationName].index[toInjectItem[relationDef.idAttribute]]) {\n try {\n let injectedItem = relationDef.inject(toInjectItem, options.orig())\n if (def.foreignKey) {\n DSUtils.set(injectedItem, def.foreignKey, attrs[definition.idAttribute])\n }\n items.push(injectedItem)\n } catch (err) {\n options.errorFn(err, `Failed to inject ${def.type} relation: \"${relationName}\"!`)\n }\n }\n })\n } else {\n // handle injecting belongsTo and hasOne relations\n if (toInject !== _this.store[relationName].index[toInject[relationDef.idAttribute]]) {\n try {\n let injected = relationDef.inject(attrs[def.localField], options.orig())\n if (def.foreignKey) {\n DSUtils.set(injected, def.foreignKey, attrs[definition.idAttribute])\n }\n if (def.localKey) {\n DSUtils.set(attrs, def.localKey, DSUtils.get(injected, relationDef.idAttribute))\n }\n } catch (err) {\n options.errorFn(err, `Failed to inject ${def.type} relation: \"${relationName}\"!`)\n }\n }\n }\n }\n })\n\n // primary key of item being injected\n let id = attrs[idA]\n // item being injected\n let item = definition.get(id)\n // 0 if the item is new, otherwise the previous last modified timestamp of the item\n let initialLastModified = item ? resource.modified[id] : 0\n\n // item is new\n if (!item) {\n if (attrs instanceof definition[definition['class']]) {\n item = attrs\n } else {\n item = new definition[definition['class']]()\n if (options.applyDefaultsOnInject && options.defaultValues) {\n DSUtils.deepMixIn(item, DSUtils.copy(options.defaultValues))\n }\n }\n\n if (definition.instanceEvents && typeof item.emit !== 'function') {\n DSUtils.Events(item)\n }\n // remove relation properties from the item, since those relations have been injected by now\n DSUtils.forEach(definition.relationList, function (def) {\n if (typeof def.link === 'boolean' ? def.link : !!definition.linkRelations) {\n delete attrs[def.localField]\n }\n })\n\n // copy remaining properties to the injected item\n DSUtils.deepMixIn(item, attrs)\n\n // add item to collection\n resource.collection.push(item)\n resource.changeHistories[id] = []\n\n // create the observer handler for the data to be injected\n let _react = makeObserverHandler.call(_this, definition, resource)\n\n // If we're in the browser, start observation\n if (definition.watchChanges) {\n resource.observers[id] = new _this.observe.ObjectObserver(item)\n resource.observers[id].open(_react, item)\n }\n\n // index item\n resource.index[id] = item\n // fire observation handler for the first time\n _react.call(item, {}, {}, {}, null, true)\n // save \"previous\" attributes of the injected item, for change diffs later\n resource.previousAttributes[id] = DSUtils.copy(item, null, null, null, definition.relationFields)\n // mark item as temporary if guid has been generated\n if (options.temporary) {\n resource.temporaryItems[id] = true\n }\n } else {\n // item is being re-injected\n // new properties take precedence\n if (options.onConflict === 'merge') {\n DSUtils.deepMixIn(item, attrs)\n DSUtils.forOwn(definition.computed, function (fn, field) {\n DSUtils.compute.call(item, fn, field)\n })\n } else if (options.onConflict === 'replace') {\n DSUtils.forOwn(definition.computed, function (fn, field) {\n DSUtils.compute.call(attrs, fn, field)\n })\n DSUtils.forOwn(item, function (v, k) {\n if (k !== definition.idAttribute) {\n if (!attrs.hasOwnProperty(k)) {\n delete item[k]\n }\n }\n })\n DSUtils.forOwn(attrs, function (v, k) {\n if (k !== definition.idAttribute) {\n item[k] = v\n }\n })\n }\n\n if (definition.resetHistoryOnInject) {\n // clear change history for item\n _this.commit(definition.name, id)\n }\n if (resource.observers[id] && typeof resource.observers[id] === 'function') {\n // force observation callback to be fired if there are any changes to the item and `Object.observe` is not available\n resource.observers[id].deliver()\n }\n }\n // update modified timestamp of item\n resource.modified[id] = initialLastModified && resource.modified[id] === initialLastModified ? DSUtils.updateTimestamp(resource.modified[id]) : resource.modified[id]\n\n // reset expiry tracking for item\n resource.expiresHeap.remove(item)\n let timestamp = new Date().getTime()\n resource.expiresHeap.push({\n item: item,\n timestamp: timestamp,\n expires: definition.maxAge ? timestamp + definition.maxAge : Number.MAX_VALUE\n })\n\n // final injected item\n injected = item\n } catch (err) {\n options.errorFn(err, attrs)\n }\n }\n }\n return injected\n}\n\n/**\n * Inject the given object or array of objects into the data store.\n *\n * @param resourceName The name of the type of resource of the data to be injected.\n * @param attrs Object or array of objects. Objects must contain a primary key.\n * @param options Optional configuration.\n * @param options.notify Whether to emit the \"DS.beforeInject\" and \"DS.afterInject\" events.\n * @returns The injected data.\n */\nmodule.exports = function inject (resourceName, attrs, options) {\n let _this = this\n let definition = _this.definitions[resourceName]\n let resource = _this.store[resourceName]\n let injected\n\n if (!definition) {\n throw new DSErrors.NER(resourceName)\n } else if (!DSUtils._o(attrs) && !DSUtils._a(attrs)) {\n throw new DSErrors.IA(`${resourceName}.inject: \"attrs\" must be an object or an array!`)\n }\n\n options = DSUtils._(definition, options)\n options.logFn('inject', attrs, options)\n\n // lifecycle\n options.beforeInject(options, attrs)\n if (options.notify) {\n definition.emit('DS.beforeInject', definition, attrs)\n }\n\n // start the recursive injection of data\n injected = _inject.call(_this, definition, resource, attrs, options)\n\n // collection was modified\n definition.handleChange(injected)\n\n // lifecycle\n options.afterInject(options, injected)\n if (options.notify) {\n definition.emit('DS.afterInject', definition, injected)\n }\n\n return injected\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/datastore/sync_methods/inject.js\n **/","export default {\n create: require('./create'),\n destroy: require('./destroy'),\n destroyAll: require('./destroyAll'),\n find: require('./find'),\n findAll: require('./findAll'),\n loadRelations: require('./loadRelations'),\n reap: require('./reap'),\n refresh (resourceName, id, options) {\n let _this = this\n let DSUtils = _this.utils\n\n return new DSUtils.Promise(function (resolve, reject) {\n let definition = _this.definitions[resourceName]\n id = DSUtils.resolveId(_this.definitions[resourceName], id)\n if (!definition) {\n reject(new _this.errors.NER(resourceName))\n } else if (!DSUtils._sn(id)) {\n reject(DSUtils._snErr('id'))\n } else {\n options = DSUtils._(definition, options)\n options.bypassCache = true\n options.logFn('refresh', id, options)\n resolve(_this.get(resourceName, id))\n }\n }).then(function (item) { return item ? _this.find(resourceName, id, options) : item })\n .catch(_this.errorFn('refresh', resourceName, id, options))\n },\n refreshAll (resourceName, params, options) {\n let _this = this\n let DSUtils = _this.utils\n let definition = _this.definitions[resourceName]\n params = params || {}\n\n return new DSUtils.Promise(function (resolve, reject) {\n if (!definition) {\n reject(new _this.errors.NER(resourceName))\n } else if (!DSUtils._o(params)) {\n reject(DSUtils._oErr('params'))\n } else {\n options = DSUtils._(definition, options)\n options.bypassCache = true\n options.logFn('refreshAll', params, options)\n resolve(_this.filter(resourceName, params, options))\n }\n }).then(function (existing) {\n options.bypassCache = true\n return _this.findAll(resourceName, params, options).then(function (found) {\n DSUtils.forEach(existing, function (item) {\n if (found.indexOf(item) === -1) {\n definition.eject(item)\n }\n })\n return found\n })\n }).catch(_this.errorFn('refreshAll', resourceName, params, options))\n },\n save: require('./save'),\n update: require('./update'),\n updateAll: require('./updateAll')\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/datastore/async_methods/index.js\n **/","/**\n * Using an adapter, create a new item.\n *\n * Generally a primary key will NOT be provided in the properties hash,\n * because the adapter's persistence layer should be generating one.\n *\n * @param resourceName The name of the type of resource of the new item.\n * @param attrs Hash of properties with which to create the new item.\n * @param options Optional configuration.\n * @param options.cacheResponse Whether the newly created item as returned by the adapter should be injected into the data store.\n * @param options.upsert If the properties hash contains a primary key, attempt to call DS#update instead.\n * @param options.notify Whether to emit the \"DS.beforeCreate\" and \"DS.afterCreate\" events.\n * @param options.beforeValidate Lifecycle hook.\n * @param options.validate Lifecycle hook.\n * @param options.afterValidate Lifecycle hook.\n * @param options.beforeCreate Lifecycle hook.\n * @param options.afterCreate Lifecycle hook.\n */\nmodule.exports = function create (resourceName, attrs, options) {\n let _this = this\n let DSUtils = _this.utils\n let definition = _this.definitions[resourceName]\n let resource = _this.store[resourceName]\n let adapter\n\n options = options || {}\n attrs = attrs || {}\n\n let rejectionError\n if (!definition) {\n rejectionError = new _this.errors.NER(resourceName)\n } else if (!DSUtils._o(attrs)) {\n rejectionError = DSUtils._oErr('attrs')\n } else {\n options = DSUtils._(definition, options)\n if (options.upsert && DSUtils._sn(attrs[definition.idAttribute]) && !resource.temporaryItems[attrs[definition.idAttribute]]) {\n return _this.update(resourceName, attrs[definition.idAttribute], attrs, options)\n }\n options.logFn('create', attrs, options)\n }\n\n return new DSUtils.Promise(function (resolve, reject) {\n if (rejectionError) {\n reject(rejectionError)\n } else {\n resolve(attrs)\n }\n })\n // start lifecycle\n .then(function (attrs) { return options.beforeValidate.call(attrs, options, attrs) })\n .then(function (attrs) { return options.validate.call(attrs, options, attrs) })\n .then(function (attrs) { return options.afterValidate.call(attrs, options, attrs) })\n .then(function (attrs) { return options.beforeCreate.call(attrs, options, attrs) })\n .then(function (attrs) {\n if (options.notify) {\n definition.emit('DS.beforeCreate', definition, attrs)\n }\n adapter = _this.getAdapterName(options)\n return _this.adapters[adapter].create(definition, DSUtils.omit(attrs, options.omit), options)\n })\n .then(function (attrs) { return options.afterCreate.call(attrs, options, attrs) })\n .then(function (attrs) {\n if (options.notify) {\n definition.emit('DS.afterCreate', definition, attrs)\n }\n if (options.cacheResponse) {\n // injected created intem into the store\n let created = _this.inject(definition.name, attrs, options.orig())\n let id = created[definition.idAttribute]\n // mark item's `find` query as completed, so a subsequent `find` call for this item will resolve immediately\n let resource = _this.store[resourceName]\n resource.completedQueries[id] = new Date().getTime()\n resource.saved[id] = DSUtils.updateTimestamp(resource.saved[id])\n return created\n } else {\n // just return an un-injected instance\n return _this.createInstance(resourceName, attrs, options)\n }\n })\n .then(function (item) {\n return DSUtils.respond(item, {adapter}, options)\n })['catch'](_this.errorFn('create', resourceName, attrs, options))\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/datastore/async_methods/create.js\n **/","/**\n * Using an adapter, destroy an item.\n *\n * @param resourceName The name of the type of resource of the item to destroy.\n * @param id The primary key of the item to destroy.\n * @param options Optional configuration.\n * @param options.eagerEject Whether to eject the item from the store before the adapter operation completes, re-injecting if the adapter operation fails.\n * @param options.notify Whether to emit the \"DS.beforeDestroy\" and \"DS.afterDestroy\" events.\n * @param options.beforeDestroy Lifecycle hook.\n * @param options.afterDestroy Lifecycle hook.\n * @returns The primary key of the destroyed item.\n */\nmodule.exports = function destroy (resourceName, id, options) {\n let _this = this\n let DSUtils = _this.utils\n let definition = _this.definitions[resourceName]\n let item, adapter\n\n return new DSUtils.Promise(function (resolve, reject) {\n id = DSUtils.resolveId(definition, id)\n if (!definition) {\n reject(new _this.errors.NER(resourceName))\n } else if (!DSUtils._sn(id)) {\n reject(DSUtils._snErr('id'))\n } else {\n // check if the item is in the store\n item = definition.get(id) || { id: id }\n options = DSUtils._(definition, options)\n options.logFn('destroy', id, options)\n resolve(item)\n }\n })\n // start lifecycle\n .then(function (attrs) { return options.beforeDestroy.call(attrs, options, attrs) })\n .then(function (attrs) {\n if (options.notify) {\n definition.emit('DS.beforeDestroy', definition, attrs)\n }\n // don't wait for the adapter, remove the item from the store\n if (options.eagerEject) {\n definition.eject(id)\n }\n adapter = definition.getAdapter(options)\n return adapter.destroy(definition, id, options)\n })\n .then(function () { return options.afterDestroy.call(item, options, item) })\n .then(function (item) {\n if (options.notify) {\n definition.emit('DS.afterDestroy', definition, item)\n }\n // make sure the item is removed from the store\n definition.eject(id)\n return DSUtils.respond(id, {adapter}, options)\n })['catch'](function (err) {\n // rollback by re-injecting the item into the store\n if (options && options.eagerEject && item) {\n definition.inject(item, { notify: false })\n }\n return _this.errorFn('destroy', resourceName, id, options)(err)\n })\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/datastore/async_methods/destroy.js\n **/","/**\n * Using an adapter, destroy an item.\n *\n * @param resourceName The name of the type of resource of the item to destroy.\n * @param params The criteria by which to filter items to destroy. See http://www.js-data.io/docs/query-syntax\n * @param options Optional configuration.\n * @param options.eagerEject Whether to eject the items from the store before the adapter operation completes, re-injecting if the adapter operation fails.\n * @param options.notify Whether to emit the \"DS.beforeDestroy\" and \"DS.afterDestroy\" events.\n * @param options.beforeDestroy Lifecycle hook.\n * @param options.afterDestroy Lifecycle hook.\n * @returns The ejected items, if any.\n */\nmodule.exports = function destroyAll (resourceName, params, options) {\n let _this = this\n let DSUtils = _this.utils\n let definition = _this.definitions[resourceName]\n let ejected, toEject, adapter\n\n params = params || {}\n\n return new DSUtils.Promise(function (resolve, reject) {\n if (!definition) {\n reject(new _this.errors.NER(resourceName))\n } else if (!DSUtils._o(params)) {\n reject(DSUtils._oErr('attrs'))\n } else {\n options = DSUtils._(definition, options)\n options.logFn('destroyAll', params, options)\n DSUtils.applyScope(definition, params, options)\n resolve()\n }\n }).then(function () {\n // find items that are to be ejected from the store\n toEject = definition.defaultFilter.call(_this, resourceName, params)\n return options.beforeDestroy(options, toEject)\n }).then(function () {\n if (options.notify) {\n definition.emit('DS.beforeDestroy', definition, toEject)\n }\n // don't wait for the adapter, remove the items from the store\n if (options.eagerEject) {\n ejected = definition.ejectAll(params)\n }\n adapter = definition.getAdapterName(options)\n return _this.adapters[adapter].destroyAll(definition, params, options)\n }).then(function () {\n return options.afterDestroy(options, toEject)\n }).then(function () {\n if (options.notify) {\n definition.emit('DS.afterDestroy', definition, toEject)\n }\n // make sure items are removed from the store\n return ejected || definition.ejectAll(params)\n }).then(function (items) {\n return DSUtils.respond(items, {adapter}, options)\n })['catch'](function (err) {\n // rollback by re-injecting the items into the store\n if (options && options.eagerEject && ejected) {\n definition.inject(ejected, {notify: false})\n }\n return _this.errorFn('destroyAll', resourceName, params, options)(err)\n })\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/datastore/async_methods/destroyAll.js\n **/","/* jshint -W082 */\n\n/**\n * Using an adapter, retrieve a single item.\n *\n * @param resourceName The of the type of resource of the item to retrieve.\n * @param id The primary key of the item to retrieve.\n * @param options Optional configuration.\n * @param options.bypassCache Whether to ignore any cached item and force the retrieval through the adapter.\n * @param options.cacheResponse Whether to inject the found item into the data store.\n * @param options.strictCache Whether to only consider items to be \"cached\" if they were injected into the store as the result of `find` or `findAll`.\n * @param options.strategy The retrieval strategy to use.\n * @param options.findStrategy The retrieval strategy to use. Overrides \"strategy\".\n * @param options.fallbackAdapters Array of names of adapters to use if using \"fallback\" strategy.\n * @param options.findFallbackAdapters Array of names of adapters to use if using \"fallback\" strategy. Overrides \"fallbackAdapters\".\n * @returns The item.\n */\nmodule.exports = function find (resourceName, id, options) {\n let _this = this\n let DSUtils = _this.utils\n let definition = _this.definitions[resourceName]\n let resource = _this.store[resourceName]\n let adapter\n\n return new DSUtils.Promise(function (resolve, reject) {\n if (!definition) {\n reject(new _this.errors.NER(resourceName))\n } else if (!DSUtils._sn(id)) {\n reject(DSUtils._snErr('id'))\n } else {\n options = DSUtils._(definition, options)\n options.logFn('find', id, options)\n\n if (options.params) {\n options.params = DSUtils.copy(options.params)\n }\n\n if (options.bypassCache || !options.cacheResponse) {\n delete resource.completedQueries[id]\n }\n\n let expired = options.maxAge && id in resource.completedQueries &&\n resource.completedQueries[id] + options.maxAge < new Date().getTime()\n\n if ((!options.findStrictCache || id in resource.completedQueries) && definition.get(id) &&\n !options.bypassCache && !expired) {\n // resolve immediately with the cached item\n resolve(definition.get(id))\n } else {\n // we're going to delegate to the adapter next\n delete resource.completedQueries[id]\n resolve()\n }\n }\n }).then(function (item) {\n if (!item) {\n const usePendingFind = DSUtils.isFunction(options.usePendingFind) ? options.usePendingFind.call(this, resourceName, id, options) : options.usePendingFind\n if (!(id in resource.pendingQueries) && usePendingFind) {\n let promise\n let strategy = options.findStrategy || options.strategy\n\n // try subsequent adapters if the preceeding one fails\n if (strategy === 'fallback') {\n var makeFallbackCall = function (index) {\n adapter = definition.getAdapterName((options.findFallbackAdapters || options.fallbackAdapters)[index])\n return _this.adapters[adapter].find(definition, id, options)['catch'](err => {\n index++\n if (index < options.fallbackAdapters.length) {\n return makeFallbackCall(index)\n } else {\n return DSUtils.Promise.reject(err)\n }\n })\n }\n\n promise = makeFallbackCall(0)\n } else {\n adapter = definition.getAdapterName(options)\n // just make a single attempt\n promise = _this.adapters[adapter].find(definition, id, options)\n }\n\n resource.pendingQueries[id] = promise\n .then(function (data) { return options.afterFind.call(data, options, data) })\n .then(function (data) {\n // Query is no longer pending\n delete resource.pendingQueries[id]\n if (options.cacheResponse) {\n // inject the item into the data store\n let injected = definition.inject(data, options.orig())\n // mark the item as \"cached\"\n resource.completedQueries[id] = new Date().getTime()\n resource.saved[id] = DSUtils.updateTimestamp(resource.saved[id])\n return injected\n } else {\n // just return an un-injected instance\n return definition.createInstance(data, options.orig())\n }\n })\n }\n return resource.pendingQueries[id]\n } else {\n // resolve immediately with the item\n return item\n }\n }).then(function (item) {\n return DSUtils.respond(item, {adapter}, options)\n })['catch'](function (err) {\n if (resource) {\n delete resource.pendingQueries[id]\n }\n return _this.errorFn('find', resourceName, id, options)(err)\n })\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/datastore/async_methods/find.js\n **/","/* jshint -W082 */\nfunction processResults (data, resourceName, queryHash, options) {\n let _this = this\n let DSUtils = _this.utils\n let definition = _this.definitions[resourceName]\n let resource = _this.store[resourceName]\n let idAttribute = definition.idAttribute\n let date = new Date().getTime()\n\n data = data || []\n\n // Query is no longer pending\n delete resource.pendingQueries[queryHash]\n resource.completedQueries[queryHash] = date\n\n // Merge the new values into the cache\n let injected = definition.inject(data, options.orig())\n\n // Make sure each object is added to completedQueries\n if (DSUtils._a(injected)) {\n DSUtils.forEach(injected, function (item) {\n if (item) {\n let id = item[idAttribute]\n if (id) {\n resource.completedQueries[id] = date\n resource.saved[id] = DSUtils.updateTimestamp(resource.saved[id])\n }\n }\n })\n } else {\n options.errorFn('response is expected to be an array!')\n resource.completedQueries[injected[idAttribute]] = date\n }\n\n return injected\n}\n\n/**\n * Using an adapter, retrieve a collection of items.\n *\n * @param resourceName The name of the type of resource of the items to retrieve.\n * @param params The criteria by which to filter items to retrieve. See http://www.js-data.io/docs/query-syntax\n * @param options Optional configuration.\n * @param options.bypassCache Whether to ignore any cached query for these items and force the retrieval through the adapter.\n * @param options.cacheResponse Whether to inject the found items into the data store.\n * @returns The items.\n */\nmodule.exports = function findAll (resourceName, params, options) {\n let _this = this\n let DSUtils = _this.utils\n let definition = _this.definitions[resourceName]\n let resource = _this.store[resourceName]\n let queryHash, adapter\n\n return new DSUtils.Promise(function (resolve, reject) {\n params = params || {}\n\n if (!_this.definitions[resourceName]) {\n reject(new _this.errors.NER(resourceName))\n } else if (!DSUtils._o(params)) {\n reject(DSUtils._oErr('params'))\n } else {\n options = DSUtils._(definition, options)\n queryHash = DSUtils.toJson(params)\n options.logFn('findAll', params, options)\n\n if (options.params) {\n options.params = DSUtils.copy(options.params)\n }\n\n DSUtils.applyScope(definition, params, options)\n\n // force a new request\n if (options.bypassCache || !options.cacheResponse) {\n delete resource.completedQueries[queryHash]\n delete resource.queryData[queryHash]\n }\n\n let expired = options.maxAge && queryHash in resource.completedQueries &&\n resource.completedQueries[queryHash] + options.maxAge < new Date().getTime()\n\n if (queryHash in resource.completedQueries && !expired) {\n if (options.useFilter) {\n if (options.localKeys) {\n resolve(definition.getAll(options.localKeys, options.orig()))\n } else {\n // resolve immediately by filtering data from the data store\n resolve(definition.filter(params, options.orig()))\n }\n } else {\n // resolve immediately by returning the cached array from the previously made query\n resolve(resource.queryData[queryHash])\n }\n } else {\n resolve()\n }\n }\n }).then(function (items) {\n if (!items) {\n const usePendingFindAll = DSUtils.isFunction(options.usePendingFindAll) ? options.usePendingFindAll.call(this, resourceName, params, options) : options.usePendingFindAll\n if (!(queryHash in resource.pendingQueries) && usePendingFindAll) {\n let promise\n let strategy = options.findAllStrategy || options.strategy\n\n // try subsequent adapters if the preceeding one fails\n if (strategy === 'fallback') {\n var makeFallbackCall = function (index) {\n adapter = definition.getAdapterName((options.findAllFallbackAdapters || options.fallbackAdapters)[index])\n return _this.adapters[adapter].findAll(definition, params, options)['catch'](function (err) {\n index++\n if (index < options.fallbackAdapters.length) {\n return makeFallbackCall(index)\n } else {\n return DSUtils.Promise.reject(err)\n }\n })\n }\n\n promise = makeFallbackCall(0)\n } else {\n adapter = definition.getAdapterName(options)\n // just make a single attempt\n promise = _this.adapters[adapter].findAll(definition, params, options)\n }\n\n resource.pendingQueries[queryHash] = promise\n .then(function (data) { return options.afterFindAll.call(data, options, data) })\n .then(function (data) {\n // Query is no longer pending\n delete resource.pendingQueries[queryHash]\n if (options.cacheResponse) {\n // inject the items into the data store\n resource.queryData[queryHash] = processResults.call(_this, data, resourceName, queryHash, options)\n resource.queryData[queryHash].$$injected = true\n return resource.queryData[queryHash]\n } else {\n DSUtils.forEach(data, function (item, i) {\n data[i] = definition.createInstance(item, options.orig())\n })\n return data\n }\n })\n }\n\n return resource.pendingQueries[queryHash]\n } else {\n // resolve immediately with the items\n return items\n }\n }).then(function (items) {\n return DSUtils.respond(items, {adapter}, options)\n })['catch'](function (err) {\n if (resource) {\n delete resource.pendingQueries[queryHash]\n }\n return _this.errorFn('findAll', resourceName, params, options)(err)\n })\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/datastore/async_methods/findAll.js\n **/","/**\n * Load the specified relations for the given instance.\n *\n * @param resourceName The name of the type of resource of the instance for which to load relations.\n * @param instance The instance or the primary key of the instance.\n * @param relations An array of the relations to load.\n * @param options Optional configuration.\n * @returns The instance, now with its relations loaded.\n */\nmodule.exports = function loadRelations (resourceName, instance, relations, options) {\n let _this = this\n let {utils: DSUtils, errors: DSErrors} = _this\n let definition = _this.definitions[resourceName]\n let _options\n\n return new DSUtils.Promise(function (resolve, reject) {\n if (DSUtils._sn(instance)) {\n instance = definition.get(instance)\n }\n\n if (DSUtils._s(relations)) {\n relations = [relations]\n }\n\n relations = relations || []\n\n if (!definition) {\n reject(new DSErrors.NER(resourceName))\n } else if (!DSUtils._o(instance)) {\n reject(new DSErrors.IA('\"instance(id)\" must be a string, number or object!'))\n } else if (!DSUtils._a(relations)) {\n reject(new DSErrors.IA('\"relations\" must be a string or an array!'))\n } else {\n _options = DSUtils._(definition, options)\n _options.logFn('loadRelations', instance, relations, _options)\n\n let tasks = []\n\n DSUtils.forEach(definition.relationList, function (def) {\n let relationName = def.relation\n let relationDef = definition.getResource(relationName)\n let __options = DSUtils._(relationDef, options)\n\n // relations can be loaded based on resource name or field name\n if (!relations.length || DSUtils.contains(relations, relationName) || DSUtils.contains(relations, def.localField)) {\n let task\n let params = {}\n if (__options.allowSimpleWhere) {\n params[def.foreignKey] = instance[definition.idAttribute]\n } else {\n params.where = {}\n params.where[def.foreignKey] = {\n '==': instance[definition.idAttribute]\n }\n }\n\n let orig = __options.orig()\n let defKey = def.localKey ? DSUtils.get(instance, def.localKey) : null\n let hasDefKey = !!(defKey || defKey === 0)\n\n if (typeof def.load === 'function') {\n task = def.load(definition, def, instance, orig)\n } else {\n if (def.type === 'hasMany') {\n if (def.localKeys) {\n delete params[def.foreignKey]\n let keys = DSUtils.get(instance, def.localKeys) || []\n keys = DSUtils._a(keys) ? keys : DSUtils.keys(keys)\n params.where = {\n [relationDef.idAttribute]: {\n 'in': keys\n }\n }\n orig.localKeys = keys\n } else if (def.foreignKeys) {\n delete params[def.foreignKey]\n params.where = {\n [def.foreignKeys]: {\n contains: instance[definition.idAttribute]\n }\n }\n }\n task = relationDef.findAll(params, orig)\n } else if (def.type === 'hasOne') {\n if (def.localKey && hasDefKey) {\n task = relationDef.find(defKey, orig)\n } else if (def.foreignKey) {\n task = relationDef.findAll(params, orig).then(function (hasOnes) { return hasOnes.length ? hasOnes[0] : null })\n }\n } else if (hasDefKey) {\n task = relationDef.find(defKey, orig)\n }\n }\n\n if (task) {\n if (!_options.linkRelations) {\n task = task.then(function (data) {\n instance[def.localField] = data\n })\n }\n tasks.push(task)\n }\n }\n })\n\n resolve(tasks)\n }\n }).then(function (tasks) { return DSUtils.Promise.all(tasks) })\n .then(function () { return _options.afterLoadRelations.call(instance, _options, instance) })\n .catch(_this.errorFn('loadRelations', resourceName, instance, relations, options))\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/datastore/async_methods/loadRelations.js\n **/","/**\n * Find expired items of the specified resource type and perform the configured action.\n *\n * @param resourceName The name of the type of resource of the items to reap.\n * @param options Optional configuration.\n * @returns The reaped items.\n */\nmodule.exports = function reap (resourceName, options) {\n let _this = this\n var DSUtils = _this.utils\n let definition = _this.definitions[resourceName]\n let resource = _this.store[resourceName]\n\n return new DSUtils.Promise(function (resolve, reject) {\n if (!definition) {\n reject(new _this.errors.NER(resourceName))\n } else {\n options = DSUtils._(definition, options)\n if (!options.hasOwnProperty('notify')) {\n options.notify = false\n }\n options.logFn('reap', options)\n let items = []\n let now = new Date().getTime()\n let expiredItem\n\n // find the expired items\n while ((expiredItem = resource.expiresHeap.peek()) && expiredItem.expires < now) {\n items.push(expiredItem.item)\n delete expiredItem.item\n resource.expiresHeap.pop()\n }\n resolve(items)\n }\n }).then(function (items) {\n // only hit lifecycle if there are items\n if (items.length) {\n definition.beforeReap(options, items)\n if (options.notify) {\n definition.emit('DS.beforeReap', definition, items)\n }\n }\n\n if (options.reapAction === 'inject') {\n let timestamp = new Date().getTime()\n DSUtils.forEach(items, function (item) {\n resource.expiresHeap.push({\n item: item,\n timestamp: timestamp,\n expires: definition.maxAge ? timestamp + definition.maxAge : Number.MAX_VALUE\n })\n })\n } else if (options.reapAction === 'eject') {\n DSUtils.forEach(items, function (item) {\n definition.eject(item[definition.idAttribute])\n })\n } else if (options.reapAction === 'refresh') {\n let tasks = []\n DSUtils.forEach(items, function (item) {\n tasks.push(definition.refresh(item[definition.idAttribute]))\n })\n return DSUtils.Promise.all(tasks)\n }\n return items\n }).then(function (items) {\n // only hit lifecycle if there are items\n if (items.length) {\n definition.afterReap(options, items)\n if (options.notify) {\n definition.emit('DS.afterReap', definition, items)\n }\n }\n return items\n }).catch(_this.errorFn('reap', resourceName, options))\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/datastore/async_methods/reap.js\n **/","/**\n * Save a single item in its present state.\n *\n * @param resourceName The name of the type of resource of the item.\n * @param id The primary key of the item.\n * @param options Optional congifuration.\n * @returns The item, now saved.\n */\nmodule.exports = function save (resourceName, id, options) {\n let _this = this\n let {utils: DSUtils, errors: DSErrors} = _this\n let definition = _this.definitions[resourceName]\n let resource = _this.store[resourceName]\n let item, noChanges, adapter\n\n return new DSUtils.Promise(function (resolve, reject) {\n id = DSUtils.resolveId(definition, id)\n if (!definition) {\n reject(new DSErrors.NER(resourceName))\n } else if (!DSUtils._sn(id)) {\n reject(DSUtils._snErr('id'))\n } else if (!definition.get(id)) {\n reject(new DSErrors.R(`id \"${id}\" not found in cache!`))\n } else {\n item = definition.get(id)\n options = DSUtils._(definition, options)\n options.logFn('save', id, options)\n resolve(item)\n }\n })\n // start lifecycle\n .then(function (attrs) { return options.beforeValidate.call(attrs, options, attrs) })\n .then(function (attrs) { return options.validate.call(attrs, options, attrs) })\n .then(function (attrs) { return options.afterValidate.call(attrs, options, attrs) })\n .then(function (attrs) { return options.beforeUpdate.call(attrs, options, attrs) })\n .then(function (attrs) {\n if (options.notify) {\n definition.emit('DS.beforeUpdate', definition, attrs)\n }\n // only send changed properties to the adapter\n if (options.changesOnly) {\n if (resource.observers[id] && typeof resource.observers[id] === 'function') {\n resource.observers[id].deliver()\n }\n let toKeep = []\n let changes = definition.changes(id)\n\n for (var key in changes.added) {\n toKeep.push(key)\n }\n for (key in changes.changed) {\n toKeep.push(key)\n }\n DSUtils.forEach(options.always, property => {\n toKeep.push(property)\n })\n changes = DSUtils.pick(attrs, toKeep)\n // no changes? no save\n if (DSUtils.isEmpty(changes)) {\n // no changes, return\n options.logFn('save - no changes', id, options)\n noChanges = true\n return attrs\n } else {\n attrs = changes\n }\n }\n adapter = definition.getAdapterName(options)\n return _this.adapters[adapter].update(definition, id, DSUtils.omit(attrs, options.omit), options)\n })\n .then(function (data) { return options.afterUpdate.call(data, options, data) })\n .then(function (attrs) {\n if (options.notify) {\n definition.emit('DS.afterUpdate', definition, attrs)\n }\n if (noChanges) {\n // no changes, just return\n return attrs\n } else if (options.cacheResponse) {\n // inject the reponse into the store, updating the item\n let injected = definition.inject(attrs, options.orig())\n // mark the item as \"saved\"\n resource.saved[id] = DSUtils.updateTimestamp(resource.saved[id])\n if (!definition.resetHistoryOnInject) {\n resource.previousAttributes[id] = DSUtils.copy(injected, null, null, null, definition.relationFields)\n }\n return injected\n } else {\n // just return an instance\n return definition.createInstance(attrs, options.orig())\n }\n })\n .then(function (item) {\n return DSUtils.respond(item, {adapter}, options)\n })\n .catch(_this.errorFn('save', resourceName, id, options))\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/datastore/async_methods/save.js\n **/","/**\n * Update a single item using the supplied properties hash.\n *\n * @param resourceName The name of the type of resource of the item to update.\n * @param id The primary key of the item to update.\n * @param attrs The attributes with which to update the item.\n * @param options Optional configuration.\n * @returns The item, now updated.\n */\nmodule.exports = function update (resourceName, id, attrs, options) {\n let _this = this\n let {utils: DSUtils, errors: DSErrors} = _this\n let definition = _this.definitions[resourceName]\n let adapter\n\n return new DSUtils.Promise(function (resolve, reject) {\n id = DSUtils.resolveId(definition, id)\n if (!definition) {\n reject(new DSErrors.NER(resourceName))\n } else if (!DSUtils._sn(id)) {\n reject(DSUtils._snErr('id'))\n } else {\n options = DSUtils._(definition, options)\n options.logFn('update', id, attrs, options)\n resolve(attrs)\n }\n })\n // start lifecycle\n .then(function (attrs) { return options.beforeValidate.call(attrs, options, attrs) })\n .then(function (attrs) { return options.validate.call(attrs, options, attrs) })\n .then(function (attrs) { return options.afterValidate.call(attrs, options, attrs) })\n .then(function (attrs) { return options.beforeUpdate.call(attrs, options, attrs) })\n .then(function (attrs) {\n if (options.notify) {\n definition.emit('DS.beforeUpdate', definition, attrs)\n }\n adapter = definition.getAdapterName(options)\n return _this.adapters[adapter].update(definition, id, DSUtils.omit(attrs, options.omit), options)\n })\n .then(function (data) { return options.afterUpdate.call(data, options, data) })\n .then(function (attrs) {\n if (options.notify) {\n definition.emit('DS.afterUpdate', definition, attrs)\n }\n if (options.cacheResponse) {\n // inject the updated item into the store\n let injected = definition.inject(attrs, options.orig())\n let resource = _this.store[resourceName]\n let id = injected[definition.idAttribute]\n // mark the item as \"saved\"\n resource.saved[id] = DSUtils.updateTimestamp(resource.saved[id])\n if (!definition.resetHistoryOnInject) {\n resource.previousAttributes[id] = DSUtils.copy(injected, null, null, null, definition.relationFields)\n }\n return injected\n } else {\n // just return an instance\n return definition.createInstance(attrs, options.orig())\n }\n })\n .then(function (item) {\n return DSUtils.respond(item, {adapter}, options)\n })\n .catch(_this.errorFn('update', resourceName, id, attrs, options))\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/datastore/async_methods/update.js\n **/","/**\n * Update a collection of items using the supplied properties hash.\n *\n * @param resourceName The name of the type of resource of the items to update.\n * @param attrs The attributes with which to update the item.\n * @param params The criteria by which to select items to update. See http://www.js-data.io/docs/query-syntax\n * @param options Optional configuration.\n * @returns The updated items.\n */\nmodule.exports = function updateAll (resourceName, attrs, params, options) {\n let _this = this\n let {utils: DSUtils, errors: DSErrors} = _this\n let definition = _this.definitions[resourceName]\n let adapter\n\n return new DSUtils.Promise(function (resolve, reject) {\n if (!definition) {\n reject(new DSErrors.NER(resourceName))\n } else {\n options = DSUtils._(definition, options)\n options.logFn('updateAll', attrs, params, options)\n DSUtils.applyScope(definition, params, options)\n resolve(attrs)\n }\n })\n // start lifecycle\n .then(function (attrs) { return options.beforeValidate.call(attrs, options, attrs) })\n .then(function (attrs) { return options.validate.call(attrs, options, attrs) })\n .then(function (attrs) { return options.afterValidate.call(attrs, options, attrs) })\n .then(function (attrs) { return options.beforeUpdate.call(attrs, options, attrs) })\n .then(function (attrs) {\n if (options.notify) {\n definition.emit('DS.beforeUpdate', definition, attrs)\n }\n adapter = definition.getAdapterName(options)\n return _this.adapters[adapter].updateAll(definition, DSUtils.omit(attrs, options.omit), params, options)\n })\n .then(function (data) { return options.afterUpdate.call(data, options, data) })\n .then(function (data) {\n if (options.notify) {\n definition.emit('DS.afterUpdate', definition, attrs)\n }\n let origOptions = options.orig()\n if (options.cacheResponse) {\n // inject the updated items into the store\n let injected = definition.inject(data, origOptions)\n let resource = _this.store[resourceName]\n // mark the items as \"saved\"\n DSUtils.forEach(injected, i => {\n let id = i[definition.idAttribute]\n resource.saved[id] = DSUtils.updateTimestamp(resource.saved[id])\n if (!definition.resetHistoryOnInject) {\n resource.previousAttributes[id] = DSUtils.copy(i, null, null, null, definition.relationFields)\n }\n })\n return injected\n } else {\n // just return instances\n let instances = []\n DSUtils.forEach(data, item => {\n instances.push(definition.createInstance(item, origOptions))\n })\n return instances\n }\n })\n .then(function (items) {\n return DSUtils.respond(items, {adapter}, options)\n })\n .catch(_this.errorFn('updateAll', resourceName, attrs, params, options))\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/datastore/async_methods/updateAll.js\n **/"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap aacbe202dc73a84af267","webpack:///./src/index.js","webpack:///./src/datastore/index.js","webpack:///./src/utils.js","webpack:///./src/errors.js","webpack:///./~/yabh/dist/yabh.js","webpack:///./~/mout/array/forEach.js","webpack:///./~/mout/array/slice.js","webpack:///./~/mout/object/forOwn.js","webpack:///./~/mout/object/hasOwn.js","webpack:///./~/mout/object/forIn.js","webpack:///./~/mout/array/contains.js","webpack:///./~/mout/array/indexOf.js","webpack:///./~/mout/object/deepMixIn.js","webpack:///./~/mout/lang/isPlainObject.js","webpack:///./~/mout/string/pascalCase.js","webpack:///./~/mout/lang/toString.js","webpack:///./~/mout/string/camelCase.js","webpack:///./~/mout/string/replaceAccents.js","webpack:///./~/mout/string/removeNonWord.js","webpack:///./~/mout/string/upperCase.js","webpack:///./~/mout/string/lowerCase.js","webpack:///./~/mout/array/remove.js","webpack:///./~/mout/object/pick.js","webpack:///./~/mout/object/keys.js","webpack:///./~/mout/array/sort.js","webpack:///./~/mout/object/get.js","webpack:///./~/mout/lang/isPrimitive.js","webpack:///./~/mout/object/set.js","webpack:///./~/mout/object/namespace.js","webpack:///./lib/observe-js/observe.js","webpack:///./~/mout/random/guid.js","webpack:///./~/mout/random/randHex.js","webpack:///./~/mout/random/choice.js","webpack:///./~/mout/random/randInt.js","webpack:///./~/mout/number/MIN_INT.js","webpack:///./~/mout/number/MAX_INT.js","webpack:///./~/mout/random/rand.js","webpack:///./~/mout/random/random.js","webpack:///./~/mout/lang/isArray.js","webpack:///./~/mout/lang/isKind.js","webpack:///./~/mout/lang/kindOf.js","webpack:///./src/datastore/sync_methods/index.js","webpack:///./src/datastore/sync_methods/defineResource.js","webpack:///./src/datastore/sync_methods/eject.js","webpack:///./src/datastore/sync_methods/ejectAll.js","webpack:///./src/datastore/sync_methods/filter.js","webpack:///./src/datastore/sync_methods/inject.js","webpack:///./src/datastore/async_methods/index.js","webpack:///./src/datastore/async_methods/create.js","webpack:///./src/datastore/async_methods/destroy.js","webpack:///./src/datastore/async_methods/destroyAll.js","webpack:///./src/datastore/async_methods/find.js","webpack:///./src/datastore/async_methods/findAll.js","webpack:///./src/datastore/async_methods/loadRelations.js","webpack:///./src/datastore/async_methods/reap.js","webpack:///./src/datastore/async_methods/save.js","webpack:///./src/datastore/async_methods/update.js","webpack:///./src/datastore/async_methods/updateAll.js"],"names":["module","exports","DS","DSUtils","DSErrors","createStore","options","version","full","major","parseInt","minor","patch","alpha","beta","lifecycleNoopCb","resource","attrs","cb","lifecycleNoop","compare","orderBy","index","a","b","def","cA","get","cB","_s","upperCase","length","Defaults","error","Error","err","name","defaultsPrototype","prototype","actions","afterCreate","afterCreateCollection","afterCreateInstance","afterDestroy","afterEject","afterFind","afterFindAll","afterInject","afterLoadRelations","afterReap","afterUpdate","afterValidate","allowSimpleWhere","applyDefaultsOnInject","basePath","beforeCreate","beforeCreateCollection","beforeCreateInstance","beforeDestroy","beforeEject","beforeInject","beforeReap","beforeUpdate","beforeValidate","bypassCache","cacheResponse","w","csp","clearEmptyQueries","computed","defaultAdapter","debug","defaultValues","eagerEject","eagerInject","endpoint","console","c","errorHandler","Promise","reject","fallbackAdapters","findStrictCache","idAttribute","ignoredChanges","instanceEvents","keepChangeHistory","linkRelations","log","d","e","info","logFn","_this","maxAge","methods","notify","omit","onConflict","reapAction","reapInterval","relationsEnumerable","resetHistoryOnInject","returnMeta","scopes","strategy","upsert","useClass","useFilter","usePendingFind","usePendingFindAll","validate","watchChanges","escapeRegExp","percentRegExp","underscoreRegExp","escape","pattern","replace","like","flags","RegExp","defaultFilter","collection","resourceName","params","definition","definitions","idA","store","filtered","where","reserved","skip","offset","limit","sort","_o","forOwn","value","key","isEmpty","filter","first","keep","excludeTemporary","temporaryItems","clause","field","term","op","expr","isOr","val","substr","intersection","indexOf","contains","exec","undefined","_a","forEach","i","IA","toJson","actual","expected","_n","slice","Math","min","adapters","defaults","observe","v","k","concat","P","spread","then","arr","apply","Events","errorIfNotExist","adapter","getAdapterName","Adapter","isFunction","default","instance","NER","class","ejected","ejectAll","completedQueries","queryData","args","defaultHandler","dsPrototype","shorthand","getAdapter","registerAdapter","errors","utils","addMethods","target","obj","before","fn","orig","BinaryHeap","require","deepMixIn","pascalCase","remove","pick","_keys","set","guid","File","objectProto","Object","toString","window","_isArray","call","isArray","Array","isRegExp","isString","isObject","isDate","isNumber","type","isStringOrNumber","isStringOrNumberErr","isObjectErr","isArrayErr","result","array1","array2","item","push","array","thisObj","results","events","defineProperties","on","func","ctx","f","off","listeners","splice","emit","shift","toPromisify","isBlacklisted","copy","source","destination","stackSource","stackDest","blacklist","Date","getTime","match","lastIndex","create","getPrototypeOf","hasOwnProperty","equals","o1","o2","t1","t2","keySet","charAt","resolveId","idOrInstance","resolveItem","isValidString","join","items","separator","makePath","_","parent","constructor","promisify","O","Options","self","_sn","_snErr","_oErr","_aErr","applyScope","scope","_params","unshift","_scope","scopeDef","compute","deps","dep","diffObjectFromOldObject","fillIn","fromJson","json","JSON","parse","keys","bl","toRemove","resolve","promise","stringify","updateTimestamp","timestamp","newTimestamp","now","removeCircular","object","rmCirc","nu","Boolean","Number","String","cur","respond","response","meta","applyRelationGettersToTarget","relationList","relationName","relation","localField","localKey","foreignKey","localKeys","foreignKeys","enumerable","link","prop","hasKey","getResource","getAll","children","id","child","sibling","defineProperty","IllegalArgumentError","message","captureStackTrace","RuntimeError","NonexistentResourceError","R","fakeId","diffIsEmpty","diff","added","removed","changed","check","fnName","_resourceName","_id","_options","changes","observer","observers","deliver","relationFields","previousAttributes","changeset","toKeep","changeHistory","errorFn","changeHistories","commit","changeRecord","createInstance","relationData","Resource","relationDataItem","Constructor","createCollection","fetch","__this","findAll","data","$$injected","writable","defineResource","digest","Platform","performMicrotaskCheckpoint","eject","ids","hasChanges","inject","isNew","lastModified","modified","collectionModified","lastSaved","saved","previous","revert","preserve","injectObj","previousInstance","instanceMethods","extends","relations","relatedModels","defs","belongsTo","parents","relatedModel","modelName","parentKey","parentField","freeze","_class","Function","proto","Ctor","m","setTimeout","handleChange","parentOmit","split","x","trim","DSCreate","expiresHeap","expires","y","pendingQueries","setInterval","reap","fns","action","request","config","responseError","getEndpoint","url","pathname","method","HTTP","found","queryHash","close","makeObserverHandler","_react","oldValueFn","firstTime","innerId","_inject","injected","temporary","relationDef","toInject","toInjectItem","injectedItem","initialLastModified","ObjectObserver","open","MAX_VALUE","destroy","destroyAll","find","loadRelations","refresh","catch","refreshAll","existing","save","update","updateAll","rejectionError","created","toEject","expired","query","findStrategy","makeFallbackCall","findFallbackAdapters","processResults","date","findAllStrategy","findAllFallbackAdapters","tasks","__options","task","defKey","hasDefKey","load","hasOnes","all","expiredItem","peek","pop","noChanges","changesOnly","always","property","origOptions","instances"],"mappings":"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A;AACA;AACA;AACA,EAAC,oBAAoB;;AAErB;AACA;AACA,cAAa,MAAM;AACnB,cAAa,SAAS;AACtB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAa,MAAM;AACnB,cAAa,SAAS;AACtB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAmB,YAAY;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,EAAC;AACD,iC;;;;;;;;AC/IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;AClBA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAS;AACT;AACA,UAAS;AACT;AACA;;AAEA;AACA;AACA,UAAS;AACT;AACA,UAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;AChCA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;;AAEA;;;;;;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;ACTA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,0BAAyB,iBAAiB;AAC1C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;ACzEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;;;;;;;AC1BA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;;;;;;;;;;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA2C;AAC3C;AACA;AACA;;;;;;;;AClBA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AClCA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;ACTA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;ACXA;;AAEA;AACA;AACA;AACA;AACA;AACA,qBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;ACfA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;;AAEA;;;;;;;;;;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;ACpDA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;AClBA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;;;;;;;;;ACdA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;;AAEA;;;;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA,wCAAuC;AACvC,oBAAmB,YAAY,EAAE;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAmB,eAAe;AAClC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,oBAAmB,qBAAqB;AACxC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,8BAA6B;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;;AAEA;AACA,MAAK;;AAEL;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,sBAAqB,oBAAoB;AACzC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,yBAAwB;AACxB,2BAA0B;AAC1B,2BAA0B;AAC1B;AACA;AACA;AACA;;AAEA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAmB,0BAA0B;AAC7C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,wDAAuD;AACvD;AACA;AACA;;AAEA,EAAC;;;;;;;AC/hBD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACtBA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAC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","file":"./dist/js-data-debug.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"JSData\"] = factory();\n\telse\n\t\troot[\"JSData\"] = factory();\n})(this, function() {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap aacbe202dc73a84af267\n **/","import DS from './datastore/index'\nimport DSUtils from './utils'\nimport DSErrors from './errors'\n\n/**\n * The library export.\n * - window.JSData\n * - require('js-data')\n * - define(['js-data', function (JSData) { ... }]);\n * - import JSData from 'js-data'\n */\nmodule.exports = {\n DS,\n DSUtils,\n DSErrors,\n createStore (options) {\n return new DS(options)\n },\n version: {\n full: '<%= pkg.version %>',\n major: parseInt('<%= major %>', 10),\n minor: parseInt('<%= minor %>', 10),\n patch: parseInt('<%= patch %>', 10),\n alpha: '<%= alpha %>' !== 'false' ? '<%= alpha %>' : false,\n beta: '<%= beta %>' !== 'false' ? '<%= beta %>' : false\n }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/index.js\n **/","/* jshint eqeqeq:false */\nimport DSUtils from '../utils'\nimport DSErrors from '../errors'\nimport syncMethods from './sync_methods/index'\nimport asyncMethods from './async_methods/index'\n\nfunction lifecycleNoopCb (resource, attrs, cb) {\n cb(null, attrs)\n}\n\nfunction lifecycleNoop (resource, attrs) {\n return attrs\n}\n\nfunction compare (orderBy, index, a, b) {\n let def = orderBy[index]\n let cA = DSUtils.get(a, def[0])\n let cB = DSUtils.get(b, def[0])\n if (DSUtils._s(cA)) {\n cA = DSUtils.upperCase(cA)\n }\n if (DSUtils._s(cB)) {\n cB = DSUtils.upperCase(cB)\n }\n if (def[1] === 'DESC') {\n if (cB < cA) {\n return -1\n } else if (cB > cA) {\n return 1\n } else {\n if (index < orderBy.length - 1) {\n return compare(orderBy, index + 1, a, b)\n } else {\n return 0\n }\n }\n } else {\n if (cA < cB) {\n return -1\n } else if (cA > cB) {\n return 1\n } else {\n if (index < orderBy.length - 1) {\n return compare(orderBy, index + 1, a, b)\n } else {\n return 0\n }\n }\n }\n}\n\nclass Defaults {\n errorFn (a, b) {\n if (this.error && typeof this.error === 'function') {\n try {\n if (typeof a === 'string') {\n throw new Error(a)\n } else {\n throw a\n }\n } catch (err) {\n a = err\n }\n this.error(this.name || null, a || null, b || null)\n }\n }\n}\n\nvar defaultsPrototype = Defaults.prototype\n\ndefaultsPrototype.actions = {}\ndefaultsPrototype.afterCreate = lifecycleNoopCb\ndefaultsPrototype.afterCreateCollection = lifecycleNoop\ndefaultsPrototype.afterCreateInstance = lifecycleNoop\ndefaultsPrototype.afterDestroy = lifecycleNoopCb\ndefaultsPrototype.afterEject = lifecycleNoop\ndefaultsPrototype.afterFind = lifecycleNoopCb\ndefaultsPrototype.afterFindAll = lifecycleNoopCb\ndefaultsPrototype.afterInject = lifecycleNoop\ndefaultsPrototype.afterLoadRelations = lifecycleNoopCb\ndefaultsPrototype.afterReap = lifecycleNoop\ndefaultsPrototype.afterUpdate = lifecycleNoopCb\ndefaultsPrototype.afterValidate = lifecycleNoopCb\ndefaultsPrototype.allowSimpleWhere = true\ndefaultsPrototype.applyDefaultsOnInject = false\ndefaultsPrototype.basePath = ''\ndefaultsPrototype.beforeCreate = lifecycleNoopCb\ndefaultsPrototype.beforeCreateCollection = lifecycleNoop\ndefaultsPrototype.beforeCreateInstance = lifecycleNoop\ndefaultsPrototype.beforeDestroy = lifecycleNoopCb\ndefaultsPrototype.beforeEject = lifecycleNoop\ndefaultsPrototype.beforeInject = lifecycleNoop\ndefaultsPrototype.beforeReap = lifecycleNoop\ndefaultsPrototype.beforeUpdate = lifecycleNoopCb\ndefaultsPrototype.beforeValidate = lifecycleNoopCb\ndefaultsPrototype.bypassCache = false\ndefaultsPrototype.cacheResponse = !!DSUtils.w\ndefaultsPrototype.csp = false\ndefaultsPrototype.clearEmptyQueries = true\ndefaultsPrototype.computed = {}\ndefaultsPrototype.defaultAdapter = 'http'\ndefaultsPrototype.debug = false\ndefaultsPrototype.defaultValues = {}\ndefaultsPrototype.eagerEject = false\n// TODO: Implement eagerInject in DS#create\ndefaultsPrototype.eagerInject = false\ndefaultsPrototype.endpoint = ''\ndefaultsPrototype.error = console ? (a, b, c) => console[typeof console.error === 'function' ? 'error' : 'log'](a, b, c) : false\ndefaultsPrototype.errorHandler = function (...args) {\n return DSUtils.Promise.reject(args[0])\n}\ndefaultsPrototype.fallbackAdapters = ['http']\ndefaultsPrototype.findStrictCache = false\ndefaultsPrototype.idAttribute = 'id'\ndefaultsPrototype.ignoredChanges = [/\\$/]\ndefaultsPrototype.instanceEvents = !!DSUtils.w\ndefaultsPrototype.keepChangeHistory = false\ndefaultsPrototype.linkRelations = !!DSUtils.w\ndefaultsPrototype.log = console ? (a, b, c, d, e) => console[typeof console.info === 'function' ? 'info' : 'log'](a, b, c, d, e) : false\n\ndefaultsPrototype.logFn = function (a, b, c, d) {\n let _this = this\n if (_this.debug && _this.log && typeof _this.log === 'function') {\n _this.log(_this.name || null, a || null, b || null, c || null, d || null)\n }\n}\n\ndefaultsPrototype.maxAge = false\ndefaultsPrototype.methods = {}\ndefaultsPrototype.notify = !!DSUtils.w\ndefaultsPrototype.omit = []\ndefaultsPrototype.onConflict = 'merge'\ndefaultsPrototype.reapAction = DSUtils.w ? 'inject' : 'none'\ndefaultsPrototype.reapInterval = DSUtils.w ? 30000 : false\ndefaultsPrototype.relationsEnumerable = false\ndefaultsPrototype.resetHistoryOnInject = true\ndefaultsPrototype.returnMeta = false\ndefaultsPrototype.scopes = {}\ndefaultsPrototype.strategy = 'single'\ndefaultsPrototype.upsert = !!DSUtils.w\ndefaultsPrototype.useClass = true\ndefaultsPrototype.useFilter = false\ndefaultsPrototype.usePendingFind = true\ndefaultsPrototype.usePendingFindAll = true\ndefaultsPrototype.validate = lifecycleNoopCb\ndefaultsPrototype.watchChanges = !!DSUtils.w\n\nlet escapeRegExp = /([.*+?^=!:${}()|[\\]\\/\\\\])/g\nlet percentRegExp = /%/g\nlet underscoreRegExp = /_/g\n\nfunction escape (pattern) {\n return pattern.replace(escapeRegExp, '\\\\$1')\n}\n\nfunction like (pattern, flags) {\n return new RegExp(`^${(escape(pattern).replace(percentRegExp, '.*').replace(underscoreRegExp, '.'))}$`, flags)\n}\n\ndefaultsPrototype.defaultFilter = function (collection, resourceName, params, options) {\n let definition = this.definitions[resourceName]\n let idA = 'id'\n let resource\n if (definition) {\n idA = definition.idAttribute\n resource = this.store[resourceName]\n }\n let filtered = collection\n let where = null\n let reserved = {\n skip: '',\n offset: '',\n where: '',\n limit: '',\n orderBy: '',\n sort: ''\n }\n\n params = params || {}\n options = options || {}\n\n if (DSUtils._o(params.where)) {\n where = params.where\n } else {\n where = {}\n }\n\n if (options.allowSimpleWhere) {\n DSUtils.forOwn(params, function (value, key) {\n if (!(key in reserved) && !(key in where)) {\n where[key] = {\n '==': value\n }\n }\n })\n }\n\n if (DSUtils.isEmpty(where)) {\n where = null\n }\n\n if (where) {\n filtered = DSUtils.filter(filtered, function (attrs) {\n let first = true\n let keep = true\n\n if (options.excludeTemporary && resource && resource.temporaryItems[attrs[idA]]) {\n return false\n }\n\n DSUtils.forOwn(where, function (clause, field) {\n if (!DSUtils._o(clause)) {\n clause = {\n '==': clause\n }\n }\n DSUtils.forOwn(clause, function (term, op) {\n let expr\n let isOr = op[0] === '|'\n let val = DSUtils.get(attrs, field)\n op = isOr ? op.substr(1) : op\n if (op === '==') {\n expr = val == term // eslint-disable-line\n } else if (op === '===') {\n expr = val === term\n } else if (op === '!=') {\n expr = val != term // eslint-disable-line\n } else if (op === '!==') {\n expr = val !== term\n } else if (op === '>') {\n expr = val > term\n } else if (op === '>=') {\n expr = val >= term\n } else if (op === '<') {\n expr = val < term\n } else if (op === '<=') {\n expr = val <= term\n } else if (op === 'isectEmpty') {\n expr = !DSUtils.intersection((val || []), (term || [])).length\n } else if (op === 'isectNotEmpty') {\n expr = DSUtils.intersection((val || []), (term || [])).length\n } else if (op === 'in') {\n if (DSUtils._s(term)) {\n expr = term.indexOf(val) !== -1\n } else {\n expr = DSUtils.contains(term, val)\n }\n } else if (op === 'notIn') {\n if (DSUtils._s(term)) {\n expr = term.indexOf(val) === -1\n } else {\n expr = !DSUtils.contains(term, val)\n }\n } else if (op.indexOf('like') === 0) {\n expr = like(term, op.substr(4)).exec(val) !== null\n } else if (op.indexOf('notLike') === 0) {\n expr = like(term, op.substr(7)).exec(val) === null\n } else if (op === 'contains') {\n if (DSUtils._s(val)) {\n expr = val.indexOf(term) !== -1\n } else {\n expr = DSUtils.contains(val, term)\n }\n } else if (op === 'notContains') {\n if (DSUtils._s(val)) {\n expr = val.indexOf(term) === -1\n } else {\n expr = !DSUtils.contains(val, term)\n }\n }\n if (expr !== undefined) {\n keep = first ? expr : (isOr ? keep || expr : keep && expr)\n }\n first = false\n })\n })\n\n return keep\n })\n } else if (options.excludeTemporary && resource) {\n filtered = DSUtils.filter(filtered, function (attrs) {\n return resource.temporaryItems[attrs[idA]]\n })\n }\n\n let orderBy = null\n\n if (DSUtils._s(params.orderBy)) {\n orderBy = [\n [params.orderBy, 'ASC']\n ]\n } else if (DSUtils._a(params.orderBy)) {\n orderBy = params.orderBy\n }\n\n if (!orderBy && DSUtils._s(params.sort)) {\n orderBy = [\n [params.sort, 'ASC']\n ]\n } else if (!orderBy && DSUtils._a(params.sort)) {\n orderBy = params.sort\n }\n\n // Apply 'orderBy'\n if (orderBy) {\n let index = 0\n DSUtils.forEach(orderBy, function (def, i) {\n if (DSUtils._s(def)) {\n orderBy[i] = [def, 'ASC']\n } else if (!DSUtils._a(def)) {\n throw new DSErrors.IA(`DS.filter(\"${resourceName}\"[, params][, options]): ${DSUtils.toJson(def)}: Must be a string or an array!`, {\n params: {\n 'orderBy[i]': {\n actual: typeof def,\n expected: 'string|array'\n }\n }\n })\n }\n })\n filtered = DSUtils.sort(filtered, function (a, b) {\n return compare(orderBy, index, a, b)\n })\n }\n\n let limit = DSUtils._n(params.limit) ? params.limit : null\n let skip = null\n\n if (DSUtils._n(params.skip)) {\n skip = params.skip\n } else if (DSUtils._n(params.offset)) {\n skip = params.offset\n }\n\n // Apply 'limit' and 'skip'\n if (limit && skip) {\n filtered = DSUtils.slice(filtered, skip, Math.min(filtered.length, skip + limit))\n } else if (DSUtils._n(limit)) {\n filtered = DSUtils.slice(filtered, 0, Math.min(filtered.length, limit))\n } else if (DSUtils._n(skip)) {\n if (skip < filtered.length) {\n filtered = DSUtils.slice(filtered, skip)\n } else {\n filtered = []\n }\n }\n\n return filtered === collection ? filtered.slice() : filtered\n}\n\nclass DS {\n constructor (options) {\n let _this = this\n options = options || {}\n\n _this.store = {}\n _this.definitions = {}\n _this.adapters = {}\n _this.defaults = new Defaults()\n _this.observe = DSUtils.observe\n DSUtils.forOwn(options, function (v, k) {\n if (k === 'omit') {\n _this.defaults.omit = v.concat(Defaults.prototype.omit)\n } else {\n _this.defaults[k] = v\n }\n })\n _this.defaults.logFn('new data store created', _this.defaults)\n\n let P = DSUtils.Promise\n\n if (P && !P.prototype.spread) {\n P.prototype.spread = function (cb) {\n return this.then(function (arr) {\n return cb.apply(this, arr)\n })\n }\n }\n\n DSUtils.Events(_this)\n }\n\n getAdapterName (options) {\n let errorIfNotExist = false\n options = options || {}\n this.defaults.logFn('getAdapterName', options)\n if (DSUtils._s(options)) {\n errorIfNotExist = true\n options = {\n adapter: options\n }\n }\n if (this.adapters[options.adapter]) {\n return options.adapter\n } else if (errorIfNotExist) {\n throw new Error(`${options.adapter} is not a registered adapter!`)\n } else {\n return options.defaultAdapter\n }\n }\n\n getAdapter (options) {\n options = options || {}\n this.defaults.logFn('getAdapter', options)\n return this.adapters[this.getAdapterName(options)]\n }\n\n registerAdapter (name, Adapter, options) {\n let _this = this\n options = options || {}\n _this.defaults.logFn('registerAdapter', name, Adapter, options)\n if (DSUtils.isFunction(Adapter)) {\n _this.adapters[name] = new Adapter(options)\n } else {\n _this.adapters[name] = Adapter\n }\n if (options.default) {\n _this.defaults.defaultAdapter = name\n }\n _this.defaults.logFn(`default adapter is ${_this.defaults.defaultAdapter}`)\n }\n\n is (resourceName, instance) {\n let definition = this.definitions[resourceName]\n if (!definition) {\n throw new DSErrors.NER(resourceName)\n }\n return instance instanceof definition[definition.class]\n }\n\n clear () {\n let ejected = {}\n DSUtils.forOwn(this.definitions, (definition) => {\n let name = definition.name\n ejected[name] = definition.ejectAll()\n this.store[name].completedQueries = {}\n this.store[name].queryData = {}\n })\n return ejected\n }\n\n errorFn (...args) {\n let options = args[args.length - 1]\n let defaultHandler = this.defaults.errorHandler\n let errorHandler = options ? options.errorHandler : defaultHandler\n errorHandler = errorHandler || defaultHandler\n return function (err) {\n return errorHandler(err, ...args)\n }\n }\n}\n\nvar dsPrototype = DS.prototype\n\ndsPrototype.getAdapterName.shorthand = false\ndsPrototype.getAdapter.shorthand = false\ndsPrototype.registerAdapter.shorthand = false\ndsPrototype.errors = DSErrors\ndsPrototype.utils = DSUtils\n\nfunction addMethods (target, obj) {\n DSUtils.forOwn(obj, function (v, k) {\n target[k] = v\n target[k].before = function (fn) {\n let orig = target[k]\n target[k] = function (...args) {\n return orig.apply(this, fn.apply(this, args) || args)\n }\n }\n })\n}\n\naddMethods(dsPrototype, syncMethods)\naddMethods(dsPrototype, asyncMethods)\n\nexport default DS\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/datastore/index.js\n **/","/* jshint eqeqeq:false */\n\n/**\n * Mix of ES6 and CommonJS module imports because the interop of Babel + Webpack + ES6 modules + CommonJS isn't very good.\n */\nimport DSErrors from './errors'\nlet BinaryHeap = require('yabh')\nlet forEach = require('mout/array/forEach')\nlet slice = require('mout/array/slice')\nlet forOwn = require('mout/object/forOwn')\nlet contains = require('mout/array/contains')\nlet deepMixIn = require('mout/object/deepMixIn')\nlet pascalCase = require('mout/string/pascalCase')\nlet remove = require('mout/array/remove')\nlet pick = require('mout/object/pick')\nlet _keys = require('mout/object/keys')\nlet sort = require('mout/array/sort')\nlet upperCase = require('mout/string/upperCase')\nlet get = require('mout/object/get')\nlet set = require('mout/object/set')\nlet observe = require('../lib/observe-js/observe.js')\nlet guid = require('mout/random/guid')\nlet w, P, File\nlet objectProto = Object.prototype\nlet toString = objectProto.toString\n\n/**\n * Attempt to detect the global Promise constructor.\n * JSData will still work without one, as long you do something like this:\n *\n * var JSData = require('js-data');\n * JSData.DSUtils.Promise = MyPromiseLib;\n */\ntry {\n P = Promise\n} catch (e) {\n console.error('js-data requires a global Promise constructor!')\n}\n\ntry {\n File = window.File\n} catch (e) {\n File = function () {}\n}\n\nfunction _isArray (value) {\n return toString.call(value) === '[object Array]' || false\n}\n\nlet isArray = Array.isArray || _isArray\n\nfunction isRegExp (value) {\n return toString.call(value) === '[object RegExp]' || false\n}\n\n// adapted from lodash.isString\nfunction isString (value) {\n return typeof value === 'string' || (value && typeof value === 'object' && toString.call(value) === '[object String]') || false\n}\n\nfunction isObject (value) {\n return toString.call(value) === '[object Object]' || false\n}\n\n// adapted from lodash.isDate\nfunction isDate (value) {\n return (value && typeof value === 'object' && toString.call(value) === '[object Date]') || false\n}\n\n// adapted from lodash.isNumber\nfunction isNumber (value) {\n let type = typeof value\n return type === 'number' || (value && type === 'object' && toString.call(value) === '[object Number]') || false\n}\n\n// adapted from lodash.isFunction\nfunction isFunction (value) {\n return typeof value === 'function' || (value && toString.call(value) === '[object Function]') || false\n}\n\n// shorthand argument checking functions, using these shaves 1.18 kb off of the minified build\nfunction isStringOrNumber (value) {\n return isString(value) || isNumber(value)\n}\n\nfunction isStringOrNumberErr (field) {\n return new DSErrors.IA(`\"${field}\" must be a string or a number!`)\n}\n\nfunction isObjectErr (field) {\n return new DSErrors.IA(`\"${field}\" must be an object!`)\n}\n\nfunction isArrayErr (field) {\n return new DSErrors.IA(`\"${field}\" must be an array!`)\n}\n\n// adapted from mout.isEmpty\nfunction isEmpty (val) {\n if (val == null) { // jshint ignore:line\n // typeof null == 'object' so we check it first\n return true\n } else if (typeof val === 'string' || isArray(val)) {\n return !val.length\n } else if (typeof val === 'object') {\n let result = true\n forOwn(val, function () {\n result = false\n return false // break loop\n })\n return result\n } else {\n return true\n }\n}\n\n// Find the intersection between two arrays\nfunction intersection (array1, array2) {\n if (!array1 || !array2) {\n return []\n }\n let result = []\n let item\n for (let i = 0, length = array1.length; i < length; i++) {\n item = array1[i]\n if (contains(result, item)) {\n continue\n }\n if (contains(array2, item)) {\n result.push(item)\n }\n }\n return result\n}\n\nfunction filter (array, cb, thisObj) {\n let results = []\n forEach(array, function (value, key, arr) {\n if (cb(value, key, arr)) {\n results.push(value)\n }\n }, thisObj)\n return results\n}\n\n/**\n * Attempt to detect whether we are in the browser.\n */\ntry {\n w = window\n w = {}\n} catch (e) {\n w = null\n}\n\n/**\n * Event mixin. Usage:\n *\n * function handler() { ... }\n * Events(myObject);\n * myObject.on('foo', handler);\n * myObject.emit('foo', 'some', 'data');\n * myObject.off('foo', handler);\n */\nfunction Events (target) {\n let events = {}\n target = target || this\n Object.defineProperties(target, {\n on: {\n value: function (type, func, ctx) {\n events[type] = events[type] || []\n events[type].push({\n f: func,\n c: ctx\n })\n }\n },\n off: {\n value: function (type, func) {\n let listeners = events[type]\n if (!listeners) {\n events = {}\n } else if (func) {\n for (let i = 0; i < listeners.length; i++) {\n if (listeners[i].f === func) {\n listeners.splice(i, 1)\n break\n }\n }\n } else {\n listeners.splice(0, listeners.length)\n }\n }\n },\n emit: {\n value: function (...args) {\n let listeners = events[args.shift()] || []\n if (listeners) {\n for (let i = 0; i < listeners.length; i++) {\n listeners[i].f.apply(listeners[i].c, args)\n }\n }\n }\n }\n })\n}\n\n/**\n * Lifecycle hooks that should support promises.\n */\nlet toPromisify = [\n 'beforeValidate',\n 'validate',\n 'afterValidate',\n 'beforeCreate',\n 'afterCreate',\n 'beforeUpdate',\n 'afterUpdate',\n 'beforeDestroy',\n 'afterDestroy'\n]\n\n/**\n * Return whether \"prop\" is in the blacklist.\n */\nlet isBlacklisted = observe.isBlacklisted\n\n// adapted from angular.copy\nfunction copy (source, destination, stackSource, stackDest, blacklist) {\n if (!destination) {\n destination = source\n if (source) {\n if (isArray(source)) {\n destination = copy(source, [], stackSource, stackDest, blacklist)\n } else if (isDate(source)) {\n destination = new Date(source.getTime())\n } else if (isRegExp(source)) {\n destination = new RegExp(source.source, source.toString().match(/[^\\/]*$/)[0])\n destination.lastIndex = source.lastIndex\n } else if (isObject(source)) {\n destination = copy(source, Object.create(Object.getPrototypeOf(source)), stackSource, stackDest, blacklist)\n }\n }\n } else {\n if (source === destination) {\n throw new Error('Cannot copy! Source and destination are identical.')\n }\n\n stackSource = stackSource || []\n stackDest = stackDest || []\n\n if (isObject(source)) {\n let index = stackSource.indexOf(source)\n if (index !== -1) {\n return stackDest[index]\n }\n\n stackSource.push(source)\n stackDest.push(destination)\n }\n\n let result\n if (isArray(source)) {\n let i\n destination.length = 0\n for (i = 0; i < source.length; i++) {\n result = copy(source[i], null, stackSource, stackDest, blacklist)\n if (isObject(source[i])) {\n stackSource.push(source[i])\n stackDest.push(result)\n }\n destination.push(result)\n }\n } else {\n if (isArray(destination)) {\n destination.length = 0\n } else {\n forEach(destination, function (value, key) {\n delete destination[key]\n })\n }\n for (let key in source) {\n if (source.hasOwnProperty(key)) {\n if (isBlacklisted(key, blacklist)) {\n continue\n }\n result = copy(source[key], null, stackSource, stackDest, blacklist)\n if (isObject(source[key])) {\n stackSource.push(source[key])\n stackDest.push(result)\n }\n destination[key] = result\n }\n }\n }\n }\n return destination\n}\n\n// adapted from angular.equals\nfunction equals (o1, o2) {\n if (o1 === o2) {\n return true\n }\n if (o1 === null || o2 === null) {\n return false\n }\n if (o1 !== o1 && o2 !== o2) { // eslint-disable-line\n return true\n } // NaN === NaN\n var t1 = typeof o1\n var t2 = typeof o2\n var length, key, keySet\n if (t1 == t2) { // eslint-disable-line\n if (t1 == 'object') { // eslint-disable-line\n if (isArray(o1)) {\n if (!isArray(o2)) {\n return false\n }\n if ((length = o1.length) === o2.length) { // jshint ignore:line\n for (key = 0; key < length; key++) {\n if (!equals(o1[key], o2[key])) {\n return false\n }\n }\n return true\n }\n } else if (isDate(o1)) {\n if (!isDate(o2)) {\n return false\n }\n return equals(o1.getTime(), o2.getTime())\n } else if (isRegExp(o1) && isRegExp(o2)) {\n return o1.toString() == o2.toString() // eslint-disable-line\n } else {\n if (isArray(o2)) {\n return false\n }\n keySet = {}\n for (key in o1) {\n if (key.charAt(0) === '$' || isFunction(o1[key])) {\n continue\n }\n if (!equals(o1[key], o2[key])) {\n return false\n }\n keySet[key] = true\n }\n for (key in o2) {\n if (!keySet.hasOwnProperty(key) &&\n key.charAt(0) !== '$' &&\n o2[key] !== undefined && !isFunction(o2[key])) {\n return false\n }\n }\n return true\n }\n }\n }\n return false\n}\n\n/**\n * Given either an instance or the primary key of an instance, return the primary key.\n */\nfunction resolveId (definition, idOrInstance) {\n if (isString(idOrInstance) || isNumber(idOrInstance)) {\n return idOrInstance\n } else if (idOrInstance && definition) {\n return idOrInstance[definition.idAttribute] || idOrInstance\n } else {\n return idOrInstance\n }\n}\n\n/**\n * Given either an instance or the primary key of an instance, return the instance.\n */\nfunction resolveItem (resource, idOrInstance) {\n if (resource && (isString(idOrInstance) || isNumber(idOrInstance))) {\n return resource.index[idOrInstance] || idOrInstance\n } else {\n return idOrInstance\n }\n}\n\nfunction isValidString (val) {\n return (val != null && val !== '') // jshint ignore:line\n}\n\nfunction join (items, separator) {\n separator = separator || ''\n return filter(items, isValidString).join(separator)\n}\n\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nexport default {\n Promise: P,\n /**\n * Method to wrap an \"options\" object so that it will inherit from\n * some parent object, such as a resource definition.\n */\n _ (parent, options) {\n let _this = this\n parent = parent || {}\n options = options || {}\n if (options && options.constructor === parent.constructor) {\n return options\n } else if (!isObject(options)) {\n throw new DSErrors.IA('\"options\" must be an object!')\n }\n forEach(toPromisify, function (name) {\n if (typeof options[name] === 'function' && options[name].toString().indexOf('for (var _len3 = arg') === -1) {\n options[name] = _this.promisify(options[name])\n }\n })\n // Dynamic constructor function\n let O = function Options (attrs) {\n let self = this\n forOwn(attrs, function (value, key) {\n self[key] = value\n })\n }\n // Inherit from some parent object\n O.prototype = parent\n // Give us a way to get the original options back.\n O.prototype.orig = function () {\n let orig = {}\n forOwn(this, function (value, key) {\n orig[key] = value\n })\n return orig\n }\n return new O(options)\n },\n _n: isNumber,\n _s: isString,\n _sn: isStringOrNumber,\n _snErr: isStringOrNumberErr,\n _o: isObject,\n _oErr: isObjectErr,\n _a: isArray,\n _aErr: isArrayErr,\n applyScope (definition, params, options) {\n let scope = options.scope\n let _params = copy(params)\n if (scope) {\n if (isString(scope)) {\n scope = [scope]\n }\n } else {\n scope = []\n }\n scope.unshift('defaultScope')\n forEach(scope, function (_scope) {\n let scopeDef = options.scopes[_scope]\n if (typeof scopeDef === 'function') {\n deepMixIn(params, scopeDef(definition))\n } else if (scopeDef) {\n deepMixIn(params, scopeDef)\n }\n })\n deepMixIn(params, _params)\n },\n compute (fn, field) {\n let _this = this\n let args = []\n if (!isObject(fn)) {\n forEach(fn.deps, function (dep) {\n args.push(get(_this, dep))\n })\n // compute property\n set(_this, field, fn[fn.length - 1].apply(_this, args))\n }\n },\n contains,\n copy,\n deepMixIn,\n diffObjectFromOldObject: observe.diffObjectFromOldObject,\n BinaryHeap,\n equals,\n Events,\n filter,\n fillIn (target, obj) {\n forOwn(obj, function (v, k) {\n if (!(k in target)) {\n target[k] = v\n }\n })\n return target\n },\n forEach,\n forOwn,\n fromJson (json) {\n return isString(json) ? JSON.parse(json) : json\n },\n get,\n guid,\n intersection,\n isArray,\n isBlacklisted,\n isEmpty,\n isFunction,\n isObject,\n isNumber,\n isString,\n keys: _keys,\n makePath,\n observe,\n omit (obj, bl) {\n let toRemove = []\n forOwn(obj, function (v, k) {\n if (isBlacklisted(k, bl)) {\n toRemove.push(k)\n }\n })\n forEach(toRemove, function (k) {\n delete obj[k]\n })\n return obj\n },\n pascalCase,\n pick,\n // Turn the given node-style callback function into one that can return a promise.\n promisify (fn, target) {\n let _this = this\n if (!fn) {\n return\n } else if (typeof fn !== 'function') {\n throw new Error('Can only promisify functions!')\n }\n return function (...args) {\n return new _this.Promise(function (resolve, reject) {\n args.push(function (err, result) {\n if (err) {\n reject(err)\n } else {\n resolve(result)\n }\n })\n\n try {\n let promise = fn.apply(target || this, args)\n if (promise && promise.then) {\n promise.then(resolve, reject)\n }\n } catch (err) {\n reject(err)\n }\n })\n }\n },\n remove,\n set,\n slice,\n sort,\n toJson: JSON.stringify,\n updateTimestamp (timestamp) {\n let newTimestamp = typeof Date.now === 'function' ? Date.now() : new Date().getTime()\n if (timestamp && newTimestamp <= timestamp) {\n return timestamp + 1\n } else {\n return newTimestamp\n }\n },\n upperCase,\n // Return a copy of \"object\" with cycles removed.\n removeCircular (object) {\n return (function rmCirc (value, ctx) {\n let i\n let nu\n\n if (\n typeof value === 'object' &&\n value !== null &&\n !(value instanceof Boolean) &&\n !(value instanceof Date) &&\n !(value instanceof Number) &&\n !(value instanceof RegExp) &&\n !(value instanceof String) &&\n (!File || !(value instanceof File))\n ) {\n // check if current object points back to itself\n let cur = ctx.cur\n var parent = ctx.ctx\n while (parent) {\n if (parent.cur === cur) {\n return undefined\n }\n parent = parent.ctx\n }\n\n if (isArray(value)) {\n nu = []\n for (i = 0; i < value.length; i += 1) {\n nu[i] = rmCirc(value[i], {ctx, cur: value[i]})\n }\n } else {\n nu = {}\n forOwn(value, function (v, k) {\n nu[k] = rmCirc(value[k], {ctx, cur: value[k]})\n })\n }\n return nu\n }\n return value\n }(object, {ctx: null, cur: object}))\n },\n resolveItem,\n resolveId,\n respond (response, meta, options) {\n if (options.returnMeta === 'array') {\n return [response, meta]\n } else if (options.returnMeta === 'object') {\n return {response, meta}\n } else {\n return response\n }\n },\n w,\n // This is where the magic of relations happens.\n applyRelationGettersToTarget (store, definition, target) {\n this.forEach(definition.relationList, def => {\n let relationName = def.relation\n let localField = def.localField\n let localKey = def.localKey\n let foreignKey = def.foreignKey\n let localKeys = def.localKeys\n let foreignKeys = def.foreignKeys\n let enumerable = typeof def.enumerable === 'boolean' ? def.enumerable : !!definition.relationsEnumerable\n if (typeof def.link === 'boolean' ? def.link : !!definition.linkRelations) {\n delete target[localField]\n let prop = {\n enumerable\n }\n if (def.type === 'belongsTo') {\n prop.get = function () {\n let key = get(this, localKey)\n let hasKey = !!(key || key === 0)\n return hasKey ? definition.getResource(relationName).get(key) : undefined\n }\n prop.set = function (parent) {\n if (parent) {\n set(this, localKey, get(parent, definition.getResource(relationName).idAttribute))\n }\n return get(this, localField)\n }\n } else if (def.type === 'hasMany') {\n prop.get = function () {\n let params = {}\n if (foreignKey) {\n params[foreignKey] = this[definition.idAttribute]\n return definition.getResource(relationName).defaultFilter.call(store, store.store[relationName].collection, relationName, params, {allowSimpleWhere: true})\n } else if (localKeys) {\n let keys = get(this, localKeys) || []\n return definition.getResource(relationName).getAll(isArray(keys) ? keys : _keys(keys))\n } else if (foreignKeys) {\n set(params, `where.${foreignKeys}.contains`, this[definition.idAttribute])\n return definition.getResource(relationName).defaultFilter.call(store, store.store[relationName].collection, relationName, params)\n }\n return undefined\n }\n prop.set = function (children) {\n if (children && children.length) {\n let id = get(this, definition.idAttribute)\n if (foreignKey) {\n forEach(children, function (child) {\n set(child, foreignKey, id)\n })\n } else if (localKeys) {\n let keys = []\n forEach(children, function (child) {\n keys.push(get(child, definition.getResource(relationName).idAttribute))\n })\n set(this, localKeys, keys)\n } else if (foreignKeys) {\n forEach(children, function (child) {\n let keys = get(child, foreignKeys)\n if (keys) {\n if (!contains(keys, id)) {\n keys.push(id)\n }\n } else {\n set(child, foreignKeys, [id])\n }\n })\n }\n }\n return get(this, localField)\n }\n } else if (def.type === 'hasOne') {\n if (localKey) {\n prop.get = function () {\n let key = get(this, localKey)\n let hasKey = !!(key || key === 0)\n return hasKey ? definition.getResource(relationName).get(key) : undefined\n }\n prop.set = function (sibling) {\n if (sibling) {\n set(this, localKey, get(sibling, definition.getResource(relationName).idAttribute))\n }\n return get(this, localField)\n }\n } else {\n prop.get = function () {\n let params = {}\n params[foreignKey] = this[definition.idAttribute]\n let items = params[foreignKey] ? definition.getResource(relationName).defaultFilter.call(store, store.store[relationName].collection, relationName, params, {allowSimpleWhere: true}) : []\n if (items.length) {\n return items[0]\n }\n return undefined\n }\n prop.set = function (sibling) {\n if (sibling) {\n set(sibling, foreignKey, get(this, definition.idAttribute))\n }\n return get(this, localField)\n }\n }\n }\n if (def.get) {\n let orig = prop.get\n prop.get = function () {\n return def.get(definition, def, this, (...args) => orig.apply(this, args))\n }\n }\n Object.defineProperty(target, localField, prop)\n }\n })\n }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/utils.js\n **/","/**\n * Thrown during a method call when an argument passed into the method is invalid.\n */\nclass IllegalArgumentError extends Error {\n constructor (message) {\n super()\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, this.constructor)\n }\n this.type = this.constructor.name\n this.message = message\n }\n}\n\n/**\n * Thrown when an invariant is violated or unrecoverable error is encountered during execution.\n */\nclass RuntimeError extends Error {\n constructor (message) {\n super()\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, this.constructor)\n }\n this.type = this.constructor.name\n this.message = message\n }\n}\n\n/**\n * Thrown when attempting to access or work with a non-existent resource.\n */\nclass NonexistentResourceError extends Error {\n constructor (resourceName) {\n super()\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, this.constructor)\n }\n this.type = this.constructor.name\n this.message = `${resourceName} is not a registered resource!`\n }\n}\n\nexport default {\n IllegalArgumentError,\n IA: IllegalArgumentError,\n RuntimeError,\n R: RuntimeError,\n NonexistentResourceError,\n NER: NonexistentResourceError\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/errors.js\n **/","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define('yabh', factory) :\n (global.BinaryHeap = factory());\n}(this, function () { 'use strict';\n\n /**\n * @method bubbleUp\n * @param {array} heap The heap.\n * @param {function} weightFunc The weight function.\n * @param {number} n The index of the element to bubble up.\n */\n var bubbleUp = function bubbleUp(heap, weightFunc, n) {\n var element = heap[n];\n var weight = weightFunc(element);\n // When at 0, an element can not go up any further.\n while (n > 0) {\n // Compute the parent element's index, and fetch it.\n var parentN = Math.floor((n + 1) / 2) - 1;\n var parent = heap[parentN];\n // If the parent has a lesser weight, things are in order and we\n // are done.\n if (weight >= weightFunc(parent)) {\n break;\n } else {\n heap[parentN] = element;\n heap[n] = parent;\n n = parentN;\n }\n }\n };\n\n /**\n * @method bubbleDown\n * @param {array} heap The heap.\n * @param {function} weightFunc The weight function.\n * @param {number} n The index of the element to sink down.\n */\n var bubbleDown = function bubbleDown(heap, weightFunc, n) {\n var length = heap.length;\n var node = heap[n];\n var nodeWeight = weightFunc(node);\n\n while (true) {\n var child2N = (n + 1) * 2;\n var child1N = child2N - 1;\n var swap = null;\n if (child1N < length) {\n var child1 = heap[child1N];\n var child1Weight = weightFunc(child1);\n // If the score is less than our node's, we need to swap.\n if (child1Weight < nodeWeight) {\n swap = child1N;\n }\n }\n // Do the same checks for the other child.\n if (child2N < length) {\n var child2 = heap[child2N];\n var child2Weight = weightFunc(child2);\n if (child2Weight < (swap === null ? nodeWeight : weightFunc(heap[child1N]))) {\n swap = child2N;\n }\n }\n\n if (swap === null) {\n break;\n } else {\n heap[n] = heap[swap];\n heap[swap] = node;\n n = swap;\n }\n }\n };\n\n function BinaryHeap(weightFunc, compareFunc) {\n if (!weightFunc) {\n weightFunc = function weightFunc(x) {\n return x;\n };\n }\n if (!compareFunc) {\n compareFunc = function compareFunc(x, y) {\n return x === y;\n };\n }\n if (typeof weightFunc !== 'function') {\n throw new Error('BinaryHeap([weightFunc][, compareFunc]): \"weightFunc\" must be a function!');\n }\n if (typeof compareFunc !== 'function') {\n throw new Error('BinaryHeap([weightFunc][, compareFunc]): \"compareFunc\" must be a function!');\n }\n this.weightFunc = weightFunc;\n this.compareFunc = compareFunc;\n this.heap = [];\n }\n\n var BHProto = BinaryHeap.prototype;\n\n BHProto.push = function (node) {\n this.heap.push(node);\n bubbleUp(this.heap, this.weightFunc, this.heap.length - 1);\n };\n\n BHProto.peek = function () {\n return this.heap[0];\n };\n\n BHProto.pop = function () {\n var front = this.heap[0];\n var end = this.heap.pop();\n if (this.heap.length > 0) {\n this.heap[0] = end;\n bubbleDown(this.heap, this.weightFunc, 0);\n }\n return front;\n };\n\n BHProto.remove = function (node) {\n var length = this.heap.length;\n for (var i = 0; i < length; i++) {\n if (this.compareFunc(this.heap[i], node)) {\n var removed = this.heap[i];\n var end = this.heap.pop();\n if (i !== length - 1) {\n this.heap[i] = end;\n bubbleUp(this.heap, this.weightFunc, i);\n bubbleDown(this.heap, this.weightFunc, i);\n }\n return removed;\n }\n }\n return null;\n };\n\n BHProto.removeAll = function () {\n this.heap = [];\n };\n\n BHProto.size = function () {\n return this.heap.length;\n };\n\n return BinaryHeap;\n\n}));\n//# sourceMappingURL=yabh.js.map\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/yabh/dist/yabh.js\n ** module id = 4\n ** module chunks = 0\n **/","\n\n /**\n * Array forEach\n */\n function forEach(arr, callback, thisObj) {\n if (arr == null) {\n return;\n }\n var i = -1,\n len = arr.length;\n while (++i < len) {\n // we iterate over sparse items since there is no way to make it\n // work properly on IE 7-8. see #64\n if ( callback.call(thisObj, arr[i], i, arr) === false ) {\n break;\n }\n }\n }\n\n module.exports = forEach;\n\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/array/forEach.js\n ** module id = 5\n ** module chunks = 0\n **/","\n\n /**\n * Create slice of source array or array-like object\n */\n function slice(arr, start, end){\n var len = arr.length;\n\n if (start == null) {\n start = 0;\n } else if (start < 0) {\n start = Math.max(len + start, 0);\n } else {\n start = Math.min(start, len);\n }\n\n if (end == null) {\n end = len;\n } else if (end < 0) {\n end = Math.max(len + end, 0);\n } else {\n end = Math.min(end, len);\n }\n\n var result = [];\n while (start < end) {\n result.push(arr[start++]);\n }\n\n return result;\n }\n\n module.exports = slice;\n\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/array/slice.js\n ** module id = 6\n ** module chunks = 0\n **/","var hasOwn = require('./hasOwn');\nvar forIn = require('./forIn');\n\n /**\n * Similar to Array/forEach but works over object properties and fixes Don't\n * Enum bug on IE.\n * based on: http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation\n */\n function forOwn(obj, fn, thisObj){\n forIn(obj, function(val, key){\n if (hasOwn(obj, key)) {\n return fn.call(thisObj, obj[key], key, obj);\n }\n });\n }\n\n module.exports = forOwn;\n\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/object/forOwn.js\n ** module id = 7\n ** module chunks = 0\n **/","\n\n /**\n * Safer Object.hasOwnProperty\n */\n function hasOwn(obj, prop){\n return Object.prototype.hasOwnProperty.call(obj, prop);\n }\n\n module.exports = hasOwn;\n\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/object/hasOwn.js\n ** module id = 8\n ** module chunks = 0\n **/","var hasOwn = require('./hasOwn');\n\n var _hasDontEnumBug,\n _dontEnums;\n\n function checkDontEnum(){\n _dontEnums = [\n 'toString',\n 'toLocaleString',\n 'valueOf',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'constructor'\n ];\n\n _hasDontEnumBug = true;\n\n for (var key in {'toString': null}) {\n _hasDontEnumBug = false;\n }\n }\n\n /**\n * Similar to Array/forEach but works over object properties and fixes Don't\n * Enum bug on IE.\n * based on: http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation\n */\n function forIn(obj, fn, thisObj){\n var key, i = 0;\n // no need to check if argument is a real object that way we can use\n // it for arrays, functions, date, etc.\n\n //post-pone check till needed\n if (_hasDontEnumBug == null) checkDontEnum();\n\n for (key in obj) {\n if (exec(fn, obj, key, thisObj) === false) {\n break;\n }\n }\n\n\n if (_hasDontEnumBug) {\n var ctor = obj.constructor,\n isProto = !!ctor && obj === ctor.prototype;\n\n while (key = _dontEnums[i++]) {\n // For constructor, if it is a prototype object the constructor\n // is always non-enumerable unless defined otherwise (and\n // enumerated above). For non-prototype objects, it will have\n // to be defined on this object, since it cannot be defined on\n // any prototype objects.\n //\n // For other [[DontEnum]] properties, check if the value is\n // different than Object prototype value.\n if (\n (key !== 'constructor' ||\n (!isProto && hasOwn(obj, key))) &&\n obj[key] !== Object.prototype[key]\n ) {\n if (exec(fn, obj, key, thisObj) === false) {\n break;\n }\n }\n }\n }\n }\n\n function exec(fn, obj, key, thisObj){\n return fn.call(thisObj, obj[key], key, obj);\n }\n\n module.exports = forIn;\n\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/object/forIn.js\n ** module id = 9\n ** module chunks = 0\n **/","var indexOf = require('./indexOf');\n\n /**\n * If array contains values.\n */\n function contains(arr, val) {\n return indexOf(arr, val) !== -1;\n }\n module.exports = contains;\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/array/contains.js\n ** module id = 10\n ** module chunks = 0\n **/","\n\n /**\n * Array.indexOf\n */\n function indexOf(arr, item, fromIndex) {\n fromIndex = fromIndex || 0;\n if (arr == null) {\n return -1;\n }\n\n var len = arr.length,\n i = fromIndex < 0 ? len + fromIndex : fromIndex;\n while (i < len) {\n // we iterate over sparse items since there is no way to make it\n // work properly on IE 7-8. see #64\n if (arr[i] === item) {\n return i;\n }\n\n i++;\n }\n\n return -1;\n }\n\n module.exports = indexOf;\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/array/indexOf.js\n ** module id = 11\n ** module chunks = 0\n **/","var forOwn = require('./forOwn');\nvar isPlainObject = require('../lang/isPlainObject');\n\n /**\n * Mixes objects into the target object, recursively mixing existing child\n * objects.\n */\n function deepMixIn(target, objects) {\n var i = 0,\n n = arguments.length,\n obj;\n\n while(++i < n){\n obj = arguments[i];\n if (obj) {\n forOwn(obj, copyProp, target);\n }\n }\n\n return target;\n }\n\n function copyProp(val, key) {\n var existing = this[key];\n if (isPlainObject(val) && isPlainObject(existing)) {\n deepMixIn(existing, val);\n } else {\n this[key] = val;\n }\n }\n\n module.exports = deepMixIn;\n\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/object/deepMixIn.js\n ** module id = 12\n ** module chunks = 0\n **/","\n\n /**\n * Checks if the value is created by the `Object` constructor.\n */\n function isPlainObject(value) {\n return (!!value && typeof value === 'object' &&\n value.constructor === Object);\n }\n\n module.exports = isPlainObject;\n\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/lang/isPlainObject.js\n ** module id = 13\n ** module chunks = 0\n **/","var toString = require('../lang/toString');\nvar camelCase = require('./camelCase');\nvar upperCase = require('./upperCase');\n /**\n * camelCase + UPPERCASE first char\n */\n function pascalCase(str){\n str = toString(str);\n return camelCase(str).replace(/^[a-z]/, upperCase);\n }\n\n module.exports = pascalCase;\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/string/pascalCase.js\n ** module id = 14\n ** module chunks = 0\n **/","\n\n /**\n * Typecast a value to a String, using an empty string value for null or\n * undefined.\n */\n function toString(val){\n return val == null ? '' : val.toString();\n }\n\n module.exports = toString;\n\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/lang/toString.js\n ** module id = 15\n ** module chunks = 0\n **/","var toString = require('../lang/toString');\nvar replaceAccents = require('./replaceAccents');\nvar removeNonWord = require('./removeNonWord');\nvar upperCase = require('./upperCase');\nvar lowerCase = require('./lowerCase');\n /**\n * Convert string to camelCase text.\n */\n function camelCase(str){\n str = toString(str);\n str = replaceAccents(str);\n str = removeNonWord(str)\n .replace(/[\\-_]/g, ' ') //convert all hyphens and underscores to spaces\n .replace(/\\s[a-z]/g, upperCase) //convert first char of each word to UPPERCASE\n .replace(/\\s+/g, '') //remove spaces\n .replace(/^[A-Z]/g, lowerCase); //convert first char to lowercase\n return str;\n }\n module.exports = camelCase;\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/string/camelCase.js\n ** module id = 16\n ** module chunks = 0\n **/","var toString = require('../lang/toString');\n /**\n * Replaces all accented chars with regular ones\n */\n function replaceAccents(str){\n str = toString(str);\n\n // verifies if the String has accents and replace them\n if (str.search(/[\\xC0-\\xFF]/g) > -1) {\n str = str\n .replace(/[\\xC0-\\xC5]/g, \"A\")\n .replace(/[\\xC6]/g, \"AE\")\n .replace(/[\\xC7]/g, \"C\")\n .replace(/[\\xC8-\\xCB]/g, \"E\")\n .replace(/[\\xCC-\\xCF]/g, \"I\")\n .replace(/[\\xD0]/g, \"D\")\n .replace(/[\\xD1]/g, \"N\")\n .replace(/[\\xD2-\\xD6\\xD8]/g, \"O\")\n .replace(/[\\xD9-\\xDC]/g, \"U\")\n .replace(/[\\xDD]/g, \"Y\")\n .replace(/[\\xDE]/g, \"P\")\n .replace(/[\\xE0-\\xE5]/g, \"a\")\n .replace(/[\\xE6]/g, \"ae\")\n .replace(/[\\xE7]/g, \"c\")\n .replace(/[\\xE8-\\xEB]/g, \"e\")\n .replace(/[\\xEC-\\xEF]/g, \"i\")\n .replace(/[\\xF1]/g, \"n\")\n .replace(/[\\xF2-\\xF6\\xF8]/g, \"o\")\n .replace(/[\\xF9-\\xFC]/g, \"u\")\n .replace(/[\\xFE]/g, \"p\")\n .replace(/[\\xFD\\xFF]/g, \"y\");\n }\n return str;\n }\n module.exports = replaceAccents;\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/string/replaceAccents.js\n ** module id = 17\n ** module chunks = 0\n **/","var toString = require('../lang/toString');\n // This pattern is generated by the _build/pattern-removeNonWord.js script\n var PATTERN = /[^\\x20\\x2D0-9A-Z\\x5Fa-z\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF]/g;\n\n /**\n * Remove non-word chars.\n */\n function removeNonWord(str){\n str = toString(str);\n return str.replace(PATTERN, '');\n }\n\n module.exports = removeNonWord;\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/string/removeNonWord.js\n ** module id = 18\n ** module chunks = 0\n **/","var toString = require('../lang/toString');\n /**\n * \"Safer\" String.toUpperCase()\n */\n function upperCase(str){\n str = toString(str);\n return str.toUpperCase();\n }\n module.exports = upperCase;\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/string/upperCase.js\n ** module id = 19\n ** module chunks = 0\n **/","var toString = require('../lang/toString');\n /**\n * \"Safer\" String.toLowerCase()\n */\n function lowerCase(str){\n str = toString(str);\n return str.toLowerCase();\n }\n\n module.exports = lowerCase;\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/string/lowerCase.js\n ** module id = 20\n ** module chunks = 0\n **/","var indexOf = require('./indexOf');\n\n /**\n * Remove a single item from the array.\n * (it won't remove duplicates, just a single item)\n */\n function remove(arr, item){\n var idx = indexOf(arr, item);\n if (idx !== -1) arr.splice(idx, 1);\n }\n\n module.exports = remove;\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/array/remove.js\n ** module id = 21\n ** module chunks = 0\n **/","var slice = require('../array/slice');\n\n /**\n * Return a copy of the object, filtered to only have values for the whitelisted keys.\n */\n function pick(obj, var_keys){\n var keys = typeof arguments[1] !== 'string'? arguments[1] : slice(arguments, 1),\n out = {},\n i = 0, key;\n while (key = keys[i++]) {\n out[key] = obj[key];\n }\n return out;\n }\n\n module.exports = pick;\n\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/object/pick.js\n ** module id = 22\n ** module chunks = 0\n **/","var forOwn = require('./forOwn');\n\n /**\n * Get object keys\n */\n var keys = Object.keys || function (obj) {\n var keys = [];\n forOwn(obj, function(val, key){\n keys.push(key);\n });\n return keys;\n };\n\n module.exports = keys;\n\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/object/keys.js\n ** module id = 23\n ** module chunks = 0\n **/","\n\n /**\n * Merge sort (http://en.wikipedia.org/wiki/Merge_sort)\n */\n function mergeSort(arr, compareFn) {\n if (arr == null) {\n return [];\n } else if (arr.length < 2) {\n return arr;\n }\n\n if (compareFn == null) {\n compareFn = defaultCompare;\n }\n\n var mid, left, right;\n\n mid = ~~(arr.length / 2);\n left = mergeSort( arr.slice(0, mid), compareFn );\n right = mergeSort( arr.slice(mid, arr.length), compareFn );\n\n return merge(left, right, compareFn);\n }\n\n function defaultCompare(a, b) {\n return a < b ? -1 : (a > b? 1 : 0);\n }\n\n function merge(left, right, compareFn) {\n var result = [];\n\n while (left.length && right.length) {\n if (compareFn(left[0], right[0]) <= 0) {\n // if 0 it should preserve same order (stable)\n result.push(left.shift());\n } else {\n result.push(right.shift());\n }\n }\n\n if (left.length) {\n result.push.apply(result, left);\n }\n\n if (right.length) {\n result.push.apply(result, right);\n }\n\n return result;\n }\n\n module.exports = mergeSort;\n\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/array/sort.js\n ** module id = 24\n ** module chunks = 0\n **/","var isPrimitive = require('../lang/isPrimitive');\n\n /**\n * get \"nested\" object property\n */\n function get(obj, prop){\n var parts = prop.split('.'),\n last = parts.pop();\n\n while (prop = parts.shift()) {\n obj = obj[prop];\n if (obj == null) return;\n }\n\n return obj[last];\n }\n\n module.exports = get;\n\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/object/get.js\n ** module id = 25\n ** module chunks = 0\n **/","\n\n /**\n * Checks if the object is a primitive\n */\n function isPrimitive(value) {\n // Using switch fallthrough because it's simple to read and is\n // generally fast: http://jsperf.com/testing-value-is-primitive/5\n switch (typeof value) {\n case \"string\":\n case \"number\":\n case \"boolean\":\n return true;\n }\n\n return value == null;\n }\n\n module.exports = isPrimitive;\n\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/lang/isPrimitive.js\n ** module id = 26\n ** module chunks = 0\n **/","var namespace = require('./namespace');\n\n /**\n * set \"nested\" object property\n */\n function set(obj, prop, val){\n var parts = (/^(.+)\\.(.+)$/).exec(prop);\n if (parts){\n namespace(obj, parts[1])[parts[2]] = val;\n } else {\n obj[prop] = val;\n }\n }\n\n module.exports = set;\n\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/object/set.js\n ** module id = 27\n ** module chunks = 0\n **/","var forEach = require('../array/forEach');\n\n /**\n * Create nested object if non-existent\n */\n function namespace(obj, path){\n if (!path) return obj;\n forEach(path.split('.'), function(key){\n if (!obj[key]) {\n obj[key] = {};\n }\n obj = obj[key];\n });\n return obj;\n }\n\n module.exports = namespace;\n\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/object/namespace.js\n ** module id = 28\n ** module chunks = 0\n **/","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n// Modifications\n// Copyright 2014-2015 Jason Dobry\n//\n// Summary of modifications:\n// Fixed use of \"delete\" keyword for IE8 compatibility\n// Exposed diffObjectFromOldObject on the exported object\n// Added the \"equals\" argument to diffObjectFromOldObject to be used to check equality\n// Added a way in diffObjectFromOldObject to ignore changes to certain properties\n// Removed all code related to:\n// - ArrayObserver\n// - ArraySplice\n// - PathObserver\n// - CompoundObserver\n// - Path\n// - ObserverTransform\n\n(function(global) {\n var testingExposeCycleCount = global.testingExposeCycleCount;\n\n // Detect and do basic sanity checking on Object/Array.observe.\n function detectObjectObserve() {\n if (typeof Object.observe !== 'function' ||\n typeof Array.observe !== 'function') {\n return false;\n }\n\n var records = [];\n\n function callback(recs) {\n records = recs;\n }\n\n var test = {};\n var arr = [];\n Object.observe(test, callback);\n Array.observe(arr, callback);\n test.id = 1;\n test.id = 2;\n delete test.id;\n arr.push(1, 2);\n arr.length = 0;\n\n Object.deliverChangeRecords(callback);\n if (records.length !== 5)\n return false;\n\n if (records[0].type != 'add' ||\n records[1].type != 'update' ||\n records[2].type != 'delete' ||\n records[3].type != 'splice' ||\n records[4].type != 'splice') {\n return false;\n }\n\n Object.unobserve(test, callback);\n Array.unobserve(arr, callback);\n\n return true;\n }\n\n var hasObserve = detectObjectObserve();\n\n var createObject = ('__proto__' in {}) ?\n function(obj) { return obj; } :\n function(obj) {\n var proto = obj.__proto__;\n if (!proto)\n return obj;\n var newObject = Object.create(proto);\n Object.getOwnPropertyNames(obj).forEach(function(name) {\n Object.defineProperty(newObject, name,\n Object.getOwnPropertyDescriptor(obj, name));\n });\n return newObject;\n };\n\n var MAX_DIRTY_CHECK_CYCLES = 1000;\n\n function dirtyCheck(observer) {\n var cycles = 0;\n while (cycles < MAX_DIRTY_CHECK_CYCLES && observer.check_()) {\n cycles++;\n }\n if (testingExposeCycleCount)\n global.dirtyCheckCycleCount = cycles;\n\n return cycles > 0;\n }\n\n function objectIsEmpty(object) {\n for (var prop in object)\n return false;\n return true;\n }\n\n function diffIsEmpty(diff) {\n return objectIsEmpty(diff.added) &&\n objectIsEmpty(diff.removed) &&\n objectIsEmpty(diff.changed);\n }\n\n function isBlacklisted(prop, bl) {\n if (!bl || !bl.length) {\n return false;\n }\n var matches;\n for (var i = 0; i < bl.length; i++) {\n if ((Object.prototype.toString.call(bl[i]) === '[object RegExp]' && bl[i].test(prop)) || bl[i] === prop) {\n return matches = prop;\n }\n }\n return !!matches;\n }\n\n function diffObjectFromOldObject(object, oldObject, equals, bl) {\n var added = {};\n var removed = {};\n var changed = {};\n\n for (var prop in oldObject) {\n var newValue = object[prop];\n\n if (isBlacklisted(prop, bl))\n continue;\n\n if (newValue !== undefined && (equals ? equals(newValue, oldObject[prop]) : newValue === oldObject[prop]))\n continue;\n\n if (!(prop in object)) {\n removed[prop] = undefined;\n continue;\n }\n\n if (equals ? !equals(newValue, oldObject[prop]) : newValue !== oldObject[prop])\n changed[prop] = newValue;\n }\n\n for (var prop in object) {\n if (prop in oldObject)\n continue;\n\n if (isBlacklisted(prop, bl))\n continue;\n\n added[prop] = object[prop];\n }\n\n if (Array.isArray(object) && object.length !== oldObject.length)\n changed.length = object.length;\n\n return {\n added: added,\n removed: removed,\n changed: changed\n };\n }\n\n var eomTasks = [];\n function runEOMTasks() {\n if (!eomTasks.length)\n return false;\n\n for (var i = 0; i < eomTasks.length; i++) {\n eomTasks[i]();\n }\n eomTasks.length = 0;\n return true;\n }\n\n var runEOM = hasObserve ? (function(){\n return function(fn) {\n return Promise.resolve().then(fn);\n }\n })() :\n (function() {\n return function(fn) {\n eomTasks.push(fn);\n };\n })();\n\n var observedObjectCache = [];\n\n function newObservedObject() {\n var observer;\n var object;\n var discardRecords = false;\n var first = true;\n\n function callback(records) {\n if (observer && observer.state_ === OPENED && !discardRecords)\n observer.check_(records);\n }\n\n return {\n open: function(obs) {\n if (observer)\n throw Error('ObservedObject in use');\n\n if (!first)\n Object.deliverChangeRecords(callback);\n\n observer = obs;\n first = false;\n },\n observe: function(obj, arrayObserve) {\n object = obj;\n if (arrayObserve)\n Array.observe(object, callback);\n else\n Object.observe(object, callback);\n },\n deliver: function(discard) {\n discardRecords = discard;\n Object.deliverChangeRecords(callback);\n discardRecords = false;\n },\n close: function() {\n observer = undefined;\n Object.unobserve(object, callback);\n observedObjectCache.push(this);\n }\n };\n }\n\n function getObservedObject(observer, object, arrayObserve) {\n var dir = observedObjectCache.pop() || newObservedObject();\n dir.open(observer);\n dir.observe(object, arrayObserve);\n return dir;\n }\n\n var UNOPENED = 0;\n var OPENED = 1;\n var CLOSED = 2;\n\n var nextObserverId = 1;\n\n function Observer() {\n this.state_ = UNOPENED;\n this.callback_ = undefined;\n this.target_ = undefined; // TODO(rafaelw): Should be WeakRef\n this.directObserver_ = undefined;\n this.value_ = undefined;\n this.id_ = nextObserverId++;\n }\n\n Observer.prototype = {\n open: function(callback, target) {\n if (this.state_ != UNOPENED)\n throw Error('Observer has already been opened.');\n\n addToAll(this);\n this.callback_ = callback;\n this.target_ = target;\n this.connect_();\n this.state_ = OPENED;\n return this.value_;\n },\n\n close: function() {\n if (this.state_ != OPENED)\n return;\n\n removeFromAll(this);\n this.disconnect_();\n this.value_ = undefined;\n this.callback_ = undefined;\n this.target_ = undefined;\n this.state_ = CLOSED;\n },\n\n deliver: function() {\n if (this.state_ != OPENED)\n return;\n\n dirtyCheck(this);\n },\n\n report_: function(changes) {\n try {\n this.callback_.apply(this.target_, changes);\n } catch (ex) {\n Observer._errorThrownDuringCallback = true;\n console.error('Exception caught during observer callback: ' +\n (ex.stack || ex));\n }\n },\n\n discardChanges: function() {\n this.check_(undefined, true);\n return this.value_;\n }\n }\n\n var collectObservers = !hasObserve;\n var allObservers;\n Observer._allObserversCount = 0;\n\n if (collectObservers) {\n allObservers = [];\n }\n\n function addToAll(observer) {\n Observer._allObserversCount++;\n if (!collectObservers)\n return;\n\n allObservers.push(observer);\n }\n\n function removeFromAll(observer) {\n Observer._allObserversCount--;\n }\n\n var runningMicrotaskCheckpoint = false;\n\n global.Platform = global.Platform || {};\n\n global.Platform.performMicrotaskCheckpoint = function() {\n if (runningMicrotaskCheckpoint)\n return;\n\n if (!collectObservers)\n return;\n\n runningMicrotaskCheckpoint = true;\n\n var cycles = 0;\n var anyChanged, toCheck;\n\n do {\n cycles++;\n toCheck = allObservers;\n allObservers = [];\n anyChanged = false;\n\n for (var i = 0; i < toCheck.length; i++) {\n var observer = toCheck[i];\n if (observer.state_ != OPENED)\n continue;\n\n if (observer.check_())\n anyChanged = true;\n\n allObservers.push(observer);\n }\n if (runEOMTasks())\n anyChanged = true;\n } while (cycles < MAX_DIRTY_CHECK_CYCLES && anyChanged);\n\n if (testingExposeCycleCount)\n global.dirtyCheckCycleCount = cycles;\n\n runningMicrotaskCheckpoint = false;\n };\n\n if (collectObservers) {\n global.Platform.clearObservers = function() {\n allObservers = [];\n };\n }\n\n function ObjectObserver(object) {\n Observer.call(this);\n this.value_ = object;\n this.oldObject_ = undefined;\n }\n\n ObjectObserver.prototype = createObject({\n __proto__: Observer.prototype,\n\n arrayObserve: false,\n\n connect_: function(callback, target) {\n if (hasObserve) {\n this.directObserver_ = getObservedObject(this, this.value_,\n this.arrayObserve);\n } else {\n this.oldObject_ = this.copyObject(this.value_);\n }\n\n },\n\n copyObject: function(object) {\n var copy = Array.isArray(object) ? [] : {};\n for (var prop in object) {\n copy[prop] = object[prop];\n };\n if (Array.isArray(object))\n copy.length = object.length;\n return copy;\n },\n\n check_: function(changeRecords, skipChanges) {\n var diff;\n var oldValues;\n if (hasObserve) {\n if (!changeRecords)\n return false;\n\n oldValues = {};\n diff = diffObjectFromChangeRecords(this.value_, changeRecords,\n oldValues);\n } else {\n oldValues = this.oldObject_;\n diff = diffObjectFromOldObject(this.value_, this.oldObject_);\n }\n\n if (diffIsEmpty(diff))\n return false;\n\n if (!hasObserve)\n this.oldObject_ = this.copyObject(this.value_);\n\n this.report_([\n diff.added || {},\n diff.removed || {},\n diff.changed || {},\n function(property) {\n return oldValues[property];\n }\n ]);\n\n return true;\n },\n\n disconnect_: function() {\n if (hasObserve) {\n this.directObserver_.close();\n this.directObserver_ = undefined;\n } else {\n this.oldObject_ = undefined;\n }\n },\n\n deliver: function() {\n if (this.state_ != OPENED)\n return;\n\n if (hasObserve)\n this.directObserver_.deliver(false);\n else\n dirtyCheck(this);\n },\n\n discardChanges: function() {\n if (this.directObserver_)\n this.directObserver_.deliver(true);\n else\n this.oldObject_ = this.copyObject(this.value_);\n\n return this.value_;\n }\n });\n\n var observerSentinel = {};\n\n var expectedRecordTypes = {\n add: true,\n update: true,\n 'delete': true\n };\n\n function diffObjectFromChangeRecords(object, changeRecords, oldValues) {\n var added = {};\n var removed = {};\n\n for (var i = 0; i < changeRecords.length; i++) {\n var record = changeRecords[i];\n if (!expectedRecordTypes[record.type]) {\n console.error('Unknown changeRecord type: ' + record.type);\n console.error(record);\n continue;\n }\n\n if (!(record.name in oldValues))\n oldValues[record.name] = record.oldValue;\n\n if (record.type == 'update')\n continue;\n\n if (record.type == 'add') {\n if (record.name in removed)\n delete removed[record.name];\n else\n added[record.name] = true;\n\n continue;\n }\n\n // type = 'delete'\n if (record.name in added) {\n delete added[record.name];\n delete oldValues[record.name];\n } else {\n removed[record.name] = true;\n }\n }\n\n for (var prop in added)\n added[prop] = object[prop];\n\n for (var prop in removed)\n removed[prop] = undefined;\n\n var changed = {};\n for (var prop in oldValues) {\n if (prop in added || prop in removed)\n continue;\n\n var newValue = object[prop];\n if (oldValues[prop] !== newValue)\n changed[prop] = newValue;\n }\n\n return {\n added: added,\n removed: removed,\n changed: changed\n };\n }\n\n // Export the observe-js object for **Node.js**, with backwards-compatibility\n // for the old `require()` API. Also ensure `exports` is not a DOM Element.\n // If we're in the browser, export as a global object.\n\n global.Observer = Observer;\n global.isBlacklisted = isBlacklisted;\n global.Observer.runEOM_ = runEOM;\n global.Observer.observerSentinel_ = observerSentinel; // for testing.\n global.Observer.hasObjectObserve = hasObserve;\n global.diffObjectFromOldObject = diffObjectFromOldObject;\n global.ObjectObserver = ObjectObserver;\n\n})(exports);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./lib/observe-js/observe.js\n ** module id = 29\n ** module chunks = 0\n **/","var randHex = require('./randHex');\nvar choice = require('./choice');\n\n /**\n * Returns pseudo-random guid (UUID v4)\n * IMPORTANT: it's not totally \"safe\" since randHex/choice uses Math.random\n * by default and sequences can be predicted in some cases. See the\n * \"random/random\" documentation for more info about it and how to replace\n * the default PRNG.\n */\n function guid() {\n return (\n randHex(8)+'-'+\n randHex(4)+'-'+\n // v4 UUID always contain \"4\" at this position to specify it was\n // randomly generated\n '4' + randHex(3) +'-'+\n // v4 UUID always contain chars [a,b,8,9] at this position\n choice(8, 9, 'a', 'b') + randHex(3)+'-'+\n randHex(12)\n );\n }\n module.exports = guid;\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/random/guid.js\n ** module id = 30\n ** module chunks = 0\n **/","var choice = require('./choice');\n\n var _chars = '0123456789abcdef'.split('');\n\n /**\n * Returns a random hexadecimal string\n */\n function randHex(size){\n size = size && size > 0? size : 6;\n var str = '';\n while (size--) {\n str += choice(_chars);\n }\n return str;\n }\n\n module.exports = randHex;\n\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/random/randHex.js\n ** module id = 31\n ** module chunks = 0\n **/","var randInt = require('./randInt');\nvar isArray = require('../lang/isArray');\n\n /**\n * Returns a random element from the supplied arguments\n * or from the array (if single argument is an array).\n */\n function choice(items) {\n var target = (arguments.length === 1 && isArray(items))? items : arguments;\n return target[ randInt(0, target.length - 1) ];\n }\n\n module.exports = choice;\n\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/random/choice.js\n ** module id = 32\n ** module chunks = 0\n **/","var MIN_INT = require('../number/MIN_INT');\nvar MAX_INT = require('../number/MAX_INT');\nvar rand = require('./rand');\n\n /**\n * Gets random integer inside range or snap to min/max values.\n */\n function randInt(min, max){\n min = min == null? MIN_INT : ~~min;\n max = max == null? MAX_INT : ~~max;\n // can't be max + 0.5 otherwise it will round up if `rand`\n // returns `max` causing it to overflow range.\n // -0.5 and + 0.49 are required to avoid bias caused by rounding\n return Math.round( rand(min - 0.5, max + 0.499999999999) );\n }\n\n module.exports = randInt;\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/random/randInt.js\n ** module id = 33\n ** module chunks = 0\n **/","/**\n * @constant Minimum 32-bit signed integer value (-2^31).\n */\n\n module.exports = -2147483648;\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/number/MIN_INT.js\n ** module id = 34\n ** module chunks = 0\n **/","/**\n * @constant Maximum 32-bit signed integer value. (2^31 - 1)\n */\n\n module.exports = 2147483647;\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/number/MAX_INT.js\n ** module id = 35\n ** module chunks = 0\n **/","var random = require('./random');\nvar MIN_INT = require('../number/MIN_INT');\nvar MAX_INT = require('../number/MAX_INT');\n\n /**\n * Returns random number inside range\n */\n function rand(min, max){\n min = min == null? MIN_INT : min;\n max = max == null? MAX_INT : max;\n return min + (max - min) * random();\n }\n\n module.exports = rand;\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/random/rand.js\n ** module id = 36\n ** module chunks = 0\n **/","\n\n /**\n * Just a wrapper to Math.random. No methods inside mout/random should call\n * Math.random() directly so we can inject the pseudo-random number\n * generator if needed (ie. in case we need a seeded random or a better\n * algorithm than the native one)\n */\n function random(){\n return random.get();\n }\n\n // we expose the method so it can be swapped if needed\n random.get = Math.random;\n\n module.exports = random;\n\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/random/random.js\n ** module id = 37\n ** module chunks = 0\n **/","var isKind = require('./isKind');\n /**\n */\n var isArray = Array.isArray || function (val) {\n return isKind(val, 'Array');\n };\n module.exports = isArray;\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/lang/isArray.js\n ** module id = 38\n ** module chunks = 0\n **/","var kindOf = require('./kindOf');\n /**\n * Check if value is from a specific \"kind\".\n */\n function isKind(val, kind){\n return kindOf(val) === kind;\n }\n module.exports = isKind;\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/lang/isKind.js\n ** module id = 39\n ** module chunks = 0\n **/","\n\n var _rKind = /^\\[object (.*)\\]$/,\n _toString = Object.prototype.toString,\n UNDEF;\n\n /**\n * Gets the \"kind\" of value. (e.g. \"String\", \"Number\", etc)\n */\n function kindOf(val) {\n if (val === null) {\n return 'Null';\n } else if (val === UNDEF) {\n return 'Undefined';\n } else {\n return _rKind.exec( _toString.call(val) )[1];\n }\n }\n module.exports = kindOf;\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mout/lang/kindOf.js\n ** module id = 40\n ** module chunks = 0\n **/","import DSUtils from '../../utils'\nimport DSErrors from '../../errors'\n\nlet {NER, IA, R} = DSErrors\nconst fakeId = `DS_${new Date().getTime()}`\n\nfunction diffIsEmpty (diff) {\n return !(DSUtils.isEmpty(diff.added) &&\n DSUtils.isEmpty(diff.removed) &&\n DSUtils.isEmpty(diff.changed))\n}\n\nfunction check (fnName, resourceName, id, options) {\n let _this = this\n let definition = _this.definitions[resourceName]\n options = options || {}\n\n id = DSUtils.resolveId(definition, id)\n if (!definition) {\n throw new NER(resourceName)\n } else if (!DSUtils._sn(id)) {\n throw DSUtils._snErr('id')\n }\n id = id === fakeId ? undefined : id\n\n options = DSUtils._(definition, options)\n\n options.logFn(fnName, id, options)\n\n return {_this, definition, _resourceName: resourceName, _id: id, _options: options}\n}\n\nexport default {\n // Return the changes for the given item, if any.\n //\n // @param resourceName The name of the type of resource of the item whose changes are to be returned.\n // @param id The primary key of the item whose changes are to be returned.\n // @param options Optional configuration.\n // @param options.ignoredChanges Array of strings or regular expressions of fields, the changes of which are to be ignored.\n // @returns The changes of the given item, if any.\n changes (resourceName, id, options) {\n let {_this, definition, _resourceName, _id, _options} = check.call(this, 'changes', resourceName, id, options)\n\n let item = definition.get(_id)\n if (item) {\n let observer = _this.store[_resourceName].observers[_id]\n if (observer && typeof observer === 'function') {\n // force observation handler to be fired for item if there are changes and `Object.observe` is not available\n observer.deliver()\n }\n\n let ignoredChanges = DSUtils.copy(_options.ignoredChanges || [])\n // add linked relations to list of ignored changes\n DSUtils.forEach(definition.relationFields, function (field) {\n if (!DSUtils.contains(ignoredChanges, field)) {\n ignoredChanges.push(field)\n }\n })\n // calculate changes\n let diff = DSUtils.diffObjectFromOldObject(item, _this.store[_resourceName].previousAttributes[_id], DSUtils.equals, ignoredChanges)\n // remove functions from diff\n DSUtils.forOwn(diff, function (changeset, name) {\n let toKeep = []\n DSUtils.forOwn(changeset, function (value, field) {\n if (!DSUtils.isFunction(value)) {\n toKeep.push(field)\n }\n })\n diff[name] = DSUtils.pick(diff[name], toKeep)\n })\n // definitely ignore changes to linked relations\n DSUtils.forEach(definition.relationFields, function (field) {\n delete diff.added[field]\n delete diff.removed[field]\n delete diff.changed[field]\n })\n return diff\n }\n },\n\n // Return the change history of the given item, if any.\n //\n // @param resourceName The name of the type of resource of the item whose change history is to be returned.\n // @param id The primary key of the item whose change history is to be returned.\n // @returns The change history of the given item, if any.\n changeHistory (resourceName, id) {\n let {_this, definition, _resourceName, _id} = check.call(this, 'changeHistory', resourceName, id || fakeId)\n let resource = _this.store[_resourceName]\n\n if (!definition.keepChangeHistory) {\n definition.errorFn('changeHistory is disabled for this resource!')\n } else {\n if (_resourceName) {\n let item = definition.get(_id)\n if (item) {\n return resource.changeHistories[_id]\n }\n } else {\n return resource.changeHistory\n }\n }\n },\n\n commit (resourceName, id) {\n let {_this, definition, _resourceName, _id} = check.call(this, 'commit', resourceName, id)\n let resource = _this.store[_resourceName]\n let item = _this.store[_resourceName].index[_id]\n if (item) {\n const relationFields = definition.relationFields || []\n const previousAttributes = {}\n for (let key in item) {\n if (relationFields.indexOf(key) === -1) {\n previousAttributes[key] = DSUtils.copy(item[key], null, null, null, [])\n }\n }\n resource.previousAttributes[_id] = previousAttributes\n }\n\n if (resource.changeHistories[_id].length) {\n DSUtils.forEach(resource.changeHistories[_id], function (changeRecord) {\n DSUtils.remove(resource.changeHistory, changeRecord)\n })\n resource.changeHistories[_id].splice(0, resource.changeHistories[_id].length)\n }\n return item\n },\n\n // Re-compute the computed properties of the given item.\n //\n // @param resourceName The name of the type of resource of the item whose computed properties are to be re-computed.\n // @param instance The instance whose computed properties are to be re-computed.\n // @returns The item whose computed properties were re-computed.\n compute (resourceName, instance) {\n let _this = this\n let definition = _this.definitions[resourceName]\n\n instance = DSUtils.resolveItem(_this.store[resourceName], instance)\n if (!definition) {\n throw new NER(resourceName)\n } else if (!instance) {\n throw new R('Item not in the store!')\n } else if (!DSUtils._o(instance) && !DSUtils._sn(instance)) {\n throw new IA('\"instance\" must be an object, string or number!')\n }\n\n definition.logFn('compute', instance)\n\n // re-compute all computed properties\n DSUtils.forOwn(definition.computed, function (fn, field) {\n DSUtils.compute.call(instance, fn, field)\n })\n return instance\n },\n\n // Factory function to create an instance of the specified Resource.\n //\n // @param resourceName The name of the type of resource of which to create an instance.\n // @param attrs Hash of properties with which to initialize the instance.\n // @param options Optional configuration.\n // @param options.defaultValues Default values with which to initialize the instance.\n // @returns The new instance.\n createInstance (resourceName, attrs, options) {\n let definition = this.definitions[resourceName]\n let item\n\n attrs = attrs || {}\n\n if (!definition) {\n throw new NER(resourceName)\n } else if (attrs && !DSUtils.isObject(attrs)) {\n throw new IA('\"attrs\" must be an object!')\n }\n\n options = DSUtils._(definition, options)\n\n const relationList = definition.relationList || []\n if (relationList.length) {\n DSUtils.forEach(relationList, function (def) {\n const relationData = DSUtils.get(attrs, def.localField)\n if (relationData) {\n if (DSUtils.isArray(relationData)) {\n const array = []\n const Resource = definition.getResource(def.relation)\n const _options = options.orig()\n DSUtils.forEach(relationData, function (relationDataItem) {\n array.push(Resource.createInstance(relationDataItem, _options))\n })\n DSUtils.set(attrs, def.localField, array)\n } else if (DSUtils.isObject(relationData)) {\n DSUtils.set(attrs, def.localField, definition.getResource(def.relation).createInstance(relationData, options.orig()))\n }\n }\n })\n }\n\n options.logFn('createInstance', attrs, options)\n\n // lifecycle\n options.beforeCreateInstance(options, attrs)\n\n // grab instance constructor function from Resource definition\n let Constructor = definition[definition.class]\n\n // create instance\n item = new Constructor()\n\n if (definition.instanceEvents) {\n DSUtils.Events(item)\n }\n\n // add default values\n if (options.defaultValues) {\n DSUtils.deepMixIn(item, DSUtils.copy(options.defaultValues))\n }\n DSUtils.deepMixIn(item, attrs)\n\n // compute computed properties\n if (definition.computed) {\n definition.compute(item)\n }\n // lifecycle\n options.afterCreateInstance(options, item)\n return item\n },\n\n // Create a new collection of the specified Resource.\n //\n // @param resourceName The name of the type of resource of which to create a collection\n // @param arr Possibly empty array of data from which to create the collection.\n // @param params The criteria by which to filter items. Will be passed to `DS#findAll` if `fetch` is called. See http://www.js-data.io/docs/query-syntax\n // @param options Optional configuration.\n // @param options.notify Whether to call the beforeCreateCollection and afterCreateCollection lifecycle hooks..\n // @returns The new collection.\n createCollection (resourceName, arr, params, options) {\n let _this = this\n let definition = _this.definitions[resourceName]\n\n arr = arr || []\n params = params || {}\n\n if (!definition) {\n throw new NER(resourceName)\n } else if (arr && !DSUtils.isArray(arr)) {\n throw new IA('\"arr\" must be an array!')\n }\n\n options = DSUtils._(definition, options)\n\n options.logFn('createCollection', arr, options)\n\n // lifecycle\n options.beforeCreateCollection(options, arr)\n\n // define the API for this collection\n Object.defineProperties(arr, {\n // Call DS#findAll with the params of this collection, filling the collection with the results.\n fetch: {\n value: function (params, options) {\n let __this = this\n __this.params = params || __this.params\n return definition.findAll(__this.params, options).then(function (data) {\n if (data === __this) {\n return __this\n }\n data.unshift(__this.length)\n data.unshift(0)\n __this.splice.apply(__this, data)\n data.shift()\n data.shift()\n if (data.$$injected) {\n _this.store[resourceName].queryData[DSUtils.toJson(__this.params)] = __this\n __this.$$injected = true\n }\n return __this\n })\n }\n },\n // params for this collection. See http://www.js-data.io/docs/query-syntax\n params: {\n value: params,\n writable: true\n },\n // name of the resource type of this collection\n resourceName: {\n value: resourceName\n }\n })\n\n // lifecycle\n options.afterCreateCollection(options, arr)\n return arr\n },\n defineResource: require('./defineResource'),\n digest () {\n this.observe.Platform.performMicrotaskCheckpoint()\n },\n eject: require('./eject'),\n ejectAll: require('./ejectAll'),\n filter: require('./filter'),\n\n // Return the item with the given primary key if its in the store.\n //\n // @param resourceName The name of the type of resource of the item to retrieve.\n // @param id The primary key of the item to retrieve.\n // @returns The item with the given primary key if it's in the store.\n // /\n get (resourceName, id) {\n let {_this, _resourceName, _id} = check.call(this, 'get', resourceName, id)\n\n // return the item if it exists\n return _this.store[_resourceName].index[_id]\n },\n\n // Return the items in the store that have the given primary keys.\n //\n // @param resourceName The name of the type of resource of the items to retrieve.\n // @param ids The primary keys of the items to retrieve.\n // @returns The items with the given primary keys if they're in the store.\n getAll (resourceName, ids) {\n let _this = this\n let definition = _this.definitions[resourceName]\n let resource = _this.store[resourceName]\n let collection = []\n\n if (!definition) {\n throw new NER(resourceName)\n } else if (ids && !DSUtils._a(ids)) {\n throw DSUtils._aErr('ids')\n }\n\n definition.logFn('getAll', ids)\n\n if (DSUtils._a(ids)) {\n // return just the items with the given primary keys\n let length = ids.length\n for (var i = 0; i < length; i++) {\n if (resource.index[ids[i]]) {\n collection.push(resource.index[ids[i]])\n }\n }\n } else {\n // most efficient of retrieving ALL items from the store\n collection = resource.collection.slice()\n }\n\n return collection\n },\n\n // Return the whether the item with the given primary key has any changes.\n //\n // @param resourceName The name of the type of resource of the item.\n // @param id The primary key of the item.\n // @returns Whether the item with the given primary key has any changes.\n hasChanges (resourceName, id) {\n let {definition, _id} = check.call(this, 'hasChanges', resourceName, id)\n\n return definition.get(_id) ? diffIsEmpty(definition.changes(_id)) : false\n },\n inject: require('./inject'),\n\n // Return whether the item with the given primary key is a temporary item.\n //\n // @param resourceName The name of the type of resource of the item.\n // @param id The primary key of the item.\n // @returns Whether the item with the given primary key is a temporary item.\n isNew (resourceName, id) {\n let {_this, _resourceName, _id} = check.call(this, 'isNew', resourceName, id || fakeId)\n let resource = _this.store[_resourceName]\n\n return !!resource.temporaryItems[_id]\n },\n\n // Return the timestamp from the last time the item with the given primary key was changed.\n //\n // @param resourceName The name of the type of resource of the item.\n // @param id The primary key of the item.\n // @returns Timestamp from the last time the item was changed.\n lastModified (resourceName, id) {\n let {_this, _resourceName, _id} = check.call(this, 'lastModified', resourceName, id || fakeId)\n let resource = _this.store[_resourceName]\n\n if (_id) {\n if (!(_id in resource.modified)) {\n resource.modified[_id] = 0\n }\n return resource.modified[_id]\n }\n return resource.collectionModified\n },\n\n // Return the timestamp from the last time the item with the given primary key was saved via an adapter.\n //\n // @param resourceName The name of the type of resource of the item.\n // @param id The primary key of the item.\n // @returns Timestamp from the last time the item was saved.\n lastSaved (resourceName, id) {\n let {_this, _resourceName, _id} = check.call(this, 'lastSaved', resourceName, id || fakeId)\n let resource = _this.store[_resourceName]\n\n if (!(_id in resource.saved)) {\n resource.saved[_id] = 0\n }\n return resource.saved[_id]\n },\n\n // Return the previous attributes of the item with the given primary key before it was changed.\n //\n // @param resourceName The name of the type of resource of the item.\n // @param id The primary key of the item.\n // @returns The previous attributes of the item\n previous (resourceName, id) {\n let {_this, _resourceName, _id} = check.call(this, 'previous', resourceName, id)\n let resource = _this.store[_resourceName]\n\n // return resource from cache\n return resource.previousAttributes[_id] ? DSUtils.copy(resource.previousAttributes[_id]) : undefined\n },\n\n // Revert all attributes of the item with the given primary key to their previous values.\n //\n // @param resourceName The name of the type of resource of the item.\n // @param id The primary key of the item.\n // @param options Optional configuration.\n // @returns The reverted item\n revert (resourceName, id, options) {\n let {_this, definition, _resourceName, _id, _options} = check.call(this, 'revert', resourceName, id, options)\n\n let preserve = _options.preserve || []\n let injectObj = {}\n\n if (preserve.length === 0) {\n injectObj = _this.previous(_resourceName, _id)\n } else {\n let instance = definition.get(id)\n let previousInstance = _this.previous(_resourceName, _id)\n\n if (!instance) { return }\n\n DSUtils.forOwn(instance, function (value, key) {\n if (DSUtils.contains(preserve, key)) {\n injectObj[key] = instance[key]\n } else {\n injectObj[key] = previousInstance[key]\n }\n })\n }\n\n return definition.inject(injectObj, {\n onConflict: 'replace'\n })\n }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/datastore/sync_methods/index.js\n **/","/* jshint evil:true, loopfunc:true */\nimport DSUtils from '../../utils'\nimport DSErrors from '../../errors'\n\n/**\n * These are DS methods that will be proxied by instances. e.g.\n *\n * var store = new JSData.DS()\n * var User = store.defineResource('user')\n * var user = User.createInstance({ id: 1 })\n *\n * store.update(resourceName, id, attrs[, options]) // DS method\n * User.update(id, attrs[, options]) // DS method proxied on a Resource\n * user.DSUpdate(attrs[, options]) // DS method proxied on an Instance\n */\nlet instanceMethods = [\n 'compute',\n 'eject',\n 'refresh',\n 'save',\n 'update',\n 'destroy',\n 'loadRelations',\n 'changeHistory',\n 'changes',\n 'commit',\n 'hasChanges',\n 'isNew',\n 'lastModified',\n 'lastSaved',\n 'previous',\n 'revert'\n]\n\nmodule.exports = function defineResource (definition) {\n let _this = this\n let definitions = _this.definitions\n\n /**\n * This allows the name-only definition shorthand.\n * store.defineResource('user') is the same as store.defineResource({ name: 'user'})\n */\n if (DSUtils._s(definition)) {\n definition = {\n name: definition.replace(/\\s/gi, '')\n }\n }\n if (!DSUtils._o(definition)) {\n throw DSUtils._oErr('definition')\n } else if (!DSUtils._s(definition.name)) {\n throw new DSErrors.IA('\"name\" must be a string!')\n } else if (definitions[definition.name]) {\n throw new DSErrors.R(`${definition.name} is already registered!`)\n }\n\n /**\n * Dynamic Resource constructor function.\n *\n * A Resource inherits from the defaults of the data store that created it.\n */\n function Resource (options) {\n this.defaultValues = {}\n this.methods = {}\n this.computed = {}\n this.scopes = {}\n this.actions = {}\n DSUtils.deepMixIn(this, options)\n let parent = _this.defaults\n if (definition.extends && definitions[definition.extends]) {\n parent = definitions[definition.extends]\n }\n DSUtils.fillIn(this.defaultValues, parent.defaultValues)\n DSUtils.fillIn(this.methods, parent.methods)\n DSUtils.fillIn(this.computed, parent.computed)\n DSUtils.fillIn(this.scopes, parent.scopes)\n DSUtils.fillIn(this.actions, parent.actions)\n this.endpoint = ('endpoint' in options) ? options.endpoint : this.name\n }\n\n try {\n // Resources can inherit from another resource instead of inheriting directly from the data store defaults.\n if (definition.extends && definitions[definition.extends]) {\n // Inherit from another resource\n Resource.prototype = definitions[definition.extends]\n } else {\n // Inherit from global defaults\n Resource.prototype = _this.defaults\n }\n definitions[definition.name] = new Resource(definition)\n\n var def = definitions[definition.name]\n\n def.getResource = function (resourceName) { return _this.definitions[resourceName] }\n\n def.logFn('Preparing resource.')\n\n if (!DSUtils._s(def.idAttribute)) {\n throw new DSErrors.IA('\"idAttribute\" must be a string!')\n }\n\n // Setup nested parent configuration\n if (def.relations) {\n def.relationList = []\n def.relationFields = []\n DSUtils.forOwn(def.relations, function (relatedModels, type) {\n DSUtils.forOwn(relatedModels, function (defs, relationName) {\n if (!DSUtils._a(defs)) {\n relatedModels[relationName] = [defs]\n }\n DSUtils.forEach(relatedModels[relationName], function (d) {\n d.type = type\n d.relation = relationName\n d.name = def.name\n def.relationList.push(d)\n if (d.localField) {\n def.relationFields.push(d.localField)\n }\n })\n })\n })\n if (def.relations.belongsTo) {\n def.parents = {}\n DSUtils.forOwn(def.relations.belongsTo, function (relatedModel, modelName) {\n DSUtils.forEach(relatedModel, function (relation) {\n if (relation.parent) {\n def.parent = modelName\n def.parentKey = relation.localKey\n def.parentField = relation.localField\n def.parents[modelName] = {\n key: def.parentKey,\n field: def.parentField\n }\n }\n })\n })\n }\n if (typeof Object.freeze === 'function') {\n Object.freeze(def.relations)\n Object.freeze(def.relationList)\n }\n }\n\n // Create the wrapper class for the new resource\n var _class = def['class'] = DSUtils.pascalCase(def.name)\n try {\n if (typeof def.useClass === 'function') {\n if (def.csp) {\n def[_class] = function () { def.useClass.call(this) }\n } else {\n def[_class] = new Function('def', `return function ${_class}() { def.useClass.call(this); }`)(def) // eslint-disable-line\n }\n def[_class].prototype = (function (proto) {\n function Ctor () {\n }\n\n Ctor.prototype = proto\n return new Ctor()\n })(def.useClass.prototype)\n } else if (def.csp) {\n def[_class] = function () { }\n } else {\n def[_class] = new Function(`return function ${_class}() {}`)() // eslint-disable-line\n }\n } catch (e) {\n def[_class] = function () {}\n }\n\n // Apply developer-defined instance methods\n DSUtils.forOwn(def.methods, function (fn, m) {\n def[_class].prototype[m] = fn\n })\n\n /**\n * var user = User.createInstance({ id: 1 })\n * user.set('foo', 'bar')\n */\n def[_class].prototype.set = function (key, value) {\n DSUtils.set(this, key, value)\n def.compute(this)\n if (def.instanceEvents) {\n setTimeout(() => {\n this.emit('DS.change', def, this)\n }, 0)\n }\n def.handleChange(this)\n return this\n }\n\n /**\n * var user = User.createInstance({ id: 1 })\n * user.get('id') // 1\n */\n def[_class].prototype.get = function (key) {\n return DSUtils.get(this, key)\n }\n\n // Setup the relation links\n DSUtils.applyRelationGettersToTarget(_this, def, def[_class].prototype)\n\n let parentOmit = null\n if (!def.hasOwnProperty('omit')) {\n parentOmit = def.omit\n def.omit = []\n } else {\n parentOmit = _this.defaults.omit\n }\n def.omit = def.omit.concat(parentOmit || [])\n\n // Prepare for computed properties\n DSUtils.forOwn(def.computed, function (fn, field) {\n if (DSUtils.isFunction(fn)) {\n def.computed[field] = [fn]\n fn = def.computed[field]\n }\n if (def.methods && field in def.methods) {\n def.errorFn(`Computed property \"${field}\" conflicts with previously defined prototype method!`)\n }\n def.omit.push(field)\n if (DSUtils.isArray(fn)) {\n var deps\n if (fn.length === 1) {\n let match = fn[0].toString().match(/function.*?\\(([\\s\\S]*?)\\)/)\n deps = match[1].split(',')\n deps = DSUtils.filter(deps, function (x) { return x })\n def.computed[field] = deps.concat(fn)\n fn = def.computed[field]\n if (deps.length) {\n def.errorFn('Use the computed property array syntax for compatibility with minified code!')\n }\n }\n deps = fn.slice(0, fn.length - 1)\n DSUtils.forEach(deps, function (val, index) {\n deps[index] = val.trim()\n })\n fn.deps = DSUtils.filter(deps, function (dep) {\n return !!dep\n })\n } else if (DSUtils.isObject(fn)) {\n Object.defineProperty(def[_class].prototype, field, fn)\n }\n })\n\n // add instance proxies of DS methods\n DSUtils.forEach(instanceMethods, function (name) {\n def[_class].prototype[`DS${DSUtils.pascalCase(name)}`] = function (...args) {\n args.unshift(this[def.idAttribute] || this)\n args.unshift(def.name)\n return _this[name].apply(_this, args)\n }\n })\n\n // manually add instance proxy for DS#create\n def[_class].prototype.DSCreate = function (...args) {\n args.unshift(this)\n args.unshift(def.name)\n return _this.create.apply(_this, args)\n }\n\n // Initialize store data for the new resource\n _this.store[def.name] = {\n collection: [],\n expiresHeap: new DSUtils.BinaryHeap(function (x) { return x.expires }, function (x, y) { return x.item === y }),\n completedQueries: {},\n queryData: {},\n pendingQueries: {},\n index: {},\n modified: {},\n saved: {},\n previousAttributes: {},\n observers: {},\n changeHistories: {},\n changeHistory: [],\n collectionModified: 0,\n temporaryItems: {}\n }\n\n let resource = _this.store[def.name]\n\n // start the reaping\n if (def.reapInterval) {\n setInterval(() => def.reap(), def.reapInterval)\n }\n\n // proxy DS methods with shorthand ones\n let fns = ['registerAdapter', 'getAdapterName', 'getAdapter', 'is', '!clear']\n for (let key in _this) {\n if (typeof _this[key] === 'function') {\n fns.push(key)\n }\n }\n\n /**\n * Create the Resource shorthands that proxy DS methods. e.g.\n *\n * var store = new JSData.DS()\n * var User = store.defineResource('user')\n *\n * store.update(resourceName, id, attrs[, options]) // DS method\n * User.update(id, attrs[, options]) // DS method proxied on a Resource\n */\n DSUtils.forEach(fns, function (key) {\n let k = key\n if (k[0] === '!') {\n return\n }\n if (_this[k].shorthand !== false) {\n def[k] = function (...args) {\n args.unshift(def.name)\n return _this[k].apply(_this, args)\n }\n def[k].before = function (fn) {\n let orig = def[k]\n def[k] = function (...args) {\n return orig.apply(def, fn.apply(def, args) || args)\n }\n }\n } else {\n def[k] = function (...args) { return _this[k].apply(_this, args) }\n }\n })\n\n def.beforeValidate = DSUtils.promisify(def.beforeValidate)\n def.validate = DSUtils.promisify(def.validate)\n def.afterValidate = DSUtils.promisify(def.afterValidate)\n def.beforeCreate = DSUtils.promisify(def.beforeCreate)\n def.afterCreate = DSUtils.promisify(def.afterCreate)\n def.afterFind = DSUtils.promisify(def.afterFind)\n def.afterFindAll = DSUtils.promisify(def.afterFindAll)\n def.afterLoadRelations = DSUtils.promisify(def.afterLoadRelations)\n def.beforeUpdate = DSUtils.promisify(def.beforeUpdate)\n def.afterUpdate = DSUtils.promisify(def.afterUpdate)\n def.beforeDestroy = DSUtils.promisify(def.beforeDestroy)\n def.afterDestroy = DSUtils.promisify(def.afterDestroy)\n\n let defaultAdapter\n if (def.hasOwnProperty('defaultAdapter')) {\n defaultAdapter = def.defaultAdapter\n }\n\n // setup \"actions\"\n DSUtils.forOwn(def.actions, function (action, name) {\n if (def[name] && !def.actions[name]) {\n throw new Error(`Cannot override existing method \"${name}\"!`)\n }\n action.request = action.request || function (config) { return config }\n action.response = action.response || function (response) { return response }\n action.responseError = action.responseError || function (err) { return DSUtils.Promise.reject(err) }\n def[name] = function (id, options) {\n if (DSUtils._o(id)) {\n options = id\n }\n options = options || {}\n let adapter = def.getAdapter(action.adapter || defaultAdapter || 'http')\n let config = DSUtils.deepMixIn({}, action)\n if (!options.hasOwnProperty('endpoint') && config.endpoint) {\n options.endpoint = config.endpoint\n }\n if (typeof options.getEndpoint === 'function') {\n config.url = options.getEndpoint(def, options)\n } else {\n let args = [options.basePath || def.basePath || adapter.defaults.basePath, adapter.getEndpoint(def, DSUtils._sn(id) ? id : null, options)]\n if (DSUtils._sn(id)) {\n args.push(id)\n }\n args.push(action.pathname || name)\n config.url = DSUtils.makePath.apply(null, args)\n }\n config.method = config.method || 'GET'\n config.resourceName = def.name\n DSUtils.deepMixIn(config, options)\n return new DSUtils.Promise(function (resolve) { return resolve(config) })\n .then(options.request || action.request)\n .then(function (config) { return adapter.HTTP(config) })\n .then(function (data) {\n if (data && data.config) {\n data.config.resourceName = def.name\n }\n return data\n })\n .then(options.response || action.response, options.responseError || action.responseError)\n }\n })\n\n // mix in events\n DSUtils.Events(def)\n\n def.handleChange = function (data) {\n resource.collectionModified = DSUtils.updateTimestamp(resource.collectionModified)\n if (def.notify) {\n setTimeout(() => {\n def.emit('DS.change', def, data)\n }, 0)\n }\n }\n\n def.logFn('Done preparing resource.')\n\n return def\n } catch (err) {\n _this.defaults.errorFn(err)\n delete definitions[definition.name]\n delete _this.store[definition.name]\n throw err\n }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/datastore/sync_methods/defineResource.js\n **/","/* jshint eqeqeq:false */\n/**\n * Eject an item from the store, if it is currently in the store.\n *\n * @param resourceName The name of the resource type of the item eject.\n * @param id The primary key of the item to eject.\n * @param options Optional configuration.\n * @param options.notify Whether to emit the \"DS.beforeEject\" and \"DS.afterEject\" events\n * @param options.clearEmptyQueries Whether to remove cached findAll queries that become empty as a result of this method call.\n * @returns The ejected item if one was ejected.\n */\nmodule.exports = function eject (resourceName, id, options) {\n let _this = this\n let DSUtils = _this.utils\n let definition = _this.definitions[resourceName]\n let resource = _this.store[resourceName]\n let item\n let found = false\n\n id = DSUtils.resolveId(definition, id)\n\n if (!definition) {\n throw new _this.errors.NER(resourceName)\n } else if (!DSUtils._sn(id)) {\n throw DSUtils._snErr('id')\n }\n\n options = DSUtils._(definition, options)\n\n options.logFn('eject', id, options)\n\n // find the item to eject\n for (var i = 0; i < resource.collection.length; i++) {\n if (resource.collection[i][definition.idAttribute] == id) { // eslint-disable-line\n item = resource.collection[i]\n // remove its expiration timestamp\n resource.expiresHeap.remove(item)\n found = true\n break\n }\n }\n if (found) {\n // lifecycle\n definition.beforeEject(options, item)\n if (options.notify) {\n definition.emit('DS.beforeEject', definition, item)\n }\n\n // find the item in any ($$injected) cached queries\n let toRemove = []\n DSUtils.forOwn(resource.queryData, function (items, queryHash) {\n if (items.$$injected) {\n DSUtils.remove(items, item)\n }\n // optionally remove any empty queries\n if (!items.length && options.clearEmptyQueries) {\n toRemove.push(queryHash)\n }\n })\n\n // clean up\n DSUtils.forEach(resource.changeHistories[id], function (changeRecord) {\n DSUtils.remove(resource.changeHistory, changeRecord)\n })\n DSUtils.forEach(toRemove, function (queryHash) {\n delete resource.completedQueries[queryHash]\n delete resource.queryData[queryHash]\n })\n if (resource.observers[id] && typeof resource.observers[id].close === 'function') {\n // stop observation\n resource.observers[id].close()\n }\n delete resource.observers[id]\n delete resource.index[id]\n delete resource.previousAttributes[id]\n delete resource.completedQueries[id]\n delete resource.pendingQueries[id]\n delete resource.changeHistories[id]\n delete resource.modified[id]\n delete resource.saved[id]\n if (definition.instanceEvents && item.off) {\n item.off()\n }\n\n // remove it from the store\n resource.collection.splice(i, 1)\n // collection has been modified\n definition.handleChange(item)\n\n // lifecycle\n definition.afterEject(options, item)\n if (options.notify) {\n definition.emit('DS.afterEject', definition, item)\n }\n\n return item\n }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/datastore/sync_methods/eject.js\n **/","/**\n * Eject a collection of items from the store, if any items currently in the store match the given criteria.\n *\n * @param resourceName The name of the resource type of the items eject.\n * @param params The criteria by which to match items to eject. See http://www.js-data.io/docs/query-syntax\n * @param options Optional configuration.\n * @returns The collection of items that were ejected, if any.\n */\nmodule.exports = function ejectAll (resourceName, params, options) {\n let _this = this\n let DSUtils = _this.utils\n let definition = _this.definitions[resourceName]\n params = params || {}\n\n if (!definition) {\n throw new _this.errors.NER(resourceName)\n } else if (!DSUtils._o(params)) {\n throw DSUtils._oErr('params')\n }\n\n options = DSUtils._(definition, options)\n definition.logFn('ejectAll', params, options)\n\n DSUtils.applyScope(definition, params, options)\n\n let resource = _this.store[resourceName]\n let queryHash = DSUtils.toJson(params)\n\n // get items that match the criteria\n let items\n\n if (DSUtils.isEmpty(params)) {\n items = definition.getAll()\n // remove all completed queries if ejecting all items\n resource.completedQueries = {}\n } else {\n items = definition.filter(params)\n // remove matching completed query, if any\n delete resource.completedQueries[queryHash]\n }\n // prepare to remove matching items\n DSUtils.forEach(items, function (item) {\n if (item && item[definition.idAttribute]) {\n definition.eject(item[definition.idAttribute], options)\n }\n })\n // collection has been modified\n definition.handleChange(items)\n return items\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/datastore/sync_methods/ejectAll.js\n **/","/**\n * Return the subset of items currently in the store that match the given criteria.\n *\n * The actual filtering is delegated to DS#defaults.defaultFilter, which can be overridden by developers.\n *\n * @param resourceName The name of the resource type of the items to filter.\n * @param params The criteria by which to filter items. See http://www.js-data.io/docs/query-syntax\n * @param options Optional configuration.\n * @returns Matching items.\n */\nmodule.exports = function filter (resourceName, params, options) {\n let _this = this\n let DSUtils = _this.utils\n let definition = _this.definitions[resourceName]\n\n if (!definition) {\n throw new _this.errors.NER(resourceName)\n } else if (params && !DSUtils._o(params)) {\n throw DSUtils._oErr('params')\n }\n\n // Protect against null\n params = params || {}\n options = DSUtils._(definition, options)\n options.logFn('filter', params, options)\n\n DSUtils.applyScope(definition, params, options)\n\n // delegate filtering to DS#defaults.defaultFilter, which can be overridden by developers.\n return definition.defaultFilter.call(_this, _this.store[resourceName].collection, resourceName, params, options)\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/datastore/sync_methods/filter.js\n **/","import DSUtils from '../../utils'\nimport DSErrors from '../../errors'\n\n/**\n * This is a beast of a file, but it's where a significant portion of the magic happens.\n *\n * DS#inject makes up the core of how data gets into the store.\n */\n\n/**\n * This factory function produces an observer handler function tailor-made for the current item being injected.\n *\n * The observer handler is what allows computed properties and change tracking to function.\n *\n * @param definition Resource definition produced by DS#defineResource\n * @param resource Resource data as internally stored by the data store\n * @returns {Function} Observer handler function\n * @private\n */\nfunction makeObserverHandler (definition, resource) {\n var DS = this\n\n // using \"var\" avoids a JSHint error\n var name = definition.name\n\n /**\n * This will be called by observe-js when a new change record is available for the observed object\n *\n * @param added Change record for added properties\n * @param removed Change record for removed properties\n * @param changed Change record for changed properties\n * @param oldValueFn Function that can be used to get the previous value of a changed property\n * @param firstTime Whether this is the first time this function is being called for the given item. Will only be true once.\n */\n return function _react (added, removed, changed, oldValueFn, firstTime) {\n let target = this\n let item\n\n // Get the previous primary key of the observed item, in-case some knucklehead changed it\n let innerId = (oldValueFn && oldValueFn(definition.idAttribute)) ? oldValueFn(definition.idAttribute) : target[definition.idAttribute]\n\n // Ignore changes to relation links\n DSUtils.forEach(definition.relationFields, function (field) {\n delete added[field]\n delete removed[field]\n delete changed[field]\n })\n\n // Detect whether there are actually any changes\n if (!DSUtils.isEmpty(added) || !DSUtils.isEmpty(removed) || !DSUtils.isEmpty(changed) || firstTime) {\n item = DS.get(name, innerId)\n\n // update item and collection \"modified\" timestamps\n resource.modified[innerId] = DSUtils.updateTimestamp(resource.modified[innerId])\n\n if (item && definition.instanceEvents) {\n setTimeout(function () {\n item.emit('DS.change', definition, item)\n }, 0)\n }\n\n definition.handleChange(item)\n\n // Save a change record for the item\n if (definition.keepChangeHistory) {\n let changeRecord = {\n resourceName: name,\n target: item,\n added,\n removed,\n changed,\n timestamp: resource.modified[innerId]\n }\n resource.changeHistories[innerId].push(changeRecord)\n resource.changeHistory.push(changeRecord)\n }\n }\n\n // Recompute computed properties if any computed properties depend on changed properties\n if (definition.computed) {\n item = item || DS.get(name, innerId)\n DSUtils.forOwn(definition.computed, function (fn, field) {\n if (DSUtils._o(fn)) {\n return\n }\n let compute = false\n // check if required fields changed\n DSUtils.forEach(fn.deps, function (dep) {\n if (dep in added || dep in removed || dep in changed || !(field in item)) {\n compute = true\n }\n })\n compute = compute || !fn.deps.length\n if (compute) {\n DSUtils.compute.call(item, fn, field)\n }\n })\n }\n\n if (definition.idAttribute in changed) {\n definition.errorFn(`Doh! You just changed the primary key of an object! Your data for the \"${name}\" resource is now in an undefined (probably broken) state.`)\n }\n }\n}\n\n/**\n * A recursive function for injecting data into the store.\n *\n * @param definition Resource definition produced by DS#defineResource\n * @param resource Resource data as internally stored by the data store\n * @param attrs The data to be injected. Will be an object or an array of objects.\n * @param options Optional configuration.\n * @returns The injected data\n * @private\n */\nfunction _inject (definition, resource, attrs, options) {\n let _this = this\n let injected\n\n if (DSUtils._a(attrs)) {\n // have an array of objects, go ahead and inject each one individually and return the resulting array\n injected = []\n for (var i = 0; i < attrs.length; i++) {\n injected.push(_inject.call(_this, definition, resource, attrs[i], options))\n }\n } else {\n // check if \"idAttribute\" is a computed property\n let c = definition.computed\n let idA = definition.idAttribute\n // compute the primary key if necessary\n if (c && c[idA]) {\n let args = []\n DSUtils.forEach(c[idA].deps, function (dep) {\n args.push(attrs[dep])\n })\n attrs[idA] = c[idA][c[idA].length - 1].apply(attrs, args)\n } else if (options.temporary) {\n attrs[idA] = DSUtils.guid()\n }\n\n if (!(idA in attrs)) {\n let error = new DSErrors.R(`${definition.name}.inject: \"attrs\" must contain the property specified by \"idAttribute\"!`)\n options.errorFn(error)\n throw error\n } else {\n try {\n // when injecting object that contain their nested relations, this code\n // will recursively inject them into their proper places in the data store.\n // Magic!\n DSUtils.forEach(definition.relationList, function (def) {\n let relationName = def.relation\n let relationDef = _this.definitions[relationName]\n let toInject = attrs[def.localField]\n if (typeof def.inject === 'function') {\n def.inject(definition, def, attrs)\n } else if (toInject && def.inject !== false) {\n if (!relationDef) {\n throw new DSErrors.R(`${definition.name} relation is defined but the resource is not!`)\n }\n // handle injecting hasMany relations\n if (DSUtils._a(toInject)) {\n let items = []\n DSUtils.forEach(toInject, function (toInjectItem) {\n if (toInjectItem !== _this.store[relationName].index[toInjectItem[relationDef.idAttribute]]) {\n try {\n let injectedItem = relationDef.inject(toInjectItem, options.orig())\n if (def.foreignKey) {\n DSUtils.set(injectedItem, def.foreignKey, attrs[definition.idAttribute])\n }\n items.push(injectedItem)\n } catch (err) {\n options.errorFn(err, `Failed to inject ${def.type} relation: \"${relationName}\"!`)\n }\n }\n })\n } else {\n // handle injecting belongsTo and hasOne relations\n if (toInject !== _this.store[relationName].index[toInject[relationDef.idAttribute]]) {\n try {\n let injected = relationDef.inject(attrs[def.localField], options.orig())\n if (def.foreignKey) {\n DSUtils.set(injected, def.foreignKey, attrs[definition.idAttribute])\n }\n if (def.localKey) {\n DSUtils.set(attrs, def.localKey, DSUtils.get(injected, relationDef.idAttribute))\n }\n } catch (err) {\n options.errorFn(err, `Failed to inject ${def.type} relation: \"${relationName}\"!`)\n }\n }\n }\n }\n })\n\n // primary key of item being injected\n let id = attrs[idA]\n // item being injected\n let item = definition.get(id)\n // 0 if the item is new, otherwise the previous last modified timestamp of the item\n let initialLastModified = item ? resource.modified[id] : 0\n\n // item is new\n if (!item) {\n if (attrs instanceof definition[definition['class']]) {\n item = attrs\n } else {\n item = new definition[definition['class']]()\n if (options.applyDefaultsOnInject && options.defaultValues) {\n DSUtils.deepMixIn(item, DSUtils.copy(options.defaultValues))\n }\n }\n\n if (definition.instanceEvents && typeof item.emit !== 'function') {\n DSUtils.Events(item)\n }\n // remove relation properties from the item, since those relations have been injected by now\n DSUtils.forEach(definition.relationList, function (def) {\n if (typeof def.link === 'boolean' ? def.link : !!definition.linkRelations) {\n delete attrs[def.localField]\n }\n })\n\n // copy remaining properties to the injected item\n DSUtils.deepMixIn(item, attrs)\n\n // add item to collection\n resource.collection.push(item)\n resource.changeHistories[id] = []\n\n // create the observer handler for the data to be injected\n let _react = makeObserverHandler.call(_this, definition, resource)\n\n // If we're in the browser, start observation\n if (definition.watchChanges) {\n resource.observers[id] = new _this.observe.ObjectObserver(item)\n resource.observers[id].open(_react, item)\n }\n\n // index item\n resource.index[id] = item\n // fire observation handler for the first time\n _react.call(item, {}, {}, {}, null, true)\n // save \"previous\" attributes of the injected item, for change diffs later\n resource.previousAttributes[id] = DSUtils.copy(item, null, null, null, definition.relationFields)\n // mark item as temporary if guid has been generated\n if (options.temporary) {\n resource.temporaryItems[id] = true\n }\n } else {\n // item is being re-injected\n // new properties take precedence\n if (options.onConflict === 'merge') {\n DSUtils.deepMixIn(item, attrs)\n DSUtils.forOwn(definition.computed, function (fn, field) {\n DSUtils.compute.call(item, fn, field)\n })\n } else if (options.onConflict === 'replace') {\n DSUtils.forOwn(definition.computed, function (fn, field) {\n DSUtils.compute.call(attrs, fn, field)\n })\n DSUtils.forOwn(item, function (v, k) {\n if (k !== definition.idAttribute) {\n if (!attrs.hasOwnProperty(k)) {\n delete item[k]\n }\n }\n })\n DSUtils.forOwn(attrs, function (v, k) {\n if (k !== definition.idAttribute) {\n item[k] = v\n }\n })\n }\n\n if (definition.resetHistoryOnInject) {\n // clear change history for item\n _this.commit(definition.name, id)\n }\n if (resource.observers[id] && typeof resource.observers[id] === 'function') {\n // force observation callback to be fired if there are any changes to the item and `Object.observe` is not available\n resource.observers[id].deliver()\n }\n }\n // update modified timestamp of item\n resource.modified[id] = initialLastModified && resource.modified[id] === initialLastModified ? DSUtils.updateTimestamp(resource.modified[id]) : resource.modified[id]\n\n // reset expiry tracking for item\n resource.expiresHeap.remove(item)\n let timestamp = new Date().getTime()\n resource.expiresHeap.push({\n item: item,\n timestamp: timestamp,\n expires: definition.maxAge ? timestamp + definition.maxAge : Number.MAX_VALUE\n })\n\n // final injected item\n injected = item\n } catch (err) {\n options.errorFn(err, attrs)\n }\n }\n }\n return injected\n}\n\n/**\n * Inject the given object or array of objects into the data store.\n *\n * @param resourceName The name of the type of resource of the data to be injected.\n * @param attrs Object or array of objects. Objects must contain a primary key.\n * @param options Optional configuration.\n * @param options.notify Whether to emit the \"DS.beforeInject\" and \"DS.afterInject\" events.\n * @returns The injected data.\n */\nmodule.exports = function inject (resourceName, attrs, options) {\n let _this = this\n let definition = _this.definitions[resourceName]\n let resource = _this.store[resourceName]\n let injected\n\n if (!definition) {\n throw new DSErrors.NER(resourceName)\n } else if (!DSUtils._o(attrs) && !DSUtils._a(attrs)) {\n throw new DSErrors.IA(`${resourceName}.inject: \"attrs\" must be an object or an array!`)\n }\n\n options = DSUtils._(definition, options)\n options.logFn('inject', attrs, options)\n\n // lifecycle\n options.beforeInject(options, attrs)\n if (options.notify) {\n definition.emit('DS.beforeInject', definition, attrs)\n }\n\n // start the recursive injection of data\n injected = _inject.call(_this, definition, resource, attrs, options)\n\n // collection was modified\n definition.handleChange(injected)\n\n // lifecycle\n options.afterInject(options, injected)\n if (options.notify) {\n definition.emit('DS.afterInject', definition, injected)\n }\n\n return injected\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/datastore/sync_methods/inject.js\n **/","export default {\n create: require('./create'),\n destroy: require('./destroy'),\n destroyAll: require('./destroyAll'),\n find: require('./find'),\n findAll: require('./findAll'),\n loadRelations: require('./loadRelations'),\n reap: require('./reap'),\n refresh (resourceName, id, options) {\n let _this = this\n let DSUtils = _this.utils\n\n return new DSUtils.Promise(function (resolve, reject) {\n let definition = _this.definitions[resourceName]\n id = DSUtils.resolveId(_this.definitions[resourceName], id)\n if (!definition) {\n reject(new _this.errors.NER(resourceName))\n } else if (!DSUtils._sn(id)) {\n reject(DSUtils._snErr('id'))\n } else {\n options = DSUtils._(definition, options)\n options.bypassCache = true\n options.logFn('refresh', id, options)\n resolve(_this.get(resourceName, id))\n }\n }).then(function (item) { return item ? _this.find(resourceName, id, options) : item })\n .catch(_this.errorFn('refresh', resourceName, id, options))\n },\n refreshAll (resourceName, params, options) {\n let _this = this\n let DSUtils = _this.utils\n let definition = _this.definitions[resourceName]\n params = params || {}\n\n return new DSUtils.Promise(function (resolve, reject) {\n if (!definition) {\n reject(new _this.errors.NER(resourceName))\n } else if (!DSUtils._o(params)) {\n reject(DSUtils._oErr('params'))\n } else {\n options = DSUtils._(definition, options)\n options.bypassCache = true\n options.logFn('refreshAll', params, options)\n resolve(_this.filter(resourceName, params, options))\n }\n }).then(function (existing) {\n options.bypassCache = true\n return _this.findAll(resourceName, params, options).then(function (found) {\n DSUtils.forEach(existing, function (item) {\n if (found.indexOf(item) === -1) {\n definition.eject(item)\n }\n })\n return found\n })\n }).catch(_this.errorFn('refreshAll', resourceName, params, options))\n },\n save: require('./save'),\n update: require('./update'),\n updateAll: require('./updateAll')\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/datastore/async_methods/index.js\n **/","/**\n * Using an adapter, create a new item.\n *\n * Generally a primary key will NOT be provided in the properties hash,\n * because the adapter's persistence layer should be generating one.\n *\n * @param resourceName The name of the type of resource of the new item.\n * @param attrs Hash of properties with which to create the new item.\n * @param options Optional configuration.\n * @param options.cacheResponse Whether the newly created item as returned by the adapter should be injected into the data store.\n * @param options.upsert If the properties hash contains a primary key, attempt to call DS#update instead.\n * @param options.notify Whether to emit the \"DS.beforeCreate\" and \"DS.afterCreate\" events.\n * @param options.beforeValidate Lifecycle hook.\n * @param options.validate Lifecycle hook.\n * @param options.afterValidate Lifecycle hook.\n * @param options.beforeCreate Lifecycle hook.\n * @param options.afterCreate Lifecycle hook.\n */\nmodule.exports = function create (resourceName, attrs, options) {\n let _this = this\n let DSUtils = _this.utils\n let definition = _this.definitions[resourceName]\n let resource = _this.store[resourceName]\n let adapter\n\n options = options || {}\n attrs = attrs || {}\n\n let rejectionError\n if (!definition) {\n rejectionError = new _this.errors.NER(resourceName)\n } else if (!DSUtils._o(attrs)) {\n rejectionError = DSUtils._oErr('attrs')\n } else {\n options = DSUtils._(definition, options)\n if (options.upsert && DSUtils._sn(attrs[definition.idAttribute]) && !resource.temporaryItems[attrs[definition.idAttribute]]) {\n return _this.update(resourceName, attrs[definition.idAttribute], attrs, options)\n }\n options.logFn('create', attrs, options)\n }\n\n return new DSUtils.Promise(function (resolve, reject) {\n if (rejectionError) {\n reject(rejectionError)\n } else {\n resolve(attrs)\n }\n })\n // start lifecycle\n .then(function (attrs) { return options.beforeValidate.call(attrs, options, attrs) })\n .then(function (attrs) { return options.validate.call(attrs, options, attrs) })\n .then(function (attrs) { return options.afterValidate.call(attrs, options, attrs) })\n .then(function (attrs) { return options.beforeCreate.call(attrs, options, attrs) })\n .then(function (attrs) {\n if (options.notify) {\n definition.emit('DS.beforeCreate', definition, attrs)\n }\n adapter = _this.getAdapterName(options)\n return _this.adapters[adapter].create(definition, DSUtils.omit(attrs, options.omit), options)\n })\n .then(function (attrs) { return options.afterCreate.call(attrs, options, attrs) })\n .then(function (attrs) {\n if (options.notify) {\n definition.emit('DS.afterCreate', definition, attrs)\n }\n if (options.cacheResponse) {\n // injected created intem into the store\n let created = _this.inject(definition.name, attrs, options.orig())\n let id = created[definition.idAttribute]\n // mark item's `find` query as completed, so a subsequent `find` call for this item will resolve immediately\n let resource = _this.store[resourceName]\n resource.completedQueries[id] = new Date().getTime()\n resource.saved[id] = DSUtils.updateTimestamp(resource.saved[id])\n return created\n } else {\n // just return an un-injected instance\n return _this.createInstance(resourceName, attrs, options)\n }\n })\n .then(function (item) {\n return DSUtils.respond(item, {adapter}, options)\n })['catch'](_this.errorFn('create', resourceName, attrs, options))\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/datastore/async_methods/create.js\n **/","/**\n * Using an adapter, destroy an item.\n *\n * @param resourceName The name of the type of resource of the item to destroy.\n * @param id The primary key of the item to destroy.\n * @param options Optional configuration.\n * @param options.eagerEject Whether to eject the item from the store before the adapter operation completes, re-injecting if the adapter operation fails.\n * @param options.notify Whether to emit the \"DS.beforeDestroy\" and \"DS.afterDestroy\" events.\n * @param options.beforeDestroy Lifecycle hook.\n * @param options.afterDestroy Lifecycle hook.\n * @returns The primary key of the destroyed item.\n */\nmodule.exports = function destroy (resourceName, id, options) {\n let _this = this\n let DSUtils = _this.utils\n let definition = _this.definitions[resourceName]\n let item, adapter\n\n return new DSUtils.Promise(function (resolve, reject) {\n id = DSUtils.resolveId(definition, id)\n if (!definition) {\n reject(new _this.errors.NER(resourceName))\n } else if (!DSUtils._sn(id)) {\n reject(DSUtils._snErr('id'))\n } else {\n // check if the item is in the store\n item = definition.get(id) || { id: id }\n options = DSUtils._(definition, options)\n options.logFn('destroy', id, options)\n resolve(item)\n }\n })\n // start lifecycle\n .then(function (attrs) { return options.beforeDestroy.call(attrs, options, attrs) })\n .then(function (attrs) {\n if (options.notify) {\n definition.emit('DS.beforeDestroy', definition, attrs)\n }\n // don't wait for the adapter, remove the item from the store\n if (options.eagerEject) {\n definition.eject(id)\n }\n adapter = definition.getAdapter(options)\n return adapter.destroy(definition, id, options)\n })\n .then(function () { return options.afterDestroy.call(item, options, item) })\n .then(function (item) {\n if (options.notify) {\n definition.emit('DS.afterDestroy', definition, item)\n }\n // make sure the item is removed from the store\n definition.eject(id)\n return DSUtils.respond(id, {adapter}, options)\n })['catch'](function (err) {\n // rollback by re-injecting the item into the store\n if (options && options.eagerEject && item) {\n definition.inject(item, { notify: false })\n }\n return _this.errorFn('destroy', resourceName, id, options)(err)\n })\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/datastore/async_methods/destroy.js\n **/","/**\n * Using an adapter, destroy an item.\n *\n * @param resourceName The name of the type of resource of the item to destroy.\n * @param params The criteria by which to filter items to destroy. See http://www.js-data.io/docs/query-syntax\n * @param options Optional configuration.\n * @param options.eagerEject Whether to eject the items from the store before the adapter operation completes, re-injecting if the adapter operation fails.\n * @param options.notify Whether to emit the \"DS.beforeDestroy\" and \"DS.afterDestroy\" events.\n * @param options.beforeDestroy Lifecycle hook.\n * @param options.afterDestroy Lifecycle hook.\n * @returns The ejected items, if any.\n */\nmodule.exports = function destroyAll (resourceName, params, options) {\n let _this = this\n let DSUtils = _this.utils\n let definition = _this.definitions[resourceName]\n let ejected, toEject, adapter\n\n params = params || {}\n\n return new DSUtils.Promise(function (resolve, reject) {\n if (!definition) {\n reject(new _this.errors.NER(resourceName))\n } else if (!DSUtils._o(params)) {\n reject(DSUtils._oErr('attrs'))\n } else {\n options = DSUtils._(definition, options)\n options.logFn('destroyAll', params, options)\n DSUtils.applyScope(definition, params, options)\n resolve()\n }\n }).then(function () {\n // find items that are to be ejected from the store\n toEject = definition.defaultFilter.call(_this, resourceName, params)\n return options.beforeDestroy(options, toEject)\n }).then(function () {\n if (options.notify) {\n definition.emit('DS.beforeDestroy', definition, toEject)\n }\n // don't wait for the adapter, remove the items from the store\n if (options.eagerEject) {\n ejected = definition.ejectAll(params)\n }\n adapter = definition.getAdapterName(options)\n return _this.adapters[adapter].destroyAll(definition, params, options)\n }).then(function () {\n return options.afterDestroy(options, toEject)\n }).then(function () {\n if (options.notify) {\n definition.emit('DS.afterDestroy', definition, toEject)\n }\n // make sure items are removed from the store\n return ejected || definition.ejectAll(params)\n }).then(function (items) {\n return DSUtils.respond(items, {adapter}, options)\n })['catch'](function (err) {\n // rollback by re-injecting the items into the store\n if (options && options.eagerEject && ejected) {\n definition.inject(ejected, {notify: false})\n }\n return _this.errorFn('destroyAll', resourceName, params, options)(err)\n })\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/datastore/async_methods/destroyAll.js\n **/","/* jshint -W082 */\n\n/**\n * Using an adapter, retrieve a single item.\n *\n * @param resourceName The of the type of resource of the item to retrieve.\n * @param id The primary key of the item to retrieve.\n * @param options Optional configuration.\n * @param options.bypassCache Whether to ignore any cached item and force the retrieval through the adapter.\n * @param options.cacheResponse Whether to inject the found item into the data store.\n * @param options.strictCache Whether to only consider items to be \"cached\" if they were injected into the store as the result of `find` or `findAll`.\n * @param options.strategy The retrieval strategy to use.\n * @param options.findStrategy The retrieval strategy to use. Overrides \"strategy\".\n * @param options.fallbackAdapters Array of names of adapters to use if using \"fallback\" strategy.\n * @param options.findFallbackAdapters Array of names of adapters to use if using \"fallback\" strategy. Overrides \"fallbackAdapters\".\n * @returns The item.\n */\nmodule.exports = function find (resourceName, id, options) {\n let _this = this\n let DSUtils = _this.utils\n let definition = _this.definitions[resourceName]\n let resource = _this.store[resourceName]\n let adapter\n\n return new DSUtils.Promise(function (resolve, reject) {\n if (!definition) {\n reject(new _this.errors.NER(resourceName))\n } else if (!DSUtils._sn(id)) {\n reject(DSUtils._snErr('id'))\n } else {\n options = DSUtils._(definition, options)\n options.logFn('find', id, options)\n\n if (options.params) {\n options.params = DSUtils.copy(options.params)\n }\n\n if (options.bypassCache || !options.cacheResponse) {\n delete resource.completedQueries[id]\n }\n\n let expired = options.maxAge && id in resource.completedQueries &&\n resource.completedQueries[id] + options.maxAge < new Date().getTime()\n\n if ((!options.findStrictCache || id in resource.completedQueries) && definition.get(id) &&\n !options.bypassCache && !expired) {\n // resolve immediately with the cached item\n resolve(definition.get(id))\n } else {\n // we're going to delegate to the adapter next\n delete resource.completedQueries[id]\n resolve()\n }\n }\n }).then(function (item) {\n if (!item) {\n let query\n const usePendingFind = DSUtils.isFunction(options.usePendingFind) ? options.usePendingFind.call(this, resourceName, id, options) : options.usePendingFind\n if (!(id in resource.pendingQueries) || !usePendingFind) {\n let promise\n let strategy = options.findStrategy || options.strategy\n\n // try subsequent adapters if the preceeding one fails\n if (strategy === 'fallback') {\n var makeFallbackCall = function (index) {\n adapter = definition.getAdapterName((options.findFallbackAdapters || options.fallbackAdapters)[index])\n return _this.adapters[adapter].find(definition, id, options)['catch'](err => {\n index++\n if (index < options.fallbackAdapters.length) {\n return makeFallbackCall(index)\n } else {\n return DSUtils.Promise.reject(err)\n }\n })\n }\n\n promise = makeFallbackCall(0)\n } else {\n adapter = definition.getAdapterName(options)\n // just make a single attempt\n promise = _this.adapters[adapter].find(definition, id, options)\n }\n\n query = promise\n .then(function (data) { return options.afterFind.call(data, options, data) })\n .then(function (data) {\n // Query is no longer pending\n delete resource.pendingQueries[id]\n if (options.cacheResponse) {\n // inject the item into the data store\n let injected = definition.inject(data, options.orig())\n // mark the item as \"cached\"\n resource.completedQueries[id] = new Date().getTime()\n resource.saved[id] = DSUtils.updateTimestamp(resource.saved[id])\n return injected\n } else {\n // just return an un-injected instance\n return definition.createInstance(data, options.orig())\n }\n })\n\n if (usePendingFind) {\n resource.pendingQueries[id] = query\n }\n } else {\n query = resource.pendingQueries[id]\n }\n return query\n } else {\n // resolve immediately with the item\n return item\n }\n }).then(function (item) {\n return DSUtils.respond(item, {adapter}, options)\n })['catch'](function (err) {\n if (resource) {\n delete resource.pendingQueries[id]\n }\n return _this.errorFn('find', resourceName, id, options)(err)\n })\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/datastore/async_methods/find.js\n **/","/* jshint -W082 */\nfunction processResults (data, resourceName, queryHash, options) {\n let _this = this\n let DSUtils = _this.utils\n let definition = _this.definitions[resourceName]\n let resource = _this.store[resourceName]\n let idAttribute = definition.idAttribute\n let date = new Date().getTime()\n\n data = data || []\n\n // Query is no longer pending\n delete resource.pendingQueries[queryHash]\n resource.completedQueries[queryHash] = date\n\n // Merge the new values into the cache\n let injected = definition.inject(data, options.orig())\n\n // Make sure each object is added to completedQueries\n if (DSUtils._a(injected)) {\n DSUtils.forEach(injected, function (item) {\n if (item) {\n let id = item[idAttribute]\n if (id) {\n resource.completedQueries[id] = date\n resource.saved[id] = DSUtils.updateTimestamp(resource.saved[id])\n }\n }\n })\n } else {\n options.errorFn('response is expected to be an array!')\n resource.completedQueries[injected[idAttribute]] = date\n }\n\n return injected\n}\n\n/**\n * Using an adapter, retrieve a collection of items.\n *\n * @param resourceName The name of the type of resource of the items to retrieve.\n * @param params The criteria by which to filter items to retrieve. See http://www.js-data.io/docs/query-syntax\n * @param options Optional configuration.\n * @param options.bypassCache Whether to ignore any cached query for these items and force the retrieval through the adapter.\n * @param options.cacheResponse Whether to inject the found items into the data store.\n * @returns The items.\n */\nmodule.exports = function findAll (resourceName, params, options) {\n let _this = this\n let DSUtils = _this.utils\n let definition = _this.definitions[resourceName]\n let resource = _this.store[resourceName]\n let queryHash, adapter\n\n return new DSUtils.Promise(function (resolve, reject) {\n params = params || {}\n\n if (!_this.definitions[resourceName]) {\n reject(new _this.errors.NER(resourceName))\n } else if (!DSUtils._o(params)) {\n reject(DSUtils._oErr('params'))\n } else {\n options = DSUtils._(definition, options)\n queryHash = DSUtils.toJson(params)\n options.logFn('findAll', params, options)\n\n if (options.params) {\n options.params = DSUtils.copy(options.params)\n }\n\n DSUtils.applyScope(definition, params, options)\n\n // force a new request\n if (options.bypassCache || !options.cacheResponse) {\n delete resource.completedQueries[queryHash]\n delete resource.queryData[queryHash]\n }\n\n let expired = options.maxAge && queryHash in resource.completedQueries &&\n resource.completedQueries[queryHash] + options.maxAge < new Date().getTime()\n\n if (queryHash in resource.completedQueries && !expired) {\n if (options.useFilter) {\n if (options.localKeys) {\n resolve(definition.getAll(options.localKeys, options.orig()))\n } else {\n // resolve immediately by filtering data from the data store\n resolve(definition.filter(params, options.orig()))\n }\n } else {\n // resolve immediately by returning the cached array from the previously made query\n resolve(resource.queryData[queryHash])\n }\n } else {\n resolve()\n }\n }\n }).then(function (items) {\n if (!items) {\n let query\n const usePendingFindAll = DSUtils.isFunction(options.usePendingFindAll) ? options.usePendingFindAll.call(this, resourceName, params, options) : options.usePendingFindAll\n if (!(queryHash in resource.pendingQueries) || !usePendingFindAll) {\n let promise\n let strategy = options.findAllStrategy || options.strategy\n\n // try subsequent adapters if the preceeding one fails\n if (strategy === 'fallback') {\n var makeFallbackCall = function (index) {\n adapter = definition.getAdapterName((options.findAllFallbackAdapters || options.fallbackAdapters)[index])\n return _this.adapters[adapter].findAll(definition, params, options)['catch'](function (err) {\n index++\n if (index < options.fallbackAdapters.length) {\n return makeFallbackCall(index)\n } else {\n return DSUtils.Promise.reject(err)\n }\n })\n }\n\n promise = makeFallbackCall(0)\n } else {\n adapter = definition.getAdapterName(options)\n // just make a single attempt\n promise = _this.adapters[adapter].findAll(definition, params, options)\n }\n\n query = promise\n .then(function (data) { return options.afterFindAll.call(data, options, data) })\n .then(function (data) {\n // Query is no longer pending\n delete resource.pendingQueries[queryHash]\n if (options.cacheResponse) {\n // inject the items into the data store\n resource.queryData[queryHash] = processResults.call(_this, data, resourceName, queryHash, options)\n resource.queryData[queryHash].$$injected = true\n return resource.queryData[queryHash]\n } else {\n DSUtils.forEach(data, function (item, i) {\n data[i] = definition.createInstance(item, options.orig())\n })\n return data\n }\n })\n\n if (usePendingFindAll) {\n resource.pendingQueries[queryHash] = query\n }\n } else {\n query = resource.pendingQueries[queryHash]\n }\n\n return query\n } else {\n // resolve immediately with the items\n return items\n }\n }).then(function (items) {\n return DSUtils.respond(items, {adapter}, options)\n })['catch'](function (err) {\n if (resource) {\n delete resource.pendingQueries[queryHash]\n }\n return _this.errorFn('findAll', resourceName, params, options)(err)\n })\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/datastore/async_methods/findAll.js\n **/","/**\n * Load the specified relations for the given instance.\n *\n * @param resourceName The name of the type of resource of the instance for which to load relations.\n * @param instance The instance or the primary key of the instance.\n * @param relations An array of the relations to load.\n * @param options Optional configuration.\n * @returns The instance, now with its relations loaded.\n */\nmodule.exports = function loadRelations (resourceName, instance, relations, options) {\n let _this = this\n let {utils: DSUtils, errors: DSErrors} = _this\n let definition = _this.definitions[resourceName]\n let _options\n\n return new DSUtils.Promise(function (resolve, reject) {\n if (DSUtils._sn(instance)) {\n instance = definition.get(instance)\n }\n\n if (DSUtils._s(relations)) {\n relations = [relations]\n }\n\n relations = relations || []\n\n if (!definition) {\n reject(new DSErrors.NER(resourceName))\n } else if (!DSUtils._o(instance)) {\n reject(new DSErrors.IA('\"instance(id)\" must be a string, number or object!'))\n } else if (!DSUtils._a(relations)) {\n reject(new DSErrors.IA('\"relations\" must be a string or an array!'))\n } else {\n _options = DSUtils._(definition, options)\n _options.logFn('loadRelations', instance, relations, _options)\n\n let tasks = []\n\n DSUtils.forEach(definition.relationList, function (def) {\n let relationName = def.relation\n let relationDef = definition.getResource(relationName)\n let __options = DSUtils._(relationDef, options)\n\n // relations can be loaded based on resource name or field name\n if (!relations.length || DSUtils.contains(relations, relationName) || DSUtils.contains(relations, def.localField)) {\n let task\n let params = {}\n if (__options.allowSimpleWhere) {\n params[def.foreignKey] = instance[definition.idAttribute]\n } else {\n params.where = {}\n params.where[def.foreignKey] = {\n '==': instance[definition.idAttribute]\n }\n }\n\n let orig = __options.orig()\n let defKey = def.localKey ? DSUtils.get(instance, def.localKey) : null\n let hasDefKey = !!(defKey || defKey === 0)\n\n if (typeof def.load === 'function') {\n task = def.load(definition, def, instance, orig)\n } else {\n if (def.type === 'hasMany') {\n if (def.localKeys) {\n delete params[def.foreignKey]\n let keys = DSUtils.get(instance, def.localKeys) || []\n keys = DSUtils._a(keys) ? keys : DSUtils.keys(keys)\n params.where = {\n [relationDef.idAttribute]: {\n 'in': keys\n }\n }\n orig.localKeys = keys\n } else if (def.foreignKeys) {\n delete params[def.foreignKey]\n params.where = {\n [def.foreignKeys]: {\n contains: instance[definition.idAttribute]\n }\n }\n }\n task = relationDef.findAll(params, orig)\n } else if (def.type === 'hasOne') {\n if (def.localKey && hasDefKey) {\n task = relationDef.find(defKey, orig)\n } else if (def.foreignKey) {\n task = relationDef.findAll(params, orig).then(function (hasOnes) { return hasOnes.length ? hasOnes[0] : null })\n }\n } else if (hasDefKey) {\n task = relationDef.find(defKey, orig)\n }\n }\n\n if (task) {\n if (!_options.linkRelations) {\n task = task.then(function (data) {\n instance[def.localField] = data\n })\n }\n tasks.push(task)\n }\n }\n })\n\n resolve(tasks)\n }\n }).then(function (tasks) { return DSUtils.Promise.all(tasks) })\n .then(function () { return _options.afterLoadRelations.call(instance, _options, instance) })\n .catch(_this.errorFn('loadRelations', resourceName, instance, relations, options))\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/datastore/async_methods/loadRelations.js\n **/","/**\n * Find expired items of the specified resource type and perform the configured action.\n *\n * @param resourceName The name of the type of resource of the items to reap.\n * @param options Optional configuration.\n * @returns The reaped items.\n */\nmodule.exports = function reap (resourceName, options) {\n let _this = this\n var DSUtils = _this.utils\n let definition = _this.definitions[resourceName]\n let resource = _this.store[resourceName]\n\n return new DSUtils.Promise(function (resolve, reject) {\n if (!definition) {\n reject(new _this.errors.NER(resourceName))\n } else {\n options = DSUtils._(definition, options)\n if (!options.hasOwnProperty('notify')) {\n options.notify = false\n }\n options.logFn('reap', options)\n let items = []\n let now = new Date().getTime()\n let expiredItem\n\n // find the expired items\n while ((expiredItem = resource.expiresHeap.peek()) && expiredItem.expires < now) {\n items.push(expiredItem.item)\n delete expiredItem.item\n resource.expiresHeap.pop()\n }\n resolve(items)\n }\n }).then(function (items) {\n // only hit lifecycle if there are items\n if (items.length) {\n definition.beforeReap(options, items)\n if (options.notify) {\n definition.emit('DS.beforeReap', definition, items)\n }\n }\n\n if (options.reapAction === 'inject') {\n let timestamp = new Date().getTime()\n DSUtils.forEach(items, function (item) {\n resource.expiresHeap.push({\n item: item,\n timestamp: timestamp,\n expires: definition.maxAge ? timestamp + definition.maxAge : Number.MAX_VALUE\n })\n })\n } else if (options.reapAction === 'eject') {\n DSUtils.forEach(items, function (item) {\n definition.eject(item[definition.idAttribute])\n })\n } else if (options.reapAction === 'refresh') {\n let tasks = []\n DSUtils.forEach(items, function (item) {\n tasks.push(definition.refresh(item[definition.idAttribute]))\n })\n return DSUtils.Promise.all(tasks)\n }\n return items\n }).then(function (items) {\n // only hit lifecycle if there are items\n if (items.length) {\n definition.afterReap(options, items)\n if (options.notify) {\n definition.emit('DS.afterReap', definition, items)\n }\n }\n return items\n }).catch(_this.errorFn('reap', resourceName, options))\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/datastore/async_methods/reap.js\n **/","/**\n * Save a single item in its present state.\n *\n * @param resourceName The name of the type of resource of the item.\n * @param id The primary key of the item.\n * @param options Optional congifuration.\n * @returns The item, now saved.\n */\nmodule.exports = function save (resourceName, id, options) {\n let _this = this\n let {utils: DSUtils, errors: DSErrors} = _this\n let definition = _this.definitions[resourceName]\n let resource = _this.store[resourceName]\n let item, noChanges, adapter\n\n return new DSUtils.Promise(function (resolve, reject) {\n id = DSUtils.resolveId(definition, id)\n if (!definition) {\n reject(new DSErrors.NER(resourceName))\n } else if (!DSUtils._sn(id)) {\n reject(DSUtils._snErr('id'))\n } else if (!definition.get(id)) {\n reject(new DSErrors.R(`id \"${id}\" not found in cache!`))\n } else {\n item = definition.get(id)\n options = DSUtils._(definition, options)\n options.logFn('save', id, options)\n resolve(item)\n }\n })\n // start lifecycle\n .then(function (attrs) { return options.beforeValidate.call(attrs, options, attrs) })\n .then(function (attrs) { return options.validate.call(attrs, options, attrs) })\n .then(function (attrs) { return options.afterValidate.call(attrs, options, attrs) })\n .then(function (attrs) { return options.beforeUpdate.call(attrs, options, attrs) })\n .then(function (attrs) {\n if (options.notify) {\n definition.emit('DS.beforeUpdate', definition, attrs)\n }\n // only send changed properties to the adapter\n if (options.changesOnly) {\n if (resource.observers[id] && typeof resource.observers[id] === 'function') {\n resource.observers[id].deliver()\n }\n let toKeep = []\n let changes = definition.changes(id)\n\n for (var key in changes.added) {\n toKeep.push(key)\n }\n for (key in changes.changed) {\n toKeep.push(key)\n }\n DSUtils.forEach(options.always, property => {\n toKeep.push(property)\n })\n changes = DSUtils.pick(attrs, toKeep)\n // no changes? no save\n if (DSUtils.isEmpty(changes)) {\n // no changes, return\n options.logFn('save - no changes', id, options)\n noChanges = true\n return attrs\n } else {\n attrs = changes\n }\n }\n adapter = definition.getAdapterName(options)\n return _this.adapters[adapter].update(definition, id, DSUtils.omit(attrs, options.omit), options)\n })\n .then(function (data) { return options.afterUpdate.call(data, options, data) })\n .then(function (attrs) {\n if (options.notify) {\n definition.emit('DS.afterUpdate', definition, attrs)\n }\n if (noChanges) {\n // no changes, just return\n return attrs\n } else if (options.cacheResponse) {\n // inject the reponse into the store, updating the item\n let injected = definition.inject(attrs, options.orig())\n // mark the item as \"saved\"\n resource.saved[id] = DSUtils.updateTimestamp(resource.saved[id])\n if (!definition.resetHistoryOnInject) {\n resource.previousAttributes[id] = DSUtils.copy(injected, null, null, null, definition.relationFields)\n }\n return injected\n } else {\n // just return an instance\n return definition.createInstance(attrs, options.orig())\n }\n })\n .then(function (item) {\n return DSUtils.respond(item, {adapter}, options)\n })\n .catch(_this.errorFn('save', resourceName, id, options))\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/datastore/async_methods/save.js\n **/","/**\n * Update a single item using the supplied properties hash.\n *\n * @param resourceName The name of the type of resource of the item to update.\n * @param id The primary key of the item to update.\n * @param attrs The attributes with which to update the item.\n * @param options Optional configuration.\n * @returns The item, now updated.\n */\nmodule.exports = function update (resourceName, id, attrs, options) {\n let _this = this\n let {utils: DSUtils, errors: DSErrors} = _this\n let definition = _this.definitions[resourceName]\n let adapter\n\n return new DSUtils.Promise(function (resolve, reject) {\n id = DSUtils.resolveId(definition, id)\n if (!definition) {\n reject(new DSErrors.NER(resourceName))\n } else if (!DSUtils._sn(id)) {\n reject(DSUtils._snErr('id'))\n } else {\n options = DSUtils._(definition, options)\n options.logFn('update', id, attrs, options)\n resolve(attrs)\n }\n })\n // start lifecycle\n .then(function (attrs) { return options.beforeValidate.call(attrs, options, attrs) })\n .then(function (attrs) { return options.validate.call(attrs, options, attrs) })\n .then(function (attrs) { return options.afterValidate.call(attrs, options, attrs) })\n .then(function (attrs) { return options.beforeUpdate.call(attrs, options, attrs) })\n .then(function (attrs) {\n if (options.notify) {\n definition.emit('DS.beforeUpdate', definition, attrs)\n }\n adapter = definition.getAdapterName(options)\n return _this.adapters[adapter].update(definition, id, DSUtils.omit(attrs, options.omit), options)\n })\n .then(function (data) { return options.afterUpdate.call(data, options, data) })\n .then(function (attrs) {\n if (options.notify) {\n definition.emit('DS.afterUpdate', definition, attrs)\n }\n if (options.cacheResponse) {\n // inject the updated item into the store\n let injected = definition.inject(attrs, options.orig())\n let resource = _this.store[resourceName]\n let id = injected[definition.idAttribute]\n // mark the item as \"saved\"\n resource.saved[id] = DSUtils.updateTimestamp(resource.saved[id])\n if (!definition.resetHistoryOnInject) {\n resource.previousAttributes[id] = DSUtils.copy(injected, null, null, null, definition.relationFields)\n }\n return injected\n } else {\n // just return an instance\n return definition.createInstance(attrs, options.orig())\n }\n })\n .then(function (item) {\n return DSUtils.respond(item, {adapter}, options)\n })\n .catch(_this.errorFn('update', resourceName, id, attrs, options))\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/datastore/async_methods/update.js\n **/","/**\n * Update a collection of items using the supplied properties hash.\n *\n * @param resourceName The name of the type of resource of the items to update.\n * @param attrs The attributes with which to update the item.\n * @param params The criteria by which to select items to update. See http://www.js-data.io/docs/query-syntax\n * @param options Optional configuration.\n * @returns The updated items.\n */\nmodule.exports = function updateAll (resourceName, attrs, params, options) {\n let _this = this\n let {utils: DSUtils, errors: DSErrors} = _this\n let definition = _this.definitions[resourceName]\n let adapter\n\n return new DSUtils.Promise(function (resolve, reject) {\n if (!definition) {\n reject(new DSErrors.NER(resourceName))\n } else {\n options = DSUtils._(definition, options)\n options.logFn('updateAll', attrs, params, options)\n DSUtils.applyScope(definition, params, options)\n resolve(attrs)\n }\n })\n // start lifecycle\n .then(function (attrs) { return options.beforeValidate.call(attrs, options, attrs) })\n .then(function (attrs) { return options.validate.call(attrs, options, attrs) })\n .then(function (attrs) { return options.afterValidate.call(attrs, options, attrs) })\n .then(function (attrs) { return options.beforeUpdate.call(attrs, options, attrs) })\n .then(function (attrs) {\n if (options.notify) {\n definition.emit('DS.beforeUpdate', definition, attrs)\n }\n adapter = definition.getAdapterName(options)\n return _this.adapters[adapter].updateAll(definition, DSUtils.omit(attrs, options.omit), params, options)\n })\n .then(function (data) { return options.afterUpdate.call(data, options, data) })\n .then(function (data) {\n if (options.notify) {\n definition.emit('DS.afterUpdate', definition, attrs)\n }\n let origOptions = options.orig()\n if (options.cacheResponse) {\n // inject the updated items into the store\n let injected = definition.inject(data, origOptions)\n let resource = _this.store[resourceName]\n // mark the items as \"saved\"\n DSUtils.forEach(injected, i => {\n let id = i[definition.idAttribute]\n resource.saved[id] = DSUtils.updateTimestamp(resource.saved[id])\n if (!definition.resetHistoryOnInject) {\n resource.previousAttributes[id] = DSUtils.copy(i, null, null, null, definition.relationFields)\n }\n })\n return injected\n } else {\n // just return instances\n let instances = []\n DSUtils.forEach(data, item => {\n instances.push(definition.createInstance(item, origOptions))\n })\n return instances\n }\n })\n .then(function (items) {\n return DSUtils.respond(items, {adapter}, options)\n })\n .catch(_this.errorFn('updateAll', resourceName, attrs, params, options))\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/datastore/async_methods/updateAll.js\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/js-data.js b/dist/js-data.js index f0f43d39..fa782c8f 100644 --- a/dist/js-data.js +++ b/dist/js-data.js @@ -1,6 +1,6 @@ /*! * js-data - * @version 2.10.0 - Homepage + * @version 2.10.1 - Homepage * @author Jason Dobry * @copyright (c) 2014-2016 Jason Dobry * @license MIT @@ -95,10 +95,10 @@ return /******/ (function(modules) { // webpackBootstrap }, version: { - full: '2.10.0', + full: '2.10.1', major: parseInt('2', 10), minor: parseInt('10', 10), - patch: parseInt('0', 10), + patch: parseInt('1', 10), alpha: true ? 'false' : false, beta: true ? 'false' : false } @@ -114,7 +114,7 @@ return /******/ (function(modules) { // webpackBootstrap value: true }); - var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; + var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /* jshint eqeqeq:false */ @@ -447,26 +447,24 @@ return /******/ (function(modules) { // webpackBootstrap // Apply 'orderBy' if (orderBy) { - (function () { - var index = 0; - _utils2.default.forEach(orderBy, function (def, i) { - if (_utils2.default._s(def)) { - orderBy[i] = [def, 'ASC']; - } else if (!_utils2.default._a(def)) { - throw new _errors2.default.IA('DS.filter("' + resourceName + '"[, params][, options]): ' + _utils2.default.toJson(def) + ': Must be a string or an array!', { - params: { - 'orderBy[i]': { - actual: typeof def === 'undefined' ? 'undefined' : _typeof(def), - expected: 'string|array' - } + var index = 0; + _utils2.default.forEach(orderBy, function (def, i) { + if (_utils2.default._s(def)) { + orderBy[i] = [def, 'ASC']; + } else if (!_utils2.default._a(def)) { + throw new _errors2.default.IA('DS.filter("' + resourceName + '"[, params][, options]): ' + _utils2.default.toJson(def) + ': Must be a string or an array!', { + params: { + 'orderBy[i]': { + actual: typeof def === 'undefined' ? 'undefined' : _typeof(def), + expected: 'string|array' } - }); - } - }); - filtered = _utils2.default.sort(filtered, function (a, b) { - return compare(orderBy, index, a, b); - }); - })(); + } + }); + } + }); + filtered = _utils2.default.sort(filtered, function (a, b) { + return compare(orderBy, index, a, b); + }); } var limit = _utils2.default._n(params.limit) ? params.limit : null; @@ -648,7 +646,7 @@ return /******/ (function(modules) { // webpackBootstrap value: true }); - var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; /* jshint eqeqeq:false */ + var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; /* jshint eqeqeq:false */ /** * Mix of ES6 and CommonJS module imports because the interop of Babel + Webpack + ES6 modules + CommonJS isn't very good. @@ -1074,7 +1072,7 @@ return /******/ (function(modules) { // webpackBootstrap throw new _errors2.default.IA('"options" must be an object!'); } forEach(toPromisify, function (name) { - if (typeof options[name] === 'function' && options[name].toString().indexOf('for (var _len = arg') === -1) { + if (typeof options[name] === 'function' && options[name].toString().indexOf('for (var _len3 = arg') === -1) { options[name] = _this.promisify(options[name]); } }); @@ -1329,36 +1327,30 @@ return /******/ (function(modules) { // webpackBootstrap return undefined; }; prop.set = function (children) { - var _this2 = this; - if (children && children.length) { - (function () { - var id = get(_this2, definition.idAttribute); - if (foreignKey) { - forEach(children, function (child) { - set(child, foreignKey, id); - }); - } else if (localKeys) { - (function () { - var keys = []; - forEach(children, function (child) { - keys.push(get(child, definition.getResource(relationName).idAttribute)); - }); - set(_this2, localKeys, keys); - })(); - } else if (foreignKeys) { - forEach(children, function (child) { - var keys = get(child, foreignKeys); - if (keys) { - if (!contains(keys, id)) { - keys.push(id); - } - } else { - set(child, foreignKeys, [id]); + var id = get(this, definition.idAttribute); + if (foreignKey) { + forEach(children, function (child) { + set(child, foreignKey, id); + }); + } else if (localKeys) { + var keys = []; + forEach(children, function (child) { + keys.push(get(child, definition.getResource(relationName).idAttribute)); + }); + set(this, localKeys, keys); + } else if (foreignKeys) { + forEach(children, function (child) { + var keys = get(child, foreignKeys); + if (keys) { + if (!contains(keys, id)) { + keys.push(id); } - }); - } - })(); + } else { + set(child, foreignKeys, [id]); + } + }); + } } return get(this, localField); }; @@ -1394,20 +1386,18 @@ return /******/ (function(modules) { // webpackBootstrap } } if (def.get) { - (function () { - var orig = prop.get; - prop.get = function () { - var _this3 = this; + var orig = prop.get; + prop.get = function () { + var _this2 = this; - return def.get(definition, def, this, function () { - for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { - args[_key4] = arguments[_key4]; - } + return def.get(definition, def, this, function () { + for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { + args[_key4] = arguments[_key4]; + } - return orig.apply(_this3, args); - }); - }; - })(); + return orig.apply(_this2, args); + }); + }; } Object.defineProperty(target, localField, prop); } @@ -3135,8 +3125,6 @@ return /******/ (function(modules) { // webpackBootstrap value: true }); - var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; - var _utils = __webpack_require__(2); var _utils2 = _interopRequireDefault(_utils); @@ -3147,9 +3135,9 @@ return /******/ (function(modules) { // webpackBootstrap function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - var NER = _errors2.default.NER; - var IA = _errors2.default.IA; - var R = _errors2.default.R; + var NER = _errors2.default.NER, + IA = _errors2.default.IA, + R = _errors2.default.R; var fakeId = 'DS_' + new Date().getTime(); @@ -3185,55 +3173,47 @@ return /******/ (function(modules) { // webpackBootstrap // @param options.ignoredChanges Array of strings or regular expressions of fields, the changes of which are to be ignored. // @returns The changes of the given item, if any. changes: function changes(resourceName, id, options) { - var _check$call = check.call(this, 'changes', resourceName, id, options); - - var _this = _check$call._this; - var definition = _check$call.definition; - var _resourceName = _check$call._resourceName; - var _id = _check$call._id; - var _options = _check$call._options; - + var _check$call = check.call(this, 'changes', resourceName, id, options), + _this = _check$call._this, + definition = _check$call.definition, + _resourceName = _check$call._resourceName, + _id = _check$call._id, + _options = _check$call._options; var item = definition.get(_id); if (item) { - var _ret = function () { - var observer = _this.store[_resourceName].observers[_id]; - if (observer && typeof observer === 'function') { - // force observation handler to be fired for item if there are changes and `Object.observe` is not available - observer.deliver(); - } + var observer = _this.store[_resourceName].observers[_id]; + if (observer && typeof observer === 'function') { + // force observation handler to be fired for item if there are changes and `Object.observe` is not available + observer.deliver(); + } - var ignoredChanges = _options.ignoredChanges || []; - // add linked relations to list of ignored changes - _utils2.default.forEach(definition.relationFields, function (field) { - if (!_utils2.default.contains(ignoredChanges, field)) { - ignoredChanges.push(field); + var ignoredChanges = _utils2.default.copy(_options.ignoredChanges || []); + // add linked relations to list of ignored changes + _utils2.default.forEach(definition.relationFields, function (field) { + if (!_utils2.default.contains(ignoredChanges, field)) { + ignoredChanges.push(field); + } + }); + // calculate changes + var diff = _utils2.default.diffObjectFromOldObject(item, _this.store[_resourceName].previousAttributes[_id], _utils2.default.equals, ignoredChanges); + // remove functions from diff + _utils2.default.forOwn(diff, function (changeset, name) { + var toKeep = []; + _utils2.default.forOwn(changeset, function (value, field) { + if (!_utils2.default.isFunction(value)) { + toKeep.push(field); } }); - // calculate changes - var diff = _utils2.default.diffObjectFromOldObject(item, _this.store[_resourceName].previousAttributes[_id], _utils2.default.equals, ignoredChanges); - // remove functions from diff - _utils2.default.forOwn(diff, function (changeset, name) { - var toKeep = []; - _utils2.default.forOwn(changeset, function (value, field) { - if (!_utils2.default.isFunction(value)) { - toKeep.push(field); - } - }); - diff[name] = _utils2.default.pick(diff[name], toKeep); - }); - // definitely ignore changes to linked relations - _utils2.default.forEach(definition.relationFields, function (field) { - delete diff.added[field]; - delete diff.removed[field]; - delete diff.changed[field]; - }); - return { - v: diff - }; - }(); - - if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v; + diff[name] = _utils2.default.pick(diff[name], toKeep); + }); + // definitely ignore changes to linked relations + _utils2.default.forEach(definition.relationFields, function (field) { + delete diff.added[field]; + delete diff.removed[field]; + delete diff.changed[field]; + }); + return diff; } }, @@ -3244,12 +3224,11 @@ return /******/ (function(modules) { // webpackBootstrap // @param id The primary key of the item whose change history is to be returned. // @returns The change history of the given item, if any. changeHistory: function changeHistory(resourceName, id) { - var _check$call2 = check.call(this, 'changeHistory', resourceName, id || fakeId); - - var _this = _check$call2._this; - var definition = _check$call2.definition; - var _resourceName = _check$call2._resourceName; - var _id = _check$call2._id; + var _check$call2 = check.call(this, 'changeHistory', resourceName, id || fakeId), + _this = _check$call2._this, + definition = _check$call2.definition, + _resourceName = _check$call2._resourceName, + _id = _check$call2._id; var resource = _this.store[_resourceName]; @@ -3267,12 +3246,11 @@ return /******/ (function(modules) { // webpackBootstrap } }, commit: function commit(resourceName, id) { - var _check$call3 = check.call(this, 'commit', resourceName, id); - - var _this = _check$call3._this; - var definition = _check$call3.definition; - var _resourceName = _check$call3._resourceName; - var _id = _check$call3._id; + var _check$call3 = check.call(this, 'commit', resourceName, id), + _this = _check$call3._this, + definition = _check$call3.definition, + _resourceName = _check$call3._resourceName, + _id = _check$call3._id; var resource = _this.store[_resourceName]; var item = _this.store[_resourceName].index[_id]; @@ -3351,15 +3329,13 @@ return /******/ (function(modules) { // webpackBootstrap var relationData = _utils2.default.get(attrs, def.localField); if (relationData) { if (_utils2.default.isArray(relationData)) { - (function () { - var array = []; - var Resource = definition.getResource(def.relation); - var _options = options.orig(); - _utils2.default.forEach(relationData, function (relationDataItem) { - array.push(Resource.createInstance(relationDataItem, _options)); - }); - _utils2.default.set(attrs, def.localField, array); - })(); + var array = []; + var Resource = definition.getResource(def.relation); + var _options = options.orig(); + _utils2.default.forEach(relationData, function (relationDataItem) { + array.push(Resource.createInstance(relationDataItem, _options)); + }); + _utils2.default.set(attrs, def.localField, array); } else if (_utils2.default.isObject(relationData)) { _utils2.default.set(attrs, def.localField, definition.getResource(def.relation).createInstance(relationData, options.orig())); } @@ -3480,14 +3456,14 @@ return /******/ (function(modules) { // webpackBootstrap // @returns The item with the given primary key if it's in the store. // / get: function get(resourceName, id) { - var _check$call4 = check.call(this, 'get', resourceName, id); - - var _this = _check$call4._this; - var _resourceName = _check$call4._resourceName; - var _id = _check$call4._id; + var _check$call4 = check.call(this, 'get', resourceName, id), + _this = _check$call4._this, + _resourceName = _check$call4._resourceName, + _id = _check$call4._id; // return the item if it exists + return _this.store[_resourceName].index[_id]; }, @@ -3533,11 +3509,9 @@ return /******/ (function(modules) { // webpackBootstrap // @param id The primary key of the item. // @returns Whether the item with the given primary key has any changes. hasChanges: function hasChanges(resourceName, id) { - var _check$call5 = check.call(this, 'hasChanges', resourceName, id); - - var definition = _check$call5.definition; - var _id = _check$call5._id; - + var _check$call5 = check.call(this, 'hasChanges', resourceName, id), + definition = _check$call5.definition, + _id = _check$call5._id; return definition.get(_id) ? diffIsEmpty(definition.changes(_id)) : false; }, @@ -3550,11 +3524,10 @@ return /******/ (function(modules) { // webpackBootstrap // @param id The primary key of the item. // @returns Whether the item with the given primary key is a temporary item. isNew: function isNew(resourceName, id) { - var _check$call6 = check.call(this, 'isNew', resourceName, id || fakeId); - - var _this = _check$call6._this; - var _resourceName = _check$call6._resourceName; - var _id = _check$call6._id; + var _check$call6 = check.call(this, 'isNew', resourceName, id || fakeId), + _this = _check$call6._this, + _resourceName = _check$call6._resourceName, + _id = _check$call6._id; var resource = _this.store[_resourceName]; @@ -3568,11 +3541,10 @@ return /******/ (function(modules) { // webpackBootstrap // @param id The primary key of the item. // @returns Timestamp from the last time the item was changed. lastModified: function lastModified(resourceName, id) { - var _check$call7 = check.call(this, 'lastModified', resourceName, id || fakeId); - - var _this = _check$call7._this; - var _resourceName = _check$call7._resourceName; - var _id = _check$call7._id; + var _check$call7 = check.call(this, 'lastModified', resourceName, id || fakeId), + _this = _check$call7._this, + _resourceName = _check$call7._resourceName, + _id = _check$call7._id; var resource = _this.store[_resourceName]; @@ -3592,11 +3564,10 @@ return /******/ (function(modules) { // webpackBootstrap // @param id The primary key of the item. // @returns Timestamp from the last time the item was saved. lastSaved: function lastSaved(resourceName, id) { - var _check$call8 = check.call(this, 'lastSaved', resourceName, id || fakeId); - - var _this = _check$call8._this; - var _resourceName = _check$call8._resourceName; - var _id = _check$call8._id; + var _check$call8 = check.call(this, 'lastSaved', resourceName, id || fakeId), + _this = _check$call8._this, + _resourceName = _check$call8._resourceName, + _id = _check$call8._id; var resource = _this.store[_resourceName]; @@ -3613,11 +3584,10 @@ return /******/ (function(modules) { // webpackBootstrap // @param id The primary key of the item. // @returns The previous attributes of the item previous: function previous(resourceName, id) { - var _check$call9 = check.call(this, 'previous', resourceName, id); - - var _this = _check$call9._this; - var _resourceName = _check$call9._resourceName; - var _id = _check$call9._id; + var _check$call9 = check.call(this, 'previous', resourceName, id), + _this = _check$call9._this, + _resourceName = _check$call9._resourceName, + _id = _check$call9._id; var resource = _this.store[_resourceName]; @@ -3633,14 +3603,12 @@ return /******/ (function(modules) { // webpackBootstrap // @param options Optional configuration. // @returns The reverted item revert: function revert(resourceName, id, options) { - var _check$call10 = check.call(this, 'revert', resourceName, id, options); - - var _this = _check$call10._this; - var definition = _check$call10.definition; - var _resourceName = _check$call10._resourceName; - var _id = _check$call10._id; - var _options = _check$call10._options; - + var _check$call10 = check.call(this, 'revert', resourceName, id, options), + _this = _check$call10._this, + definition = _check$call10.definition, + _resourceName = _check$call10._resourceName, + _id = _check$call10._id, + _options = _check$call10._options; var preserve = _options.preserve || []; var injectObj = {}; @@ -3648,26 +3616,20 @@ return /******/ (function(modules) { // webpackBootstrap if (preserve.length === 0) { injectObj = _this.previous(_resourceName, _id); } else { - var _ret3 = function () { - var instance = definition.get(id); - var previousInstance = _this.previous(_resourceName, _id); + var instance = definition.get(id); + var previousInstance = _this.previous(_resourceName, _id); - if (!instance) { - return { - v: void 0 - }; - } - - _utils2.default.forOwn(instance, function (value, key) { - if (_utils2.default.contains(preserve, key)) { - injectObj[key] = instance[key]; - } else { - injectObj[key] = previousInstance[key]; - } - }); - }(); + if (!instance) { + return; + } - if ((typeof _ret3 === 'undefined' ? 'undefined' : _typeof(_ret3)) === "object") return _ret3.v; + _utils2.default.forOwn(instance, function (value, key) { + if (_utils2.default.contains(preserve, key)) { + injectObj[key] = instance[key]; + } else { + injectObj[key] = previousInstance[key]; + } + }); } return definition.inject(injectObj, { @@ -3682,9 +3644,6 @@ return /******/ (function(modules) { // webpackBootstrap 'use strict'; - var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; /* jshint evil:true, loopfunc:true */ - - var _utils = __webpack_require__(2); var _utils2 = _interopRequireDefault(_utils); @@ -3706,6 +3665,7 @@ return /******/ (function(modules) { // webpackBootstrap * User.update(id, attrs[, options]) // DS method proxied on a Resource * user.DSUpdate(attrs[, options]) // DS method proxied on an Instance */ + /* jshint evil:true, loopfunc:true */ var instanceMethods = ['compute', 'eject', 'refresh', 'save', 'update', 'destroy', 'loadRelations', 'changeHistory', 'changes', 'commit', 'hasChanges', 'isNew', 'lastModified', 'lastSaved', 'previous', 'revert']; module.exports = function defineResource(definition) { @@ -3754,375 +3714,363 @@ return /******/ (function(modules) { // webpackBootstrap } try { - var def; - - var _class; - - var _ret = function () { - // Resources can inherit from another resource instead of inheriting directly from the data store defaults. - if (definition.extends && definitions[definition.extends]) { - // Inherit from another resource - Resource.prototype = definitions[definition.extends]; - } else { - // Inherit from global defaults - Resource.prototype = _this.defaults; - } - definitions[definition.name] = new Resource(definition); - - def = definitions[definition.name]; + // Resources can inherit from another resource instead of inheriting directly from the data store defaults. + if (definition.extends && definitions[definition.extends]) { + // Inherit from another resource + Resource.prototype = definitions[definition.extends]; + } else { + // Inherit from global defaults + Resource.prototype = _this.defaults; + } + definitions[definition.name] = new Resource(definition); + var def = definitions[definition.name]; - def.getResource = function (resourceName) { - return _this.definitions[resourceName]; - }; + def.getResource = function (resourceName) { + return _this.definitions[resourceName]; + }; - if (!_utils2.default._s(def.idAttribute)) { - throw new _errors2.default.IA('"idAttribute" must be a string!'); - } + if (!_utils2.default._s(def.idAttribute)) { + throw new _errors2.default.IA('"idAttribute" must be a string!'); + } - // Setup nested parent configuration - if (def.relations) { - def.relationList = []; - def.relationFields = []; - _utils2.default.forOwn(def.relations, function (relatedModels, type) { - _utils2.default.forOwn(relatedModels, function (defs, relationName) { - if (!_utils2.default._a(defs)) { - relatedModels[relationName] = [defs]; + // Setup nested parent configuration + if (def.relations) { + def.relationList = []; + def.relationFields = []; + _utils2.default.forOwn(def.relations, function (relatedModels, type) { + _utils2.default.forOwn(relatedModels, function (defs, relationName) { + if (!_utils2.default._a(defs)) { + relatedModels[relationName] = [defs]; + } + _utils2.default.forEach(relatedModels[relationName], function (d) { + d.type = type; + d.relation = relationName; + d.name = def.name; + def.relationList.push(d); + if (d.localField) { + def.relationFields.push(d.localField); } - _utils2.default.forEach(relatedModels[relationName], function (d) { - d.type = type; - d.relation = relationName; - d.name = def.name; - def.relationList.push(d); - if (d.localField) { - def.relationFields.push(d.localField); - } - }); }); }); - if (def.relations.belongsTo) { - def.parents = {}; - _utils2.default.forOwn(def.relations.belongsTo, function (relatedModel, modelName) { - _utils2.default.forEach(relatedModel, function (relation) { - if (relation.parent) { - def.parent = modelName; - def.parentKey = relation.localKey; - def.parentField = relation.localField; - def.parents[modelName] = { - key: def.parentKey, - field: def.parentField - }; - } - }); + }); + if (def.relations.belongsTo) { + def.parents = {}; + _utils2.default.forOwn(def.relations.belongsTo, function (relatedModel, modelName) { + _utils2.default.forEach(relatedModel, function (relation) { + if (relation.parent) { + def.parent = modelName; + def.parentKey = relation.localKey; + def.parentField = relation.localField; + def.parents[modelName] = { + key: def.parentKey, + field: def.parentField + }; + } }); - } - if (typeof Object.freeze === 'function') { - Object.freeze(def.relations); - Object.freeze(def.relationList); - } + }); } + if (typeof Object.freeze === 'function') { + Object.freeze(def.relations); + Object.freeze(def.relationList); + } + } - // Create the wrapper class for the new resource - _class = def['class'] = _utils2.default.pascalCase(def.name); - - try { - if (typeof def.useClass === 'function') { - if (def.csp) { - def[_class] = function () { - def.useClass.call(this); - }; - } else { - def[_class] = new Function('def', 'return function ' + _class + '() { def.useClass.call(this); }')(def); // eslint-disable-line - } - def[_class].prototype = function (proto) { - function Ctor() {} - - Ctor.prototype = proto; - return new Ctor(); - }(def.useClass.prototype); - } else if (def.csp) { - def[_class] = function () {}; + // Create the wrapper class for the new resource + var _class = def['class'] = _utils2.default.pascalCase(def.name); + try { + if (typeof def.useClass === 'function') { + if (def.csp) { + def[_class] = function () { + def.useClass.call(this); + }; } else { - def[_class] = new Function('return function ' + _class + '() {}')(); // eslint-disable-line + def[_class] = new Function('def', 'return function ' + _class + '() { def.useClass.call(this); }')(def); // eslint-disable-line } - } catch (e) { + def[_class].prototype = function (proto) { + function Ctor() {} + + Ctor.prototype = proto; + return new Ctor(); + }(def.useClass.prototype); + } else if (def.csp) { def[_class] = function () {}; + } else { + def[_class] = new Function('return function ' + _class + '() {}')(); // eslint-disable-line } + } catch (e) { + def[_class] = function () {}; + } - // Apply developer-defined instance methods - _utils2.default.forOwn(def.methods, function (fn, m) { - def[_class].prototype[m] = fn; - }); + // Apply developer-defined instance methods + _utils2.default.forOwn(def.methods, function (fn, m) { + def[_class].prototype[m] = fn; + }); - /** - * var user = User.createInstance({ id: 1 }) - * user.set('foo', 'bar') - */ - def[_class].prototype.set = function (key, value) { - var _this2 = this; - - _utils2.default.set(this, key, value); - def.compute(this); - if (def.instanceEvents) { - setTimeout(function () { - _this2.emit('DS.change', def, _this2); - }, 0); - } - def.handleChange(this); - return this; - }; + /** + * var user = User.createInstance({ id: 1 }) + * user.set('foo', 'bar') + */ + def[_class].prototype.set = function (key, value) { + var _this2 = this; - /** - * var user = User.createInstance({ id: 1 }) - * user.get('id') // 1 - */ - def[_class].prototype.get = function (key) { - return _utils2.default.get(this, key); - }; + _utils2.default.set(this, key, value); + def.compute(this); + if (def.instanceEvents) { + setTimeout(function () { + _this2.emit('DS.change', def, _this2); + }, 0); + } + def.handleChange(this); + return this; + }; - // Setup the relation links - _utils2.default.applyRelationGettersToTarget(_this, def, def[_class].prototype); + /** + * var user = User.createInstance({ id: 1 }) + * user.get('id') // 1 + */ + def[_class].prototype.get = function (key) { + return _utils2.default.get(this, key); + }; - var parentOmit = null; - if (!def.hasOwnProperty('omit')) { - parentOmit = def.omit; - def.omit = []; - } else { - parentOmit = _this.defaults.omit; - } - def.omit = def.omit.concat(parentOmit || []); + // Setup the relation links + _utils2.default.applyRelationGettersToTarget(_this, def, def[_class].prototype); + + var parentOmit = null; + if (!def.hasOwnProperty('omit')) { + parentOmit = def.omit; + def.omit = []; + } else { + parentOmit = _this.defaults.omit; + } + def.omit = def.omit.concat(parentOmit || []); - // Prepare for computed properties - _utils2.default.forOwn(def.computed, function (fn, field) { - if (_utils2.default.isFunction(fn)) { - def.computed[field] = [fn]; + // Prepare for computed properties + _utils2.default.forOwn(def.computed, function (fn, field) { + if (_utils2.default.isFunction(fn)) { + def.computed[field] = [fn]; + fn = def.computed[field]; + } + if (def.methods && field in def.methods) { + def.errorFn('Computed property "' + field + '" conflicts with previously defined prototype method!'); + } + def.omit.push(field); + if (_utils2.default.isArray(fn)) { + var deps; + if (fn.length === 1) { + var match = fn[0].toString().match(/function.*?\(([\s\S]*?)\)/); + deps = match[1].split(','); + deps = _utils2.default.filter(deps, function (x) { + return x; + }); + def.computed[field] = deps.concat(fn); fn = def.computed[field]; - } - if (def.methods && field in def.methods) { - def.errorFn('Computed property "' + field + '" conflicts with previously defined prototype method!'); - } - def.omit.push(field); - if (_utils2.default.isArray(fn)) { - var deps; - if (fn.length === 1) { - var match = fn[0].toString().match(/function.*?\(([\s\S]*?)\)/); - deps = match[1].split(','); - deps = _utils2.default.filter(deps, function (x) { - return x; - }); - def.computed[field] = deps.concat(fn); - fn = def.computed[field]; - if (deps.length) { - def.errorFn('Use the computed property array syntax for compatibility with minified code!'); - } + if (deps.length) { + def.errorFn('Use the computed property array syntax for compatibility with minified code!'); } - deps = fn.slice(0, fn.length - 1); - _utils2.default.forEach(deps, function (val, index) { - deps[index] = val.trim(); - }); - fn.deps = _utils2.default.filter(deps, function (dep) { - return !!dep; - }); - } else if (_utils2.default.isObject(fn)) { - Object.defineProperty(def[_class].prototype, field, fn); } - }); - - // add instance proxies of DS methods - _utils2.default.forEach(instanceMethods, function (name) { - def[_class].prototype['DS' + _utils2.default.pascalCase(name)] = function () { - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - args.unshift(this[def.idAttribute] || this); - args.unshift(def.name); - return _this[name].apply(_this, args); - }; - }); + deps = fn.slice(0, fn.length - 1); + _utils2.default.forEach(deps, function (val, index) { + deps[index] = val.trim(); + }); + fn.deps = _utils2.default.filter(deps, function (dep) { + return !!dep; + }); + } else if (_utils2.default.isObject(fn)) { + Object.defineProperty(def[_class].prototype, field, fn); + } + }); - // manually add instance proxy for DS#create - def[_class].prototype.DSCreate = function () { - for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - args[_key2] = arguments[_key2]; + // add instance proxies of DS methods + _utils2.default.forEach(instanceMethods, function (name) { + def[_class].prototype['DS' + _utils2.default.pascalCase(name)] = function () { + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; } - args.unshift(this); + args.unshift(this[def.idAttribute] || this); args.unshift(def.name); - return _this.create.apply(_this, args); + return _this[name].apply(_this, args); }; + }); - // Initialize store data for the new resource - _this.store[def.name] = { - collection: [], - expiresHeap: new _utils2.default.BinaryHeap(function (x) { - return x.expires; - }, function (x, y) { - return x.item === y; - }), - completedQueries: {}, - queryData: {}, - pendingQueries: {}, - index: {}, - modified: {}, - saved: {}, - previousAttributes: {}, - observers: {}, - changeHistories: {}, - changeHistory: [], - collectionModified: 0, - temporaryItems: {} - }; + // manually add instance proxy for DS#create + def[_class].prototype.DSCreate = function () { + for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } - var resource = _this.store[def.name]; + args.unshift(this); + args.unshift(def.name); + return _this.create.apply(_this, args); + }; - // start the reaping - if (def.reapInterval) { - setInterval(function () { - return def.reap(); - }, def.reapInterval); - } + // Initialize store data for the new resource + _this.store[def.name] = { + collection: [], + expiresHeap: new _utils2.default.BinaryHeap(function (x) { + return x.expires; + }, function (x, y) { + return x.item === y; + }), + completedQueries: {}, + queryData: {}, + pendingQueries: {}, + index: {}, + modified: {}, + saved: {}, + previousAttributes: {}, + observers: {}, + changeHistories: {}, + changeHistory: [], + collectionModified: 0, + temporaryItems: {} + }; - // proxy DS methods with shorthand ones - var fns = ['registerAdapter', 'getAdapterName', 'getAdapter', 'is', '!clear']; - for (var key in _this) { - if (typeof _this[key] === 'function') { - fns.push(key); - } - } + var resource = _this.store[def.name]; - /** - * Create the Resource shorthands that proxy DS methods. e.g. - * - * var store = new JSData.DS() - * var User = store.defineResource('user') - * - * store.update(resourceName, id, attrs[, options]) // DS method - * User.update(id, attrs[, options]) // DS method proxied on a Resource - */ - _utils2.default.forEach(fns, function (key) { - var k = key; - if (k[0] === '!') { - return; - } - if (_this[k].shorthand !== false) { - def[k] = function () { - for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { - args[_key3] = arguments[_key3]; - } + // start the reaping + if (def.reapInterval) { + setInterval(function () { + return def.reap(); + }, def.reapInterval); + } - args.unshift(def.name); - return _this[k].apply(_this, args); - }; - def[k].before = function (fn) { - var orig = def[k]; - def[k] = function () { - for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { - args[_key4] = arguments[_key4]; - } + // proxy DS methods with shorthand ones + var fns = ['registerAdapter', 'getAdapterName', 'getAdapter', 'is', '!clear']; + for (var key in _this) { + if (typeof _this[key] === 'function') { + fns.push(key); + } + } - return orig.apply(def, fn.apply(def, args) || args); - }; - }; - } else { + /** + * Create the Resource shorthands that proxy DS methods. e.g. + * + * var store = new JSData.DS() + * var User = store.defineResource('user') + * + * store.update(resourceName, id, attrs[, options]) // DS method + * User.update(id, attrs[, options]) // DS method proxied on a Resource + */ + _utils2.default.forEach(fns, function (key) { + var k = key; + if (k[0] === '!') { + return; + } + if (_this[k].shorthand !== false) { + def[k] = function () { + for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { + args[_key3] = arguments[_key3]; + } + + args.unshift(def.name); + return _this[k].apply(_this, args); + }; + def[k].before = function (fn) { + var orig = def[k]; def[k] = function () { - for (var _len5 = arguments.length, args = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) { - args[_key5] = arguments[_key5]; + for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { + args[_key4] = arguments[_key4]; } - return _this[k].apply(_this, args); + return orig.apply(def, fn.apply(def, args) || args); }; - } - }); + }; + } else { + def[k] = function () { + for (var _len5 = arguments.length, args = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) { + args[_key5] = arguments[_key5]; + } - def.beforeValidate = _utils2.default.promisify(def.beforeValidate); - def.validate = _utils2.default.promisify(def.validate); - def.afterValidate = _utils2.default.promisify(def.afterValidate); - def.beforeCreate = _utils2.default.promisify(def.beforeCreate); - def.afterCreate = _utils2.default.promisify(def.afterCreate); - def.afterFind = _utils2.default.promisify(def.afterFind); - def.afterFindAll = _utils2.default.promisify(def.afterFindAll); - def.afterLoadRelations = _utils2.default.promisify(def.afterLoadRelations); - def.beforeUpdate = _utils2.default.promisify(def.beforeUpdate); - def.afterUpdate = _utils2.default.promisify(def.afterUpdate); - def.beforeDestroy = _utils2.default.promisify(def.beforeDestroy); - def.afterDestroy = _utils2.default.promisify(def.afterDestroy); - - var defaultAdapter = void 0; - if (def.hasOwnProperty('defaultAdapter')) { - defaultAdapter = def.defaultAdapter; + return _this[k].apply(_this, args); + }; } + }); - // setup "actions" - _utils2.default.forOwn(def.actions, function (action, name) { - if (def[name] && !def.actions[name]) { - throw new Error('Cannot override existing method "' + name + '"!'); + def.beforeValidate = _utils2.default.promisify(def.beforeValidate); + def.validate = _utils2.default.promisify(def.validate); + def.afterValidate = _utils2.default.promisify(def.afterValidate); + def.beforeCreate = _utils2.default.promisify(def.beforeCreate); + def.afterCreate = _utils2.default.promisify(def.afterCreate); + def.afterFind = _utils2.default.promisify(def.afterFind); + def.afterFindAll = _utils2.default.promisify(def.afterFindAll); + def.afterLoadRelations = _utils2.default.promisify(def.afterLoadRelations); + def.beforeUpdate = _utils2.default.promisify(def.beforeUpdate); + def.afterUpdate = _utils2.default.promisify(def.afterUpdate); + def.beforeDestroy = _utils2.default.promisify(def.beforeDestroy); + def.afterDestroy = _utils2.default.promisify(def.afterDestroy); + + var defaultAdapter = void 0; + if (def.hasOwnProperty('defaultAdapter')) { + defaultAdapter = def.defaultAdapter; + } + + // setup "actions" + _utils2.default.forOwn(def.actions, function (action, name) { + if (def[name] && !def.actions[name]) { + throw new Error('Cannot override existing method "' + name + '"!'); + } + action.request = action.request || function (config) { + return config; + }; + action.response = action.response || function (response) { + return response; + }; + action.responseError = action.responseError || function (err) { + return _utils2.default.Promise.reject(err); + }; + def[name] = function (id, options) { + if (_utils2.default._o(id)) { + options = id; } - action.request = action.request || function (config) { - return config; - }; - action.response = action.response || function (response) { - return response; - }; - action.responseError = action.responseError || function (err) { - return _utils2.default.Promise.reject(err); - }; - def[name] = function (id, options) { - if (_utils2.default._o(id)) { - options = id; - } - options = options || {}; - var adapter = def.getAdapter(action.adapter || defaultAdapter || 'http'); - var config = _utils2.default.deepMixIn({}, action); - if (!options.hasOwnProperty('endpoint') && config.endpoint) { - options.endpoint = config.endpoint; - } - if (typeof options.getEndpoint === 'function') { - config.url = options.getEndpoint(def, options); - } else { - var _args = [options.basePath || def.basePath || adapter.defaults.basePath, adapter.getEndpoint(def, _utils2.default._sn(id) ? id : null, options)]; - if (_utils2.default._sn(id)) { - _args.push(id); - } - _args.push(action.pathname || name); - config.url = _utils2.default.makePath.apply(null, _args); + options = options || {}; + var adapter = def.getAdapter(action.adapter || defaultAdapter || 'http'); + var config = _utils2.default.deepMixIn({}, action); + if (!options.hasOwnProperty('endpoint') && config.endpoint) { + options.endpoint = config.endpoint; + } + if (typeof options.getEndpoint === 'function') { + config.url = options.getEndpoint(def, options); + } else { + var _args = [options.basePath || def.basePath || adapter.defaults.basePath, adapter.getEndpoint(def, _utils2.default._sn(id) ? id : null, options)]; + if (_utils2.default._sn(id)) { + _args.push(id); } - config.method = config.method || 'GET'; - config.resourceName = def.name; - _utils2.default.deepMixIn(config, options); - return new _utils2.default.Promise(function (resolve) { - return resolve(config); - }).then(options.request || action.request).then(function (config) { - return adapter.HTTP(config); - }).then(function (data) { - if (data && data.config) { - data.config.resourceName = def.name; - } - return data; - }).then(options.response || action.response, options.responseError || action.responseError); - }; - }); - - // mix in events - _utils2.default.Events(def); - - def.handleChange = function (data) { - resource.collectionModified = _utils2.default.updateTimestamp(resource.collectionModified); - if (def.notify) { - setTimeout(function () { - def.emit('DS.change', def, data); - }, 0); + _args.push(action.pathname || name); + config.url = _utils2.default.makePath.apply(null, _args); } + config.method = config.method || 'GET'; + config.resourceName = def.name; + _utils2.default.deepMixIn(config, options); + return new _utils2.default.Promise(function (resolve) { + return resolve(config); + }).then(options.request || action.request).then(function (config) { + return adapter.HTTP(config); + }).then(function (data) { + if (data && data.config) { + data.config.resourceName = def.name; + } + return data; + }).then(options.response || action.response, options.responseError || action.responseError); }; + }); + // mix in events + _utils2.default.Events(def); - return { - v: def - }; - }(); + def.handleChange = function (data) { + resource.collectionModified = _utils2.default.updateTimestamp(resource.collectionModified); + if (def.notify) { + setTimeout(function () { + def.emit('DS.change', def, data); + }, 0); + } + }; - if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v; + + return def; } catch (err) { _this.defaults.errorFn(err); delete definitions[definition.name]; @@ -4137,8 +4085,6 @@ return /******/ (function(modules) { // webpackBootstrap 'use strict'; - var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; - /* jshint eqeqeq:false */ /** * Eject an item from the store, if it is currently in the store. @@ -4181,66 +4127,60 @@ return /******/ (function(modules) { // webpackBootstrap } } if (found) { - var _ret = function () { - // lifecycle - definition.beforeEject(options, item); - if (options.notify) { - definition.emit('DS.beforeEject', definition, item); - } - - // find the item in any ($$injected) cached queries - var toRemove = []; - DSUtils.forOwn(resource.queryData, function (items, queryHash) { - if (items.$$injected) { - DSUtils.remove(items, item); - } - // optionally remove any empty queries - if (!items.length && options.clearEmptyQueries) { - toRemove.push(queryHash); - } - }); + // lifecycle + definition.beforeEject(options, item); + if (options.notify) { + definition.emit('DS.beforeEject', definition, item); + } - // clean up - DSUtils.forEach(resource.changeHistories[id], function (changeRecord) { - DSUtils.remove(resource.changeHistory, changeRecord); - }); - DSUtils.forEach(toRemove, function (queryHash) { - delete resource.completedQueries[queryHash]; - delete resource.queryData[queryHash]; - }); - if (resource.observers[id] && typeof resource.observers[id].close === 'function') { - // stop observation - resource.observers[id].close(); + // find the item in any ($$injected) cached queries + var toRemove = []; + DSUtils.forOwn(resource.queryData, function (items, queryHash) { + if (items.$$injected) { + DSUtils.remove(items, item); } - delete resource.observers[id]; - delete resource.index[id]; - delete resource.previousAttributes[id]; - delete resource.completedQueries[id]; - delete resource.pendingQueries[id]; - delete resource.changeHistories[id]; - delete resource.modified[id]; - delete resource.saved[id]; - if (definition.instanceEvents && item.off) { - item.off(); + // optionally remove any empty queries + if (!items.length && options.clearEmptyQueries) { + toRemove.push(queryHash); } + }); - // remove it from the store - resource.collection.splice(i, 1); - // collection has been modified - definition.handleChange(item); - - // lifecycle - definition.afterEject(options, item); - if (options.notify) { - definition.emit('DS.afterEject', definition, item); - } + // clean up + DSUtils.forEach(resource.changeHistories[id], function (changeRecord) { + DSUtils.remove(resource.changeHistory, changeRecord); + }); + DSUtils.forEach(toRemove, function (queryHash) { + delete resource.completedQueries[queryHash]; + delete resource.queryData[queryHash]; + }); + if (resource.observers[id] && typeof resource.observers[id].close === 'function') { + // stop observation + resource.observers[id].close(); + } + delete resource.observers[id]; + delete resource.index[id]; + delete resource.previousAttributes[id]; + delete resource.completedQueries[id]; + delete resource.pendingQueries[id]; + delete resource.changeHistories[id]; + delete resource.modified[id]; + delete resource.saved[id]; + if (definition.instanceEvents && item.off) { + item.off(); + } + + // remove it from the store + resource.collection.splice(i, 1); + // collection has been modified + definition.handleChange(item); - return { - v: item - }; - }(); + // lifecycle + definition.afterEject(options, item); + if (options.notify) { + definition.emit('DS.afterEject', definition, item); + } - if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v; + return item; } }; @@ -4481,13 +4421,11 @@ return /******/ (function(modules) { // webpackBootstrap var idA = definition.idAttribute; // compute the primary key if necessary if (c && c[idA]) { - (function () { - var args = []; - _utils2.default.forEach(c[idA].deps, function (dep) { - args.push(attrs[dep]); - }); - attrs[idA] = c[idA][c[idA].length - 1].apply(attrs, args); - })(); + var args = []; + _utils2.default.forEach(c[idA].deps, function (dep) { + args.push(attrs[dep]); + }); + attrs[idA] = c[idA][c[idA].length - 1].apply(attrs, args); } else if (options.temporary) { attrs[idA] = _utils2.default.guid(); } @@ -4498,161 +4436,157 @@ return /******/ (function(modules) { // webpackBootstrap throw error; } else { try { - (function () { - // when injecting object that contain their nested relations, this code - // will recursively inject them into their proper places in the data store. - // Magic! - _utils2.default.forEach(definition.relationList, function (def) { - var relationName = def.relation; - var relationDef = _this.definitions[relationName]; - var toInject = attrs[def.localField]; - if (typeof def.inject === 'function') { - def.inject(definition, def, attrs); - } else if (toInject && def.inject !== false) { - if (!relationDef) { - throw new _errors2.default.R(definition.name + ' relation is defined but the resource is not!'); - } - // handle injecting hasMany relations - if (_utils2.default._a(toInject)) { - (function () { - var items = []; - _utils2.default.forEach(toInject, function (toInjectItem) { - if (toInjectItem !== _this.store[relationName].index[toInjectItem[relationDef.idAttribute]]) { - try { - var injectedItem = relationDef.inject(toInjectItem, options.orig()); - if (def.foreignKey) { - _utils2.default.set(injectedItem, def.foreignKey, attrs[definition.idAttribute]); - } - items.push(injectedItem); - } catch (err) { - options.errorFn(err, 'Failed to inject ' + def.type + ' relation: "' + relationName + '"!'); - } - } - }); - })(); - } else { - // handle injecting belongsTo and hasOne relations - if (toInject !== _this.store[relationName].index[toInject[relationDef.idAttribute]]) { + // when injecting object that contain their nested relations, this code + // will recursively inject them into their proper places in the data store. + // Magic! + _utils2.default.forEach(definition.relationList, function (def) { + var relationName = def.relation; + var relationDef = _this.definitions[relationName]; + var toInject = attrs[def.localField]; + if (typeof def.inject === 'function') { + def.inject(definition, def, attrs); + } else if (toInject && def.inject !== false) { + if (!relationDef) { + throw new _errors2.default.R(definition.name + ' relation is defined but the resource is not!'); + } + // handle injecting hasMany relations + if (_utils2.default._a(toInject)) { + var items = []; + _utils2.default.forEach(toInject, function (toInjectItem) { + if (toInjectItem !== _this.store[relationName].index[toInjectItem[relationDef.idAttribute]]) { try { - var _injected = relationDef.inject(attrs[def.localField], options.orig()); + var injectedItem = relationDef.inject(toInjectItem, options.orig()); if (def.foreignKey) { - _utils2.default.set(_injected, def.foreignKey, attrs[definition.idAttribute]); - } - if (def.localKey) { - _utils2.default.set(attrs, def.localKey, _utils2.default.get(_injected, relationDef.idAttribute)); + _utils2.default.set(injectedItem, def.foreignKey, attrs[definition.idAttribute]); } + items.push(injectedItem); } catch (err) { options.errorFn(err, 'Failed to inject ' + def.type + ' relation: "' + relationName + '"!'); } } + }); + } else { + // handle injecting belongsTo and hasOne relations + if (toInject !== _this.store[relationName].index[toInject[relationDef.idAttribute]]) { + try { + var _injected = relationDef.inject(attrs[def.localField], options.orig()); + if (def.foreignKey) { + _utils2.default.set(_injected, def.foreignKey, attrs[definition.idAttribute]); + } + if (def.localKey) { + _utils2.default.set(attrs, def.localKey, _utils2.default.get(_injected, relationDef.idAttribute)); + } + } catch (err) { + options.errorFn(err, 'Failed to inject ' + def.type + ' relation: "' + relationName + '"!'); + } } } - }); + } + }); - // primary key of item being injected - var id = attrs[idA]; - // item being injected - var item = definition.get(id); - // 0 if the item is new, otherwise the previous last modified timestamp of the item - var initialLastModified = item ? resource.modified[id] : 0; - - // item is new - if (!item) { - if (attrs instanceof definition[definition['class']]) { - item = attrs; - } else { - item = new definition[definition['class']](); - if (options.applyDefaultsOnInject && options.defaultValues) { - _utils2.default.deepMixIn(item, _utils2.default.copy(options.defaultValues)); - } + // primary key of item being injected + var id = attrs[idA]; + // item being injected + var item = definition.get(id); + // 0 if the item is new, otherwise the previous last modified timestamp of the item + var initialLastModified = item ? resource.modified[id] : 0; + + // item is new + if (!item) { + if (attrs instanceof definition[definition['class']]) { + item = attrs; + } else { + item = new definition[definition['class']](); + if (options.applyDefaultsOnInject && options.defaultValues) { + _utils2.default.deepMixIn(item, _utils2.default.copy(options.defaultValues)); } + } - if (definition.instanceEvents && typeof item.emit !== 'function') { - _utils2.default.Events(item); + if (definition.instanceEvents && typeof item.emit !== 'function') { + _utils2.default.Events(item); + } + // remove relation properties from the item, since those relations have been injected by now + _utils2.default.forEach(definition.relationList, function (def) { + if (typeof def.link === 'boolean' ? def.link : !!definition.linkRelations) { + delete attrs[def.localField]; } - // remove relation properties from the item, since those relations have been injected by now - _utils2.default.forEach(definition.relationList, function (def) { - if (typeof def.link === 'boolean' ? def.link : !!definition.linkRelations) { - delete attrs[def.localField]; - } - }); + }); - // copy remaining properties to the injected item - _utils2.default.deepMixIn(item, attrs); + // copy remaining properties to the injected item + _utils2.default.deepMixIn(item, attrs); - // add item to collection - resource.collection.push(item); - resource.changeHistories[id] = []; + // add item to collection + resource.collection.push(item); + resource.changeHistories[id] = []; - // create the observer handler for the data to be injected - var _react = makeObserverHandler.call(_this, definition, resource); + // create the observer handler for the data to be injected + var _react = makeObserverHandler.call(_this, definition, resource); - // If we're in the browser, start observation - if (definition.watchChanges) { - resource.observers[id] = new _this.observe.ObjectObserver(item); - resource.observers[id].open(_react, item); - } + // If we're in the browser, start observation + if (definition.watchChanges) { + resource.observers[id] = new _this.observe.ObjectObserver(item); + resource.observers[id].open(_react, item); + } - // index item - resource.index[id] = item; - // fire observation handler for the first time - _react.call(item, {}, {}, {}, null, true); - // save "previous" attributes of the injected item, for change diffs later - resource.previousAttributes[id] = _utils2.default.copy(item, null, null, null, definition.relationFields); - // mark item as temporary if guid has been generated - if (options.temporary) { - resource.temporaryItems[id] = true; - } - } else { - // item is being re-injected - // new properties take precedence - if (options.onConflict === 'merge') { - _utils2.default.deepMixIn(item, attrs); - _utils2.default.forOwn(definition.computed, function (fn, field) { - _utils2.default.compute.call(item, fn, field); - }); - } else if (options.onConflict === 'replace') { - _utils2.default.forOwn(definition.computed, function (fn, field) { - _utils2.default.compute.call(attrs, fn, field); - }); - _utils2.default.forOwn(item, function (v, k) { - if (k !== definition.idAttribute) { - if (!attrs.hasOwnProperty(k)) { - delete item[k]; - } - } - }); - _utils2.default.forOwn(attrs, function (v, k) { - if (k !== definition.idAttribute) { - item[k] = v; + // index item + resource.index[id] = item; + // fire observation handler for the first time + _react.call(item, {}, {}, {}, null, true); + // save "previous" attributes of the injected item, for change diffs later + resource.previousAttributes[id] = _utils2.default.copy(item, null, null, null, definition.relationFields); + // mark item as temporary if guid has been generated + if (options.temporary) { + resource.temporaryItems[id] = true; + } + } else { + // item is being re-injected + // new properties take precedence + if (options.onConflict === 'merge') { + _utils2.default.deepMixIn(item, attrs); + _utils2.default.forOwn(definition.computed, function (fn, field) { + _utils2.default.compute.call(item, fn, field); + }); + } else if (options.onConflict === 'replace') { + _utils2.default.forOwn(definition.computed, function (fn, field) { + _utils2.default.compute.call(attrs, fn, field); + }); + _utils2.default.forOwn(item, function (v, k) { + if (k !== definition.idAttribute) { + if (!attrs.hasOwnProperty(k)) { + delete item[k]; } - }); - } + } + }); + _utils2.default.forOwn(attrs, function (v, k) { + if (k !== definition.idAttribute) { + item[k] = v; + } + }); + } - if (definition.resetHistoryOnInject) { - // clear change history for item - _this.commit(definition.name, id); - } - if (resource.observers[id] && typeof resource.observers[id] === 'function') { - // force observation callback to be fired if there are any changes to the item and `Object.observe` is not available - resource.observers[id].deliver(); - } + if (definition.resetHistoryOnInject) { + // clear change history for item + _this.commit(definition.name, id); } - // update modified timestamp of item - resource.modified[id] = initialLastModified && resource.modified[id] === initialLastModified ? _utils2.default.updateTimestamp(resource.modified[id]) : resource.modified[id]; - - // reset expiry tracking for item - resource.expiresHeap.remove(item); - var timestamp = new Date().getTime(); - resource.expiresHeap.push({ - item: item, - timestamp: timestamp, - expires: definition.maxAge ? timestamp + definition.maxAge : Number.MAX_VALUE - }); + if (resource.observers[id] && typeof resource.observers[id] === 'function') { + // force observation callback to be fired if there are any changes to the item and `Object.observe` is not available + resource.observers[id].deliver(); + } + } + // update modified timestamp of item + resource.modified[id] = initialLastModified && resource.modified[id] === initialLastModified ? _utils2.default.updateTimestamp(resource.modified[id]) : resource.modified[id]; + + // reset expiry tracking for item + resource.expiresHeap.remove(item); + var timestamp = new Date().getTime(); + resource.expiresHeap.push({ + item: item, + timestamp: timestamp, + expires: definition.maxAge ? timestamp + definition.maxAge : Number.MAX_VALUE + }); - // final injected item - injected = item; - })(); + // final injected item + injected = item; } catch (err) { options.errorFn(err, attrs); } @@ -5067,8 +5001,9 @@ return /******/ (function(modules) { // webpackBootstrap } }).then(function (item) { if (!item) { + var query = void 0; var usePendingFind = DSUtils.isFunction(options.usePendingFind) ? options.usePendingFind.call(this, resourceName, id, options) : options.usePendingFind; - if (!(id in resource.pendingQueries) && usePendingFind) { + if (!(id in resource.pendingQueries) || !usePendingFind) { var promise = void 0; var strategy = options.findStrategy || options.strategy; @@ -5093,7 +5028,7 @@ return /******/ (function(modules) { // webpackBootstrap promise = _this.adapters[adapter].find(definition, id, options); } - resource.pendingQueries[id] = promise.then(function (data) { + query = promise.then(function (data) { return options.afterFind.call(data, options, data); }).then(function (data) { // Query is no longer pending @@ -5110,8 +5045,14 @@ return /******/ (function(modules) { // webpackBootstrap return definition.createInstance(data, options.orig()); } }); + + if (usePendingFind) { + resource.pendingQueries[id] = query; + } + } else { + query = resource.pendingQueries[id]; } - return resource.pendingQueries[id]; + return query; } else { // resolve immediately with the item return item; @@ -5230,8 +5171,9 @@ return /******/ (function(modules) { // webpackBootstrap } }).then(function (items) { if (!items) { + var query = void 0; var usePendingFindAll = DSUtils.isFunction(options.usePendingFindAll) ? options.usePendingFindAll.call(this, resourceName, params, options) : options.usePendingFindAll; - if (!(queryHash in resource.pendingQueries) && usePendingFindAll) { + if (!(queryHash in resource.pendingQueries) || !usePendingFindAll) { var promise = void 0; var strategy = options.findAllStrategy || options.strategy; @@ -5256,7 +5198,7 @@ return /******/ (function(modules) { // webpackBootstrap promise = _this.adapters[adapter].findAll(definition, params, options); } - resource.pendingQueries[queryHash] = promise.then(function (data) { + query = promise.then(function (data) { return options.afterFindAll.call(data, options, data); }).then(function (data) { // Query is no longer pending @@ -5273,9 +5215,15 @@ return /******/ (function(modules) { // webpackBootstrap return data; } }); + + if (usePendingFindAll) { + resource.pendingQueries[queryHash] = query; + } + } else { + query = resource.pendingQueries[queryHash]; } - return resource.pendingQueries[queryHash]; + return query; } else { // resolve immediately with the items return items; @@ -5309,8 +5257,8 @@ return /******/ (function(modules) { // webpackBootstrap */ module.exports = function loadRelations(resourceName, instance, relations, options) { var _this = this; - var DSUtils = _this.utils; - var DSErrors = _this.errors; + var DSUtils = _this.utils, + DSErrors = _this.errors; var definition = _this.definitions[resourceName]; var _options = void 0; @@ -5333,78 +5281,76 @@ return /******/ (function(modules) { // webpackBootstrap } else if (!DSUtils._a(relations)) { reject(new DSErrors.IA('"relations" must be a string or an array!')); } else { - (function () { - _options = DSUtils._(definition, options); + _options = DSUtils._(definition, options); - var tasks = []; + var tasks = []; - DSUtils.forEach(definition.relationList, function (def) { - var relationName = def.relation; - var relationDef = definition.getResource(relationName); - var __options = DSUtils._(relationDef, options); + DSUtils.forEach(definition.relationList, function (def) { + var relationName = def.relation; + var relationDef = definition.getResource(relationName); + var __options = DSUtils._(relationDef, options); - // relations can be loaded based on resource name or field name - if (!relations.length || DSUtils.contains(relations, relationName) || DSUtils.contains(relations, def.localField)) { - var task = void 0; - var params = {}; - if (__options.allowSimpleWhere) { - params[def.foreignKey] = instance[definition.idAttribute]; - } else { - params.where = {}; - params.where[def.foreignKey] = { - '==': instance[definition.idAttribute] - }; - } + // relations can be loaded based on resource name or field name + if (!relations.length || DSUtils.contains(relations, relationName) || DSUtils.contains(relations, def.localField)) { + var task = void 0; + var params = {}; + if (__options.allowSimpleWhere) { + params[def.foreignKey] = instance[definition.idAttribute]; + } else { + params.where = {}; + params.where[def.foreignKey] = { + '==': instance[definition.idAttribute] + }; + } - var orig = __options.orig(); - var defKey = def.localKey ? DSUtils.get(instance, def.localKey) : null; - var hasDefKey = !!(defKey || defKey === 0); + var orig = __options.orig(); + var defKey = def.localKey ? DSUtils.get(instance, def.localKey) : null; + var hasDefKey = !!(defKey || defKey === 0); - if (typeof def.load === 'function') { - task = def.load(definition, def, instance, orig); - } else { - if (def.type === 'hasMany') { - if (def.localKeys) { - delete params[def.foreignKey]; - var keys = DSUtils.get(instance, def.localKeys) || []; - keys = DSUtils._a(keys) ? keys : DSUtils.keys(keys); - params.where = _defineProperty({}, relationDef.idAttribute, { - 'in': keys - }); - orig.localKeys = keys; - } else if (def.foreignKeys) { - delete params[def.foreignKey]; - params.where = _defineProperty({}, def.foreignKeys, { - contains: instance[definition.idAttribute] - }); - } - task = relationDef.findAll(params, orig); - } else if (def.type === 'hasOne') { - if (def.localKey && hasDefKey) { - task = relationDef.find(defKey, orig); - } else if (def.foreignKey) { - task = relationDef.findAll(params, orig).then(function (hasOnes) { - return hasOnes.length ? hasOnes[0] : null; - }); - } - } else if (hasDefKey) { + if (typeof def.load === 'function') { + task = def.load(definition, def, instance, orig); + } else { + if (def.type === 'hasMany') { + if (def.localKeys) { + delete params[def.foreignKey]; + var keys = DSUtils.get(instance, def.localKeys) || []; + keys = DSUtils._a(keys) ? keys : DSUtils.keys(keys); + params.where = _defineProperty({}, relationDef.idAttribute, { + 'in': keys + }); + orig.localKeys = keys; + } else if (def.foreignKeys) { + delete params[def.foreignKey]; + params.where = _defineProperty({}, def.foreignKeys, { + contains: instance[definition.idAttribute] + }); + } + task = relationDef.findAll(params, orig); + } else if (def.type === 'hasOne') { + if (def.localKey && hasDefKey) { task = relationDef.find(defKey, orig); + } else if (def.foreignKey) { + task = relationDef.findAll(params, orig).then(function (hasOnes) { + return hasOnes.length ? hasOnes[0] : null; + }); } + } else if (hasDefKey) { + task = relationDef.find(defKey, orig); } + } - if (task) { - if (!_options.linkRelations) { - task = task.then(function (data) { - instance[def.localField] = data; - }); - } - tasks.push(task); + if (task) { + if (!_options.linkRelations) { + task = task.then(function (data) { + instance[def.localField] = data; + }); } + tasks.push(task); } - }); + } + }); - resolve(tasks); - })(); + resolve(tasks); } }).then(function (tasks) { return DSUtils.Promise.all(tasks); @@ -5419,8 +5365,6 @@ return /******/ (function(modules) { // webpackBootstrap 'use strict'; - var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; - /** * Find expired items of the specified resource type and perform the configured action. * @@ -5464,32 +5408,24 @@ return /******/ (function(modules) { // webpackBootstrap } if (options.reapAction === 'inject') { - (function () { - var timestamp = new Date().getTime(); - DSUtils.forEach(items, function (item) { - resource.expiresHeap.push({ - item: item, - timestamp: timestamp, - expires: definition.maxAge ? timestamp + definition.maxAge : Number.MAX_VALUE - }); + var timestamp = new Date().getTime(); + DSUtils.forEach(items, function (item) { + resource.expiresHeap.push({ + item: item, + timestamp: timestamp, + expires: definition.maxAge ? timestamp + definition.maxAge : Number.MAX_VALUE }); - })(); + }); } else if (options.reapAction === 'eject') { DSUtils.forEach(items, function (item) { definition.eject(item[definition.idAttribute]); }); } else if (options.reapAction === 'refresh') { - var _ret2 = function () { - var tasks = []; - DSUtils.forEach(items, function (item) { - tasks.push(definition.refresh(item[definition.idAttribute])); - }); - return { - v: DSUtils.Promise.all(tasks) - }; - }(); - - if ((typeof _ret2 === 'undefined' ? 'undefined' : _typeof(_ret2)) === "object") return _ret2.v; + var tasks = []; + DSUtils.forEach(items, function (item) { + tasks.push(definition.refresh(item[definition.idAttribute])); + }); + return DSUtils.Promise.all(tasks); } return items; }).then(function (items) { @@ -5510,8 +5446,6 @@ return /******/ (function(modules) { // webpackBootstrap 'use strict'; - var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; - /** * Save a single item in its present state. * @@ -5522,8 +5456,8 @@ return /******/ (function(modules) { // webpackBootstrap */ module.exports = function save(resourceName, id, options) { var _this = this; - var DSUtils = _this.utils; - var DSErrors = _this.errors; + var DSUtils = _this.utils, + DSErrors = _this.errors; var definition = _this.definitions[resourceName]; var resource = _this.store[resourceName]; @@ -5560,38 +5494,30 @@ return /******/ (function(modules) { // webpackBootstrap } // only send changed properties to the adapter if (options.changesOnly) { - var key; - - var _ret = function () { - if (resource.observers[id] && typeof resource.observers[id] === 'function') { - resource.observers[id].deliver(); - } - var toKeep = []; - var changes = definition.changes(id); - - for (key in changes.added) { - toKeep.push(key); - } - for (key in changes.changed) { - toKeep.push(key); - } - DSUtils.forEach(options.always, function (property) { - toKeep.push(property); - }); - changes = DSUtils.pick(attrs, toKeep); - // no changes? no save - if (DSUtils.isEmpty(changes)) { - // no changes, return - noChanges = true; - return { - v: attrs - }; - } else { - attrs = changes; - } - }(); + if (resource.observers[id] && typeof resource.observers[id] === 'function') { + resource.observers[id].deliver(); + } + var toKeep = []; + var changes = definition.changes(id); - if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v; + for (var key in changes.added) { + toKeep.push(key); + } + for (key in changes.changed) { + toKeep.push(key); + } + DSUtils.forEach(options.always, function (property) { + toKeep.push(property); + }); + changes = DSUtils.pick(attrs, toKeep); + // no changes? no save + if (DSUtils.isEmpty(changes)) { + // no changes, return + noChanges = true; + return attrs; + } else { + attrs = changes; + } } adapter = definition.getAdapterName(options); return _this.adapters[adapter].update(definition, id, DSUtils.omit(attrs, options.omit), options); @@ -5639,8 +5565,8 @@ return /******/ (function(modules) { // webpackBootstrap */ module.exports = function update(resourceName, id, attrs, options) { var _this = this; - var DSUtils = _this.utils; - var DSErrors = _this.errors; + var DSUtils = _this.utils, + DSErrors = _this.errors; var definition = _this.definitions[resourceName]; var adapter = void 0; @@ -5703,8 +5629,6 @@ return /******/ (function(modules) { // webpackBootstrap 'use strict'; - var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; - /** * Update a collection of items using the supplied properties hash. * @@ -5716,8 +5640,8 @@ return /******/ (function(modules) { // webpackBootstrap */ module.exports = function updateAll(resourceName, attrs, params, options) { var _this = this; - var DSUtils = _this.utils; - var DSErrors = _this.errors; + var DSUtils = _this.utils, + DSErrors = _this.errors; var definition = _this.definitions[resourceName]; var adapter = void 0; @@ -5754,37 +5678,25 @@ return /******/ (function(modules) { // webpackBootstrap } var origOptions = options.orig(); if (options.cacheResponse) { - var _ret = function () { - // inject the updated items into the store - var injected = definition.inject(data, origOptions); - var resource = _this.store[resourceName]; - // mark the items as "saved" - DSUtils.forEach(injected, function (i) { - var id = i[definition.idAttribute]; - resource.saved[id] = DSUtils.updateTimestamp(resource.saved[id]); - if (!definition.resetHistoryOnInject) { - resource.previousAttributes[id] = DSUtils.copy(i, null, null, null, definition.relationFields); - } - }); - return { - v: injected - }; - }(); - - if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v; + // inject the updated items into the store + var injected = definition.inject(data, origOptions); + var resource = _this.store[resourceName]; + // mark the items as "saved" + DSUtils.forEach(injected, function (i) { + var id = i[definition.idAttribute]; + resource.saved[id] = DSUtils.updateTimestamp(resource.saved[id]); + if (!definition.resetHistoryOnInject) { + resource.previousAttributes[id] = DSUtils.copy(i, null, null, null, definition.relationFields); + } + }); + return injected; } else { - var _ret2 = function () { - // just return instances - var instances = []; - DSUtils.forEach(data, function (item) { - instances.push(definition.createInstance(item, origOptions)); - }); - return { - v: instances - }; - }(); - - if ((typeof _ret2 === 'undefined' ? 'undefined' : _typeof(_ret2)) === "object") return _ret2.v; + // just return instances + var instances = []; + DSUtils.forEach(data, function (item) { + instances.push(definition.createInstance(item, origOptions)); + }); + return instances; } }).then(function (items) { return DSUtils.respond(items, { adapter: adapter }, options); diff --git a/dist/js-data.min.js b/dist/js-data.min.js index 4c58a7a0..894d3420 100644 --- a/dist/js-data.min.js +++ b/dist/js-data.min.js @@ -1,12 +1,12 @@ /*! * js-data -* @version 2.10.0 - Homepage +* @version 2.10.1 - Homepage * @author Jason Dobry * @copyright (c) 2014-2016 Jason Dobry * @license MIT * * @overview Robust framework-agnostic data store. */ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.JSData=t():e.JSData=t()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}var i=n(1),o=r(i),a=n(2),u=r(a),f=n(3),s=r(f);e.exports={DS:o.default,DSUtils:u.default,DSErrors:s.default,createStore:function(e){return new o.default(e)},version:{full:"<%= pkg.version %>",major:parseInt("<%= major %>",10),minor:parseInt("<%= minor %>",10),patch:parseInt("<%= patch %>",10),alpha:"<%= alpha %>",beta:"<%= beta %>"}}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t,n){n(null,t)}function a(e,t){return t}function u(e,t,n,r){var i=e[t],o=h.default.get(n,i[0]),a=h.default.get(r,i[0]);return h.default._s(o)&&(o=h.default.upperCase(o)),h.default._s(a)&&(a=h.default.upperCase(a)),"DESC"===i[1]?ao?1:ta?1:t"===o?a=f>r:">="===o?a=f>=r:"<"===o?a=f0;){var o=Math.floor((n+1)/2)-1,a=e[o];if(i>=t(a))break;e[o]=r,e[n]=a,n=o}},n=function(e,t,n){for(var r=e.length,i=e[n],o=t(i);;){var a=2*(n+1),u=a-1,f=null;if(u0&&(this.heap[0]=t,n(this.heap,this.weightFunc,0)),e},r.remove=function(e){for(var r=this.heap.length,i=0;i-1&&(e=e.replace(/[\xC0-\xC5]/g,"A").replace(/[\xC6]/g,"AE").replace(/[\xC7]/g,"C").replace(/[\xC8-\xCB]/g,"E").replace(/[\xCC-\xCF]/g,"I").replace(/[\xD0]/g,"D").replace(/[\xD1]/g,"N").replace(/[\xD2-\xD6\xD8]/g,"O").replace(/[\xD9-\xDC]/g,"U").replace(/[\xDD]/g,"Y").replace(/[\xDE]/g,"P").replace(/[\xE0-\xE5]/g,"a").replace(/[\xE6]/g,"ae").replace(/[\xE7]/g,"c").replace(/[\xE8-\xEB]/g,"e").replace(/[\xEC-\xEF]/g,"i").replace(/[\xF1]/g,"n").replace(/[\xF2-\xF6\xF8]/g,"o").replace(/[\xF9-\xFC]/g,"u").replace(/[\xFE]/g,"p").replace(/[\xFD\xFF]/g,"y")),e}var i=n(15);e.exports=r},function(e,t,n){function r(e){return e=i(e),e.replace(o,"")}var i=n(15),o=/[^\x20\x2D0-9A-Z\x5Fa-z\xC0-\xD6\xD8-\xF6\xF8-\xFF]/g;e.exports=r},function(e,t,n){function r(e){return e=i(e),e.toUpperCase()}var i=n(15);e.exports=r},function(e,t,n){function r(e){return e=i(e),e.toLowerCase()}var i=n(15);e.exports=r},function(e,t,n){function r(e,t){var n=i(e,t);n!==-1&&e.splice(n,1)}var i=n(11);e.exports=r},function(e,t,n){function r(e,t){for(var n,r="string"!=typeof arguments[1]?arguments[1]:i(arguments,1),o={},a=0;n=r[a++];)o[n]=e[n];return o}var i=n(6);e.exports=r},function(e,t,n){var r=n(7),i=Object.keys||function(e){var t=[];return r(e,function(e,n){t.push(n)}),t};e.exports=i},function(e,t){function n(e,t){if(null==e)return[];if(e.length<2)return e;null==t&&(t=r);var o,a,u;return o=~~(e.length/2),a=n(e.slice(0,o),t),u=n(e.slice(o,e.length),t),i(a,u,t)}function r(e,t){return et?1:0}function i(e,t,n){for(var r=[];e.length&&t.length;)n(e[0],t[0])<=0?r.push(e.shift()):r.push(t.shift());return e.length&&r.push.apply(r,e),t.length&&r.push.apply(r,t),r}e.exports=n},function(e,t,n){function r(e,t){for(var n=t.split("."),r=n.pop();t=n.shift();)if(e=e[t],null==e)return;return e[r]}n(26);e.exports=r},function(e,t){function n(e){switch(typeof e){case"string":case"number":case"boolean":return!0}return null==e}e.exports=n},function(e,t,n){function r(e,t,n){var r=/^(.+)\.(.+)$/.exec(t);r?i(e,r[1])[r[2]]=n:e[t]=n}var i=n(28);e.exports=r},function(e,t,n){function r(e,t){return t?(i(t.split("."),function(t){e[t]||(e[t]={}),e=e[t]}),e):e}var i=n(5);e.exports=r},function(e,t){!function(e){function t(){function e(e){t=e}if("function"!=typeof Object.observe||"function"!=typeof Array.observe)return!1;var t=[],n={},r=[];return Object.observe(n,e),Array.observe(r,e),n.id=1,n.id=2,delete n.id,r.push(1,2),r.length=0,Object.deliverChangeRecords(e),5===t.length&&("add"==t[0].type&&"update"==t[1].type&&"delete"==t[2].type&&"splice"==t[3].type&&"splice"==t[4].type&&(Object.unobserve(n,e),Array.unobserve(r,e),!0))}function n(t){for(var n=0;n0}function r(e){for(var t in e)return!1;return!0}function i(e){return r(e.added)&&r(e.removed)&&r(e.changed)}function o(e,t){if(!t||!t.length)return!1;for(var n,r=0;r0?e:6;for(var t="";e--;)t+=i(o);return t}var i=n(32),o="0123456789abcdef".split("");e.exports=r},function(e,t,n){function r(e){var t=1===arguments.length&&o(e)?e:arguments;return t[i(0,t.length-1)]}var i=n(33),o=n(38);e.exports=r},function(e,t,n){function r(e,t){return e=null==e?i:~~e,t=null==t?o:~~t,Math.round(a(e-.5,t+.499999999999))}var i=n(34),o=n(35),a=n(36);e.exports=r},function(e,t){e.exports=-2147483648},function(e,t){e.exports=2147483647},function(e,t,n){function r(e,t){return e=null==e?o:e,t=null==t?a:t,e+(t-e)*i()}var i=n(37),o=n(34),a=n(35);e.exports=r},function(e,t){function n(){return n.get()}n.get=Math.random,e.exports=n},function(e,t,n){var r=n(39),i=Array.isArray||function(e){return r(e,"Array")};e.exports=i},function(e,t,n){function r(e,t){return i(e)===t}var i=n(40);e.exports=r},function(e,t){function n(e){return null===e?"Null":e===r?"Undefined":i.exec(o.call(e))[1]}var r,i=/^\[object (.*)\]$/,o=Object.prototype.toString;e.exports=n},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e){return!(f.default.isEmpty(e.added)&&f.default.isEmpty(e.removed)&&f.default.isEmpty(e.changed))}function o(e,t,n,r){var i=this,o=i.definitions[t];if(r=r||{},n=f.default.resolveId(o,n),!o)throw new l(t);if(!f.default._sn(n))throw f.default._snErr("id");return n=n===h?void 0:n,r=f.default._(o,r),{_this:i,definition:o,_resourceName:t,_id:n,_options:r}}Object.defineProperty(t,"__esModule",{value:!0});var a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},u=n(2),f=r(u),s=n(3),c=r(s),l=c.default.NER,d=c.default.IA,p=c.default.R,h="DS_"+(new Date).getTime();t.default={changes:function(e,t,n){var r=o.call(this,"changes",e,t,n),i=r._this,u=r.definition,s=r._resourceName,c=r._id,l=r._options,d=u.get(c);if(d){var p=function(){var e=i.store[s].observers[c];e&&"function"==typeof e&&e.deliver();var t=l.ignoredChanges||[];f.default.forEach(u.relationFields,function(e){f.default.contains(t,e)||t.push(e)});var n=f.default.diffObjectFromOldObject(d,i.store[s].previousAttributes[c],f.default.equals,t);return f.default.forOwn(n,function(e,t){var r=[];f.default.forOwn(e,function(e,t){f.default.isFunction(e)||r.push(t)}),n[t]=f.default.pick(n[t],r)}),f.default.forEach(u.relationFields,function(e){delete n.added[e],delete n.removed[e],delete n.changed[e]}),{v:n}}();if("object"===("undefined"==typeof p?"undefined":a(p)))return p.v}},changeHistory:function(e,t){var n=o.call(this,"changeHistory",e,t||h),r=n._this,i=n.definition,a=n._resourceName,u=n._id,f=r.store[a];if(i.keepChangeHistory){if(!a)return f.changeHistory;var s=i.get(u);if(s)return f.changeHistories[u]}else i.errorFn("changeHistory is disabled for this resource!")},commit:function(e,t){var n=o.call(this,"commit",e,t),r=n._this,i=n.definition,a=n._resourceName,u=n._id,s=r.store[a],c=r.store[a].index[u];if(c){var l=i.relationFields||[],d={};for(var p in c)l.indexOf(p)===-1&&(d[p]=f.default.copy(c[p],null,null,null,[]));s.previousAttributes[u]=d}return s.changeHistories[u].length&&(f.default.forEach(s.changeHistories[u],function(e){ -f.default.remove(s.changeHistory,e)}),s.changeHistories[u].splice(0,s.changeHistories[u].length)),c},compute:function(e,t){var n=this,r=n.definitions[e];if(t=f.default.resolveItem(n.store[e],t),!r)throw new l(e);if(!t)throw new p("Item not in the store!");if(!f.default._o(t)&&!f.default._sn(t))throw new d('"instance" must be an object, string or number!');return f.default.forOwn(r.computed,function(e,n){f.default.compute.call(t,e,n)}),t},createInstance:function(e,t,n){var r=this.definitions[e],i=void 0;if(t=t||{},!r)throw new l(e);if(t&&!f.default.isObject(t))throw new d('"attrs" must be an object!');n=f.default._(r,n);var o=r.relationList||[];o.length&&f.default.forEach(o,function(e){var i=f.default.get(t,e.localField);i&&(f.default.isArray(i)?!function(){var o=[],a=r.getResource(e.relation),u=n.orig();f.default.forEach(i,function(e){o.push(a.createInstance(e,u))}),f.default.set(t,e.localField,o)}():f.default.isObject(i)&&f.default.set(t,e.localField,r.getResource(e.relation).createInstance(i,n.orig())))}),n.beforeCreateInstance(n,t);var a=r[r.class];return i=new a,r.instanceEvents&&f.default.Events(i),n.defaultValues&&f.default.deepMixIn(i,f.default.copy(n.defaultValues)),f.default.deepMixIn(i,t),r.computed&&r.compute(i),n.afterCreateInstance(n,i),i},createCollection:function(e,t,n,r){var i=this,o=i.definitions[e];if(t=t||[],n=n||{},!o)throw new l(e);if(t&&!f.default.isArray(t))throw new d('"arr" must be an array!');return r=f.default._(o,r),r.beforeCreateCollection(r,t),Object.defineProperties(t,{fetch:{value:function(t,n){var r=this;return r.params=t||r.params,o.findAll(r.params,n).then(function(t){return t===r?r:(t.unshift(r.length),t.unshift(0),r.splice.apply(r,t),t.shift(),t.shift(),t.$$injected&&(i.store[e].queryData[f.default.toJson(r.params)]=r,r.$$injected=!0),r)})}},params:{value:n,writable:!0},resourceName:{value:e}}),r.afterCreateCollection(r,t),t},defineResource:n(42),digest:function(){this.observe.Platform.performMicrotaskCheckpoint()},eject:n(43),ejectAll:n(44),filter:n(45),get:function(e,t){var n=o.call(this,"get",e,t),r=n._this,i=n._resourceName,a=n._id;return r.store[i].index[a]},getAll:function(e,t){var n=this,r=n.definitions[e],i=n.store[e],o=[];if(!r)throw new l(e);if(t&&!f.default._a(t))throw f.default._aErr("ids");if(f.default._a(t))for(var a=t.length,u=0;u",major:parseInt("<%= major %>",10),minor:parseInt("<%= minor %>",10),patch:parseInt("<%= patch %>",10),alpha:"<%= alpha %>",beta:"<%= beta %>"}}},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t,r){r(null,t)}function a(e,t){return t}function u(e,t,r,n){var i=e[t],o=h.default.get(r,i[0]),a=h.default.get(n,i[0]);return h.default._s(o)&&(o=h.default.upperCase(o)),h.default._s(a)&&(a=h.default.upperCase(a)),"DESC"===i[1]?ao?1:ta?1:t"===o?a=s>n:">="===o?a=s>=n:"<"===o?a=s0;){var o=Math.floor((r+1)/2)-1,a=e[o];if(i>=t(a))break;e[o]=n,e[r]=a,r=o}},r=function(e,t,r){for(var n=e.length,i=e[r],o=t(i);;){var a=2*(r+1),u=a-1,s=null;if(u0&&(this.heap[0]=t,r(this.heap,this.weightFunc,0)),e},n.remove=function(e){for(var n=this.heap.length,i=0;i-1&&(e=e.replace(/[\xC0-\xC5]/g,"A").replace(/[\xC6]/g,"AE").replace(/[\xC7]/g,"C").replace(/[\xC8-\xCB]/g,"E").replace(/[\xCC-\xCF]/g,"I").replace(/[\xD0]/g,"D").replace(/[\xD1]/g,"N").replace(/[\xD2-\xD6\xD8]/g,"O").replace(/[\xD9-\xDC]/g,"U").replace(/[\xDD]/g,"Y").replace(/[\xDE]/g,"P").replace(/[\xE0-\xE5]/g,"a").replace(/[\xE6]/g,"ae").replace(/[\xE7]/g,"c").replace(/[\xE8-\xEB]/g,"e").replace(/[\xEC-\xEF]/g,"i").replace(/[\xF1]/g,"n").replace(/[\xF2-\xF6\xF8]/g,"o").replace(/[\xF9-\xFC]/g,"u").replace(/[\xFE]/g,"p").replace(/[\xFD\xFF]/g,"y")),e}var i=r(15);e.exports=n},function(e,t,r){function n(e){return e=i(e),e.replace(o,"")}var i=r(15),o=/[^\x20\x2D0-9A-Z\x5Fa-z\xC0-\xD6\xD8-\xF6\xF8-\xFF]/g;e.exports=n},function(e,t,r){function n(e){return e=i(e),e.toUpperCase()}var i=r(15);e.exports=n},function(e,t,r){function n(e){return e=i(e),e.toLowerCase()}var i=r(15);e.exports=n},function(e,t,r){function n(e,t){var r=i(e,t);r!==-1&&e.splice(r,1)}var i=r(11);e.exports=n},function(e,t,r){function n(e,t){for(var r,n="string"!=typeof arguments[1]?arguments[1]:i(arguments,1),o={},a=0;r=n[a++];)o[r]=e[r];return o}var i=r(6);e.exports=n},function(e,t,r){var n=r(7),i=Object.keys||function(e){var t=[];return n(e,function(e,r){t.push(r)}),t};e.exports=i},function(e,t){function r(e,t){if(null==e)return[];if(e.length<2)return e;null==t&&(t=n);var o,a,u;return o=~~(e.length/2),a=r(e.slice(0,o),t),u=r(e.slice(o,e.length),t),i(a,u,t)}function n(e,t){return et?1:0}function i(e,t,r){for(var n=[];e.length&&t.length;)r(e[0],t[0])<=0?n.push(e.shift()):n.push(t.shift());return e.length&&n.push.apply(n,e),t.length&&n.push.apply(n,t),n}e.exports=r},function(e,t,r){function n(e,t){for(var r=t.split("."),n=r.pop();t=r.shift();)if(e=e[t],null==e)return;return e[n]}r(26);e.exports=n},function(e,t){function r(e){switch(typeof e){case"string":case"number":case"boolean":return!0}return null==e}e.exports=r},function(e,t,r){function n(e,t,r){var n=/^(.+)\.(.+)$/.exec(t);n?i(e,n[1])[n[2]]=r:e[t]=r}var i=r(28);e.exports=n},function(e,t,r){function n(e,t){return t?(i(t.split("."),function(t){e[t]||(e[t]={}),e=e[t]}),e):e}var i=r(5);e.exports=n},function(e,t){!function(e){function t(){function e(e){t=e}if("function"!=typeof Object.observe||"function"!=typeof Array.observe)return!1;var t=[],r={},n=[];return Object.observe(r,e),Array.observe(n,e),r.id=1,r.id=2,delete r.id,n.push(1,2),n.length=0,Object.deliverChangeRecords(e),5===t.length&&("add"==t[0].type&&"update"==t[1].type&&"delete"==t[2].type&&"splice"==t[3].type&&"splice"==t[4].type&&(Object.unobserve(r,e),Array.unobserve(n,e),!0))}function r(t){for(var r=0;r0}function n(e){for(var t in e)return!1;return!0}function i(e){return n(e.added)&&n(e.removed)&&n(e.changed)}function o(e,t){if(!t||!t.length)return!1;for(var r,n=0;n0?e:6;for(var t="";e--;)t+=i(o);return t}var i=r(32),o="0123456789abcdef".split("");e.exports=n},function(e,t,r){function n(e){var t=1===arguments.length&&o(e)?e:arguments;return t[i(0,t.length-1)]}var i=r(33),o=r(38);e.exports=n},function(e,t,r){function n(e,t){return e=null==e?i:~~e,t=null==t?o:~~t,Math.round(a(e-.5,t+.499999999999))}var i=r(34),o=r(35),a=r(36);e.exports=n},function(e,t){e.exports=-2147483648},function(e,t){e.exports=2147483647},function(e,t,r){function n(e,t){return e=null==e?o:e,t=null==t?a:t,e+(t-e)*i()}var i=r(37),o=r(34),a=r(35);e.exports=n},function(e,t){function r(){return r.get()}r.get=Math.random,e.exports=r},function(e,t,r){var n=r(39),i=Array.isArray||function(e){return n(e,"Array")};e.exports=i},function(e,t,r){function n(e,t){return i(e)===t}var i=r(40);e.exports=n},function(e,t){function r(e){return null===e?"Null":e===n?"Undefined":i.exec(o.call(e))[1]}var n,i=/^\[object (.*)\]$/,o=Object.prototype.toString;e.exports=r},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function i(e){return!(u.default.isEmpty(e.added)&&u.default.isEmpty(e.removed)&&u.default.isEmpty(e.changed))}function o(e,t,r,n){var i=this,o=i.definitions[t];if(n=n||{},r=u.default.resolveId(o,r),!o)throw new c(t);if(!u.default._sn(r))throw u.default._snErr("id");return r=r===p?void 0:r,n=u.default._(o,n),{_this:i,definition:o,_resourceName:t,_id:r,_options:n}}Object.defineProperty(t,"__esModule",{value:!0});var a=r(2),u=n(a),s=r(3),f=n(s),c=f.default.NER,l=f.default.IA,d=f.default.R,p="DS_"+(new Date).getTime();t.default={changes:function(e,t,r){var n=o.call(this,"changes",e,t,r),i=n._this,a=n.definition,s=n._resourceName,f=n._id,c=n._options,l=a.get(f);if(l){var d=i.store[s].observers[f];d&&"function"==typeof d&&d.deliver();var p=u.default.copy(c.ignoredChanges||[]);u.default.forEach(a.relationFields,function(e){u.default.contains(p,e)||p.push(e)});var h=u.default.diffObjectFromOldObject(l,i.store[s].previousAttributes[f],u.default.equals,p);return u.default.forOwn(h,function(e,t){var r=[];u.default.forOwn(e,function(e,t){u.default.isFunction(e)||r.push(t)}),h[t]=u.default.pick(h[t],r)}),u.default.forEach(a.relationFields,function(e){delete h.added[e],delete h.removed[e],delete h.changed[e]}),h}},changeHistory:function(e,t){var r=o.call(this,"changeHistory",e,t||p),n=r._this,i=r.definition,a=r._resourceName,u=r._id,s=n.store[a];if(i.keepChangeHistory){if(!a)return s.changeHistory;var f=i.get(u);if(f)return s.changeHistories[u]}else i.errorFn("changeHistory is disabled for this resource!")},commit:function(e,t){var r=o.call(this,"commit",e,t),n=r._this,i=r.definition,a=r._resourceName,s=r._id,f=n.store[a],c=n.store[a].index[s];if(c){var l=i.relationFields||[],d={};for(var p in c)l.indexOf(p)===-1&&(d[p]=u.default.copy(c[p],null,null,null,[]));f.previousAttributes[s]=d}return f.changeHistories[s].length&&(u.default.forEach(f.changeHistories[s],function(e){u.default.remove(f.changeHistory,e)}),f.changeHistories[s].splice(0,f.changeHistories[s].length)),c},compute:function(e,t){var r=this,n=r.definitions[e];if(t=u.default.resolveItem(r.store[e],t), +!n)throw new c(e);if(!t)throw new d("Item not in the store!");if(!u.default._o(t)&&!u.default._sn(t))throw new l('"instance" must be an object, string or number!');return u.default.forOwn(n.computed,function(e,r){u.default.compute.call(t,e,r)}),t},createInstance:function(e,t,r){var n=this.definitions[e],i=void 0;if(t=t||{},!n)throw new c(e);if(t&&!u.default.isObject(t))throw new l('"attrs" must be an object!');r=u.default._(n,r);var o=n.relationList||[];o.length&&u.default.forEach(o,function(e){var i=u.default.get(t,e.localField);if(i)if(u.default.isArray(i)){var o=[],a=n.getResource(e.relation),s=r.orig();u.default.forEach(i,function(e){o.push(a.createInstance(e,s))}),u.default.set(t,e.localField,o)}else u.default.isObject(i)&&u.default.set(t,e.localField,n.getResource(e.relation).createInstance(i,r.orig()))}),r.beforeCreateInstance(r,t);var a=n[n.class];return i=new a,n.instanceEvents&&u.default.Events(i),r.defaultValues&&u.default.deepMixIn(i,u.default.copy(r.defaultValues)),u.default.deepMixIn(i,t),n.computed&&n.compute(i),r.afterCreateInstance(r,i),i},createCollection:function(e,t,r,n){var i=this,o=i.definitions[e];if(t=t||[],r=r||{},!o)throw new c(e);if(t&&!u.default.isArray(t))throw new l('"arr" must be an array!');return n=u.default._(o,n),n.beforeCreateCollection(n,t),Object.defineProperties(t,{fetch:{value:function(t,r){var n=this;return n.params=t||n.params,o.findAll(n.params,r).then(function(t){return t===n?n:(t.unshift(n.length),t.unshift(0),n.splice.apply(n,t),t.shift(),t.shift(),t.$$injected&&(i.store[e].queryData[u.default.toJson(n.params)]=n,n.$$injected=!0),n)})}},params:{value:r,writable:!0},resourceName:{value:e}}),n.afterCreateCollection(n,t),t},defineResource:r(42),digest:function(){this.observe.Platform.performMicrotaskCheckpoint()},eject:r(43),ejectAll:r(44),filter:r(45),get:function(e,t){var r=o.call(this,"get",e,t),n=r._this,i=r._resourceName,a=r._id;return n.store[i].index[a]},getAll:function(e,t){var r=this,n=r.definitions[e],i=r.store[e],o=[];if(!n)throw new c(e);if(t&&!u.default._a(t))throw u.default._aErr("ids");if(u.default._a(t))for(var a=t.length,s=0;s