@warp-drive/core 5.9.0-beta.1 → 5.9.0-beta.3
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/dist/-private-BL9zXgJB.js +3530 -0
- package/dist/-private-BL9zXgJB.js.map +1 -0
- package/dist/{-private-DMzvF_Q6.js → -private-Cxa8cMBj.js} +2 -2
- package/dist/-private-Cxa8cMBj.js.map +1 -0
- package/dist/{unpkg/dev-deprecated/-private-DL4tfrv9.js → -private-xK1KgxZJ.js} +2 -2
- package/dist/{-private-b1g4dhl0.js.map → -private-xK1KgxZJ.js.map} +1 -1
- package/{declarations/concepts-LHsLJZMl.d.ts → dist/concepts-DFldVwEM.d.ts} +2 -2
- package/{declarations/concepts-LHsLJZMl.d.ts.map → dist/concepts-DFldVwEM.d.ts.map} +1 -1
- package/dist/configure.js +1 -1
- package/dist/graph/-private.d.ts +2 -0
- package/dist/graph/-private.js +46 -33
- package/dist/graph/-private.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +1 -1
- package/{declarations/internal-Cz-893zD.d.ts → dist/internal-DtWOpxrR.d.ts} +2763 -2271
- package/dist/internal-DtWOpxrR.d.ts.map +1 -0
- package/dist/reactive/-private.d.ts +2 -0
- package/dist/reactive/-private.js +1 -1
- package/dist/reactive.d.ts +2 -0
- package/dist/reactive.js +3 -3
- package/{declarations → dist}/record-D3QQcaIR.d.ts.map +1 -1
- package/dist/{request--vRFALbQ.js → request-z2NByNx0.js} +2 -2
- package/dist/request-z2NByNx0.js.map +1 -0
- package/dist/request.d.ts +2 -0
- package/dist/request.js +1 -1
- package/dist/signals/-leaked.d.ts +1060 -0
- package/dist/signals/-leaked.d.ts.map +1 -0
- package/dist/signals/-leaked.js +2 -2
- package/dist/{src-Dex_phWI.js → src-s5HHjglV.js} +192 -53
- package/dist/src-s5HHjglV.js.map +1 -0
- package/dist/store/-private.d.ts +2 -0
- package/dist/store/-private.js +1 -1
- package/dist/store-DNF9Rgoh.js.map +1 -1
- package/dist/store.d.ts +2 -0
- package/{declarations → dist}/types/-private.d.ts +1 -1
- package/{declarations → dist}/types/-private.d.ts.map +1 -1
- package/dist/types/-private.js +1 -1
- package/dist/types/cache.d.ts +2 -0
- package/dist/types/record.js.map +1 -1
- package/dist/types/request.d.ts +2 -0
- package/dist/types/request.js +1 -1
- package/dist/types/request.js.map +1 -1
- package/dist/types/runtime.js +1 -1
- package/dist/types/schema/concepts.d.ts +2 -0
- package/dist/types/schema/fields.js.map +1 -1
- package/dist/types/schema/schema-service.d.ts +2 -0
- package/dist/types/symbols.js +1 -1
- package/dist/types/symbols.js.map +1 -1
- package/{declarations → dist}/types.d.ts +1 -1
- package/dist/{-private-b1g4dhl0.js → unpkg/dev/-private-BGCYELwo.js} +2 -2
- package/dist/unpkg/{dev-deprecated/-private-DL4tfrv9.js.map → dev/-private-BGCYELwo.js.map} +1 -1
- package/dist/unpkg/{dev-deprecated/-private-2RfQ2761.js → dev/-private-DhiS6yOR.js} +2 -2
- package/dist/unpkg/dev/-private-DhiS6yOR.js.map +1 -0
- package/dist/unpkg/dev/-private-pNQae3qH.js +3519 -0
- package/dist/unpkg/dev/-private-pNQae3qH.js.map +1 -0
- package/dist/unpkg/dev/configure.js +1 -1
- package/dist/unpkg/dev/graph/-private.js +46 -33
- package/dist/unpkg/dev/graph/-private.js.map +1 -1
- package/dist/unpkg/dev/index.js +1 -1
- package/dist/unpkg/dev/reactive/-private.js +1 -1
- package/dist/unpkg/dev/reactive.js +3 -3
- package/dist/unpkg/{dev-deprecated/request-DAuXbfYi.js → dev/request-BbbzRou7.js} +2 -2
- package/dist/unpkg/dev/request-BbbzRou7.js.map +1 -0
- package/dist/unpkg/dev/request.js +1 -1
- package/dist/unpkg/dev/{runtime-EoVKAhTv.js → runtime-DoDtzXJb.js} +2 -2
- package/dist/unpkg/dev/runtime-DoDtzXJb.js.map +1 -0
- package/dist/unpkg/dev/signals/-leaked.js +2 -2
- package/dist/unpkg/dev/{src-Bxlr_vue.js → src-Cf7NXXR2.js} +194 -55
- package/dist/unpkg/dev/src-Cf7NXXR2.js.map +1 -0
- package/dist/unpkg/dev/store/-private.js +1 -1
- package/dist/unpkg/{dev-deprecated/store-TcP2H4Af.js → dev/store-DamE3C4y.js} +2 -2
- package/dist/unpkg/dev/store-DamE3C4y.js.map +1 -0
- package/dist/unpkg/dev/store.js +1 -1
- package/dist/unpkg/dev/types/-private.js +1 -1
- package/dist/unpkg/dev/types/record.js.map +1 -1
- package/dist/unpkg/dev/types/request.js +1 -1
- package/dist/unpkg/dev/types/request.js.map +1 -1
- package/dist/unpkg/dev/types/runtime.js +1 -1
- package/dist/unpkg/dev/types/schema/fields.js.map +1 -1
- package/dist/unpkg/dev/types/symbols.js +1 -1
- package/dist/unpkg/dev/types/symbols.js.map +1 -1
- package/dist/unpkg/{dev/-private-DL4tfrv9.js → dev-deprecated/-private-BGCYELwo.js} +2 -2
- package/dist/unpkg/{prod/-private-Z9i0icpE.js.map → dev-deprecated/-private-BGCYELwo.js.map} +1 -1
- package/dist/unpkg/{dev/-private-2RfQ2761.js → dev-deprecated/-private-DhiS6yOR.js} +2 -2
- package/dist/unpkg/dev-deprecated/-private-DhiS6yOR.js.map +1 -0
- package/dist/unpkg/dev-deprecated/-private-pNQae3qH.js +3519 -0
- package/dist/unpkg/dev-deprecated/-private-pNQae3qH.js.map +1 -0
- package/dist/unpkg/dev-deprecated/configure.js +1 -1
- package/dist/unpkg/dev-deprecated/graph/-private.js +47 -34
- package/dist/unpkg/dev-deprecated/graph/-private.js.map +1 -1
- package/dist/unpkg/dev-deprecated/index.js +1 -1
- package/dist/unpkg/dev-deprecated/reactive/-private.js +1 -1
- package/dist/unpkg/dev-deprecated/reactive.js +3 -3
- package/dist/unpkg/{dev/request-DAuXbfYi.js → dev-deprecated/request-BbbzRou7.js} +2 -2
- package/dist/unpkg/dev-deprecated/request-BbbzRou7.js.map +1 -0
- package/dist/unpkg/dev-deprecated/request.js +1 -1
- package/dist/unpkg/dev-deprecated/{runtime-BacZMq1r.js → runtime-CPL2BGgT.js} +2 -2
- package/dist/unpkg/dev-deprecated/runtime-CPL2BGgT.js.map +1 -0
- package/dist/unpkg/dev-deprecated/signals/-leaked.js +2 -2
- package/dist/unpkg/dev-deprecated/{src-DEl2Ca3T.js → src-CSuFUXv4.js} +195 -56
- package/dist/unpkg/dev-deprecated/src-CSuFUXv4.js.map +1 -0
- package/dist/unpkg/dev-deprecated/store/-private.js +1 -1
- package/dist/unpkg/{dev/store-DmiFvT1B.js → dev-deprecated/store-Bsdz5mRe.js} +2 -2
- package/dist/unpkg/dev-deprecated/store-Bsdz5mRe.js.map +1 -0
- package/dist/unpkg/dev-deprecated/store.js +1 -1
- package/dist/unpkg/dev-deprecated/types/-private.js +1 -1
- package/dist/unpkg/dev-deprecated/types/record.js.map +1 -1
- package/dist/unpkg/dev-deprecated/types/request.js +1 -1
- package/dist/unpkg/dev-deprecated/types/request.js.map +1 -1
- package/dist/unpkg/dev-deprecated/types/runtime.js +1 -1
- package/dist/unpkg/dev-deprecated/types/schema/fields.js.map +1 -1
- package/dist/unpkg/dev-deprecated/types/symbols.js +1 -1
- package/dist/unpkg/dev-deprecated/types/symbols.js.map +1 -1
- package/dist/unpkg/prod/-private-8gd8hbwm.js +22 -0
- package/dist/unpkg/{prod-deprecated/-private-Z9i0icpE.js.map → prod/-private-8gd8hbwm.js.map} +1 -1
- package/dist/unpkg/prod/{-private-BK71-uXR.js → -private-B6aLbrgV.js} +2 -2
- package/dist/unpkg/prod/-private-B6aLbrgV.js.map +1 -0
- package/dist/unpkg/prod/-private-ggVX_Iob.js +3294 -0
- package/dist/unpkg/prod/-private-ggVX_Iob.js.map +1 -0
- package/dist/unpkg/prod/configure.js +1 -1
- package/dist/unpkg/prod/graph/-private.js +45 -32
- package/dist/unpkg/prod/graph/-private.js.map +1 -1
- package/dist/unpkg/prod/index.js +1 -1
- package/dist/unpkg/prod/reactive/-private.js +1 -1
- package/dist/unpkg/prod/reactive.js +3 -3
- package/dist/unpkg/prod/{request-BcJNzSgv.js → request-BoeppjDj.js} +2 -2
- package/dist/unpkg/prod/request-BoeppjDj.js.map +1 -0
- package/dist/unpkg/prod/request.js +1 -1
- package/dist/unpkg/prod/signals/-leaked.js +2 -2
- package/dist/unpkg/prod/{src-Dzz-j6pp.js → src-C0wuASrN.js} +196 -53
- package/dist/unpkg/prod/src-C0wuASrN.js.map +1 -0
- package/dist/unpkg/prod/store/-private.js +1 -1
- package/dist/unpkg/prod/store-BWhmb7Ob.js.map +1 -1
- package/dist/unpkg/prod/types/-private.js +1 -1
- package/dist/unpkg/prod/types/record.js.map +1 -1
- package/dist/unpkg/prod/types/request.js +1 -1
- package/dist/unpkg/prod/types/request.js.map +1 -1
- package/dist/unpkg/prod/types/runtime.js +1 -1
- package/dist/unpkg/prod/types/schema/fields.js.map +1 -1
- package/dist/unpkg/prod/types/symbols.js +1 -1
- package/dist/unpkg/prod/types/symbols.js.map +1 -1
- package/dist/unpkg/prod-deprecated/{-private-Z9i0icpE.js → -private-8gd8hbwm.js} +2 -2
- package/dist/unpkg/{dev/-private-DL4tfrv9.js.map → prod-deprecated/-private-8gd8hbwm.js.map} +1 -1
- package/dist/unpkg/prod-deprecated/{-private-BK71-uXR.js → -private-B6aLbrgV.js} +2 -2
- package/dist/unpkg/prod-deprecated/-private-B6aLbrgV.js.map +1 -0
- package/dist/unpkg/prod-deprecated/-private-ggVX_Iob.js +3294 -0
- package/dist/unpkg/prod-deprecated/-private-ggVX_Iob.js.map +1 -0
- package/dist/unpkg/prod-deprecated/configure.js +1 -1
- package/dist/unpkg/prod-deprecated/graph/-private.js +46 -35
- package/dist/unpkg/prod-deprecated/graph/-private.js.map +1 -1
- package/dist/unpkg/prod-deprecated/index.js +1 -1
- package/dist/unpkg/prod-deprecated/reactive/-private.js +1 -1
- package/dist/unpkg/prod-deprecated/reactive.js +3 -3
- package/dist/unpkg/prod-deprecated/{request-BcJNzSgv.js → request-BoeppjDj.js} +2 -2
- package/dist/unpkg/prod-deprecated/request-BoeppjDj.js.map +1 -0
- package/dist/unpkg/prod-deprecated/request.js +1 -1
- package/dist/unpkg/prod-deprecated/signals/-leaked.js +2 -2
- package/dist/unpkg/prod-deprecated/{src-BOifHFQ5.js → src-BXOgNqmz.js} +197 -54
- package/dist/unpkg/prod-deprecated/src-BXOgNqmz.js.map +1 -0
- package/dist/unpkg/prod-deprecated/store/-private.js +1 -1
- package/dist/unpkg/prod-deprecated/store-BWhmb7Ob.js.map +1 -1
- package/dist/unpkg/prod-deprecated/types/-private.js +1 -1
- package/dist/unpkg/prod-deprecated/types/record.js.map +1 -1
- package/dist/unpkg/prod-deprecated/types/request.js +1 -1
- package/dist/unpkg/prod-deprecated/types/request.js.map +1 -1
- package/dist/unpkg/prod-deprecated/types/runtime.js +1 -1
- package/dist/unpkg/prod-deprecated/types/schema/fields.js.map +1 -1
- package/dist/unpkg/prod-deprecated/types/symbols.js +1 -1
- package/dist/unpkg/prod-deprecated/types/symbols.js.map +1 -1
- package/package.json +15 -19
- package/declarations/graph/-private.d.ts +0 -2
- package/declarations/index.d.ts +0 -2
- package/declarations/internal-Cz-893zD.d.ts.map +0 -1
- package/declarations/reactive/-private.d.ts +0 -2
- package/declarations/reactive.d.ts +0 -2
- package/declarations/request.d.ts +0 -2
- package/declarations/signals/-leaked.d.ts +0 -63
- package/declarations/signals/-leaked.d.ts.map +0 -1
- package/declarations/store/-private.d.ts +0 -2
- package/declarations/store.d.ts +0 -8358
- package/declarations/store.d.ts.map +0 -1
- package/declarations/types/cache.d.ts +0 -2
- package/declarations/types/request.d.ts +0 -2
- package/declarations/types/schema/concepts.d.ts +0 -2
- package/declarations/types/schema/schema-service.d.ts +0 -2
- package/dist/-private-DMzvF_Q6.js.map +0 -1
- package/dist/-private-HjaQ1wp1.js +0 -1695
- package/dist/-private-HjaQ1wp1.js.map +0 -1
- package/dist/request--vRFALbQ.js.map +0 -1
- package/dist/src-Dex_phWI.js.map +0 -1
- package/dist/unpkg/dev/-private-2RfQ2761.js.map +0 -1
- package/dist/unpkg/dev/-private-CM1zxNws.js +0 -1684
- package/dist/unpkg/dev/-private-CM1zxNws.js.map +0 -1
- package/dist/unpkg/dev/request-DAuXbfYi.js.map +0 -1
- package/dist/unpkg/dev/runtime-EoVKAhTv.js.map +0 -1
- package/dist/unpkg/dev/src-Bxlr_vue.js.map +0 -1
- package/dist/unpkg/dev/store-DmiFvT1B.js.map +0 -1
- package/dist/unpkg/dev-deprecated/-private-2RfQ2761.js.map +0 -1
- package/dist/unpkg/dev-deprecated/-private-CM1zxNws.js +0 -1684
- package/dist/unpkg/dev-deprecated/-private-CM1zxNws.js.map +0 -1
- package/dist/unpkg/dev-deprecated/request-DAuXbfYi.js.map +0 -1
- package/dist/unpkg/dev-deprecated/runtime-BacZMq1r.js.map +0 -1
- package/dist/unpkg/dev-deprecated/src-DEl2Ca3T.js.map +0 -1
- package/dist/unpkg/dev-deprecated/store-TcP2H4Af.js.map +0 -1
- package/dist/unpkg/prod/-private-BK71-uXR.js.map +0 -1
- package/dist/unpkg/prod/-private-TNaS5Piv.js +0 -1494
- package/dist/unpkg/prod/-private-TNaS5Piv.js.map +0 -1
- package/dist/unpkg/prod/-private-Z9i0icpE.js +0 -22
- package/dist/unpkg/prod/request-BcJNzSgv.js.map +0 -1
- package/dist/unpkg/prod/src-Dzz-j6pp.js.map +0 -1
- package/dist/unpkg/prod-deprecated/-private-BK71-uXR.js.map +0 -1
- package/dist/unpkg/prod-deprecated/-private-TNaS5Piv.js +0 -1494
- package/dist/unpkg/prod-deprecated/-private-TNaS5Piv.js.map +0 -1
- package/dist/unpkg/prod-deprecated/request-BcJNzSgv.js.map +0 -1
- package/dist/unpkg/prod-deprecated/src-BOifHFQ5.js.map +0 -1
- /package/{declarations → dist}/aliases-BWYW5EhX.d.ts +0 -0
- /package/{declarations → dist}/aliases-BWYW5EhX.d.ts.map +0 -0
- /package/{declarations → dist}/build-config/babel-macros.d.ts +0 -0
- /package/{declarations → dist}/build-config/canary-features.d.ts +0 -0
- /package/{declarations → dist}/build-config/debugging.d.ts +0 -0
- /package/{declarations → dist}/build-config/deprecations.d.ts +0 -0
- /package/{declarations → dist}/build-config/env.d.ts +0 -0
- /package/{declarations → dist}/build-config/macros.d.ts +0 -0
- /package/{declarations → dist}/build-config.d.ts +0 -0
- /package/{declarations → dist}/change-C7kqv2kW.d.ts +0 -0
- /package/{declarations → dist}/change-C7kqv2kW.d.ts.map +0 -0
- /package/{declarations → dist}/configure-B_F639tN.d.ts +0 -0
- /package/{declarations → dist}/configure-B_F639tN.d.ts.map +0 -0
- /package/{declarations → dist}/configure.d.ts +0 -0
- /package/{declarations → dist}/document-BEn91SwT.d.ts +0 -0
- /package/{declarations → dist}/document-BEn91SwT.d.ts.map +0 -0
- /package/{declarations → dist}/error-50OSEhsF.d.ts +0 -0
- /package/{declarations → dist}/error-50OSEhsF.d.ts.map +0 -0
- /package/{declarations → dist}/fields-FM7peCiM.d.ts +0 -0
- /package/{declarations → dist}/fields-FM7peCiM.d.ts.map +0 -0
- /package/{declarations → dist}/graph-DLqYXP2z.d.ts +0 -0
- /package/{declarations → dist}/graph-DLqYXP2z.d.ts.map +0 -0
- /package/{declarations → dist}/identifier-DQnqOSJK.d.ts +0 -0
- /package/{declarations → dist}/identifier-DQnqOSJK.d.ts.map +0 -0
- /package/{declarations → dist}/json-api-raw-C5APJHHB.d.ts +0 -0
- /package/{declarations → dist}/json-api-raw-C5APJHHB.d.ts.map +0 -0
- /package/{declarations → dist}/mutations-CqtoGB4t.d.ts +0 -0
- /package/{declarations → dist}/mutations-CqtoGB4t.d.ts.map +0 -0
- /package/{declarations → dist}/operations-D1qA6r0_.d.ts +0 -0
- /package/{declarations → dist}/operations-D1qA6r0_.d.ts.map +0 -0
- /package/{declarations → dist}/params-DrEx3bf8.d.ts +0 -0
- /package/{declarations → dist}/params-DrEx3bf8.d.ts.map +0 -0
- /package/{declarations → dist}/raw-D5hnjiq7.d.ts +0 -0
- /package/{declarations → dist}/raw-D5hnjiq7.d.ts.map +0 -0
- /package/{declarations → dist}/record-D3QQcaIR.d.ts +0 -0
- /package/{declarations → dist}/relationship-CmHzMPKf.d.ts +0 -0
- /package/{declarations → dist}/relationship-CmHzMPKf.d.ts.map +0 -0
- /package/{declarations → dist}/symbols-DjRDCeX0.d.ts +0 -0
- /package/{declarations → dist}/symbols-DjRDCeX0.d.ts.map +0 -0
- /package/{declarations → dist}/types/cache/aliases.d.ts +0 -0
- /package/{declarations → dist}/types/cache/change.d.ts +0 -0
- /package/{declarations → dist}/types/cache/mutations.d.ts +0 -0
- /package/{declarations → dist}/types/cache/operations.d.ts +0 -0
- /package/{declarations → dist}/types/cache/relationship.d.ts +0 -0
- /package/{declarations → dist}/types/graph.d.ts +0 -0
- /package/{declarations → dist}/types/identifier.d.ts +0 -0
- /package/{declarations → dist}/types/json/raw.d.ts +0 -0
- /package/{declarations → dist}/types/params.d.ts +0 -0
- /package/{declarations → dist}/types/record.d.ts +0 -0
- /package/{declarations → dist}/types/runtime.d.ts +0 -0
- /package/{declarations → dist}/types/runtime.d.ts.map +0 -0
- /package/{declarations → dist}/types/schema/fields.d.ts +0 -0
- /package/{declarations → dist}/types/schema/fields.type-test.d.ts +0 -0
- /package/{declarations → dist}/types/spec/document.d.ts +0 -0
- /package/{declarations → dist}/types/spec/error.d.ts +0 -0
- /package/{declarations → dist}/types/spec/json-api-raw.d.ts +0 -0
- /package/{declarations → dist}/types/symbols.d.ts +0 -0
- /package/{declarations → dist}/types/utils.d.ts +0 -0
- /package/{declarations → dist}/utils/string.d.ts +0 -0
- /package/{declarations → dist}/utils/string.d.ts.map +0 -0
- /package/{declarations → dist}/utils-BtURiy8l.d.ts +0 -0
- /package/{declarations → dist}/utils-BtURiy8l.d.ts.map +0 -0
package/dist/unpkg/prod/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { D as setIdentifierUpdateMethod, E as setIdentifierResetMethod, I as storeFor, O as setKeyInfoForResource, P as recordIdentifierFor, T as setIdentifierGenerationMethod, _ as Store, g as CacheHandler, n as RequestManager, r as Fetch, t as useRecommendedStore, w as setIdentifierForgetMethod } from "./src-
|
|
1
|
+
import { D as setIdentifierUpdateMethod, E as setIdentifierResetMethod, I as storeFor, O as setKeyInfoForResource, P as recordIdentifierFor, T as setIdentifierGenerationMethod, _ as Store, g as CacheHandler, n as RequestManager, r as Fetch, t as useRecommendedStore, w as setIdentifierForgetMethod } from "./src-C0wuASrN.js";
|
|
2
2
|
|
|
3
3
|
export { CacheHandler, Fetch, RequestManager, Store, recordIdentifierFor as cacheKeyFor, recordIdentifierFor, setIdentifierForgetMethod, setIdentifierGenerationMethod, setIdentifierResetMethod, setIdentifierUpdateMethod, setKeyInfoForResource, storeFor, useRecommendedStore };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as Checkout } from "./-private-
|
|
3
|
-
import { a as fromIdentity, c as instantiateRecord, d as commit, i as SchemaService, l as teardownRecord, o as registerDerivations, s as withDefaults, u as checkout } from "./src-
|
|
1
|
+
import { d as getRequestState, t as getPromiseState, u as createRequestSubscription } from "./-private-ggVX_Iob.js";
|
|
2
|
+
import { t as Checkout } from "./-private-8gd8hbwm.js";
|
|
3
|
+
import { a as fromIdentity, c as instantiateRecord, d as commit, i as SchemaService, l as teardownRecord, o as registerDerivations, s as withDefaults, u as checkout } from "./src-C0wuASrN.js";
|
|
4
4
|
|
|
5
5
|
export { Checkout, SchemaService, checkout, commit, createRequestSubscription, fromIdentity, getPromiseState, getRequestState, instantiateRecord, registerDerivations, teardownRecord, withDefaults };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as getOrSetUniversal, t as getOrSetGlobal } from "./-private-
|
|
1
|
+
import { n as getOrSetUniversal, t as getOrSetGlobal } from "./-private-B6aLbrgV.js";
|
|
2
2
|
import { IS_FUTURE, STRUCTURED } from "./types/request.js";
|
|
3
3
|
|
|
4
4
|
//#region src/request/-private/context.ts
|
|
@@ -477,4 +477,4 @@ const withBrand = withResponseType;
|
|
|
477
477
|
|
|
478
478
|
//#endregion
|
|
479
479
|
export { upgradePromise as a, executeNextHandler as c, getRequestResult as d, setPromiseResult as f, createDeferred as i, clearRequestResult as l, withReactiveResponse as n, DOMError as o, cloneResponseProperties as p, withResponseType as r, IS_CACHE_HANDLER as s, withBrand as t, getPromiseResult as u };
|
|
480
|
-
//# sourceMappingURL=request-
|
|
480
|
+
//# sourceMappingURL=request-BoeppjDj.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-BoeppjDj.js","names":["SkipCache","deepFreeze","createDeferred","upgradeHeaders","headers","clone","Headers","toJSON","Array","from","cloneResponseProperties","response","ok","redirected","status","statusText","type","url","ContextOwner","hasSetStream","hasSetResponse","hasSubscribers","stream","nextCalled","constructor","request","god","isRoot","requestId","id","controller","promise","sizeHint","signal","addEventListener","abort","reason","enhancedRequest","Object","assign","then","hasRequestedStream","getResponse","getStream","hint","get","parseInt","setStream","Promise","resolve","resolveStream","setResponse","Response","responseData","Context","owner","isCacheHandler","___owner","_isCacheHandler","_finalized","setIdentifier","identifier","_finalize","getOrSetUniversal","PromiseCache","WeakMap","RequestMap","Map","setRequestResult","requestId","result","set","clearRequestResult","delete","getRequestResult","get","setPromiseResult","promise","getPromiseResult","getOrSetGlobal","STRUCTURED","Context","ContextOwner","assertValidRequest","createFuture","isFuture","setRequestResult","IS_CACHE_HANDLER","Symbol","DOMError","DOMException","Error","curryFuture","owner","inbound","outbound","setStream","getStream","then","doc","document","request","response","content","resolve","error","isDoc","god","stream","e","Object","assign","message","getResponse","reject","promise","ensureDoc","isError","enhanceReason","reason","name","handleOutcome","controller","signal","aborted","isCacheHandler","handler","index","Boolean","executeNextHandler","wares","i","next","r","nextCalled","_isCacheHandler","context","outcome","_finalize","Promise","requestId","result","future","IS_FUTURE","enhanceReason","isFuture","maybe","Boolean","Promise","createDeferred","resolve","reject","promise","res","rej","upgradePromise","future","getStream","abort","onFinalize","id","lid","requester","createFuture","owner","deferred","cbs","finally","resolveStream","forEach","cb","fn","push","reason","requestId","god","identifier","createDeferred","setPromiseResult","getPromiseResult","withResponseType","obj","withReactiveResponse","withBrand"],"sources":["../../../src/request/-private/context.ts","../../../src/request/-private/promise-cache.ts","../../../src/request/-private/utils.ts","../../../src/request/-private/future.ts","../../../src/request.ts"],"sourcesContent":["import { DEBUG } from '@warp-drive/core/build-config/env';\nimport { assert } from '@warp-drive/core/build-config/macros';\n\nimport type { RequestKey } from '../../types/identifier';\nimport type { ImmutableHeaders, ImmutableRequestInfo, RequestInfo, ResponseInfo } from '../../types/request';\nimport { SkipCache } from '../../types/request';\nimport { deepFreeze } from './debug';\nimport { createDeferred } from './future';\nimport type { DeferredStream, GodContext } from './types';\n\nexport function upgradeHeaders(headers: Headers | ImmutableHeaders): ImmutableHeaders {\n (headers as ImmutableHeaders).clone = () => {\n return new Headers(headers);\n };\n (headers as ImmutableHeaders).toJSON = () => {\n return Array.from(headers as unknown as Iterable<[string, string]>);\n };\n return headers as ImmutableHeaders;\n}\n\nexport function cloneResponseProperties(response: Response): ResponseInfo {\n const { headers, ok, redirected, status, statusText, type, url } = response;\n upgradeHeaders(headers);\n return {\n headers: headers as ImmutableHeaders,\n ok,\n redirected,\n status,\n statusText,\n type,\n url,\n };\n}\n\nexport class ContextOwner {\n hasSetStream = false;\n hasSetResponse = false;\n hasSubscribers = false;\n stream: DeferredStream = createDeferred<ReadableStream | null>();\n response: ResponseInfo | null = null;\n declare request: ImmutableRequestInfo;\n declare enhancedRequest: ImmutableRequestInfo;\n nextCalled = 0;\n declare god: GodContext;\n declare controller: AbortController;\n declare requestId: number;\n declare isRoot: boolean;\n\n constructor(request: RequestInfo, god: GodContext, isRoot = false) {\n this.isRoot = isRoot;\n this.requestId = god.id;\n this.controller = request.controller || god.controller;\n this.stream.promise.sizeHint = 0;\n\n if (request.controller) {\n if (request.controller !== god.controller) {\n god.controller.signal.addEventListener('abort', () => {\n this.controller.abort(god.controller.signal.reason);\n });\n }\n delete request.controller;\n }\n let enhancedRequest: ImmutableRequestInfo = Object.assign(\n { signal: this.controller.signal },\n request\n ) as ImmutableRequestInfo;\n if (DEBUG) {\n if (!request?.cacheOptions?.[SkipCache]) {\n request = deepFreeze(request);\n enhancedRequest = deepFreeze(enhancedRequest);\n }\n } else {\n if (request.headers) {\n upgradeHeaders(request.headers);\n }\n }\n this.enhancedRequest = enhancedRequest;\n this.request = request as ImmutableRequestInfo;\n this.god = god;\n this.stream.promise = this.stream.promise.then((stream: ReadableStream | null) => {\n if (this.god.stream === stream && this.hasSubscribers) {\n this.god.stream = null;\n }\n return stream;\n });\n }\n\n get hasRequestedStream(): boolean {\n return this.god.hasRequestedStream;\n }\n\n getResponse(): ResponseInfo | null {\n if (this.hasSetResponse) {\n return this.response;\n }\n if (this.nextCalled === 1) {\n return this.god.response;\n }\n return null;\n }\n getStream(): Promise<ReadableStream | null> {\n if (this.isRoot) {\n this.god.hasRequestedStream = true;\n }\n if (!this.hasSetResponse) {\n const hint = this.god.response?.headers?.get('content-length');\n this.stream.promise.sizeHint = hint ? parseInt(hint, 10) : 0;\n }\n this.hasSubscribers = true;\n return this.stream.promise;\n }\n abort(reason: DOMException): void {\n this.controller.abort(reason);\n }\n\n setStream(stream: ReadableStream | Promise<ReadableStream | null> | null): void {\n if (!this.hasSetStream) {\n this.hasSetStream = true;\n\n if (!(stream instanceof Promise)) {\n this.god.stream = stream;\n }\n // @ts-expect-error\n this.stream.resolve(stream);\n }\n }\n\n resolveStream(): void {\n this.setStream(this.nextCalled === 1 ? this.god.stream : null);\n }\n\n setResponse(response: ResponseInfo | Response | null): void {\n if (this.hasSetResponse) {\n if (DEBUG) {\n throw new Error(`Cannot setResponse when a response has already been set`);\n }\n return;\n }\n this.hasSetResponse = true;\n if (response instanceof Response) {\n // TODO potentially avoid cloning in prod\n let responseData = cloneResponseProperties(response);\n\n if (DEBUG) {\n responseData = deepFreeze(responseData);\n }\n this.response = responseData;\n this.god.response = responseData;\n const sizeHint = response.headers?.get('content-length');\n this.stream.promise.sizeHint = sizeHint ? parseInt(sizeHint, 10) : 0;\n } else {\n this.response = response;\n this.god.response = response;\n }\n }\n}\n\n/**\n * The context object given to each {@link Handler} (or {@link CacheHandler})\n * as it processes a request. It exposes the (immutable, enhanced) request\n * along with the methods a handler uses to build up the {@link Future} and\n * {@link StructuredDataDocument} that will ultimately be returned by the\n * {@link RequestManager}.\n *\n * @public\n */\nexport class Context {\n /** @internal */\n declare private ___owner: ContextOwner;\n /**\n * A readonly, immutable version of the request being handled, including\n * any defaults or enhancements applied by the {@link RequestManager}.\n *\n * @public\n */\n declare request: ImmutableRequestInfo;\n /**\n * The id of this request as assigned by the {@link RequestManager}. Not\n * unique across manager instances.\n *\n * @public\n */\n declare id: number;\n /** @internal */\n declare private _isCacheHandler: boolean;\n /** @internal */\n declare private _finalized: boolean;\n\n constructor(owner: ContextOwner, isCacheHandler: boolean) {\n this.id = owner.requestId;\n this.___owner = owner;\n this.request = owner.enhancedRequest;\n this._isCacheHandler = isCacheHandler;\n this._finalized = false;\n }\n /**\n * Set the response stream for this request. May be called at most once,\n * and may be called at any point up until the handler's `request` method\n * resolves.\n *\n * @public\n */\n setStream(stream: ReadableStream | Promise<ReadableStream | null>): void {\n this.___owner.setStream(stream);\n }\n /**\n * Set the {@link ResponseInfo} (or raw `Response`) associated with this\n * request. Used to populate the response information available on the\n * resulting {@link StructuredDataDocument}.\n *\n * @public\n */\n setResponse(response: ResponseInfo | Response | null): void {\n this.___owner.setResponse(response);\n }\n\n /**\n * Associate a {@link RequestKey} with this request. May only be called\n * synchronously from a {@link CacheHandler}.\n *\n * @public\n */\n setIdentifier(identifier: RequestKey): void {\n assert(\n `setIdentifier may only be used synchronously from a CacheHandler`,\n identifier && this._isCacheHandler && !this._finalized\n );\n this.___owner.god.identifier = identifier;\n }\n\n /**\n * Whether the application (or a downstream handler) has requested access\n * to the response stream via {@link Future.getStream}. Handlers can use\n * this to avoid the cost of streaming when nothing will consume it.\n *\n * @public\n */\n get hasRequestedStream(): boolean {\n return this.___owner.hasRequestedStream;\n }\n\n /** @private */\n _finalize(): void {\n this._finalized = true;\n }\n}\nexport type HandlerRequestContext = Context;\n","import { getOrSetUniversal } from '../../types/-private';\n\nexport type CacheResult<T = unknown, E = unknown> = { isError: true; result: E } | { isError: false; result: T };\n\n/**\n * The minimal, structural subset of the `Promise` interface required to be\n * cached and inspected by {@link setPromiseResult} / {@link getPromiseResult}\n * (and by `getPromiseState`). Anything that is at least `then`/`catch`/`finally`\n * \"shaped\" (including a real `Promise` or {@link Future}) satisfies this.\n *\n * @public\n */\nexport type Awaitable<T = unknown, E = unknown> = {\n /**\n * Registers fulfillment/rejection handlers, `Promise.prototype.then`-style.\n *\n * @public\n */\n then: (onFulfilled: (value: T) => unknown, onRejected: (reason: E) => unknown) => unknown;\n /**\n * Registers a rejection handler, `Promise.prototype.catch`-style.\n *\n * @public\n */\n catch: (onRejected: (reason: E) => unknown) => unknown;\n /**\n * Registers a handler run on settlement, `Promise.prototype.finally`-style.\n *\n * @public\n */\n finally: (onFinally: () => unknown) => unknown;\n};\n\nexport const PromiseCache: WeakMap<Awaitable, CacheResult> = getOrSetUniversal(\n 'PromiseCache',\n new WeakMap<Awaitable, CacheResult>()\n);\nexport const RequestMap: Map<number, CacheResult> = getOrSetUniversal('RequestMap', new Map<number, CacheResult>());\n\nexport function setRequestResult(requestId: number, result: CacheResult): void {\n RequestMap.set(requestId, result);\n}\nexport function clearRequestResult(requestId: number): void {\n RequestMap.delete(requestId);\n}\nexport function getRequestResult(requestId: number): CacheResult | undefined {\n return RequestMap.get(requestId);\n}\n\n/**\n * Cache the settled result (or error) of a promise-like value so that its\n * outcome can be synchronously read later via {@link getPromiseResult},\n * without needing to await it again.\n *\n * @public\n */\nexport function setPromiseResult(promise: Promise<unknown> | Awaitable, result: CacheResult): void {\n PromiseCache.set(promise, result);\n}\n\n/**\n * Synchronously read the settled result (or error) previously recorded for\n * a promise-like value via {@link setPromiseResult}, if any.\n *\n * @public\n */\nexport function getPromiseResult<T, E>(promise: Promise<T> | Awaitable<T, E>): CacheResult<T, E> | undefined {\n return PromiseCache.get(promise) as CacheResult<T, E> | undefined;\n}\n","import { DEBUG } from '@warp-drive/core/build-config/env';\n\nimport { getOrSetGlobal } from '../../types/-private';\nimport type {\n RequestInfo,\n StructuredDataDocument,\n StructuredDocument,\n StructuredErrorDocument,\n} from '../../types/request';\nimport { STRUCTURED } from '../../types/request';\nimport { Context, ContextOwner } from './context';\nimport { assertValidRequest } from './debug';\n// oxlint-disable-next-line no-unused-vars\nimport type { Fetch } from './fetch.ts';\nimport { createFuture, isFuture } from './future';\nimport { setRequestResult } from './promise-cache';\nimport type { DeferredFuture, Future, GodContext, Handler } from './types';\n\nexport const IS_CACHE_HANDLER: '___(unique) Symbol(IS_CACHE_HANDLER)' = getOrSetGlobal(\n 'IS_CACHE_HANDLER',\n Symbol('IS_CACHE_HANDLER')\n);\n\n/**\n * A ponyfill for the global {@link DOMException} constructor.\n *\n * Some non-DOM environments (e.g. React Native, some Node/worker\n * environments) don't provide `DOMException` as a global, which would\n * otherwise throw a `ReferenceError` the first time any code referenced it\n * (for instance when classifying an abort/network error). `DOMError` falls\n * back to the global {@link Error} constructor in that case so callers can\n * uniformly use `new DOMError(...)` / `error instanceof DOMError` without\n * guarding for the global's presence themselves.\n *\n * @internal\n */\nexport const DOMError: typeof DOMException =\n typeof DOMException !== 'undefined' ? DOMException : (Error as unknown as typeof DOMException);\nexport function curryFuture<T>(owner: ContextOwner, inbound: Future<T>, outbound: DeferredFuture<T>): Future<T> {\n owner.setStream(inbound.getStream());\n\n inbound.then(\n (doc: StructuredDataDocument<T>) => {\n const document = {\n [STRUCTURED]: true as const,\n request: owner.request,\n response: doc.response,\n content: doc.content,\n };\n outbound.resolve(document);\n },\n (error: Error & StructuredErrorDocument) => {\n if (isDoc(error)) {\n owner.setStream(owner.god.stream);\n }\n if (!error || !(error instanceof Error)) {\n try {\n throw new Error(error ? error : `Request Rejected with an Unknown Error`);\n } catch (e: unknown) {\n if (error && typeof error === 'object') {\n Object.assign(e as Error, error);\n (e as Error & StructuredErrorDocument).message =\n (error as Error).message || `Request Rejected with an Unknown Error`;\n }\n error = e as Error & StructuredErrorDocument;\n }\n }\n\n error[STRUCTURED] = true;\n error.request = owner.request;\n error.response = owner.getResponse();\n error.error = error.error || error.message;\n\n outbound.reject(error);\n }\n );\n return outbound.promise;\n}\n\nfunction isDoc<T>(doc: T | StructuredDataDocument<T>): doc is StructuredDataDocument<T> {\n return doc && (doc as StructuredDataDocument<T>)[STRUCTURED] === true;\n}\n\nfunction ensureDoc<T>(owner: ContextOwner, content: T | Error, isError: boolean): StructuredDocument<T> {\n if (isDoc(content)) {\n return content as StructuredDocument<T>;\n }\n\n if (isError) {\n return {\n [STRUCTURED]: true,\n request: owner.request,\n response: owner.getResponse(),\n error: content as Error,\n } as StructuredErrorDocument<T>;\n }\n\n return {\n [STRUCTURED]: true,\n request: owner.request,\n response: owner.getResponse(),\n content: content as T,\n };\n}\n\n/**\n * Additional properties exposed on errors thrown by the\n * {@link Fetch | Fetch Handler}.\n *\n * In the case of an Abort or system/browser level issue,\n * this extends {@link DOMException}.\n *\n * Else it extends from {@link AggregateError} if the\n * response includes an array of errors, falling back\n * to {@link Error} as its base.\n */\nexport interface FetchError extends DOMException {\n /**\n * Alias for {@link FetchError.status | status}.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Response/status)\n */\n code: number;\n /**\n * The name associated to the {@link FetchError.status | status code}.\n *\n * Typically this will be of the formula `StatusTextError` for instance\n * a 404 status with status text of `Not Found` would have the name\n * `NotFoundError`.\n */\n name: string;\n /**\n * The http status code associated to the returned error.\n *\n * Browser/System level network errors will often have an error code of `0` or `5`.\n * Aborted requests will have an error code of `20`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Response/status)\n */\n status: number;\n /**\n * The Status Text associated to the {@link FetchError.status | status code}\n * for the error.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Response/statusText)\n *\n */\n statusText: string;\n /**\n * A property signifying that an Error uses the {@link FetchError}\n * interface.\n */\n isRequestError: true;\n}\n\nexport function enhanceReason(reason?: string): DOMException {\n const error = new DOMError(reason || 'The user aborted a request.', 'AbortError');\n // `DOMError` may be the `Error` constructor as a fallback, whose\n // constructor doesn't accept a `name`, so set it explicitly in that case.\n // We can't unconditionally assign `error.name` here: when `DOMError` is\n // the real `DOMException`, `name` is already `'AbortError'` (set by its\n // constructor) *and* `DOMException.prototype.name` is a getter-only\n // accessor with no setter, so reassigning it throws a `TypeError` in\n // strict-mode JS (which is how our ES modules run) - even when assigning\n // the very same value it already holds.\n if (error.name !== 'AbortError') {\n (error as unknown as { name: string }).name = 'AbortError';\n }\n return error;\n}\n\nexport function handleOutcome<T>(\n owner: ContextOwner,\n inbound: Promise<T | StructuredDataDocument<T>>,\n outbound: DeferredFuture<T>\n): Future<T> {\n inbound.then(\n (content: T | StructuredDataDocument<T>) => {\n if (owner.controller.signal.aborted) {\n // the next function did not respect the signal, we handle it here\n outbound.reject(enhanceReason(owner.controller.signal.reason as string));\n return;\n }\n if (isDoc(content)) {\n owner.setStream(owner.god.stream);\n content = content.content;\n }\n const document = {\n [STRUCTURED]: true as const,\n request: owner.request,\n response: owner.getResponse(),\n content,\n };\n outbound.resolve(document);\n },\n (error: Error & StructuredErrorDocument) => {\n if (isDoc(error)) {\n owner.setStream(owner.god.stream);\n }\n if (!error || !(error instanceof Error)) {\n try {\n throw new Error(error ? error : `Request Rejected with an Unknown Error`);\n } catch (e: unknown) {\n if (error && typeof error === 'object') {\n Object.assign(e as Error, error);\n (e as Error & StructuredErrorDocument).message =\n (error as Error).message || `Request Rejected with an Unknown Error`;\n }\n error = e as Error & StructuredErrorDocument;\n }\n }\n\n error[STRUCTURED] = true;\n error.request = owner.request;\n error.response = owner.getResponse();\n error.error = error.error || error.message;\n outbound.reject(error);\n }\n );\n return outbound.promise;\n}\n\nfunction isCacheHandler(handler: Handler & { [IS_CACHE_HANDLER]?: boolean }, index: number): boolean {\n return index === 0 && Boolean(handler[IS_CACHE_HANDLER]);\n}\n\nexport function executeNextHandler<T>(\n wares: Readonly<Handler[]>,\n request: RequestInfo,\n i: number,\n god: GodContext\n): Future<T> {\n if (DEBUG) {\n if (i === wares.length) {\n throw new Error(`No handler was able to handle this request.`);\n }\n assertValidRequest(request, false);\n }\n const owner = new ContextOwner(request, god, i === 0);\n\n function next(r: RequestInfo): Future<T> {\n owner.nextCalled++;\n return executeNextHandler(wares, r, i + 1, god);\n }\n\n const _isCacheHandler = isCacheHandler(wares[i], i);\n const context = new Context(owner, _isCacheHandler);\n let outcome: Promise<T | StructuredDataDocument<T>> | Future<T>;\n try {\n outcome = wares[i].request<T>(context, next);\n if (_isCacheHandler) {\n context._finalize();\n }\n if (!!outcome && _isCacheHandler) {\n if (!(outcome instanceof Promise)) {\n setRequestResult(owner.requestId, { isError: false, result: ensureDoc(owner, outcome, false) });\n outcome = Promise.resolve(outcome);\n }\n } else if (DEBUG) {\n if (!outcome || (!(outcome instanceof Promise) && !(typeof outcome === 'object' && 'then' in outcome))) {\n // oxlint-disable-next-line no-console\n console.log({ request, handler: wares[i], outcome });\n if (outcome === undefined) {\n throw new Error(`Expected handler.request to return a promise, instead received undefined.`);\n }\n throw new Error(`Expected handler.request to return a promise, instead received a synchronous value.`);\n }\n }\n } catch (e) {\n if (_isCacheHandler) {\n setRequestResult(owner.requestId, { isError: true, result: ensureDoc(owner, e, true) });\n }\n // oxlint-disable-next-line typescript/prefer-promise-reject-errors\n outcome = Promise.reject<StructuredDataDocument<T>>(e);\n }\n const future = createFuture<T>(owner);\n\n if (isFuture<T>(outcome)) {\n return curryFuture(owner, outcome, future);\n }\n\n return handleOutcome(owner, outcome, future);\n}\n","import { DEBUG } from '@warp-drive/build-config/env';\n\nimport { IS_FUTURE, type StructuredDocument } from '../../types/request';\nimport type { ContextOwner } from './context';\nimport type { Deferred, DeferredFuture, Future } from './types';\nimport { enhanceReason } from './utils';\n\nexport function isFuture<T>(maybe: unknown): maybe is Future<T> {\n return Boolean(maybe && maybe instanceof Promise && (maybe as Future<T>)[IS_FUTURE] === true);\n}\n\n/**\n * Create a {@link Deferred}: a promise along with the `resolve`/`reject`\n * callbacks that settle it, so the promise can be handed out before the\n * work that will settle it has started.\n *\n * @public\n */\nexport function createDeferred<T>(): Deferred<T> {\n let resolve!: (v: T) => void;\n let reject!: (v: unknown) => void;\n const promise = new Promise<T>((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { resolve, reject, promise };\n}\n\nexport function upgradePromise<T>(promise: Promise<StructuredDocument<T>>, future: Future<T>): Future<T> {\n (promise as Future<T>)[IS_FUTURE] = true;\n // oxlint-disable-next-line typescript/unbound-method\n (promise as Future<T>).getStream = future.getStream;\n // oxlint-disable-next-line typescript/unbound-method\n (promise as Future<T>).abort = future.abort;\n // oxlint-disable-next-line typescript/unbound-method\n (promise as Future<T>).onFinalize = future.onFinalize;\n (promise as Future<T>).id = future.id;\n (promise as Future<T>).lid = future.lid;\n (promise as Future<T>).requester = future.requester;\n\n if (DEBUG) {\n // @ts-expect-error\n promise.toJSON = () => {\n const id = 'Future<' + (promise as Future<T>).id + '>';\n if ((promise as Future<T>).lid) {\n return `${id} (${(promise as Future<T>).lid!.lid})`;\n }\n return id;\n };\n }\n\n return promise as Future<T>;\n}\n\nexport function createFuture<T>(owner: ContextOwner): DeferredFuture<T> {\n const deferred = createDeferred<T>() as unknown as DeferredFuture<T>;\n let { promise } = deferred;\n let cbs: Array<() => void> | undefined;\n promise = promise.finally(() => {\n owner.resolveStream();\n if (cbs) {\n cbs.forEach((cb) => cb());\n }\n }) as Future<T>;\n promise.onFinalize = (fn: () => void) => {\n cbs = cbs || [];\n cbs.push(fn);\n };\n promise[IS_FUTURE] = true;\n promise.getStream = () => {\n return owner.getStream();\n };\n promise.abort = (reason?: string) => {\n owner.abort(enhanceReason(reason));\n };\n promise.id = owner.requestId;\n promise.lid = owner.god.identifier;\n promise.requester = owner.god.requester;\n\n if (DEBUG) {\n // @ts-expect-error\n promise.toJSON = () => {\n const id = 'Future<' + promise.id + '>';\n if (promise.lid) {\n return `${id} (${promise.lid.lid})`;\n }\n return id;\n };\n }\n\n deferred.promise = promise;\n return deferred;\n}\n","import type { ReactiveDataDocument } from './reactive.ts';\nimport type { RequestInfo } from './types/request.ts';\nimport type { RequestSignature } from './types/symbols.ts';\n\nexport { createDeferred } from './request/-private/future.ts';\nexport type {\n Future,\n Handler,\n CacheHandler,\n NextFn,\n Deferred,\n ManagedRequestPriority,\n} from './request/-private/types.ts';\nexport { setPromiseResult, getPromiseResult } from './request/-private/promise-cache.ts';\nexport type { Awaitable } from './request/-private/promise-cache.ts';\nexport type { Context } from './request/-private/context.ts';\n\n/**\n * Brands the supplied object with the supplied response type.\n *\n * ```ts\n * import type { ReactiveDataDocument } from '@warp-drive/core/reactive';\n * import { withResponseType } from '@warp-drive/core/request';\n * import type { User } from '#/data/user.ts'\n *\n * const result = await store.request(\n * withResponseType<ReactiveDataDocument<User>>({ url: '/users/1' })\n * );\n *\n * result.content.data; // will have type User\n * ```\n *\n */\nexport function withResponseType<T>(obj: RequestInfo): RequestInfo<T> & {\n /** The branded response type. Present only at the type level; carries no runtime value. */\n [RequestSignature]: T;\n} {\n return obj as RequestInfo<T> & {\n [RequestSignature]: T;\n };\n}\n\n/**\n * Brands the supplied object with the supplied response type\n * wrapped in {@link ReactiveDataDocument}. This is a convenience for\n * the common case of using {@link withResponseType} with `ReactiveDataDocument`.\n *\n * ```ts\n * import { withReactiveResponse } from '@warp-drive/core/request';\n * import type { User } from '#/data/user.ts'\n *\n * const result = await store.request(\n * withReactiveResponse<User>({ url: '/users/1' })\n * );\n *\n * result.content.data; // will have type User\n * ```\n *\n * @public\n */\nexport function withReactiveResponse<T>(obj: RequestInfo): RequestInfo<ReactiveDataDocument<T>> & {\n /** The branded response type. Present only at the type level; carries no runtime value. */\n [RequestSignature]: ReactiveDataDocument<T>;\n} {\n return obj as RequestInfo<ReactiveDataDocument<T>> & {\n [RequestSignature]: ReactiveDataDocument<T>;\n };\n}\n\n/**\n * @deprecated use {@link withResponseType} instead\n */\nexport const withBrand: typeof withResponseType = withResponseType;\n"],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { f as setPromiseResult, i as createDeferred, n as withReactiveResponse, r as withResponseType, t as withBrand, u as getPromiseResult } from "./request-
|
|
1
|
+
import { f as setPromiseResult, i as createDeferred, n as withReactiveResponse, r as withResponseType, t as withBrand, u as getPromiseResult } from "./request-BoeppjDj.js";
|
|
2
2
|
|
|
3
3
|
export { createDeferred, getPromiseResult, setPromiseResult, withBrand, withReactiveResponse, withResponseType };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { E as waitFor,
|
|
1
|
+
import { D as notifyInternalSignal, E as makeInitializer, N as waitFor, O as peekInternalSignal, T as getOrCreateInternalSignal, _ as entangleSignal, a as getPaginationState, b as signal, c as getPaginationCache, h as defineSignal, i as getPaginationLinks, k as withSignalStore, l as DISPOSE, m as defineNonEnumerableSignal, n as createPaginationLinksSubscription, o as clearPaginationCache, p as defineGate, r as createPaginationSubscription, s as defaultPageHints, v as gate, y as memoized } from "../-private-ggVX_Iob.js";
|
|
2
2
|
|
|
3
|
-
export { DISPOSE, defineGate, defineNonEnumerableSignal, defineSignal, entangleSignal, gate, getOrCreateInternalSignal, makeInitializer, memoized, notifyInternalSignal, peekInternalSignal, signal, waitFor, withSignalStore };
|
|
3
|
+
export { DISPOSE, clearPaginationCache, createPaginationLinksSubscription, createPaginationSubscription, defaultPageHints, defineGate, defineNonEnumerableSignal, defineSignal, entangleSignal, gate, getOrCreateInternalSignal, getPaginationCache, getPaginationLinks, getPaginationState, makeInitializer, memoized, notifyInternalSignal, peekInternalSignal, signal, waitFor, withSignalStore };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { a as setTransient, i as peekUniversalTransient, o as setUniversalTransient, r as peekTransient, t as getOrSetGlobal } from "./-private-
|
|
2
|
-
import {
|
|
1
|
+
import { a as setTransient, i as peekUniversalTransient, o as setUniversalTransient, r as peekTransient, t as getOrSetGlobal } from "./-private-B6aLbrgV.js";
|
|
2
|
+
import { A as ARRAY_SIGNAL, C as createInternalMemo, D as notifyInternalSignal, O as peekInternalSignal, P as willSyncFlushWatchers, S as consumeInternalSignal, T as getOrCreateInternalSignal, _ as entangleSignal, f as createSignalDescriptor, g as entangleInitiallyStaleSignal, h as defineSignal, j as OBJECT_SIGNAL, k as withSignalStore, p as defineGate, w as createInternalSignal, x as Signals } from "./-private-ggVX_Iob.js";
|
|
3
3
|
import { EnableHydration, STRUCTURED, SkipCache } from "./types/request.js";
|
|
4
|
-
import { a as upgradePromise, c as executeNextHandler, d as getRequestResult, f as setPromiseResult, l as clearRequestResult, o as DOMError, p as cloneResponseProperties, s as IS_CACHE_HANDLER, t as withBrand } from "./request-
|
|
5
|
-
import { a as SOURCE, i as Destroy, n as Commit, r as Context, t as Checkout } from "./-private-
|
|
4
|
+
import { a as upgradePromise, c as executeNextHandler, d as getRequestResult, f as setPromiseResult, l as clearRequestResult, o as DOMError, p as cloneResponseProperties, s as IS_CACHE_HANDLER, t as withBrand } from "./request-BoeppjDj.js";
|
|
5
|
+
import { a as SOURCE, i as Destroy, n as Commit, r as Context, t as Checkout } from "./-private-8gd8hbwm.js";
|
|
6
6
|
import { CACHE_OWNER } from "./types/identifier.js";
|
|
7
7
|
import { RecordStore, Type } from "./types/symbols.js";
|
|
8
8
|
import { isResourceSchema } from "./types/schema/fields.js";
|
|
@@ -141,13 +141,18 @@ var CacheCapabilitiesManager = class {
|
|
|
141
141
|
return this.cacheKeyManager;
|
|
142
142
|
}
|
|
143
143
|
/** @internal */
|
|
144
|
-
_scheduleNotification(identifier, key) {
|
|
144
|
+
_scheduleNotification(identifier, key, channel) {
|
|
145
145
|
let pending = this._pendingNotifies.get(identifier);
|
|
146
146
|
if (!pending) {
|
|
147
|
-
pending = /* @__PURE__ */ new
|
|
147
|
+
pending = /* @__PURE__ */ new Map();
|
|
148
148
|
this._pendingNotifies.set(identifier, pending);
|
|
149
149
|
}
|
|
150
|
-
pending.
|
|
150
|
+
let channels = pending.get(key);
|
|
151
|
+
if (!channels) {
|
|
152
|
+
channels = /* @__PURE__ */ new Set();
|
|
153
|
+
pending.set(key, channels);
|
|
154
|
+
}
|
|
155
|
+
channels.add(channel);
|
|
151
156
|
if (this._willNotify === true) return;
|
|
152
157
|
this._willNotify = true;
|
|
153
158
|
if (this._store._cbs) this._store._schedule("notify", () => this._flushNotifications());
|
|
@@ -159,16 +164,29 @@ var CacheCapabilitiesManager = class {
|
|
|
159
164
|
const pending = this._pendingNotifies;
|
|
160
165
|
this._pendingNotifies = /* @__PURE__ */ new Map();
|
|
161
166
|
this._willNotify = false;
|
|
162
|
-
pending.forEach((
|
|
163
|
-
|
|
167
|
+
pending.forEach((channelsByKey, identifier) => {
|
|
168
|
+
const keysByChannel = /* @__PURE__ */ new Map();
|
|
169
|
+
channelsByKey.forEach((channels, key) => {
|
|
170
|
+
channels.forEach((channel) => {
|
|
171
|
+
let keys = keysByChannel.get(channel);
|
|
172
|
+
if (!keys) {
|
|
173
|
+
keys = /* @__PURE__ */ new Set();
|
|
174
|
+
keysByChannel.set(channel, keys);
|
|
175
|
+
}
|
|
176
|
+
keys.add(key);
|
|
177
|
+
});
|
|
178
|
+
});
|
|
179
|
+
keysByChannel.forEach((keys, channel) => {
|
|
180
|
+
this._store.notifications.notify(identifier, "relationships", keys, channel);
|
|
181
|
+
});
|
|
164
182
|
});
|
|
165
183
|
}
|
|
166
|
-
notifyChange(identifier, namespace, key) {
|
|
184
|
+
notifyChange(identifier, namespace, key, channel) {
|
|
167
185
|
if (namespace === "relationships" && key) {
|
|
168
|
-
this._scheduleNotification(identifier, key);
|
|
186
|
+
this._scheduleNotification(identifier, key, channel);
|
|
169
187
|
return;
|
|
170
188
|
}
|
|
171
|
-
this._store.notifications.notify(identifier, namespace, key);
|
|
189
|
+
this._store.notifications.notify(identifier, namespace, key, channel);
|
|
172
190
|
}
|
|
173
191
|
get schema() {
|
|
174
192
|
return this._store.schema;
|
|
@@ -1032,49 +1050,141 @@ function isCacheOperationValue(value) {
|
|
|
1032
1050
|
return value === "added" || value === "state" || value === "updated" || value === "removed" || value === "invalidated";
|
|
1033
1051
|
}
|
|
1034
1052
|
/**
|
|
1053
|
+
* The full set of notification kinds the {@link NotificationManager} can emit for a resource,
|
|
1054
|
+
* including both {@link CacheOperation}s and finer-grained field-level change notifications.
|
|
1055
|
+
*/
|
|
1056
|
+
/**
|
|
1057
|
+
* The shape accepted by {@link NotificationManager.notify} and
|
|
1058
|
+
* {@link CacheCapabilitiesManager.notifyChange} for delivering many keys for
|
|
1059
|
+
* the `'attributes'` or `'relationships'` namespaces in a single call
|
|
1060
|
+
* instead of once per key.
|
|
1061
|
+
*
|
|
1062
|
+
* @since 5.9.0
|
|
1063
|
+
* @public
|
|
1064
|
+
*/
|
|
1065
|
+
/**
|
|
1066
|
+
* A change to a resource's `attributes` or `relationships` can be relevant to
|
|
1067
|
+
* a "local" view of the resource (its mutable/editable state), a "remote" view
|
|
1068
|
+
* (its last-known-persisted state), or both.
|
|
1069
|
+
*
|
|
1070
|
+
* Each view subscribes to its own channel and, when notified, re-pulls its own
|
|
1071
|
+
* projection of the data: a remote-only reader (e.g. PolarisMode's default
|
|
1072
|
+
* immutable record) subscribes `'remote'` and re-reads remote state; an
|
|
1073
|
+
* editable/reconciled reader (a legacy record, or an editable checkout)
|
|
1074
|
+
* subscribes `'local'` (the same as omitting the channel) and re-reads local
|
|
1075
|
+
* state. A notifier that knows which projection changed tags the notification
|
|
1076
|
+
* with that channel; each tag is delivered only to that channel's subscribers.
|
|
1077
|
+
* A change affecting both projections is either notified unscoped or once per
|
|
1078
|
+
* channel. An unscoped notify cannot guarantee which view changed, so it
|
|
1079
|
+
* reaches every subscriber -- this keeps every pre-channel `notify` callsite
|
|
1080
|
+
* (and any custom cache that doesn't know about channels) fully compatible.
|
|
1081
|
+
*
|
|
1082
|
+
* The full delivery matrix:
|
|
1083
|
+
*
|
|
1084
|
+
* | notify ↓ subscribe → | `'local'` | `'remote'` | omitted (= `'local'`) |
|
|
1085
|
+
* | -------------------- | --------- | ---------- | --------------------- |
|
|
1086
|
+
* | `'local'` | ✅ | ❌ | ✅ |
|
|
1087
|
+
* | `'remote'` | ❌ | ✅ | ❌ |
|
|
1088
|
+
* | omitted | ✅ | ✅ | ✅ |
|
|
1089
|
+
*
|
|
1090
|
+
* Channel only applies to the `'attributes'` and `'relationships'`
|
|
1091
|
+
* notification types. All other types (`'errors'`,
|
|
1092
|
+
* `'identity'`, `'state'`, and the various `CacheOperation`/
|
|
1093
|
+
* `DocumentCacheOperation` values) are never filtered by channel since they
|
|
1094
|
+
* have no local/remote duality.
|
|
1095
|
+
*
|
|
1096
|
+
* @public
|
|
1097
|
+
*/
|
|
1098
|
+
/**
|
|
1099
|
+
* Well-known sentinel recorded in a {@link ChannelSet} for a touch that
|
|
1100
|
+
* carried no channel. An unscoped touch always reaches every subscriber
|
|
1101
|
+
* regardless of what channel(s) the same key was also touched with, so its
|
|
1102
|
+
* presence in the set short-circuits channel filtering.
|
|
1103
|
+
*/
|
|
1104
|
+
const UnscopedChannel = getOrSetGlobal("UnscopedChannel", Symbol("unscoped"));
|
|
1105
|
+
/**
|
|
1035
1106
|
* Merges an incoming `notify()` call for a single identifier into that
|
|
1036
1107
|
* identifier's pending-notifications buffer, coalescing redundant work within
|
|
1037
1108
|
* a single flush window.
|
|
1038
1109
|
*
|
|
1039
1110
|
* The buffer is a `Map` from namespace (`'attributes'`, `'relationships'`,
|
|
1040
|
-
* `'state'`, etc.) to
|
|
1041
|
-
*
|
|
1042
|
-
*
|
|
1043
|
-
*
|
|
1044
|
-
*
|
|
1045
|
-
*
|
|
1046
|
-
*
|
|
1047
|
-
*
|
|
1048
|
-
*
|
|
1049
|
-
*
|
|
1050
|
-
*
|
|
1051
|
-
*
|
|
1052
|
-
*
|
|
1053
|
-
*
|
|
1054
|
-
*
|
|
1055
|
-
*
|
|
1056
|
-
*
|
|
1057
|
-
*
|
|
1058
|
-
*
|
|
1059
|
-
*
|
|
1060
|
-
*
|
|
1061
|
-
*
|
|
1111
|
+
* `'state'`, etc.) to a "bucket". Using a `Map` means the *first* time a
|
|
1112
|
+
* namespace is touched during this flush window fixes its position in
|
|
1113
|
+
* iteration order; every subsequent touch to that same namespace (regardless
|
|
1114
|
+
* of how much later, or how many other namespaces fired in between) updates
|
|
1115
|
+
* its value in place without moving it. This preserves the relative order in
|
|
1116
|
+
* which *different* namespaces first fired, while intentionally not tracking
|
|
1117
|
+
* the arrival order of repeated touches to the *same* namespace - those are
|
|
1118
|
+
* provably safe to coalesce because subscribers never receive anything about
|
|
1119
|
+
* a notification beyond `(cacheKey, type, key?)`.
|
|
1120
|
+
*
|
|
1121
|
+
* For every namespace other than `'attributes'`/`'relationships'`, subscriber
|
|
1122
|
+
* callbacks never receive a key at all (and channel never applies to them -
|
|
1123
|
+
* see {@link NotificationChannel}), so the bucket is simply `null`, used
|
|
1124
|
+
* purely as a "this namespace fired at least once" presence marker; multiple
|
|
1125
|
+
* firings within one flush all collapse to the same single marker.
|
|
1126
|
+
*
|
|
1127
|
+
* For `'attributes'`/`'relationships'`, a key (or channel) *does* matter, so
|
|
1128
|
+
* the bucket is one of:
|
|
1129
|
+
* - a `Map<string, ChannelSet>`: the normal case, mapping each specific key
|
|
1130
|
+
* touched to the set of channels it was touched with ({@link UnscopedChannel}
|
|
1131
|
+
* in that set means at least one of those touches was itself unscoped).
|
|
1132
|
+
* - a `ChannelSet` directly: a wildcard meaning "an unspecified set of keys
|
|
1133
|
+
* changed" - a strict superset of any specific key list, per the existing
|
|
1134
|
+
* contract of {@link CacheCapabilitiesManager.notifyChange} - tagged with
|
|
1135
|
+
* the set of channels any of the coalesced keyless (or post-wildcard
|
|
1136
|
+
* keyed) touches carried.
|
|
1137
|
+
*
|
|
1138
|
+
* A keyless call always upgrades the bucket to the wildcard form. When
|
|
1139
|
+
* upgrading away from a `Map`, every channel ever recorded against any of
|
|
1140
|
+
* its specific keys is folded into the new wildcard `ChannelSet` - the
|
|
1141
|
+
* wildcard must remain a superset not just key-wise but channel-wise too, or
|
|
1142
|
+
* a channel-scoped subscriber that would have heard about one of those
|
|
1143
|
+
* specific keys could silently stop hearing about it once the bucket flips
|
|
1144
|
+
* to wildcard. Once a bucket is a wildcard it can never downgrade back to a
|
|
1145
|
+
* `Map`; a keyed touch that arrives after that point still folds its channel
|
|
1146
|
+
* into the wildcard's `ChannelSet` (the specific key itself is discarded,
|
|
1147
|
+
* since the wildcard already covers it).
|
|
1062
1148
|
*/
|
|
1063
|
-
function mergeIntoBuffer(buffer, value, key) {
|
|
1149
|
+
function mergeIntoBuffer(buffer, value, key, channel) {
|
|
1064
1150
|
if (value !== "attributes" && value !== "relationships") {
|
|
1065
1151
|
buffer.set(value, null);
|
|
1066
1152
|
return;
|
|
1067
1153
|
}
|
|
1068
1154
|
const existing = buffer.get(value);
|
|
1069
1155
|
if (key === null || key === void 0) {
|
|
1070
|
-
|
|
1156
|
+
const channels = existing instanceof Set ? existing : /* @__PURE__ */ new Set();
|
|
1157
|
+
if (existing instanceof Map) for (const channelsForKey of existing.values()) for (const ch of channelsForKey) channels.add(ch);
|
|
1158
|
+
channels.add(channel ?? UnscopedChannel);
|
|
1159
|
+
buffer.set(value, channels);
|
|
1160
|
+
return;
|
|
1161
|
+
}
|
|
1162
|
+
if (existing instanceof Set) {
|
|
1163
|
+
existing.add(channel ?? UnscopedChannel);
|
|
1071
1164
|
return;
|
|
1072
1165
|
}
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1166
|
+
const map = existing ?? /* @__PURE__ */ new Map();
|
|
1167
|
+
if (!existing) buffer.set(value, map);
|
|
1168
|
+
const keys = key instanceof Set ? key : [key];
|
|
1169
|
+
for (const k of keys) {
|
|
1170
|
+
let channels = map.get(k);
|
|
1171
|
+
if (!channels) {
|
|
1172
|
+
channels = /* @__PURE__ */ new Set();
|
|
1173
|
+
map.set(k, channels);
|
|
1174
|
+
}
|
|
1175
|
+
channels.add(channel ?? UnscopedChannel);
|
|
1176
|
+
}
|
|
1177
|
+
}
|
|
1178
|
+
/**
|
|
1179
|
+
* Given the set of channels a touch (or coalesced group of touches) was
|
|
1180
|
+
* recorded with, determines whether a subscriber scoped to `subscriberChannel`
|
|
1181
|
+
* should be delivered to (see the delivery matrix on
|
|
1182
|
+
* {@link NotificationChannel}): a subscriber hears a touch-set if any of its
|
|
1183
|
+
* touches was unscoped or tagged with the subscriber's own channel; a
|
|
1184
|
+
* touch-set exclusively tagged with the *other* channel is skipped.
|
|
1185
|
+
*/
|
|
1186
|
+
function shouldDeliverToChannel(channels, subscriberChannel) {
|
|
1187
|
+
return channels.has(UnscopedChannel) || channels.has(subscriberChannel);
|
|
1078
1188
|
}
|
|
1079
1189
|
function _unsubscribe(token, cache) {
|
|
1080
1190
|
const cacheKey = token.for;
|
|
@@ -1132,12 +1242,26 @@ var NotificationManager = class {
|
|
|
1132
1242
|
* }
|
|
1133
1243
|
* ```
|
|
1134
1244
|
*
|
|
1245
|
+
* A `channel` may be provided when subscribing to a `ResourceKey`. Its
|
|
1246
|
+
* effect is that the subscription skips `'attributes'`/`'relationships'`
|
|
1247
|
+
* notifications explicitly tagged with the *other* channel; unscoped
|
|
1248
|
+
* notifications, and notifications for all other notification types, always
|
|
1249
|
+
* reach the subscriber. Subscribing `'local'` and omitting the channel are
|
|
1250
|
+
* the same thing. See {@link NotificationChannel}.
|
|
1251
|
+
*
|
|
1252
|
+
* | notify ↓ subscribe → | `'local'` | `'remote'` | omitted (= `'local'`) |
|
|
1253
|
+
* | -------------------- | --------- | ---------- | --------------------- |
|
|
1254
|
+
* | `'local'` | ✅ | ❌ | ✅ |
|
|
1255
|
+
* | `'remote'` | ❌ | ✅ | ❌ |
|
|
1256
|
+
* | omitted | ✅ | ✅ | ✅ |
|
|
1257
|
+
*
|
|
1135
1258
|
* @public
|
|
1136
1259
|
* @return an opaque token to be used with unsubscribe
|
|
1137
1260
|
*/
|
|
1138
|
-
subscribe(cacheKey, callback) {
|
|
1261
|
+
subscribe(cacheKey, callback, channel) {
|
|
1139
1262
|
let callbacks = this._cache.get(cacheKey);
|
|
1140
1263
|
callback.for = cacheKey;
|
|
1264
|
+
callback.channel = channel ?? "local";
|
|
1141
1265
|
if (!callbacks) {
|
|
1142
1266
|
callbacks = [];
|
|
1143
1267
|
this._cache.set(cacheKey, callbacks);
|
|
@@ -1167,9 +1291,22 @@ var NotificationManager = class {
|
|
|
1167
1291
|
* buffer/flush scheduling) only once for the whole batch instead of once
|
|
1168
1292
|
* per key.
|
|
1169
1293
|
*
|
|
1294
|
+
* A `channel` may be supplied for the `'attributes'`/`'relationships'`
|
|
1295
|
+
* namespaces. Tagging a notification `'local'` declares "only the local
|
|
1296
|
+
* (reconciled/editable) view changed"; tagging it `'remote'` declares "only
|
|
1297
|
+
* the remote view changed". Each tag is delivered only to that channel's
|
|
1298
|
+
* subscribers. Omitting the channel reaches every subscriber regardless of
|
|
1299
|
+
* its channel. See {@link NotificationChannel}.
|
|
1300
|
+
*
|
|
1301
|
+
* | notify ↓ subscribe → | `'local'` | `'remote'` | omitted (= `'local'`) |
|
|
1302
|
+
* | -------------------- | --------- | ---------- | --------------------- |
|
|
1303
|
+
* | `'local'` | ✅ | ❌ | ✅ |
|
|
1304
|
+
* | `'remote'` | ❌ | ✅ | ❌ |
|
|
1305
|
+
* | omitted | ✅ | ✅ | ✅ |
|
|
1306
|
+
*
|
|
1170
1307
|
* @private
|
|
1171
1308
|
*/
|
|
1172
|
-
notify(cacheKey, value, key) {
|
|
1309
|
+
notify(cacheKey, value, key, channel) {
|
|
1173
1310
|
if (this.isDestroyed) return false;
|
|
1174
1311
|
if (!isResourceKey(cacheKey) && !isRequestKey(cacheKey)) return false;
|
|
1175
1312
|
const _hasSubscribers = hasSubscribers(this._cache, cacheKey, value);
|
|
@@ -1179,7 +1316,7 @@ var NotificationManager = class {
|
|
|
1179
1316
|
buffer = /* @__PURE__ */ new Map();
|
|
1180
1317
|
this._buffered.set(cacheKey, buffer);
|
|
1181
1318
|
}
|
|
1182
|
-
mergeIntoBuffer(buffer, value, key);
|
|
1319
|
+
mergeIntoBuffer(buffer, value, key, channel);
|
|
1183
1320
|
if (!this._scheduleNotify()) {}
|
|
1184
1321
|
}
|
|
1185
1322
|
return _hasSubscribers;
|
|
@@ -1206,8 +1343,9 @@ var NotificationManager = class {
|
|
|
1206
1343
|
const buffered = this._buffered;
|
|
1207
1344
|
if (buffered.size) {
|
|
1208
1345
|
this._buffered = /* @__PURE__ */ new Map();
|
|
1209
|
-
for (const [cacheKey, states] of buffered) for (const [value,
|
|
1210
|
-
else
|
|
1346
|
+
for (const [cacheKey, states] of buffered) for (const [value, bucket] of states) if (bucket === null) _flushNotification(this._cache, cacheKey, value, null);
|
|
1347
|
+
else if (bucket instanceof Set) _flushNotification(this._cache, cacheKey, value, null, bucket);
|
|
1348
|
+
else for (const [key, channels] of bucket) _flushNotification(this._cache, cacheKey, value, key, channels);
|
|
1211
1349
|
}
|
|
1212
1350
|
this._hasFlush = false;
|
|
1213
1351
|
this._onFlushCB?.();
|
|
@@ -1226,7 +1364,7 @@ var NotificationManager = class {
|
|
|
1226
1364
|
*
|
|
1227
1365
|
* @private
|
|
1228
1366
|
*/
|
|
1229
|
-
function _flushNotification(cache, cacheKey, value, key) {
|
|
1367
|
+
function _flushNotification(cache, cacheKey, value, key, channels) {
|
|
1230
1368
|
if (isCacheOperationValue(value)) {
|
|
1231
1369
|
const callbackMap = cache.get(isRequestKey(cacheKey) ? "document" : "resource");
|
|
1232
1370
|
if (callbackMap) callbackMap.forEach((cb) => {
|
|
@@ -1236,6 +1374,10 @@ function _flushNotification(cache, cacheKey, value, key) {
|
|
|
1236
1374
|
const callbacks = cache.get(cacheKey);
|
|
1237
1375
|
if (!callbacks || !callbacks.length) return false;
|
|
1238
1376
|
callbacks.forEach((cb) => {
|
|
1377
|
+
if (channels) {
|
|
1378
|
+
const subscriberChannel = cb.channel;
|
|
1379
|
+
if (!shouldDeliverToChannel(channels, subscriberChannel)) return;
|
|
1380
|
+
}
|
|
1239
1381
|
cb(cacheKey, value, key);
|
|
1240
1382
|
});
|
|
1241
1383
|
return true;
|
|
@@ -2065,7 +2207,7 @@ var RecordArrayManager = class {
|
|
|
2065
2207
|
}
|
|
2066
2208
|
getCollection(config) {
|
|
2067
2209
|
if ("requestKey" in config && this._keyedArrays.has(config.requestKey.lid)) return this._keyedArrays.get(config.requestKey.lid);
|
|
2068
|
-
let array
|
|
2210
|
+
let array;
|
|
2069
2211
|
if ("requestKey" in config) {
|
|
2070
2212
|
const options = {
|
|
2071
2213
|
store: this.store,
|
|
@@ -2845,7 +2987,7 @@ var Store = class extends BaseClass {
|
|
|
2845
2987
|
this._join(() => {
|
|
2846
2988
|
const normalizedModelName = normalizeModelName(type);
|
|
2847
2989
|
const properties = { ...inputProperties };
|
|
2848
|
-
let id
|
|
2990
|
+
let id;
|
|
2849
2991
|
if (properties.id === null || properties.id === void 0) {
|
|
2850
2992
|
const adapter = this.adapterFor?.(normalizedModelName, true);
|
|
2851
2993
|
if (adapter && adapter.generateIdForRecord) id = properties.id = coerceId(adapter.generateIdForRecord(this, normalizedModelName, properties));
|
|
@@ -4426,7 +4568,7 @@ var ManyArrayManager = class {
|
|
|
4426
4568
|
if (rawValue.meta) array.meta = rawValue.meta;
|
|
4427
4569
|
if (rawValue.links) array.links = rawValue.links;
|
|
4428
4570
|
const currentState = array[Context].source;
|
|
4429
|
-
if (currentState !== rawValue.data) {
|
|
4571
|
+
if (rawValue.data !== void 0 && currentState !== rawValue.data) {
|
|
4430
4572
|
currentState.length = 0;
|
|
4431
4573
|
fastPush(currentState, rawValue.data);
|
|
4432
4574
|
}
|
|
@@ -4478,7 +4620,7 @@ function getHasManyField(context) {
|
|
|
4478
4620
|
if (cached) return cached;
|
|
4479
4621
|
const { editable, resourceKey } = context;
|
|
4480
4622
|
const { cache } = store;
|
|
4481
|
-
const rawValue = cache.getRelationship(resourceKey, getFieldCacheKeyStrict(field));
|
|
4623
|
+
const rawValue = editable ? cache.getRelationship(resourceKey, getFieldCacheKeyStrict(field)) : cache.getRemoteRelationship(resourceKey, getFieldCacheKeyStrict(field));
|
|
4482
4624
|
if (!rawValue) return null;
|
|
4483
4625
|
const managedArray = createLegacyManyArray({
|
|
4484
4626
|
store,
|
|
@@ -5047,7 +5189,7 @@ var ReactiveResource = class ReactiveResource {
|
|
|
5047
5189
|
}
|
|
5048
5190
|
}
|
|
5049
5191
|
}
|
|
5050
|
-
});
|
|
5192
|
+
}, context.legacy || context.editable ? "local" : "remote");
|
|
5051
5193
|
const proxy = new Proxy(this, {
|
|
5052
5194
|
ownKeys() {
|
|
5053
5195
|
const identityKey = identityField?.name;
|
|
@@ -6311,6 +6453,7 @@ const ERROR_STATUS_CODE_FOR = /* @__PURE__ */ new Map([
|
|
|
6311
6453
|
* ```
|
|
6312
6454
|
*
|
|
6313
6455
|
* @public
|
|
6456
|
+
* @badge Handler
|
|
6314
6457
|
*/
|
|
6315
6458
|
const Fetch = {
|
|
6316
6459
|
/**
|
|
@@ -6796,4 +6939,4 @@ function useRecommendedStore(options, StoreKlass = Store) {
|
|
|
6796
6939
|
|
|
6797
6940
|
//#endregion
|
|
6798
6941
|
export { coerceId as A, isResourceKey as C, setIdentifierUpdateMethod as D, setIdentifierResetMethod as E, setRecordIdentifier as F, storeFor as I, assertPrivateCapabilities as L, StoreMap as M, _clearCaches as N, setKeyInfoForResource as O, recordIdentifierFor as P, isRequestKey as S, setIdentifierGenerationMethod as T, Store as _, fromIdentity as a, RecordArrayManager as b, instantiateRecord as c, commit as d, log as f, CacheHandler as g, constructResource as h, SchemaService as i, ensureStringId as j, normalizeModelName as k, teardownRecord as l, createLegacyManyArray as m, RequestManager as n, registerDerivations as o, logGroup as p, Fetch as r, withDefaults as s, useRecommendedStore as t, checkout as u, assertPrivateStore as v, setIdentifierForgetMethod as w, fastPush as x, isPrivateStore as y };
|
|
6799
|
-
//# sourceMappingURL=src-
|
|
6942
|
+
//# sourceMappingURL=src-C0wuASrN.js.map
|