ember-data-source 2.17.0 → 2.17.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6fa94ca65ba8854ff9dc09319564f51ac3d1f166
4
- data.tar.gz: 26438b9c7cb7e9fcebb8533374dfb14ff7c1d042
3
+ metadata.gz: 4574a31748687aa7ebae8d3617103105219a4540
4
+ data.tar.gz: 55782e6526a409427b5f98aef12c813da5ce648f
5
5
  SHA512:
6
- metadata.gz: 2eeffc4c98ecd1f1a415775905392d7bbf4787a9721bcf1c811b4c8f06700fa62cf102bfed0d2a2b2e205f3ec80e92d77dda9d3304e75266009fead075d8ee9c
7
- data.tar.gz: c06018c43a624c06953bbd1533e98b4f8413defb1d422fba543aebfd05f95d10502c3a9d963abe7d39c5fa139c47fd93fcd70dfb32739a213739e80c0baaa633
6
+ metadata.gz: 15e8aa24026fa58124c18e6ca74360e8d7ef0a5da6edb9cc07cb54383502a7fcf231faf09cafb8677141642455287cd799ef639224372698ee13312d9b807cc2
7
+ data.tar.gz: bb8aafb9ddcf131b6b8d7ca165c0e2277e72329b36c7800b41d4e06c72289f67f7c149b35a8c81dc9cf8758cb21b0b127d2b220047fcb05430f9672f1ceeceeb
@@ -6,7 +6,7 @@
6
6
  * @copyright Copyright 2011-2017 Tilde Inc. and contributors.
7
7
  * Portions Copyright 2011 LivingSocial Inc.
8
8
  * @license Licensed under MIT license (see license.js)
9
- * @version 2.17.0
9
+ * @version 2.17.1
10
10
  */
11
11
 
12
12
  var loader, define, requireModule, require, requirejs;
@@ -4802,6 +4802,10 @@ define('ember-data/-private/system/model/model', ['exports', 'ember-data/-privat
4802
4802
  // the computed property.
4803
4803
  var meta = value.meta();
4804
4804
 
4805
+ /*
4806
+ This is buggy because if the parent has never been looked up
4807
+ via `modelFor` it will not have `modelName` set.
4808
+ */
4805
4809
  meta.parentType = proto.constructor;
4806
4810
  }
4807
4811
  }
@@ -7614,7 +7618,7 @@ define('ember-data/-private/system/relationship-meta', ['exports', 'ember-inflec
7614
7618
  }
7615
7619
 
7616
7620
  function relationshipFromMeta(meta) {
7617
- var result = {
7621
+ return {
7618
7622
  key: meta.key,
7619
7623
  kind: meta.kind,
7620
7624
  type: typeForRelationshipMeta(meta),
@@ -7623,12 +7627,6 @@ define('ember-data/-private/system/relationship-meta', ['exports', 'ember-inflec
7623
7627
  parentType: meta.parentType,
7624
7628
  isRelationship: true
7625
7629
  };
7626
-
7627
- if (false) {
7628
- result.parentType = meta.parentType;
7629
- }
7630
-
7631
- return result;
7632
7630
  }
7633
7631
  });
7634
7632
  define('ember-data/-private/system/relationships/belongs-to', ['exports', 'ember-data/-private/system/normalize-model-name'], function (exports, _normalizeModelName) {
@@ -8038,7 +8036,7 @@ define('ember-data/-private/system/relationships/relationship-payloads-manager',
8038
8036
  }
8039
8037
  }
8040
8038
 
8041
- var _get = Ember.get;
8039
+ var get = Ember.get;
8042
8040
 
8043
8041
  var RelationshipPayloadsManager = function () {
8044
8042
  function RelationshipPayloadsManager(store) {
@@ -8047,6 +8045,7 @@ define('ember-data/-private/system/relationships/relationship-payloads-manager',
8047
8045
  this._store = store;
8048
8046
  // cache of `RelationshipPayload`s
8049
8047
  this._cache = Object.create(null);
8048
+ this._inverseLookupCache = new _relationshipPayloads.TypeCache();
8050
8049
  }
8051
8050
 
8052
8051
  /**
@@ -8067,9 +8066,7 @@ define('ember-data/-private/system/relationships/relationship-payloads-manager',
8067
8066
 
8068
8067
 
8069
8068
  RelationshipPayloadsManager.prototype.get = function get(modelName, id, relationshipName) {
8070
- var modelClass = this._store._modelFor(modelName);
8071
- var relationshipsByName = _get(modelClass, 'relationshipsByName');
8072
- var relationshipPayloads = this._getRelationshipPayloads(modelName, relationshipName, modelClass, relationshipsByName, false);
8069
+ var relationshipPayloads = this._getRelationshipPayloads(modelName, relationshipName, false);
8073
8070
  return relationshipPayloads && relationshipPayloads.get(modelName, id, relationshipName);
8074
8071
  };
8075
8072
 
@@ -8080,10 +8077,8 @@ define('ember-data/-private/system/relationships/relationship-payloads-manager',
8080
8077
  return;
8081
8078
  }
8082
8079
 
8083
- var modelClass = this._store._modelFor(modelName);
8084
- var relationshipsByName = _get(modelClass, 'relationshipsByName');
8085
8080
  Object.keys(relationshipsData).forEach(function (key) {
8086
- var relationshipPayloads = _this._getRelationshipPayloads(modelName, key, modelClass, relationshipsByName, true);
8081
+ var relationshipPayloads = _this._getRelationshipPayloads(modelName, key, true);
8087
8082
  if (relationshipPayloads) {
8088
8083
  relationshipPayloads.push(modelName, id, key, relationshipsData[key]);
8089
8084
  }
@@ -8094,51 +8089,153 @@ define('ember-data/-private/system/relationships/relationship-payloads-manager',
8094
8089
  var _this2 = this;
8095
8090
 
8096
8091
  var modelClass = this._store._modelFor(modelName);
8097
- var relationshipsByName = _get(modelClass, 'relationshipsByName');
8092
+ var relationshipsByName = get(modelClass, 'relationshipsByName');
8098
8093
  relationshipsByName.forEach(function (_, relationshipName) {
8099
- var relationshipPayloads = _this2._getRelationshipPayloads(modelName, relationshipName, modelClass, relationshipsByName, false);
8094
+ var relationshipPayloads = _this2._getRelationshipPayloads(modelName, relationshipName, false);
8100
8095
  if (relationshipPayloads) {
8101
8096
  relationshipPayloads.unload(modelName, id, relationshipName);
8102
8097
  }
8103
8098
  });
8104
8099
  };
8105
8100
 
8106
- RelationshipPayloadsManager.prototype._getRelationshipPayloads = function _getRelationshipPayloads(modelName, relationshipName, modelClass, relationshipsByName, init) {
8107
- if (!relationshipsByName.has(relationshipName)) {
8101
+ RelationshipPayloadsManager.prototype._getRelationshipPayloads = function _getRelationshipPayloads(modelName, relationshipName, init) {
8102
+ var relInfo = this.getRelationshipInfo(modelName, relationshipName);
8103
+
8104
+ if (relInfo === null) {
8108
8105
  return;
8109
8106
  }
8110
8107
 
8111
- var key = modelName + ':' + relationshipName;
8112
- if (!this._cache[key] && init) {
8113
- return this._initializeRelationshipPayloads(modelName, relationshipName, modelClass, relationshipsByName);
8108
+ var cache = this._cache[relInfo.lhs_key];
8109
+
8110
+ if (!cache && init) {
8111
+ return this._initializeRelationshipPayloads(relInfo);
8114
8112
  }
8115
8113
 
8116
- return this._cache[key];
8114
+ return cache;
8117
8115
  };
8118
8116
 
8119
- RelationshipPayloadsManager.prototype._initializeRelationshipPayloads = function _initializeRelationshipPayloads(modelName, relationshipName, modelClass, relationshipsByName) {
8117
+ RelationshipPayloadsManager.prototype.getRelationshipInfo = function getRelationshipInfo(modelName, relationshipName) {
8118
+ var inverseCache = this._inverseLookupCache;
8119
+ var store = this._store;
8120
+ var cached = inverseCache.get(modelName, relationshipName);
8121
+
8122
+ // CASE: We have a cached resolution (null if no relationship exists)
8123
+ if (cached !== undefined) {
8124
+ return cached;
8125
+ }
8126
+
8127
+ var modelClass = store._modelFor(modelName);
8128
+ var relationshipsByName = get(modelClass, 'relationshipsByName');
8129
+
8130
+ // CASE: We don't have a relationship at all
8131
+ if (!relationshipsByName.has(relationshipName)) {
8132
+ inverseCache.set(modelName, relationshipName, null);
8133
+ return null;
8134
+ }
8135
+
8136
+ var inverseMeta = modelClass.inverseFor(relationshipName, store);
8120
8137
  var relationshipMeta = relationshipsByName.get(relationshipName);
8121
- var inverseMeta = modelClass.inverseFor(relationshipName, this._store);
8122
-
8123
- var inverseModelName = void 0;
8124
- var inverseRelationshipName = void 0;
8125
- var inverseRelationshipMeta = void 0;
8126
-
8127
- // figure out the inverse relationship; we need two things
8128
- // a) the inverse model name
8129
- //- b) the name of the inverse relationship
8130
- if (inverseMeta) {
8131
- inverseRelationshipName = inverseMeta.name;
8132
- inverseModelName = relationshipMeta.type;
8133
- inverseRelationshipMeta = _get(inverseMeta.type, 'relationshipsByName').get(inverseRelationshipName);
8134
- } else {
8135
- // relationship has no inverse
8136
- inverseModelName = inverseRelationshipName = '';
8137
- inverseRelationshipMeta = null;
8138
+ var selfIsPolymorphic = relationshipMeta.options !== undefined && relationshipMeta.options.polymorphic === true;
8139
+ var inverseBaseModelName = relationshipMeta.type;
8140
+
8141
+ // CASE: We have no inverse
8142
+ if (!inverseMeta) {
8143
+ var _info = {
8144
+ lhs_key: modelName + ':' + relationshipName,
8145
+ lhs_modelNames: [modelName],
8146
+ lhs_baseModelName: modelName,
8147
+ lhs_relationshipName: relationshipName,
8148
+ lhs_relationshipMeta: relationshipMeta,
8149
+ lhs_isPolymorphic: selfIsPolymorphic,
8150
+ rhs_key: '',
8151
+ rhs_modelNames: [],
8152
+ rhs_baseModelName: inverseBaseModelName,
8153
+ rhs_relationshipName: '',
8154
+ rhs_relationshipMeta: null,
8155
+ rhs_isPolymorphic: false,
8156
+ hasInverse: false,
8157
+ isSelfReferential: false, // modelName === inverseBaseModelName,
8158
+ isReflexive: false
8159
+ };
8160
+
8161
+ inverseCache.set(modelName, relationshipName, _info);
8162
+
8163
+ return _info;
8138
8164
  }
8139
8165
 
8140
- var lhsKey = modelName + ':' + relationshipName;
8141
- var rhsKey = inverseModelName + ':' + inverseRelationshipName;
8166
+ // CASE: We do have an inverse
8167
+
8168
+ var inverseRelationshipName = inverseMeta.name;
8169
+ var inverseRelationshipMeta = get(inverseMeta.type, 'relationshipsByName').get(inverseRelationshipName);
8170
+ var baseModelName = inverseRelationshipMeta.type;
8171
+ var isSelfReferential = baseModelName === inverseBaseModelName;
8172
+
8173
+ // TODO we want to assert this but this breaks all of our shoddily written tests
8174
+ /*
8175
+ if (DEBUG) {
8176
+ let inverseDoubleCheck = inverseMeta.type.inverseFor(inverseRelationshipName, store);
8177
+ assert(`The ${inverseBaseModelName}:${inverseRelationshipName} relationship declares 'inverse: null', but it was resolved as the inverse for ${baseModelName}:${relationshipName}.`, inverseDoubleCheck);
8178
+ }
8179
+ */
8180
+
8181
+ // CASE: We may have already discovered the inverse for the baseModelName
8182
+ // CASE: We have already discovered the inverse
8183
+ cached = inverseCache.get(baseModelName, relationshipName) || inverseCache.get(inverseBaseModelName, inverseRelationshipName);
8184
+ if (cached) {
8185
+ (false && Ember.assert('The ' + inverseBaseModelName + ':' + inverseRelationshipName + ' relationship declares \'inverse: null\', but it was resolved as the inverse for ' + baseModelName + ':' + relationshipName + '.', cached.hasInverse !== false));
8186
+
8187
+
8188
+ var isLHS = cached.lhs_baseModelName === baseModelName;
8189
+ var modelNames = isLHS ? cached.lhs_modelNames : cached.rhs_modelNames;
8190
+ // make this lookup easier in the future by caching the key
8191
+ modelNames.push(modelName);
8192
+ inverseCache.set(modelName, relationshipName, cached);
8193
+
8194
+ return cached;
8195
+ }
8196
+
8197
+ var info = {
8198
+ lhs_key: baseModelName + ':' + relationshipName,
8199
+ lhs_modelNames: [modelName],
8200
+ lhs_baseModelName: baseModelName,
8201
+ lhs_relationshipName: relationshipName,
8202
+ lhs_relationshipMeta: relationshipMeta,
8203
+ lhs_isPolymorphic: selfIsPolymorphic,
8204
+ rhs_key: inverseBaseModelName + ':' + inverseRelationshipName,
8205
+ rhs_modelNames: [],
8206
+ rhs_baseModelName: inverseBaseModelName,
8207
+ rhs_relationshipName: inverseRelationshipName,
8208
+ rhs_relationshipMeta: inverseRelationshipMeta,
8209
+ rhs_isPolymorphic: inverseRelationshipMeta.options !== undefined && inverseRelationshipMeta.options.polymorphic === true,
8210
+ hasInverse: true,
8211
+ isSelfReferential: isSelfReferential,
8212
+ isReflexive: isSelfReferential && relationshipName === inverseRelationshipName
8213
+ };
8214
+
8215
+ // Create entries for the baseModelName as well as modelName to speed up
8216
+ // inverse lookups
8217
+ inverseCache.set(baseModelName, relationshipName, info);
8218
+ inverseCache.set(modelName, relationshipName, info);
8219
+
8220
+ // Greedily populate the inverse
8221
+ inverseCache.set(inverseBaseModelName, inverseRelationshipName, info);
8222
+
8223
+ return info;
8224
+ };
8225
+
8226
+ RelationshipPayloadsManager.prototype._initializeRelationshipPayloads = function _initializeRelationshipPayloads(relInfo) {
8227
+ var lhsKey = relInfo.lhs_key;
8228
+ var rhsKey = relInfo.rhs_key;
8229
+ var existingPayloads = this._cache[lhsKey];
8230
+
8231
+ if (relInfo.hasInverse === true && relInfo.rhs_isPolymorphic === true) {
8232
+ existingPayloads = this._cache[rhsKey];
8233
+
8234
+ if (existingPayloads !== undefined) {
8235
+ this._cache[lhsKey] = existingPayloads;
8236
+ return existingPayloads;
8237
+ }
8238
+ }
8142
8239
 
8143
8240
  // populate the cache for both sides of the relationship, as they both use
8144
8241
  // the same `RelationshipPayloads`.
@@ -8146,7 +8243,13 @@ define('ember-data/-private/system/relationships/relationship-payloads-manager',
8146
8243
  // This works out better than creating a single common key, because to
8147
8244
  // compute that key we would need to do work to look up the inverse
8148
8245
  //
8149
- return this._cache[lhsKey] = this._cache[rhsKey] = new _relationshipPayloads.default(this._store, modelName, relationshipName, relationshipMeta, inverseModelName, inverseRelationshipName, inverseRelationshipMeta);
8246
+ var cache = this._cache[lhsKey] = new _relationshipPayloads.default(relInfo);
8247
+
8248
+ if (relInfo.hasInverse === true) {
8249
+ this._cache[rhsKey] = cache;
8250
+ }
8251
+
8252
+ return cache;
8150
8253
  };
8151
8254
 
8152
8255
  return RelationshipPayloadsManager;
@@ -8159,12 +8262,6 @@ define('ember-data/-private/system/relationships/relationship-payloads', ['expor
8159
8262
 
8160
8263
  exports.__esModule = true;
8161
8264
 
8162
- function _classCallCheck(instance, Constructor) {
8163
- if (!(instance instanceof Constructor)) {
8164
- throw new TypeError("Cannot call a class as a function");
8165
- }
8166
- }
8167
-
8168
8265
  var _createClass = function () {
8169
8266
  function defineProperties(target, props) {
8170
8267
  for (var i = 0; i < props.length; i++) {
@@ -8183,38 +8280,62 @@ define('ember-data/-private/system/relationships/relationship-payloads', ['expor
8183
8280
  };
8184
8281
  }();
8185
8282
 
8186
- var RelationshipPayloads = function () {
8187
- function RelationshipPayloads(store, modelName, relationshipName, relationshipMeta, inverseModelName, inverseRelationshipName, inverseRelationshipMeta) {
8188
- _classCallCheck(this, RelationshipPayloads);
8283
+ function _classCallCheck(instance, Constructor) {
8284
+ if (!(instance instanceof Constructor)) {
8285
+ throw new TypeError("Cannot call a class as a function");
8286
+ }
8287
+ }
8189
8288
 
8190
- this._store = store;
8289
+ var TypeCache = exports.TypeCache = function () {
8290
+ function TypeCache() {
8291
+ _classCallCheck(this, TypeCache);
8191
8292
 
8192
- this._lhsModelName = modelName;
8193
- this._lhsRelationshipName = relationshipName;
8194
- this._lhsRelationshipMeta = relationshipMeta;
8293
+ this.types = Object.create(null);
8294
+ }
8195
8295
 
8196
- this._rhsModelName = inverseModelName;
8197
- this._rhsRelationshipName = inverseRelationshipName;
8198
- this._rhsRelationshipMeta = inverseRelationshipMeta;
8296
+ TypeCache.prototype.get = function get(modelName, id) {
8297
+ var types = this.types;
8199
8298
 
8200
- // a map of id -> payloads for the left hand side of the relationship.
8201
- this._lhsPayloads = Object.create(null);
8202
- if (modelName !== inverseModelName || relationshipName !== inverseRelationshipName) {
8203
- // The common case of a non-reflexive relationship, or a reflexive
8204
- // relationship whose inverse is not itself
8205
- this._rhsPayloads = Object.create(null);
8206
- this._isReflexive = false;
8207
- } else {
8208
- // Edge case when we have a reflexive relationship to itself
8209
- // eg user hasMany friends inverse friends
8210
- //
8211
- // In this case there aren't really two sides to the relationship, but
8212
- // we set `_rhsPayloads = _lhsPayloads` to make things easier to reason
8213
- // about
8214
- this._rhsPayloads = this._lhsPayloads;
8215
- this._isReflexive = true;
8299
+
8300
+ if (types[modelName] !== undefined) {
8301
+ return types[modelName][id];
8302
+ }
8303
+ };
8304
+
8305
+ TypeCache.prototype.set = function set(modelName, id, payload) {
8306
+ var types = this.types;
8307
+
8308
+ var typeMap = types[modelName];
8309
+
8310
+ if (typeMap === undefined) {
8311
+ typeMap = types[modelName] = Object.create(null);
8216
8312
  }
8217
8313
 
8314
+ typeMap[id] = payload;
8315
+ };
8316
+
8317
+ TypeCache.prototype.delete = function _delete(modelName, id) {
8318
+ var types = this.types;
8319
+
8320
+
8321
+ if (types[modelName] !== undefined) {
8322
+ delete types[modelName][id];
8323
+ }
8324
+ };
8325
+
8326
+ return TypeCache;
8327
+ }();
8328
+
8329
+ var RelationshipPayloads = function () {
8330
+ function RelationshipPayloads(relInfo) {
8331
+ _classCallCheck(this, RelationshipPayloads);
8332
+
8333
+ this._relInfo = relInfo;
8334
+
8335
+ // a map of id -> payloads for the left hand side of the relationship.
8336
+ this.lhs_payloads = new TypeCache();
8337
+ this.rhs_payloads = relInfo.isReflexive ? this.lhs_payloads : new TypeCache();
8338
+
8218
8339
  // When we push relationship payloads, just stash them in a queue until
8219
8340
  // somebody actually asks for one of them.
8220
8341
  //
@@ -8224,22 +8345,22 @@ define('ember-data/-private/system/relationships/relationship-payloads', ['expor
8224
8345
  }
8225
8346
 
8226
8347
  /**
8227
- Get the payload for the relationship of an individual record.
8228
- This might return the raw payload as pushed into the store, or one computed
8229
- from the payload of the inverse relationship.
8230
- @method
8231
- */
8348
+ Get the payload for the relationship of an individual record.
8349
+ This might return the raw payload as pushed into the store, or one computed
8350
+ from the payload of the inverse relationship.
8351
+ @method
8352
+ */
8232
8353
 
8233
8354
 
8234
8355
  RelationshipPayloads.prototype.get = function get(modelName, id, relationshipName) {
8235
8356
  this._flushPending();
8236
8357
 
8237
8358
  if (this._isLHS(modelName, relationshipName)) {
8238
- return this._lhsPayloads[id];
8359
+ return this.lhs_payloads.get(modelName, id);
8239
8360
  } else {
8240
- (false && Ember.assert(modelName + ':' + relationshipName + ' is not either side of this relationship, ' + this._lhsModelName + ':' + this._lhsRelationshipName + '<->' + this._rhsModelName + ':' + this._rhsRelationshipName, this._isRHS(modelName, relationshipName)));
8361
+ (false && Ember.assert(modelName + ':' + relationshipName + ' is not either side of this relationship, ' + this._relInfo.lhs_key + '<->' + this._relInfo.rhs_key, this._isRHS(modelName, relationshipName)));
8241
8362
 
8242
- return this._rhsPayloads[id];
8363
+ return this.rhs_payloads.get(modelName, id);
8243
8364
  }
8244
8365
  };
8245
8366
 
@@ -8251,20 +8372,40 @@ define('ember-data/-private/system/relationships/relationship-payloads', ['expor
8251
8372
  this._flushPending();
8252
8373
 
8253
8374
  if (this._isLHS(modelName, relationshipName)) {
8254
- delete this._lhsPayloads[id];
8375
+ delete this.lhs_payloads.delete(modelName, id);
8255
8376
  } else {
8256
- (false && Ember.assert(modelName + ':' + relationshipName + ' is not either side of this relationship, ' + this._lhsModelName + ':' + this._lhsRelationshipName + '<->' + this._rhsModelName + ':' + this._rhsRelationshipName, this._isRHS(modelName, relationshipName)));
8377
+ (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)));
8257
8378
 
8258
- delete this._rhsPayloads[id];
8379
+ delete this.rhs_payloads.delete(modelName, id);
8259
8380
  }
8260
8381
  };
8261
8382
 
8262
8383
  RelationshipPayloads.prototype._isLHS = function _isLHS(modelName, relationshipName) {
8263
- return modelName === this._lhsModelName && relationshipName === this._lhsRelationshipName;
8384
+ var relInfo = this._relInfo;
8385
+ var isSelfReferential = relInfo.isSelfReferential;
8386
+ var isRelationship = relationshipName === relInfo.lhs_relationshipName;
8387
+
8388
+ if (isRelationship === true) {
8389
+ return isSelfReferential === true || // itself
8390
+ modelName === relInfo.lhs_baseModelName || // base or non-polymorphic
8391
+ relInfo.lhs_modelNames.indexOf(modelName) !== -1; // polymorphic
8392
+ }
8393
+
8394
+ return false;
8264
8395
  };
8265
8396
 
8266
8397
  RelationshipPayloads.prototype._isRHS = function _isRHS(modelName, relationshipName) {
8267
- return modelName === this._rhsModelName && relationshipName === this._rhsRelationshipName;
8398
+ var relInfo = this._relInfo;
8399
+ var isSelfReferential = relInfo.isSelfReferential;
8400
+ var isRelationship = relationshipName === relInfo.rhs_relationshipName;
8401
+
8402
+ if (isRelationship === true) {
8403
+ return isSelfReferential === true || // itself
8404
+ modelName === relInfo.rhs_baseModelName || // base or non-polymorphic
8405
+ relInfo.rhs_modelNames.indexOf(modelName) !== -1; // polymorphic
8406
+ }
8407
+
8408
+ return false;
8268
8409
  };
8269
8410
 
8270
8411
  RelationshipPayloads.prototype._flushPending = function _flushPending() {
@@ -8285,26 +8426,28 @@ define('ember-data/-private/system/relationships/relationship-payloads', ['expor
8285
8426
  id: id,
8286
8427
  type: modelName
8287
8428
  }
8429
+ };
8288
8430
 
8289
- // start flushing this individual payload. The logic is the same whether
8290
- // it's for the left hand side of the relationship or the right hand side,
8291
- // except the role of primary and inverse idToPayloads is reversed
8292
- //
8293
- };var previousPayload = void 0;
8294
- var idToPayloads = void 0;
8295
- var inverseIdToPayloads = void 0;
8431
+ // start flushing this individual payload. The logic is the same whether
8432
+ // it's for the left hand side of the relationship or the right hand side,
8433
+ // except the role of primary and inverse idToPayloads is reversed
8434
+ //
8435
+ var previousPayload = void 0;
8436
+ var payloadMap = void 0;
8437
+ var inversePayloadMap = void 0;
8296
8438
  var inverseIsMany = void 0;
8439
+
8297
8440
  if (this._isLHS(modelName, relationshipName)) {
8298
- previousPayload = this._lhsPayloads[id];
8299
- idToPayloads = this._lhsPayloads;
8300
- inverseIdToPayloads = this._rhsPayloads;
8441
+ previousPayload = this.lhs_payloads.get(modelName, id);
8442
+ payloadMap = this.lhs_payloads;
8443
+ inversePayloadMap = this.rhs_payloads;
8301
8444
  inverseIsMany = this._rhsRelationshipIsMany;
8302
8445
  } else {
8303
- (false && Ember.assert(modelName + ':' + relationshipName + ' is not either side of this relationship, ' + this._lhsModelName + ':' + this._lhsRelationshipName + '<->' + this._rhsModelName + ':' + this._rhsRelationshipName, this._isRHS(modelName, relationshipName)));
8446
+ (false && Ember.assert(modelName + ':' + relationshipName + ' is not either side of this relationship, ' + this._relInfo.lhs_key + '<->' + this._relInfo.rhs_key, this._isRHS(modelName, relationshipName)));
8304
8447
 
8305
- previousPayload = this._rhsPayloads[id];
8306
- idToPayloads = this._rhsPayloads;
8307
- inverseIdToPayloads = this._lhsPayloads;
8448
+ previousPayload = this.rhs_payloads.get(modelName, id);
8449
+ payloadMap = this.rhs_payloads;
8450
+ inversePayloadMap = this.lhs_payloads;
8308
8451
  inverseIsMany = this._lhsRelationshipIsMany;
8309
8452
  }
8310
8453
 
@@ -8348,14 +8491,14 @@ define('ember-data/-private/system/relationships/relationship-payloads', ['expor
8348
8491
  // * undefined is NOT considered new information, we should keep original state
8349
8492
  // * anything else is considered new information, and it should win
8350
8493
  if (relationshipData.data !== undefined) {
8351
- this._removeInverse(id, previousPayload, inverseIdToPayloads);
8494
+ this._removeInverse(id, previousPayload, inversePayloadMap);
8352
8495
  }
8353
- idToPayloads[id] = relationshipData;
8354
- this._populateInverse(relationshipData, inverseRelationshipData, inverseIdToPayloads, inverseIsMany);
8496
+ payloadMap.set(modelName, id, relationshipData);
8497
+ this._populateInverse(relationshipData, inverseRelationshipData, inversePayloadMap, inverseIsMany);
8355
8498
  }
8356
8499
  };
8357
8500
 
8358
- RelationshipPayloads.prototype._populateInverse = function _populateInverse(relationshipData, inversePayload, inverseIdToPayloads, inverseIsMany) {
8501
+ RelationshipPayloads.prototype._populateInverse = function _populateInverse(relationshipData, inversePayload, inversePayloadMap, inverseIsMany) {
8359
8502
  if (!relationshipData.data) {
8360
8503
  // This id doesn't have an inverse, eg a belongsTo with a payload
8361
8504
  // { data: null }, so there's nothing to populate
@@ -8364,22 +8507,24 @@ define('ember-data/-private/system/relationships/relationship-payloads', ['expor
8364
8507
 
8365
8508
  if (Array.isArray(relationshipData.data)) {
8366
8509
  for (var i = 0; i < relationshipData.data.length; ++i) {
8367
- var inverseId = relationshipData.data[i].id;
8368
- this._addToInverse(inversePayload, inverseId, inverseIdToPayloads, inverseIsMany);
8510
+ var resourceIdentifier = relationshipData.data[i];
8511
+ this._addToInverse(inversePayload, resourceIdentifier, inversePayloadMap, inverseIsMany);
8369
8512
  }
8370
8513
  } else {
8371
- var _inverseId = relationshipData.data.id;
8372
- this._addToInverse(inversePayload, _inverseId, inverseIdToPayloads, inverseIsMany);
8514
+ var _resourceIdentifier = relationshipData.data;
8515
+ this._addToInverse(inversePayload, _resourceIdentifier, inversePayloadMap, inverseIsMany);
8373
8516
  }
8374
8517
  };
8375
8518
 
8376
- RelationshipPayloads.prototype._addToInverse = function _addToInverse(inversePayload, inverseId, inverseIdToPayloads, inverseIsMany) {
8377
- if (this._isReflexive && inversePayload.data.id === inverseId) {
8519
+ RelationshipPayloads.prototype._addToInverse = function _addToInverse(inversePayload, resourceIdentifier, inversePayloadMap, inverseIsMany) {
8520
+ var relInfo = this._relInfo;
8521
+
8522
+ if (relInfo.isReflexive && inversePayload.data.id === resourceIdentifier.id) {
8378
8523
  // eg <user:1>.friends = [{ id: 1, type: 'user' }]
8379
8524
  return;
8380
8525
  }
8381
8526
 
8382
- var existingPayload = inverseIdToPayloads[inverseId];
8527
+ var existingPayload = inversePayloadMap.get(resourceIdentifier.type, resourceIdentifier.id);
8383
8528
  var existingData = existingPayload && existingPayload.data;
8384
8529
 
8385
8530
  if (existingData) {
@@ -8389,22 +8534,22 @@ define('ember-data/-private/system/relationships/relationship-payloads', ['expor
8389
8534
  if (Array.isArray(existingData)) {
8390
8535
  existingData.push(inversePayload.data);
8391
8536
  } else {
8392
- inverseIdToPayloads[inverseId] = inversePayload;
8537
+ inversePayloadMap.set(resourceIdentifier.type, resourceIdentifier.id, inversePayload);
8393
8538
  }
8394
8539
  } else {
8395
8540
  // first time we're populating the inverse side
8396
8541
  //
8397
8542
  if (inverseIsMany) {
8398
- inverseIdToPayloads[inverseId] = {
8543
+ inversePayloadMap.set(resourceIdentifier.type, resourceIdentifier.id, {
8399
8544
  data: [inversePayload.data]
8400
- };
8545
+ });
8401
8546
  } else {
8402
- inverseIdToPayloads[inverseId] = inversePayload;
8547
+ inversePayloadMap.set(resourceIdentifier.type, resourceIdentifier.id, inversePayload);
8403
8548
  }
8404
8549
  }
8405
8550
  };
8406
8551
 
8407
- RelationshipPayloads.prototype._removeInverse = function _removeInverse(id, previousPayload, inverseIdToPayloads) {
8552
+ RelationshipPayloads.prototype._removeInverse = function _removeInverse(id, previousPayload, inversePayloadMap) {
8408
8553
  var data = previousPayload && previousPayload.data;
8409
8554
  if (!data) {
8410
8555
  // either this is the first time we've seen a payload for this id, or its
@@ -8419,15 +8564,16 @@ define('ember-data/-private/system/relationships/relationship-payloads', ['expor
8419
8564
  if (Array.isArray(data)) {
8420
8565
  // TODO: diff rather than removeall addall?
8421
8566
  for (var i = 0; i < data.length; ++i) {
8422
- this._removeFromInverse(id, data[i].id, inverseIdToPayloads);
8567
+ var resourceIdentifier = data[i];
8568
+ this._removeFromInverse(id, resourceIdentifier, inversePayloadMap);
8423
8569
  }
8424
8570
  } else {
8425
- this._removeFromInverse(id, data.id, inverseIdToPayloads);
8571
+ this._removeFromInverse(id, data, inversePayloadMap);
8426
8572
  }
8427
8573
  };
8428
8574
 
8429
- RelationshipPayloads.prototype._removeFromInverse = function _removeFromInverse(id, inverseId, inversePayloads) {
8430
- var inversePayload = inversePayloads[inverseId];
8575
+ RelationshipPayloads.prototype._removeFromInverse = function _removeFromInverse(id, resourceIdentifier, inversePayloads) {
8576
+ var inversePayload = inversePayloads.get(resourceIdentifier.type, resourceIdentifier.id);
8431
8577
  var data = inversePayload && inversePayload.data;
8432
8578
 
8433
8579
  if (!data) {
@@ -8439,21 +8585,23 @@ define('ember-data/-private/system/relationships/relationship-payloads', ['expor
8439
8585
  return x.id !== id;
8440
8586
  });
8441
8587
  } else {
8442
- inversePayloads[inverseId] = {
8588
+ inversePayloads.set(resourceIdentifier.type, resourceIdentifier.id, {
8443
8589
  data: null
8444
- };
8590
+ });
8445
8591
  }
8446
8592
  };
8447
8593
 
8448
8594
  _createClass(RelationshipPayloads, [{
8449
8595
  key: '_lhsRelationshipIsMany',
8450
8596
  get: function () {
8451
- return this._lhsRelationshipMeta && this._lhsRelationshipMeta.kind === 'hasMany';
8597
+ var meta = this._relInfo.lhs_relationshipMeta;
8598
+ return meta !== null && meta.kind === 'hasMany';
8452
8599
  }
8453
8600
  }, {
8454
8601
  key: '_rhsRelationshipIsMany',
8455
8602
  get: function () {
8456
- return this._rhsRelationshipMeta && this._rhsRelationshipMeta.kind === 'hasMany';
8603
+ var meta = this._relInfo.rhs_relationshipMeta;
8604
+ return meta !== null && meta.kind === 'hasMany';
8457
8605
  }
8458
8606
  }]);
8459
8607
 
@@ -18250,7 +18398,7 @@ define("ember-data/version", ["exports"], function (exports) {
18250
18398
  "use strict";
18251
18399
 
18252
18400
  exports.__esModule = true;
18253
- exports.default = "2.17.0";
18401
+ exports.default = "2.17.1";
18254
18402
  });
18255
18403
  define("ember-inflector", ["module", "exports", "ember-inflector/lib/system", "ember-inflector/lib/ext/string"], function (module, exports, _system) {
18256
18404
  "use strict";