ember-data-source 2.15.4 → 2.16.0.beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/dist/globals/ember-data.js +206 -540
- data/dist/globals/ember-data.min.js +6 -6
- data/dist/globals/ember-data.prod.js +205 -535
- data/package.json +7 -13
- metadata +6 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f9028ed814e25a03806793b8a55f5317fd6cf71f
|
4
|
+
data.tar.gz: 628ba272f2c7cf6a5a946d421c6ca3765b9f820a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c0b7eadc0bcbca0a335358c177b3f4cf0cf05a4d656ae7a63cdf338fd65204cc9d265c70ff648c2f6fe330328c9f034093f245b2981e659b104525fccecd6aa5
|
7
|
+
data.tar.gz: 2a4395a7905d496f1dbcd84e7262ceb06915b53cb405bac77fbfae4b98b826a4da82d643a2e45b33bd6cb89fc6af9b114138bfb9ecf5d3eae2ae5b678ad89fca
|
data/dist/globals/ember-data.js
CHANGED
@@ -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.
|
9
|
+
* @version 2.16.0-beta.1
|
10
10
|
*/
|
11
11
|
|
12
12
|
var loader, define, requireModule, require, requirejs;
|
@@ -14,6 +14,8 @@ var loader, define, requireModule, require, requirejs;
|
|
14
14
|
(function (global) {
|
15
15
|
'use strict';
|
16
16
|
|
17
|
+
var heimdall = global.heimdall;
|
18
|
+
|
17
19
|
function dict() {
|
18
20
|
var obj = Object.create(null);
|
19
21
|
obj['__'] = undefined;
|
@@ -55,9 +57,7 @@ var loader, define, requireModule, require, requirejs;
|
|
55
57
|
}
|
56
58
|
}
|
57
59
|
}
|
58
|
-
}
|
59
|
-
// Option to enable or disable the generation of default exports
|
60
|
-
makeDefaultExport: true
|
60
|
+
}
|
61
61
|
};
|
62
62
|
|
63
63
|
var registry = dict();
|
@@ -107,7 +107,6 @@ var loader, define, requireModule, require, requirejs;
|
|
107
107
|
return this.module.exports;
|
108
108
|
}
|
109
109
|
|
110
|
-
|
111
110
|
if (loader.wrapModules) {
|
112
111
|
this.callback = loader.wrapModules(this.id, this.callback);
|
113
112
|
}
|
@@ -121,9 +120,7 @@ var loader, define, requireModule, require, requirejs;
|
|
121
120
|
if (!(this.hasExportsAsDep && result === undefined)) {
|
122
121
|
this.module.exports = result;
|
123
122
|
}
|
124
|
-
|
125
|
-
this.makeDefaultExport();
|
126
|
-
}
|
123
|
+
this.makeDefaultExport();
|
127
124
|
return this.module.exports;
|
128
125
|
};
|
129
126
|
|
@@ -281,7 +278,6 @@ var loader, define, requireModule, require, requirejs;
|
|
281
278
|
return child;
|
282
279
|
}
|
283
280
|
|
284
|
-
|
285
281
|
var parts = child.split('/');
|
286
282
|
var nameParts = id.split('/');
|
287
283
|
var parentBase = nameParts.slice(0, -1);
|
@@ -403,7 +399,7 @@ define('ember-data/-debug', ['exports', 'ember'], function (exports, _ember) {
|
|
403
399
|
|
404
400
|
exports.assertPolymorphicType = assertPolymorphicType;
|
405
401
|
});
|
406
|
-
define('ember-data/-private/adapters/build-url-mixin', ['exports', 'ember'], function (exports, _ember) {
|
402
|
+
define('ember-data/-private/adapters/build-url-mixin', ['exports', 'ember', 'ember-inflector'], function (exports, _ember, _emberInflector) {
|
407
403
|
'use strict';
|
408
404
|
|
409
405
|
exports.__esModule = true;
|
@@ -803,10 +799,11 @@ define('ember-data/-private/adapters/build-url-mixin', ['exports', 'ember'], fun
|
|
803
799
|
endpoint of "/line_items/".
|
804
800
|
```app/adapters/application.js
|
805
801
|
import DS from 'ember-data';
|
802
|
+
import { pluralize } from 'ember-inflector';
|
806
803
|
export default DS.RESTAdapter.extend({
|
807
804
|
pathForType: function(modelName) {
|
808
805
|
var decamelized = Ember.String.decamelize(modelName);
|
809
|
-
return
|
806
|
+
return pluralize(decamelized);
|
810
807
|
}
|
811
808
|
});
|
812
809
|
```
|
@@ -816,7 +813,7 @@ define('ember-data/-private/adapters/build-url-mixin', ['exports', 'ember'], fun
|
|
816
813
|
**/
|
817
814
|
pathForType: function (modelName) {
|
818
815
|
var camelized = _ember.default.String.camelize(modelName);
|
819
|
-
return
|
816
|
+
return (0, _emberInflector.pluralize)(camelized);
|
820
817
|
}
|
821
818
|
});
|
822
819
|
});
|
@@ -1865,7 +1862,7 @@ define('ember-data/-private/system/identity-map', ['exports', 'ember-data/-priva
|
|
1865
1862
|
IdentityMap.prototype.retrieve = function retrieve(modelName) {
|
1866
1863
|
var map = this._map[modelName];
|
1867
1864
|
|
1868
|
-
if (
|
1865
|
+
if (map === undefined) {
|
1869
1866
|
map = this._map[modelName] = new _internalModelMap.default(modelName);
|
1870
1867
|
}
|
1871
1868
|
|
@@ -1927,13 +1924,14 @@ define('ember-data/-private/system/internal-model-map', ['exports', 'ember-data/
|
|
1927
1924
|
}
|
1928
1925
|
|
1929
1926
|
/**
|
1930
|
-
|
1927
|
+
*
|
1928
|
+
* @param id
|
1929
|
+
* @returns {InternalModel}
|
1931
1930
|
*/
|
1932
1931
|
|
1933
1932
|
|
1934
1933
|
InternalModelMap.prototype.get = function get(id) {
|
1935
|
-
|
1936
|
-
return r;
|
1934
|
+
return this._idToModel[id];
|
1937
1935
|
};
|
1938
1936
|
|
1939
1937
|
InternalModelMap.prototype.has = function has(id) {
|
@@ -1962,9 +1960,7 @@ define('ember-data/-private/system/internal-model-map', ['exports', 'ember-data/
|
|
1962
1960
|
};
|
1963
1961
|
|
1964
1962
|
InternalModelMap.prototype.remove = function remove(internalModel, id) {
|
1965
|
-
|
1966
|
-
delete this._idToModel[id];
|
1967
|
-
}
|
1963
|
+
delete this._idToModel[id];
|
1968
1964
|
|
1969
1965
|
var loc = this._models.indexOf(internalModel);
|
1970
1966
|
|
@@ -1978,35 +1974,18 @@ define('ember-data/-private/system/internal-model-map', ['exports', 'ember-data/
|
|
1978
1974
|
};
|
1979
1975
|
|
1980
1976
|
InternalModelMap.prototype.clear = function clear() {
|
1981
|
-
|
1982
|
-
|
1983
|
-
this._models = [];
|
1977
|
+
var models = this._models;
|
1978
|
+
this._models = [];
|
1984
1979
|
|
1985
|
-
|
1986
|
-
|
1987
|
-
|
1988
|
-
}
|
1980
|
+
for (var i = 0; i < models.length; i++) {
|
1981
|
+
var model = models[i];
|
1982
|
+
model.unloadRecord();
|
1989
1983
|
}
|
1990
1984
|
|
1991
1985
|
this._metadata = null;
|
1992
1986
|
};
|
1993
1987
|
|
1994
|
-
InternalModelMap.prototype.destroy = function destroy() {
|
1995
|
-
this._store = null;
|
1996
|
-
this._modelClass = null;
|
1997
|
-
};
|
1998
|
-
|
1999
1988
|
_createClass(InternalModelMap, [{
|
2000
|
-
key: 'idToRecord',
|
2001
|
-
get: function () {
|
2002
|
-
(false && !(false) && Ember.deprecate('Use of InternalModelMap.idToRecord is deprecated, use InternalModelMap.get(id) instead.', false, {
|
2003
|
-
id: 'ds.record-map.idToRecord',
|
2004
|
-
until: '2.13'
|
2005
|
-
}));
|
2006
|
-
|
2007
|
-
return this._idToModel;
|
2008
|
-
}
|
2009
|
-
}, {
|
2010
1989
|
key: 'length',
|
2011
1990
|
get: function () {
|
2012
1991
|
return this._models.length;
|
@@ -2305,94 +2284,11 @@ define('ember-data/-private/system/model/errors', ['exports', 'ember'], function
|
|
2305
2284
|
'use strict';
|
2306
2285
|
|
2307
2286
|
exports.__esModule = true;
|
2308
|
-
|
2309
|
-
|
2310
|
-
|
2311
|
-
|
2312
|
-
|
2313
|
-
var makeArray = _ember.default.makeArray;
|
2314
|
-
|
2315
|
-
var MapWithDefault = _ember.default.MapWithDefault;
|
2316
|
-
|
2317
|
-
/**
|
2318
|
-
@module ember-data
|
2319
|
-
*/
|
2320
|
-
|
2321
|
-
/**
|
2322
|
-
Holds validation errors for a given record, organized by attribute names.
|
2323
|
-
|
2324
|
-
Every `DS.Model` has an `errors` property that is an instance of
|
2325
|
-
`DS.Errors`. This can be used to display validation error
|
2326
|
-
messages returned from the server when a `record.save()` rejects.
|
2327
|
-
|
2328
|
-
For Example, if you had a `User` model that looked like this:
|
2329
|
-
|
2330
|
-
```app/models/user.js
|
2331
|
-
import DS from 'ember-data';
|
2332
|
-
|
2333
|
-
export default DS.Model.extend({
|
2334
|
-
username: DS.attr('string'),
|
2335
|
-
email: DS.attr('string')
|
2336
|
-
});
|
2337
|
-
```
|
2338
|
-
And you attempted to save a record that did not validate on the backend:
|
2339
|
-
|
2340
|
-
```javascript
|
2341
|
-
let user = store.createRecord('user', {
|
2342
|
-
username: 'tomster',
|
2343
|
-
email: 'invalidEmail'
|
2344
|
-
});
|
2345
|
-
user.save();
|
2346
|
-
```
|
2347
|
-
|
2348
|
-
Your backend would be expected to return an error response that described
|
2349
|
-
the problem, so that error messages can be generated on the app.
|
2350
|
-
|
2351
|
-
API responses will be translated into instances of `DS.Errors` differently,
|
2352
|
-
depending on the specific combination of adapter and serializer used. You
|
2353
|
-
may want to check the documentation or the source code of the libraries
|
2354
|
-
that you are using, to know how they expect errors to be communicated.
|
2355
|
-
|
2356
|
-
Errors can be displayed to the user by accessing their property name
|
2357
|
-
to get an array of all the error objects for that property. Each
|
2358
|
-
error object is a JavaScript object with two keys:
|
2359
|
-
|
2360
|
-
- `message` A string containing the error message from the backend
|
2361
|
-
- `attribute` The name of the property associated with this error message
|
2362
|
-
|
2363
|
-
```handlebars
|
2364
|
-
<label>Username: {{input value=username}} </label>
|
2365
|
-
{{#each model.errors.username as |error|}}
|
2366
|
-
<div class="error">
|
2367
|
-
{{error.message}}
|
2368
|
-
</div>
|
2369
|
-
{{/each}}
|
2370
|
-
|
2371
|
-
<label>Email: {{input value=email}} </label>
|
2372
|
-
{{#each model.errors.email as |error|}}
|
2373
|
-
<div class="error">
|
2374
|
-
{{error.message}}
|
2375
|
-
</div>
|
2376
|
-
{{/each}}
|
2377
|
-
```
|
2378
|
-
|
2379
|
-
You can also access the special `messages` property on the error
|
2380
|
-
object to get an array of all the error strings.
|
2381
|
-
|
2382
|
-
```handlebars
|
2383
|
-
{{#each model.errors.messages as |message|}}
|
2384
|
-
<div class="error">
|
2385
|
-
{{message}}
|
2386
|
-
</div>
|
2387
|
-
{{/each}}
|
2388
|
-
```
|
2389
|
-
|
2390
|
-
@class Errors
|
2391
|
-
@namespace DS
|
2392
|
-
@extends Ember.Object
|
2393
|
-
@uses Ember.Enumerable
|
2394
|
-
@uses Ember.Evented
|
2395
|
-
*/
|
2287
|
+
var get = _ember.default.get,
|
2288
|
+
set = _ember.default.set,
|
2289
|
+
isEmpty = _ember.default.isEmpty,
|
2290
|
+
makeArray = _ember.default.makeArray,
|
2291
|
+
MapWithDefault = _ember.default.MapWithDefault;
|
2396
2292
|
exports.default = _ember.default.ArrayProxy.extend(_ember.default.Evented, {
|
2397
2293
|
/**
|
2398
2294
|
Register with target handler
|
@@ -3066,7 +2962,11 @@ define('ember-data/-private/system/model/internal-model', ['exports', 'ember', '
|
|
3066
2962
|
this.dematerializeRecord();
|
3067
2963
|
|
3068
2964
|
if (this._scheduledDestroy === null) {
|
3069
|
-
|
2965
|
+
// TODO: use run.schedule once we drop 1.13
|
2966
|
+
if (!_ember.default.run.currentRunLoop) {
|
2967
|
+
(false && _ember.default.assert('You have turned on testing mode, which disabled the run-loop\'s autorun.\n You will need to wrap any code with asynchronous side-effects in a run', _ember.default.testing));
|
2968
|
+
}
|
2969
|
+
this._scheduledDestroy = _ember.default.run.backburner.schedule('destroy', this, '_checkForOrphanedInternalModels');
|
3070
2970
|
}
|
3071
2971
|
};
|
3072
2972
|
|
@@ -4502,7 +4402,7 @@ define('ember-data/-private/system/model/model', ['exports', 'ember', 'ember-dat
|
|
4502
4402
|
} else {
|
4503
4403
|
//No inverse was specified manually, we need to use a heuristic to guess one
|
4504
4404
|
if (propertyMeta.parentType && propertyMeta.type === propertyMeta.parentType.modelName) {
|
4505
|
-
(false && _ember.default.warn('Detected a reflexive relationship by the name of \'' + name + '\' without an inverse option. Look at
|
4405
|
+
(false && _ember.default.warn('Detected a reflexive relationship by the name of \'' + name + '\' without an inverse option. Look at https://emberjs.com/guides/models/defining-models/#toc_reflexive-relation for how to explicitly specify inverses.', false, {
|
4506
4406
|
id: 'ds.model.reflexive-relationship-without-inverse'
|
4507
4407
|
}));
|
4508
4408
|
}
|
@@ -4518,14 +4418,14 @@ define('ember-data/-private/system/model/model', ['exports', 'ember', 'ember-dat
|
|
4518
4418
|
return name === optionsForRelationship.inverse;
|
4519
4419
|
});
|
4520
4420
|
|
4521
|
-
(false && _ember.default.assert("You defined the '" + name + "' relationship on " + this + ", but you defined the inverse relationships of type " + inverseType.toString() + " multiple times. Look at
|
4421
|
+
(false && _ember.default.assert("You defined the '" + name + "' relationship on " + this + ", but you defined the inverse relationships of type " + inverseType.toString() + " multiple times. Look at https://emberjs.com/guides/models/defining-models/#toc_explicit-inverses for how to explicitly specify inverses", filteredRelationships.length < 2));
|
4522
4422
|
|
4523
4423
|
|
4524
4424
|
if (filteredRelationships.length === 1) {
|
4525
4425
|
possibleRelationships = filteredRelationships;
|
4526
4426
|
}
|
4527
4427
|
|
4528
|
-
(false && _ember.default.assert("You defined the '" + name + "' relationship on " + this + ", but multiple possible inverse relationships of type " + this + " were found on " + inverseType + ". Look at
|
4428
|
+
(false && _ember.default.assert("You defined the '" + name + "' relationship on " + this + ", but multiple possible inverse relationships of type " + this + " were found on " + inverseType + ". Look at https://emberjs.com/guides/models/defining-models/#toc_explicit-inverses for how to explicitly specify inverses", possibleRelationships.length === 1));
|
4529
4429
|
|
4530
4430
|
|
4531
4431
|
inverseName = possibleRelationships[0].name;
|
@@ -4902,10 +4802,6 @@ define('ember-data/-private/system/model/model', ['exports', 'ember', 'ember-dat
|
|
4902
4802
|
// the computed property.
|
4903
4803
|
var meta = value.meta();
|
4904
4804
|
|
4905
|
-
/*
|
4906
|
-
This is buggy because if the parent has never been looked up
|
4907
|
-
via `modelFor` it will not have `modelName` set.
|
4908
|
-
*/
|
4909
4805
|
meta.parentType = proto.constructor;
|
4910
4806
|
}
|
4911
4807
|
}
|
@@ -6180,7 +6076,7 @@ define("ember-data/-private/system/record-array-manager", ["exports", "ember", "
|
|
6180
6076
|
|
6181
6077
|
RecordArrayManager.prototype.destroy = function destroy() {
|
6182
6078
|
this.isDestroying = true;
|
6183
|
-
|
6079
|
+
emberRun.schedule('actions', this, this.willDestroy);
|
6184
6080
|
};
|
6185
6081
|
|
6186
6082
|
return RecordArrayManager;
|
@@ -6985,6 +6881,7 @@ define('ember-data/-private/system/references/belongs-to', ['exports', 'ember-da
|
|
6985
6881
|
userRef.load().then(function(user) {
|
6986
6882
|
userRef.value() === user
|
6987
6883
|
});
|
6884
|
+
```
|
6988
6885
|
|
6989
6886
|
@method load
|
6990
6887
|
@return {Promise} a promise that resolves with the record in this belongs-to relationship.
|
@@ -7033,6 +6930,7 @@ define('ember-data/-private/system/references/belongs-to', ['exports', 'ember-da
|
|
7033
6930
|
userRef.reload().then(function(user) {
|
7034
6931
|
userRef.value() === user
|
7035
6932
|
});
|
6933
|
+
```
|
7036
6934
|
|
7037
6935
|
@method reload
|
7038
6936
|
@return {Promise} a promise that resolves with the record in this belongs-to relationship after the reload has completed.
|
@@ -7360,7 +7258,7 @@ define('ember-data/-private/system/references/has-many', ['exports', 'ember', 'e
|
|
7360
7258
|
};
|
7361
7259
|
|
7362
7260
|
/**
|
7363
|
-
`value()`
|
7261
|
+
`value()` synchronously returns the current value of the has-many
|
7364
7262
|
relationship. Unlike `record.get('relationshipName')`, calling
|
7365
7263
|
`value()` on a reference does not trigger a fetch if the async
|
7366
7264
|
relationship is not yet loaded. If the relationship is not loaded
|
@@ -7693,7 +7591,7 @@ define('ember-data/-private/system/relationship-meta', ['exports', 'ember-inflec
|
|
7693
7591
|
}
|
7694
7592
|
|
7695
7593
|
function relationshipFromMeta(meta) {
|
7696
|
-
|
7594
|
+
var result = {
|
7697
7595
|
key: meta.key,
|
7698
7596
|
kind: meta.kind,
|
7699
7597
|
type: typeForRelationshipMeta(meta),
|
@@ -7702,6 +7600,12 @@ define('ember-data/-private/system/relationship-meta', ['exports', 'ember-inflec
|
|
7702
7600
|
parentType: meta.parentType,
|
7703
7601
|
isRelationship: true
|
7704
7602
|
};
|
7603
|
+
|
7604
|
+
if (false) {
|
7605
|
+
result.parentType = meta.parentType;
|
7606
|
+
}
|
7607
|
+
|
7608
|
+
return result;
|
7705
7609
|
}
|
7706
7610
|
});
|
7707
7611
|
define('ember-data/-private/system/relationships/belongs-to', ['exports', 'ember', 'ember-data/-private/system/normalize-model-name'], function (exports, _ember, _normalizeModelName) {
|
@@ -7815,13 +7719,13 @@ define('ember-data/-private/system/relationships/belongs-to', ['exports', 'ember
|
|
7815
7719
|
return _ember.default.computed({
|
7816
7720
|
get: function (key) {
|
7817
7721
|
if (opts.hasOwnProperty('serialize')) {
|
7818
|
-
(false && _ember.default.warn('You provided a serialize option on the "' + key + '" property in the "' + this._internalModel.modelName + '" class, this belongs in the serializer. See DS.Serializer and it\'s implementations
|
7722
|
+
(false && _ember.default.warn('You provided a serialize option on the "' + key + '" property in the "' + this._internalModel.modelName + '" class, this belongs in the serializer. See DS.Serializer and it\'s implementations https://emberjs.com/api/data/classes/DS.Serializer.html', false, {
|
7819
7723
|
id: 'ds.model.serialize-option-in-belongs-to'
|
7820
7724
|
}));
|
7821
7725
|
}
|
7822
7726
|
|
7823
7727
|
if (opts.hasOwnProperty('embedded')) {
|
7824
|
-
(false && _ember.default.warn('You provided an embedded option on the "' + key + '" property in the "' + this._internalModel.modelName + '" class, this belongs in the serializer. See DS.EmbeddedRecordsMixin
|
7728
|
+
(false && _ember.default.warn('You provided an embedded option on the "' + key + '" property in the "' + this._internalModel.modelName + '" class, this belongs in the serializer. See DS.EmbeddedRecordsMixin https://emberjs.com/api/data/classes/DS.EmbeddedRecordsMixin.html', false, {
|
7825
7729
|
id: 'ds.model.embedded-option-in-belongs-to'
|
7826
7730
|
}));
|
7827
7731
|
}
|
@@ -8107,8 +8011,7 @@ define('ember-data/-private/system/relationships/relationship-payloads-manager',
|
|
8107
8011
|
}
|
8108
8012
|
}
|
8109
8013
|
|
8110
|
-
var
|
8111
|
-
var assert = _ember.default.assert;
|
8014
|
+
var _get = _ember.default.get;
|
8112
8015
|
|
8113
8016
|
/**
|
8114
8017
|
Manages relationship payloads for a given store, for uninitialized
|
@@ -8171,7 +8074,6 @@ define('ember-data/-private/system/relationships/relationship-payloads-manager',
|
|
8171
8074
|
this._store = store;
|
8172
8075
|
// cache of `RelationshipPayload`s
|
8173
8076
|
this._cache = Object.create(null);
|
8174
|
-
this._inverseLookupCache = new _relationshipPayloads.TypeCache();
|
8175
8077
|
}
|
8176
8078
|
|
8177
8079
|
/**
|
@@ -8192,7 +8094,9 @@ define('ember-data/-private/system/relationships/relationship-payloads-manager',
|
|
8192
8094
|
|
8193
8095
|
|
8194
8096
|
RelationshipPayloadsManager.prototype.get = function get(modelName, id, relationshipName) {
|
8195
|
-
var
|
8097
|
+
var modelClass = this._store._modelFor(modelName);
|
8098
|
+
var relationshipsByName = _get(modelClass, 'relationshipsByName');
|
8099
|
+
var relationshipPayloads = this._getRelationshipPayloads(modelName, relationshipName, modelClass, relationshipsByName, false);
|
8196
8100
|
return relationshipPayloads && relationshipPayloads.get(modelName, id, relationshipName);
|
8197
8101
|
};
|
8198
8102
|
|
@@ -8203,8 +8107,10 @@ define('ember-data/-private/system/relationships/relationship-payloads-manager',
|
|
8203
8107
|
return;
|
8204
8108
|
}
|
8205
8109
|
|
8110
|
+
var modelClass = this._store._modelFor(modelName);
|
8111
|
+
var relationshipsByName = _get(modelClass, 'relationshipsByName');
|
8206
8112
|
Object.keys(relationshipsData).forEach(function (key) {
|
8207
|
-
var relationshipPayloads = _this._getRelationshipPayloads(modelName, key, true);
|
8113
|
+
var relationshipPayloads = _this._getRelationshipPayloads(modelName, key, modelClass, relationshipsByName, true);
|
8208
8114
|
if (relationshipPayloads) {
|
8209
8115
|
relationshipPayloads.push(modelName, id, key, relationshipsData[key]);
|
8210
8116
|
}
|
@@ -8215,153 +8121,51 @@ define('ember-data/-private/system/relationships/relationship-payloads-manager',
|
|
8215
8121
|
var _this2 = this;
|
8216
8122
|
|
8217
8123
|
var modelClass = this._store._modelFor(modelName);
|
8218
|
-
var relationshipsByName =
|
8124
|
+
var relationshipsByName = _get(modelClass, 'relationshipsByName');
|
8219
8125
|
relationshipsByName.forEach(function (_, relationshipName) {
|
8220
|
-
var relationshipPayloads = _this2._getRelationshipPayloads(modelName, relationshipName, false);
|
8126
|
+
var relationshipPayloads = _this2._getRelationshipPayloads(modelName, relationshipName, modelClass, relationshipsByName, false);
|
8221
8127
|
if (relationshipPayloads) {
|
8222
8128
|
relationshipPayloads.unload(modelName, id, relationshipName);
|
8223
8129
|
}
|
8224
8130
|
});
|
8225
8131
|
};
|
8226
8132
|
|
8227
|
-
RelationshipPayloadsManager.prototype._getRelationshipPayloads = function _getRelationshipPayloads(modelName, relationshipName, init) {
|
8228
|
-
|
8229
|
-
|
8230
|
-
if (relInfo === null) {
|
8133
|
+
RelationshipPayloadsManager.prototype._getRelationshipPayloads = function _getRelationshipPayloads(modelName, relationshipName, modelClass, relationshipsByName, init) {
|
8134
|
+
if (!relationshipsByName.has(relationshipName)) {
|
8231
8135
|
return;
|
8232
8136
|
}
|
8233
8137
|
|
8234
|
-
var
|
8235
|
-
|
8236
|
-
|
8237
|
-
return this._initializeRelationshipPayloads(relInfo);
|
8138
|
+
var key = modelName + ':' + relationshipName;
|
8139
|
+
if (!this._cache[key] && init) {
|
8140
|
+
return this._initializeRelationshipPayloads(modelName, relationshipName, modelClass, relationshipsByName);
|
8238
8141
|
}
|
8239
8142
|
|
8240
|
-
return
|
8143
|
+
return this._cache[key];
|
8241
8144
|
};
|
8242
8145
|
|
8243
|
-
RelationshipPayloadsManager.prototype.
|
8244
|
-
var inverseCache = this._inverseLookupCache;
|
8245
|
-
var store = this._store;
|
8246
|
-
var cached = inverseCache.get(modelName, relationshipName);
|
8247
|
-
|
8248
|
-
// CASE: We have a cached resolution (null if no relationship exists)
|
8249
|
-
if (cached !== undefined) {
|
8250
|
-
return cached;
|
8251
|
-
}
|
8252
|
-
|
8253
|
-
var modelClass = store._modelFor(modelName);
|
8254
|
-
var relationshipsByName = get(modelClass, 'relationshipsByName');
|
8255
|
-
|
8256
|
-
// CASE: We don't have a relationship at all
|
8257
|
-
if (!relationshipsByName.has(relationshipName)) {
|
8258
|
-
inverseCache.set(modelName, relationshipName, null);
|
8259
|
-
return null;
|
8260
|
-
}
|
8261
|
-
|
8262
|
-
var inverseMeta = modelClass.inverseFor(relationshipName, store);
|
8146
|
+
RelationshipPayloadsManager.prototype._initializeRelationshipPayloads = function _initializeRelationshipPayloads(modelName, relationshipName, modelClass, relationshipsByName) {
|
8263
8147
|
var relationshipMeta = relationshipsByName.get(relationshipName);
|
8264
|
-
var
|
8265
|
-
|
8266
|
-
|
8267
|
-
|
8268
|
-
|
8269
|
-
|
8270
|
-
|
8271
|
-
|
8272
|
-
|
8273
|
-
|
8274
|
-
|
8275
|
-
|
8276
|
-
|
8277
|
-
|
8278
|
-
|
8279
|
-
|
8280
|
-
|
8281
|
-
rhs_isPolymorphic: false,
|
8282
|
-
hasInverse: false,
|
8283
|
-
isSelfReferential: false, // modelName === inverseBaseModelName,
|
8284
|
-
isReflexive: false
|
8285
|
-
};
|
8286
|
-
|
8287
|
-
inverseCache.set(modelName, relationshipName, _info);
|
8288
|
-
|
8289
|
-
return _info;
|
8290
|
-
}
|
8291
|
-
|
8292
|
-
// CASE: We do have an inverse
|
8293
|
-
|
8294
|
-
var inverseRelationshipName = inverseMeta.name;
|
8295
|
-
var inverseRelationshipMeta = get(inverseMeta.type, 'relationshipsByName').get(inverseRelationshipName);
|
8296
|
-
var baseModelName = inverseRelationshipMeta.type;
|
8297
|
-
var isSelfReferential = baseModelName === inverseBaseModelName;
|
8298
|
-
|
8299
|
-
// TODO we want to assert this but this breaks all of our shoddily written tests
|
8300
|
-
/*
|
8301
|
-
if (DEBUG) {
|
8302
|
-
let inverseDoubleCheck = inverseMeta.type.inverseFor(inverseRelationshipName, store);
|
8303
|
-
assert(`The ${inverseBaseModelName}:${inverseRelationshipName} relationship declares 'inverse: null', but it was resolved as the inverse for ${baseModelName}:${relationshipName}.`, inverseDoubleCheck);
|
8148
|
+
var inverseMeta = modelClass.inverseFor(relationshipName, this._store);
|
8149
|
+
|
8150
|
+
var inverseModelName = void 0;
|
8151
|
+
var inverseRelationshipName = void 0;
|
8152
|
+
var inverseRelationshipMeta = void 0;
|
8153
|
+
|
8154
|
+
// figure out the inverse relationship; we need two things
|
8155
|
+
// a) the inverse model name
|
8156
|
+
//- b) the name of the inverse relationship
|
8157
|
+
if (inverseMeta) {
|
8158
|
+
inverseRelationshipName = inverseMeta.name;
|
8159
|
+
inverseModelName = relationshipMeta.type;
|
8160
|
+
inverseRelationshipMeta = _get(inverseMeta.type, 'relationshipsByName').get(inverseRelationshipName);
|
8161
|
+
} else {
|
8162
|
+
// relationship has no inverse
|
8163
|
+
inverseModelName = inverseRelationshipName = '';
|
8164
|
+
inverseRelationshipMeta = null;
|
8304
8165
|
}
|
8305
|
-
*/
|
8306
8166
|
|
8307
|
-
|
8308
|
-
|
8309
|
-
cached = inverseCache.get(baseModelName, relationshipName) || inverseCache.get(inverseBaseModelName, inverseRelationshipName);
|
8310
|
-
if (cached) {
|
8311
|
-
// TODO this assert can be removed if the above assert is enabled
|
8312
|
-
assert('The ' + inverseBaseModelName + ':' + inverseRelationshipName + ' relationship declares \'inverse: null\', but it was resolved as the inverse for ' + baseModelName + ':' + relationshipName + '.', cached.hasInverse !== false);
|
8313
|
-
|
8314
|
-
var isLHS = cached.lhs_baseModelName === baseModelName;
|
8315
|
-
var modelNames = isLHS ? cached.lhs_modelNames : cached.rhs_modelNames;
|
8316
|
-
// make this lookup easier in the future by caching the key
|
8317
|
-
modelNames.push(modelName);
|
8318
|
-
inverseCache.set(modelName, relationshipName, cached);
|
8319
|
-
|
8320
|
-
return cached;
|
8321
|
-
}
|
8322
|
-
|
8323
|
-
var info = {
|
8324
|
-
lhs_key: baseModelName + ':' + relationshipName,
|
8325
|
-
lhs_modelNames: [modelName],
|
8326
|
-
lhs_baseModelName: baseModelName,
|
8327
|
-
lhs_relationshipName: relationshipName,
|
8328
|
-
lhs_relationshipMeta: relationshipMeta,
|
8329
|
-
lhs_isPolymorphic: selfIsPolymorphic,
|
8330
|
-
rhs_key: inverseBaseModelName + ':' + inverseRelationshipName,
|
8331
|
-
rhs_modelNames: [],
|
8332
|
-
rhs_baseModelName: inverseBaseModelName,
|
8333
|
-
rhs_relationshipName: inverseRelationshipName,
|
8334
|
-
rhs_relationshipMeta: inverseRelationshipMeta,
|
8335
|
-
rhs_isPolymorphic: inverseRelationshipMeta.options !== undefined && inverseRelationshipMeta.options.polymorphic === true,
|
8336
|
-
hasInverse: true,
|
8337
|
-
isSelfReferential: isSelfReferential,
|
8338
|
-
isReflexive: isSelfReferential && relationshipName === inverseRelationshipName
|
8339
|
-
};
|
8340
|
-
|
8341
|
-
// Create entries for the baseModelName as well as modelName to speed up
|
8342
|
-
// inverse lookups
|
8343
|
-
inverseCache.set(baseModelName, relationshipName, info);
|
8344
|
-
inverseCache.set(modelName, relationshipName, info);
|
8345
|
-
|
8346
|
-
// Greedily populate the inverse
|
8347
|
-
inverseCache.set(inverseBaseModelName, inverseRelationshipName, info);
|
8348
|
-
|
8349
|
-
return info;
|
8350
|
-
};
|
8351
|
-
|
8352
|
-
RelationshipPayloadsManager.prototype._initializeRelationshipPayloads = function _initializeRelationshipPayloads(relInfo) {
|
8353
|
-
var lhsKey = relInfo.lhs_key;
|
8354
|
-
var rhsKey = relInfo.rhs_key;
|
8355
|
-
var existingPayloads = this._cache[lhsKey];
|
8356
|
-
|
8357
|
-
if (relInfo.hasInverse === true && relInfo.rhs_isPolymorphic === true) {
|
8358
|
-
existingPayloads = this._cache[rhsKey];
|
8359
|
-
|
8360
|
-
if (existingPayloads !== undefined) {
|
8361
|
-
this._cache[lhsKey] = existingPayloads;
|
8362
|
-
return existingPayloads;
|
8363
|
-
}
|
8364
|
-
}
|
8167
|
+
var lhsKey = modelName + ':' + relationshipName;
|
8168
|
+
var rhsKey = inverseModelName + ':' + inverseRelationshipName;
|
8365
8169
|
|
8366
8170
|
// populate the cache for both sides of the relationship, as they both use
|
8367
8171
|
// the same `RelationshipPayloads`.
|
@@ -8369,13 +8173,7 @@ define('ember-data/-private/system/relationships/relationship-payloads-manager',
|
|
8369
8173
|
// This works out better than creating a single common key, because to
|
8370
8174
|
// compute that key we would need to do work to look up the inverse
|
8371
8175
|
//
|
8372
|
-
|
8373
|
-
|
8374
|
-
if (relInfo.hasInverse === true) {
|
8375
|
-
this._cache[rhsKey] = cache;
|
8376
|
-
}
|
8377
|
-
|
8378
|
-
return cache;
|
8176
|
+
return this._cache[lhsKey] = this._cache[rhsKey] = new _relationshipPayloads.default(this._store, modelName, relationshipName, relationshipMeta, inverseModelName, inverseRelationshipName, inverseRelationshipMeta);
|
8379
8177
|
};
|
8380
8178
|
|
8381
8179
|
return RelationshipPayloadsManager;
|
@@ -8388,6 +8186,12 @@ define('ember-data/-private/system/relationships/relationship-payloads', ['expor
|
|
8388
8186
|
|
8389
8187
|
exports.__esModule = true;
|
8390
8188
|
|
8189
|
+
function _classCallCheck(instance, Constructor) {
|
8190
|
+
if (!(instance instanceof Constructor)) {
|
8191
|
+
throw new TypeError("Cannot call a class as a function");
|
8192
|
+
}
|
8193
|
+
}
|
8194
|
+
|
8391
8195
|
var _createClass = function () {
|
8392
8196
|
function defineProperties(target, props) {
|
8393
8197
|
for (var i = 0; i < props.length; i++) {
|
@@ -8406,61 +8210,37 @@ define('ember-data/-private/system/relationships/relationship-payloads', ['expor
|
|
8406
8210
|
};
|
8407
8211
|
}();
|
8408
8212
|
|
8409
|
-
function _classCallCheck(instance, Constructor) {
|
8410
|
-
if (!(instance instanceof Constructor)) {
|
8411
|
-
throw new TypeError("Cannot call a class as a function");
|
8412
|
-
}
|
8413
|
-
}
|
8414
|
-
|
8415
|
-
var TypeCache = exports.TypeCache = function () {
|
8416
|
-
function TypeCache() {
|
8417
|
-
_classCallCheck(this, TypeCache);
|
8418
|
-
|
8419
|
-
this.types = Object.create(null);
|
8420
|
-
}
|
8421
|
-
|
8422
|
-
TypeCache.prototype.get = function get(modelName, id) {
|
8423
|
-
var types = this.types;
|
8424
|
-
|
8425
|
-
|
8426
|
-
if (types[modelName] !== undefined) {
|
8427
|
-
return types[modelName][id];
|
8428
|
-
}
|
8429
|
-
};
|
8430
|
-
|
8431
|
-
TypeCache.prototype.set = function set(modelName, id, payload) {
|
8432
|
-
var types = this.types;
|
8433
|
-
|
8434
|
-
var typeMap = types[modelName];
|
8435
|
-
|
8436
|
-
if (typeMap === undefined) {
|
8437
|
-
typeMap = types[modelName] = Object.create(null);
|
8438
|
-
}
|
8439
|
-
|
8440
|
-
typeMap[id] = payload;
|
8441
|
-
};
|
8442
|
-
|
8443
|
-
TypeCache.prototype.delete = function _delete(modelName, id) {
|
8444
|
-
var types = this.types;
|
8445
|
-
|
8446
|
-
|
8447
|
-
if (types[modelName] !== undefined) {
|
8448
|
-
delete types[modelName][id];
|
8449
|
-
}
|
8450
|
-
};
|
8451
|
-
|
8452
|
-
return TypeCache;
|
8453
|
-
}();
|
8454
|
-
|
8455
8213
|
var RelationshipPayloads = function () {
|
8456
|
-
function RelationshipPayloads(
|
8214
|
+
function RelationshipPayloads(store, modelName, relationshipName, relationshipMeta, inverseModelName, inverseRelationshipName, inverseRelationshipMeta) {
|
8457
8215
|
_classCallCheck(this, RelationshipPayloads);
|
8458
8216
|
|
8459
|
-
this.
|
8217
|
+
this._store = store;
|
8218
|
+
|
8219
|
+
this._lhsModelName = modelName;
|
8220
|
+
this._lhsRelationshipName = relationshipName;
|
8221
|
+
this._lhsRelationshipMeta = relationshipMeta;
|
8222
|
+
|
8223
|
+
this._rhsModelName = inverseModelName;
|
8224
|
+
this._rhsRelationshipName = inverseRelationshipName;
|
8225
|
+
this._rhsRelationshipMeta = inverseRelationshipMeta;
|
8460
8226
|
|
8461
8227
|
// a map of id -> payloads for the left hand side of the relationship.
|
8462
|
-
this.
|
8463
|
-
|
8228
|
+
this._lhsPayloads = Object.create(null);
|
8229
|
+
if (modelName !== inverseModelName || relationshipName !== inverseRelationshipName) {
|
8230
|
+
// The common case of a non-reflexive relationship, or a reflexive
|
8231
|
+
// relationship whose inverse is not itself
|
8232
|
+
this._rhsPayloads = Object.create(null);
|
8233
|
+
this._isReflexive = false;
|
8234
|
+
} else {
|
8235
|
+
// Edge case when we have a reflexive relationship to itself
|
8236
|
+
// eg user hasMany friends inverse friends
|
8237
|
+
//
|
8238
|
+
// In this case there aren't really two sides to the relationship, but
|
8239
|
+
// we set `_rhsPayloads = _lhsPayloads` to make things easier to reason
|
8240
|
+
// about
|
8241
|
+
this._rhsPayloads = this._lhsPayloads;
|
8242
|
+
this._isReflexive = true;
|
8243
|
+
}
|
8464
8244
|
|
8465
8245
|
// When we push relationship payloads, just stash them in a queue until
|
8466
8246
|
// somebody actually asks for one of them.
|
@@ -8471,22 +8251,22 @@ define('ember-data/-private/system/relationships/relationship-payloads', ['expor
|
|
8471
8251
|
}
|
8472
8252
|
|
8473
8253
|
/**
|
8474
|
-
|
8475
|
-
|
8476
|
-
|
8477
|
-
|
8478
|
-
|
8254
|
+
Get the payload for the relationship of an individual record.
|
8255
|
+
This might return the raw payload as pushed into the store, or one computed
|
8256
|
+
from the payload of the inverse relationship.
|
8257
|
+
@method
|
8258
|
+
*/
|
8479
8259
|
|
8480
8260
|
|
8481
8261
|
RelationshipPayloads.prototype.get = function get(modelName, id, relationshipName) {
|
8482
8262
|
this._flushPending();
|
8483
8263
|
|
8484
8264
|
if (this._isLHS(modelName, relationshipName)) {
|
8485
|
-
return this.
|
8265
|
+
return this._lhsPayloads[id];
|
8486
8266
|
} else {
|
8487
|
-
(false && Ember.assert(modelName + ':' + relationshipName + ' is not either side of this relationship, ' + this.
|
8267
|
+
(false && Ember.assert(modelName + ':' + relationshipName + ' is not either side of this relationship, ' + this._lhsModelName + ':' + this._lhsRelationshipName + '<->' + this._rhsModelName + ':' + this._rhsRelationshipName, this._isRHS(modelName, relationshipName)));
|
8488
8268
|
|
8489
|
-
return this.
|
8269
|
+
return this._rhsPayloads[id];
|
8490
8270
|
}
|
8491
8271
|
};
|
8492
8272
|
|
@@ -8498,40 +8278,20 @@ define('ember-data/-private/system/relationships/relationship-payloads', ['expor
|
|
8498
8278
|
this._flushPending();
|
8499
8279
|
|
8500
8280
|
if (this._isLHS(modelName, relationshipName)) {
|
8501
|
-
delete this.
|
8281
|
+
delete this._lhsPayloads[id];
|
8502
8282
|
} else {
|
8503
|
-
(false && Ember.assert(modelName + ':' + relationshipName + ' is not either side of this relationship, ' + this.
|
8283
|
+
(false && Ember.assert(modelName + ':' + relationshipName + ' is not either side of this relationship, ' + this._lhsModelName + ':' + this._lhsRelationshipName + '<->' + this._rhsModelName + ':' + this._rhsRelationshipName, this._isRHS(modelName, relationshipName)));
|
8504
8284
|
|
8505
|
-
delete this.
|
8285
|
+
delete this._rhsPayloads[id];
|
8506
8286
|
}
|
8507
8287
|
};
|
8508
8288
|
|
8509
8289
|
RelationshipPayloads.prototype._isLHS = function _isLHS(modelName, relationshipName) {
|
8510
|
-
|
8511
|
-
var isSelfReferential = relInfo.isSelfReferential;
|
8512
|
-
var isRelationship = relationshipName === relInfo.lhs_relationshipName;
|
8513
|
-
|
8514
|
-
if (isRelationship === true) {
|
8515
|
-
return isSelfReferential === true || // itself
|
8516
|
-
modelName === relInfo.lhs_baseModelName || // base or non-polymorphic
|
8517
|
-
relInfo.lhs_modelNames.indexOf(modelName) !== -1; // polymorphic
|
8518
|
-
}
|
8519
|
-
|
8520
|
-
return false;
|
8290
|
+
return modelName === this._lhsModelName && relationshipName === this._lhsRelationshipName;
|
8521
8291
|
};
|
8522
8292
|
|
8523
8293
|
RelationshipPayloads.prototype._isRHS = function _isRHS(modelName, relationshipName) {
|
8524
|
-
|
8525
|
-
var isSelfReferential = relInfo.isSelfReferential;
|
8526
|
-
var isRelationship = relationshipName === relInfo.rhs_relationshipName;
|
8527
|
-
|
8528
|
-
if (isRelationship === true) {
|
8529
|
-
return isSelfReferential === true || // itself
|
8530
|
-
modelName === relInfo.rhs_baseModelName || // base or non-polymorphic
|
8531
|
-
relInfo.rhs_modelNames.indexOf(modelName) !== -1; // polymorphic
|
8532
|
-
}
|
8533
|
-
|
8534
|
-
return false;
|
8294
|
+
return modelName === this._rhsModelName && relationshipName === this._rhsRelationshipName;
|
8535
8295
|
};
|
8536
8296
|
|
8537
8297
|
RelationshipPayloads.prototype._flushPending = function _flushPending() {
|
@@ -8552,28 +8312,26 @@ define('ember-data/-private/system/relationships/relationship-payloads', ['expor
|
|
8552
8312
|
id: id,
|
8553
8313
|
type: modelName
|
8554
8314
|
}
|
8555
|
-
};
|
8556
8315
|
|
8557
|
-
|
8558
|
-
|
8559
|
-
|
8560
|
-
|
8561
|
-
var previousPayload = void 0;
|
8562
|
-
var
|
8563
|
-
var
|
8316
|
+
// start flushing this individual payload. The logic is the same whether
|
8317
|
+
// it's for the left hand side of the relationship or the right hand side,
|
8318
|
+
// except the role of primary and inverse idToPayloads is reversed
|
8319
|
+
//
|
8320
|
+
};var previousPayload = void 0;
|
8321
|
+
var idToPayloads = void 0;
|
8322
|
+
var inverseIdToPayloads = void 0;
|
8564
8323
|
var inverseIsMany = void 0;
|
8565
|
-
|
8566
8324
|
if (this._isLHS(modelName, relationshipName)) {
|
8567
|
-
previousPayload = this.
|
8568
|
-
|
8569
|
-
|
8325
|
+
previousPayload = this._lhsPayloads[id];
|
8326
|
+
idToPayloads = this._lhsPayloads;
|
8327
|
+
inverseIdToPayloads = this._rhsPayloads;
|
8570
8328
|
inverseIsMany = this._rhsRelationshipIsMany;
|
8571
8329
|
} else {
|
8572
|
-
(false && Ember.assert(modelName + ':' + relationshipName + ' is not either side of this relationship, ' + this.
|
8330
|
+
(false && Ember.assert(modelName + ':' + relationshipName + ' is not either side of this relationship, ' + this._lhsModelName + ':' + this._lhsRelationshipName + '<->' + this._rhsModelName + ':' + this._rhsRelationshipName, this._isRHS(modelName, relationshipName)));
|
8573
8331
|
|
8574
|
-
previousPayload = this.
|
8575
|
-
|
8576
|
-
|
8332
|
+
previousPayload = this._rhsPayloads[id];
|
8333
|
+
idToPayloads = this._rhsPayloads;
|
8334
|
+
inverseIdToPayloads = this._lhsPayloads;
|
8577
8335
|
inverseIsMany = this._lhsRelationshipIsMany;
|
8578
8336
|
}
|
8579
8337
|
|
@@ -8617,14 +8375,14 @@ define('ember-data/-private/system/relationships/relationship-payloads', ['expor
|
|
8617
8375
|
// * undefined is NOT considered new information, we should keep original state
|
8618
8376
|
// * anything else is considered new information, and it should win
|
8619
8377
|
if (relationshipData.data !== undefined) {
|
8620
|
-
this._removeInverse(id, previousPayload,
|
8378
|
+
this._removeInverse(id, previousPayload, inverseIdToPayloads);
|
8621
8379
|
}
|
8622
|
-
|
8623
|
-
this._populateInverse(relationshipData, inverseRelationshipData,
|
8380
|
+
idToPayloads[id] = relationshipData;
|
8381
|
+
this._populateInverse(relationshipData, inverseRelationshipData, inverseIdToPayloads, inverseIsMany);
|
8624
8382
|
}
|
8625
8383
|
};
|
8626
8384
|
|
8627
|
-
RelationshipPayloads.prototype._populateInverse = function _populateInverse(relationshipData, inversePayload,
|
8385
|
+
RelationshipPayloads.prototype._populateInverse = function _populateInverse(relationshipData, inversePayload, inverseIdToPayloads, inverseIsMany) {
|
8628
8386
|
if (!relationshipData.data) {
|
8629
8387
|
// This id doesn't have an inverse, eg a belongsTo with a payload
|
8630
8388
|
// { data: null }, so there's nothing to populate
|
@@ -8633,24 +8391,22 @@ define('ember-data/-private/system/relationships/relationship-payloads', ['expor
|
|
8633
8391
|
|
8634
8392
|
if (Array.isArray(relationshipData.data)) {
|
8635
8393
|
for (var i = 0; i < relationshipData.data.length; ++i) {
|
8636
|
-
var
|
8637
|
-
this._addToInverse(inversePayload,
|
8394
|
+
var inverseId = relationshipData.data[i].id;
|
8395
|
+
this._addToInverse(inversePayload, inverseId, inverseIdToPayloads, inverseIsMany);
|
8638
8396
|
}
|
8639
8397
|
} else {
|
8640
|
-
var
|
8641
|
-
this._addToInverse(inversePayload,
|
8398
|
+
var _inverseId = relationshipData.data.id;
|
8399
|
+
this._addToInverse(inversePayload, _inverseId, inverseIdToPayloads, inverseIsMany);
|
8642
8400
|
}
|
8643
8401
|
};
|
8644
8402
|
|
8645
|
-
RelationshipPayloads.prototype._addToInverse = function _addToInverse(inversePayload,
|
8646
|
-
|
8647
|
-
|
8648
|
-
if (relInfo.isReflexive && inversePayload.data.id === resourceIdentifier.id) {
|
8403
|
+
RelationshipPayloads.prototype._addToInverse = function _addToInverse(inversePayload, inverseId, inverseIdToPayloads, inverseIsMany) {
|
8404
|
+
if (this._isReflexive && inversePayload.data.id === inverseId) {
|
8649
8405
|
// eg <user:1>.friends = [{ id: 1, type: 'user' }]
|
8650
8406
|
return;
|
8651
8407
|
}
|
8652
8408
|
|
8653
|
-
var existingPayload =
|
8409
|
+
var existingPayload = inverseIdToPayloads[inverseId];
|
8654
8410
|
var existingData = existingPayload && existingPayload.data;
|
8655
8411
|
|
8656
8412
|
if (existingData) {
|
@@ -8660,22 +8416,22 @@ define('ember-data/-private/system/relationships/relationship-payloads', ['expor
|
|
8660
8416
|
if (Array.isArray(existingData)) {
|
8661
8417
|
existingData.push(inversePayload.data);
|
8662
8418
|
} else {
|
8663
|
-
|
8419
|
+
inverseIdToPayloads[inverseId] = inversePayload;
|
8664
8420
|
}
|
8665
8421
|
} else {
|
8666
8422
|
// first time we're populating the inverse side
|
8667
8423
|
//
|
8668
8424
|
if (inverseIsMany) {
|
8669
|
-
|
8425
|
+
inverseIdToPayloads[inverseId] = {
|
8670
8426
|
data: [inversePayload.data]
|
8671
|
-
}
|
8427
|
+
};
|
8672
8428
|
} else {
|
8673
|
-
|
8429
|
+
inverseIdToPayloads[inverseId] = inversePayload;
|
8674
8430
|
}
|
8675
8431
|
}
|
8676
8432
|
};
|
8677
8433
|
|
8678
|
-
RelationshipPayloads.prototype._removeInverse = function _removeInverse(id, previousPayload,
|
8434
|
+
RelationshipPayloads.prototype._removeInverse = function _removeInverse(id, previousPayload, inverseIdToPayloads) {
|
8679
8435
|
var data = previousPayload && previousPayload.data;
|
8680
8436
|
if (!data) {
|
8681
8437
|
// either this is the first time we've seen a payload for this id, or its
|
@@ -8690,16 +8446,15 @@ define('ember-data/-private/system/relationships/relationship-payloads', ['expor
|
|
8690
8446
|
if (Array.isArray(data)) {
|
8691
8447
|
// TODO: diff rather than removeall addall?
|
8692
8448
|
for (var i = 0; i < data.length; ++i) {
|
8693
|
-
|
8694
|
-
this._removeFromInverse(id, resourceIdentifier, inversePayloadMap);
|
8449
|
+
this._removeFromInverse(id, data[i].id, inverseIdToPayloads);
|
8695
8450
|
}
|
8696
8451
|
} else {
|
8697
|
-
this._removeFromInverse(id, data,
|
8452
|
+
this._removeFromInverse(id, data.id, inverseIdToPayloads);
|
8698
8453
|
}
|
8699
8454
|
};
|
8700
8455
|
|
8701
|
-
RelationshipPayloads.prototype._removeFromInverse = function _removeFromInverse(id,
|
8702
|
-
var inversePayload = inversePayloads
|
8456
|
+
RelationshipPayloads.prototype._removeFromInverse = function _removeFromInverse(id, inverseId, inversePayloads) {
|
8457
|
+
var inversePayload = inversePayloads[inverseId];
|
8703
8458
|
var data = inversePayload && inversePayload.data;
|
8704
8459
|
|
8705
8460
|
if (!data) {
|
@@ -8711,23 +8466,21 @@ define('ember-data/-private/system/relationships/relationship-payloads', ['expor
|
|
8711
8466
|
return x.id !== id;
|
8712
8467
|
});
|
8713
8468
|
} else {
|
8714
|
-
inversePayloads
|
8469
|
+
inversePayloads[inverseId] = {
|
8715
8470
|
data: null
|
8716
|
-
}
|
8471
|
+
};
|
8717
8472
|
}
|
8718
8473
|
};
|
8719
8474
|
|
8720
8475
|
_createClass(RelationshipPayloads, [{
|
8721
8476
|
key: '_lhsRelationshipIsMany',
|
8722
8477
|
get: function () {
|
8723
|
-
|
8724
|
-
return meta !== null && meta.kind === 'hasMany';
|
8478
|
+
return this._lhsRelationshipMeta && this._lhsRelationshipMeta.kind === 'hasMany';
|
8725
8479
|
}
|
8726
8480
|
}, {
|
8727
8481
|
key: '_rhsRelationshipIsMany',
|
8728
8482
|
get: function () {
|
8729
|
-
|
8730
|
-
return meta !== null && meta.kind === 'hasMany';
|
8483
|
+
return this._rhsRelationshipMeta && this._rhsRelationshipMeta.kind === 'hasMany';
|
8731
8484
|
}
|
8732
8485
|
}]);
|
8733
8486
|
|
@@ -9183,7 +8936,7 @@ define('ember-data/-private/system/relationships/state/has-many', ['exports', 'e
|
|
9183
8936
|
}
|
9184
8937
|
this.__loadingPromise.set('promise', promise);
|
9185
8938
|
} else {
|
9186
|
-
this.__loadingPromise =
|
8939
|
+
this.__loadingPromise = _promiseProxies.PromiseManyArray.create({
|
9187
8940
|
promise: promise,
|
9188
8941
|
content: content
|
9189
8942
|
});
|
@@ -9380,6 +9133,7 @@ define('ember-data/-private/system/relationships/state/has-many', ['exports', 'e
|
|
9380
9133
|
_this2.store._backburner.join(function () {
|
9381
9134
|
_this2.updateInternalModelsFromAdapter(records);
|
9382
9135
|
_this2.manyArray.set('isLoaded', true);
|
9136
|
+
_this2.setHasData(true);
|
9383
9137
|
});
|
9384
9138
|
return _this2.manyArray;
|
9385
9139
|
});
|
@@ -9827,6 +9581,7 @@ define('ember-data/-private/system/relationships/state/relationship', ['exports'
|
|
9827
9581
|
};
|
9828
9582
|
|
9829
9583
|
Relationship.prototype.updateInternalModelsFromAdapter = function updateInternalModelsFromAdapter(internalModels) {
|
9584
|
+
this.setHasData(true);
|
9830
9585
|
//TODO(Igor) move this to a proper place
|
9831
9586
|
//TODO Once we have adapter support, we need to handle updated and canonical changes
|
9832
9587
|
this.computeChanges(internalModels);
|
@@ -10289,16 +10044,16 @@ define("ember-data/-private/system/snapshot", ["exports", "ember"], function (ex
|
|
10289
10044
|
|
10290
10045
|
exports.default = Snapshot;
|
10291
10046
|
});
|
10292
|
-
define('ember-data/-private/system/store', ['exports', 'ember', 'ember-data/-private/adapters/errors', 'ember-data/-private/system/model/model', 'ember-data/-private/system/normalize-model-name', 'ember-data/-private/system/identity-map', 'ember-data/-private/system/promise-proxies', 'ember-data/-private/system/store/common', 'ember-data/-private/system/store/serializer-response', 'ember-data/-private/system/store/serializers', 'ember-data/-private/system/relationships/relationship-payloads-manager', 'ember-data/-private/system/store/finders', 'ember-data/-private/utils', 'ember-data/-private/system/coerce-id', 'ember-data/-private/system/record-array-manager', 'ember-data/-private/system/store/container-instance-cache', 'ember-data/-private/system/model/internal-model', 'ember-data/-private/features'], function (exports, _ember, _errors, _model, _normalizeModelName, _identityMap, _promiseProxies, _common, _serializerResponse, _serializers, _relationshipPayloadsManager, _finders, _utils, _coerceId, _recordArrayManager, _containerInstanceCache, _internalModel5, _features) {
|
10047
|
+
define('ember-data/-private/system/store', ['exports', 'ember', 'ember-data/-private/adapters/errors', 'ember-data/-debug', 'ember-data/-private/system/model/model', 'ember-data/-private/system/normalize-model-name', 'ember-data/-private/system/identity-map', 'ember-data/-private/system/promise-proxies', 'ember-data/-private/system/store/common', 'ember-data/-private/system/store/serializer-response', 'ember-data/-private/system/store/serializers', 'ember-data/-private/system/relationships/relationship-payloads-manager', 'ember-data/-private/system/store/finders', 'ember-data/-private/utils', 'ember-data/-private/system/coerce-id', 'ember-data/-private/system/record-array-manager', 'ember-data/-private/system/store/container-instance-cache', 'ember-data/-private/system/model/internal-model', 'ember-data/-private/features'], function (exports, _ember, _errors, _debug, _model, _normalizeModelName, _identityMap, _promiseProxies, _common, _serializerResponse, _serializers, _relationshipPayloadsManager, _finders, _utils, _coerceId, _recordArrayManager, _containerInstanceCache, _internalModel5, _features) {
|
10293
10048
|
'use strict';
|
10294
10049
|
|
10295
10050
|
exports.__esModule = true;
|
10296
10051
|
exports.Store = undefined;
|
10052
|
+
/**
|
10053
|
+
@module ember-data
|
10054
|
+
*/
|
10297
10055
|
|
10298
|
-
|
10299
|
-
var badIdFormatAssertion = '`id` passed to `findRecord()` has to be non-empty string or number'; /**
|
10300
|
-
@module ember-data
|
10301
|
-
*/
|
10056
|
+
var badIdFormatAssertion = '`id` passed to `findRecord()` has to be non-empty string or number';
|
10302
10057
|
|
10303
10058
|
var A = _ember.default.A,
|
10304
10059
|
Backburner = _ember.default._Backburner,
|
@@ -10411,7 +10166,7 @@ define('ember-data/-private/system/store', ['exports', 'ember', 'ember-data/-pri
|
|
10411
10166
|
|
10412
10167
|
Note: When creating a new record using any of the above methods
|
10413
10168
|
Ember Data will update `DS.RecordArray`s such as those returned by
|
10414
|
-
`store#peekAll()
|
10169
|
+
`store#peekAll()` or `store#findAll()`. This means any
|
10415
10170
|
data bindings or computed properties that depend on the RecordArray
|
10416
10171
|
will automatically be synced to include the new or updated record
|
10417
10172
|
values.
|
@@ -10809,7 +10564,7 @@ define('ember-data/-private/system/store', ['exports', 'ember', 'ember-data/-pri
|
|
10809
10564
|
See [peekRecord](#method_peekRecord) to get the cached version of a record.
|
10810
10565
|
### Retrieving Related Model Records
|
10811
10566
|
If you use an adapter such as Ember's default
|
10812
|
-
[`JSONAPIAdapter`](
|
10567
|
+
[`JSONAPIAdapter`](https://emberjs.com/api/data/classes/DS.JSONAPIAdapter.html)
|
10813
10568
|
that supports the [JSON API specification](http://jsonapi.org/) and if your server
|
10814
10569
|
endpoint supports the use of an
|
10815
10570
|
['include' query parameter](http://jsonapi.org/format/#fetching-includes),
|
@@ -11380,7 +11135,7 @@ define('ember-data/-private/system/store', ['exports', 'ember', 'ember-data/-pri
|
|
11380
11135
|
Parameters: { "ids" => ["1", "2", "3"] }
|
11381
11136
|
```
|
11382
11137
|
This method returns a promise, which is resolved with an
|
11383
|
-
[`AdapterPopulatedRecordArray`](
|
11138
|
+
[`AdapterPopulatedRecordArray`](https://emberjs.com/api/data/classes/DS.AdapterPopulatedRecordArray.html)
|
11384
11139
|
once the server returns.
|
11385
11140
|
@since 1.13.0
|
11386
11141
|
@method query
|
@@ -11631,7 +11386,7 @@ define('ember-data/-private/system/store', ['exports', 'ember', 'ember-data/-pri
|
|
11631
11386
|
store, without waiting until a reload is finished.
|
11632
11387
|
### Retrieving Related Model Records
|
11633
11388
|
If you use an adapter such as Ember's default
|
11634
|
-
[`JSONAPIAdapter`](
|
11389
|
+
[`JSONAPIAdapter`](https://emberjs.com/api/data/classes/DS.JSONAPIAdapter.html)
|
11635
11390
|
that supports the [JSON API specification](http://jsonapi.org/) and if your server
|
11636
11391
|
endpoint supports the use of an
|
11637
11392
|
['include' query parameter](http://jsonapi.org/format/#fetching-includes),
|
@@ -11932,7 +11687,8 @@ define('ember-data/-private/system/store', ['exports', 'ember', 'ember-data/-pri
|
|
11932
11687
|
var operation = void 0;
|
11933
11688
|
|
11934
11689
|
if (internalModel.currentState.stateName === 'root.deleted.saved') {
|
11935
|
-
|
11690
|
+
resolver.resolve();
|
11691
|
+
continue;
|
11936
11692
|
} else if (internalModel.isNew()) {
|
11937
11693
|
operation = 'createRecord';
|
11938
11694
|
} else if (internalModel.isDeleted()) {
|
@@ -12133,7 +11889,7 @@ define('ember-data/-private/system/store', ['exports', 'ember', 'ember-data/-pri
|
|
12133
11889
|
Returns the model class for the particular `modelName`.
|
12134
11890
|
The class of a model might be useful if you want to get a list of all the
|
12135
11891
|
relationship names of the model, see
|
12136
|
-
[`relationshipNames`](
|
11892
|
+
[`relationshipNames`](https://emberjs.com/api/data/classes/DS.Model.html#property_relationshipNames)
|
12137
11893
|
for example.
|
12138
11894
|
@method modelFor
|
12139
11895
|
@param {String} modelName
|
@@ -12466,9 +12222,10 @@ define('ember-data/-private/system/store', ['exports', 'ember', 'ember-data/-pri
|
|
12466
12222
|
// payload push. In the common case where we are pushing many more
|
12467
12223
|
// instances than types we want to minimize the cost of looking up the
|
12468
12224
|
// inverse map and the overhead of Ember.get adds up.
|
12469
|
-
var modelNameToInverseMap =
|
12225
|
+
var modelNameToInverseMap = void 0;
|
12470
12226
|
|
12471
12227
|
for (var i = 0, l = pushed.length; i < l; i += 2) {
|
12228
|
+
modelNameToInverseMap = modelNameToInverseMap || Object.create(null);
|
12472
12229
|
// This will convert relationships specified as IDs into DS.Model instances
|
12473
12230
|
// (possibly unloaded) and also create the data structures used to track
|
12474
12231
|
// relationships.
|
@@ -12888,13 +12645,8 @@ define('ember-data/-private/system/store', ['exports', 'ember', 'ember-data/-pri
|
|
12888
12645
|
}
|
12889
12646
|
|
12890
12647
|
function setupRelationships(store, internalModel, data, modelNameToInverseMap) {
|
12891
|
-
|
12892
|
-
|
12893
|
-
internalModel.type.eachRelationship(function (relationshipName) {
|
12894
|
-
if (!data.relationships[relationshipName]) {
|
12895
|
-
return;
|
12896
|
-
}
|
12897
|
-
|
12648
|
+
Object.keys(data.relationships).forEach(function (relationshipName) {
|
12649
|
+
var relationships = internalModel._relationships;
|
12898
12650
|
var relationshipRequiresNotification = relationships.has(relationshipName) || isInverseRelationshipInitialized(store, internalModel, data, relationshipName, modelNameToInverseMap);
|
12899
12651
|
|
12900
12652
|
if (relationshipRequiresNotification) {
|
@@ -13105,7 +12857,7 @@ define('ember-data/-private/system/store/finders', ['exports', 'ember', 'ember-d
|
|
13105
12857
|
var serializer = (0, _serializers.serializerForAdapter)(store, adapter, modelName);
|
13106
12858
|
var payload = (0, _serializerResponse.normalizeResponseHelper)(serializer, store, modelClass, adapterPayload, id, 'findRecord');
|
13107
12859
|
(false && _ember.default.assert('Ember Data expected the primary data returned from a \'findRecord\' response to be an object but instead it found an array.', !Array.isArray(payload.data)));
|
13108
|
-
(false && _ember.default.warn('You requested a record of type \'' + modelName + '\' with id \'' + id + '\' but the adapter returned a payload with primary data having an id of \'' + payload.data.id + '\'. Use \'store.findRecord()\' when the requested id is the same as the one returned by the adapter. In other cases use \'store.queryRecord()\' instead
|
12860
|
+
(false && _ember.default.warn('You requested a record of type \'' + modelName + '\' with id \'' + id + '\' but the adapter returned a payload with primary data having an id of \'' + payload.data.id + '\'. Use \'store.findRecord()\' when the requested id is the same as the one returned by the adapter. In other cases use \'store.queryRecord()\' instead https://emberjs.com/api/data/classes/DS.Store.html#method_queryRecord', payload.data.id === id, {
|
13109
12861
|
id: 'ds.store.findRecord.id-mismatch'
|
13110
12862
|
}));
|
13111
12863
|
|
@@ -13413,7 +13165,12 @@ define('ember-data/-private/utils', ['exports', 'ember'], function (exports, _em
|
|
13413
13165
|
|
13414
13166
|
if (owner && owner.lookupFactory && !owner._lookupFactory) {
|
13415
13167
|
// `owner` is a container, we are just making this work
|
13416
|
-
owner._lookupFactory =
|
13168
|
+
owner._lookupFactory = function () {
|
13169
|
+
var _owner;
|
13170
|
+
|
13171
|
+
return (_owner = owner).lookupFactory.apply(_owner, arguments);
|
13172
|
+
};
|
13173
|
+
|
13417
13174
|
owner.register = function () {
|
13418
13175
|
var registry = owner.registry || owner._registry || owner;
|
13419
13176
|
|
@@ -14066,7 +13823,7 @@ define('ember-data/adapters/errors', ['exports', 'ember-data/-private'], functio
|
|
14066
13823
|
}
|
14067
13824
|
});
|
14068
13825
|
});
|
14069
|
-
define('ember-data/adapters/json-api', ['exports', 'ember', 'ember-data/adapters/rest', 'ember-data/-private'], function (exports, _ember, _rest, _private) {
|
13826
|
+
define('ember-data/adapters/json-api', ['exports', 'ember', 'ember-inflector', 'ember-data/adapters/rest', 'ember-data/-private', 'ember-data/-debug'], function (exports, _ember, _emberInflector, _rest, _private, _debug) {
|
14070
13827
|
'use strict';
|
14071
13828
|
|
14072
13829
|
exports.__esModule = true;
|
@@ -14286,7 +14043,7 @@ define('ember-data/adapters/json-api', ['exports', 'ember', 'ember-data/adapters
|
|
14286
14043
|
},
|
14287
14044
|
pathForType: function (modelName) {
|
14288
14045
|
var dasherized = _ember.default.String.dasherize(modelName);
|
14289
|
-
return
|
14046
|
+
return (0, _emberInflector.pluralize)(dasherized);
|
14290
14047
|
},
|
14291
14048
|
updateRecord: function (store, type, snapshot) {
|
14292
14049
|
if ((0, _private.isEnabled)('ds-improved-ajax') && !this._hasCustomizedAjax()) {
|
@@ -14385,12 +14142,13 @@ define('ember-data/adapters/json-api', ['exports', 'ember', 'ember-data/adapters
|
|
14385
14142
|
|
14386
14143
|
exports.default = JSONAPIAdapter;
|
14387
14144
|
});
|
14388
|
-
define('ember-data/adapters/rest', ['exports', 'ember', 'ember-data/adapter', 'ember-data/-private'], function (exports, _ember, _adapter, _private) {
|
14145
|
+
define('ember-data/adapters/rest', ['exports', 'ember', 'ember-data/adapter', 'ember-data/-private', 'ember-data/-debug'], function (exports, _ember, _adapter, _private, _debug) {
|
14389
14146
|
'use strict';
|
14390
14147
|
|
14391
14148
|
exports.__esModule = true;
|
14392
14149
|
var MapWithDefault = _ember.default.MapWithDefault,
|
14393
|
-
get = _ember.default.get
|
14150
|
+
get = _ember.default.get,
|
14151
|
+
run = _ember.default.run;
|
14394
14152
|
|
14395
14153
|
|
14396
14154
|
var Promise = _ember.default.RSVP.Promise;
|
@@ -14995,7 +14753,7 @@ define('ember-data/adapters/rest', ['exports', 'ember', 'ember-data/adapter', 'e
|
|
14995
14753
|
|
14996
14754
|
hash.success = function (payload, textStatus, jqXHR) {
|
14997
14755
|
var response = ajaxSuccess(adapter, jqXHR, payload, requestData);
|
14998
|
-
|
14756
|
+
run.join(null, resolve, response);
|
14999
14757
|
};
|
15000
14758
|
|
15001
14759
|
hash.error = function (jqXHR, textStatus, errorThrown) {
|
@@ -15004,7 +14762,7 @@ define('ember-data/adapters/rest', ['exports', 'ember', 'ember-data/adapter', 'e
|
|
15004
14762
|
errorThrown: errorThrown
|
15005
14763
|
};
|
15006
14764
|
var error = ajaxError(adapter, jqXHR, requestData, responseData);
|
15007
|
-
|
14765
|
+
run.join(null, reject, error);
|
15008
14766
|
};
|
15009
14767
|
|
15010
14768
|
adapter._ajaxRequest(hash);
|
@@ -15280,11 +15038,11 @@ define('ember-data/adapters/rest', ['exports', 'ember', 'ember-data/adapter', 'e
|
|
15280
15038
|
|
15281
15039
|
var requestData = { method: method, url: url };
|
15282
15040
|
|
15283
|
-
return new
|
15041
|
+
return new Promise(function (resolve, reject) {
|
15284
15042
|
|
15285
15043
|
hash.success = function (payload, textStatus, jqXHR) {
|
15286
15044
|
var response = ajaxSuccess(adapter, jqXHR, payload, requestData);
|
15287
|
-
|
15045
|
+
run.join(null, resolve, response);
|
15288
15046
|
};
|
15289
15047
|
|
15290
15048
|
hash.error = function (jqXHR, textStatus, errorThrown) {
|
@@ -15293,7 +15051,7 @@ define('ember-data/adapters/rest', ['exports', 'ember', 'ember-data/adapter', 'e
|
|
15293
15051
|
errorThrown: errorThrown
|
15294
15052
|
};
|
15295
15053
|
var error = ajaxError(adapter, jqXHR, requestData, responseData);
|
15296
|
-
|
15054
|
+
run.join(null, reject, error);
|
15297
15055
|
};
|
15298
15056
|
|
15299
15057
|
adapter._ajaxRequest(hash);
|
@@ -15923,102 +15681,9 @@ define('ember-data/serializers/embedded-records-mixin', ['exports', 'ember'], fu
|
|
15923
15681
|
}
|
15924
15682
|
}
|
15925
15683
|
|
15926
|
-
var get = _ember.default.get
|
15927
|
-
|
15684
|
+
var get = _ember.default.get,
|
15685
|
+
set = _ember.default.set;
|
15928
15686
|
var camelize = _ember.default.String.camelize;
|
15929
|
-
|
15930
|
-
/**
|
15931
|
-
## Using Embedded Records
|
15932
|
-
|
15933
|
-
`DS.EmbeddedRecordsMixin` supports serializing embedded records.
|
15934
|
-
|
15935
|
-
To set up embedded records, include the mixin when extending a serializer,
|
15936
|
-
then define and configure embedded (model) relationships.
|
15937
|
-
|
15938
|
-
Note that embedded records will serialize with the serializer for their model instead of the serializer in which they are defined.
|
15939
|
-
|
15940
|
-
Below is an example of a per-type serializer (`post` type).
|
15941
|
-
|
15942
|
-
```app/serializers/post.js
|
15943
|
-
import DS from 'ember-data';
|
15944
|
-
|
15945
|
-
export default DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
|
15946
|
-
attrs: {
|
15947
|
-
author: { embedded: 'always' },
|
15948
|
-
comments: { serialize: 'ids' }
|
15949
|
-
}
|
15950
|
-
});
|
15951
|
-
```
|
15952
|
-
Note that this use of `{ embedded: 'always' }` is unrelated to
|
15953
|
-
the `{ embedded: 'always' }` that is defined as an option on `DS.attr` as part of
|
15954
|
-
defining a model while working with the `ActiveModelSerializer`. Nevertheless,
|
15955
|
-
using `{ embedded: 'always' }` as an option to `DS.attr` is not a valid way to setup
|
15956
|
-
embedded records.
|
15957
|
-
|
15958
|
-
The `attrs` option for a resource `{ embedded: 'always' }` is shorthand for:
|
15959
|
-
|
15960
|
-
```js
|
15961
|
-
{
|
15962
|
-
serialize: 'records',
|
15963
|
-
deserialize: 'records'
|
15964
|
-
}
|
15965
|
-
```
|
15966
|
-
|
15967
|
-
### Configuring Attrs
|
15968
|
-
|
15969
|
-
A resource's `attrs` option may be set to use `ids`, `records` or false for the
|
15970
|
-
`serialize` and `deserialize` settings.
|
15971
|
-
|
15972
|
-
The `attrs` property can be set on the `ApplicationSerializer` or a per-type
|
15973
|
-
serializer.
|
15974
|
-
|
15975
|
-
In the case where embedded JSON is expected while extracting a payload (reading)
|
15976
|
-
the setting is `deserialize: 'records'`, there is no need to use `ids` when
|
15977
|
-
extracting as that is the default behavior without this mixin if you are using
|
15978
|
-
the vanilla `EmbeddedRecordsMixin`. Likewise, to embed JSON in the payload while
|
15979
|
-
serializing `serialize: 'records'` is the setting to use. There is an option of
|
15980
|
-
not embedding JSON in the serialized payload by using `serialize: 'ids'`. If you
|
15981
|
-
do not want the relationship sent at all, you can use `serialize: false`.
|
15982
|
-
|
15983
|
-
|
15984
|
-
### EmbeddedRecordsMixin defaults
|
15985
|
-
If you do not overwrite `attrs` for a specific relationship, the `EmbeddedRecordsMixin`
|
15986
|
-
will behave in the following way:
|
15987
|
-
|
15988
|
-
BelongsTo: `{ serialize: 'id', deserialize: 'id' }`
|
15989
|
-
HasMany: `{ serialize: false, deserialize: 'ids' }`
|
15990
|
-
|
15991
|
-
### Model Relationships
|
15992
|
-
|
15993
|
-
Embedded records must have a model defined to be extracted and serialized. Note that
|
15994
|
-
when defining any relationships on your model such as `belongsTo` and `hasMany`, you
|
15995
|
-
should not both specify `async: true` and also indicate through the serializer's
|
15996
|
-
`attrs` attribute that the related model should be embedded for deserialization.
|
15997
|
-
If a model is declared embedded for deserialization (`embedded: 'always'` or `deserialize: 'records'`),
|
15998
|
-
then do not use `async: true`.
|
15999
|
-
|
16000
|
-
To successfully extract and serialize embedded records the model relationships
|
16001
|
-
must be setup correcty. See the
|
16002
|
-
[defining relationships](/guides/models/defining-models/#toc_defining-relationships)
|
16003
|
-
section of the **Defining Models** guide page.
|
16004
|
-
|
16005
|
-
Records without an `id` property are not considered embedded records, model
|
16006
|
-
instances must have an `id` property to be used with Ember Data.
|
16007
|
-
|
16008
|
-
### Example JSON payloads, Models and Serializers
|
16009
|
-
|
16010
|
-
**When customizing a serializer it is important to grok what the customizations
|
16011
|
-
are. Please read the docs for the methods this mixin provides, in case you need
|
16012
|
-
to modify it to fit your specific needs.**
|
16013
|
-
|
16014
|
-
For example review the docs for each method of this mixin:
|
16015
|
-
* [normalize](/api/data/classes/DS.EmbeddedRecordsMixin.html#method_normalize)
|
16016
|
-
* [serializeBelongsTo](/api/data/classes/DS.EmbeddedRecordsMixin.html#method_serializeBelongsTo)
|
16017
|
-
* [serializeHasMany](/api/data/classes/DS.EmbeddedRecordsMixin.html#method_serializeHasMany)
|
16018
|
-
|
16019
|
-
@class EmbeddedRecordsMixin
|
16020
|
-
@namespace DS
|
16021
|
-
*/
|
16022
15687
|
exports.default = _ember.default.Mixin.create({
|
16023
15688
|
|
16024
15689
|
/**
|
@@ -17044,7 +16709,7 @@ define('ember-data/serializers/json-api', ['exports', 'ember', 'ember-inflector'
|
|
17044
16709
|
JSONAPISerializer.reopen({
|
17045
16710
|
willMergeMixin: function (props) {
|
17046
16711
|
var constructor = this.constructor;
|
17047
|
-
(false && _ember.default.warn('You\'ve defined \'extractMeta\' in ' + constructor.toString() + ' which is not used for serializers extending JSONAPISerializer. Read more at
|
16712
|
+
(false && _ember.default.warn('You\'ve defined \'extractMeta\' in ' + constructor.toString() + ' which is not used for serializers extending JSONAPISerializer. Read more at https://emberjs.com/api/data/classes/DS.JSONAPISerializer.html#toc_customizing-meta on how to customize meta when using JSON API.', _ember.default.isNone(props.extractMeta) || props.extractMeta === _json.default.prototype.extractMeta, {
|
17048
16713
|
id: 'ds.serializer.json-api.extractMeta'
|
17049
16714
|
}));
|
17050
16715
|
(false && _ember.default.warn('The JSONAPISerializer does not work with the EmbeddedRecordsMixin because the JSON API spec does not describe how to format embedded resources.', !props.isEmbeddedRecordsMixin, {
|
@@ -17778,6 +17443,7 @@ define('ember-data/serializers/rest', ['exports', 'ember', 'ember-inflector', 'e
|
|
17778
17443
|
|
17779
17444
|
var camelize = _ember.default.String.camelize;
|
17780
17445
|
|
17446
|
+
|
17781
17447
|
/**
|
17782
17448
|
Normally, applications will use the `RESTSerializer` by implementing
|
17783
17449
|
the `normalize` method.
|
@@ -18593,7 +18259,7 @@ define("ember-data/version", ["exports"], function (exports) {
|
|
18593
18259
|
"use strict";
|
18594
18260
|
|
18595
18261
|
exports.__esModule = true;
|
18596
|
-
exports.default = "2.
|
18262
|
+
exports.default = "2.16.0-beta.1";
|
18597
18263
|
});
|
18598
18264
|
define("ember-inflector", ["module", "exports", "ember", "ember-inflector/lib/system", "ember-inflector/lib/ext/string"], function (module, exports, _ember, _system) {
|
18599
18265
|
"use strict";
|