@warp-drive/core 5.8.0-alpha.4 → 5.8.0-alpha.40

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 (248) hide show
  1. package/README.md +22 -38
  2. package/declarations/build-config.d.ts +18 -1
  3. package/declarations/graph/-private/-edge-definition.d.ts +12 -2
  4. package/declarations/index.d.ts +90 -8
  5. package/declarations/reactive/-private/document.d.ts +58 -46
  6. package/declarations/reactive/-private/record.d.ts +10 -1
  7. package/declarations/reactive/-private/schema.d.ts +77 -4
  8. package/declarations/reactive/-private.d.ts +1 -0
  9. package/declarations/reactive.d.ts +13 -7
  10. package/declarations/request/-private/types.d.ts +1 -1
  11. package/declarations/request.d.ts +47 -0
  12. package/declarations/store/-private/caches/instance-cache.d.ts +5 -6
  13. package/declarations/store/-private/default-cache-policy.d.ts +147 -129
  14. package/declarations/store/-private/managers/cache-capabilities-manager.d.ts +1 -1
  15. package/declarations/store/-private/managers/cache-key-manager.d.ts +26 -8
  16. package/declarations/store/-private/managers/cache-manager.d.ts +6 -4
  17. package/declarations/store/-private/managers/notification-manager.d.ts +1 -1
  18. package/declarations/store/-private/new-core-tmp/promise-state.d.ts +1 -0
  19. package/declarations/store/-private/new-core-tmp/request-state.d.ts +1 -1
  20. package/declarations/store/-private/store-service.d.ts +43 -64
  21. package/declarations/store/-private.d.ts +0 -1
  22. package/declarations/store/-types/q/cache-capabilities-manager.d.ts +1 -1
  23. package/declarations/store/deprecated/-private.d.ts +1 -1
  24. package/declarations/store/deprecated/store.d.ts +33 -32
  25. package/declarations/store.d.ts +1 -0
  26. package/declarations/types/cache.d.ts +8 -6
  27. package/declarations/types/record.d.ts +132 -0
  28. package/declarations/types/request.d.ts +26 -14
  29. package/declarations/types/schema/fields.d.ts +33 -9
  30. package/declarations/{store/-types/q → types/schema}/schema-service.d.ts +15 -13
  31. package/declarations/types/spec/document.d.ts +34 -0
  32. package/declarations/types/symbols.d.ts +2 -2
  33. package/declarations/types.d.ts +1 -1
  34. package/dist/build-config.js +1 -1
  35. package/dist/default-cache-policy-D7_u4YRH.js +572 -0
  36. package/dist/graph/-private.js +13 -4
  37. package/dist/{request-state-CUuZzgvE.js → index-BKcD4JZK.js} +10018 -8847
  38. package/dist/index.js +6 -382
  39. package/dist/reactive.js +4 -778
  40. package/dist/{context-C_7OLieY.js → request-oqoLC9rz.js} +219 -172
  41. package/dist/request.js +1 -1
  42. package/dist/store/-private.js +1 -1
  43. package/dist/store.js +1 -533
  44. package/dist/types/-private.js +1 -1
  45. package/dist/types/record.js +127 -0
  46. package/dist/types/request.js +14 -12
  47. package/dist/types/schema/fields.js +14 -0
  48. package/dist/types/schema/schema-service.js +0 -0
  49. package/dist/types/symbols.js +2 -2
  50. package/dist/unpkg/dev/-private-3C1OkYtZ.js +39 -0
  51. package/dist/unpkg/dev/build-config/babel-macros.js +1 -0
  52. package/dist/unpkg/dev/build-config/canary-features.js +1 -0
  53. package/dist/unpkg/dev/build-config/debugging.js +1 -0
  54. package/dist/unpkg/dev/build-config/deprecations.js +1 -0
  55. package/dist/unpkg/dev/build-config/env.js +1 -0
  56. package/dist/unpkg/dev/build-config/macros.js +1 -0
  57. package/dist/unpkg/dev/build-config.js +1 -0
  58. package/dist/unpkg/dev/configure-BC66sfNO.js +183 -0
  59. package/dist/unpkg/dev/configure.js +1 -0
  60. package/dist/unpkg/dev/graph/-private.js +3131 -0
  61. package/dist/unpkg/dev/index-DqhXrNZ_.js +11160 -0
  62. package/dist/unpkg/dev/index.js +6 -0
  63. package/dist/unpkg/dev/reactive/-private.js +1 -0
  64. package/dist/unpkg/dev/reactive.js +127 -0
  65. package/dist/unpkg/dev/request-CA9K0gXq.js +719 -0
  66. package/dist/unpkg/dev/request.js +1 -0
  67. package/dist/unpkg/dev/runtime-DGG4CvlW.js +135 -0
  68. package/dist/unpkg/dev/store/-private.js +56 -0
  69. package/dist/unpkg/dev/store.js +558 -0
  70. package/dist/unpkg/dev/types/-private.js +69 -0
  71. package/dist/unpkg/dev/types/cache/aliases.js +0 -0
  72. package/dist/unpkg/dev/types/cache/change.js +0 -0
  73. package/dist/unpkg/dev/types/cache/mutations.js +0 -0
  74. package/dist/unpkg/dev/types/cache/operations.js +0 -0
  75. package/dist/unpkg/dev/types/cache/relationship.js +0 -0
  76. package/dist/unpkg/dev/types/cache.js +0 -0
  77. package/dist/unpkg/dev/types/graph.js +0 -0
  78. package/dist/unpkg/dev/types/identifier.js +61 -0
  79. package/dist/unpkg/dev/types/json/raw.js +0 -0
  80. package/dist/unpkg/dev/types/params.js +0 -0
  81. package/dist/unpkg/dev/types/record.js +191 -0
  82. package/dist/unpkg/dev/types/request.js +77 -0
  83. package/dist/unpkg/dev/types/runtime.js +34 -0
  84. package/dist/unpkg/dev/types/schema/concepts.js +0 -0
  85. package/dist/unpkg/dev/types/schema/fields.js +505 -0
  86. package/dist/unpkg/dev/types/schema/fields.type-test.js +0 -0
  87. package/dist/unpkg/dev/types/schema/schema-service.js +0 -0
  88. package/dist/unpkg/dev/types/spec/document.js +0 -0
  89. package/dist/unpkg/dev/types/spec/error.js +0 -0
  90. package/dist/unpkg/dev/types/spec/json-api-raw.js +0 -0
  91. package/dist/unpkg/dev/types/symbols.js +84 -0
  92. package/dist/unpkg/dev/types/utils.js +0 -0
  93. package/dist/unpkg/dev/types.js +0 -0
  94. package/dist/unpkg/dev/utils/string.js +91 -0
  95. package/dist/unpkg/dev-deprecated/-private-3C1OkYtZ.js +39 -0
  96. package/dist/unpkg/dev-deprecated/build-config/babel-macros.js +1 -0
  97. package/dist/unpkg/dev-deprecated/build-config/canary-features.js +1 -0
  98. package/dist/unpkg/dev-deprecated/build-config/debugging.js +1 -0
  99. package/dist/unpkg/dev-deprecated/build-config/deprecations.js +1 -0
  100. package/dist/unpkg/dev-deprecated/build-config/env.js +1 -0
  101. package/dist/unpkg/dev-deprecated/build-config/macros.js +1 -0
  102. package/dist/unpkg/dev-deprecated/build-config.js +1 -0
  103. package/dist/unpkg/dev-deprecated/configure-BC66sfNO.js +183 -0
  104. package/dist/unpkg/dev-deprecated/configure.js +1 -0
  105. package/dist/unpkg/dev-deprecated/graph/-private.js +3326 -0
  106. package/dist/unpkg/dev-deprecated/index-BBlq5is_.js +11775 -0
  107. package/dist/unpkg/dev-deprecated/index.js +5 -0
  108. package/dist/unpkg/dev-deprecated/reactive/-private.js +1 -0
  109. package/dist/unpkg/dev-deprecated/reactive.js +127 -0
  110. package/dist/unpkg/dev-deprecated/request-CA9K0gXq.js +719 -0
  111. package/dist/unpkg/dev-deprecated/request.js +1 -0
  112. package/dist/unpkg/dev-deprecated/runtime-DfhJzpZH.js +135 -0
  113. package/dist/unpkg/dev-deprecated/store/-private.js +2 -0
  114. package/dist/unpkg/dev-deprecated/store.js +558 -0
  115. package/dist/unpkg/dev-deprecated/types/-private.js +69 -0
  116. package/dist/unpkg/dev-deprecated/types/cache/aliases.js +0 -0
  117. package/dist/unpkg/dev-deprecated/types/cache/change.js +0 -0
  118. package/dist/unpkg/dev-deprecated/types/cache/mutations.js +0 -0
  119. package/dist/unpkg/dev-deprecated/types/cache/operations.js +0 -0
  120. package/dist/unpkg/dev-deprecated/types/cache/relationship.js +0 -0
  121. package/dist/unpkg/dev-deprecated/types/cache.js +0 -0
  122. package/dist/unpkg/dev-deprecated/types/graph.js +0 -0
  123. package/dist/unpkg/dev-deprecated/types/identifier.js +61 -0
  124. package/dist/unpkg/dev-deprecated/types/json/raw.js +0 -0
  125. package/dist/unpkg/dev-deprecated/types/params.js +0 -0
  126. package/dist/unpkg/dev-deprecated/types/record.js +191 -0
  127. package/dist/unpkg/dev-deprecated/types/request.js +77 -0
  128. package/dist/unpkg/dev-deprecated/types/runtime.js +34 -0
  129. package/dist/unpkg/dev-deprecated/types/schema/concepts.js +0 -0
  130. package/dist/unpkg/dev-deprecated/types/schema/fields.js +505 -0
  131. package/dist/unpkg/dev-deprecated/types/schema/fields.type-test.js +0 -0
  132. package/dist/unpkg/dev-deprecated/types/schema/schema-service.js +0 -0
  133. package/dist/unpkg/dev-deprecated/types/spec/document.js +0 -0
  134. package/dist/unpkg/dev-deprecated/types/spec/error.js +0 -0
  135. package/dist/unpkg/dev-deprecated/types/spec/json-api-raw.js +0 -0
  136. package/dist/unpkg/dev-deprecated/types/symbols.js +84 -0
  137. package/dist/unpkg/dev-deprecated/types/utils.js +0 -0
  138. package/dist/unpkg/dev-deprecated/types.js +0 -0
  139. package/dist/unpkg/dev-deprecated/utils/string.js +91 -0
  140. package/dist/unpkg/prod/-private-3C1OkYtZ.js +39 -0
  141. package/dist/unpkg/prod/build-config/babel-macros.js +1 -0
  142. package/dist/unpkg/prod/build-config/canary-features.js +1 -0
  143. package/dist/unpkg/prod/build-config/debugging.js +1 -0
  144. package/dist/unpkg/prod/build-config/deprecations.js +1 -0
  145. package/dist/unpkg/prod/build-config/env.js +1 -0
  146. package/dist/unpkg/prod/build-config/macros.js +1 -0
  147. package/dist/unpkg/prod/build-config.js +1 -0
  148. package/dist/unpkg/prod/configure-C0C1LpG6.js +158 -0
  149. package/dist/unpkg/prod/configure.js +1 -0
  150. package/dist/unpkg/prod/graph/-private.js +2234 -0
  151. package/dist/unpkg/prod/handler-LAyD1Y5l.js +1619 -0
  152. package/dist/unpkg/prod/hooks-BfiqDg3O.js +26 -0
  153. package/dist/unpkg/prod/index.js +481 -0
  154. package/dist/unpkg/prod/promise-state-ipG60SdD.js +6738 -0
  155. package/dist/unpkg/prod/reactive/-private.js +1 -0
  156. package/dist/unpkg/prod/reactive.js +127 -0
  157. package/dist/unpkg/prod/request-CN2LxbYX.js +437 -0
  158. package/dist/unpkg/prod/request.js +1 -0
  159. package/dist/unpkg/prod/store/-private.js +127 -0
  160. package/dist/unpkg/prod/store.js +437 -0
  161. package/dist/unpkg/prod/types/-private.js +49 -0
  162. package/dist/unpkg/prod/types/cache/aliases.js +0 -0
  163. package/dist/unpkg/prod/types/cache/change.js +0 -0
  164. package/dist/unpkg/prod/types/cache/mutations.js +0 -0
  165. package/dist/unpkg/prod/types/cache/operations.js +0 -0
  166. package/dist/unpkg/prod/types/cache/relationship.js +0 -0
  167. package/dist/unpkg/prod/types/cache.js +0 -0
  168. package/dist/unpkg/prod/types/graph.js +0 -0
  169. package/dist/unpkg/prod/types/identifier.js +61 -0
  170. package/dist/unpkg/prod/types/json/raw.js +0 -0
  171. package/dist/unpkg/prod/types/params.js +0 -0
  172. package/dist/unpkg/prod/types/record.js +191 -0
  173. package/dist/unpkg/prod/types/request.js +77 -0
  174. package/dist/unpkg/prod/types/runtime.js +34 -0
  175. package/dist/unpkg/prod/types/schema/concepts.js +0 -0
  176. package/dist/unpkg/prod/types/schema/fields.js +505 -0
  177. package/dist/unpkg/prod/types/schema/fields.type-test.js +0 -0
  178. package/dist/unpkg/prod/types/schema/schema-service.js +0 -0
  179. package/dist/unpkg/prod/types/spec/document.js +0 -0
  180. package/dist/unpkg/prod/types/spec/error.js +0 -0
  181. package/dist/unpkg/prod/types/spec/json-api-raw.js +0 -0
  182. package/dist/unpkg/prod/types/symbols.js +84 -0
  183. package/dist/unpkg/prod/types/utils.js +0 -0
  184. package/dist/unpkg/prod/types.js +0 -0
  185. package/dist/unpkg/prod/utils/string.js +72 -0
  186. package/dist/unpkg/prod-deprecated/-private-3C1OkYtZ.js +39 -0
  187. package/dist/unpkg/prod-deprecated/build-config/babel-macros.js +1 -0
  188. package/dist/unpkg/prod-deprecated/build-config/canary-features.js +1 -0
  189. package/dist/unpkg/prod-deprecated/build-config/debugging.js +1 -0
  190. package/dist/unpkg/prod-deprecated/build-config/deprecations.js +1 -0
  191. package/dist/unpkg/prod-deprecated/build-config/env.js +1 -0
  192. package/dist/unpkg/prod-deprecated/build-config/macros.js +1 -0
  193. package/dist/unpkg/prod-deprecated/build-config.js +1 -0
  194. package/dist/unpkg/prod-deprecated/configure-BQ8CpIcW.js +158 -0
  195. package/dist/unpkg/prod-deprecated/configure.js +1 -0
  196. package/dist/unpkg/prod-deprecated/graph/-private.js +2407 -0
  197. package/dist/unpkg/prod-deprecated/handler-D639oFvl.js +334 -0
  198. package/dist/unpkg/prod-deprecated/hooks-DGvi9teJ.js +26 -0
  199. package/dist/unpkg/prod-deprecated/index.js +481 -0
  200. package/dist/unpkg/prod-deprecated/promise-state-CYvoIPna.js +8458 -0
  201. package/dist/unpkg/prod-deprecated/reactive/-private.js +1 -0
  202. package/dist/unpkg/prod-deprecated/reactive.js +126 -0
  203. package/dist/unpkg/prod-deprecated/request-CN2LxbYX.js +437 -0
  204. package/dist/unpkg/prod-deprecated/request.js +1 -0
  205. package/dist/unpkg/prod-deprecated/store/-private.js +89 -0
  206. package/dist/unpkg/prod-deprecated/store.js +437 -0
  207. package/dist/unpkg/prod-deprecated/types/-private.js +49 -0
  208. package/dist/unpkg/prod-deprecated/types/cache/aliases.js +0 -0
  209. package/dist/unpkg/prod-deprecated/types/cache/change.js +0 -0
  210. package/dist/unpkg/prod-deprecated/types/cache/mutations.js +0 -0
  211. package/dist/unpkg/prod-deprecated/types/cache/operations.js +0 -0
  212. package/dist/unpkg/prod-deprecated/types/cache/relationship.js +0 -0
  213. package/dist/unpkg/prod-deprecated/types/cache.js +0 -0
  214. package/dist/unpkg/prod-deprecated/types/graph.js +0 -0
  215. package/dist/unpkg/prod-deprecated/types/identifier.js +61 -0
  216. package/dist/unpkg/prod-deprecated/types/json/raw.js +0 -0
  217. package/dist/unpkg/prod-deprecated/types/params.js +0 -0
  218. package/dist/unpkg/prod-deprecated/types/record.js +191 -0
  219. package/dist/unpkg/prod-deprecated/types/request.js +77 -0
  220. package/dist/unpkg/prod-deprecated/types/runtime.js +34 -0
  221. package/dist/unpkg/prod-deprecated/types/schema/concepts.js +0 -0
  222. package/dist/unpkg/prod-deprecated/types/schema/fields.js +505 -0
  223. package/dist/unpkg/prod-deprecated/types/schema/fields.type-test.js +0 -0
  224. package/dist/unpkg/prod-deprecated/types/schema/schema-service.js +0 -0
  225. package/dist/unpkg/prod-deprecated/types/spec/document.js +0 -0
  226. package/dist/unpkg/prod-deprecated/types/spec/error.js +0 -0
  227. package/dist/unpkg/prod-deprecated/types/spec/json-api-raw.js +0 -0
  228. package/dist/unpkg/prod-deprecated/types/symbols.js +84 -0
  229. package/dist/unpkg/prod-deprecated/types/utils.js +0 -0
  230. package/dist/unpkg/prod-deprecated/types.js +0 -0
  231. package/dist/unpkg/prod-deprecated/utils/string.js +72 -0
  232. package/logos/README.md +2 -2
  233. package/logos/logo-yellow-slab.svg +1 -0
  234. package/logos/word-mark-black.svg +1 -0
  235. package/logos/word-mark-white.svg +1 -0
  236. package/package.json +11 -3
  237. package/logos/NCC-1701-a-blue.svg +0 -4
  238. package/logos/NCC-1701-a-gold.svg +0 -4
  239. package/logos/NCC-1701-a-gold_100.svg +0 -1
  240. package/logos/NCC-1701-a-gold_base-64.txt +0 -1
  241. package/logos/NCC-1701-a.svg +0 -4
  242. package/logos/docs-badge.svg +0 -2
  243. package/logos/ember-data-logo-dark.svg +0 -12
  244. package/logos/ember-data-logo-light.svg +0 -12
  245. package/logos/social1.png +0 -0
  246. package/logos/social2.png +0 -0
  247. package/logos/warp-drive-logo-dark.svg +0 -4
  248. package/logos/warp-drive-logo-gold.svg +0 -4
@@ -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,51 @@ 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
678
 
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
- }
679
+ /**
680
+ * Brands the supplied object with the supplied response type.
681
+ *
682
+ * ```ts
683
+ * import type { ReactiveDataDocument } from '@warp-drive/core/reactive';
684
+ * import { withResponseType } from '@warp-drive/core/request';
685
+ * import type { User } from '#/data/user.ts'
686
+ *
687
+ * const result = await store.request(
688
+ * withResponseType<ReactiveDataDocument<User>>({ url: '/users/1' })
689
+ * );
690
+ *
691
+ * result.content.data; // will have type User
692
+ * ```
693
+ *
694
+ */
695
+ function withResponseType(obj) {
696
+ return obj;
697
+ }
672
698
 
673
- /** @private */
674
- _finalize() {
675
- this._finalized = true;
676
- }
699
+ /**
700
+ * Brands the supplied object with the supplied response type
701
+ * wrapped in {@link ReactiveDataDocument}. This is a convenience for
702
+ * the common case of using {@link withResponseType} with `ReactiveDataDocument`.
703
+ *
704
+ * ```ts
705
+ * import { withReactiveResponse } from '@warp-drive/core/request';
706
+ * import type { User } from '#/data/user.ts'
707
+ *
708
+ * const result = await store.request(
709
+ * withReactiveResponse<User>({ url: '/users/1' })
710
+ * );
711
+ *
712
+ * result.content.data; // will have type User
713
+ * ```
714
+ *
715
+ * @public
716
+ */
717
+ function withReactiveResponse(obj) {
718
+ return obj;
677
719
  }
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 };
720
+
721
+ /**
722
+ * @deprecated use {@link withResponseType} instead
723
+ */
724
+ const withBrand = withResponseType;
725
+ export { IS_CACHE_HANDLER as I, assertValidRequest as a, getRequestResult as b, cloneResponseProperties as c, clearRequestResult as d, executeNextHandler as e, withResponseType as f, getPromiseResult as g, withReactiveResponse as h, createDeferred as i, setPromiseResult as s, upgradePromise as u, withBrand as w };
package/dist/request.js CHANGED
@@ -1 +1 @@
1
- export { c as createDeferred, g as getPromiseResult, s as setPromiseResult } from "./context-C_7OLieY.js";
1
+ export { i as createDeferred, g as getPromiseResult, s as setPromiseResult, w as withBrand, h as withReactiveResponse, f as withResponseType } from "./request-oqoLC9rz.js";
@@ -1,2 +1,2 @@
1
- export { C as CacheHandler, D as DISPOSE, R as RecordArrayManager, E as Signals, S as Store, k as StoreMap, _ as _clearCaches, n as _deprecatingNormalize, h as assertPrivateCapabilities, d as assertPrivateStore, b as coerceId, c as constructResource, J as consumeInternalSignal, G as createInternalMemo, l as createLegacyManyArray, q as createRequestSubscription, A as defineGate, B as defineNonEnumerableSignal, z as defineSignal, e as ensureStringId, y as entangleInitiallyStaleSignal, x as entangleSignal, f as fastPush, w as gate, K as getOrCreateInternalSignal, p as getPromiseState, t as getRequestState, g as isPrivateStore, a as isRequestKey, i as isResourceKey, m as log, o as logGroup, v as memoized, I as notifyInternalSignal, F as peekInternalSignal, r as recordIdentifierFor, j as setRecordIdentifier, u as signal, s as storeFor, H as withSignalStore } from "../request-state-CUuZzgvE.js";
1
+ export { C as CacheHandler, D as DISPOSE, R as RecordArrayManager, B as Signals, S as Store, k as StoreMap, _ as _clearCaches, n as _deprecatingNormalize, h as assertPrivateCapabilities, d as assertPrivateStore, b as coerceId, c as constructResource, I as consumeInternalSignal, F as createInternalMemo, l as createLegacyManyArray, p as createRequestSubscription, z as defineGate, A as defineNonEnumerableSignal, y as defineSignal, e as ensureStringId, x as entangleInitiallyStaleSignal, w as entangleSignal, f as fastPush, v as gate, J as getOrCreateInternalSignal, q as getRequestState, g as isPrivateStore, a as isRequestKey, i as isResourceKey, m as log, o as logGroup, u as memoized, H as notifyInternalSignal, E as peekInternalSignal, r as recordIdentifierFor, j as setRecordIdentifier, t as signal, s as storeFor, G as withSignalStore } from "../index-BKcD4JZK.js";
2
2
  export { A as ARRAY_SIGNAL, O as OBJECT_SIGNAL, w as waitFor } from "../configure-C3x8YXzL.js";