ember-data-source 2.18.1 → 2.18.2

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: 6e9fb3e57e9fa7b9072885ba6c7f76089b937ecd
4
- data.tar.gz: 9d7a593dea27248952707f82290cacb0e85c46fe
3
+ metadata.gz: 1e40c1c5b49407ec723edf964a6f29dd0acde967
4
+ data.tar.gz: '0994b6b252c0dc06894606223ca5f2c1a2f4bb95'
5
5
  SHA512:
6
- metadata.gz: 68f5a7b072a7335dfde96430ccbd0f11bc63d9422b140d603a48de27f6cd90bb425edda3582f7fa0c351e048495e4d418fdd034992d6a85411b9401bc84026a5
7
- data.tar.gz: c0dbc09842ee5859bdf92e16fe39ac2cd122bb358e1ed04847fb3bed5c9e462fc38277c81b0bf9c273217fe65744b4c434ed9a736c16a51c027a27f16fd8ee39
6
+ metadata.gz: cce3ecea3cdcd775f6c646ae58d05aacc0790dfec52b72f02e31067b2b6707d0dccf4450180ef6efe5af079cdaa02cbb766f8dd6e29663e22dde6dd54460b46a
7
+ data.tar.gz: 644ecfb024ed6423bac3c2faa38ecfcb6f668982a13444a71537ef3bbbdf9adf29e73c44fb7b296272ac822e76f7f673e9bd79ccc9243b55308fc2ba5a0a1eb9
@@ -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.18.1
9
+ * @version 2.18.2
10
10
  */
11
11
 
12
12
  var loader, define, requireModule, require, requirejs;
@@ -4812,6 +4812,10 @@ define('ember-data/-private/system/model/model', ['exports', 'ember-data/-privat
4812
4812
  // the computed property.
4813
4813
  var meta = value.meta();
4814
4814
 
4815
+ /*
4816
+ This is buggy because if the parent has never been looked up
4817
+ via `modelFor` it will not have `modelName` set.
4818
+ */
4815
4819
  meta.parentType = proto.constructor;
4816
4820
  }
4817
4821
  }
@@ -7624,7 +7628,7 @@ define('ember-data/-private/system/relationship-meta', ['exports', 'ember-inflec
7624
7628
  }
7625
7629
 
7626
7630
  function relationshipFromMeta(meta) {
7627
- var result = {
7631
+ return {
7628
7632
  key: meta.key,
7629
7633
  kind: meta.kind,
7630
7634
  type: typeForRelationshipMeta(meta),
@@ -7633,12 +7637,6 @@ define('ember-data/-private/system/relationship-meta', ['exports', 'ember-inflec
7633
7637
  parentType: meta.parentType,
7634
7638
  isRelationship: true
7635
7639
  };
7636
-
7637
- if (false) {
7638
- result.parentType = meta.parentType;
7639
- }
7640
-
7641
- return result;
7642
7640
  }
7643
7641
  });
7644
7642
  define('ember-data/-private/system/relationships/belongs-to', ['exports', 'ember-data/-private/system/normalize-model-name'], function (exports, _normalizeModelName) {
@@ -8048,7 +8046,7 @@ define('ember-data/-private/system/relationships/relationship-payloads-manager',
8048
8046
  }
8049
8047
  }
8050
8048
 
8051
- var _get = Ember.get;
8049
+ var get = Ember.get;
8052
8050
 
8053
8051
  var RelationshipPayloadsManager = function () {
8054
8052
  function RelationshipPayloadsManager(store) {
@@ -8057,6 +8055,7 @@ define('ember-data/-private/system/relationships/relationship-payloads-manager',
8057
8055
  this._store = store;
8058
8056
  // cache of `RelationshipPayload`s
8059
8057
  this._cache = Object.create(null);
8058
+ this._inverseLookupCache = new _relationshipPayloads.TypeCache();
8060
8059
  }
8061
8060
 
8062
8061
  /**
@@ -8077,9 +8076,7 @@ define('ember-data/-private/system/relationships/relationship-payloads-manager',
8077
8076
 
8078
8077
 
8079
8078
  RelationshipPayloadsManager.prototype.get = function get(modelName, id, relationshipName) {
8080
- var modelClass = this._store._modelFor(modelName);
8081
- var relationshipsByName = _get(modelClass, 'relationshipsByName');
8082
- var relationshipPayloads = this._getRelationshipPayloads(modelName, relationshipName, modelClass, relationshipsByName, false);
8079
+ var relationshipPayloads = this._getRelationshipPayloads(modelName, relationshipName, false);
8083
8080
  return relationshipPayloads && relationshipPayloads.get(modelName, id, relationshipName);
8084
8081
  };
8085
8082
 
@@ -8090,10 +8087,8 @@ define('ember-data/-private/system/relationships/relationship-payloads-manager',
8090
8087
  return;
8091
8088
  }
8092
8089
 
8093
- var modelClass = this._store._modelFor(modelName);
8094
- var relationshipsByName = _get(modelClass, 'relationshipsByName');
8095
8090
  Object.keys(relationshipsData).forEach(function (key) {
8096
- var relationshipPayloads = _this._getRelationshipPayloads(modelName, key, modelClass, relationshipsByName, true);
8091
+ var relationshipPayloads = _this._getRelationshipPayloads(modelName, key, true);
8097
8092
  if (relationshipPayloads) {
8098
8093
  relationshipPayloads.push(modelName, id, key, relationshipsData[key]);
8099
8094
  }
@@ -8104,51 +8099,153 @@ define('ember-data/-private/system/relationships/relationship-payloads-manager',
8104
8099
  var _this2 = this;
8105
8100
 
8106
8101
  var modelClass = this._store._modelFor(modelName);
8107
- var relationshipsByName = _get(modelClass, 'relationshipsByName');
8102
+ var relationshipsByName = get(modelClass, 'relationshipsByName');
8108
8103
  relationshipsByName.forEach(function (_, relationshipName) {
8109
- var relationshipPayloads = _this2._getRelationshipPayloads(modelName, relationshipName, modelClass, relationshipsByName, false);
8104
+ var relationshipPayloads = _this2._getRelationshipPayloads(modelName, relationshipName, false);
8110
8105
  if (relationshipPayloads) {
8111
8106
  relationshipPayloads.unload(modelName, id, relationshipName);
8112
8107
  }
8113
8108
  });
8114
8109
  };
8115
8110
 
8116
- RelationshipPayloadsManager.prototype._getRelationshipPayloads = function _getRelationshipPayloads(modelName, relationshipName, modelClass, relationshipsByName, init) {
8117
- if (!relationshipsByName.has(relationshipName)) {
8111
+ RelationshipPayloadsManager.prototype._getRelationshipPayloads = function _getRelationshipPayloads(modelName, relationshipName, init) {
8112
+ var relInfo = this.getRelationshipInfo(modelName, relationshipName);
8113
+
8114
+ if (relInfo === null) {
8118
8115
  return;
8119
8116
  }
8120
8117
 
8121
- var key = modelName + ':' + relationshipName;
8122
- if (!this._cache[key] && init) {
8123
- return this._initializeRelationshipPayloads(modelName, relationshipName, modelClass, relationshipsByName);
8118
+ var cache = this._cache[relInfo.lhs_key];
8119
+
8120
+ if (!cache && init) {
8121
+ return this._initializeRelationshipPayloads(relInfo);
8124
8122
  }
8125
8123
 
8126
- return this._cache[key];
8124
+ return cache;
8127
8125
  };
8128
8126
 
8129
- RelationshipPayloadsManager.prototype._initializeRelationshipPayloads = function _initializeRelationshipPayloads(modelName, relationshipName, modelClass, relationshipsByName) {
8127
+ RelationshipPayloadsManager.prototype.getRelationshipInfo = function getRelationshipInfo(modelName, relationshipName) {
8128
+ var inverseCache = this._inverseLookupCache;
8129
+ var store = this._store;
8130
+ var cached = inverseCache.get(modelName, relationshipName);
8131
+
8132
+ // CASE: We have a cached resolution (null if no relationship exists)
8133
+ if (cached !== undefined) {
8134
+ return cached;
8135
+ }
8136
+
8137
+ var modelClass = store._modelFor(modelName);
8138
+ var relationshipsByName = get(modelClass, 'relationshipsByName');
8139
+
8140
+ // CASE: We don't have a relationship at all
8141
+ if (!relationshipsByName.has(relationshipName)) {
8142
+ inverseCache.set(modelName, relationshipName, null);
8143
+ return null;
8144
+ }
8145
+
8146
+ var inverseMeta = modelClass.inverseFor(relationshipName, store);
8130
8147
  var relationshipMeta = relationshipsByName.get(relationshipName);
8131
- var inverseMeta = modelClass.inverseFor(relationshipName, this._store);
8132
-
8133
- var inverseModelName = void 0;
8134
- var inverseRelationshipName = void 0;
8135
- var inverseRelationshipMeta = void 0;
8136
-
8137
- // figure out the inverse relationship; we need two things
8138
- // a) the inverse model name
8139
- //- b) the name of the inverse relationship
8140
- if (inverseMeta) {
8141
- inverseRelationshipName = inverseMeta.name;
8142
- inverseModelName = relationshipMeta.type;
8143
- inverseRelationshipMeta = _get(inverseMeta.type, 'relationshipsByName').get(inverseRelationshipName);
8144
- } else {
8145
- // relationship has no inverse
8146
- inverseModelName = inverseRelationshipName = '';
8147
- inverseRelationshipMeta = null;
8148
+ var selfIsPolymorphic = relationshipMeta.options !== undefined && relationshipMeta.options.polymorphic === true;
8149
+ var inverseBaseModelName = relationshipMeta.type;
8150
+
8151
+ // CASE: We have no inverse
8152
+ if (!inverseMeta) {
8153
+ var _info = {
8154
+ lhs_key: modelName + ':' + relationshipName,
8155
+ lhs_modelNames: [modelName],
8156
+ lhs_baseModelName: modelName,
8157
+ lhs_relationshipName: relationshipName,
8158
+ lhs_relationshipMeta: relationshipMeta,
8159
+ lhs_isPolymorphic: selfIsPolymorphic,
8160
+ rhs_key: '',
8161
+ rhs_modelNames: [],
8162
+ rhs_baseModelName: inverseBaseModelName,
8163
+ rhs_relationshipName: '',
8164
+ rhs_relationshipMeta: null,
8165
+ rhs_isPolymorphic: false,
8166
+ hasInverse: false,
8167
+ isSelfReferential: false, // modelName === inverseBaseModelName,
8168
+ isReflexive: false
8169
+ };
8170
+
8171
+ inverseCache.set(modelName, relationshipName, _info);
8172
+
8173
+ return _info;
8148
8174
  }
8149
8175
 
8150
- var lhsKey = modelName + ':' + relationshipName;
8151
- var rhsKey = inverseModelName + ':' + inverseRelationshipName;
8176
+ // CASE: We do have an inverse
8177
+
8178
+ var inverseRelationshipName = inverseMeta.name;
8179
+ var inverseRelationshipMeta = get(inverseMeta.type, 'relationshipsByName').get(inverseRelationshipName);
8180
+ var baseModelName = inverseRelationshipMeta.type;
8181
+ var isSelfReferential = baseModelName === inverseBaseModelName;
8182
+
8183
+ // TODO we want to assert this but this breaks all of our shoddily written tests
8184
+ /*
8185
+ if (DEBUG) {
8186
+ let inverseDoubleCheck = inverseMeta.type.inverseFor(inverseRelationshipName, store);
8187
+ assert(`The ${inverseBaseModelName}:${inverseRelationshipName} relationship declares 'inverse: null', but it was resolved as the inverse for ${baseModelName}:${relationshipName}.`, inverseDoubleCheck);
8188
+ }
8189
+ */
8190
+
8191
+ // CASE: We may have already discovered the inverse for the baseModelName
8192
+ // CASE: We have already discovered the inverse
8193
+ cached = inverseCache.get(baseModelName, relationshipName) || inverseCache.get(inverseBaseModelName, inverseRelationshipName);
8194
+ if (cached) {
8195
+ (false && Ember.assert('The ' + inverseBaseModelName + ':' + inverseRelationshipName + ' relationship declares \'inverse: null\', but it was resolved as the inverse for ' + baseModelName + ':' + relationshipName + '.', cached.hasInverse !== false));
8196
+
8197
+
8198
+ var isLHS = cached.lhs_baseModelName === baseModelName;
8199
+ var modelNames = isLHS ? cached.lhs_modelNames : cached.rhs_modelNames;
8200
+ // make this lookup easier in the future by caching the key
8201
+ modelNames.push(modelName);
8202
+ inverseCache.set(modelName, relationshipName, cached);
8203
+
8204
+ return cached;
8205
+ }
8206
+
8207
+ var info = {
8208
+ lhs_key: baseModelName + ':' + relationshipName,
8209
+ lhs_modelNames: [modelName],
8210
+ lhs_baseModelName: baseModelName,
8211
+ lhs_relationshipName: relationshipName,
8212
+ lhs_relationshipMeta: relationshipMeta,
8213
+ lhs_isPolymorphic: selfIsPolymorphic,
8214
+ rhs_key: inverseBaseModelName + ':' + inverseRelationshipName,
8215
+ rhs_modelNames: [],
8216
+ rhs_baseModelName: inverseBaseModelName,
8217
+ rhs_relationshipName: inverseRelationshipName,
8218
+ rhs_relationshipMeta: inverseRelationshipMeta,
8219
+ rhs_isPolymorphic: inverseRelationshipMeta.options !== undefined && inverseRelationshipMeta.options.polymorphic === true,
8220
+ hasInverse: true,
8221
+ isSelfReferential: isSelfReferential,
8222
+ isReflexive: isSelfReferential && relationshipName === inverseRelationshipName
8223
+ };
8224
+
8225
+ // Create entries for the baseModelName as well as modelName to speed up
8226
+ // inverse lookups
8227
+ inverseCache.set(baseModelName, relationshipName, info);
8228
+ inverseCache.set(modelName, relationshipName, info);
8229
+
8230
+ // Greedily populate the inverse
8231
+ inverseCache.set(inverseBaseModelName, inverseRelationshipName, info);
8232
+
8233
+ return info;
8234
+ };
8235
+
8236
+ RelationshipPayloadsManager.prototype._initializeRelationshipPayloads = function _initializeRelationshipPayloads(relInfo) {
8237
+ var lhsKey = relInfo.lhs_key;
8238
+ var rhsKey = relInfo.rhs_key;
8239
+ var existingPayloads = this._cache[lhsKey];
8240
+
8241
+ if (relInfo.hasInverse === true && relInfo.rhs_isPolymorphic === true) {
8242
+ existingPayloads = this._cache[rhsKey];
8243
+
8244
+ if (existingPayloads !== undefined) {
8245
+ this._cache[lhsKey] = existingPayloads;
8246
+ return existingPayloads;
8247
+ }
8248
+ }
8152
8249
 
8153
8250
  // populate the cache for both sides of the relationship, as they both use
8154
8251
  // the same `RelationshipPayloads`.
@@ -8156,7 +8253,13 @@ define('ember-data/-private/system/relationships/relationship-payloads-manager',
8156
8253
  // This works out better than creating a single common key, because to
8157
8254
  // compute that key we would need to do work to look up the inverse
8158
8255
  //
8159
- return this._cache[lhsKey] = this._cache[rhsKey] = new _relationshipPayloads.default(this._store, modelName, relationshipName, relationshipMeta, inverseModelName, inverseRelationshipName, inverseRelationshipMeta);
8256
+ var cache = this._cache[lhsKey] = new _relationshipPayloads.default(relInfo);
8257
+
8258
+ if (relInfo.hasInverse === true) {
8259
+ this._cache[rhsKey] = cache;
8260
+ }
8261
+
8262
+ return cache;
8160
8263
  };
8161
8264
 
8162
8265
  return RelationshipPayloadsManager;
@@ -8169,12 +8272,6 @@ define('ember-data/-private/system/relationships/relationship-payloads', ['expor
8169
8272
 
8170
8273
  exports.__esModule = true;
8171
8274
 
8172
- function _classCallCheck(instance, Constructor) {
8173
- if (!(instance instanceof Constructor)) {
8174
- throw new TypeError("Cannot call a class as a function");
8175
- }
8176
- }
8177
-
8178
8275
  var _createClass = function () {
8179
8276
  function defineProperties(target, props) {
8180
8277
  for (var i = 0; i < props.length; i++) {
@@ -8193,37 +8290,61 @@ define('ember-data/-private/system/relationships/relationship-payloads', ['expor
8193
8290
  };
8194
8291
  }();
8195
8292
 
8196
- var RelationshipPayloads = function () {
8197
- function RelationshipPayloads(store, modelName, relationshipName, relationshipMeta, inverseModelName, inverseRelationshipName, inverseRelationshipMeta) {
8198
- _classCallCheck(this, RelationshipPayloads);
8293
+ function _classCallCheck(instance, Constructor) {
8294
+ if (!(instance instanceof Constructor)) {
8295
+ throw new TypeError("Cannot call a class as a function");
8296
+ }
8297
+ }
8199
8298
 
8200
- this._store = store;
8299
+ var TypeCache = exports.TypeCache = function () {
8300
+ function TypeCache() {
8301
+ _classCallCheck(this, TypeCache);
8201
8302
 
8202
- this._lhsModelName = modelName;
8203
- this._lhsRelationshipName = relationshipName;
8204
- this._lhsRelationshipMeta = relationshipMeta;
8303
+ this.types = Object.create(null);
8304
+ }
8205
8305
 
8206
- this._rhsModelName = inverseModelName;
8207
- this._rhsRelationshipName = inverseRelationshipName;
8208
- this._rhsRelationshipMeta = inverseRelationshipMeta;
8306
+ TypeCache.prototype.get = function get(modelName, id) {
8307
+ var types = this.types;
8209
8308
 
8210
- // a map of id -> payloads for the left hand side of the relationship.
8211
- this._lhsPayloads = Object.create(null);
8212
- if (modelName !== inverseModelName || relationshipName !== inverseRelationshipName) {
8213
- // The common case of a non-reflexive relationship, or a reflexive
8214
- // relationship whose inverse is not itself
8215
- this._rhsPayloads = Object.create(null);
8216
- this._isReflexive = false;
8217
- } else {
8218
- // Edge case when we have a reflexive relationship to itself
8219
- // eg user hasMany friends inverse friends
8220
- //
8221
- // In this case there aren't really two sides to the relationship, but
8222
- // we set `_rhsPayloads = _lhsPayloads` to make things easier to reason
8223
- // about
8224
- this._rhsPayloads = this._lhsPayloads;
8225
- this._isReflexive = true;
8309
+
8310
+ if (types[modelName] !== undefined) {
8311
+ return types[modelName][id];
8226
8312
  }
8313
+ };
8314
+
8315
+ TypeCache.prototype.set = function set(modelName, id, payload) {
8316
+ var types = this.types;
8317
+
8318
+ var typeMap = types[modelName];
8319
+
8320
+ if (typeMap === undefined) {
8321
+ typeMap = types[modelName] = Object.create(null);
8322
+ }
8323
+
8324
+ typeMap[id] = payload;
8325
+ };
8326
+
8327
+ TypeCache.prototype.delete = function _delete(modelName, id) {
8328
+ var types = this.types;
8329
+
8330
+
8331
+ if (types[modelName] !== undefined) {
8332
+ delete types[modelName][id];
8333
+ }
8334
+ };
8335
+
8336
+ return TypeCache;
8337
+ }();
8338
+
8339
+ var RelationshipPayloads = function () {
8340
+ function RelationshipPayloads(relInfo) {
8341
+ _classCallCheck(this, RelationshipPayloads);
8342
+
8343
+ this._relInfo = relInfo;
8344
+
8345
+ // a map of id -> payloads for the left hand side of the relationship.
8346
+ this.lhs_payloads = new TypeCache();
8347
+ this.rhs_payloads = relInfo.isReflexive ? this.lhs_payloads : new TypeCache();
8227
8348
 
8228
8349
  // When we push relationship payloads, just stash them in a queue until
8229
8350
  // somebody actually asks for one of them.
@@ -8234,22 +8355,22 @@ define('ember-data/-private/system/relationships/relationship-payloads', ['expor
8234
8355
  }
8235
8356
 
8236
8357
  /**
8237
- Get the payload for the relationship of an individual record.
8238
- This might return the raw payload as pushed into the store, or one computed
8239
- from the payload of the inverse relationship.
8240
- @method
8241
- */
8358
+ Get the payload for the relationship of an individual record.
8359
+ This might return the raw payload as pushed into the store, or one computed
8360
+ from the payload of the inverse relationship.
8361
+ @method
8362
+ */
8242
8363
 
8243
8364
 
8244
8365
  RelationshipPayloads.prototype.get = function get(modelName, id, relationshipName) {
8245
8366
  this._flushPending();
8246
8367
 
8247
8368
  if (this._isLHS(modelName, relationshipName)) {
8248
- return this._lhsPayloads[id];
8369
+ return this.lhs_payloads.get(modelName, id);
8249
8370
  } else {
8250
- (false && Ember.assert(modelName + ':' + relationshipName + ' is not either side of this relationship, ' + this._lhsModelName + ':' + this._lhsRelationshipName + '<->' + this._rhsModelName + ':' + this._rhsRelationshipName, this._isRHS(modelName, relationshipName)));
8371
+ (false && Ember.assert(modelName + ':' + relationshipName + ' is not either side of this relationship, ' + this._relInfo.lhs_key + '<->' + this._relInfo.rhs_key, this._isRHS(modelName, relationshipName)));
8251
8372
 
8252
- return this._rhsPayloads[id];
8373
+ return this.rhs_payloads.get(modelName, id);
8253
8374
  }
8254
8375
  };
8255
8376
 
@@ -8261,20 +8382,40 @@ define('ember-data/-private/system/relationships/relationship-payloads', ['expor
8261
8382
  this._flushPending();
8262
8383
 
8263
8384
  if (this._isLHS(modelName, relationshipName)) {
8264
- delete this._lhsPayloads[id];
8385
+ delete this.lhs_payloads.delete(modelName, id);
8265
8386
  } else {
8266
- (false && Ember.assert(modelName + ':' + relationshipName + ' is not either side of this relationship, ' + this._lhsModelName + ':' + this._lhsRelationshipName + '<->' + this._rhsModelName + ':' + this._rhsRelationshipName, this._isRHS(modelName, relationshipName)));
8387
+ (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)));
8267
8388
 
8268
- delete this._rhsPayloads[id];
8389
+ delete this.rhs_payloads.delete(modelName, id);
8269
8390
  }
8270
8391
  };
8271
8392
 
8272
8393
  RelationshipPayloads.prototype._isLHS = function _isLHS(modelName, relationshipName) {
8273
- return modelName === this._lhsModelName && relationshipName === this._lhsRelationshipName;
8394
+ var relInfo = this._relInfo;
8395
+ var isSelfReferential = relInfo.isSelfReferential;
8396
+ var isRelationship = relationshipName === relInfo.lhs_relationshipName;
8397
+
8398
+ if (isRelationship === true) {
8399
+ return isSelfReferential === true || // itself
8400
+ modelName === relInfo.lhs_baseModelName || // base or non-polymorphic
8401
+ relInfo.lhs_modelNames.indexOf(modelName) !== -1; // polymorphic
8402
+ }
8403
+
8404
+ return false;
8274
8405
  };
8275
8406
 
8276
8407
  RelationshipPayloads.prototype._isRHS = function _isRHS(modelName, relationshipName) {
8277
- return modelName === this._rhsModelName && relationshipName === this._rhsRelationshipName;
8408
+ var relInfo = this._relInfo;
8409
+ var isSelfReferential = relInfo.isSelfReferential;
8410
+ var isRelationship = relationshipName === relInfo.rhs_relationshipName;
8411
+
8412
+ if (isRelationship === true) {
8413
+ return isSelfReferential === true || // itself
8414
+ modelName === relInfo.rhs_baseModelName || // base or non-polymorphic
8415
+ relInfo.rhs_modelNames.indexOf(modelName) !== -1; // polymorphic
8416
+ }
8417
+
8418
+ return false;
8278
8419
  };
8279
8420
 
8280
8421
  RelationshipPayloads.prototype._flushPending = function _flushPending() {
@@ -8295,26 +8436,28 @@ define('ember-data/-private/system/relationships/relationship-payloads', ['expor
8295
8436
  id: id,
8296
8437
  type: modelName
8297
8438
  }
8439
+ };
8298
8440
 
8299
- // start flushing this individual payload. The logic is the same whether
8300
- // it's for the left hand side of the relationship or the right hand side,
8301
- // except the role of primary and inverse idToPayloads is reversed
8302
- //
8303
- };var previousPayload = void 0;
8304
- var idToPayloads = void 0;
8305
- var inverseIdToPayloads = void 0;
8441
+ // start flushing this individual payload. The logic is the same whether
8442
+ // it's for the left hand side of the relationship or the right hand side,
8443
+ // except the role of primary and inverse idToPayloads is reversed
8444
+ //
8445
+ var previousPayload = void 0;
8446
+ var payloadMap = void 0;
8447
+ var inversePayloadMap = void 0;
8306
8448
  var inverseIsMany = void 0;
8449
+
8307
8450
  if (this._isLHS(modelName, relationshipName)) {
8308
- previousPayload = this._lhsPayloads[id];
8309
- idToPayloads = this._lhsPayloads;
8310
- inverseIdToPayloads = this._rhsPayloads;
8451
+ previousPayload = this.lhs_payloads.get(modelName, id);
8452
+ payloadMap = this.lhs_payloads;
8453
+ inversePayloadMap = this.rhs_payloads;
8311
8454
  inverseIsMany = this._rhsRelationshipIsMany;
8312
8455
  } else {
8313
- (false && Ember.assert(modelName + ':' + relationshipName + ' is not either side of this relationship, ' + this._lhsModelName + ':' + this._lhsRelationshipName + '<->' + this._rhsModelName + ':' + this._rhsRelationshipName, this._isRHS(modelName, relationshipName)));
8456
+ (false && Ember.assert(modelName + ':' + relationshipName + ' is not either side of this relationship, ' + this._relInfo.lhs_key + '<->' + this._relInfo.rhs_key, this._isRHS(modelName, relationshipName)));
8314
8457
 
8315
- previousPayload = this._rhsPayloads[id];
8316
- idToPayloads = this._rhsPayloads;
8317
- inverseIdToPayloads = this._lhsPayloads;
8458
+ previousPayload = this.rhs_payloads.get(modelName, id);
8459
+ payloadMap = this.rhs_payloads;
8460
+ inversePayloadMap = this.lhs_payloads;
8318
8461
  inverseIsMany = this._lhsRelationshipIsMany;
8319
8462
  }
8320
8463
 
@@ -8358,14 +8501,14 @@ define('ember-data/-private/system/relationships/relationship-payloads', ['expor
8358
8501
  // * undefined is NOT considered new information, we should keep original state
8359
8502
  // * anything else is considered new information, and it should win
8360
8503
  if (relationshipData.data !== undefined) {
8361
- this._removeInverse(id, previousPayload, inverseIdToPayloads);
8504
+ this._removeInverse(id, previousPayload, inversePayloadMap);
8362
8505
  }
8363
- idToPayloads[id] = relationshipData;
8364
- this._populateInverse(relationshipData, inverseRelationshipData, inverseIdToPayloads, inverseIsMany);
8506
+ payloadMap.set(modelName, id, relationshipData);
8507
+ this._populateInverse(relationshipData, inverseRelationshipData, inversePayloadMap, inverseIsMany);
8365
8508
  }
8366
8509
  };
8367
8510
 
8368
- RelationshipPayloads.prototype._populateInverse = function _populateInverse(relationshipData, inversePayload, inverseIdToPayloads, inverseIsMany) {
8511
+ RelationshipPayloads.prototype._populateInverse = function _populateInverse(relationshipData, inversePayload, inversePayloadMap, inverseIsMany) {
8369
8512
  if (!relationshipData.data) {
8370
8513
  // This id doesn't have an inverse, eg a belongsTo with a payload
8371
8514
  // { data: null }, so there's nothing to populate
@@ -8374,22 +8517,24 @@ define('ember-data/-private/system/relationships/relationship-payloads', ['expor
8374
8517
 
8375
8518
  if (Array.isArray(relationshipData.data)) {
8376
8519
  for (var i = 0; i < relationshipData.data.length; ++i) {
8377
- var inverseId = relationshipData.data[i].id;
8378
- this._addToInverse(inversePayload, inverseId, inverseIdToPayloads, inverseIsMany);
8520
+ var resourceIdentifier = relationshipData.data[i];
8521
+ this._addToInverse(inversePayload, resourceIdentifier, inversePayloadMap, inverseIsMany);
8379
8522
  }
8380
8523
  } else {
8381
- var _inverseId = relationshipData.data.id;
8382
- this._addToInverse(inversePayload, _inverseId, inverseIdToPayloads, inverseIsMany);
8524
+ var _resourceIdentifier = relationshipData.data;
8525
+ this._addToInverse(inversePayload, _resourceIdentifier, inversePayloadMap, inverseIsMany);
8383
8526
  }
8384
8527
  };
8385
8528
 
8386
- RelationshipPayloads.prototype._addToInverse = function _addToInverse(inversePayload, inverseId, inverseIdToPayloads, inverseIsMany) {
8387
- if (this._isReflexive && inversePayload.data.id === inverseId) {
8529
+ RelationshipPayloads.prototype._addToInverse = function _addToInverse(inversePayload, resourceIdentifier, inversePayloadMap, inverseIsMany) {
8530
+ var relInfo = this._relInfo;
8531
+
8532
+ if (relInfo.isReflexive && inversePayload.data.id === resourceIdentifier.id) {
8388
8533
  // eg <user:1>.friends = [{ id: 1, type: 'user' }]
8389
8534
  return;
8390
8535
  }
8391
8536
 
8392
- var existingPayload = inverseIdToPayloads[inverseId];
8537
+ var existingPayload = inversePayloadMap.get(resourceIdentifier.type, resourceIdentifier.id);
8393
8538
  var existingData = existingPayload && existingPayload.data;
8394
8539
 
8395
8540
  if (existingData) {
@@ -8399,22 +8544,22 @@ define('ember-data/-private/system/relationships/relationship-payloads', ['expor
8399
8544
  if (Array.isArray(existingData)) {
8400
8545
  existingData.push(inversePayload.data);
8401
8546
  } else {
8402
- inverseIdToPayloads[inverseId] = inversePayload;
8547
+ inversePayloadMap.set(resourceIdentifier.type, resourceIdentifier.id, inversePayload);
8403
8548
  }
8404
8549
  } else {
8405
8550
  // first time we're populating the inverse side
8406
8551
  //
8407
8552
  if (inverseIsMany) {
8408
- inverseIdToPayloads[inverseId] = {
8553
+ inversePayloadMap.set(resourceIdentifier.type, resourceIdentifier.id, {
8409
8554
  data: [inversePayload.data]
8410
- };
8555
+ });
8411
8556
  } else {
8412
- inverseIdToPayloads[inverseId] = inversePayload;
8557
+ inversePayloadMap.set(resourceIdentifier.type, resourceIdentifier.id, inversePayload);
8413
8558
  }
8414
8559
  }
8415
8560
  };
8416
8561
 
8417
- RelationshipPayloads.prototype._removeInverse = function _removeInverse(id, previousPayload, inverseIdToPayloads) {
8562
+ RelationshipPayloads.prototype._removeInverse = function _removeInverse(id, previousPayload, inversePayloadMap) {
8418
8563
  var data = previousPayload && previousPayload.data;
8419
8564
  if (!data) {
8420
8565
  // either this is the first time we've seen a payload for this id, or its
@@ -8429,15 +8574,16 @@ define('ember-data/-private/system/relationships/relationship-payloads', ['expor
8429
8574
  if (Array.isArray(data)) {
8430
8575
  // TODO: diff rather than removeall addall?
8431
8576
  for (var i = 0; i < data.length; ++i) {
8432
- this._removeFromInverse(id, data[i].id, inverseIdToPayloads);
8577
+ var resourceIdentifier = data[i];
8578
+ this._removeFromInverse(id, resourceIdentifier, inversePayloadMap);
8433
8579
  }
8434
8580
  } else {
8435
- this._removeFromInverse(id, data.id, inverseIdToPayloads);
8581
+ this._removeFromInverse(id, data, inversePayloadMap);
8436
8582
  }
8437
8583
  };
8438
8584
 
8439
- RelationshipPayloads.prototype._removeFromInverse = function _removeFromInverse(id, inverseId, inversePayloads) {
8440
- var inversePayload = inversePayloads[inverseId];
8585
+ RelationshipPayloads.prototype._removeFromInverse = function _removeFromInverse(id, resourceIdentifier, inversePayloads) {
8586
+ var inversePayload = inversePayloads.get(resourceIdentifier.type, resourceIdentifier.id);
8441
8587
  var data = inversePayload && inversePayload.data;
8442
8588
 
8443
8589
  if (!data) {
@@ -8449,21 +8595,23 @@ define('ember-data/-private/system/relationships/relationship-payloads', ['expor
8449
8595
  return x.id !== id;
8450
8596
  });
8451
8597
  } else {
8452
- inversePayloads[inverseId] = {
8598
+ inversePayloads.set(resourceIdentifier.type, resourceIdentifier.id, {
8453
8599
  data: null
8454
- };
8600
+ });
8455
8601
  }
8456
8602
  };
8457
8603
 
8458
8604
  _createClass(RelationshipPayloads, [{
8459
8605
  key: '_lhsRelationshipIsMany',
8460
8606
  get: function () {
8461
- return this._lhsRelationshipMeta && this._lhsRelationshipMeta.kind === 'hasMany';
8607
+ var meta = this._relInfo.lhs_relationshipMeta;
8608
+ return meta !== null && meta.kind === 'hasMany';
8462
8609
  }
8463
8610
  }, {
8464
8611
  key: '_rhsRelationshipIsMany',
8465
8612
  get: function () {
8466
- return this._rhsRelationshipMeta && this._rhsRelationshipMeta.kind === 'hasMany';
8613
+ var meta = this._relInfo.rhs_relationshipMeta;
8614
+ return meta !== null && meta.kind === 'hasMany';
8467
8615
  }
8468
8616
  }]);
8469
8617
 
@@ -18402,7 +18550,7 @@ define("ember-data/version", ["exports"], function (exports) {
18402
18550
  "use strict";
18403
18551
 
18404
18552
  exports.__esModule = true;
18405
- exports.default = "2.18.1";
18553
+ exports.default = "2.18.2";
18406
18554
  });
18407
18555
  define("ember-inflector", ["module", "exports", "ember-inflector/lib/system", "ember-inflector/lib/ext/string"], function (module, exports, _system) {
18408
18556
  "use strict";