@ember-data/model 4.1.0-alpha.9 → 4.2.0-alpha.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.
@@ -2,7 +2,6 @@ import { assert } from '@ember/debug';
2
2
  import { computed } from '@ember/object';
3
3
  import { DEBUG } from '@glimmer/env';
4
4
 
5
- import { RECORD_DATA_ERRORS } from '@ember-data/canary-features';
6
5
  import { recordDataFor } from '@ember-data/store/-private';
7
6
 
8
7
  import { computedMacroWithOptionalParams } from './util';
@@ -151,15 +150,13 @@ function attr(type, options) {
151
150
  );
152
151
  }
153
152
  }
154
- if (RECORD_DATA_ERRORS) {
155
- if (!this.isValid) {
156
- let oldValue = this._internalModel._recordData.getAttr(key);
157
- if (oldValue !== value) {
158
- const { errors } = this;
159
- if (errors.get(key)) {
160
- errors.remove(key);
161
- this.___recordState.cleanErrorRequests();
162
- }
153
+ if (!this.isValid) {
154
+ let oldValue = this._internalModel._recordData.getAttr(key);
155
+ if (oldValue !== value) {
156
+ const { errors } = this;
157
+ if (errors.get(key)) {
158
+ errors.remove(key);
159
+ this.___recordState.cleanErrorRequests();
163
160
  }
164
161
  }
165
162
  }
@@ -24,17 +24,17 @@ import { computedMacroWithOptionalParams } from './util';
24
24
 
25
25
  ```app/models/post.js
26
26
  import Model, { hasMany } from '@ember-data/model';
27
-
27
+
28
28
  export default class PostModel extends Model {
29
- @hasMany('comment') comments;
29
+ @hasMany('comment') comments;
30
30
  }
31
31
  ```
32
32
 
33
33
  ```app/models/comment.js
34
34
  import Model, { belongsTo } from '@ember-data/model';
35
-
35
+
36
36
  export default class CommentModel extends Model {
37
- @belongsTo('post') post;
37
+ @belongsTo('post') post;
38
38
  }
39
39
  ```
40
40
 
@@ -54,7 +54,7 @@ import { computedMacroWithOptionalParams } from './util';
54
54
  import Model, { hasMany } from '@ember-data/model';
55
55
 
56
56
  export default class TagModel extends Model {
57
- @hasMany('post') posts;
57
+ @hasMany('post') posts;
58
58
  }
59
59
  ```
60
60
 
@@ -12,11 +12,9 @@ import { DEBUG } from '@glimmer/env';
12
12
  import { tracked } from '@glimmer/tracking';
13
13
  import Ember from 'ember';
14
14
 
15
- import { CUSTOM_MODEL_CLASS, RECORD_DATA_ERRORS, REQUEST_SERVICE } from '@ember-data/canary-features';
16
15
  import { HAS_DEBUG_PACKAGE } from '@ember-data/private-build-infra';
17
16
  import {
18
17
  DEPRECATE_EVENTED_API_USAGE,
19
- DEPRECATE_MODEL_TOJSON,
20
18
  DEPRECATE_RECORD_LIFECYCLE_EVENT_METHODS,
21
19
  } from '@ember-data/private-build-infra/deprecations';
22
20
  import {
@@ -34,15 +32,6 @@ import { relationshipFromMeta } from './system/relationships/relationship-meta';
34
32
 
35
33
  const { changeProperties } = Ember;
36
34
 
37
- /*
38
- In the non-CUSTOM_MODEL_CLASS world things decorated with flagToggledDecorator
39
- have logic that requires a cache and caching key (which tagged provides), but
40
- in the CUSTOM_MODEL_CLASS branch it only requires dependentKeyCompat which
41
- ensures computeds/observers on the field will fire when anything it accesses
42
- that is tracked changes
43
- */
44
- const flagToggledDecorator = CUSTOM_MODEL_CLASS ? dependentKeyCompat : tagged;
45
-
46
35
  function findPossibleInverses(type, inverseType, name, relationshipsSoFar) {
47
36
  let possibleRelationships = relationshipsSoFar || [];
48
37
 
@@ -119,8 +108,10 @@ function computeOnce(target, key, desc) {
119
108
  @uses DeprecatedEvented
120
109
  */
121
110
  class Model extends EmberObject {
122
- init(...args) {
123
- super.init(...args);
111
+ init(options = {}) {
112
+ const createProps = options._createProps;
113
+ delete options._createProps;
114
+ super.init(options);
124
115
 
125
116
  if (DEBUG) {
126
117
  if (!this._internalModel) {
@@ -130,9 +121,8 @@ class Model extends EmberObject {
130
121
  }
131
122
  }
132
123
 
133
- if (CUSTOM_MODEL_CLASS) {
134
- this.___recordState = new RecordState(this);
135
- }
124
+ this.___recordState = new RecordState(this);
125
+ this.setProperties(createProps);
136
126
  }
137
127
 
138
128
  /**
@@ -387,21 +377,13 @@ class Model extends EmberObject {
387
377
  @type {Boolean}
388
378
  @readOnly
389
379
  */
390
- @flagToggledDecorator
380
+ @dependentKeyCompat
391
381
  get isError() {
392
- if (REQUEST_SERVICE) {
393
- return this.currentState.isError;
394
- }
395
- let tag = peekTag(this, 'isError');
396
- tag.value = tag.value || false;
397
- return tag.value;
382
+ return this.currentState.isError;
398
383
  }
399
384
  set isError(v) {
400
- if (REQUEST_SERVICE && DEBUG) {
401
- throw new Error(`isError is not directly settable when REQUEST_SERVICE is enabled`);
402
- } else {
403
- let tag = peekTag(this, 'isError');
404
- tag.value = v;
385
+ if (DEBUG) {
386
+ throw new Error(`isError is not directly settable`);
405
387
  }
406
388
  }
407
389
 
@@ -470,19 +452,10 @@ class Model extends EmberObject {
470
452
  */
471
453
  @tagged
472
454
  get currentState() {
473
- if (CUSTOM_MODEL_CLASS) {
474
- return this.___recordState;
475
- }
476
- if (this.isDestroyed || this.isDestroying) {
477
- return this._internalModel._previousState;
478
- }
479
-
480
- return this._internalModel && this._internalModel.currentState;
455
+ return this.___recordState;
481
456
  }
482
- set currentState(v) {
483
- if (!CUSTOM_MODEL_CLASS) {
484
- this.notifyPropertyChange('currentState');
485
- }
457
+ set currentState(_v) {
458
+ throw new Error('cannot set currentState');
486
459
  }
487
460
 
488
461
  /**
@@ -562,21 +535,19 @@ class Model extends EmberObject {
562
535
  this._internalModel.send('becameValid');
563
536
  }
564
537
  );
565
- if (RECORD_DATA_ERRORS) {
566
- // TODO we should unify how errors gets populated
567
- // with the code managing the update. Probably a
568
- // lazy flush similar to retrieveLatest in ManyArray
569
- let recordData = recordDataFor(this);
570
- let jsonApiErrors;
571
- if (recordData.getErrors) {
572
- jsonApiErrors = recordData.getErrors();
573
- if (jsonApiErrors) {
574
- let errorsHash = errorsArrayToHash(jsonApiErrors);
575
- let errorKeys = Object.keys(errorsHash);
576
-
577
- for (let i = 0; i < errorKeys.length; i++) {
578
- errors._add(errorKeys[i], errorsHash[errorKeys[i]]);
579
- }
538
+ // TODO we should unify how errors gets populated
539
+ // with the code managing the update. Probably a
540
+ // lazy flush similar to retrieveLatest in ManyArray
541
+ let recordData = recordDataFor(this);
542
+ let jsonApiErrors;
543
+ if (recordData.getErrors) {
544
+ jsonApiErrors = recordData.getErrors();
545
+ if (jsonApiErrors) {
546
+ let errorsHash = errorsArrayToHash(jsonApiErrors);
547
+ let errorKeys = Object.keys(errorsHash);
548
+
549
+ for (let i = 0; i < errorKeys.length; i++) {
550
+ errors._add(errorKeys[i], errorsHash[errorKeys[i]]);
580
551
  }
581
552
  }
582
553
  }
@@ -591,22 +562,12 @@ class Model extends EmberObject {
591
562
  @public
592
563
  @type {AdapterError}
593
564
  */
594
- @flagToggledDecorator
565
+ @dependentKeyCompat
595
566
  get adapterError() {
596
- if (REQUEST_SERVICE) {
597
- return this.currentState.adapterError;
598
- }
599
- let tag = peekTag(this, 'adapterError');
600
- tag.value = tag.value || null;
601
- return tag.value;
567
+ return this.currentState.adapterError;
602
568
  }
603
569
  set adapterError(v) {
604
- if (REQUEST_SERVICE && DEBUG) {
605
- throw new Error(`adapterError is not directly settable when REQUEST_SERVICE is enabled`);
606
- } else {
607
- let tag = peekTag(this, 'adapterError');
608
- tag.value = v;
609
- }
570
+ throw new Error(`adapterError is not directly settable`);
610
571
  }
611
572
 
612
573
  /**
@@ -764,11 +725,7 @@ class Model extends EmberObject {
764
725
  @public
765
726
  */
766
727
  deleteRecord() {
767
- if (CUSTOM_MODEL_CLASS) {
768
- this.store.deleteRecord(this);
769
- } else {
770
- this._internalModel.deleteRecord();
771
- }
728
+ this.store.deleteRecord(this);
772
729
  }
773
730
 
774
731
  /**
@@ -837,11 +794,7 @@ class Model extends EmberObject {
837
794
  if (this.isDestroyed) {
838
795
  return;
839
796
  }
840
- if (CUSTOM_MODEL_CLASS) {
841
- this.store.unloadRecord(this);
842
- } else {
843
- this._internalModel.unloadRecord();
844
- }
797
+ this.store.unloadRecord(this);
845
798
  }
846
799
 
847
800
  /**
@@ -931,9 +884,7 @@ class Model extends EmberObject {
931
884
  */
932
885
  rollbackAttributes() {
933
886
  this._internalModel.rollbackAttributes();
934
- if (CUSTOM_MODEL_CLASS) {
935
- this.currentState.cleanErrorRequests();
936
- }
887
+ this.currentState.cleanErrorRequests();
937
888
  }
938
889
 
939
890
  /**
@@ -2076,6 +2027,7 @@ class Model extends EmberObject {
2076
2027
  // the values initialized during create to `setUnknownProperty`
2077
2028
  Model.prototype._internalModel = null;
2078
2029
  Model.prototype.store = null;
2030
+ Model.prototype._createProps = null;
2079
2031
 
2080
2032
  if (HAS_DEBUG_PACKAGE) {
2081
2033
  /**
@@ -2173,47 +2125,6 @@ if (DEPRECATE_EVENTED_API_USAGE) {
2173
2125
  });
2174
2126
  }
2175
2127
 
2176
- if (DEPRECATE_MODEL_TOJSON) {
2177
- /**
2178
- Use [JSONSerializer](JSONSerializer.html) to
2179
- get the JSON representation of a record.
2180
-
2181
- `toJSON` takes an optional hash as a parameter, currently
2182
- supported options are:
2183
-
2184
- - `includeId`: `true` if the record's ID should be included in the
2185
- JSON representation.
2186
-
2187
- @method toJSON
2188
- @public
2189
- @param {Object} options
2190
- @return {Object} A JSON representation of the object.
2191
- */
2192
- Model.reopen({
2193
- toJSON(options) {
2194
- // container is for lazy transform lookups
2195
- deprecate(
2196
- `Called the built-in \`toJSON\` on the record "${this.constructor.modelName}:${this.id}". The built-in \`toJSON\` method on instances of classes extending \`Model\` is deprecated. For more information see the link below.`,
2197
- false,
2198
- {
2199
- id: 'ember-data:model.toJSON',
2200
- until: '4.0',
2201
- url: 'https://deprecations.emberjs.com/ember-data/v3.x#toc_record-toJSON',
2202
- for: '@ember-data/model',
2203
- since: {
2204
- available: '3.15',
2205
- enabled: '3.15',
2206
- },
2207
- }
2208
- );
2209
- let serializer = this._internalModel.store.serializerFor('-default');
2210
- let snapshot = this._internalModel.createSnapshot();
2211
-
2212
- return serializer.serialize(snapshot, options);
2213
- },
2214
- });
2215
- }
2216
-
2217
2128
  if (DEBUG) {
2218
2129
  let lookupDescriptor = function lookupDescriptor(obj, keyName) {
2219
2130
  let current = obj;
@@ -1,3 +1,4 @@
1
+ import ArrayMixin from '@ember/array';
1
2
  import { assert } from '@ember/debug';
2
3
  import { dependentKeyCompat } from '@ember/object/compat';
3
4
  import { tracked } from '@glimmer/tracking';
@@ -16,7 +17,7 @@ import { DEPRECATE_EVENTED_API_USAGE } from '@ember-data/private-build-infra/dep
16
17
 
17
18
  A PromiseManyArray is an array-like proxy that also proxies certain method calls
18
19
  to the underlying ManyArray in addition to being "promisified".
19
-
20
+
20
21
  Right now we proxy:
21
22
 
22
23
  * `reload()`
@@ -41,6 +42,14 @@ export default class PromiseManyArray {
41
42
  this._update(promise, content);
42
43
  this.isDestroyed = false;
43
44
  this.isDestroying = false;
45
+
46
+ const meta = Ember.meta(this);
47
+ meta.hasMixin = (mixin: Object) => {
48
+ if (mixin === ArrayMixin) {
49
+ return true;
50
+ }
51
+ return false;
52
+ };
44
53
  }
45
54
 
46
55
  //---- Methods/Properties on ArrayProxy that we will keep as our API
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ember-data/model",
3
- "version": "4.1.0-alpha.9",
3
+ "version": "4.2.0-alpha.2",
4
4
  "description": "The default blueprint for ember-cli addons.",
5
5
  "keywords": [
6
6
  "ember-addon"
@@ -18,11 +18,12 @@
18
18
  "test:node": "mocha"
19
19
  },
20
20
  "dependencies": {
21
- "@ember-data/canary-features": "4.1.0-alpha.9",
22
- "@ember-data/private-build-infra": "4.1.0-alpha.9",
23
- "@ember-data/store": "4.1.0-alpha.9",
21
+ "@ember-data/canary-features": "4.2.0-alpha.2",
22
+ "@ember-data/private-build-infra": "4.2.0-alpha.2",
23
+ "@ember-data/store": "4.2.0-alpha.2",
24
24
  "@ember/edition-utils": "^1.2.0",
25
25
  "@ember/string": "^3.0.0",
26
+ "ember-auto-import": "^2.2.4",
26
27
  "ember-cached-decorator-polyfill": "^0.1.4",
27
28
  "ember-cli-babel": "^7.26.6",
28
29
  "ember-cli-string-utils": "^1.1.0",
@@ -32,25 +33,24 @@
32
33
  "inflection": "~1.13.1"
33
34
  },
34
35
  "devDependencies": {
35
- "@ember-data/unpublished-test-infra": "4.1.0-alpha.9",
36
+ "@ember-data/unpublished-test-infra": "4.2.0-alpha.2",
36
37
  "@ember/optional-features": "^2.0.0",
37
- "@ember/test-helpers": "^2.2.5",
38
+ "@ember/test-helpers": "^2.6.0",
38
39
  "broccoli-asset-rev": "^3.0.0",
39
- "ember-auto-import": "^2.0.0",
40
- "ember-cli": "~3.26.1",
40
+ "ember-cli": "~4.0.1",
41
41
  "ember-cli-blueprint-test-helpers": "^0.19.1",
42
42
  "ember-cli-dependency-checker": "^3.2.0",
43
- "ember-cli-htmlbars": "^5.1.2",
43
+ "ember-cli-htmlbars": "^6.0.1",
44
44
  "ember-cli-inject-live-reload": "^2.0.2",
45
45
  "ember-cli-sri": "^2.1.1",
46
46
  "ember-cli-terser": "~4.0.1",
47
47
  "ember-disable-prototype-extensions": "^1.1.3",
48
48
  "ember-export-application-global": "^2.0.1",
49
49
  "ember-load-initializers": "^2.1.1",
50
- "ember-maybe-import-regenerator": "^0.1.6",
51
- "ember-qunit": "^5.1.4",
52
- "ember-resolver": "^8.0.0",
53
- "ember-source": "~3.27.1",
50
+ "ember-maybe-import-regenerator": "^1.0.0",
51
+ "ember-qunit": "^5.1.5",
52
+ "ember-resolver": "^8.0.3",
53
+ "ember-source": "~4.0.0",
54
54
  "ember-source-channel-url": "^3.0.0",
55
55
  "ember-try": "^1.4.0",
56
56
  "loader.js": "^4.7.0",