ember-data-source 2.17.0 → 2.17.1

Sign up to get free protection for your applications and to get access to all the features.
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";