@warp-drive/core 5.8.0-beta.0 → 5.8.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.
Files changed (275) hide show
  1. package/README.md +23 -36
  2. package/declarations/build-config.d.ts +18 -1
  3. package/declarations/configure.d.ts +1 -1
  4. package/declarations/graph/-private/-edge-definition.d.ts +12 -2
  5. package/declarations/index.d.ts +90 -8
  6. package/declarations/reactive/-private/default-mode.d.ts +1 -1
  7. package/declarations/reactive/-private/document.d.ts +58 -46
  8. package/declarations/reactive/-private/fields/extension.d.ts +1 -1
  9. package/declarations/reactive/-private/fields/managed-array.d.ts +2 -2
  10. package/declarations/reactive/-private/fields/managed-object.d.ts +1 -1
  11. package/declarations/reactive/-private/record.d.ts +10 -1
  12. package/declarations/reactive/-private/schema.d.ts +77 -4
  13. package/declarations/reactive/-private.d.ts +1 -0
  14. package/declarations/reactive.d.ts +13 -8
  15. package/declarations/request/-private/types.d.ts +1 -1
  16. package/declarations/request.d.ts +47 -0
  17. package/declarations/signals/-leaked.d.ts +2 -0
  18. package/declarations/signals/-private.d.ts +6 -0
  19. package/declarations/{store/-private/new-core-tmp → signals}/promise-state.d.ts +2 -1
  20. package/declarations/{store/-private/new-core-tmp → signals}/request-state.d.ts +6 -6
  21. package/declarations/{store/-private/new-core-tmp → signals}/request-subscription.d.ts +4 -4
  22. package/declarations/store/-private/cache-handler/types.d.ts +2 -16
  23. package/declarations/store/-private/caches/instance-cache.d.ts +5 -6
  24. package/declarations/store/-private/default-cache-policy.d.ts +147 -129
  25. package/declarations/store/-private/managers/cache-capabilities-manager.d.ts +1 -1
  26. package/declarations/store/-private/managers/cache-key-manager.d.ts +26 -8
  27. package/declarations/store/-private/managers/cache-manager.d.ts +7 -18
  28. package/declarations/store/-private/managers/notification-manager.d.ts +1 -1
  29. package/declarations/store/-private/record-arrays/legacy-many-array.d.ts +1 -1
  30. package/declarations/store/-private/record-arrays/resource-array.d.ts +1 -1
  31. package/declarations/store/-private/store-service.d.ts +43 -64
  32. package/declarations/store/-private.d.ts +0 -6
  33. package/declarations/store/-types/q/cache-capabilities-manager.d.ts +1 -1
  34. package/declarations/store/deprecated/-private.d.ts +2 -2
  35. package/declarations/store/deprecated/store.d.ts +33 -32
  36. package/declarations/store.d.ts +1 -0
  37. package/declarations/types/cache.d.ts +8 -6
  38. package/declarations/types/record.d.ts +132 -0
  39. package/declarations/types/request.d.ts +26 -14
  40. package/declarations/types/schema/fields.d.ts +37 -13
  41. package/declarations/{store/-types/q → types/schema}/schema-service.d.ts +15 -13
  42. package/declarations/types/spec/document.d.ts +34 -0
  43. package/declarations/types/symbols.d.ts +2 -2
  44. package/declarations/types.d.ts +1 -1
  45. package/dist/build-config.js +1 -1
  46. package/dist/configure-DPUFCemT.js +1940 -0
  47. package/dist/configure.js +2 -1
  48. package/dist/default-cache-policy-D7_u4YRH.js +572 -0
  49. package/dist/{context-C_7OLieY.js → future-BKkJJkj7.js} +174 -174
  50. package/dist/graph/-private.js +16 -6
  51. package/dist/{request-state-C955e0AL.js → index-CQP2NSqg.js} +8830 -9427
  52. package/dist/index.js +6 -382
  53. package/dist/reactive/-private.js +1 -1
  54. package/dist/reactive.js +4 -903
  55. package/dist/request.js +49 -1
  56. package/dist/signals/-leaked.js +1 -0
  57. package/dist/store/-private.js +1 -2
  58. package/dist/store.js +1 -533
  59. package/dist/symbols-3C1OkYtZ.js +39 -0
  60. package/dist/types/-private.js +1 -1
  61. package/dist/types/record.js +127 -0
  62. package/dist/types/request.js +14 -12
  63. package/dist/types/runtime.js +1 -1
  64. package/dist/types/schema/fields.js +14 -0
  65. package/dist/types/schema/schema-service.js +0 -0
  66. package/dist/types/symbols.js +2 -2
  67. package/dist/unpkg/dev/-leaked-Co0EI6Go.js +1939 -0
  68. package/dist/unpkg/dev/build-config/babel-macros.js +1 -0
  69. package/dist/unpkg/dev/build-config/canary-features.js +1 -0
  70. package/dist/unpkg/dev/build-config/debugging.js +1 -0
  71. package/dist/unpkg/dev/build-config/deprecations.js +1 -0
  72. package/dist/unpkg/dev/build-config/env.js +1 -0
  73. package/dist/unpkg/dev/build-config/macros.js +1 -0
  74. package/dist/unpkg/dev/build-config.js +1 -0
  75. package/dist/unpkg/dev/configure.js +1 -0
  76. package/dist/unpkg/dev/future-DFfOzSoe.js +672 -0
  77. package/dist/unpkg/dev/graph/-private.js +3132 -0
  78. package/dist/unpkg/dev/index-BzcBOnw9.js +9392 -0
  79. package/dist/unpkg/dev/index.js +6 -0
  80. package/dist/unpkg/dev/reactive/-private.js +1 -0
  81. package/dist/unpkg/dev/reactive.js +3 -0
  82. package/dist/unpkg/dev/request.js +49 -0
  83. package/dist/unpkg/dev/runtime-E1M51_-O.js +135 -0
  84. package/dist/unpkg/dev/signals/-leaked.js +1 -0
  85. package/dist/unpkg/dev/store/-private.js +55 -0
  86. package/dist/unpkg/dev/store.js +558 -0
  87. package/dist/unpkg/dev/types/-private.js +69 -0
  88. package/dist/unpkg/dev/types/cache/aliases.js +0 -0
  89. package/dist/unpkg/dev/types/cache/change.js +0 -0
  90. package/dist/unpkg/dev/types/cache/mutations.js +0 -0
  91. package/dist/unpkg/dev/types/cache/operations.js +0 -0
  92. package/dist/unpkg/dev/types/cache/relationship.js +0 -0
  93. package/dist/unpkg/dev/types/cache.js +0 -0
  94. package/dist/unpkg/dev/types/graph.js +0 -0
  95. package/dist/unpkg/dev/types/identifier.js +61 -0
  96. package/dist/unpkg/dev/types/json/raw.js +0 -0
  97. package/dist/unpkg/dev/types/params.js +0 -0
  98. package/dist/unpkg/dev/types/record.js +191 -0
  99. package/dist/unpkg/dev/types/request.js +77 -0
  100. package/dist/unpkg/dev/types/runtime.js +34 -0
  101. package/dist/unpkg/dev/types/schema/concepts.js +0 -0
  102. package/dist/unpkg/dev/types/schema/fields.js +505 -0
  103. package/dist/unpkg/dev/types/schema/fields.type-test.js +0 -0
  104. package/dist/unpkg/dev/types/schema/schema-service.js +0 -0
  105. package/dist/unpkg/dev/types/spec/document.js +0 -0
  106. package/dist/unpkg/dev/types/spec/error.js +0 -0
  107. package/dist/unpkg/dev/types/spec/json-api-raw.js +0 -0
  108. package/dist/unpkg/dev/types/symbols.js +84 -0
  109. package/dist/unpkg/dev/types/utils.js +0 -0
  110. package/dist/unpkg/dev/types.js +0 -0
  111. package/dist/unpkg/dev/utils/string.js +91 -0
  112. package/dist/unpkg/dev-deprecated/-leaked-DjMeRqdU.js +1939 -0
  113. package/dist/unpkg/dev-deprecated/-private-3C1OkYtZ.js +39 -0
  114. package/dist/unpkg/dev-deprecated/build-config/babel-macros.js +1 -0
  115. package/dist/unpkg/dev-deprecated/build-config/canary-features.js +1 -0
  116. package/dist/unpkg/dev-deprecated/build-config/debugging.js +1 -0
  117. package/dist/unpkg/dev-deprecated/build-config/deprecations.js +1 -0
  118. package/dist/unpkg/dev-deprecated/build-config/env.js +1 -0
  119. package/dist/unpkg/dev-deprecated/build-config/macros.js +1 -0
  120. package/dist/unpkg/dev-deprecated/build-config.js +1 -0
  121. package/dist/unpkg/dev-deprecated/configure.js +1 -0
  122. package/dist/unpkg/dev-deprecated/future-DFfOzSoe.js +672 -0
  123. package/dist/unpkg/dev-deprecated/graph/-private.js +3327 -0
  124. package/dist/unpkg/dev-deprecated/index-6TnTv-WG.js +10007 -0
  125. package/dist/unpkg/dev-deprecated/index.js +5 -0
  126. package/dist/unpkg/dev-deprecated/reactive/-private.js +1 -0
  127. package/dist/unpkg/dev-deprecated/reactive.js +3 -0
  128. package/dist/unpkg/dev-deprecated/request.js +49 -0
  129. package/dist/unpkg/dev-deprecated/runtime-DAu5b0IR.js +135 -0
  130. package/dist/unpkg/dev-deprecated/signals/-leaked.js +1 -0
  131. package/dist/unpkg/dev-deprecated/store/-private.js +1 -0
  132. package/dist/unpkg/dev-deprecated/store.js +558 -0
  133. package/dist/unpkg/dev-deprecated/types/-private.js +69 -0
  134. package/dist/unpkg/dev-deprecated/types/cache/aliases.js +0 -0
  135. package/dist/unpkg/dev-deprecated/types/cache/change.js +0 -0
  136. package/dist/unpkg/dev-deprecated/types/cache/mutations.js +0 -0
  137. package/dist/unpkg/dev-deprecated/types/cache/operations.js +0 -0
  138. package/dist/unpkg/dev-deprecated/types/cache/relationship.js +0 -0
  139. package/dist/unpkg/dev-deprecated/types/cache.js +0 -0
  140. package/dist/unpkg/dev-deprecated/types/graph.js +0 -0
  141. package/dist/unpkg/dev-deprecated/types/identifier.js +61 -0
  142. package/dist/unpkg/dev-deprecated/types/json/raw.js +0 -0
  143. package/dist/unpkg/dev-deprecated/types/params.js +0 -0
  144. package/dist/unpkg/dev-deprecated/types/record.js +191 -0
  145. package/dist/unpkg/dev-deprecated/types/request.js +77 -0
  146. package/dist/unpkg/dev-deprecated/types/runtime.js +34 -0
  147. package/dist/unpkg/dev-deprecated/types/schema/concepts.js +0 -0
  148. package/dist/unpkg/dev-deprecated/types/schema/fields.js +505 -0
  149. package/dist/unpkg/dev-deprecated/types/schema/fields.type-test.js +0 -0
  150. package/dist/unpkg/dev-deprecated/types/schema/schema-service.js +0 -0
  151. package/dist/unpkg/dev-deprecated/types/spec/document.js +0 -0
  152. package/dist/unpkg/dev-deprecated/types/spec/error.js +0 -0
  153. package/dist/unpkg/dev-deprecated/types/spec/json-api-raw.js +0 -0
  154. package/dist/unpkg/dev-deprecated/types/symbols.js +84 -0
  155. package/dist/unpkg/dev-deprecated/types/utils.js +0 -0
  156. package/dist/unpkg/dev-deprecated/types.js +0 -0
  157. package/dist/unpkg/dev-deprecated/utils/string.js +91 -0
  158. package/dist/unpkg/prod/-leaked-DUONXQDB.js +1676 -0
  159. package/dist/unpkg/prod/-private-sql1_mdx.js +39 -0
  160. package/dist/unpkg/prod/build-config/babel-macros.js +1 -0
  161. package/dist/unpkg/prod/build-config/canary-features.js +1 -0
  162. package/dist/unpkg/prod/build-config/debugging.js +1 -0
  163. package/dist/unpkg/prod/build-config/deprecations.js +1 -0
  164. package/dist/unpkg/prod/build-config/env.js +1 -0
  165. package/dist/unpkg/prod/build-config/macros.js +1 -0
  166. package/dist/unpkg/prod/build-config.js +1 -0
  167. package/dist/unpkg/prod/configure.js +2 -0
  168. package/dist/unpkg/prod/graph/-private.js +2235 -0
  169. package/dist/unpkg/prod/handler-EU_8ncB2.js +1619 -0
  170. package/dist/unpkg/prod/index.js +483 -0
  171. package/dist/unpkg/prod/promise-cache-DIT8Ypjq.js +19 -0
  172. package/dist/unpkg/prod/reactive/-private.js +1 -0
  173. package/dist/unpkg/prod/reactive.js +30 -0
  174. package/dist/unpkg/prod/request-BrJSCG6r.js +421 -0
  175. package/dist/unpkg/prod/request.js +2 -0
  176. package/dist/unpkg/prod/schema-BSkHyoWz.js +5219 -0
  177. package/dist/unpkg/prod/signals/-leaked.js +1 -0
  178. package/dist/unpkg/prod/store/-private.js +126 -0
  179. package/dist/unpkg/prod/store.js +437 -0
  180. package/dist/unpkg/prod/types/-private.js +49 -0
  181. package/dist/unpkg/prod/types/cache/aliases.js +0 -0
  182. package/dist/unpkg/prod/types/cache/change.js +0 -0
  183. package/dist/unpkg/prod/types/cache/mutations.js +0 -0
  184. package/dist/unpkg/prod/types/cache/operations.js +0 -0
  185. package/dist/unpkg/prod/types/cache/relationship.js +0 -0
  186. package/dist/unpkg/prod/types/cache.js +0 -0
  187. package/dist/unpkg/prod/types/graph.js +0 -0
  188. package/dist/unpkg/prod/types/identifier.js +61 -0
  189. package/dist/unpkg/prod/types/json/raw.js +0 -0
  190. package/dist/unpkg/prod/types/params.js +0 -0
  191. package/dist/unpkg/prod/types/record.js +191 -0
  192. package/dist/unpkg/prod/types/request.js +77 -0
  193. package/dist/unpkg/prod/types/runtime.js +34 -0
  194. package/dist/unpkg/prod/types/schema/concepts.js +0 -0
  195. package/dist/unpkg/prod/types/schema/fields.js +505 -0
  196. package/dist/unpkg/prod/types/schema/fields.type-test.js +0 -0
  197. package/dist/unpkg/prod/types/schema/schema-service.js +0 -0
  198. package/dist/unpkg/prod/types/spec/document.js +0 -0
  199. package/dist/unpkg/prod/types/spec/error.js +0 -0
  200. package/dist/unpkg/prod/types/spec/json-api-raw.js +0 -0
  201. package/dist/unpkg/prod/types/symbols.js +84 -0
  202. package/dist/unpkg/prod/types/utils.js +0 -0
  203. package/dist/unpkg/prod/types.js +0 -0
  204. package/dist/unpkg/prod/utils/string.js +72 -0
  205. package/dist/unpkg/prod-deprecated/-leaked-DRNv9VIX.js +1676 -0
  206. package/dist/unpkg/prod-deprecated/-private-3C1OkYtZ.js +39 -0
  207. package/dist/unpkg/prod-deprecated/build-config/babel-macros.js +1 -0
  208. package/dist/unpkg/prod-deprecated/build-config/canary-features.js +1 -0
  209. package/dist/unpkg/prod-deprecated/build-config/debugging.js +1 -0
  210. package/dist/unpkg/prod-deprecated/build-config/deprecations.js +1 -0
  211. package/dist/unpkg/prod-deprecated/build-config/env.js +1 -0
  212. package/dist/unpkg/prod-deprecated/build-config/macros.js +1 -0
  213. package/dist/unpkg/prod-deprecated/build-config.js +1 -0
  214. package/dist/unpkg/prod-deprecated/configure.js +2 -0
  215. package/dist/unpkg/prod-deprecated/graph/-private.js +2408 -0
  216. package/dist/unpkg/prod-deprecated/handler-CCIu4sQ3.js +334 -0
  217. package/dist/unpkg/prod-deprecated/hooks-Dv4Np0MY.js +26 -0
  218. package/dist/unpkg/prod-deprecated/index.js +483 -0
  219. package/dist/unpkg/prod-deprecated/promise-cache-DIT8Ypjq.js +19 -0
  220. package/dist/unpkg/prod-deprecated/reactive/-private.js +1 -0
  221. package/dist/unpkg/prod-deprecated/reactive.js +5 -0
  222. package/dist/unpkg/prod-deprecated/request-BrJSCG6r.js +421 -0
  223. package/dist/unpkg/prod-deprecated/request.js +2 -0
  224. package/dist/unpkg/prod-deprecated/schema-CJcjHv0E.js +6939 -0
  225. package/dist/unpkg/prod-deprecated/signals/-leaked.js +1 -0
  226. package/dist/unpkg/prod-deprecated/store/-private.js +88 -0
  227. package/dist/unpkg/prod-deprecated/store.js +437 -0
  228. package/dist/unpkg/prod-deprecated/types/-private.js +49 -0
  229. package/dist/unpkg/prod-deprecated/types/cache/aliases.js +0 -0
  230. package/dist/unpkg/prod-deprecated/types/cache/change.js +0 -0
  231. package/dist/unpkg/prod-deprecated/types/cache/mutations.js +0 -0
  232. package/dist/unpkg/prod-deprecated/types/cache/operations.js +0 -0
  233. package/dist/unpkg/prod-deprecated/types/cache/relationship.js +0 -0
  234. package/dist/unpkg/prod-deprecated/types/cache.js +0 -0
  235. package/dist/unpkg/prod-deprecated/types/graph.js +0 -0
  236. package/dist/unpkg/prod-deprecated/types/identifier.js +61 -0
  237. package/dist/unpkg/prod-deprecated/types/json/raw.js +0 -0
  238. package/dist/unpkg/prod-deprecated/types/params.js +0 -0
  239. package/dist/unpkg/prod-deprecated/types/record.js +191 -0
  240. package/dist/unpkg/prod-deprecated/types/request.js +77 -0
  241. package/dist/unpkg/prod-deprecated/types/runtime.js +34 -0
  242. package/dist/unpkg/prod-deprecated/types/schema/concepts.js +0 -0
  243. package/dist/unpkg/prod-deprecated/types/schema/fields.js +505 -0
  244. package/dist/unpkg/prod-deprecated/types/schema/fields.type-test.js +0 -0
  245. package/dist/unpkg/prod-deprecated/types/schema/schema-service.js +0 -0
  246. package/dist/unpkg/prod-deprecated/types/spec/document.js +0 -0
  247. package/dist/unpkg/prod-deprecated/types/spec/error.js +0 -0
  248. package/dist/unpkg/prod-deprecated/types/spec/json-api-raw.js +0 -0
  249. package/dist/unpkg/prod-deprecated/types/symbols.js +84 -0
  250. package/dist/unpkg/prod-deprecated/types/utils.js +0 -0
  251. package/dist/unpkg/prod-deprecated/types.js +0 -0
  252. package/dist/unpkg/prod-deprecated/utils/string.js +72 -0
  253. package/logos/README.md +2 -2
  254. package/logos/logo-yellow-slab.svg +1 -0
  255. package/logos/word-mark-black.svg +1 -0
  256. package/logos/word-mark-white.svg +1 -0
  257. package/package.json +12 -4
  258. package/declarations/store/-private/new-core-tmp/expensive-subscription.d.ts +0 -24
  259. package/dist/configure-C3x8YXzL.js +0 -181
  260. package/logos/NCC-1701-a-blue.svg +0 -4
  261. package/logos/NCC-1701-a-gold.svg +0 -4
  262. package/logos/NCC-1701-a-gold_100.svg +0 -1
  263. package/logos/NCC-1701-a-gold_base-64.txt +0 -1
  264. package/logos/NCC-1701-a.svg +0 -4
  265. package/logos/docs-badge.svg +0 -2
  266. package/logos/ember-data-logo-dark.svg +0 -12
  267. package/logos/ember-data-logo-light.svg +0 -12
  268. package/logos/social1.png +0 -0
  269. package/logos/social2.png +0 -0
  270. package/logos/warp-drive-logo-dark.svg +0 -4
  271. package/logos/warp-drive-logo-gold.svg +0 -4
  272. /package/declarations/{store/-private/new-core-tmp → signals}/reactivity/configure.d.ts +0 -0
  273. /package/declarations/{store/-private/new-core-tmp → signals}/reactivity/internal.d.ts +0 -0
  274. /package/declarations/{store/-private/new-core-tmp → signals}/reactivity/signal.d.ts +0 -0
  275. /package/dist/{symbols-sql1_mdx.js → unpkg/dev/-private-sql1_mdx.js} +0 -0
@@ -1,4 +1,4 @@
1
- import { STRUCTURED, IS_FUTURE, SkipCache } from './types/request.js';
1
+ import { SkipCache, STRUCTURED, IS_FUTURE } from './types/request.js';
2
2
  import { getOrSetGlobal, getOrSetUniversal } from './types/-private.js';
3
3
  import { macroCondition, getGlobalConfig } from '@embroider/macros';
4
4
  const BODY_TYPES = {
@@ -233,6 +233,179 @@ function assertValidRequest(request, isTopLevel) {
233
233
  }
234
234
  }
235
235
  }
236
+ function upgradeHeaders(headers) {
237
+ headers.clone = () => {
238
+ return new Headers(headers);
239
+ };
240
+ headers.toJSON = () => {
241
+ return Array.from(headers);
242
+ };
243
+ return headers;
244
+ }
245
+ function cloneResponseProperties(response) {
246
+ const {
247
+ headers,
248
+ ok,
249
+ redirected,
250
+ status,
251
+ statusText,
252
+ type,
253
+ url
254
+ } = response;
255
+ upgradeHeaders(headers);
256
+ return {
257
+ headers: headers,
258
+ ok,
259
+ redirected,
260
+ status,
261
+ statusText,
262
+ type,
263
+ url
264
+ };
265
+ }
266
+ class ContextOwner {
267
+ hasSetStream = false;
268
+ hasSetResponse = false;
269
+ hasSubscribers = false;
270
+ stream = createDeferred();
271
+ response = null;
272
+ nextCalled = 0;
273
+ constructor(request, god, isRoot = false) {
274
+ this.isRoot = isRoot;
275
+ this.requestId = god.id;
276
+ this.controller = request.controller || god.controller;
277
+ this.stream.promise.sizeHint = 0;
278
+ if (request.controller) {
279
+ if (request.controller !== god.controller) {
280
+ god.controller.signal.addEventListener('abort', () => {
281
+ this.controller.abort(god.controller.signal.reason);
282
+ });
283
+ }
284
+ delete request.controller;
285
+ }
286
+ let enhancedRequest = Object.assign({
287
+ signal: this.controller.signal
288
+ }, request);
289
+ if (macroCondition(getGlobalConfig().WarpDrive.env.DEBUG)) {
290
+ if (!request?.cacheOptions?.[SkipCache]) {
291
+ request = deepFreeze(request);
292
+ enhancedRequest = deepFreeze(enhancedRequest);
293
+ }
294
+ } else {
295
+ if (request.headers) {
296
+ upgradeHeaders(request.headers);
297
+ }
298
+ }
299
+ this.enhancedRequest = enhancedRequest;
300
+ this.request = request;
301
+ this.god = god;
302
+ this.stream.promise = this.stream.promise.then(stream => {
303
+ if (this.god.stream === stream && this.hasSubscribers) {
304
+ this.god.stream = null;
305
+ }
306
+ return stream;
307
+ });
308
+ }
309
+ get hasRequestedStream() {
310
+ return this.god.hasRequestedStream;
311
+ }
312
+ getResponse() {
313
+ if (this.hasSetResponse) {
314
+ return this.response;
315
+ }
316
+ if (this.nextCalled === 1) {
317
+ return this.god.response;
318
+ }
319
+ return null;
320
+ }
321
+ getStream() {
322
+ if (this.isRoot) {
323
+ this.god.hasRequestedStream = true;
324
+ }
325
+ if (!this.hasSetResponse) {
326
+ const hint = this.god.response?.headers?.get('content-length');
327
+ this.stream.promise.sizeHint = hint ? parseInt(hint, 10) : 0;
328
+ }
329
+ this.hasSubscribers = true;
330
+ return this.stream.promise;
331
+ }
332
+ abort(reason) {
333
+ this.controller.abort(reason);
334
+ }
335
+ setStream(stream) {
336
+ if (!this.hasSetStream) {
337
+ this.hasSetStream = true;
338
+ if (!(stream instanceof Promise)) {
339
+ this.god.stream = stream;
340
+ }
341
+ // @ts-expect-error
342
+ this.stream.resolve(stream);
343
+ }
344
+ }
345
+ resolveStream() {
346
+ this.setStream(this.nextCalled === 1 ? this.god.stream : null);
347
+ }
348
+ setResponse(response) {
349
+ if (this.hasSetResponse) {
350
+ if (macroCondition(getGlobalConfig().WarpDrive.env.DEBUG)) {
351
+ throw new Error(`Cannot setResponse when a response has already been set`);
352
+ }
353
+ return;
354
+ }
355
+ this.hasSetResponse = true;
356
+ if (response instanceof Response) {
357
+ // TODO potentially avoid cloning in prod
358
+ let responseData = cloneResponseProperties(response);
359
+ if (macroCondition(getGlobalConfig().WarpDrive.env.DEBUG)) {
360
+ responseData = deepFreeze(responseData);
361
+ }
362
+ this.response = responseData;
363
+ this.god.response = responseData;
364
+ const sizeHint = response.headers?.get('content-length');
365
+ this.stream.promise.sizeHint = sizeHint ? parseInt(sizeHint, 10) : 0;
366
+ } else {
367
+ this.response = response;
368
+ this.god.response = response;
369
+ }
370
+ }
371
+ }
372
+ class Context {
373
+ /** @internal */
374
+
375
+ /** @internal */
376
+
377
+ /** @internal */
378
+
379
+ constructor(owner, isCacheHandler) {
380
+ this.id = owner.requestId;
381
+ this.___owner = owner;
382
+ this.request = owner.enhancedRequest;
383
+ this._isCacheHandler = isCacheHandler;
384
+ this._finalized = false;
385
+ }
386
+ setStream(stream) {
387
+ this.___owner.setStream(stream);
388
+ }
389
+ setResponse(response) {
390
+ this.___owner.setResponse(response);
391
+ }
392
+ setIdentifier(identifier) {
393
+ macroCondition(getGlobalConfig().WarpDrive.env.DEBUG) ? (test => {
394
+ if (!test) {
395
+ throw new Error(`setIdentifier may only be used synchronously from a CacheHandler`);
396
+ }
397
+ })(identifier && this._isCacheHandler && !this._finalized) : {};
398
+ this.___owner.god.identifier = identifier;
399
+ }
400
+ get hasRequestedStream() {
401
+ return this.___owner.hasRequestedStream;
402
+ }
403
+
404
+ /** @private */
405
+ _finalize() {
406
+ this._finalized = true;
407
+ }
408
+ }
236
409
  const PromiseCache = getOrSetUniversal('PromiseCache', new WeakMap());
237
410
  const RequestMap = getOrSetUniversal('RequestMap', new Map());
238
411
  function setRequestResult(requestId, result) {
@@ -502,177 +675,4 @@ function createFuture(owner) {
502
675
  deferred.promise = promise;
503
676
  return deferred;
504
677
  }
505
- function upgradeHeaders(headers) {
506
- headers.clone = () => {
507
- return new Headers(headers);
508
- };
509
- headers.toJSON = () => {
510
- return Array.from(headers);
511
- };
512
- return headers;
513
- }
514
- function cloneResponseProperties(response) {
515
- const {
516
- headers,
517
- ok,
518
- redirected,
519
- status,
520
- statusText,
521
- type,
522
- url
523
- } = response;
524
- upgradeHeaders(headers);
525
- return {
526
- headers: headers,
527
- ok,
528
- redirected,
529
- status,
530
- statusText,
531
- type,
532
- url
533
- };
534
- }
535
- class ContextOwner {
536
- hasSetStream = false;
537
- hasSetResponse = false;
538
- hasSubscribers = false;
539
- stream = createDeferred();
540
- response = null;
541
- nextCalled = 0;
542
- constructor(request, god, isRoot = false) {
543
- this.isRoot = isRoot;
544
- this.requestId = god.id;
545
- this.controller = request.controller || god.controller;
546
- this.stream.promise.sizeHint = 0;
547
- if (request.controller) {
548
- if (request.controller !== god.controller) {
549
- god.controller.signal.addEventListener('abort', () => {
550
- this.controller.abort(god.controller.signal.reason);
551
- });
552
- }
553
- delete request.controller;
554
- }
555
- let enhancedRequest = Object.assign({
556
- signal: this.controller.signal
557
- }, request);
558
- if (macroCondition(getGlobalConfig().WarpDrive.env.DEBUG)) {
559
- if (!request?.cacheOptions?.[SkipCache]) {
560
- request = deepFreeze(request);
561
- enhancedRequest = deepFreeze(enhancedRequest);
562
- }
563
- } else {
564
- if (request.headers) {
565
- upgradeHeaders(request.headers);
566
- }
567
- }
568
- this.enhancedRequest = enhancedRequest;
569
- this.request = request;
570
- this.god = god;
571
- this.stream.promise = this.stream.promise.then(stream => {
572
- if (this.god.stream === stream && this.hasSubscribers) {
573
- this.god.stream = null;
574
- }
575
- return stream;
576
- });
577
- }
578
- get hasRequestedStream() {
579
- return this.god.hasRequestedStream;
580
- }
581
- getResponse() {
582
- if (this.hasSetResponse) {
583
- return this.response;
584
- }
585
- if (this.nextCalled === 1) {
586
- return this.god.response;
587
- }
588
- return null;
589
- }
590
- getStream() {
591
- if (this.isRoot) {
592
- this.god.hasRequestedStream = true;
593
- }
594
- if (!this.hasSetResponse) {
595
- const hint = this.god.response?.headers?.get('content-length');
596
- this.stream.promise.sizeHint = hint ? parseInt(hint, 10) : 0;
597
- }
598
- this.hasSubscribers = true;
599
- return this.stream.promise;
600
- }
601
- abort(reason) {
602
- this.controller.abort(reason);
603
- }
604
- setStream(stream) {
605
- if (!this.hasSetStream) {
606
- this.hasSetStream = true;
607
- if (!(stream instanceof Promise)) {
608
- this.god.stream = stream;
609
- }
610
- // @ts-expect-error
611
- this.stream.resolve(stream);
612
- }
613
- }
614
- resolveStream() {
615
- this.setStream(this.nextCalled === 1 ? this.god.stream : null);
616
- }
617
- setResponse(response) {
618
- if (this.hasSetResponse) {
619
- if (macroCondition(getGlobalConfig().WarpDrive.env.DEBUG)) {
620
- throw new Error(`Cannot setResponse when a response has already been set`);
621
- }
622
- return;
623
- }
624
- this.hasSetResponse = true;
625
- if (response instanceof Response) {
626
- // TODO potentially avoid cloning in prod
627
- let responseData = cloneResponseProperties(response);
628
- if (macroCondition(getGlobalConfig().WarpDrive.env.DEBUG)) {
629
- responseData = deepFreeze(responseData);
630
- }
631
- this.response = responseData;
632
- this.god.response = responseData;
633
- const sizeHint = response.headers?.get('content-length');
634
- this.stream.promise.sizeHint = sizeHint ? parseInt(sizeHint, 10) : 0;
635
- } else {
636
- this.response = response;
637
- this.god.response = response;
638
- }
639
- }
640
- }
641
- class Context {
642
- /** @internal */
643
-
644
- /** @internal */
645
-
646
- /** @internal */
647
-
648
- constructor(owner, isCacheHandler) {
649
- this.id = owner.requestId;
650
- this.___owner = owner;
651
- this.request = owner.enhancedRequest;
652
- this._isCacheHandler = isCacheHandler;
653
- this._finalized = false;
654
- }
655
- setStream(stream) {
656
- this.___owner.setStream(stream);
657
- }
658
- setResponse(response) {
659
- this.___owner.setResponse(response);
660
- }
661
- setIdentifier(identifier) {
662
- macroCondition(getGlobalConfig().WarpDrive.env.DEBUG) ? (test => {
663
- if (!test) {
664
- throw new Error(`setIdentifier may only be used synchronously from a CacheHandler`);
665
- }
666
- })(identifier && this._isCacheHandler && !this._finalized) : {};
667
- this.___owner.god.identifier = identifier;
668
- }
669
- get hasRequestedStream() {
670
- return this.___owner.hasRequestedStream;
671
- }
672
-
673
- /** @private */
674
- _finalize() {
675
- this._finalized = true;
676
- }
677
- }
678
678
  export { IS_CACHE_HANDLER as I, cloneResponseProperties as a, assertValidRequest as b, createDeferred as c, getRequestResult as d, executeNextHandler as e, clearRequestResult as f, getPromiseResult as g, setPromiseResult as s, upgradePromise as u };
@@ -349,6 +349,7 @@ function implicitKeyFor(type, key) {
349
349
  function syncMeta(definition, inverseDefinition) {
350
350
  definition.inverseKind = inverseDefinition.kind;
351
351
  definition.inverseKey = inverseDefinition.key;
352
+ definition.inverseName = inverseDefinition.name;
352
353
  definition.inverseType = inverseDefinition.type;
353
354
  definition.inverseIsAsync = inverseDefinition.isAsync;
354
355
  definition.inverseIsCollection = inverseDefinition.isCollection;
@@ -366,7 +367,8 @@ function upgradeMeta(meta) {
366
367
  const niceMeta = {};
367
368
  const options = meta.options;
368
369
  niceMeta.kind = meta.kind;
369
- niceMeta.key = meta.name;
370
+ niceMeta.key = meta.sourceKey ?? meta.name;
371
+ niceMeta.name = meta.name;
370
372
  niceMeta.type = meta.type;
371
373
  macroCondition(getGlobalConfig().WarpDrive.env.DEBUG) ? (test => {
372
374
  if (!test) {
@@ -379,6 +381,7 @@ function upgradeMeta(meta) {
379
381
  niceMeta.isPolymorphic = options && !!options.polymorphic;
380
382
  niceMeta.isLinksMode = options.linksMode ?? false;
381
383
  niceMeta.inverseKey = options && options.inverse || STR_LATER;
384
+ niceMeta.inverseName = options && options.inverse || STR_LATER;
382
385
  niceMeta.inverseType = STR_LATER;
383
386
  niceMeta.inverseIsAsync = BOOL_LATER;
384
387
  niceMeta.inverseIsImplicit = options && options.inverse === null || BOOL_LATER;
@@ -502,12 +505,13 @@ function upgradeDefinition(graph, key, propertyName, isImplicit = false) {
502
505
  }
503
506
  })(!isImplicit) : {};
504
507
  const relationships = storeWrapper.schema.fields(key);
508
+ const relationshipsBySourceKey = storeWrapper.schema.cacheFields?.(key) ?? relationships;
505
509
  macroCondition(getGlobalConfig().WarpDrive.env.DEBUG) ? (test => {
506
510
  if (!test) {
507
511
  throw new Error(`Expected to have a relationship definition for ${type} but none was found.`);
508
512
  }
509
513
  })(relationships) : {};
510
- const meta = relationships.get(propertyName);
514
+ const meta = relationshipsBySourceKey.get(propertyName);
511
515
  if (!meta) {
512
516
  // TODO potentially we should just be permissive here since this is an implicit relationship
513
517
  // and not require the lookup table to be populated
@@ -564,6 +568,7 @@ function upgradeDefinition(graph, key, propertyName, isImplicit = false) {
564
568
  kind: 'belongsTo',
565
569
  // this must be updated when we find the first belongsTo or hasMany definition that matches
566
570
  key: definition.inverseKey,
571
+ name: definition.inverseName,
567
572
  type: type,
568
573
  isAsync: false,
569
574
  // this must be updated when we find the first belongsTo or hasMany definition that matches
@@ -578,6 +583,7 @@ function upgradeDefinition(graph, key, propertyName, isImplicit = false) {
578
583
  inverseDefinition = null;
579
584
  } else {
580
585
  // CASE: We have an explicit inverse or were able to resolve one
586
+ // for the inverse we use "name" for lookup not "sourceKey"
581
587
  const inverseDefinitions = storeWrapper.schema.fields({
582
588
  type: inverseType
583
589
  });
@@ -710,7 +716,8 @@ function upgradeDefinition(graph, key, propertyName, isImplicit = false) {
710
716
  return info;
711
717
  }
712
718
  function inverseForRelationship(store, resourceKey, key) {
713
- const definition = store.schema.fields(resourceKey).get(key);
719
+ const fields = store.schema.fields(resourceKey);
720
+ const definition = fields.get(key);
714
721
  if (!definition) {
715
722
  return null;
716
723
  }
@@ -819,6 +826,7 @@ if (macroCondition(getGlobalConfig().WarpDrive.env.DEBUG)) {
819
826
  function inverseDefinition(definition) {
820
827
  return {
821
828
  key: definition.inverseKey,
829
+ name: definition.inverseName,
822
830
  type: definition.inverseType,
823
831
  kind: definition.inverseKind,
824
832
  isAsync: definition.inverseIsAsync,
@@ -827,6 +835,7 @@ if (macroCondition(getGlobalConfig().WarpDrive.env.DEBUG)) {
827
835
  isCollection: definition.inverseIsCollection,
828
836
  isImplicit: definition.inverseIsImplicit,
829
837
  inverseKey: definition.key,
838
+ inverseName: definition.name,
830
839
  inverseType: definition.type,
831
840
  inverseKind: definition.kind,
832
841
  inverseIsAsync: definition.isAsync,
@@ -2151,6 +2160,7 @@ function createCollectionEdge(definition, identifier) {
2151
2160
  _diff: undefined
2152
2161
  };
2153
2162
  }
2163
+ const cp = structuredClone;
2154
2164
  function legacyGetCollectionRelationshipData(source, getRemoteState) {
2155
2165
  source.accessed = true;
2156
2166
  const payload = {};
@@ -2158,10 +2168,10 @@ function legacyGetCollectionRelationshipData(source, getRemoteState) {
2158
2168
  payload.data = getRemoteState ? source.remoteState.slice() : computeLocalState(source);
2159
2169
  }
2160
2170
  if (source.links) {
2161
- payload.links = source.links;
2171
+ payload.links = cp(source.links);
2162
2172
  }
2163
2173
  if (source.meta) {
2164
- payload.meta = source.meta;
2174
+ payload.meta = cp(source.meta);
2165
2175
  }
2166
2176
  return payload;
2167
2177
  }
@@ -3331,7 +3341,7 @@ function isReordered(relationship) {
3331
3341
  /**
3332
3342
  Provides a performance tuned normalized graph for intelligently managing relationships between resources based on identity
3333
3343
 
3334
- While this Graph is abstract, it currently is a private implementation required as a peer-dependency by the {JSON:API} Cache Implementation.
3344
+ While this Graph is abstract, it currently is a private implementation required as a peer-dependency by the {json:api} Cache Implementation.
3335
3345
 
3336
3346
  We intend to make this Graph public API after some additional iteration during the 5.x timeframe, until then all APIs should be considered experimental and unstable, not fit for direct application or 3rd party library usage.
3337
3347