ember-data-source 2.18.1 → 2.18.2

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: 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";