@warp-drive/core 5.8.0-alpha.4 → 5.8.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.
- package/README.md +1 -1
- package/declarations/build-config.d.ts +18 -1
- package/declarations/index.d.ts +80 -3
- package/declarations/reactive/-private/schema.d.ts +77 -4
- package/declarations/store/-private/caches/instance-cache.d.ts +2 -3
- package/declarations/store/-private/default-cache-policy.d.ts +147 -129
- package/declarations/store/-private/managers/cache-capabilities-manager.d.ts +1 -1
- package/declarations/store/-private/new-core-tmp/promise-state.d.ts +1 -0
- package/declarations/store/-private/store-service.d.ts +41 -62
- package/declarations/store/-types/q/cache-capabilities-manager.d.ts +1 -1
- package/declarations/store/deprecated/store.d.ts +32 -31
- package/declarations/types/request.d.ts +4 -3
- package/declarations/types/schema/fields.d.ts +11 -0
- package/declarations/{store/-types/q → types/schema}/schema-service.d.ts +11 -9
- package/declarations/types.d.ts +1 -1
- package/dist/build-config.js +1 -1
- package/dist/default-cache-policy-D7_u4YRH.js +572 -0
- package/dist/{context-C_7OLieY.js → future-BKkJJkj7.js} +174 -174
- package/dist/{request-state-CUuZzgvE.js → index-Cg2akouS.js} +9977 -8767
- package/dist/index.js +6 -382
- package/dist/reactive.js +2 -781
- package/dist/request.js +1 -1
- package/dist/store/-private.js +1 -1
- package/dist/store.js +1 -533
- package/dist/types/-private.js +1 -1
- package/dist/types/request.js +2 -1
- package/dist/types/schema/fields.js +14 -0
- package/dist/types/schema/schema-service.js +0 -0
- package/package.json +3 -3
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { STRUCTURED, IS_FUTURE
|
|
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 };
|