dist/globals/ember-data.prod.js in ember-data-source-2.18.3 vs dist/globals/ember-data.prod.js in ember-data-source-3.0.0.beta.1

- old
+ new

@@ -4,11 +4,11 @@ /*! * @overview Ember Data * @copyright Copyright 2011-2017 Tilde Inc. and contributors. * Portions Copyright 2011 LivingSocial Inc. * @license Licensed under MIT license (see license.js) - * @version 2.18.3 + * @version 3.0.0-beta.1 */ var loader, define, requireModule, require, requirejs; (function (global) { @@ -1326,11 +1326,11 @@ } // export real global exports.default = checkGlobal(checkElementIdShadowing(typeof global === 'object' && global)) || checkGlobal(typeof self === 'object' && self) || checkGlobal(typeof window === 'object' && window) || new Function('return this')(); }); -define('ember-data/-private', ['exports', 'ember-data/-private/system/model/model', 'ember-data/-private/system/model/errors', 'ember-data/-private/system/store', 'ember-data/-private/core', 'ember-data/-private/system/relationships/belongs-to', 'ember-data/-private/system/relationships/has-many', 'ember-data/-private/adapters/build-url-mixin', 'ember-data/-private/system/snapshot', 'ember-data/-private/adapters/errors', 'ember-data/-private/system/normalize-model-name', 'ember-data/-private/utils', 'ember-data/-private/system/coerce-id', 'ember-data/-private/utils/parse-response-headers', 'ember-data/-private/global', 'ember-data/-private/features', 'ember-data/-private/system/model/states', 'ember-data/-private/system/model/internal-model', 'ember-data/-private/system/store/container-instance-cache', 'ember-data/-private/system/promise-proxies', 'ember-data/-private/system/record-arrays', 'ember-data/-private/system/many-array', 'ember-data/-private/system/record-array-manager', 'ember-data/-private/system/relationships/state/relationship', 'ember-data/-private/system/debug/debug-adapter', 'ember-data/-private/system/diff-array', 'ember-data/-private/system/relationships/relationship-payloads-manager', 'ember-data/-private/system/relationships/relationship-payloads', 'ember-data/-private/system/snapshot-record-array'], function (exports, _model, _errors, _store, _core, _belongsTo, _hasMany, _buildUrlMixin, _snapshot, _errors2, _normalizeModelName, _utils, _coerceId, _parseResponseHeaders, _global, _features, _states, _internalModel, _containerInstanceCache, _promiseProxies, _recordArrays, _manyArray, _recordArrayManager, _relationship, _debugAdapter, _diffArray, _relationshipPayloadsManager, _relationshipPayloads, _snapshotRecordArray) { +define('ember-data/-private', ['exports', 'ember-data/-private/system/model/model', 'ember-data/-private/system/model/errors', 'ember-data/-private/system/store', 'ember-data/-private/core', 'ember-data/-private/system/relationships/belongs-to', 'ember-data/-private/system/relationships/has-many', 'ember-data/-private/adapters/build-url-mixin', 'ember-data/-private/system/snapshot', 'ember-data/-private/adapters/errors', 'ember-data/-private/system/normalize-model-name', 'ember-data/-private/utils', 'ember-data/-private/system/coerce-id', 'ember-data/-private/utils/parse-response-headers', 'ember-data/-private/global', 'ember-data/-private/features', 'ember-data/-private/system/model/states', 'ember-data/-private/system/model/internal-model', 'ember-data/-private/system/promise-proxies', 'ember-data/-private/system/record-arrays', 'ember-data/-private/system/many-array', 'ember-data/-private/system/record-array-manager', 'ember-data/-private/system/relationships/state/relationship', 'ember-data/-private/system/debug/debug-adapter', 'ember-data/-private/system/diff-array', 'ember-data/-private/system/relationships/relationship-payloads-manager', 'ember-data/-private/system/relationships/relationship-payloads', 'ember-data/-private/system/snapshot-record-array'], function (exports, _model, _errors, _store, _core, _belongsTo, _hasMany, _buildUrlMixin, _snapshot, _errors2, _normalizeModelName, _utils, _coerceId, _parseResponseHeaders, _global, _features, _states, _internalModel, _promiseProxies, _recordArrays, _manyArray, _recordArrayManager, _relationship, _debugAdapter, _diffArray, _relationshipPayloadsManager, _relationshipPayloads, _snapshotRecordArray) { 'use strict'; exports.__esModule = true; Object.defineProperty(exports, 'Model', { enumerable: true, @@ -1498,16 +1498,10 @@ enumerable: true, get: function () { return _internalModel.default; } }); - Object.defineProperty(exports, 'ContainerInstanceCache', { - enumerable: true, - get: function () { - return _containerInstanceCache.default; - } - }); Object.defineProperty(exports, 'PromiseArray', { enumerable: true, get: function () { return _promiseProxies.PromiseArray; } @@ -2687,28 +2681,16 @@ } } return true; } - // Handle dematerialization for relationship `rel`. In all cases, notify the - // relatinoship of the dematerialization: this is done so the relationship can - // notify its inverse which needs to update state - // - // If the inverse is sync, unloading this record is treated as a client-side - // delete, so we remove the inverse records from this relationship to - // disconnect the graph. Because it's not async, we don't need to keep around - // the internalModel as an id-wrapper for references and because the graph is - // disconnected we can actually destroy the internalModel when checking for - // orphaned models. function destroyRelationship(rel) { - rel.internalModelDidDematerialize(); - - if (rel._inverseIsSync()) { - // disconnect the graph so that the sync inverse relationship does not - // prevent us from cleaning up during `_cleanupOrphanedInternalModels` - rel.removeAllInternalModelsFromOwn(); - rel.removeAllCanonicalInternalModelsFromOwn(); + if (rel._inverseIsAsync()) { + rel.removeInternalModelFromInverse(rel.inverseInternalModel); + rel.removeInverseRelationships(); + } else { + rel.removeCompletelyFromInverse(); } } // this (and all heimdall instrumentation) will be stripped by a babel transform // https://github.com/heimdalljs/babel5-plugin-strip-heimdall @@ -2921,11 +2903,10 @@ }); }; InternalModel.prototype._directlyRelatedInternalModels = function _directlyRelatedInternalModels() { var array = []; - this._relationships.forEach(function (name, rel) { array = array.concat(rel.members.list, rel.canonicalMembers.list); }); return array; }; @@ -3170,11 +3151,11 @@ this._inFlightAttributes = null; this.didCleanError(); } if (this.isNew()) { - this.removeFromInverseRelationships(true); + this.removeFromInverseRelationships(); } if (this.isValid()) { this._inFlightAttributes = null; } @@ -3287,29 +3268,23 @@ triggers.length = 0; }; InternalModel.prototype.removeFromInverseRelationships = function removeFromInverseRelationships() { - var isNew = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - this._relationships.forEach(function (name, rel) { rel.removeCompletelyFromInverse(); - if (isNew === true) { - rel.clear(); - } + rel.clear(); }); var implicitRelationships = this._implicitRelationships; this.__implicitRelationships = null; Object.keys(implicitRelationships).forEach(function (key) { var rel = implicitRelationships[key]; rel.removeCompletelyFromInverse(); - if (isNew === true) { - rel.clear(); - } + rel.clear(); }); }; InternalModel.prototype.destroyRelationships = function destroyRelationships() { var relationships = this._relationships; @@ -3319,11 +3294,14 @@ var implicitRelationships = this._implicitRelationships; this.__implicitRelationships = null; Object.keys(implicitRelationships).forEach(function (key) { var rel = implicitRelationships[key]; + destroyRelationship(rel); + + rel.destroy(); }); }; InternalModel.prototype.preloadData = function preloadData(preload) { var _this = this; @@ -3724,11 +3702,11 @@ } var relationships = relationshipMap.get(type.modelName).filter(function (relationship) { var optionsForRelationship = inverseType.metaForProperty(relationship.name).options; - if (!optionsForRelationship.inverse) { + if (!optionsForRelationship.inverse && optionsForRelationship.inverse !== null) { return true; } return name === optionsForRelationship.inverse; }); @@ -4804,14 +4782,10 @@ // If it is, get the metadata for the relationship. This is // populated by the `DS.belongsTo` helper when it is creating // the computed property. var meta = value.meta(); - /* - This is buggy because if the parent has never been looked up - via `modelFor` it will not have `modelName` set. - */ meta.parentType = proto.constructor; } } }); } @@ -6203,11 +6177,11 @@ // yes we are touching `this` before super, but ArrayProxy has a bug that requires this. this.set('content', this.get('content') || A()); this._super.apply(this, arguments); this.query = this.query || null; - this.links = null; + this.links = this.links || null; }, replace: function () { throw new Error('The result of a server query (on ' + this.modelName + ') is immutable.'); }, _update: function () { @@ -6801,11 +6775,11 @@ if (data instanceof _model.default) { if ((0, _features.default)('ds-overhaul-references')) { (false && !(false) && Ember.deprecate("BelongsToReference#push(DS.Model) is deprecated. Update relationship via `model.set('relationshipName', value)` instead.", false, { id: 'ds.references.belongs-to.push-record', - until: '3.0' + until: '4.0.0' })); } record = data; } else { record = _this.store.push(data); @@ -7216,11 +7190,11 @@ var array = payload; if ((0, _features.default)("ds-overhaul-references")) { (false && !(!Array.isArray(payload)) && Ember.deprecate("HasManyReference#push(array) is deprecated. Push a JSON-API document instead.", !Array.isArray(payload), { id: 'ds.references.has-many.push-array', - until: '3.0' + until: '4.0.0' })); } var useLegacyArrayPush = true; if (typeof payload === "object" && payload.data) { @@ -7228,11 +7202,11 @@ useLegacyArrayPush = array.length && array[0].data; if ((0, _features.default)('ds-overhaul-references')) { (false && !(!useLegacyArrayPush) && Ember.deprecate("HasManyReference#push() expects a valid JSON-API document.", !useLegacyArrayPush, { id: 'ds.references.has-many.push-invalid-json-api', - until: '3.0' + until: '4.0.0' })); } } if (!(0, _features.default)('ds-overhaul-references')) { @@ -7614,19 +7588,25 @@ } return modelName; } function relationshipFromMeta(meta) { - return { + var result = { key: meta.key, kind: meta.kind, type: typeForRelationshipMeta(meta), options: meta.options, name: meta.name, parentType: meta.parentType, isRelationship: true }; + + if (false) { + result.parentType = meta.parentType; + } + + return result; } }); define('ember-data/-private/system/relationships/belongs-to', ['exports', 'ember-data/-private/system/normalize-model-name'], function (exports, _normalizeModelName) { 'use strict'; @@ -8032,18 +8012,17 @@ if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - var get = Ember.get; + var _get = Ember.get; var RelationshipPayloadsManager = function () { function RelationshipPayloadsManager(store) { this._store = store; // cache of `RelationshipPayload`s this._cache = Object.create(null); - this._inverseLookupCache = new _relationshipPayloads.TypeCache(); } /** Find the payload for the given relationship of the given model. Returns the payload for the given relationship, whether raw or computed from @@ -8060,194 +8039,90 @@ @method */ RelationshipPayloadsManager.prototype.get = function get(modelName, id, relationshipName) { - var relationshipPayloads = this._getRelationshipPayloads(modelName, relationshipName, false); + var modelClass = this._store._modelFor(modelName); + var relationshipsByName = _get(modelClass, 'relationshipsByName'); + var relationshipPayloads = this._getRelationshipPayloads(modelName, relationshipName, modelClass, relationshipsByName, false); return relationshipPayloads && relationshipPayloads.get(modelName, id, relationshipName); }; RelationshipPayloadsManager.prototype.push = function push(modelName, id, relationshipsData) { var _this = this; if (!relationshipsData) { return; } + var modelClass = this._store._modelFor(modelName); + var relationshipsByName = _get(modelClass, 'relationshipsByName'); Object.keys(relationshipsData).forEach(function (key) { - var relationshipPayloads = _this._getRelationshipPayloads(modelName, key, true); + var relationshipPayloads = _this._getRelationshipPayloads(modelName, key, modelClass, relationshipsByName, true); if (relationshipPayloads) { relationshipPayloads.push(modelName, id, key, relationshipsData[key]); } }); }; RelationshipPayloadsManager.prototype.unload = function unload(modelName, id) { var _this2 = this; var modelClass = this._store._modelFor(modelName); - var relationshipsByName = get(modelClass, 'relationshipsByName'); + var relationshipsByName = _get(modelClass, 'relationshipsByName'); relationshipsByName.forEach(function (_, relationshipName) { - var relationshipPayloads = _this2._getRelationshipPayloads(modelName, relationshipName, false); + var relationshipPayloads = _this2._getRelationshipPayloads(modelName, relationshipName, modelClass, relationshipsByName, false); if (relationshipPayloads) { relationshipPayloads.unload(modelName, id, relationshipName); } }); }; - RelationshipPayloadsManager.prototype._getRelationshipPayloads = function _getRelationshipPayloads(modelName, relationshipName, init) { - var relInfo = this.getRelationshipInfo(modelName, relationshipName); - - if (relInfo === null) { + RelationshipPayloadsManager.prototype._getRelationshipPayloads = function _getRelationshipPayloads(modelName, relationshipName, modelClass, relationshipsByName, init) { + if (!relationshipsByName.has(relationshipName)) { return; } - var cache = this._cache[relInfo.lhs_key]; - - if (!cache && init) { - return this._initializeRelationshipPayloads(relInfo); + var key = modelName + ':' + relationshipName; + if (!this._cache[key] && init) { + return this._initializeRelationshipPayloads(modelName, relationshipName, modelClass, relationshipsByName); } - return cache; + return this._cache[key]; }; - RelationshipPayloadsManager.prototype.getRelationshipInfo = function getRelationshipInfo(modelName, relationshipName) { - var inverseCache = this._inverseLookupCache; - var store = this._store; - var cached = inverseCache.get(modelName, relationshipName); - - // CASE: We have a cached resolution (null if no relationship exists) - if (cached !== undefined) { - return cached; - } - - var modelClass = store._modelFor(modelName); - var relationshipsByName = get(modelClass, 'relationshipsByName'); - - // CASE: We don't have a relationship at all - if (!relationshipsByName.has(relationshipName)) { - inverseCache.set(modelName, relationshipName, null); - return null; - } - - var inverseMeta = modelClass.inverseFor(relationshipName, store); + RelationshipPayloadsManager.prototype._initializeRelationshipPayloads = function _initializeRelationshipPayloads(modelName, relationshipName, modelClass, relationshipsByName) { var relationshipMeta = relationshipsByName.get(relationshipName); - var selfIsPolymorphic = relationshipMeta.options !== undefined && relationshipMeta.options.polymorphic === true; - var inverseBaseModelName = relationshipMeta.type; + var inverseMeta = modelClass.inverseFor(relationshipName, this._store); - // CASE: We have no inverse - if (!inverseMeta) { - var _info = { - lhs_key: modelName + ':' + relationshipName, - lhs_modelNames: [modelName], - lhs_baseModelName: modelName, - lhs_relationshipName: relationshipName, - lhs_relationshipMeta: relationshipMeta, - lhs_isPolymorphic: selfIsPolymorphic, - rhs_key: '', - rhs_modelNames: [], - rhs_baseModelName: inverseBaseModelName, - rhs_relationshipName: '', - rhs_relationshipMeta: null, - rhs_isPolymorphic: false, - hasInverse: false, - isSelfReferential: false, // modelName === inverseBaseModelName, - isReflexive: false - }; + var inverseModelName = void 0; + var inverseRelationshipName = void 0; + var inverseRelationshipMeta = void 0; - inverseCache.set(modelName, relationshipName, _info); - - return _info; + // figure out the inverse relationship; we need two things + // a) the inverse model name + //- b) the name of the inverse relationship + if (inverseMeta) { + inverseRelationshipName = inverseMeta.name; + inverseModelName = relationshipMeta.type; + inverseRelationshipMeta = _get(inverseMeta.type, 'relationshipsByName').get(inverseRelationshipName); + } else { + // relationship has no inverse + inverseModelName = inverseRelationshipName = ''; + inverseRelationshipMeta = null; } - // CASE: We do have an inverse + var lhsKey = modelName + ':' + relationshipName; + var rhsKey = inverseModelName + ':' + inverseRelationshipName; - var inverseRelationshipName = inverseMeta.name; - var inverseRelationshipMeta = get(inverseMeta.type, 'relationshipsByName').get(inverseRelationshipName); - var baseModelName = inverseRelationshipMeta.type; - var isSelfReferential = baseModelName === inverseBaseModelName; - - // TODO we want to assert this but this breaks all of our shoddily written tests - /* - if (DEBUG) { - let inverseDoubleCheck = inverseMeta.type.inverseFor(inverseRelationshipName, store); - assert(`The ${inverseBaseModelName}:${inverseRelationshipName} relationship declares 'inverse: null', but it was resolved as the inverse for ${baseModelName}:${relationshipName}.`, inverseDoubleCheck); - } - */ - - // CASE: We may have already discovered the inverse for the baseModelName - // CASE: We have already discovered the inverse - cached = inverseCache.get(baseModelName, relationshipName) || inverseCache.get(inverseBaseModelName, inverseRelationshipName); - if (cached) { - (false && Ember.assert('The ' + inverseBaseModelName + ':' + inverseRelationshipName + ' relationship declares \'inverse: null\', but it was resolved as the inverse for ' + baseModelName + ':' + relationshipName + '.', cached.hasInverse !== false)); - - - var isLHS = cached.lhs_baseModelName === baseModelName; - var modelNames = isLHS ? cached.lhs_modelNames : cached.rhs_modelNames; - // make this lookup easier in the future by caching the key - modelNames.push(modelName); - inverseCache.set(modelName, relationshipName, cached); - - return cached; - } - - var info = { - lhs_key: baseModelName + ':' + relationshipName, - lhs_modelNames: [modelName], - lhs_baseModelName: baseModelName, - lhs_relationshipName: relationshipName, - lhs_relationshipMeta: relationshipMeta, - lhs_isPolymorphic: selfIsPolymorphic, - rhs_key: inverseBaseModelName + ':' + inverseRelationshipName, - rhs_modelNames: [], - rhs_baseModelName: inverseBaseModelName, - rhs_relationshipName: inverseRelationshipName, - rhs_relationshipMeta: inverseRelationshipMeta, - rhs_isPolymorphic: inverseRelationshipMeta.options !== undefined && inverseRelationshipMeta.options.polymorphic === true, - hasInverse: true, - isSelfReferential: isSelfReferential, - isReflexive: isSelfReferential && relationshipName === inverseRelationshipName - }; - - // Create entries for the baseModelName as well as modelName to speed up - // inverse lookups - inverseCache.set(baseModelName, relationshipName, info); - inverseCache.set(modelName, relationshipName, info); - - // Greedily populate the inverse - inverseCache.set(inverseBaseModelName, inverseRelationshipName, info); - - return info; - }; - - RelationshipPayloadsManager.prototype._initializeRelationshipPayloads = function _initializeRelationshipPayloads(relInfo) { - var lhsKey = relInfo.lhs_key; - var rhsKey = relInfo.rhs_key; - var existingPayloads = this._cache[lhsKey]; - - if (relInfo.hasInverse === true && relInfo.rhs_isPolymorphic === true) { - existingPayloads = this._cache[rhsKey]; - - if (existingPayloads !== undefined) { - this._cache[lhsKey] = existingPayloads; - return existingPayloads; - } - } - // populate the cache for both sides of the relationship, as they both use // the same `RelationshipPayloads`. // // This works out better than creating a single common key, because to // compute that key we would need to do work to look up the inverse // - var cache = this._cache[lhsKey] = new _relationshipPayloads.default(relInfo); - - if (relInfo.hasInverse === true) { - this._cache[rhsKey] = cache; - } - - return cache; + return this._cache[lhsKey] = this._cache[rhsKey] = new _relationshipPayloads.default(this._store, modelName, relationshipName, relationshipMeta, inverseModelName, inverseRelationshipName, inverseRelationshipMeta); }; return RelationshipPayloadsManager; }(); @@ -8256,10 +8131,16 @@ define('ember-data/-private/system/relationships/relationship-payloads', ['exports'], function (exports) { 'use strict'; exports.__esModule = true; + function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } + } + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; @@ -8274,87 +8155,65 @@ if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } - } + var RelationshipPayloads = function () { + function RelationshipPayloads(store, modelName, relationshipName, relationshipMeta, inverseModelName, inverseRelationshipName, inverseRelationshipMeta) { + this._store = store; - var TypeCache = exports.TypeCache = function () { - function TypeCache() { - this.types = Object.create(null); - } + this._lhsModelName = modelName; + this._lhsRelationshipName = relationshipName; + this._lhsRelationshipMeta = relationshipMeta; - TypeCache.prototype.get = function get(modelName, id) { - var types = this.types; + this._rhsModelName = inverseModelName; + this._rhsRelationshipName = inverseRelationshipName; + this._rhsRelationshipMeta = inverseRelationshipMeta; - - if (types[modelName] !== undefined) { - return types[modelName][id]; + // a map of id -> payloads for the left hand side of the relationship. + this._lhsPayloads = Object.create(null); + if (modelName !== inverseModelName || relationshipName !== inverseRelationshipName) { + // The common case of a non-reflexive relationship, or a reflexive + // relationship whose inverse is not itself + this._rhsPayloads = Object.create(null); + this._isReflexive = false; + } else { + // Edge case when we have a reflexive relationship to itself + // eg user hasMany friends inverse friends + // + // In this case there aren't really two sides to the relationship, but + // we set `_rhsPayloads = _lhsPayloads` to make things easier to reason + // about + this._rhsPayloads = this._lhsPayloads; + this._isReflexive = true; } - }; - TypeCache.prototype.set = function set(modelName, id, payload) { - var types = this.types; - - var typeMap = types[modelName]; - - if (typeMap === undefined) { - typeMap = types[modelName] = Object.create(null); - } - - typeMap[id] = payload; - }; - - TypeCache.prototype.delete = function _delete(modelName, id) { - var types = this.types; - - - if (types[modelName] !== undefined) { - delete types[modelName][id]; - } - }; - - return TypeCache; - }(); - - var RelationshipPayloads = function () { - function RelationshipPayloads(relInfo) { - this._relInfo = relInfo; - - // a map of id -> payloads for the left hand side of the relationship. - this.lhs_payloads = new TypeCache(); - this.rhs_payloads = relInfo.isReflexive ? this.lhs_payloads : new TypeCache(); - // When we push relationship payloads, just stash them in a queue until // somebody actually asks for one of them. // // This is a queue of the relationship payloads that have been pushed for // either side of this relationship this._pendingPayloads = []; } /** - Get the payload for the relationship of an individual record. - This might return the raw payload as pushed into the store, or one computed - from the payload of the inverse relationship. - @method - */ + Get the payload for the relationship of an individual record. + This might return the raw payload as pushed into the store, or one computed + from the payload of the inverse relationship. + @method + */ RelationshipPayloads.prototype.get = function get(modelName, id, relationshipName) { this._flushPending(); if (this._isLHS(modelName, relationshipName)) { - return this.lhs_payloads.get(modelName, id); + return this._lhsPayloads[id]; } else { - (false && Ember.assert(modelName + ':' + relationshipName + ' is not either side of this relationship, ' + this._relInfo.lhs_key + '<->' + this._relInfo.rhs_key, this._isRHS(modelName, relationshipName))); + (false && Ember.assert(modelName + ':' + relationshipName + ' is not either side of this relationship, ' + this._lhsModelName + ':' + this._lhsRelationshipName + '<->' + this._rhsModelName + ':' + this._rhsRelationshipName, this._isRHS(modelName, relationshipName))); - return this.rhs_payloads.get(modelName, id); + return this._rhsPayloads[id]; } }; RelationshipPayloads.prototype.push = function push(modelName, id, relationshipName, relationshipData) { this._pendingPayloads.push([modelName, id, relationshipName, relationshipData]); @@ -8362,44 +8221,24 @@ RelationshipPayloads.prototype.unload = function unload(modelName, id, relationshipName) { this._flushPending(); if (this._isLHS(modelName, relationshipName)) { - delete this.lhs_payloads.delete(modelName, id); + delete this._lhsPayloads[id]; } else { - (false && Ember.assert(modelName + ':' + relationshipName + ' is not either side of this relationship, ' + this._relInfo.lhs_baseModelName + ':' + this._relInfo.lhs_relationshipName + '<->' + this._relInfo.rhs_baseModelName + ':' + this._relInfo.rhs_relationshipName, this._isRHS(modelName, relationshipName))); + (false && Ember.assert(modelName + ':' + relationshipName + ' is not either side of this relationship, ' + this._lhsModelName + ':' + this._lhsRelationshipName + '<->' + this._rhsModelName + ':' + this._rhsRelationshipName, this._isRHS(modelName, relationshipName))); - delete this.rhs_payloads.delete(modelName, id); + delete this._rhsPayloads[id]; } }; RelationshipPayloads.prototype._isLHS = function _isLHS(modelName, relationshipName) { - var relInfo = this._relInfo; - var isSelfReferential = relInfo.isSelfReferential; - var isRelationship = relationshipName === relInfo.lhs_relationshipName; - - if (isRelationship === true) { - return isSelfReferential === true || // itself - modelName === relInfo.lhs_baseModelName || // base or non-polymorphic - relInfo.lhs_modelNames.indexOf(modelName) !== -1; // polymorphic - } - - return false; + return modelName === this._lhsModelName && relationshipName === this._lhsRelationshipName; }; RelationshipPayloads.prototype._isRHS = function _isRHS(modelName, relationshipName) { - var relInfo = this._relInfo; - var isSelfReferential = relInfo.isSelfReferential; - var isRelationship = relationshipName === relInfo.rhs_relationshipName; - - if (isRelationship === true) { - return isSelfReferential === true || // itself - modelName === relInfo.rhs_baseModelName || // base or non-polymorphic - relInfo.rhs_modelNames.indexOf(modelName) !== -1; // polymorphic - } - - return false; + return modelName === this._rhsModelName && relationshipName === this._rhsRelationshipName; }; RelationshipPayloads.prototype._flushPending = function _flushPending() { if (this._pendingPayloads.length === 0) { return; @@ -8416,32 +8255,30 @@ var inverseRelationshipData = { data: { id: id, type: modelName } - }; - // start flushing this individual payload. The logic is the same whether - // it's for the left hand side of the relationship or the right hand side, - // except the role of primary and inverse idToPayloads is reversed - // - var previousPayload = void 0; - var payloadMap = void 0; - var inversePayloadMap = void 0; + // start flushing this individual payload. The logic is the same whether + // it's for the left hand side of the relationship or the right hand side, + // except the role of primary and inverse idToPayloads is reversed + // + };var previousPayload = void 0; + var idToPayloads = void 0; + var inverseIdToPayloads = void 0; var inverseIsMany = void 0; - if (this._isLHS(modelName, relationshipName)) { - previousPayload = this.lhs_payloads.get(modelName, id); - payloadMap = this.lhs_payloads; - inversePayloadMap = this.rhs_payloads; + previousPayload = this._lhsPayloads[id]; + idToPayloads = this._lhsPayloads; + inverseIdToPayloads = this._rhsPayloads; inverseIsMany = this._rhsRelationshipIsMany; } else { - (false && Ember.assert(modelName + ':' + relationshipName + ' is not either side of this relationship, ' + this._relInfo.lhs_key + '<->' + this._relInfo.rhs_key, this._isRHS(modelName, relationshipName))); + (false && Ember.assert(modelName + ':' + relationshipName + ' is not either side of this relationship, ' + this._lhsModelName + ':' + this._lhsRelationshipName + '<->' + this._rhsModelName + ':' + this._rhsRelationshipName, this._isRHS(modelName, relationshipName))); - previousPayload = this.rhs_payloads.get(modelName, id); - payloadMap = this.rhs_payloads; - inversePayloadMap = this.lhs_payloads; + previousPayload = this._rhsPayloads[id]; + idToPayloads = this._rhsPayloads; + inverseIdToPayloads = this._lhsPayloads; inverseIsMany = this._lhsRelationshipIsMany; } // actually flush this individual payload // @@ -8481,69 +8318,67 @@ // only remove relationship information before adding if there is relationshipData.data // * null is considered new information "empty", and it should win // * undefined is NOT considered new information, we should keep original state // * anything else is considered new information, and it should win if (relationshipData.data !== undefined) { - this._removeInverse(id, previousPayload, inversePayloadMap); + this._removeInverse(id, previousPayload, inverseIdToPayloads); } - payloadMap.set(modelName, id, relationshipData); - this._populateInverse(relationshipData, inverseRelationshipData, inversePayloadMap, inverseIsMany); + idToPayloads[id] = relationshipData; + this._populateInverse(relationshipData, inverseRelationshipData, inverseIdToPayloads, inverseIsMany); } }; - RelationshipPayloads.prototype._populateInverse = function _populateInverse(relationshipData, inversePayload, inversePayloadMap, inverseIsMany) { + RelationshipPayloads.prototype._populateInverse = function _populateInverse(relationshipData, inversePayload, inverseIdToPayloads, inverseIsMany) { if (!relationshipData.data) { // This id doesn't have an inverse, eg a belongsTo with a payload // { data: null }, so there's nothing to populate return; } if (Array.isArray(relationshipData.data)) { for (var i = 0; i < relationshipData.data.length; ++i) { - var resourceIdentifier = relationshipData.data[i]; - this._addToInverse(inversePayload, resourceIdentifier, inversePayloadMap, inverseIsMany); + var inverseId = relationshipData.data[i].id; + this._addToInverse(inversePayload, inverseId, inverseIdToPayloads, inverseIsMany); } } else { - var _resourceIdentifier = relationshipData.data; - this._addToInverse(inversePayload, _resourceIdentifier, inversePayloadMap, inverseIsMany); + var _inverseId = relationshipData.data.id; + this._addToInverse(inversePayload, _inverseId, inverseIdToPayloads, inverseIsMany); } }; - RelationshipPayloads.prototype._addToInverse = function _addToInverse(inversePayload, resourceIdentifier, inversePayloadMap, inverseIsMany) { - var relInfo = this._relInfo; - - if (relInfo.isReflexive && inversePayload.data.id === resourceIdentifier.id) { + RelationshipPayloads.prototype._addToInverse = function _addToInverse(inversePayload, inverseId, inverseIdToPayloads, inverseIsMany) { + if (this._isReflexive && inversePayload.data.id === inverseId) { // eg <user:1>.friends = [{ id: 1, type: 'user' }] return; } - var existingPayload = inversePayloadMap.get(resourceIdentifier.type, resourceIdentifier.id); + var existingPayload = inverseIdToPayloads[inverseId]; var existingData = existingPayload && existingPayload.data; if (existingData) { // There already is an inverse, either add or overwrite depehnding on // whether the inverse is a many relationship or not // if (Array.isArray(existingData)) { existingData.push(inversePayload.data); } else { - inversePayloadMap.set(resourceIdentifier.type, resourceIdentifier.id, inversePayload); + inverseIdToPayloads[inverseId] = inversePayload; } } else { // first time we're populating the inverse side // if (inverseIsMany) { - inversePayloadMap.set(resourceIdentifier.type, resourceIdentifier.id, { + inverseIdToPayloads[inverseId] = { data: [inversePayload.data] - }); + }; } else { - inversePayloadMap.set(resourceIdentifier.type, resourceIdentifier.id, inversePayload); + inverseIdToPayloads[inverseId] = inversePayload; } } }; - RelationshipPayloads.prototype._removeInverse = function _removeInverse(id, previousPayload, inversePayloadMap) { + RelationshipPayloads.prototype._removeInverse = function _removeInverse(id, previousPayload, inverseIdToPayloads) { var data = previousPayload && previousPayload.data; if (!data) { // either this is the first time we've seen a payload for this id, or its // previous payload indicated that it had no inverse, eg a belongsTo // relationship with payload { data: null } @@ -8554,20 +8389,19 @@ } if (Array.isArray(data)) { // TODO: diff rather than removeall addall? for (var i = 0; i < data.length; ++i) { - var resourceIdentifier = data[i]; - this._removeFromInverse(id, resourceIdentifier, inversePayloadMap); + this._removeFromInverse(id, data[i].id, inverseIdToPayloads); } } else { - this._removeFromInverse(id, data, inversePayloadMap); + this._removeFromInverse(id, data.id, inverseIdToPayloads); } }; - RelationshipPayloads.prototype._removeFromInverse = function _removeFromInverse(id, resourceIdentifier, inversePayloads) { - var inversePayload = inversePayloads.get(resourceIdentifier.type, resourceIdentifier.id); + RelationshipPayloads.prototype._removeFromInverse = function _removeFromInverse(id, inverseId, inversePayloads) { + var inversePayload = inversePayloads[inverseId]; var data = inversePayload && inversePayload.data; if (!data) { return; } @@ -8575,27 +8409,25 @@ if (Array.isArray(data)) { inversePayload.data = data.filter(function (x) { return x.id !== id; }); } else { - inversePayloads.set(resourceIdentifier.type, resourceIdentifier.id, { + inversePayloads[inverseId] = { data: null - }); + }; } }; _createClass(RelationshipPayloads, [{ key: '_lhsRelationshipIsMany', get: function () { - var meta = this._relInfo.lhs_relationshipMeta; - return meta !== null && meta.kind === 'hasMany'; + return this._lhsRelationshipMeta && this._lhsRelationshipMeta.kind === 'hasMany'; } }, { key: '_rhsRelationshipIsMany', get: function () { - var meta = this._relInfo.rhs_relationshipMeta; - return meta !== null && meta.kind === 'hasMany'; + return this._rhsRelationshipMeta && this._rhsRelationshipMeta.kind === 'hasMany'; } }]); return RelationshipPayloads; }(); @@ -8698,11 +8530,10 @@ this.canonicalState = internalModel; _Relationship.prototype.addCanonicalInternalModel.call(this, internalModel); }; BelongsToRelationship.prototype.inverseDidDematerialize = function inverseDidDematerialize() { - _Relationship.prototype.inverseDidDematerialize.call(this, this.inverseInternalModel); this.notifyBelongsToChanged(); }; BelongsToRelationship.prototype.removeCompletelyFromOwn = function removeCompletelyFromOwn(internalModel) { _Relationship.prototype.removeCompletelyFromOwn.call(this, internalModel); @@ -8715,16 +8546,10 @@ this.inverseInternalModel = null; this.notifyBelongsToChanged(); } }; - BelongsToRelationship.prototype.removeCompletelyFromInverse = function removeCompletelyFromInverse() { - _Relationship.prototype.removeCompletelyFromInverse.call(this); - - this.inverseInternalModel = null; - }; - BelongsToRelationship.prototype.flushCanonical = function flushCanonical() { //temporary fix to not remove newly created records if server returned null. //TODO remove once we have proper diffing if (this.inverseInternalModel && this.inverseInternalModel.isNew() && !this.canonicalState) { return; @@ -8765,16 +8590,10 @@ this.inverseInternalModel = null; _Relationship.prototype.removeInternalModelFromOwn.call(this, internalModel); this.notifyBelongsToChanged(); }; - BelongsToRelationship.prototype.removeAllInternalModelsFromOwn = function removeAllInternalModelsFromOwn() { - _Relationship.prototype.removeAllInternalModelsFromOwn.call(this); - this.inverseInternalModel = null; - this.notifyBelongsToChanged(); - }; - BelongsToRelationship.prototype.notifyBelongsToChanged = function notifyBelongsToChanged() { this.internalModel.notifyBelongsToChanged(this.key); }; BelongsToRelationship.prototype.removeCanonicalInternalModelFromOwn = function removeCanonicalInternalModelFromOwn(internalModel) { @@ -8783,15 +8602,10 @@ } this.canonicalState = null; _Relationship.prototype.removeCanonicalInternalModelFromOwn.call(this, internalModel); }; - BelongsToRelationship.prototype.removeAllCanonicalInternalModelsFromOwn = function removeAllCanonicalInternalModelsFromOwn() { - _Relationship.prototype.removeAllCanonicalInternalModelsFromOwn.call(this); - this.canonicalState = null; - }; - BelongsToRelationship.prototype.findRecord = function findRecord() { if (this.inverseInternalModel) { return this.store._findByInternalModel(this.inverseInternalModel); } else { return EmberPromise.resolve(null); @@ -9048,16 +8862,11 @@ var _this = _possibleConstructorReturn(this, _Relationship.call(this, store, internalModel, inverseKey, relationshipMeta)); _this.belongsToType = relationshipMeta.type; _this.canonicalState = []; _this.isPolymorphic = relationshipMeta.options.polymorphic; - // The ManyArray for this relationship _this._manyArray = null; - // The previous ManyArray for this relationship. It will be destroyed when - // we create a new many array, but in the interim it will be updated if - // inverse internal models are unloaded. - _this._retainedManyArray = null; _this.__loadingPromise = null; return _this; } ManyRelationship.prototype._updateLoadingPromise = function _updateLoadingPromise(promise, content) { @@ -9105,18 +8914,14 @@ this.canonicalState.push(internalModel); } _Relationship.prototype.addCanonicalInternalModel.call(this, internalModel, idx); }; - ManyRelationship.prototype.inverseDidDematerialize = function inverseDidDematerialize(inverseInternalModel) { - _Relationship.prototype.inverseDidDematerialize.call(this, inverseInternalModel); - if (this.isAsync) { - if (this._manyArray) { - this._retainedManyArray = this._manyArray; - this._manyArray = null; - } - this._removeInternalModelFromManyArray(this._retainedManyArray, inverseInternalModel); + ManyRelationship.prototype.inverseDidDematerialize = function inverseDidDematerialize() { + if (this._manyArray) { + this._manyArray.destroy(); + this._manyArray = null; } this.notifyHasManyChanged(); }; ManyRelationship.prototype.addInternalModel = function addInternalModel(internalModel, idx) { @@ -9141,16 +8946,10 @@ this.canonicalState.splice(i, 1); } _Relationship.prototype.removeCanonicalInternalModelFromOwn.call(this, internalModel, idx); }; - ManyRelationship.prototype.removeAllCanonicalInternalModelsFromOwn = function removeAllCanonicalInternalModelsFromOwn() { - _Relationship.prototype.removeAllCanonicalInternalModelsFromOwn.call(this); - this.canonicalMembers.clear(); - this.canonicalState.splice(0, this.canonicalState.length); - }; - ManyRelationship.prototype.removeCompletelyFromOwn = function removeCompletelyFromOwn(internalModel) { _Relationship.prototype.removeCompletelyFromOwn.call(this, internalModel); var canonicalIndex = this.canonicalState.indexOf(internalModel); @@ -9179,37 +8978,11 @@ ManyRelationship.prototype.removeInternalModelFromOwn = function removeInternalModelFromOwn(internalModel, idx) { if (!this.members.has(internalModel)) { return; } _Relationship.prototype.removeInternalModelFromOwn.call(this, internalModel, idx); - // note that ensuring the many array is created, via `this.manyArray` - // (instead of `this._manyArray`) is intentional. - // - // Because we're removing from local, and not canonical, state, it is - // important that the many array is initialized now with those changes, - // otherwise it will be initialized with canonical state and we'll have - // lost the fact that this internalModel was removed. - this._removeInternalModelFromManyArray(this.manyArray, internalModel, idx); - this._removeInternalModelFromManyArray(this._retainedManyArray, internalModel, idx); - }; - - ManyRelationship.prototype.removeAllInternalModelsFromOwn = function removeAllInternalModelsFromOwn() { - _Relationship.prototype.removeAllInternalModelsFromOwn.call(this); - // as with removeInternalModelFromOwn, we make sure the many array is - // instantiated, or we'll lose local removals, as we're not updating - // canonical state here. - this.manyArray.clear(); - if (this._retainedManyArray) { - this._retainedManyArray.clear(); - } - }; - - ManyRelationship.prototype._removeInternalModelFromManyArray = function _removeInternalModelFromManyArray(manyArray, internalModel, idx) { - if (manyArray === null) { - return; - } - + var manyArray = this.manyArray; if (idx !== undefined) { //TODO(Igor) not used currently, fix manyArray.currentState.removeAt(idx); } else { manyArray._removeInternalModels([internalModel]); @@ -9367,18 +9140,16 @@ ManyRelationship.prototype.destroy = function destroy() { _Relationship.prototype.destroy.call(this); var manyArray = this._manyArray; if (manyArray) { manyArray.destroy(); - this._manyArray = null; } var proxy = this.__loadingPromise; if (proxy) { proxy.destroy(); - this.__loadingPromise = null; } }; _createClass(ManyRelationship, [{ key: '_loadingPromise', @@ -9386,30 +9157,21 @@ return this.__loadingPromise; } }, { key: 'manyArray', get: function () { - (false && Ember.assert('Error: relationship ' + this.parentType + ':' + this.key + ' has both many array and retained many array', this._manyArray === null || this._retainedManyArray === null)); - - if (!this._manyArray) { this._manyArray = _manyArray.default.create({ canonicalState: this.canonicalState, store: this.store, relationship: this, type: this.store.modelFor(this.belongsToType), record: this.internalModel, meta: this.meta, isPolymorphic: this.isPolymorphic }); - - if (this._retainedManyArray !== null) { - this._retainedManyArray.destroy(); - this._retainedManyArray = null; - } } - return this._manyArray; } }]); return ManyRelationship; @@ -9458,11 +9220,10 @@ return Constructor; }; }(); var guidFor = Ember.guidFor; - var get = Ember.get; var Relationship = function () { function Relationship(store, internalModel, inverseKey, relationshipMeta) { var async = relationshipMeta.options.async; var polymorphic = relationshipMeta.options.polymorphic; @@ -9480,56 +9241,38 @@ this.inverseKeyForImplicit = this.internalModel.modelName + this.key; this.linkPromise = null; this.meta = null; this.hasData = false; this.hasLoaded = false; - this.__inverseMeta = undefined; } Relationship.prototype._inverseIsAsync = function _inverseIsAsync() { - var inverseMeta = this._inverseMeta; - if (!inverseMeta) { + if (!this.inverseKey || !this.inverseInternalModel) { return false; } - - var inverseAsync = inverseMeta.options.async; - return typeof inverseAsync === 'undefined' ? true : inverseAsync; + return this.inverseInternalModel._relationships.get(this.inverseKey).isAsync; }; - Relationship.prototype._inverseIsSync = function _inverseIsSync() { - var inverseMeta = this._inverseMeta; - if (!inverseMeta) { - return false; - } - - var inverseAsync = inverseMeta.options.async; - return typeof inverseAsync === 'undefined' ? false : !inverseAsync; - }; - - Relationship.prototype.internalModelDidDematerialize = function internalModelDidDematerialize() { - var _this = this; - + Relationship.prototype.removeInverseRelationships = function removeInverseRelationships() { if (!this.inverseKey) { return; } - this.forAllMembers(function (inverseInternalModel) { - var relationship = inverseInternalModel._relationships.get(_this.inverseKey); - relationship.inverseDidDematerialize(_this.internalModel); - }); - }; + var allMembers = + // we actually want a union of members and canonicalMembers + // they should be disjoint but currently are not due to a bug + this.members.list.concat(this.canonicalMembers.list); - Relationship.prototype.inverseDidDematerialize = function inverseDidDematerialize(inverseInternalModel) { - if (!this.isAsync) { - // unloading inverse of a sync relationship is treated as a client-side - // delete, so actually remove the models don't merely invalidate the cp - // cache. - this.removeInternalModelFromOwn(inverseInternalModel); - this.removeCanonicalInternalModelFromOwn(inverseInternalModel); + for (var i = 0; i < allMembers.length; i++) { + var inverseInternalModel = allMembers[i]; + var relationship = inverseInternalModel._relationships.get(this.inverseKey); + relationship.inverseDidDematerialize(); } }; + Relationship.prototype.inverseDidDematerialize = function inverseDidDematerialize() {}; + Relationship.prototype.updateMeta = function updateMeta(meta) { this.meta = meta; }; Relationship.prototype.clear = function clear() { @@ -9545,33 +9288,23 @@ var _member = canonicalMembers[0]; this.removeCanonicalInternalModel(_member); } }; - Relationship.prototype.removeAllInternalModelsFromOwn = function removeAllInternalModelsFromOwn() { - this.members.clear(); - this.internalModel.updateRecordArrays(); - }; - - Relationship.prototype.removeAllCanonicalInternalModelsFromOwn = function removeAllCanonicalInternalModelsFromOwn() { - this.canonicalMembers.clear(); - this.flushCanonicalLater(); - }; - Relationship.prototype.removeInternalModels = function removeInternalModels(internalModels) { - var _this2 = this; + var _this = this; internalModels.forEach(function (internalModel) { - return _this2.removeInternalModel(internalModel); + return _this.removeInternalModel(internalModel); }); }; Relationship.prototype.addInternalModels = function addInternalModels(internalModels, idx) { - var _this3 = this; + var _this2 = this; internalModels.forEach(function (internalModel) { - _this3.addInternalModel(internalModel, idx); + _this2.addInternalModel(internalModel, idx); if (idx !== undefined) { idx++; } }); }; @@ -9610,11 +9343,11 @@ } } else { var _relationships = internalModel._implicitRelationships; var _relationship = _relationships[this.inverseKeyForImplicit]; if (!_relationship) { - _relationship = _relationships[this.inverseKeyForImplicit] = new Relationship(this.store, internalModel, this.key, { options: { async: this.isAsync }, type: this.parentType }); + _relationship = _relationships[this.inverseKeyForImplicit] = new Relationship(this.store, internalModel, this.key, { options: { async: this.isAsync } }); } _relationship.addCanonicalInternalModel(this.internalModel); } }; @@ -9648,11 +9381,11 @@ this.notifyRecordRelationshipAdded(internalModel, idx); if (this.inverseKey) { internalModel._relationships.get(this.inverseKey).addInternalModel(this.internalModel); } else { if (!internalModel._implicitRelationships[this.inverseKeyForImplicit]) { - internalModel._implicitRelationships[this.inverseKeyForImplicit] = new Relationship(this.store, internalModel, this.key, { options: { async: this.isAsync }, type: this.parentType }); + internalModel._implicitRelationships[this.inverseKeyForImplicit] = new Relationship(this.store, internalModel, this.key, { options: { async: this.isAsync } }); } internalModel._implicitRelationships[this.inverseKeyForImplicit].addInternalModel(this.internalModel); } this.internalModel.updateRecordArrays(); } @@ -9697,11 +9430,11 @@ this.canonicalMembers.delete(internalModel); this.flushCanonicalLater(); }; Relationship.prototype.removeCompletelyFromInverse = function removeCompletelyFromInverse() { - var _this4 = this; + var _this3 = this; if (!this.inverseKey) { return; } @@ -9712,46 +9445,20 @@ var unload = function (inverseInternalModel) { var id = guidFor(inverseInternalModel); if (seen[id] === undefined) { - var relationship = inverseInternalModel._relationships.get(_this4.inverseKey); + var relationship = inverseInternalModel._relationships.get(_this3.inverseKey); relationship.removeCompletelyFromOwn(internalModel); seen[id] = true; } }; this.members.forEach(unload); this.canonicalMembers.forEach(unload); - - if (!this.isAsync) { - this.clear(); - } }; - Relationship.prototype.forAllMembers = function forAllMembers(callback) { - var seen = Object.create(null); - - for (var i = 0; i < this.members.list.length; i++) { - var inverseInternalModel = this.members.list[i]; - var id = guidFor(inverseInternalModel); - if (!seen[id]) { - seen[id] = true; - callback(inverseInternalModel); - } - } - - for (var _i = 0; _i < this.canonicalMembers.list.length; _i++) { - var _inverseInternalModel = this.canonicalMembers.list[_i]; - var _id = guidFor(_inverseInternalModel); - if (!seen[_id]) { - seen[_id] = true; - callback(_inverseInternalModel); - } - } - }; - Relationship.prototype.removeCompletelyFromOwn = function removeCompletelyFromOwn(internalModel) { this.canonicalMembers.delete(internalModel); this.members.delete(internalModel); this.internalModel.updateRecordArrays(); }; @@ -9768,12 +9475,12 @@ } } //TODO(Igor) make this less abysmally slow this.members = this.canonicalMembers.copy(); - for (var _i2 = 0; _i2 < newInternalModels.length; _i2++) { - this.members.add(newInternalModels[_i2]); + for (var _i = 0; _i < newInternalModels.length; _i++) { + this.members.add(newInternalModels[_i]); } }; Relationship.prototype.flushCanonicalLater = function flushCanonicalLater() { if (this.willSync) { @@ -9870,27 +9577,10 @@ Relationship.prototype.updateData = function updateData() {}; Relationship.prototype.destroy = function destroy() {}; _createClass(Relationship, [{ - key: '_inverseMeta', - get: function () { - if (this.__inverseMeta === undefined) { - var inverseMeta = null; - - if (this.inverseKey) { - var inverseModelClass = this.store.modelFor(this.relationshipMeta.type); - var inverseRelationships = get(inverseModelClass, 'relationshipsByName'); - inverseMeta = inverseRelationships.get(this.inverseKey); - } - - this.__inverseMeta = inverseMeta; - } - - return this.__inverseMeta; - } - }, { key: 'parentType', get: function () { return this.internalModel.modelName; } }]); @@ -10288,11 +9978,11 @@ return Snapshot; }(); exports.default = Snapshot; }); -define('ember-data/-private/system/store', ['exports', 'ember-data/-private/adapters/errors', 'ember-data/-private/system/model/model', 'ember-data/-private/system/normalize-model-name', 'ember-data/-private/system/identity-map', 'ember-data/-private/system/promise-proxies', 'ember-data/-private/system/store/common', 'ember-data/-private/system/store/serializer-response', 'ember-data/-private/system/store/serializers', 'ember-data/-private/system/relationships/relationship-payloads-manager', 'ember-data/-private/system/store/finders', 'ember-data/-private/utils', 'ember-data/-private/system/coerce-id', 'ember-data/-private/system/record-array-manager', 'ember-data/-private/system/store/container-instance-cache', 'ember-data/-private/system/model/internal-model', 'ember-data/-private/features'], function (exports, _errors, _model, _normalizeModelName, _identityMap, _promiseProxies, _common, _serializerResponse, _serializers, _relationshipPayloadsManager, _finders, _utils, _coerceId, _recordArrayManager, _containerInstanceCache, _internalModel5, _features) { +define('ember-data/-private/system/store', ['exports', 'ember-data/-private/adapters/errors', 'ember-data/-private/system/model/model', 'ember-data/-private/system/normalize-model-name', 'ember-data/-private/system/identity-map', 'ember-data/-private/system/promise-proxies', 'ember-data/-private/system/store/common', 'ember-data/-private/system/store/serializer-response', 'ember-data/-private/system/store/serializers', 'ember-data/-private/system/relationships/relationship-payloads-manager', 'ember-data/-private/system/store/finders', 'ember-data/-private/utils', 'ember-data/-private/system/coerce-id', 'ember-data/-private/system/record-array-manager', 'ember-data/-private/system/model/internal-model', 'ember-data/-private/features'], function (exports, _errors, _model, _normalizeModelName, _identityMap, _promiseProxies, _common, _serializerResponse, _serializers, _relationshipPayloadsManager, _finders, _utils, _coerceId, _recordArrayManager, _internalModel5, _features) { 'use strict'; exports.__esModule = true; exports.Store = undefined; var A = Ember.A; @@ -10430,11 +10120,10 @@ this._backburner = new Backburner(['normalizeRelationships', 'syncRelationships', 'finished']); // internal bookkeeping; not observable this.recordArrayManager = new _recordArrayManager.default({ store: this }); this._identityMap = new _identityMap.default(); this._pendingSave = []; - this._instanceCache = new _containerInstanceCache.default((0, _utils.getOwner)(this), this); this._modelFactoryCache = Object.create(null); this._relationshipsPayloads = new _relationshipPayloadsManager.default(this); /* Ember Data uses several specialized micro-queues for organizing @@ -10456,11 +10145,12 @@ defaultValue: function () { return []; } }); - this._instanceCache = new _containerInstanceCache.default((0, _utils.getOwner)(this), this); + this._adapterCache = Object.create(null); + this._serializerCache = Object.create(null); }, /** The default adapter to use to communicate to a backend server or @@ -12668,11 +12358,53 @@ (false && Ember.assert('You need to pass a model name to the store\'s adapterFor method', isPresent(modelName))); (false && Ember.assert('Passing classes to store.adapterFor has been removed. Please pass a dasherized string instead of ' + modelName, typeof modelName === 'string')); var normalizedModelName = (0, _normalizeModelName.default)(modelName); - return this._instanceCache.get('adapter', normalizedModelName); + var _adapterCache = this._adapterCache; + + var adapter = _adapterCache[normalizedModelName]; + if (adapter) { + return adapter; + } + + var owner = (0, _utils.getOwner)(this); + + adapter = owner.lookup('adapter:' + normalizedModelName); + if (adapter !== undefined) { + set(adapter, 'store', this); + _adapterCache[normalizedModelName] = adapter; + return adapter; + } + + // no adapter found for the specific model, fallback and check for application adapter + adapter = _adapterCache.application || owner.lookup('adapter:application'); + if (adapter !== undefined) { + set(adapter, 'store', this); + _adapterCache[normalizedModelName] = adapter; + _adapterCache.application = adapter; + return adapter; + } + + // no model specific adapter or application adapter, check for an `adapter` + // property defined on the store + var adapterName = this.get('adapter'); + adapter = _adapterCache[adapterName] || owner.lookup('adapter:' + adapterName); + if (adapter !== undefined) { + set(adapter, 'store', this); + _adapterCache[normalizedModelName] = adapter; + _adapterCache[adapterName] = adapter; + return adapter; + } + + // final fallback, no model specific adapter, no application adapter, no + // `adapter` property on store: use json-api adapter + adapter = _adapterCache['-json-api'] || owner.lookup('adapter:-json-api'); + set(adapter, 'store', this); + _adapterCache[normalizedModelName] = adapter; + _adapterCache['-json-api'] = adapter; + return adapter; }, // .............................. // . RECORD CHANGE NOTIFICATION . @@ -12699,11 +12431,55 @@ (false && Ember.assert('You need to pass a model name to the store\'s serializerFor method', isPresent(modelName))); (false && Ember.assert('Passing classes to store.serializerFor has been removed. Please pass a dasherized string instead of ' + modelName, typeof modelName === 'string')); var normalizedModelName = (0, _normalizeModelName.default)(modelName); - return this._instanceCache.get('serializer', normalizedModelName); + var _serializerCache = this._serializerCache; + + var serializer = _serializerCache[normalizedModelName]; + if (serializer) { + return serializer; + } + + var owner = (0, _utils.getOwner)(this); + + serializer = owner.lookup('serializer:' + normalizedModelName); + if (serializer !== undefined) { + set(serializer, 'store', this); + _serializerCache[normalizedModelName] = serializer; + return serializer; + } + + // no serializer found for the specific model, fallback and check for application serializer + serializer = _serializerCache.application || owner.lookup('serializer:application'); + if (serializer !== undefined) { + set(serializer, 'store', this); + _serializerCache[normalizedModelName] = serializer; + _serializerCache.application = serializer; + return serializer; + } + + // no model specific serializer or application serializer, check for the `defaultSerializer` + // property defined on the adapter + var adapter = this.adapterFor(modelName); + var serializerName = get(adapter, 'defaultSerializer'); + serializer = _serializerCache[serializerName] || owner.lookup('serializer:' + serializerName); + if (serializer !== undefined) { + set(serializer, 'store', this); + _serializerCache[normalizedModelName] = serializer; + _serializerCache[serializerName] = serializer; + return serializer; + } + + // final fallback, no model specific serializer, no application serializer, no + // `serializer` property on store: use json-api serializer + serializer = _serializerCache['-default'] || owner.lookup('serializer:-default'); + set(serializer, 'store', this); + _serializerCache[normalizedModelName] = serializer; + _serializerCache['-default'] = serializer; + + return serializer; }, lookupAdapter: function (name) { (false && !(false) && Ember.deprecate('Use of lookupAdapter is deprecated, use adapterFor instead.', false, { id: 'ds.store.lookupAdapter', until: '3.0' @@ -12721,12 +12497,14 @@ }, willDestroy: function () { this._super.apply(this, arguments); this._pushedInternalModels = null; this.recordArrayManager.destroy(); - this._instanceCache.destroy(); + this._adapterCache = null; + this._serializerCache = null; + this.unloadAll(); }, _updateRelationshipState: function (relationship) { var _this2 = this; @@ -12958,114 +12736,10 @@ function _objectIsAlive(object) { return !(get(object, "isDestroyed") || get(object, "isDestroying")); } }); -define('ember-data/-private/system/store/container-instance-cache', ['exports'], function (exports) { - 'use strict'; - - exports.__esModule = true; - - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } - } - - var set = Ember.set; - - var ContainerInstanceCache = function () { - function ContainerInstanceCache(owner, store) { - this.isDestroying = false; - this.isDestroyed = false; - this._owner = owner; - this._store = store; - this._namespaces = { - adapter: Object.create(null), - serializer: Object.create(null) - }; - } - - ContainerInstanceCache.prototype.get = function get(namespace, preferredKey) { - var cache = this._namespaces[namespace]; - - if (cache[preferredKey]) { - return cache[preferredKey]; - } - - var preferredLookupKey = namespace + ':' + preferredKey; - - var instance = this._instanceFor(preferredLookupKey) || this._findInstance(namespace, this._fallbacksFor(namespace, preferredKey)); - if (instance) { - cache[preferredKey] = instance; - set(instance, 'store', this._store); - } - - return cache[preferredKey]; - }; - - ContainerInstanceCache.prototype._fallbacksFor = function _fallbacksFor(namespace, preferredKey) { - if (namespace === 'adapter') { - return ['application', this._store.get('adapter'), '-json-api']; - } - - // serializer - return ['application', this.get('adapter', preferredKey).get('defaultSerializer'), '-default']; - }; - - ContainerInstanceCache.prototype._findInstance = function _findInstance(namespace, fallbacks) { - var cache = this._namespaces[namespace]; - - for (var i = 0, length = fallbacks.length; i < length; i++) { - var fallback = fallbacks[i]; - - if (cache[fallback]) { - return cache[fallback]; - } - - var lookupKey = namespace + ':' + fallback; - var instance = this._instanceFor(lookupKey); - - if (instance) { - cache[fallback] = instance; - return instance; - } - } - }; - - ContainerInstanceCache.prototype._instanceFor = function _instanceFor(key) { - return this._owner.lookup(key); - }; - - ContainerInstanceCache.prototype.destroyCache = function destroyCache(cache) { - var cacheEntries = Object.keys(cache); - - for (var i = 0, length = cacheEntries.length; i < length; i++) { - var cacheKey = cacheEntries[i]; - var cacheEntry = cache[cacheKey]; - if (cacheEntry) { - cacheEntry.destroy(); - } - } - }; - - ContainerInstanceCache.prototype.destroy = function destroy() { - this.isDestroying = true; - this.destroyCache(this._namespaces.adapter); - this.destroyCache(this._namespaces.serializer); - this.isDestroyed = true; - }; - - ContainerInstanceCache.prototype.toString = function toString() { - return 'ContainerInstanceCache'; - }; - - return ContainerInstanceCache; - }(); - - exports.default = ContainerInstanceCache; -}); define('ember-data/-private/system/store/finders', ['exports', 'ember-data/-private/system/store/common', 'ember-data/-private/system/store/serializer-response', 'ember-data/-private/system/store/serializers'], function (exports, _common, _serializerResponse, _serializers) { 'use strict'; exports.__esModule = true; exports._find = _find; @@ -15392,14 +15066,11 @@ function getDefaultValue(record, options, key) { if (typeof options.defaultValue === 'function') { return options.defaultValue.apply(null, arguments); } else { var defaultValue = options.defaultValue; - (false && !(typeof defaultValue !== 'object' || defaultValue === null) && Ember.deprecate('Non primitive defaultValues are deprecated because they are shared between all instances. If you would like to use a complex object as a default value please provide a function that returns the complex object.', typeof defaultValue !== 'object' || defaultValue === null, { - id: 'ds.defaultValue.complex-object', - until: '3.0.0' - })); + (false && Ember.assert('Non primitive defaultValues are not supported because they are shared between all instances. If you would like to use a complex object as a default value please provide a function that returns the complex object.', typeof defaultValue !== 'object' || defaultValue === null)); return defaultValue; } } @@ -15659,14 +15330,10 @@ define('ember-data/initialize-store-service', ['exports'], function (exports) { 'use strict'; exports.__esModule = true; exports.default = initializeStoreService; - - - var deprecateOldEmberDataInitializers = void 0; - /* Configures a registry for use with an Ember-Data store. @method initializeStoreService @@ -15677,104 +15344,21 @@ // instance.container supports Ember 1.11 - 2.0 var container = instance.lookup ? instance : instance.container; // Eagerly generate the store so defaultStore is populated. container.lookup('service:store'); - - if (false) { - // In Ember 2.4+ instance.base is the `Ember.Application` or `Ember.Engine` instance - // In Ember 1.11 - 2.3 we fallback to `instance.application` - var base = instance.base || instance.application; - deprecateOldEmberDataInitializers(base.constructor.initializers); - } } - - if (false) { - var DEPRECATED_INITIALIZER_NAMES = ['data-adapter', 'injectStore', 'transforms', 'store']; - - var matchesDeprecatedInititalizer = function matchesDeprecatedInititalizer(name) { - return DEPRECATED_INITIALIZER_NAMES.indexOf(name) !== -1; - }; - - var warnForDeprecatedInitializers = function warnForDeprecatedInitializers(initializer) { - var deprecatedBeforeInitializer = matchesDeprecatedInititalizer(initializer.before); - var deprecatedAfterInitializer = matchesDeprecatedInititalizer(initializer.after); - var deprecatedProp = deprecatedBeforeInitializer ? 'before' : 'after'; - - (false && !(!(deprecatedBeforeInitializer || deprecatedAfterInitializer)) && Ember.deprecate('The initializer `' + initializer[deprecatedProp] + '` has been deprecated. Please update your `' + initializer.name + '` initializer to use use `' + deprecatedProp + ': \'ember-data\'` instead.', !(deprecatedBeforeInitializer || deprecatedAfterInitializer), { - id: 'ds.deprecated-initializers', - until: '3.0.0' - })); - }; - - deprecateOldEmberDataInitializers = function deprecateOldEmberDataInitializers(initializers) { - // collect all of the initializers - var keys = Object.keys(initializers); - - for (var i = 0; i < keys.length; i++) { - var name = keys[i]; - - // filter out all of the Ember Data initializer. We have some - // deprecated initializers that depend on other deprecated - // initializers which may trigger the deprecation warning - // unintentionally. - if (!matchesDeprecatedInititalizer(name)) { - warnForDeprecatedInitializers(initializers[name]); - } - } - }; - } }); -define('ember-data/initializers/data-adapter', ['exports'], function (exports) { - 'use strict'; - - exports.__esModule = true; - exports.default = { - name: 'data-adapter', - before: 'store', - initialize: function () {} - }; -}); define('ember-data/initializers/ember-data', ['exports', 'ember-data/setup-container', 'ember-data'], function (exports, _setupContainer) { 'use strict'; exports.__esModule = true; exports.default = { name: 'ember-data', initialize: _setupContainer.default }; }); -define('ember-data/initializers/injectStore', ['exports'], function (exports) { - 'use strict'; - - exports.__esModule = true; - exports.default = { - name: 'injectStore', - before: 'store', - initialize: function () {} - }; -}); -define('ember-data/initializers/store', ['exports'], function (exports) { - 'use strict'; - - exports.__esModule = true; - exports.default = { - name: 'store', - after: 'ember-data', - initialize: function () {} - }; -}); -define('ember-data/initializers/transforms', ['exports'], function (exports) { - 'use strict'; - - exports.__esModule = true; - exports.default = { - name: 'transforms', - before: 'store', - initialize: function () {} - }; -}); define("ember-data/instance-initializers/ember-data", ["exports", "ember-data/initialize-store-service"], function (exports, _initializeStoreService) { "use strict"; exports.__esModule = true; exports.default = { @@ -16615,11 +16199,11 @@ var deprecatedModelNameLookup = this.modelNameFromPayloadKey(relationshipDataHash.type); if (modelName !== deprecatedModelNameLookup && this._hasCustomModelNameFromPayloadKey()) { (false && !(false) && Ember.deprecate("You are using modelNameFromPayloadKey to normalize the type for a relationship. This has been deprecated in favor of modelNameFromPayloadType", false, { id: 'ds.json-api-serializer.deprecated-model-name-for-relationship', - until: '3.0.0' + until: '4.0.0' })); modelName = deprecatedModelNameLookup; } @@ -16647,11 +16231,11 @@ usedLookup = 'modelNameFromPayloadType'; if (modelName !== deprecatedModelNameLookup && this._hasCustomModelNameFromPayloadKey()) { (false && !(false) && Ember.deprecate("You are using modelNameFromPayloadKey to normalize the type for a resource. This has been deprecated in favor of modelNameFromPayloadType", false, { id: 'ds.json-api-serializer.deprecated-model-name-for-resource', - until: '3.0.0' + until: '4.0.0' })); modelName = deprecatedModelNameLookup; usedLookup = 'modelNameFromPayloadKey'; @@ -16823,11 +16407,11 @@ var deprecatedPayloadTypeLookup = this.payloadKeyFromModelName(snapshot.modelName); if (payloadType !== deprecatedPayloadTypeLookup && this._hasCustomPayloadKeyFromModelName()) { (false && !(false) && Ember.deprecate("You used payloadKeyFromModelName to customize how a type is serialized. Use payloadTypeFromModelName instead.", false, { id: 'ds.json-api-serializer.deprecated-payload-type-for-model', - until: '3.0.0' + until: '4.0.0' })); payloadType = deprecatedPayloadTypeLookup; } @@ -16882,11 +16466,11 @@ var deprecatedPayloadTypeLookup = this.payloadKeyFromModelName(belongsTo.modelName); if (payloadType !== deprecatedPayloadTypeLookup && this._hasCustomPayloadKeyFromModelName()) { (false && !(false) && Ember.deprecate("You used payloadKeyFromModelName to serialize type for belongs-to relationship. Use payloadTypeFromModelName instead.", false, { id: 'ds.json-api-serializer.deprecated-payload-type-for-belongs-to', - until: '3.0.0' + until: '4.0.0' })); payloadType = deprecatedPayloadTypeLookup; } @@ -16904,16 +16488,12 @@ } } }, serializeHasMany: function (snapshot, json, relationship) { var key = relationship.key; - var shouldSerializeHasMany = '_shouldSerializeHasMany'; - if ((0, _private.isEnabled)("ds-check-should-serialize-relationships")) { - shouldSerializeHasMany = 'shouldSerializeHasMany'; - } - if (this[shouldSerializeHasMany](snapshot, key, relationship)) { + if (this.shouldSerializeHasMany(snapshot, key, relationship)) { var hasMany = snapshot.hasMany(key); if (hasMany !== undefined) { json.relationships = json.relationships || {}; @@ -16934,11 +16514,11 @@ var deprecatedPayloadTypeLookup = this.payloadKeyFromModelName(item.modelName); if (payloadType !== deprecatedPayloadTypeLookup && this._hasCustomPayloadKeyFromModelName()) { (false && !(false) && Ember.deprecate("You used payloadKeyFromModelName to serialize type for belongs-to relationship. Use payloadTypeFromModelName instead.", false, { id: 'ds.json-api-serializer.deprecated-payload-type-for-has-many', - until: '3.0.0' + until: '4.0.0' })); payloadType = deprecatedPayloadTypeLookup; } @@ -17500,20 +17080,10 @@ var attrs = get(this, 'attrs'); return attrs && attrs[key] && attrs[key].serialize === true; }, shouldSerializeHasMany: function (snapshot, key, relationship) { - if (this._shouldSerializeHasMany !== JSONSerializer.prototype._shouldSerializeHasMany) { - (false && !(false) && Ember.deprecate('The private method _shouldSerializeHasMany has been promoted to the public API. Please remove the underscore to use the public shouldSerializeHasMany method.', false, { - id: 'ds.serializer.private-should-serialize-has-many', - until: '3.0.0' - })); - } - - return this._shouldSerializeHasMany(snapshot, key, relationship); - }, - _shouldSerializeHasMany: function (snapshot, key, relationship) { var relationshipType = snapshot.type.determineRelationshipType(relationship, this.store); if (this._mustSerialize(key)) { return true; } return this._canSerialize(key) && (relationshipType === 'manyToNone' || relationshipType === 'manyToMany'); @@ -17597,16 +17167,12 @@ } } }, serializeHasMany: function (snapshot, json, relationship) { var key = relationship.key; - var shouldSerializeHasMany = '_shouldSerializeHasMany'; - if ((0, _private.isEnabled)("ds-check-should-serialize-relationships")) { - shouldSerializeHasMany = 'shouldSerializeHasMany'; - } - if (this[shouldSerializeHasMany](snapshot, key, relationship)) { + if (this.shouldSerializeHasMany(snapshot, key, relationship)) { var hasMany = snapshot.hasMany(key, { ids: true }); if (hasMany !== undefined) { // if provided, use the mapping provided by `attrs` in // the serializer var payloadKey = this._getMappedKey(key, snapshot.type); @@ -18035,29 +17601,10 @@ serializePolymorphicType: function (snapshot, json, relationship) { var key = relationship.key; var typeKey = this.keyForPolymorphicType(key, relationship.type, 'serialize'); var belongsTo = snapshot.belongsTo(key); - // old way of getting the key for the polymorphic type - key = this.keyForAttribute ? this.keyForAttribute(key, "serialize") : key; - key = key + 'Type'; - - // The old way of serializing the type of a polymorphic record used - // `keyForAttribute`, which is not correct. The next code checks if the old - // way is used and if it differs from the new way of using - // `keyForPolymorphicType`. If this is the case, a deprecation warning is - // logged and the old way is restored (so nothing breaks). - if (key !== typeKey && this.keyForPolymorphicType === RESTSerializer.prototype.keyForPolymorphicType) { - (false && !(false) && Ember.deprecate("The key to serialize the type of a polymorphic record is created via keyForAttribute which has been deprecated. Use the keyForPolymorphicType hook instead.", false, { - id: 'ds.rest-serializer.deprecated-key-for-polymorphic-type', - until: '3.0.0' - })); - - - typeKey = key; - } - if (isNone(belongsTo)) { json[typeKey] = null; } else { if ((0, _private.isEnabled)("ds-payload-type-hooks")) { json[typeKey] = this.payloadTypeFromModelName(belongsTo.modelName); @@ -18185,16 +17732,13 @@ @method initializeStore @param {Ember.Registry} registry */ function initializeStore(registry) { - // registry.optionsForType for Ember < 2.1.0 - // application.registerOptionsForType for Ember 2.1.0+ var registerOptionsForType = registry.registerOptionsForType || registry.optionsForType; registerOptionsForType.call(registry, 'serializer', { singleton: false }); registerOptionsForType.call(registry, 'adapter', { singleton: false }); - registry.register('serializer:-default', _json.default); registry.register('serializer:-rest', _rest.default); registry.register('adapter:-rest', _rest2.default); registry.register('adapter:-json-api', _jsonApi2.default); @@ -18309,75 +17853,18 @@ }); define('ember-data/transforms/date', ['exports', 'ember-data/transforms/transform'], function (exports, _transform) { 'use strict'; exports.__esModule = true; - - - Ember.Date = Ember.Date || {}; - - /** - Date.parse with progressive enhancement for ISO 8601 <https://github.com/csnover/js-iso8601> - - © 2011 Colin Snover <http://zetafleet.com> - - Released under MIT license. - - @class Date - @namespace Ember - @static - @deprecated - */ - Ember.Date.parse = function (date) { - (false && !(false) && Ember.deprecate('Ember.Date.parse is deprecated because Safari 5-, IE8-, and\n Firefox 3.6- are no longer supported (see\n https://github.com/csnover/js-iso8601 for the history of this issue).\n Please use Date.parse instead', false, { - id: 'ds.ember.date.parse-deprecate', - until: '3.0.0' - })); - - - return Date.parse(date); - }; - - /** - The `DS.DateTransform` class is used to serialize and deserialize - date attributes on Ember Data record objects. This transform is used - when `date` is passed as the type parameter to the - [DS.attr](../../data#method_attr) function. It uses the [`ISO 8601`](https://en.wikipedia.org/wiki/ISO_8601) - standard. - - ```app/models/score.js - import DS from 'ember-data'; - - export default DS.Model.extend({ - value: DS.attr('number'), - player: DS.belongsTo('player'), - date: DS.attr('date') - }); - ``` - - @class DateTransform - @extends DS.Transform - @namespace DS - */ - exports.default = _transform.default.extend({ deserialize: function (serialized) { var type = typeof serialized; if (type === "string") { var offset = serialized.indexOf('+'); - if (offset !== -1 && serialized.length - 3 === offset) { - (false && !(false) && Ember.deprecate('The ECMA2015 Spec for ISO 8601 dates does not allow for shorthand timezone offsets such as +00.\n Ember Data\'s normalization of date\'s allowing for this shorthand has been deprecated, please update your API to return\n UTC dates formatted with \xB1hh:mm timezone offsets or implement a custom UTC transform.', false, { - id: 'ds.attr.date.normalize-utc', - until: '3.0.0' - })); - - return new Date(serialized + ':00'); - - // this is a phantom specific bug fix in which +0000 is not supported - } else if (offset !== -1 && serialized.length - 5 === offset) { + if (offset !== -1 && serialized.length - 5 === offset) { offset += 3; return new Date(serialized.slice(0, offset) + ':' + serialized.slice(offset)); } return new Date(serialized); } else if (type === "number") { @@ -18513,10 +18000,10 @@ }); define("ember-data/version", ["exports"], function (exports) { "use strict"; exports.__esModule = true; - exports.default = "2.18.3"; + exports.default = "3.0.0-beta.1"; }); define("ember-inflector", ["module", "exports", "ember-inflector/lib/system", "ember-inflector/lib/ext/string"], function (module, exports, _system) { "use strict"; exports.__esModule = true;