@isograph/react 0.0.0-main-a840a70e → 0.0.0-main-c09c9dbf
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/.turbo/turbo-compile-libs.log +8 -5
- package/.turbo/turbo-tsc.log +2 -2
- package/dist/_virtual/{rolldown_runtime.js → rolldown_runtime.cjs} +10 -6
- package/dist/core/{FragmentReference.js → FragmentReference.cjs} +1 -1
- package/dist/core/{FragmentReference.d.ts → FragmentReference.d.cts} +5 -5
- package/dist/core/FragmentReference.d.cts.map +1 -0
- package/dist/core/FragmentReference.d.mts.map +1 -1
- package/dist/core/{IsographEnvironment.js → IsographEnvironment.cjs} +5 -5
- package/dist/core/{IsographEnvironment.d.ts → IsographEnvironment.d.cts} +15 -16
- package/dist/core/IsographEnvironment.d.cts.map +1 -0
- package/dist/core/IsographEnvironment.d.mts +5 -6
- package/dist/core/IsographEnvironment.d.mts.map +1 -1
- package/dist/core/IsographEnvironment.mjs +3 -3
- package/dist/core/IsographEnvironment.mjs.map +1 -1
- package/dist/core/{PromiseWrapper.d.ts → PromiseWrapper.d.cts} +1 -1
- package/dist/core/PromiseWrapper.d.cts.map +1 -0
- package/dist/core/PromiseWrapper.d.mts.map +1 -1
- package/dist/core/PromiseWrapper.mjs.map +1 -1
- package/dist/core/{areEqualWithDeepComparison.js → areEqualWithDeepComparison.cjs} +7 -7
- package/dist/core/areEqualWithDeepComparison.mjs +7 -7
- package/dist/core/areEqualWithDeepComparison.mjs.map +1 -1
- package/dist/core/{brand.d.ts → brand.d.cts} +2 -2
- package/dist/core/brand.d.cts.map +1 -0
- package/dist/core/brand.d.mts +1 -1
- package/dist/core/brand.d.mts.map +1 -1
- package/dist/core/{cache.js → cache.cjs} +11 -12
- package/dist/core/cache.d.cts +44 -0
- package/dist/core/cache.d.cts.map +1 -0
- package/dist/core/cache.d.mts +27 -19
- package/dist/core/cache.d.mts.map +1 -1
- package/dist/core/cache.mjs +4 -4
- package/dist/core/cache.mjs.map +1 -1
- package/dist/core/{check.js → check.cjs} +4 -4
- package/dist/core/{check.d.ts → check.d.cts} +4 -4
- package/dist/core/check.d.cts.map +1 -0
- package/dist/core/check.d.mts.map +1 -1
- package/dist/core/check.mjs.map +1 -1
- package/dist/core/{componentCache.js → componentCache.cjs} +2 -2
- package/dist/core/{entrypoint.d.ts → entrypoint.d.cts} +7 -7
- package/dist/core/entrypoint.d.cts.map +1 -0
- package/dist/core/entrypoint.d.mts.map +1 -1
- package/dist/core/{garbageCollection.js → garbageCollection.cjs} +3 -3
- package/dist/core/{garbageCollection.d.ts → garbageCollection.d.cts} +4 -4
- package/dist/core/garbageCollection.d.cts.map +1 -0
- package/dist/core/garbageCollection.d.mts.map +1 -1
- package/dist/core/garbageCollection.mjs.map +1 -1
- package/dist/core/{getOrCreateCacheForArtifact.js → getOrCreateCacheForArtifact.cjs} +4 -4
- package/dist/core/getOrCreateCacheForArtifact.mjs.map +1 -1
- package/dist/core/{logging.d.ts → logging.d.cts} +9 -10
- package/dist/core/logging.d.cts.map +1 -0
- package/dist/core/logging.d.mts +0 -1
- package/dist/core/logging.d.mts.map +1 -1
- package/dist/core/{makeNetworkRequest.js → makeNetworkRequest.cjs} +15 -15
- package/dist/core/{makeNetworkRequest.d.ts → makeNetworkRequest.d.cts} +7 -7
- package/dist/core/makeNetworkRequest.d.cts.map +1 -0
- package/dist/core/makeNetworkRequest.d.mts.map +1 -1
- package/dist/core/makeNetworkRequest.mjs +4 -4
- package/dist/core/makeNetworkRequest.mjs.map +1 -1
- package/dist/core/{optimisticProxy.js → optimisticProxy.cjs} +2 -2
- package/dist/core/{optimisticProxy.d.ts → optimisticProxy.d.cts} +2 -3
- package/dist/core/optimisticProxy.d.cts.map +1 -0
- package/dist/core/optimisticProxy.d.mts +0 -1
- package/dist/core/optimisticProxy.d.mts.map +1 -1
- package/dist/core/optimisticProxy.mjs.map +1 -1
- package/dist/core/{read.js → read.cjs} +47 -47
- package/dist/core/{read.d.ts → read.d.cts} +4 -5
- package/dist/core/read.d.cts.map +1 -0
- package/dist/core/read.d.mts.map +1 -1
- package/dist/core/read.mjs +39 -39
- package/dist/core/read.mjs.map +1 -1
- package/dist/core/{reader.d.ts → reader.d.cts} +6 -6
- package/dist/core/reader.d.cts.map +1 -0
- package/dist/core/reader.d.mts.map +1 -1
- package/dist/core/{startUpdate.js → startUpdate.cjs} +14 -14
- package/dist/core/startUpdate.mjs +6 -6
- package/dist/core/startUpdate.mjs.map +1 -1
- package/dist/core/{subscribe.js → subscribe.cjs} +3 -3
- package/dist/core/{subscribe.d.ts → subscribe.d.cts} +6 -6
- package/dist/core/subscribe.d.cts.map +1 -0
- package/dist/core/subscribe.d.mts.map +1 -1
- package/dist/core/subscribe.mjs.map +1 -1
- package/dist/core/{util.d.ts → util.d.cts} +1 -1
- package/dist/core/util.d.cts.map +1 -0
- package/dist/core/util.d.mts.map +1 -1
- package/dist/core/util.mjs.map +1 -1
- package/dist/core/{writeData.js → writeData.cjs} +6 -6
- package/dist/core/{writeData.d.ts → writeData.d.cts} +6 -6
- package/dist/core/writeData.d.cts.map +1 -0
- package/dist/core/writeData.d.mts +1 -1
- package/dist/core/writeData.d.mts.map +1 -1
- package/dist/core/writeData.mjs.map +1 -1
- package/dist/{index.js → index.cjs} +29 -29
- package/dist/{index.d.ts → index.d.cts} +31 -31
- package/dist/loadable-hooks/useClientSideDefer.cjs +14 -0
- package/dist/loadable-hooks/{useClientSideDefer.d.ts → useClientSideDefer.d.cts} +4 -4
- package/dist/loadable-hooks/useClientSideDefer.d.cts.map +1 -0
- package/dist/loadable-hooks/useClientSideDefer.d.mts.map +1 -1
- package/dist/loadable-hooks/{useConnectionSpecPagination.js → useConnectionSpecPagination.cjs} +13 -16
- package/dist/loadable-hooks/{useConnectionSpecPagination.d.ts → useConnectionSpecPagination.d.cts} +4 -4
- package/dist/loadable-hooks/useConnectionSpecPagination.d.cts.map +1 -0
- package/dist/loadable-hooks/useConnectionSpecPagination.d.mts.map +1 -1
- package/dist/loadable-hooks/useConnectionSpecPagination.mjs.map +1 -1
- package/dist/loadable-hooks/{useImperativeExposedMutationField.d.ts → useImperativeExposedMutationField.d.cts} +1 -1
- package/dist/loadable-hooks/useImperativeExposedMutationField.d.cts.map +1 -0
- package/dist/loadable-hooks/useImperativeExposedMutationField.d.mts.map +1 -1
- package/dist/loadable-hooks/{useImperativeLoadableField.js → useImperativeLoadableField.cjs} +4 -5
- package/dist/loadable-hooks/{useImperativeLoadableField.d.ts → useImperativeLoadableField.d.cts} +4 -4
- package/dist/loadable-hooks/useImperativeLoadableField.d.cts.map +1 -0
- package/dist/loadable-hooks/useImperativeLoadableField.d.mts.map +1 -1
- package/dist/loadable-hooks/{useSkipLimitPagination.js → useSkipLimitPagination.cjs} +13 -16
- package/dist/loadable-hooks/{useSkipLimitPagination.d.ts → useSkipLimitPagination.d.cts} +4 -4
- package/dist/loadable-hooks/useSkipLimitPagination.d.cts.map +1 -0
- package/dist/loadable-hooks/useSkipLimitPagination.d.mts.map +1 -1
- package/dist/loadable-hooks/useSkipLimitPagination.mjs.map +1 -1
- package/dist/react/{FragmentReader.js → FragmentReader.cjs} +1 -1
- package/dist/react/{FragmentReader.d.ts → FragmentReader.d.cts} +5 -5
- package/dist/react/FragmentReader.d.cts.map +1 -0
- package/dist/react/FragmentReader.d.mts.map +1 -1
- package/dist/react/{FragmentRenderer.js → FragmentRenderer.cjs} +2 -2
- package/dist/react/{FragmentRenderer.d.ts → FragmentRenderer.d.cts} +5 -5
- package/dist/react/FragmentRenderer.d.cts.map +1 -0
- package/dist/react/FragmentRenderer.d.mts.map +1 -1
- package/dist/react/{IsographEnvironmentProvider.js → IsographEnvironmentProvider.cjs} +1 -1
- package/dist/react/{IsographEnvironmentProvider.d.ts → IsographEnvironmentProvider.d.cts} +2 -2
- package/dist/react/IsographEnvironmentProvider.d.cts.map +1 -0
- package/dist/react/IsographEnvironmentProvider.d.mts.map +1 -1
- package/dist/react/{LoadableFieldReader.js → LoadableFieldReader.cjs} +3 -3
- package/dist/react/{LoadableFieldReader.d.ts → LoadableFieldReader.d.cts} +5 -5
- package/dist/react/LoadableFieldReader.d.cts.map +1 -0
- package/dist/react/LoadableFieldReader.d.mts.map +1 -1
- package/dist/react/{LoadableFieldRenderer.js → LoadableFieldRenderer.cjs} +3 -3
- package/dist/react/{LoadableFieldRenderer.d.ts → LoadableFieldRenderer.d.cts} +5 -5
- package/dist/react/LoadableFieldRenderer.d.cts.map +1 -0
- package/dist/react/LoadableFieldRenderer.d.mts.map +1 -1
- package/dist/react/{RenderAfterCommit__DO_NOT_USE.js → RenderAfterCommit__DO_NOT_USE.cjs} +1 -2
- package/dist/react/{RenderAfterCommit__DO_NOT_USE.d.ts → RenderAfterCommit__DO_NOT_USE.d.cts} +1 -2
- package/dist/react/RenderAfterCommit__DO_NOT_USE.d.cts.map +1 -0
- package/dist/react/RenderAfterCommit__DO_NOT_USE.d.mts +0 -1
- package/dist/react/RenderAfterCommit__DO_NOT_USE.d.mts.map +1 -1
- package/dist/react/{createIsographEnvironment.js → createIsographEnvironment.cjs} +2 -2
- package/dist/react/{createIsographEnvironment.d.ts → createIsographEnvironment.d.cts} +3 -3
- package/dist/react/createIsographEnvironment.d.cts.map +1 -0
- package/dist/react/createIsographEnvironment.d.mts +0 -1
- package/dist/react/createIsographEnvironment.d.mts.map +1 -1
- package/dist/react/{maybeUnwrapNetworkRequest.js → maybeUnwrapNetworkRequest.cjs} +1 -1
- package/dist/react/{useImperativeReference.js → useImperativeReference.cjs} +7 -8
- package/dist/react/{useImperativeReference.d.ts → useImperativeReference.d.cts} +5 -6
- package/dist/react/useImperativeReference.d.cts.map +1 -0
- package/dist/react/useImperativeReference.d.mts +0 -1
- package/dist/react/useImperativeReference.d.mts.map +1 -1
- package/dist/react/useLazyReference.cjs +18 -0
- package/dist/react/{useLazyReference.d.ts → useLazyReference.d.cts} +5 -6
- package/dist/react/useLazyReference.d.cts.map +1 -0
- package/dist/react/useLazyReference.d.mts +0 -1
- package/dist/react/useLazyReference.d.mts.map +1 -1
- package/dist/react/{useReadAndSubscribe.js → useReadAndSubscribe.cjs} +9 -10
- package/dist/react/{useReadAndSubscribe.d.ts → useReadAndSubscribe.d.cts} +4 -5
- package/dist/react/useReadAndSubscribe.d.cts.map +1 -0
- package/dist/react/useReadAndSubscribe.d.mts +0 -1
- package/dist/react/useReadAndSubscribe.d.mts.map +1 -1
- package/dist/react/useReadAndSubscribe.mjs.map +1 -1
- package/dist/react/{useRerenderOnChange.js → useRerenderOnChange.cjs} +3 -4
- package/dist/react/{useRerenderOnChange.d.ts → useRerenderOnChange.d.cts} +4 -4
- package/dist/react/useRerenderOnChange.d.cts.map +1 -0
- package/dist/react/useRerenderOnChange.d.mts.map +1 -1
- package/dist/react/{useResult.js → useResult.cjs} +7 -7
- package/dist/react/{useResult.d.ts → useResult.d.cts} +3 -3
- package/dist/react/useResult.d.cts.map +1 -0
- package/dist/react/useResult.d.mts.map +1 -1
- package/package.json +9 -9
- package/src/core/IsographEnvironment.ts +8 -4
- package/src/core/cache.ts +38 -25
- package/src/core/getOrCreateCacheForArtifact.ts +2 -2
- package/src/core/writeData.ts +4 -4
- package/src/tests/garbageCollection.test.ts +11 -11
- package/src/tests/normalizeData.test.ts +11 -3
- package/src/tests/optimisticProxy.test.ts +23 -23
- package/src/tests/startUpdate.test.ts +2 -2
- package/tsconfig.json +5 -4
- package/tsconfig.package.json +8 -0
- package/tsconfig.package.tsbuildinfo +1 -0
- package/tsconfig.test.json +12 -0
- package/tsconfig.test.tsbuildinfo +1 -0
- package/tsdown.config.ts +8 -0
- package/vitest.config.ts +1 -1
- package/dist/core/FragmentReference.d.ts.map +0 -1
- package/dist/core/IsographEnvironment.d.ts.map +0 -1
- package/dist/core/PromiseWrapper.d.ts.map +0 -1
- package/dist/core/brand.d.ts.map +0 -1
- package/dist/core/cache.d.ts +0 -37
- package/dist/core/cache.d.ts.map +0 -1
- package/dist/core/check.d.ts.map +0 -1
- package/dist/core/entrypoint.d.ts.map +0 -1
- package/dist/core/garbageCollection.d.ts.map +0 -1
- package/dist/core/logging.d.ts.map +0 -1
- package/dist/core/makeNetworkRequest.d.ts.map +0 -1
- package/dist/core/optimisticProxy.d.ts.map +0 -1
- package/dist/core/read.d.ts.map +0 -1
- package/dist/core/reader.d.ts.map +0 -1
- package/dist/core/subscribe.d.ts.map +0 -1
- package/dist/core/util.d.ts.map +0 -1
- package/dist/core/writeData.d.ts.map +0 -1
- package/dist/loadable-hooks/useClientSideDefer.d.ts.map +0 -1
- package/dist/loadable-hooks/useClientSideDefer.js +0 -15
- package/dist/loadable-hooks/useConnectionSpecPagination.d.ts.map +0 -1
- package/dist/loadable-hooks/useImperativeExposedMutationField.d.ts.map +0 -1
- package/dist/loadable-hooks/useImperativeLoadableField.d.ts.map +0 -1
- package/dist/loadable-hooks/useSkipLimitPagination.d.ts.map +0 -1
- package/dist/react/FragmentReader.d.ts.map +0 -1
- package/dist/react/FragmentRenderer.d.ts.map +0 -1
- package/dist/react/IsographEnvironmentProvider.d.ts.map +0 -1
- package/dist/react/LoadableFieldReader.d.ts.map +0 -1
- package/dist/react/LoadableFieldRenderer.d.ts.map +0 -1
- package/dist/react/RenderAfterCommit__DO_NOT_USE.d.ts.map +0 -1
- package/dist/react/createIsographEnvironment.d.ts.map +0 -1
- package/dist/react/useImperativeReference.d.ts.map +0 -1
- package/dist/react/useLazyReference.d.ts.map +0 -1
- package/dist/react/useLazyReference.js +0 -19
- package/dist/react/useReadAndSubscribe.d.ts.map +0 -1
- package/dist/react/useRerenderOnChange.d.ts.map +0 -1
- package/dist/react/useResult.d.ts.map +0 -1
- package/src/tests/tsconfig.json +0 -21
- package/tsconfig.pkg.json +0 -16
- /package/dist/core/{PromiseWrapper.js → PromiseWrapper.cjs} +0 -0
- /package/dist/core/{entrypoint.js → entrypoint.cjs} +0 -0
- /package/dist/core/{logging.js → logging.cjs} +0 -0
- /package/dist/core/{util.js → util.cjs} +0 -0
- /package/dist/loadable-hooks/{useImperativeExposedMutationField.js → useImperativeExposedMutationField.cjs} +0 -0
package/dist/core/cache.d.mts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { Brand } from "./brand.mjs";
|
|
2
1
|
import "./reader.mjs";
|
|
3
2
|
import { StoreLayerWithData } from "./optimisticProxy.mjs";
|
|
4
3
|
import { DataId, IsographEnvironment, StoreLink, TypeName } from "./IsographEnvironment.mjs";
|
|
@@ -10,28 +9,37 @@ import { ParentCache } from "@isograph/react-disposable-state";
|
|
|
10
9
|
type NetworkResponsePlural<T> = null | T | readonly T[] | readonly (null | T)[];
|
|
11
10
|
type NetworkResponseScalarValue = string | number | boolean | unknown;
|
|
12
11
|
type NetworkResponseValue = NetworkResponsePlural<NetworkResponseScalarValue> | NetworkResponsePlural<NetworkResponseObject>;
|
|
13
|
-
type NetworkResponseObject = {
|
|
12
|
+
type NetworkResponseObject = {
|
|
13
|
+
readonly [key: ScalarNetworkResponseKey]: undefined | NetworkResponsePlural<NetworkResponseScalarValue>;
|
|
14
|
+
readonly [key: LinkedNetworkResponseKey]: undefined | NetworkResponsePlural<NetworkResponseObject>;
|
|
15
|
+
readonly [key: NetworkResponseKey]: undefined | NetworkResponsePlural<NetworkResponseScalarValue> | NetworkResponsePlural<NetworkResponseObject>;
|
|
14
16
|
readonly id?: DataId;
|
|
15
17
|
readonly __typename?: TypeName;
|
|
16
18
|
};
|
|
17
19
|
declare function normalizeData(environment: IsographEnvironment, storeLayer: StoreLayerWithData, normalizationAst: NormalizationAstNodes, networkResponse: NetworkResponseObject, variables: Variables, root: StoreLink, encounteredIds: EncounteredIds): EncounteredIds;
|
|
18
20
|
type EncounteredIds = Map<TypeName, Set<DataId>>;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
type
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
21
|
+
type ParentRecordKey = string;
|
|
22
|
+
/**
|
|
23
|
+
* these don't actually start with the different prefixes, but they let
|
|
24
|
+
* us use multiple indexes, e.g.
|
|
25
|
+
* {
|
|
26
|
+
* readonly [key: `NOT_AN_ACTUAL_TYPE_LinkedParentRecordKey_${string} `]: ...
|
|
27
|
+
* readonly [key: `NOT_AN_ACTUAL_TYPE_ScalarParentRecordKey_${string} `]: ...
|
|
28
|
+
* }
|
|
29
|
+
*/
|
|
30
|
+
type LinkedParentRecordKey = `NOT_AN_ACTUAL_TYPE_LinkedParentRecordKey_${string}`;
|
|
31
|
+
type ScalarParentRecordKey = `NOT_AN_ACTUAL_TYPE_ScalarParentRecordKey_${string}`;
|
|
32
|
+
type NetworkResponseKey = string;
|
|
33
|
+
/**
|
|
34
|
+
* these don't actually start with the different prefixes, but they let
|
|
35
|
+
* us use multiple indexes, e.g.
|
|
36
|
+
* {
|
|
37
|
+
* readonly [key: `NOT_AN_ACTUAL_TYPE_LinkedNetworkResponseKey_${string} `]: ...
|
|
38
|
+
* readonly [key: `NOT_AN_ACTUAL_TYPE_ScalarNetworkResponseKey_${string} `]: ...
|
|
39
|
+
* }
|
|
40
|
+
*/
|
|
41
|
+
type LinkedNetworkResponseKey = `NOT_AN_ACTUAL_TYPE_LinkedNetworkResponseKey_${string}`;
|
|
42
|
+
type ScalarNetworkResponseKey = `NOT_AN_ACTUAL_TYPE_ScalarNetworkResponseKey_${string}`;
|
|
35
43
|
//#endregion
|
|
36
|
-
export { EncounteredIds, LinkedParentRecordKey, NetworkResponseObject, NetworkResponseScalarValue, NetworkResponseValue, ScalarParentRecordKey, normalizeData };
|
|
44
|
+
export { EncounteredIds, LinkedParentRecordKey, NetworkResponseObject, NetworkResponseScalarValue, NetworkResponseValue, ParentRecordKey, ScalarParentRecordKey, normalizeData };
|
|
37
45
|
//# sourceMappingURL=cache.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.d.mts","names":[],"sources":["../../src/core/cache.ts"],"
|
|
1
|
+
{"version":3,"file":"cache.d.mts","names":[],"sources":["../../src/core/cache.ts"],"mappings":";;;;;;;;KAgDY,qBAAA,aAER,CAAA,YACS,CAAA,sBACQ,CAAA;AAAA,KACT,0BAAA;AAAA,KAEA,oBAAA,GACR,qBAAA,CAAsB,0BAAA,IACtB,qBAAA,CAAsB,qBAAA;AAAA,KAEd,qBAAA;EAAA,UAGA,GAAA,EAAK,wBAAA,eAEX,qBAAA,CAAsB,0BAAA;EAAA,UAChB,GAAA,EAAK,wBAAA,eAEX,qBAAA,CAAsB,qBAAA;EAAA,UAChB,GAAA,EAAK,kBAAA,eAEX,qBAAA,CAAsB,0BAAA,IACtB,qBAAA,CAAsB,qBAAA;EAAA,SACjB,EAAA,GAAK,MAAA;EAAA,SACL,UAAA,GAAa,QAAA;AAAA;AAAA,iBAGR,aAAA,CACd,WAAA,EAAa,mBAAA,EACb,UAAA,EAAY,kBAAA,EACZ,gBAAA,EAAkB,qBAAA,EAClB,eAAA,EAAiB,qBAAA,EACjB,SAAA,EAAW,SAAA,EACX,IAAA,EAAM,SAAA,EACN,cAAA,EAAgB,cAAA,GACf,cAAA;AAAA,KAkES,cAAA,GAAiB,GAAA,CAAI,QAAA,EAAU,GAAA,CAAI,MAAA;AAAA,KAgSnC,eAAA;;;AA/XZ;;;;;;KAyYY,qBAAA;AAAA,KAEA,qBAAA;AAAA,KAwEA,kBAAA;;;;;AA/cZ;;;;KAydY,wBAAA;AAAA,KAEA,wBAAA"}
|
package/dist/core/cache.mjs
CHANGED
|
@@ -168,8 +168,8 @@ function getParentRecordKey(astNode, variables) {
|
|
|
168
168
|
}
|
|
169
169
|
function getStoreKeyChunkForArgumentValue(argumentValue, variables) {
|
|
170
170
|
switch (argumentValue.kind) {
|
|
171
|
-
case "Object": return Object.fromEntries(argumentValue.value.map(([argumentName, argumentValue
|
|
172
|
-
return [argumentName, getStoreKeyChunkForArgumentValue(argumentValue
|
|
171
|
+
case "Object": return Object.fromEntries(argumentValue.value.map(([argumentName, argumentValue]) => {
|
|
172
|
+
return [argumentName, getStoreKeyChunkForArgumentValue(argumentValue, variables)];
|
|
173
173
|
}));
|
|
174
174
|
case "Literal": return argumentValue.value;
|
|
175
175
|
case "Variable": return variables[argumentValue.name] ?? "null";
|
|
@@ -194,8 +194,8 @@ function getNetworkResponseKey(astNode) {
|
|
|
194
194
|
}
|
|
195
195
|
function getArgumentValueChunk(argumentValue) {
|
|
196
196
|
switch (argumentValue.kind) {
|
|
197
|
-
case "Object": return "o_" + argumentValue.value.map(([argumentName, argumentValue
|
|
198
|
-
return argumentName + THIRD_SPLIT_KEY + getArgumentValueChunk(argumentValue
|
|
197
|
+
case "Object": return "o_" + argumentValue.value.map(([argumentName, argumentValue]) => {
|
|
198
|
+
return argumentName + THIRD_SPLIT_KEY + getArgumentValueChunk(argumentValue);
|
|
199
199
|
}).join("_") + "_c";
|
|
200
200
|
case "Literal": return "l_" + argumentValue.value;
|
|
201
201
|
case "Variable": return "v_" + argumentValue.name;
|
package/dist/core/cache.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.mjs","names":["dataIds: (StoreLink | null)[]","argumentValue"],"sources":["../../src/core/cache.ts"],"sourcesContent":["import { type Factory, ParentCache } from '@isograph/react-disposable-state';\nimport type { Brand } from './brand';\nimport type {\n NormalizationAstNodes,\n NormalizationInlineFragment,\n NormalizationLinkedField,\n NormalizationScalarField,\n} from './entrypoint';\nimport type {\n FragmentReference,\n UnknownTReadFromStore,\n Variables,\n VariableValue,\n} from './FragmentReference';\nimport {\n type DataId,\n type DataTypeValueLinked,\n getLink,\n type IsographEnvironment,\n ROOT_ID,\n type StoreLink,\n type StoreRecord,\n type TypeName,\n} from './IsographEnvironment';\nimport { logMessage } from './logging';\nimport {\n getMutableStoreRecordProxy,\n type StoreLayerWithData,\n} from './optimisticProxy';\nimport type { ReaderLinkedField, ReaderScalarField } from './reader';\nimport { type Argument, type ArgumentValue, isArray, stableCopy } from './util';\n\nexport const TYPENAME_FIELD_NAME = '__typename';\n\nexport function getOrCreateItemInSuspenseCache<\n TReadFromStore extends UnknownTReadFromStore,\n TClientFieldValue,\n>(\n environment: IsographEnvironment,\n index: string,\n factory: Factory<FragmentReference<TReadFromStore, TClientFieldValue>>,\n): ParentCache<FragmentReference<TReadFromStore, TClientFieldValue>> {\n if (environment.fragmentCache[index] == null) {\n environment.fragmentCache[index] = new ParentCache(factory);\n }\n\n return environment.fragmentCache[index];\n}\n\nexport type NetworkResponsePlural<T> =\n | null\n | T\n | readonly T[]\n | readonly (null | T)[];\nexport type NetworkResponseScalarValue = string | number | boolean | unknown;\n\nexport type NetworkResponseValue =\n | NetworkResponsePlural<NetworkResponseScalarValue>\n | NetworkResponsePlural<NetworkResponseObject>;\n\nexport type NetworkResponseObject = {\n // N.B. undefined is here to support optional id's, but\n // undefined should not *actually* be present in the network response.\n readonly [K in\n | ScalarNetworkResponseKey\n | LinkedNetworkResponseKey]: K extends ScalarNetworkResponseKey\n ? undefined | NetworkResponsePlural<NetworkResponseScalarValue>\n : undefined | NetworkResponsePlural<NetworkResponseObject>;\n} & {\n readonly id?: DataId;\n readonly __typename?: TypeName;\n};\n\nexport function normalizeData(\n environment: IsographEnvironment,\n storeLayer: StoreLayerWithData,\n normalizationAst: NormalizationAstNodes,\n networkResponse: NetworkResponseObject,\n variables: Variables,\n root: StoreLink,\n encounteredIds: EncounteredIds,\n): EncounteredIds {\n logMessage(environment, () => ({\n kind: 'AboutToNormalize',\n normalizationAst,\n networkResponse,\n variables,\n }));\n\n const newStoreRecord = getMutableStoreRecordProxy(storeLayer, root);\n\n normalizeDataIntoRecord(\n environment,\n storeLayer,\n normalizationAst,\n networkResponse,\n newStoreRecord,\n root,\n variables,\n encounteredIds,\n );\n\n return encounteredIds;\n}\n\nexport function subscribeToAnyChange(\n environment: IsographEnvironment,\n callback: () => void,\n): () => void {\n const subscription = {\n kind: 'AnyRecords',\n callback,\n } as const;\n environment.subscriptions.add(subscription);\n return () => environment.subscriptions.delete(subscription);\n}\n\nexport function subscribeToAnyChangesToRecord(\n environment: IsographEnvironment,\n recordLink: StoreLink,\n callback: () => void,\n): () => void {\n const subscription = {\n kind: 'AnyChangesToRecord',\n recordLink,\n callback,\n } as const;\n environment.subscriptions.add(subscription);\n return () => environment.subscriptions.delete(subscription);\n}\n\nexport function onNextChangeToRecord(\n environment: IsographEnvironment,\n recordLink: StoreLink,\n): Promise<void> {\n return new Promise((resolve) => {\n const unsubscribe = subscribeToAnyChangesToRecord(\n environment,\n recordLink,\n () => {\n unsubscribe();\n resolve();\n },\n );\n });\n}\n\nexport type EncounteredIds = Map<TypeName, Set<DataId>>;\n/**\n * Mutate targetParentRecord according to the normalizationAst and networkResponseParentRecord.\n */\nfunction normalizeDataIntoRecord(\n environment: IsographEnvironment,\n storeLayer: StoreLayerWithData,\n normalizationAst: NormalizationAstNodes,\n networkResponseParentRecord: NetworkResponseObject,\n targetParentRecord: StoreRecord,\n targetParentRecordLink: StoreLink,\n variables: Variables,\n mutableEncounteredIds: EncounteredIds,\n): RecordHasBeenUpdated {\n let recordHasBeenUpdated = false;\n for (const normalizationNode of normalizationAst) {\n switch (normalizationNode.kind) {\n case 'Scalar': {\n const scalarFieldResultedInChange = normalizeScalarField(\n normalizationNode,\n networkResponseParentRecord,\n targetParentRecord,\n variables,\n );\n recordHasBeenUpdated =\n recordHasBeenUpdated || scalarFieldResultedInChange;\n break;\n }\n case 'Linked': {\n const linkedFieldResultedInChange = normalizeLinkedField(\n environment,\n storeLayer,\n normalizationNode,\n networkResponseParentRecord,\n targetParentRecord,\n targetParentRecordLink,\n variables,\n mutableEncounteredIds,\n );\n recordHasBeenUpdated =\n recordHasBeenUpdated || linkedFieldResultedInChange;\n break;\n }\n case 'InlineFragment': {\n const inlineFragmentResultedInChange = normalizeInlineFragment(\n environment,\n storeLayer,\n normalizationNode,\n networkResponseParentRecord,\n targetParentRecord,\n targetParentRecordLink,\n variables,\n mutableEncounteredIds,\n );\n recordHasBeenUpdated =\n recordHasBeenUpdated || inlineFragmentResultedInChange;\n break;\n }\n }\n }\n if (recordHasBeenUpdated) {\n let encounteredRecordsIds = insertEmptySetIfMissing(\n mutableEncounteredIds,\n targetParentRecordLink.__typename,\n );\n\n encounteredRecordsIds.add(targetParentRecordLink.__link);\n }\n return recordHasBeenUpdated;\n}\n\nexport function insertEmptySetIfMissing<K, V>(map: Map<K, Set<V>>, key: K) {\n let result = map.get(key);\n if (result === undefined) {\n result = new Set();\n map.set(key, result);\n }\n return result;\n}\n\ntype RecordHasBeenUpdated = boolean;\nfunction normalizeScalarField(\n astNode: NormalizationScalarField,\n networkResponseParentRecord: NetworkResponseObject,\n targetStoreRecord: StoreRecord,\n variables: Variables,\n): RecordHasBeenUpdated {\n const networkResponseKey = getNetworkResponseKey(astNode);\n const networkResponseData = networkResponseParentRecord[networkResponseKey];\n const parentRecordKey = getParentRecordKey(astNode, variables);\n const existingValue = targetStoreRecord[parentRecordKey];\n\n if (networkResponseData == null) {\n targetStoreRecord[parentRecordKey] = null;\n return existingValue === undefined || existingValue != null;\n }\n\n targetStoreRecord[parentRecordKey] = networkResponseData;\n return existingValue !== networkResponseData;\n}\n\n/**\n * Mutate targetParentRecord with a given linked field ast node.\n */\nfunction normalizeLinkedField(\n environment: IsographEnvironment,\n storeLayer: StoreLayerWithData,\n astNode: NormalizationLinkedField,\n networkResponseParentRecord: NetworkResponseObject,\n targetParentRecord: StoreRecord,\n targetParentRecordLink: StoreLink,\n variables: Variables,\n mutableEncounteredIds: EncounteredIds,\n): RecordHasBeenUpdated {\n const networkResponseKey = getNetworkResponseKey(astNode);\n const networkResponseData = networkResponseParentRecord[networkResponseKey];\n const parentRecordKey = getParentRecordKey(astNode, variables);\n const existingValue = targetParentRecord[parentRecordKey];\n\n if (networkResponseData == null) {\n targetParentRecord[parentRecordKey] = null;\n return existingValue === undefined || existingValue != null;\n }\n\n if (isArray(networkResponseData)) {\n // TODO check astNode.plural or the like\n const dataIds: (StoreLink | null)[] = [];\n for (let i = 0; i < networkResponseData.length; i++) {\n const networkResponseObject = networkResponseData[i];\n if (networkResponseObject == null) {\n dataIds.push(null);\n continue;\n }\n const newStoreRecordId = normalizeNetworkResponseObject(\n environment,\n storeLayer,\n astNode,\n networkResponseObject,\n targetParentRecordLink,\n variables,\n i,\n mutableEncounteredIds,\n );\n\n const __typename =\n astNode.concreteType ?? networkResponseObject[TYPENAME_FIELD_NAME];\n if (__typename == null) {\n throw new Error(\n 'Unexpected missing __typename in network response when normalizing a linked field. ' +\n 'This is indicative of a bug in Isograph.',\n );\n }\n dataIds.push({\n __link: newStoreRecordId,\n __typename,\n });\n }\n targetParentRecord[parentRecordKey] = dataIds;\n return !dataIdsAreTheSame(existingValue, dataIds);\n } else {\n const newStoreRecordId = normalizeNetworkResponseObject(\n environment,\n storeLayer,\n astNode,\n networkResponseData,\n targetParentRecordLink,\n variables,\n null,\n mutableEncounteredIds,\n );\n\n let __typename =\n astNode.concreteType ?? networkResponseData[TYPENAME_FIELD_NAME];\n\n if (__typename == null) {\n throw new Error(\n 'Unexpected missing __typename in network response when normalizing a linked field. ' +\n 'This is indicative of a bug in Isograph.',\n );\n }\n\n targetParentRecord[parentRecordKey] = {\n __link: newStoreRecordId,\n __typename,\n };\n\n const link = getLink(existingValue);\n return link?.__link !== newStoreRecordId || link.__typename !== __typename;\n }\n}\n\n/**\n * Mutate targetParentRecord with a given linked field ast node.\n */\nfunction normalizeInlineFragment(\n environment: IsographEnvironment,\n storeLayer: StoreLayerWithData,\n astNode: NormalizationInlineFragment,\n networkResponseParentRecord: NetworkResponseObject,\n targetParentRecord: StoreRecord,\n targetParentRecordLink: StoreLink,\n variables: Variables,\n mutableEncounteredIds: EncounteredIds,\n): RecordHasBeenUpdated {\n const typeToRefineTo = astNode.type;\n if (networkResponseParentRecord[TYPENAME_FIELD_NAME] === typeToRefineTo) {\n const hasBeenModified = normalizeDataIntoRecord(\n environment,\n storeLayer,\n astNode.selections,\n networkResponseParentRecord,\n targetParentRecord,\n targetParentRecordLink,\n variables,\n mutableEncounteredIds,\n );\n return hasBeenModified;\n }\n return false;\n}\n\nfunction dataIdsAreTheSame(\n existingValue: DataTypeValueLinked,\n newDataIds: (StoreLink | null)[],\n): boolean {\n if (isArray(existingValue)) {\n if (newDataIds.length !== existingValue.length) {\n return false;\n }\n for (let i = 0; i < newDataIds.length; i++) {\n const maybeLink = getLink(existingValue[i]);\n if (\n newDataIds[i]?.__link !== maybeLink?.__link ||\n newDataIds[i]?.__typename !== maybeLink?.__typename\n ) {\n return false;\n }\n }\n return true;\n } else {\n return false;\n }\n}\n\nfunction normalizeNetworkResponseObject(\n environment: IsographEnvironment,\n storeLayer: StoreLayerWithData,\n astNode: NormalizationLinkedField,\n networkResponseData: NetworkResponseObject,\n targetParentRecordLink: StoreLink,\n variables: Variables,\n index: number | null,\n mutableEncounteredIds: EncounteredIds,\n): DataId /* The id of the modified or newly created item */ {\n const newStoreRecordId = getDataIdOfNetworkResponse(\n targetParentRecordLink,\n networkResponseData,\n astNode,\n variables,\n index,\n );\n const __typename =\n astNode.concreteType ?? networkResponseData[TYPENAME_FIELD_NAME];\n\n if (__typename == null) {\n throw new Error(\n 'Unexpected missing __typename in network response object. ' +\n 'This is indicative of a bug in Isograph.',\n );\n }\n\n const link = { __link: newStoreRecordId, __typename };\n const newStoreRecord = getMutableStoreRecordProxy(storeLayer, link);\n\n normalizeDataIntoRecord(\n environment,\n storeLayer,\n astNode.selections,\n networkResponseData,\n newStoreRecord,\n link,\n variables,\n mutableEncounteredIds,\n );\n\n return newStoreRecordId;\n}\n\ndeclare const LinkedParentRecordKeyBrand: unique symbol;\nexport type LinkedParentRecordKey = string & {\n brand?: Brand<undefined, typeof LinkedParentRecordKeyBrand>;\n};\n\ndeclare const ScalarParentRecordKeyBrand: unique symbol;\nexport type ScalarParentRecordKey = string & {\n brand?: Brand<undefined, typeof ScalarParentRecordKeyBrand>;\n};\n\nexport function getParentRecordKey(\n astNode: NormalizationLinkedField | ReaderLinkedField,\n variables: Variables,\n): LinkedParentRecordKey;\nexport function getParentRecordKey(\n astNode: NormalizationScalarField | ReaderScalarField,\n variables: Variables,\n): ScalarParentRecordKey;\nexport function getParentRecordKey(\n astNode:\n | NormalizationLinkedField\n | NormalizationScalarField\n | ReaderLinkedField\n | ReaderScalarField,\n variables: Variables,\n): string {\n let parentRecordKey = astNode.fieldName;\n const fieldParameters = astNode.arguments;\n if (fieldParameters != null) {\n for (const fieldParameter of fieldParameters) {\n parentRecordKey += getStoreKeyChunkForArgument(fieldParameter, variables);\n }\n }\n\n return parentRecordKey;\n}\n\nfunction getStoreKeyChunkForArgumentValue(\n argumentValue: ArgumentValue,\n variables: Variables,\n): VariableValue {\n switch (argumentValue.kind) {\n case 'Object': {\n return Object.fromEntries(\n argumentValue.value.map(([argumentName, argumentValue]) => {\n return [\n argumentName,\n // substitute variables\n getStoreKeyChunkForArgumentValue(argumentValue, variables),\n ];\n }),\n );\n }\n case 'Literal': {\n return argumentValue.value;\n }\n case 'Variable': {\n return variables[argumentValue.name] ?? 'null';\n }\n case 'String': {\n return argumentValue.value;\n }\n case 'Enum': {\n return argumentValue.value;\n }\n }\n}\n\nfunction getStoreKeyChunkForArgument(argument: Argument, variables: Variables) {\n const [argumentName, argumentValue] = argument;\n let chunk = getStoreKeyChunkForArgumentValue(argumentValue, variables);\n\n if (typeof chunk === 'object') {\n chunk = JSON.stringify(stableCopy(chunk));\n }\n\n return `${FIRST_SPLIT_KEY}${argumentName}${SECOND_SPLIT_KEY}${chunk}`;\n}\n\ndeclare const LinkedNetworkResponseKeyBrand: unique symbol;\nexport type LinkedNetworkResponseKey = string & {\n brand?: Brand<undefined, typeof LinkedNetworkResponseKeyBrand>;\n};\n\ndeclare const ScalarNetworkResponseKeyBrand: unique symbol;\nexport type ScalarNetworkResponseKey = string & {\n brand?: Brand<undefined, typeof ScalarNetworkResponseKeyBrand>;\n};\n\nfunction getNetworkResponseKey(\n astNode: NormalizationLinkedField,\n): LinkedNetworkResponseKey;\nfunction getNetworkResponseKey(\n astNode: NormalizationScalarField,\n): ScalarNetworkResponseKey;\nfunction getNetworkResponseKey(\n astNode: NormalizationLinkedField | NormalizationScalarField,\n): string {\n let networkResponseKey = astNode.fieldName;\n const fieldParameters = astNode.arguments;\n\n if (fieldParameters != null) {\n for (const [argumentName, argumentValue] of fieldParameters) {\n let argumentValueChunk = getArgumentValueChunk(argumentValue);\n networkResponseKey += `${FIRST_SPLIT_KEY}${argumentName}${SECOND_SPLIT_KEY}${argumentValueChunk}`;\n }\n }\n\n return networkResponseKey;\n}\n\nfunction getArgumentValueChunk(argumentValue: ArgumentValue): string {\n switch (argumentValue.kind) {\n case 'Object': {\n return (\n 'o_' +\n argumentValue.value\n .map(([argumentName, argumentValue]) => {\n return (\n argumentName +\n THIRD_SPLIT_KEY +\n getArgumentValueChunk(argumentValue)\n );\n })\n .join('_') +\n '_c'\n );\n }\n case 'Literal': {\n return 'l_' + argumentValue.value;\n }\n case 'Variable': {\n return 'v_' + argumentValue.name;\n }\n case 'String': {\n // replace all non-word characters (alphanumeric & underscore) with underscores\n return 's_' + argumentValue.value.replaceAll(/\\W/g, '_');\n }\n case 'Enum': {\n return 'e_' + argumentValue.value;\n }\n }\n}\n\n// an alias might be pullRequests____first___first____after___cursor\nexport const FIRST_SPLIT_KEY = '____';\nexport const SECOND_SPLIT_KEY = '___';\nexport const THIRD_SPLIT_KEY = '__';\n\n// Returns a key to look up an item in the store\nfunction getDataIdOfNetworkResponse(\n parentRecordLink: StoreLink,\n dataToNormalize: NetworkResponseObject,\n astNode: NormalizationLinkedField,\n variables: Variables,\n index: number | null,\n): DataId {\n const __typename =\n astNode.concreteType ?? dataToNormalize[TYPENAME_FIELD_NAME];\n if (__typename == null) {\n throw new Error(\n 'Unexpected missing __typename in network response when normalizing a linked field. ' +\n 'This is indicative of a bug in Isograph.',\n );\n }\n // If we are dealing with nested Query, use __ROOT as id\n // TODO do not hard code this value here\n if (__typename === 'Query') {\n return ROOT_ID;\n }\n\n // Check whether the dataToNormalize has an id field. If so, that is the key.\n // If not, we construct an id from the parentRecordId and the field parameters.\n\n const dataId = dataToNormalize.id;\n if (dataId != null) {\n return dataId;\n }\n\n let storeKey = `${parentRecordLink.__typename}:${parentRecordLink.__link}.${astNode.fieldName}`;\n if (index != null) {\n storeKey += `.${index}`;\n }\n\n const fieldParameters = astNode.arguments;\n if (fieldParameters == null) {\n return storeKey;\n }\n\n for (const fieldParameter of fieldParameters) {\n storeKey += getStoreKeyChunkForArgument(fieldParameter, variables);\n }\n return storeKey;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cache.mjs","names":[],"sources":["../../src/core/cache.ts"],"sourcesContent":["import { type Factory, ParentCache } from '@isograph/react-disposable-state';\nimport type {\n NormalizationAstNodes,\n NormalizationInlineFragment,\n NormalizationLinkedField,\n NormalizationScalarField,\n} from './entrypoint';\nimport type {\n FragmentReference,\n UnknownTReadFromStore,\n Variables,\n VariableValue,\n} from './FragmentReference';\nimport {\n type DataId,\n type DataTypeValueLinked,\n getLink,\n type IsographEnvironment,\n ROOT_ID,\n type StoreLink,\n type StoreRecord,\n type TypeName,\n} from './IsographEnvironment';\nimport { logMessage } from './logging';\nimport {\n getMutableStoreRecordProxy,\n type StoreLayerWithData,\n} from './optimisticProxy';\nimport type { ReaderLinkedField, ReaderScalarField } from './reader';\nimport { type Argument, type ArgumentValue, isArray, stableCopy } from './util';\n\nexport const TYPENAME_FIELD_NAME = '__typename';\n\nexport function getOrCreateItemInSuspenseCache<\n TReadFromStore extends UnknownTReadFromStore,\n TClientFieldValue,\n>(\n environment: IsographEnvironment,\n index: string,\n factory: Factory<FragmentReference<TReadFromStore, TClientFieldValue>>,\n): ParentCache<FragmentReference<TReadFromStore, TClientFieldValue>> {\n if (environment.fragmentCache[index] == null) {\n environment.fragmentCache[index] = new ParentCache(factory);\n }\n\n return environment.fragmentCache[index];\n}\n\nexport type NetworkResponsePlural<T> =\n | null\n | T\n | readonly T[]\n | readonly (null | T)[];\nexport type NetworkResponseScalarValue = string | number | boolean | unknown;\n\nexport type NetworkResponseValue =\n | NetworkResponsePlural<NetworkResponseScalarValue>\n | NetworkResponsePlural<NetworkResponseObject>;\n\nexport type NetworkResponseObject = {\n // N.B. undefined is here to support optional id's, but\n // undefined should not *actually* be present in the network response.\n readonly [key: ScalarNetworkResponseKey]:\n | undefined\n | NetworkResponsePlural<NetworkResponseScalarValue>;\n readonly [key: LinkedNetworkResponseKey]:\n | undefined\n | NetworkResponsePlural<NetworkResponseObject>;\n readonly [key: NetworkResponseKey]:\n | undefined\n | NetworkResponsePlural<NetworkResponseScalarValue>\n | NetworkResponsePlural<NetworkResponseObject>;\n readonly id?: DataId;\n readonly __typename?: TypeName;\n};\n\nexport function normalizeData(\n environment: IsographEnvironment,\n storeLayer: StoreLayerWithData,\n normalizationAst: NormalizationAstNodes,\n networkResponse: NetworkResponseObject,\n variables: Variables,\n root: StoreLink,\n encounteredIds: EncounteredIds,\n): EncounteredIds {\n logMessage(environment, () => ({\n kind: 'AboutToNormalize',\n normalizationAst,\n networkResponse,\n variables,\n }));\n\n const newStoreRecord = getMutableStoreRecordProxy(storeLayer, root);\n\n normalizeDataIntoRecord(\n environment,\n storeLayer,\n normalizationAst,\n networkResponse,\n newStoreRecord,\n root,\n variables,\n encounteredIds,\n );\n\n return encounteredIds;\n}\n\nexport function subscribeToAnyChange(\n environment: IsographEnvironment,\n callback: () => void,\n): () => void {\n const subscription = {\n kind: 'AnyRecords',\n callback,\n } as const;\n environment.subscriptions.add(subscription);\n return () => environment.subscriptions.delete(subscription);\n}\n\nexport function subscribeToAnyChangesToRecord(\n environment: IsographEnvironment,\n recordLink: StoreLink,\n callback: () => void,\n): () => void {\n const subscription = {\n kind: 'AnyChangesToRecord',\n recordLink,\n callback,\n } as const;\n environment.subscriptions.add(subscription);\n return () => environment.subscriptions.delete(subscription);\n}\n\nexport function onNextChangeToRecord(\n environment: IsographEnvironment,\n recordLink: StoreLink,\n): Promise<void> {\n return new Promise((resolve) => {\n const unsubscribe = subscribeToAnyChangesToRecord(\n environment,\n recordLink,\n () => {\n unsubscribe();\n resolve();\n },\n );\n });\n}\n\nexport type EncounteredIds = Map<TypeName, Set<DataId>>;\n/**\n * Mutate targetParentRecord according to the normalizationAst and networkResponseParentRecord.\n */\nfunction normalizeDataIntoRecord(\n environment: IsographEnvironment,\n storeLayer: StoreLayerWithData,\n normalizationAst: NormalizationAstNodes,\n networkResponseParentRecord: NetworkResponseObject,\n targetParentRecord: StoreRecord,\n targetParentRecordLink: StoreLink,\n variables: Variables,\n mutableEncounteredIds: EncounteredIds,\n): RecordHasBeenUpdated {\n let recordHasBeenUpdated = false;\n for (const normalizationNode of normalizationAst) {\n switch (normalizationNode.kind) {\n case 'Scalar': {\n const scalarFieldResultedInChange = normalizeScalarField(\n normalizationNode,\n networkResponseParentRecord,\n targetParentRecord,\n variables,\n );\n recordHasBeenUpdated =\n recordHasBeenUpdated || scalarFieldResultedInChange;\n break;\n }\n case 'Linked': {\n const linkedFieldResultedInChange = normalizeLinkedField(\n environment,\n storeLayer,\n normalizationNode,\n networkResponseParentRecord,\n targetParentRecord,\n targetParentRecordLink,\n variables,\n mutableEncounteredIds,\n );\n recordHasBeenUpdated =\n recordHasBeenUpdated || linkedFieldResultedInChange;\n break;\n }\n case 'InlineFragment': {\n const inlineFragmentResultedInChange = normalizeInlineFragment(\n environment,\n storeLayer,\n normalizationNode,\n networkResponseParentRecord,\n targetParentRecord,\n targetParentRecordLink,\n variables,\n mutableEncounteredIds,\n );\n recordHasBeenUpdated =\n recordHasBeenUpdated || inlineFragmentResultedInChange;\n break;\n }\n }\n }\n if (recordHasBeenUpdated) {\n let encounteredRecordsIds = insertEmptySetIfMissing(\n mutableEncounteredIds,\n targetParentRecordLink.__typename,\n );\n\n encounteredRecordsIds.add(targetParentRecordLink.__link);\n }\n return recordHasBeenUpdated;\n}\n\nexport function insertEmptySetIfMissing<K, V>(map: Map<K, Set<V>>, key: K) {\n let result = map.get(key);\n if (result === undefined) {\n result = new Set();\n map.set(key, result);\n }\n return result;\n}\n\ntype RecordHasBeenUpdated = boolean;\nfunction normalizeScalarField(\n astNode: NormalizationScalarField,\n networkResponseParentRecord: NetworkResponseObject,\n targetStoreRecord: StoreRecord,\n variables: Variables,\n): RecordHasBeenUpdated {\n const networkResponseKey = getNetworkResponseKey(astNode);\n const networkResponseData = networkResponseParentRecord[networkResponseKey];\n const parentRecordKey = getParentRecordKey(astNode, variables);\n const existingValue = targetStoreRecord[parentRecordKey];\n\n if (networkResponseData == null) {\n targetStoreRecord[parentRecordKey] = null;\n return existingValue === undefined || existingValue != null;\n }\n\n targetStoreRecord[parentRecordKey] = networkResponseData;\n return existingValue !== networkResponseData;\n}\n\n/**\n * Mutate targetParentRecord with a given linked field ast node.\n */\nfunction normalizeLinkedField(\n environment: IsographEnvironment,\n storeLayer: StoreLayerWithData,\n astNode: NormalizationLinkedField,\n networkResponseParentRecord: NetworkResponseObject,\n targetParentRecord: StoreRecord,\n targetParentRecordLink: StoreLink,\n variables: Variables,\n mutableEncounteredIds: EncounteredIds,\n): RecordHasBeenUpdated {\n const networkResponseKey = getNetworkResponseKey(astNode);\n const networkResponseData = networkResponseParentRecord[networkResponseKey];\n const parentRecordKey = getParentRecordKey(astNode, variables);\n const existingValue = targetParentRecord[parentRecordKey];\n\n if (networkResponseData == null) {\n targetParentRecord[parentRecordKey] = null;\n return existingValue === undefined || existingValue != null;\n }\n\n if (isArray(networkResponseData)) {\n // TODO check astNode.plural or the like\n const dataIds: (StoreLink | null)[] = [];\n for (let i = 0; i < networkResponseData.length; i++) {\n const networkResponseObject = networkResponseData[i];\n if (networkResponseObject == null) {\n dataIds.push(null);\n continue;\n }\n const newStoreRecordId = normalizeNetworkResponseObject(\n environment,\n storeLayer,\n astNode,\n networkResponseObject,\n targetParentRecordLink,\n variables,\n i,\n mutableEncounteredIds,\n );\n\n const __typename =\n astNode.concreteType ?? networkResponseObject[TYPENAME_FIELD_NAME];\n if (__typename == null) {\n throw new Error(\n 'Unexpected missing __typename in network response when normalizing a linked field. ' +\n 'This is indicative of a bug in Isograph.',\n );\n }\n dataIds.push({\n __link: newStoreRecordId,\n __typename,\n });\n }\n targetParentRecord[parentRecordKey] = dataIds;\n return !dataIdsAreTheSame(existingValue, dataIds);\n } else {\n const newStoreRecordId = normalizeNetworkResponseObject(\n environment,\n storeLayer,\n astNode,\n networkResponseData,\n targetParentRecordLink,\n variables,\n null,\n mutableEncounteredIds,\n );\n\n let __typename =\n astNode.concreteType ?? networkResponseData[TYPENAME_FIELD_NAME];\n\n if (__typename == null) {\n throw new Error(\n 'Unexpected missing __typename in network response when normalizing a linked field. ' +\n 'This is indicative of a bug in Isograph.',\n );\n }\n\n targetParentRecord[parentRecordKey] = {\n __link: newStoreRecordId,\n __typename,\n };\n\n const link = getLink(existingValue);\n return link?.__link !== newStoreRecordId || link.__typename !== __typename;\n }\n}\n\n/**\n * Mutate targetParentRecord with a given linked field ast node.\n */\nfunction normalizeInlineFragment(\n environment: IsographEnvironment,\n storeLayer: StoreLayerWithData,\n astNode: NormalizationInlineFragment,\n networkResponseParentRecord: NetworkResponseObject,\n targetParentRecord: StoreRecord,\n targetParentRecordLink: StoreLink,\n variables: Variables,\n mutableEncounteredIds: EncounteredIds,\n): RecordHasBeenUpdated {\n const typeToRefineTo = astNode.type;\n if (networkResponseParentRecord[TYPENAME_FIELD_NAME] === typeToRefineTo) {\n const hasBeenModified = normalizeDataIntoRecord(\n environment,\n storeLayer,\n astNode.selections,\n networkResponseParentRecord,\n targetParentRecord,\n targetParentRecordLink,\n variables,\n mutableEncounteredIds,\n );\n return hasBeenModified;\n }\n return false;\n}\n\nfunction dataIdsAreTheSame(\n existingValue: DataTypeValueLinked,\n newDataIds: (StoreLink | null)[],\n): boolean {\n if (isArray(existingValue)) {\n if (newDataIds.length !== existingValue.length) {\n return false;\n }\n for (let i = 0; i < newDataIds.length; i++) {\n const maybeLink = getLink(existingValue[i]);\n if (\n newDataIds[i]?.__link !== maybeLink?.__link ||\n newDataIds[i]?.__typename !== maybeLink?.__typename\n ) {\n return false;\n }\n }\n return true;\n } else {\n return false;\n }\n}\n\nfunction normalizeNetworkResponseObject(\n environment: IsographEnvironment,\n storeLayer: StoreLayerWithData,\n astNode: NormalizationLinkedField,\n networkResponseData: NetworkResponseObject,\n targetParentRecordLink: StoreLink,\n variables: Variables,\n index: number | null,\n mutableEncounteredIds: EncounteredIds,\n): DataId /* The id of the modified or newly created item */ {\n const newStoreRecordId = getDataIdOfNetworkResponse(\n targetParentRecordLink,\n networkResponseData,\n astNode,\n variables,\n index,\n );\n const __typename =\n astNode.concreteType ?? networkResponseData[TYPENAME_FIELD_NAME];\n\n if (__typename == null) {\n throw new Error(\n 'Unexpected missing __typename in network response object. ' +\n 'This is indicative of a bug in Isograph.',\n );\n }\n\n const link = { __link: newStoreRecordId, __typename };\n const newStoreRecord = getMutableStoreRecordProxy(storeLayer, link);\n\n normalizeDataIntoRecord(\n environment,\n storeLayer,\n astNode.selections,\n networkResponseData,\n newStoreRecord,\n link,\n variables,\n mutableEncounteredIds,\n );\n\n return newStoreRecordId;\n}\n\nexport type ParentRecordKey = string;\n\n/**\n * these don't actually start with the different prefixes, but they let\n * us use multiple indexes, e.g.\n * {\n * readonly [key: `NOT_AN_ACTUAL_TYPE_LinkedParentRecordKey_${string} `]: ...\n * readonly [key: `NOT_AN_ACTUAL_TYPE_ScalarParentRecordKey_${string} `]: ...\n * }\n */\nexport type LinkedParentRecordKey =\n `NOT_AN_ACTUAL_TYPE_LinkedParentRecordKey_${string}`;\nexport type ScalarParentRecordKey =\n `NOT_AN_ACTUAL_TYPE_ScalarParentRecordKey_${string}`;\n\nexport function getParentRecordKey(\n astNode: NormalizationLinkedField | ReaderLinkedField,\n variables: Variables,\n): LinkedParentRecordKey;\nexport function getParentRecordKey(\n astNode: NormalizationScalarField | ReaderScalarField,\n variables: Variables,\n): ScalarParentRecordKey;\nexport function getParentRecordKey(\n astNode:\n | NormalizationLinkedField\n | NormalizationScalarField\n | ReaderLinkedField\n | ReaderScalarField,\n variables: Variables,\n): ParentRecordKey {\n let parentRecordKey = astNode.fieldName;\n const fieldParameters = astNode.arguments;\n if (fieldParameters != null) {\n for (const fieldParameter of fieldParameters) {\n parentRecordKey += getStoreKeyChunkForArgument(fieldParameter, variables);\n }\n }\n\n return parentRecordKey;\n}\n\nfunction getStoreKeyChunkForArgumentValue(\n argumentValue: ArgumentValue,\n variables: Variables,\n): VariableValue {\n switch (argumentValue.kind) {\n case 'Object': {\n return Object.fromEntries(\n argumentValue.value.map(([argumentName, argumentValue]) => {\n return [\n argumentName,\n // substitute variables\n getStoreKeyChunkForArgumentValue(argumentValue, variables),\n ];\n }),\n );\n }\n case 'Literal': {\n return argumentValue.value;\n }\n case 'Variable': {\n return variables[argumentValue.name] ?? 'null';\n }\n case 'String': {\n return argumentValue.value;\n }\n case 'Enum': {\n return argumentValue.value;\n }\n }\n}\n\nfunction getStoreKeyChunkForArgument(argument: Argument, variables: Variables) {\n const [argumentName, argumentValue] = argument;\n let chunk = getStoreKeyChunkForArgumentValue(argumentValue, variables);\n\n if (typeof chunk === 'object') {\n chunk = JSON.stringify(stableCopy(chunk));\n }\n\n return `${FIRST_SPLIT_KEY}${argumentName}${SECOND_SPLIT_KEY}${chunk}`;\n}\n\nexport type NetworkResponseKey = string;\n\n/**\n * these don't actually start with the different prefixes, but they let\n * us use multiple indexes, e.g.\n * {\n * readonly [key: `NOT_AN_ACTUAL_TYPE_LinkedNetworkResponseKey_${string} `]: ...\n * readonly [key: `NOT_AN_ACTUAL_TYPE_ScalarNetworkResponseKey_${string} `]: ...\n * }\n */\nexport type LinkedNetworkResponseKey =\n `NOT_AN_ACTUAL_TYPE_LinkedNetworkResponseKey_${string}`;\nexport type ScalarNetworkResponseKey =\n `NOT_AN_ACTUAL_TYPE_ScalarNetworkResponseKey_${string}`;\n\nfunction getNetworkResponseKey(\n astNode: NormalizationLinkedField,\n): LinkedNetworkResponseKey;\nfunction getNetworkResponseKey(\n astNode: NormalizationScalarField,\n): ScalarNetworkResponseKey;\nfunction getNetworkResponseKey(\n astNode: NormalizationLinkedField | NormalizationScalarField,\n): NetworkResponseKey {\n let networkResponseKey = astNode.fieldName;\n const fieldParameters = astNode.arguments;\n\n if (fieldParameters != null) {\n for (const [argumentName, argumentValue] of fieldParameters) {\n let argumentValueChunk = getArgumentValueChunk(argumentValue);\n networkResponseKey += `${FIRST_SPLIT_KEY}${argumentName}${SECOND_SPLIT_KEY}${argumentValueChunk}`;\n }\n }\n\n return networkResponseKey;\n}\n\nfunction getArgumentValueChunk(argumentValue: ArgumentValue): string {\n switch (argumentValue.kind) {\n case 'Object': {\n return (\n 'o_' +\n argumentValue.value\n .map(([argumentName, argumentValue]) => {\n return (\n argumentName +\n THIRD_SPLIT_KEY +\n getArgumentValueChunk(argumentValue)\n );\n })\n .join('_') +\n '_c'\n );\n }\n case 'Literal': {\n return 'l_' + argumentValue.value;\n }\n case 'Variable': {\n return 'v_' + argumentValue.name;\n }\n case 'String': {\n // replace all non-word characters (alphanumeric & underscore) with underscores\n return 's_' + argumentValue.value.replaceAll(/\\W/g, '_');\n }\n case 'Enum': {\n return 'e_' + argumentValue.value;\n }\n }\n}\n\n// an alias might be pullRequests____first___first____after___cursor\nexport const FIRST_SPLIT_KEY = '____';\nexport const SECOND_SPLIT_KEY = '___';\nexport const THIRD_SPLIT_KEY = '__';\n\n// Returns a key to look up an item in the store\nfunction getDataIdOfNetworkResponse(\n parentRecordLink: StoreLink,\n dataToNormalize: NetworkResponseObject,\n astNode: NormalizationLinkedField,\n variables: Variables,\n index: number | null,\n): DataId {\n const __typename =\n astNode.concreteType ?? dataToNormalize[TYPENAME_FIELD_NAME];\n if (__typename == null) {\n throw new Error(\n 'Unexpected missing __typename in network response when normalizing a linked field. ' +\n 'This is indicative of a bug in Isograph.',\n );\n }\n // If we are dealing with nested Query, use __ROOT as id\n // TODO do not hard code this value here\n if (__typename === 'Query') {\n return ROOT_ID;\n }\n\n // Check whether the dataToNormalize has an id field. If so, that is the key.\n // If not, we construct an id from the parentRecordId and the field parameters.\n\n const dataId = dataToNormalize.id;\n if (dataId != null) {\n return dataId;\n }\n\n let storeKey = `${parentRecordLink.__typename}:${parentRecordLink.__link}.${astNode.fieldName}`;\n if (index != null) {\n storeKey += `.${index}`;\n }\n\n const fieldParameters = astNode.arguments;\n if (fieldParameters == null) {\n return storeKey;\n }\n\n for (const fieldParameter of fieldParameters) {\n storeKey += getStoreKeyChunkForArgument(fieldParameter, variables);\n }\n return storeKey;\n}\n"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
const require_IsographEnvironment = require('./IsographEnvironment.
|
|
2
|
-
const require_logging = require('./logging.
|
|
3
|
-
const require_optimisticProxy = require('./optimisticProxy.
|
|
4
|
-
const require_cache = require('./cache.
|
|
1
|
+
const require_IsographEnvironment = require('./IsographEnvironment.cjs');
|
|
2
|
+
const require_logging = require('./logging.cjs');
|
|
3
|
+
const require_optimisticProxy = require('./optimisticProxy.cjs');
|
|
4
|
+
const require_cache = require('./cache.cjs');
|
|
5
5
|
|
|
6
6
|
//#region src/core/check.ts
|
|
7
7
|
const DEFAULT_SHOULD_FETCH_VALUE = "IfNecessary";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { IsographEnvironment, StoreLink } from "./IsographEnvironment.
|
|
2
|
-
import { Variables } from "./FragmentReference.
|
|
3
|
-
import { NormalizationAstNodes } from "./entrypoint.
|
|
1
|
+
import { IsographEnvironment, StoreLink } from "./IsographEnvironment.cjs";
|
|
2
|
+
import { Variables } from "./FragmentReference.cjs";
|
|
3
|
+
import { NormalizationAstNodes } from "./entrypoint.cjs";
|
|
4
4
|
|
|
5
5
|
//#region src/core/check.d.ts
|
|
6
6
|
type ShouldFetch = RequiredShouldFetch | 'IfNecessary';
|
|
@@ -25,4 +25,4 @@ type CheckResult = {
|
|
|
25
25
|
declare function check(environment: IsographEnvironment, normalizationAst: NormalizationAstNodes, variables: Variables, root: StoreLink): CheckResult;
|
|
26
26
|
//#endregion
|
|
27
27
|
export { CheckResult, FetchOptions, RequiredFetchOptions, RequiredShouldFetch, ShouldFetch, check };
|
|
28
|
-
//# sourceMappingURL=check.d.
|
|
28
|
+
//# sourceMappingURL=check.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.d.cts","names":[],"sources":["../../src/core/check.ts"],"mappings":";;;;;KAYY,WAAA,GAAc,mBAAA;AAAA,KACd,mBAAA;AAAA,KAIP,kBAAA;EACH,UAAA,IAAc,IAAA,EAAM,YAAA;EACpB,OAAA;AAAA;AAAA,UAGe,YAAA,yCACP,kBAAA,CAAmB,YAAA;EAC3B,WAAA,GAAc,WAAA;EACd,yBAAA,GAA4B,gBAAA;AAAA;AAAA,UAGb,oBAAA,uBACP,kBAAA,CAAmB,YAAA;EAC3B,WAAA,EAAa,mBAAA;AAAA;AAAA,KAGH,WAAA;EAEN,IAAA;AAAA;EAGA,IAAA;EACA,MAAA,EAAQ,SAAA;AAAA;AAAA,iBAGE,KAAA,CACd,WAAA,EAAa,mBAAA,EACb,gBAAA,EAAkB,qBAAA,EAClB,SAAA,EAAW,SAAA,EACX,IAAA,EAAM,SAAA,GACL,WAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.d.mts","names":[],"sources":["../../src/core/check.ts"],"
|
|
1
|
+
{"version":3,"file":"check.d.mts","names":[],"sources":["../../src/core/check.ts"],"mappings":";;;;;KAYY,WAAA,GAAc,mBAAA;AAAA,KACd,mBAAA;AAAA,KAIP,kBAAA;EACH,UAAA,IAAc,IAAA,EAAM,YAAA;EACpB,OAAA;AAAA;AAAA,UAGe,YAAA,yCACP,kBAAA,CAAmB,YAAA;EAC3B,WAAA,GAAc,WAAA;EACd,yBAAA,GAA4B,gBAAA;AAAA;AAAA,UAGb,oBAAA,uBACP,kBAAA,CAAmB,YAAA;EAC3B,WAAA,EAAa,mBAAA;AAAA;AAAA,KAGH,WAAA;EAEN,IAAA;AAAA;EAGA,IAAA;EACA,MAAA,EAAQ,SAAA;AAAA;AAAA,iBAGE,KAAA,CACd,WAAA,EAAa,mBAAA,EACb,gBAAA,EAAkB,qBAAA,EAClB,SAAA,EAAW,SAAA,EACX,IAAA,EAAM,SAAA,GACL,WAAA"}
|
package/dist/core/check.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.mjs","names":[
|
|
1
|
+
{"version":3,"file":"check.mjs","names":[],"sources":["../../src/core/check.ts"],"sourcesContent":["import { getParentRecordKey } from './cache';\nimport type { NormalizationAstNodes } from './entrypoint';\nimport type { Variables } from './FragmentReference';\nimport type {\n IsographEnvironment,\n StoreLink,\n StoreRecord,\n} from './IsographEnvironment';\nimport { getLink } from './IsographEnvironment';\nimport { logMessage } from './logging';\nimport { getStoreRecordProxy } from './optimisticProxy';\n\nexport type ShouldFetch = RequiredShouldFetch | 'IfNecessary';\nexport type RequiredShouldFetch = 'Yes' | 'No';\n\nexport const DEFAULT_SHOULD_FETCH_VALUE: ShouldFetch = 'IfNecessary';\n\ntype FetchOptionsShared<TReadOutData> = {\n onComplete?: (data: TReadOutData) => void;\n onError?: () => void;\n};\n\nexport interface FetchOptions<TReadOutData, TRawResponseType>\n extends FetchOptionsShared<TReadOutData> {\n shouldFetch?: ShouldFetch;\n optimisticNetworkResponse?: TRawResponseType;\n}\n\nexport interface RequiredFetchOptions<TReadOutData>\n extends FetchOptionsShared<TReadOutData> {\n shouldFetch: RequiredShouldFetch;\n}\n\nexport type CheckResult =\n | {\n kind: 'EnoughData';\n }\n | {\n kind: 'MissingData';\n record: StoreLink;\n };\n\nexport function check(\n environment: IsographEnvironment,\n normalizationAst: NormalizationAstNodes,\n variables: Variables,\n root: StoreLink,\n): CheckResult {\n const newStoreRecord = getStoreRecordProxy(environment.store, root);\n\n if (newStoreRecord == null) {\n return {\n kind: 'MissingData',\n record: root,\n };\n }\n\n const checkResult = checkFromRecord(\n environment,\n normalizationAst,\n variables,\n newStoreRecord,\n root,\n );\n logMessage(environment, () => ({\n kind: 'EnvironmentCheck',\n result: checkResult,\n }));\n return checkResult;\n}\n\nfunction checkFromRecord(\n environment: IsographEnvironment,\n normalizationAst: NormalizationAstNodes,\n variables: Variables,\n record: StoreRecord,\n recordLink: StoreLink,\n): CheckResult {\n normalizationAstLoop: for (const normalizationAstNode of normalizationAst) {\n switch (normalizationAstNode.kind) {\n case 'Scalar': {\n const parentRecordKey = getParentRecordKey(\n normalizationAstNode,\n variables,\n );\n const scalarValue = record[parentRecordKey];\n\n // null means the value is known to be missing, so it must\n // be exactly undefined\n if (scalarValue === undefined) {\n return {\n kind: 'MissingData',\n record: recordLink,\n };\n }\n continue normalizationAstLoop;\n }\n case 'Linked': {\n const parentRecordKey = getParentRecordKey(\n normalizationAstNode,\n variables,\n );\n\n const linkedValue = record[parentRecordKey];\n\n if (linkedValue === undefined) {\n return {\n kind: 'MissingData',\n record: recordLink,\n };\n } else if (linkedValue == null) {\n continue;\n } else if (Array.isArray(linkedValue)) {\n arrayItemsLoop: for (const item of linkedValue) {\n const link = getLink(item);\n if (link == null) {\n throw new Error(\n 'Unexpected non-link in the Isograph store. ' +\n 'This is indicative of a bug in Isograph.',\n );\n }\n\n const linkedRecord = getStoreRecordProxy(environment.store, link);\n\n if (linkedRecord === undefined) {\n return {\n kind: 'MissingData',\n record: link,\n };\n } else if (linkedRecord == null) {\n continue arrayItemsLoop;\n } else {\n // TODO in __DEV__ assert linkedRecord is an object\n const result = checkFromRecord(\n environment,\n normalizationAstNode.selections,\n variables,\n linkedRecord,\n link,\n );\n\n if (result.kind === 'MissingData') {\n return result;\n }\n }\n }\n } else {\n const link = getLink(linkedValue);\n if (link == null) {\n throw new Error(\n 'Unexpected non-link in the Isograph store. ' +\n 'This is indicative of a bug in Isograph.',\n );\n }\n\n const linkedRecord = getStoreRecordProxy(environment.store, link);\n\n if (linkedRecord === undefined) {\n return {\n kind: 'MissingData',\n record: link,\n };\n } else if (linkedRecord == null) {\n continue normalizationAstLoop;\n } else {\n // TODO in __DEV__ assert linkedRecord is an object\n const result = checkFromRecord(\n environment,\n normalizationAstNode.selections,\n variables,\n linkedRecord,\n link,\n );\n\n if (result.kind === 'MissingData') {\n return result;\n }\n }\n }\n\n continue normalizationAstLoop;\n }\n case 'InlineFragment': {\n const existingRecordTypename = record['__typename'];\n\n if (existingRecordTypename == null) {\n return {\n kind: 'MissingData',\n record: recordLink,\n };\n }\n\n if (existingRecordTypename === normalizationAstNode.type) {\n const result = checkFromRecord(\n environment,\n normalizationAstNode.selections,\n variables,\n record,\n recordLink,\n );\n\n if (result.kind === 'MissingData') {\n return result;\n }\n }\n\n continue normalizationAstLoop;\n }\n }\n }\n\n return {\n kind: 'EnoughData',\n };\n}\n"],"mappings":";;;;;;AAeA,MAAa,6BAA0C;AA2BvD,SAAgB,MACd,aACA,kBACA,WACA,MACa;CACb,MAAM,iBAAiB,oBAAoB,YAAY,OAAO,KAAK;AAEnE,KAAI,kBAAkB,KACpB,QAAO;EACL,MAAM;EACN,QAAQ;EACT;CAGH,MAAM,cAAc,gBAClB,aACA,kBACA,WACA,gBACA,KACD;AACD,YAAW,oBAAoB;EAC7B,MAAM;EACN,QAAQ;EACT,EAAE;AACH,QAAO;;AAGT,SAAS,gBACP,aACA,kBACA,WACA,QACA,YACa;AACb,sBAAsB,MAAK,MAAM,wBAAwB,iBACvD,SAAQ,qBAAqB,MAA7B;EACE,KAAK;AASH,OAJoB,OAJI,mBACtB,sBACA,UACD,MAKmB,OAClB,QAAO;IACL,MAAM;IACN,QAAQ;IACT;AAEH,YAAS;EAEX,KAAK,UAAU;GAMb,MAAM,cAAc,OALI,mBACtB,sBACA,UACD;AAID,OAAI,gBAAgB,OAClB,QAAO;IACL,MAAM;IACN,QAAQ;IACT;YACQ,eAAe,KACxB;YACS,MAAM,QAAQ,YAAY,CACnC,gBAAgB,MAAK,MAAM,QAAQ,aAAa;IAC9C,MAAM,OAAO,QAAQ,KAAK;AAC1B,QAAI,QAAQ,KACV,OAAM,IAAI,MACR,sFAED;IAGH,MAAM,eAAe,oBAAoB,YAAY,OAAO,KAAK;AAEjE,QAAI,iBAAiB,OACnB,QAAO;KACL,MAAM;KACN,QAAQ;KACT;aACQ,gBAAgB,KACzB,UAAS;SACJ;KAEL,MAAM,SAAS,gBACb,aACA,qBAAqB,YACrB,WACA,cACA,KACD;AAED,SAAI,OAAO,SAAS,cAClB,QAAO;;;QAIR;IACL,MAAM,OAAO,QAAQ,YAAY;AACjC,QAAI,QAAQ,KACV,OAAM,IAAI,MACR,sFAED;IAGH,MAAM,eAAe,oBAAoB,YAAY,OAAO,KAAK;AAEjE,QAAI,iBAAiB,OACnB,QAAO;KACL,MAAM;KACN,QAAQ;KACT;aACQ,gBAAgB,KACzB,UAAS;SACJ;KAEL,MAAM,SAAS,gBACb,aACA,qBAAqB,YACrB,WACA,cACA,KACD;AAED,SAAI,OAAO,SAAS,cAClB,QAAO;;;AAKb,YAAS;;EAEX,KAAK,kBAAkB;GACrB,MAAM,yBAAyB,OAAO;AAEtC,OAAI,0BAA0B,KAC5B,QAAO;IACL,MAAM;IACN,QAAQ;IACT;AAGH,OAAI,2BAA2B,qBAAqB,MAAM;IACxD,MAAM,SAAS,gBACb,aACA,qBAAqB,YACrB,WACA,QACA,WACD;AAED,QAAI,OAAO,SAAS,cAClB,QAAO;;AAIX,YAAS;;;AAKf,QAAO,EACL,MAAM,cACP"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const require_FragmentReference = require('./FragmentReference.
|
|
2
|
-
const require_startUpdate = require('./startUpdate.
|
|
1
|
+
const require_FragmentReference = require('./FragmentReference.cjs');
|
|
2
|
+
const require_startUpdate = require('./startUpdate.cjs');
|
|
3
3
|
|
|
4
4
|
//#region src/core/componentCache.ts
|
|
5
5
|
function getOrCreateCachedComponent(environment, fragmentReference, networkRequestOptions) {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { Contravariant, PhantomData } from "./brand.
|
|
2
|
-
import { Arguments } from "./util.
|
|
3
|
-
import { TopLevelReaderArtifact } from "./reader.
|
|
4
|
-
import { ComponentOrFieldName, TypeName } from "./IsographEnvironment.
|
|
5
|
-
import { FragmentReference, UnknownTReadFromStore } from "./FragmentReference.
|
|
6
|
-
import { NetworkResponseObject } from "./cache.
|
|
1
|
+
import { Contravariant, PhantomData } from "./brand.cjs";
|
|
2
|
+
import { Arguments } from "./util.cjs";
|
|
3
|
+
import { TopLevelReaderArtifact } from "./reader.cjs";
|
|
4
|
+
import { ComponentOrFieldName, TypeName } from "./IsographEnvironment.cjs";
|
|
5
|
+
import { FragmentReference, UnknownTReadFromStore } from "./FragmentReference.cjs";
|
|
6
|
+
import { NetworkResponseObject } from "./cache.cjs";
|
|
7
7
|
|
|
8
8
|
//#region src/core/entrypoint.d.ts
|
|
9
9
|
type ReaderWithRefetchQueries<TReadFromStore extends UnknownTReadFromStore, TClientFieldValue> = {
|
|
@@ -103,4 +103,4 @@ type ExtractResolverResult<Type> = Type extends IsographEntrypoint<any, infer X,
|
|
|
103
103
|
type ExtractProps<Type> = Type extends React.FC<infer X> ? X : never;
|
|
104
104
|
//#endregion
|
|
105
105
|
export { ExtractClientFieldValue, ExtractProps, ExtractReadFromStore, ExtractResolverResult, FragmentReferenceOfEntrypoint, IsographEntrypoint, IsographEntrypointLoader, IsographOperation, IsographPersistedOperation, IsographPersistedOperationExtraInfo, NetworkRequestInfo, NormalizationAst, NormalizationAstLoader, NormalizationAstNode, NormalizationAstNodes, NormalizationInlineFragment, NormalizationLinkedField, NormalizationScalarField, ReaderWithRefetchQueries, RefetchQueryNormalizationArtifact, RefetchQueryNormalizationArtifactWrapper, assertIsEntrypoint };
|
|
106
|
-
//# sourceMappingURL=entrypoint.d.
|
|
106
|
+
//# sourceMappingURL=entrypoint.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entrypoint.d.cts","names":[],"sources":["../../src/core/entrypoint.ts"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entrypoint.d.mts","names":[],"sources":["../../src/core/entrypoint.ts"],"
|
|
1
|
+
{"version":3,"file":"entrypoint.d.mts","names":[],"sources":["../../src/core/entrypoint.ts"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
const require_PromiseWrapper = require('./PromiseWrapper.
|
|
2
|
-
const require_IsographEnvironment = require('./IsographEnvironment.
|
|
3
|
-
const require_cache = require('./cache.
|
|
1
|
+
const require_PromiseWrapper = require('./PromiseWrapper.cjs');
|
|
2
|
+
const require_IsographEnvironment = require('./IsographEnvironment.cjs');
|
|
3
|
+
const require_cache = require('./cache.cjs');
|
|
4
4
|
|
|
5
5
|
//#region src/core/garbageCollection.ts
|
|
6
6
|
function isRetainedQueryWithNormalizationAst(query) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { PromiseWrapper } from "./PromiseWrapper.
|
|
2
|
-
import { IsographEnvironment, StoreLink } from "./IsographEnvironment.
|
|
3
|
-
import { NormalizationAst } from "./entrypoint.
|
|
1
|
+
import { PromiseWrapper } from "./PromiseWrapper.cjs";
|
|
2
|
+
import { IsographEnvironment, StoreLink } from "./IsographEnvironment.cjs";
|
|
3
|
+
import { NormalizationAst } from "./entrypoint.cjs";
|
|
4
4
|
|
|
5
5
|
//#region src/core/garbageCollection.d.ts
|
|
6
6
|
type RetainedQuery = {
|
|
@@ -14,4 +14,4 @@ declare function retainQuery(environment: IsographEnvironment, queryToRetain: Re
|
|
|
14
14
|
declare function garbageCollectEnvironment(environment: IsographEnvironment): void;
|
|
15
15
|
//#endregion
|
|
16
16
|
export { DidUnretainSomeQuery, RetainedQuery, garbageCollectEnvironment, retainQuery, unretainQuery };
|
|
17
|
-
//# sourceMappingURL=garbageCollection.d.
|
|
17
|
+
//# sourceMappingURL=garbageCollection.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"garbageCollection.d.cts","names":[],"sources":["../../src/core/garbageCollection.ts"],"mappings":";;;;;KAmBY,aAAA;EAAA,SACD,gBAAA,EAAkB,cAAA,CAAe,gBAAA;EAAA,SACjC,SAAA;EAAA,SACA,IAAA,EAAM,SAAA;AAAA;AAAA,KAgBL,oBAAA;AAAA,iBACI,aAAA,CACd,WAAA,EAAa,mBAAA,EACb,aAAA,EAAe,aAAA,GACd,oBAAA;AAAA,iBAYa,WAAA,CACd,WAAA,EAAa,mBAAA,EACb,aAAA,EAAe,aAAA;AAAA,iBAQD,yBAAA,CAA0B,WAAA,EAAa,mBAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"garbageCollection.d.mts","names":[],"sources":["../../src/core/garbageCollection.ts"],"
|
|
1
|
+
{"version":3,"file":"garbageCollection.d.mts","names":[],"sources":["../../src/core/garbageCollection.ts"],"mappings":";;;;;;KAmBY,aAAA;EAAA,SACD,gBAAA,EAAkB,cAAA,CAAe,gBAAA;EAAA,SACjC,SAAA;EAAA,SACA,IAAA,EAAM,SAAA;AAAA;AAAA,KAgBL,oBAAA;AAAA,iBACI,aAAA,CACd,WAAA,EAAa,mBAAA,EACb,aAAA,EAAe,aAAA,GACd,oBAAA;AAAA,iBAYa,WAAA,CACd,WAAA,EAAa,mBAAA,EACb,aAAA,EAAe,aAAA;AAAA,iBAQD,yBAAA,CAA0B,WAAA,EAAa,mBAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"garbageCollection.mjs","names":[
|
|
1
|
+
{"version":3,"file":"garbageCollection.mjs","names":[],"sources":["../../src/core/garbageCollection.ts"],"sourcesContent":["import { getParentRecordKey, TYPENAME_FIELD_NAME } from './cache';\nimport type { NormalizationAstNodes, NormalizationAst } from './entrypoint';\nimport type { Variables } from './FragmentReference';\nimport {\n assertLink,\n type DataId,\n type IsographEnvironment,\n type StoreRecord,\n type StoreLayerData,\n type StoreLink,\n type TypeName,\n} from './IsographEnvironment';\nimport type { BaseStoreLayer } from './optimisticProxy';\nimport {\n NOT_SET,\n type PromiseWrapper,\n type PromiseWrapperOk,\n} from './PromiseWrapper';\n\nexport type RetainedQuery = {\n readonly normalizationAst: PromiseWrapper<NormalizationAst>;\n readonly variables: {};\n readonly root: StoreLink;\n};\n\nexport interface RetainedQueryWithNormalizationAst extends RetainedQuery {\n readonly normalizationAst: PromiseWrapperOk<NormalizationAst>;\n}\n\nfunction isRetainedQueryWithNormalizationAst(\n query: RetainedQuery,\n): query is RetainedQueryWithNormalizationAst {\n return (\n query.normalizationAst.result !== NOT_SET &&\n query.normalizationAst.result.kind === 'Ok'\n );\n}\n\nexport type DidUnretainSomeQuery = boolean;\nexport function unretainQuery(\n environment: IsographEnvironment,\n retainedQuery: RetainedQuery,\n): DidUnretainSomeQuery {\n environment.retainedQueries.delete(retainedQuery);\n environment.gcBuffer.push(retainedQuery);\n\n if (environment.gcBuffer.length > environment.gcBufferSize) {\n environment.gcBuffer.shift();\n return true;\n }\n\n return false;\n}\n\nexport function retainQuery(\n environment: IsographEnvironment,\n queryToRetain: RetainedQuery,\n) {\n environment.retainedQueries.add(queryToRetain);\n // TODO can we remove this query from the buffer somehow?\n // We are relying on === equality, but we really should be comparing\n // id + variables\n}\n\nexport function garbageCollectEnvironment(environment: IsographEnvironment) {\n if (environment.store.kind !== 'BaseStoreLayer') {\n return;\n }\n\n const retainedQueries: RetainedQueryWithNormalizationAst[] = [];\n for (const query of environment.retainedQueries) {\n if (!isRetainedQueryWithNormalizationAst(query)) {\n return;\n }\n retainedQueries.push(query);\n }\n\n for (const query of environment.gcBuffer) {\n if (!isRetainedQueryWithNormalizationAst(query)) {\n return;\n }\n retainedQueries.push(query);\n }\n\n garbageCollectBaseStoreLayer(retainedQueries, environment.store);\n}\n\nexport function garbageCollectBaseStoreLayer(\n retainedQueries: RetainedQueryWithNormalizationAst[],\n baseStoreLayer: BaseStoreLayer,\n) {\n const retainedIds: RetainedIds = {};\n\n for (const query of retainedQueries) {\n recordReachableIds(baseStoreLayer.data, query, retainedIds);\n }\n\n for (const typeName in baseStoreLayer.data) {\n const dataById = baseStoreLayer.data[typeName];\n if (dataById == null) continue;\n const retainedTypeIds = retainedIds[typeName];\n\n // delete all objects\n if (retainedTypeIds === undefined || retainedTypeIds.size === 0) {\n delete baseStoreLayer.data[typeName];\n continue;\n }\n\n for (const dataId in dataById) {\n if (!retainedTypeIds.has(dataId)) {\n delete dataById[dataId];\n }\n }\n\n if (Object.keys(dataById).length === 0) {\n delete baseStoreLayer.data[typeName];\n }\n }\n}\n\ninterface RetainedIds {\n [typeName: TypeName]: Set<DataId>;\n}\n\nfunction recordReachableIds(\n dataLayer: StoreLayerData,\n retainedQuery: RetainedQueryWithNormalizationAst,\n mutableRetainedIds: RetainedIds,\n) {\n const record =\n dataLayer[retainedQuery.root.__typename]?.[retainedQuery.root.__link];\n\n const retainedRecordsIds = (mutableRetainedIds[\n retainedQuery.root.__typename\n ] ??= new Set());\n retainedRecordsIds.add(retainedQuery.root.__link);\n\n if (record != null) {\n recordReachableIdsFromRecord(\n dataLayer,\n record,\n mutableRetainedIds,\n retainedQuery.normalizationAst.result.value.selections,\n retainedQuery.variables,\n );\n }\n}\n\nfunction recordReachableIdsFromRecord(\n dataLayer: StoreLayerData,\n currentRecord: StoreRecord,\n mutableRetainedIds: RetainedIds,\n selections: NormalizationAstNodes,\n variables: Variables | null,\n) {\n for (const selection of selections) {\n switch (selection.kind) {\n case 'InlineFragment':\n if (currentRecord[TYPENAME_FIELD_NAME] === selection.type) {\n recordReachableIdsFromRecord(\n dataLayer,\n currentRecord,\n mutableRetainedIds,\n selection.selections,\n variables,\n );\n }\n continue;\n case 'Linked':\n const linkKey = getParentRecordKey(selection, variables ?? {});\n const linkedFieldOrFields = currentRecord[linkKey];\n\n const links: StoreLink[] = [];\n if (Array.isArray(linkedFieldOrFields)) {\n for (const maybeLink of linkedFieldOrFields) {\n const link = assertLink(maybeLink);\n if (link != null) {\n links.push(link);\n }\n }\n } else {\n const link = assertLink(linkedFieldOrFields);\n if (link != null) {\n links.push(link);\n }\n }\n\n let typeStore =\n selection.concreteType != null\n ? dataLayer[selection.concreteType]\n : null;\n\n if (typeStore == null && selection.concreteType != null) {\n continue;\n }\n\n for (const nextRecordLink of links) {\n let __typename = nextRecordLink.__typename;\n\n const resolvedTypeStore = typeStore ?? dataLayer[__typename];\n\n if (resolvedTypeStore == null) {\n continue;\n }\n\n const nextRecord = resolvedTypeStore[nextRecordLink.__link];\n if (nextRecord != null) {\n const retainedRecordsIds = (mutableRetainedIds[__typename] ??=\n new Set());\n retainedRecordsIds.add(nextRecordLink.__link);\n recordReachableIdsFromRecord(\n dataLayer,\n nextRecord,\n mutableRetainedIds,\n selection.selections,\n variables,\n );\n }\n }\n\n continue;\n case 'Scalar':\n continue;\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
const require_util = require('./util.
|
|
2
|
-
const require_IsographEnvironment = require('./IsographEnvironment.
|
|
3
|
-
const require_makeNetworkRequest = require('./makeNetworkRequest.
|
|
4
|
-
const require_cache = require('./cache.
|
|
1
|
+
const require_util = require('./util.cjs');
|
|
2
|
+
const require_IsographEnvironment = require('./IsographEnvironment.cjs');
|
|
3
|
+
const require_makeNetworkRequest = require('./makeNetworkRequest.cjs');
|
|
4
|
+
const require_cache = require('./cache.cjs');
|
|
5
5
|
|
|
6
6
|
//#region src/core/getOrCreateCacheForArtifact.ts
|
|
7
7
|
function getOrCreateCacheForArtifact(environment, entrypoint, variables, fetchOptions) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getOrCreateCacheForArtifact.mjs","names":[],"sources":["../../src/core/getOrCreateCacheForArtifact.ts"],"sourcesContent":["import type { ItemCleanupPair } from '@isograph/
|
|
1
|
+
{"version":3,"file":"getOrCreateCacheForArtifact.mjs","names":[],"sources":["../../src/core/getOrCreateCacheForArtifact.ts"],"sourcesContent":["import type { ItemCleanupPair } from '@isograph/disposable-types';\nimport type { ParentCache } from '@isograph/react-disposable-state';\nimport {\n type NetworkResponseObject,\n getOrCreateItemInSuspenseCache,\n} from './cache';\nimport type { FetchOptions } from './check';\nimport type {\n IsographEntrypoint,\n NormalizationAst,\n NormalizationAstLoader,\n} from './entrypoint';\nimport type {\n ExtractParameters,\n FragmentReference,\n UnknownTReadFromStore,\n} from './FragmentReference';\nimport {\n type IsographEnvironment,\n getOrLoadReaderWithRefetchQueries,\n ROOT_ID,\n} from './IsographEnvironment';\nimport { maybeMakeNetworkRequest } from './makeNetworkRequest';\nimport { stableCopy } from './util';\n\nexport function getOrCreateCacheForArtifact<\n TReadFromStore extends UnknownTReadFromStore,\n TClientFieldValue,\n TNormalizationAst extends NormalizationAst | NormalizationAstLoader,\n TRawResponseType extends NetworkResponseObject,\n>(\n environment: IsographEnvironment,\n entrypoint: IsographEntrypoint<\n TReadFromStore,\n TClientFieldValue,\n TNormalizationAst,\n TRawResponseType\n >,\n variables: ExtractParameters<TReadFromStore>,\n fetchOptions?: FetchOptions<TClientFieldValue, TRawResponseType>,\n): ParentCache<FragmentReference<TReadFromStore, TClientFieldValue>> {\n let cacheKey = '';\n switch (entrypoint.networkRequestInfo.operation.kind) {\n case 'Operation':\n cacheKey =\n entrypoint.networkRequestInfo.operation.text +\n JSON.stringify(stableCopy(variables));\n break;\n case 'PersistedOperation':\n cacheKey =\n entrypoint.networkRequestInfo.operation.operationId +\n JSON.stringify(stableCopy(variables));\n break;\n }\n const factory = () => {\n const { fieldName, readerArtifactKind, readerWithRefetchQueries } =\n getOrLoadReaderWithRefetchQueries(\n environment,\n entrypoint.readerWithRefetchQueries,\n );\n const [networkRequest, disposeNetworkRequest] = maybeMakeNetworkRequest(\n environment,\n entrypoint,\n variables,\n readerWithRefetchQueries,\n fetchOptions ?? null,\n );\n\n const itemCleanupPair: ItemCleanupPair<\n FragmentReference<TReadFromStore, TClientFieldValue>\n > = [\n {\n kind: 'FragmentReference',\n readerWithRefetchQueries,\n fieldName,\n readerArtifactKind,\n root: { __link: ROOT_ID, __typename: entrypoint.concreteType },\n variables,\n networkRequest: networkRequest,\n },\n disposeNetworkRequest,\n ];\n return itemCleanupPair;\n };\n return getOrCreateItemInSuspenseCache(environment, cacheKey, factory);\n}\n"],"mappings":";;;;;;AAyBA,SAAgB,4BAMd,aACA,YAMA,WACA,cACmE;CACnE,IAAI,WAAW;AACf,SAAQ,WAAW,mBAAmB,UAAU,MAAhD;EACE,KAAK;AACH,cACE,WAAW,mBAAmB,UAAU,OACxC,KAAK,UAAU,WAAW,UAAU,CAAC;AACvC;EACF,KAAK;AACH,cACE,WAAW,mBAAmB,UAAU,cACxC,KAAK,UAAU,WAAW,UAAU,CAAC;AACvC;;CAEJ,MAAM,gBAAgB;EACpB,MAAM,EAAE,WAAW,oBAAoB,6BACrC,kCACE,aACA,WAAW,yBACZ;EACH,MAAM,CAAC,gBAAgB,yBAAyB,wBAC9C,aACA,YACA,WACA,0BACA,gBAAgB,KACjB;AAgBD,SAZI,CACF;GACE,MAAM;GACN;GACA;GACA;GACA,MAAM;IAAE,QAAQ;IAAS,YAAY,WAAW;IAAc;GAC9D;GACgB;GACjB,EACD,sBACD;;AAGH,QAAO,+BAA+B,aAAa,UAAU,QAAQ"}
|
|
@@ -1,15 +1,14 @@
|
|
|
1
|
-
import { CheckResult } from "./check.
|
|
2
|
-
import { Arguments } from "./util.
|
|
3
|
-
import { ReadDataResult } from "./read.
|
|
4
|
-
import { StoreLayer } from "./optimisticProxy.
|
|
5
|
-
import { IsographEnvironment, StoreLink, StoreRecord } from "./IsographEnvironment.
|
|
6
|
-
import { FragmentReference, Variables } from "./FragmentReference.
|
|
7
|
-
import { EncounteredIds, NetworkResponseObject } from "./cache.
|
|
8
|
-
import { IsographEntrypoint, NormalizationAstNodes, RefetchQueryNormalizationArtifact } from "./entrypoint.
|
|
1
|
+
import { CheckResult } from "./check.cjs";
|
|
2
|
+
import { Arguments } from "./util.cjs";
|
|
3
|
+
import { ReadDataResult } from "./read.cjs";
|
|
4
|
+
import { StoreLayer } from "./optimisticProxy.cjs";
|
|
5
|
+
import { IsographEnvironment, StoreLink, StoreRecord } from "./IsographEnvironment.cjs";
|
|
6
|
+
import { FragmentReference, Variables } from "./FragmentReference.cjs";
|
|
7
|
+
import { EncounteredIds, NetworkResponseObject } from "./cache.cjs";
|
|
8
|
+
import { IsographEntrypoint, NormalizationAstNodes, RefetchQueryNormalizationArtifact } from "./entrypoint.cjs";
|
|
9
9
|
import { CleanupFn } from "@isograph/disposable-types";
|
|
10
10
|
|
|
11
11
|
//#region src/core/logging.d.ts
|
|
12
|
-
|
|
13
12
|
/**
|
|
14
13
|
* Note: these types are unstable. We will add and remove items from this enum
|
|
15
14
|
* and add and remove fields. Please do not rely on the specifics here (for now).
|
|
@@ -92,4 +91,4 @@ declare function logMessage(environment: IsographEnvironment, getMessage: () =>
|
|
|
92
91
|
declare function registerLogger(environment: IsographEnvironment, log: LogFunction): CleanupFn;
|
|
93
92
|
//#endregion
|
|
94
93
|
export { LogFunction, LogMessage, WrappedLogFunction, logMessage, registerLogger };
|
|
95
|
-
//# sourceMappingURL=logging.d.
|
|
94
|
+
//# sourceMappingURL=logging.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logging.d.cts","names":[],"sources":["../../src/core/logging.ts"],"mappings":";;;;;;;;;;;;;AA8BA;;;;;;;;;;KAAY,UAAA;EAEN,IAAA;EACA,gBAAA,EAAkB,qBAAA;EAClB,eAAA,EAAiB,qBAAA;EACjB,SAAA,EAAW,SAAA;AAAA;EAGX,IAAA;EACA,KAAA,EAAO,UAAA;EACP,cAAA,EAAgB,cAAA;AAAA;EAGhB,IAAA;EACA,iBAAA,EAAmB,iBAAA;EACnB,GAAA;EACA,GAAA;EACA,WAAA;AAAA;EAGA,IAAA;EACA,aAAA;EACA,QAAA,EAAU,SAAA;AAAA;EAGV,IAAA;EACA,QAAA,EACI,iCAAA,GACA,kBAAA;EACJ,SAAA,EAAW,SAAA;EACX,gBAAA;AAAA;EAGA,IAAA;EAEA,eAAA;EACA,gBAAA;AAAA;EAGA,IAAA;EACA,KAAA;EACA,gBAAA;AAAA;EAGA,IAAA;EACA,IAAA,EAAM,SAAA;EACN,WAAA,EAAa,WAAA;EACb,SAAA;EACA,SAAA,EAAW,SAAA;EACX,SAAA,EAAW,SAAA;AAAA;EAGX,IAAA;EACA,QAAA,EAAU,cAAA;EACV,SAAA;EACA,IAAA,EAAM,SAAA;AAAA;EAGN,IAAA;EACA,UAAA;AAAA;EAGA,IAAA;EACA,MAAA,EAAQ,WAAA;AAAA;EAGR,IAAA;AAAA;EAGA,IAAA;EACA,KAAA;AAAA;EAGA,IAAA;EACA,UAAA,EAAY,cAAA;AAAA;EAGZ,IAAA;EACA,KAAA;AAAA;AAAA,KAGM,WAAA,IAAe,UAAA,EAAY,UAAA;AAAA,KAG3B,kBAAA;EACV,GAAA,EAAK,WAAA;AAAA;AAAA,iBAGS,UAAA,CACd,WAAA,EAAa,mBAAA,EACb,UAAA,QAAkB,UAAA;AAAA,iBAYJ,cAAA,CACd,WAAA,EAAa,mBAAA,EACb,GAAA,EAAK,WAAA,GACJ,SAAA"}
|
package/dist/core/logging.d.mts
CHANGED
|
@@ -9,7 +9,6 @@ import { IsographEntrypoint, NormalizationAstNodes, RefetchQueryNormalizationArt
|
|
|
9
9
|
import { CleanupFn } from "@isograph/disposable-types";
|
|
10
10
|
|
|
11
11
|
//#region src/core/logging.d.ts
|
|
12
|
-
|
|
13
12
|
/**
|
|
14
13
|
* Note: these types are unstable. We will add and remove items from this enum
|
|
15
14
|
* and add and remove fields. Please do not rely on the specifics here (for now).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logging.d.mts","names":[],"sources":["../../src/core/logging.ts"],"
|
|
1
|
+
{"version":3,"file":"logging.d.mts","names":[],"sources":["../../src/core/logging.ts"],"mappings":";;;;;;;;;;;;;AA8BA;;;;;;;;;;KAAY,UAAA;EAEN,IAAA;EACA,gBAAA,EAAkB,qBAAA;EAClB,eAAA,EAAiB,qBAAA;EACjB,SAAA,EAAW,SAAA;AAAA;EAGX,IAAA;EACA,KAAA,EAAO,UAAA;EACP,cAAA,EAAgB,cAAA;AAAA;EAGhB,IAAA;EACA,iBAAA,EAAmB,iBAAA;EACnB,GAAA;EACA,GAAA;EACA,WAAA;AAAA;EAGA,IAAA;EACA,aAAA;EACA,QAAA,EAAU,SAAA;AAAA;EAGV,IAAA;EACA,QAAA,EACI,iCAAA,GACA,kBAAA;EACJ,SAAA,EAAW,SAAA;EACX,gBAAA;AAAA;EAGA,IAAA;EAEA,eAAA;EACA,gBAAA;AAAA;EAGA,IAAA;EACA,KAAA;EACA,gBAAA;AAAA;EAGA,IAAA;EACA,IAAA,EAAM,SAAA;EACN,WAAA,EAAa,WAAA;EACb,SAAA;EACA,SAAA,EAAW,SAAA;EACX,SAAA,EAAW,SAAA;AAAA;EAGX,IAAA;EACA,QAAA,EAAU,cAAA;EACV,SAAA;EACA,IAAA,EAAM,SAAA;AAAA;EAGN,IAAA;EACA,UAAA;AAAA;EAGA,IAAA;EACA,MAAA,EAAQ,WAAA;AAAA;EAGR,IAAA;AAAA;EAGA,IAAA;EACA,KAAA;AAAA;EAGA,IAAA;EACA,UAAA,EAAY,cAAA;AAAA;EAGZ,IAAA;EACA,KAAA;AAAA;AAAA,KAGM,WAAA,IAAe,UAAA,EAAY,UAAA;AAAA,KAG3B,kBAAA;EACV,GAAA,EAAK,WAAA;AAAA;AAAA,iBAGS,UAAA,CACd,WAAA,EAAa,mBAAA,EACb,UAAA,QAAkB,UAAA;AAAA,iBAYJ,cAAA,CACd,WAAA,EAAa,mBAAA,EACb,GAAA,EAAK,WAAA,GACJ,SAAA"}
|