@ember-data/store 4.4.0-alpha.5 → 4.4.0-alpha.6

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,12 +2,14 @@
2
2
  * @module @ember-data/store
3
3
  */
4
4
  import { A } from '@ember/array';
5
- import { assert, warn } from '@ember/debug';
5
+ import { assert, deprecate, warn } from '@ember/debug';
6
6
  import { _backburner as emberBackburner } from '@ember/runloop';
7
7
  import { DEBUG } from '@glimmer/env';
8
8
 
9
9
  import { default as RSVP, Promise } from 'rsvp';
10
10
 
11
+ import { DEPRECATE_RSVP_PROMISE } from '@ember-data/private-build-infra/deprecations';
12
+
11
13
  import type { CollectionResourceDocument, SingleResourceDocument } from '../ts-interfaces/ember-data-json-api';
12
14
  import type { FindRecordQuery, Request, SaveRecordMutation } from '../ts-interfaces/fetch-manager';
13
15
  import type { ExistingRecordIdentifier, RecordIdentifier, StableRecordIdentifier } from '../ts-interfaces/identifier';
@@ -139,6 +141,24 @@ export default class FetchManager {
139
141
 
140
142
  promise = promise.then(
141
143
  (adapterPayload) => {
144
+ if (!_objectIsAlive(internalModel)) {
145
+ if (DEPRECATE_RSVP_PROMISE) {
146
+ deprecate(
147
+ `A Promise while saving ${modelName} did not resolve by the time your model was destroyed. This will error in a future release.`,
148
+ false,
149
+ {
150
+ id: 'ember-data:rsvp-unresolved-async',
151
+ until: '5.0',
152
+ for: '@ember-data/store',
153
+ since: {
154
+ available: '4.5',
155
+ enabled: '4.5',
156
+ },
157
+ }
158
+ );
159
+ }
160
+ }
161
+
142
162
  if (adapterPayload) {
143
163
  return normalizeResponseHelper(serializer, store, modelClass, adapterPayload, snapshot.id, operation);
144
164
  }
@@ -1,8 +1,11 @@
1
+ import { deprecate } from '@ember/debug';
1
2
  import { get } from '@ember/object';
2
3
  import { DEBUG } from '@glimmer/env';
3
4
 
4
5
  import { resolve } from 'rsvp';
5
6
 
7
+ import { DEPRECATE_RSVP_PROMISE } from '@ember-data/private-build-infra/deprecations';
8
+
6
9
  /**
7
10
  @module @ember-data/store
8
11
  */
@@ -32,7 +35,27 @@ export function guardDestroyedStore(promise, store, label) {
32
35
  if (DEBUG) {
33
36
  token = store._trackAsyncRequestStart(label);
34
37
  }
35
- let wrapperPromise = resolve(promise, label).then((v) => promise);
38
+ let wrapperPromise = resolve(promise, label).then((_v) => {
39
+ if (!_objectIsAlive(store)) {
40
+ if (DEPRECATE_RSVP_PROMISE) {
41
+ deprecate(
42
+ `A Promise did not resolve by the time the store was destroyed. This will error in a future release.`,
43
+ false,
44
+ {
45
+ id: 'ember-data:rsvp-unresolved-async',
46
+ until: '5.0',
47
+ for: '@ember-data/store',
48
+ since: {
49
+ available: '4.5',
50
+ enabled: '4.5',
51
+ },
52
+ }
53
+ );
54
+ }
55
+ }
56
+
57
+ return promise;
58
+ });
36
59
 
37
60
  return _guard(wrapperPromise, () => {
38
61
  if (DEBUG) {
@@ -1,8 +1,10 @@
1
- import { assert } from '@ember/debug';
1
+ import { assert, deprecate } from '@ember/debug';
2
2
  import { DEBUG } from '@glimmer/env';
3
3
 
4
4
  import { Promise } from 'rsvp';
5
5
 
6
+ import { DEPRECATE_RSVP_PROMISE } from '@ember-data/private-build-infra/deprecations';
7
+
6
8
  import { _bind, _guard, _objectIsAlive, guardDestroyedStore } from './common';
7
9
  import { normalizeResponseHelper } from './serializer-response';
8
10
 
@@ -212,10 +214,26 @@ export function _findHasMany(adapter, store, internalModel, link, relationship,
212
214
  let label = `DS: Handle Adapter#findHasMany of '${internalModel.modelName}' : '${relationship.type}'`;
213
215
 
214
216
  promise = guardDestroyedStore(promise, store, label);
215
- promise = _guard(promise, _bind(_objectIsAlive, internalModel));
216
-
217
- return promise.then(
217
+ promise = promise.then(
218
218
  (adapterPayload) => {
219
+ if (!_objectIsAlive(internalModel)) {
220
+ if (DEPRECATE_RSVP_PROMISE) {
221
+ deprecate(
222
+ `A Promise for fecthing ${relationship.type} did not resolve by the time your model was destroyed. This will error in a future release.`,
223
+ false,
224
+ {
225
+ id: 'ember-data:rsvp-unresolved-async',
226
+ until: '5.0',
227
+ for: '@ember-data/store',
228
+ since: {
229
+ available: '4.5',
230
+ enabled: '4.5',
231
+ },
232
+ }
233
+ );
234
+ }
235
+ }
236
+
219
237
  assert(
220
238
  `You made a 'findHasMany' request for a ${internalModel.modelName}'s '${relationship.key}' relationship, using link '${link}' , but the adapter's response did not have any data`,
221
239
  payloadIsNotBlank(adapterPayload)
@@ -236,6 +254,12 @@ export function _findHasMany(adapter, store, internalModel, link, relationship,
236
254
  null,
237
255
  `DS: Extract payload of '${internalModel.modelName}' : hasMany '${relationship.type}'`
238
256
  );
257
+
258
+ if (DEPRECATE_RSVP_PROMISE) {
259
+ promise = _guard(promise, _bind(_objectIsAlive, internalModel));
260
+ }
261
+
262
+ return promise;
239
263
  }
240
264
 
241
265
  export function _findBelongsTo(adapter, store, internalModel, link, relationship, options) {
@@ -249,8 +273,26 @@ export function _findBelongsTo(adapter, store, internalModel, link, relationship
249
273
  promise = guardDestroyedStore(promise, store, label);
250
274
  promise = _guard(promise, _bind(_objectIsAlive, internalModel));
251
275
 
252
- return promise.then(
276
+ promise = promise.then(
253
277
  (adapterPayload) => {
278
+ if (!_objectIsAlive(internalModel)) {
279
+ if (DEPRECATE_RSVP_PROMISE) {
280
+ deprecate(
281
+ `A Promise for fetching ${relationship.type} did not resolve by the time your model was destroyed. This will error in a future release.`,
282
+ false,
283
+ {
284
+ id: 'ember-data:rsvp-unresolved-async',
285
+ until: '5.0',
286
+ for: '@ember-data/store',
287
+ since: {
288
+ available: '4.5',
289
+ enabled: '4.5',
290
+ },
291
+ }
292
+ );
293
+ }
294
+ }
295
+
254
296
  let serializer = store.serializerFor(relationship.type);
255
297
  let payload = normalizeResponseHelper(serializer, store, modelClass, adapterPayload, null, 'findBelongsTo');
256
298
 
@@ -271,6 +313,12 @@ export function _findBelongsTo(adapter, store, internalModel, link, relationship
271
313
  null,
272
314
  `DS: Extract payload of ${internalModel.modelName} : ${relationship.type}`
273
315
  );
316
+
317
+ if (DEPRECATE_RSVP_PROMISE) {
318
+ promise = _guard(promise, _bind(_objectIsAlive, internalModel));
319
+ }
320
+
321
+ return promise;
274
322
  }
275
323
 
276
324
  export function _findAll(adapter, store, modelName, options) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ember-data/store",
3
- "version": "4.4.0-alpha.5",
3
+ "version": "4.4.0-alpha.6",
4
4
  "description": "The default blueprint for ember-cli addons.",
5
5
  "keywords": [
6
6
  "ember-addon"
@@ -17,8 +17,8 @@
17
17
  "start": "ember serve"
18
18
  },
19
19
  "dependencies": {
20
- "@ember-data/canary-features": "4.4.0-alpha.5",
21
- "@ember-data/private-build-infra": "4.4.0-alpha.5",
20
+ "@ember-data/canary-features": "4.4.0-alpha.6",
21
+ "@ember-data/private-build-infra": "4.4.0-alpha.6",
22
22
  "@ember/string": "^3.0.0",
23
23
  "@glimmer/tracking": "^1.0.4",
24
24
  "ember-auto-import": "^2.2.4",
@@ -28,7 +28,7 @@
28
28
  "ember-cli-typescript": "^5.0.0"
29
29
  },
30
30
  "devDependencies": {
31
- "@ember-data/unpublished-test-infra": "4.4.0-alpha.5",
31
+ "@ember-data/unpublished-test-infra": "4.4.0-alpha.6",
32
32
  "@ember/optional-features": "^2.0.0",
33
33
  "@ember/test-helpers": "^2.6.0",
34
34
  "@types/ember": "^4.0.0",
@@ -46,7 +46,7 @@
46
46
  "ember-maybe-import-regenerator": "^1.0.0",
47
47
  "ember-qunit": "^5.1.5",
48
48
  "ember-resolver": "^8.0.3",
49
- "ember-source": "~4.2.0",
49
+ "ember-source": "~4.3.0",
50
50
  "ember-source-channel-url": "^3.0.0",
51
51
  "ember-try": "^2.0.0",
52
52
  "loader.js": "^4.7.0",