@isograph/react 0.4.3 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-compile-libs.log +10 -3
- package/dist/_virtual/rolldown_runtime.js +25 -0
- package/dist/core/FragmentReference.d.mts +38 -0
- package/dist/core/FragmentReference.d.mts.map +1 -0
- package/dist/core/FragmentReference.d.ts +31 -27
- package/dist/core/FragmentReference.d.ts.map +1 -1
- package/dist/core/FragmentReference.js +8 -6
- package/dist/core/FragmentReference.mjs +10 -0
- package/dist/core/FragmentReference.mjs.map +1 -0
- package/dist/core/IsographEnvironment.d.mts +89 -0
- package/dist/core/IsographEnvironment.d.mts.map +1 -0
- package/dist/core/IsographEnvironment.d.ts +77 -72
- package/dist/core/IsographEnvironment.d.ts.map +1 -1
- package/dist/core/IsographEnvironment.js +62 -59
- package/dist/core/IsographEnvironment.mjs +67 -0
- package/dist/core/IsographEnvironment.mjs.map +1 -0
- package/dist/core/PromiseWrapper.d.mts +36 -0
- package/dist/core/PromiseWrapper.d.mts.map +1 -0
- package/dist/core/PromiseWrapper.d.ts +27 -18
- package/dist/core/PromiseWrapper.d.ts.map +1 -1
- package/dist/core/PromiseWrapper.js +45 -43
- package/dist/core/PromiseWrapper.mjs +49 -0
- package/dist/core/PromiseWrapper.mjs.map +1 -0
- package/dist/core/areEqualWithDeepComparison.js +56 -108
- package/dist/core/areEqualWithDeepComparison.mjs +62 -0
- package/dist/core/areEqualWithDeepComparison.mjs.map +1 -0
- package/dist/core/brand.d.mts +19 -0
- package/dist/core/brand.d.mts.map +1 -0
- package/dist/core/brand.d.ts +18 -1
- package/dist/core/brand.d.ts.map +1 -1
- package/dist/core/cache.d.mts +20 -0
- package/dist/core/cache.d.mts.map +1 -0
- package/dist/core/cache.d.ts +18 -34
- package/dist/core/cache.d.ts.map +1 -1
- package/dist/core/cache.js +210 -516
- package/dist/core/cache.mjs +237 -0
- package/dist/core/cache.mjs.map +1 -0
- package/dist/core/check.d.mts +28 -0
- package/dist/core/check.d.mts.map +1 -0
- package/dist/core/check.d.ts +24 -18
- package/dist/core/check.d.ts.map +1 -1
- package/dist/core/check.js +80 -124
- package/dist/core/check.mjs +84 -0
- package/dist/core/check.mjs.map +1 -0
- package/dist/core/componentCache.js +10 -34
- package/dist/core/componentCache.mjs +12 -0
- package/dist/core/componentCache.mjs.map +1 -0
- package/dist/core/entrypoint.d.mts +99 -0
- package/dist/core/entrypoint.d.mts.map +1 -0
- package/dist/core/entrypoint.d.ts +83 -68
- package/dist/core/entrypoint.d.ts.map +1 -1
- package/dist/core/entrypoint.js +6 -5
- package/dist/core/entrypoint.mjs +8 -0
- package/dist/core/entrypoint.mjs.map +1 -0
- package/dist/core/garbageCollection.d.mts +18 -0
- package/dist/core/garbageCollection.d.mts.map +1 -0
- package/dist/core/garbageCollection.d.ts +15 -10
- package/dist/core/garbageCollection.d.ts.map +1 -1
- package/dist/core/garbageCollection.js +82 -99
- package/dist/core/garbageCollection.mjs +89 -0
- package/dist/core/garbageCollection.mjs.map +1 -0
- package/dist/core/getOrCreateCacheForArtifact.js +37 -0
- package/dist/core/getOrCreateCacheForArtifact.mjs +38 -0
- package/dist/core/getOrCreateCacheForArtifact.mjs.map +1 -0
- package/dist/core/logging.d.mts +95 -0
- package/dist/core/logging.d.mts.map +1 -0
- package/dist/core/logging.d.ts +78 -60
- package/dist/core/logging.d.ts.map +1 -1
- package/dist/core/logging.js +17 -18
- package/dist/core/logging.mjs +20 -0
- package/dist/core/logging.mjs.map +1 -0
- package/dist/core/makeNetworkRequest.d.mts +13 -0
- package/dist/core/makeNetworkRequest.d.mts.map +1 -0
- package/dist/core/makeNetworkRequest.d.ts +12 -8
- package/dist/core/makeNetworkRequest.d.ts.map +1 -1
- package/dist/core/makeNetworkRequest.js +188 -195
- package/dist/core/makeNetworkRequest.mjs +195 -0
- package/dist/core/makeNetworkRequest.mjs.map +1 -0
- package/dist/core/optimisticProxy.d.mts +43 -0
- package/dist/core/optimisticProxy.d.mts.map +1 -0
- package/dist/core/optimisticProxy.d.ts +43 -0
- package/dist/core/optimisticProxy.d.ts.map +1 -0
- package/dist/core/optimisticProxy.js +273 -0
- package/dist/core/optimisticProxy.mjs +268 -0
- package/dist/core/optimisticProxy.mjs.map +1 -0
- package/dist/core/read.d.mts +29 -0
- package/dist/core/read.d.mts.map +1 -0
- package/dist/core/read.d.ts +23 -27
- package/dist/core/read.d.ts.map +1 -1
- package/dist/core/read.js +438 -618
- package/dist/core/read.mjs +456 -0
- package/dist/core/read.mjs.map +1 -0
- package/dist/core/reader.d.mts +89 -0
- package/dist/core/reader.d.mts.map +1 -0
- package/dist/core/reader.d.ts +78 -74
- package/dist/core/reader.d.ts.map +1 -1
- package/dist/core/startUpdate.js +118 -156
- package/dist/core/startUpdate.mjs +125 -0
- package/dist/core/startUpdate.mjs.map +1 -0
- package/dist/core/subscribe.d.mts +12 -0
- package/dist/core/subscribe.d.mts.map +1 -0
- package/dist/core/subscribe.d.ts +12 -0
- package/dist/core/subscribe.d.ts.map +1 -0
- package/dist/core/subscribe.js +79 -0
- package/dist/core/subscribe.mjs +79 -0
- package/dist/core/subscribe.mjs.map +1 -0
- package/dist/core/util.d.mts +27 -0
- package/dist/core/util.d.mts.map +1 -0
- package/dist/core/util.d.ts +21 -17
- package/dist/core/util.d.ts.map +1 -1
- package/dist/core/util.js +22 -2
- package/dist/core/util.mjs +21 -0
- package/dist/core/util.mjs.map +1 -0
- package/dist/core/writeData.d.mts +11 -0
- package/dist/core/writeData.d.mts.map +1 -0
- package/dist/core/writeData.d.ts +11 -0
- package/dist/core/writeData.d.ts.map +1 -0
- package/dist/core/writeData.js +41 -0
- package/dist/core/writeData.mjs +42 -0
- package/dist/core/writeData.mjs.map +1 -0
- package/dist/index.d.mts +32 -0
- package/dist/index.d.ts +32 -29
- package/dist/index.js +70 -68
- package/dist/index.mjs +31 -0
- package/dist/loadable-hooks/useClientSideDefer.d.mts +12 -0
- package/dist/loadable-hooks/useClientSideDefer.d.mts.map +1 -0
- package/dist/loadable-hooks/useClientSideDefer.d.ts +10 -8
- package/dist/loadable-hooks/useClientSideDefer.d.ts.map +1 -1
- package/dist/loadable-hooks/useClientSideDefer.js +14 -12
- package/dist/loadable-hooks/useClientSideDefer.mjs +14 -0
- package/dist/loadable-hooks/useClientSideDefer.mjs.map +1 -0
- package/dist/loadable-hooks/useConnectionSpecPagination.d.mts +33 -0
- package/dist/loadable-hooks/useConnectionSpecPagination.d.mts.map +1 -0
- package/dist/loadable-hooks/useConnectionSpecPagination.d.ts +27 -21
- package/dist/loadable-hooks/useConnectionSpecPagination.d.ts.map +1 -1
- package/dist/loadable-hooks/useConnectionSpecPagination.js +133 -158
- package/dist/loadable-hooks/useConnectionSpecPagination.mjs +134 -0
- package/dist/loadable-hooks/useConnectionSpecPagination.mjs.map +1 -0
- package/dist/loadable-hooks/useImperativeExposedMutationField.d.mts +8 -0
- package/dist/loadable-hooks/useImperativeExposedMutationField.d.mts.map +1 -0
- package/dist/loadable-hooks/useImperativeExposedMutationField.d.ts +6 -3
- package/dist/loadable-hooks/useImperativeExposedMutationField.d.ts.map +1 -1
- package/dist/loadable-hooks/useImperativeExposedMutationField.js +9 -12
- package/dist/loadable-hooks/useImperativeExposedMutationField.mjs +11 -0
- package/dist/loadable-hooks/useImperativeExposedMutationField.mjs.map +1 -0
- package/dist/loadable-hooks/useImperativeLoadableField.d.mts +19 -0
- package/dist/loadable-hooks/useImperativeLoadableField.d.mts.map +1 -0
- package/dist/loadable-hooks/useImperativeLoadableField.d.ts +15 -11
- package/dist/loadable-hooks/useImperativeLoadableField.d.ts.map +1 -1
- package/dist/loadable-hooks/useImperativeLoadableField.js +16 -12
- package/dist/loadable-hooks/useImperativeLoadableField.mjs +17 -0
- package/dist/loadable-hooks/useImperativeLoadableField.mjs.map +1 -0
- package/dist/loadable-hooks/useSkipLimitPagination.d.mts +24 -0
- package/dist/loadable-hooks/useSkipLimitPagination.d.mts.map +1 -0
- package/dist/loadable-hooks/useSkipLimitPagination.d.ts +19 -15
- package/dist/loadable-hooks/useSkipLimitPagination.d.ts.map +1 -1
- package/dist/loadable-hooks/useSkipLimitPagination.js +118 -160
- package/dist/loadable-hooks/useSkipLimitPagination.mjs +119 -0
- package/dist/loadable-hooks/useSkipLimitPagination.mjs.map +1 -0
- package/dist/react/FragmentReader.d.mts +18 -0
- package/dist/react/FragmentReader.d.mts.map +1 -0
- package/dist/react/FragmentReader.d.ts +16 -7
- package/dist/react/FragmentReader.d.ts.map +1 -1
- package/dist/react/FragmentReader.js +8 -7
- package/dist/react/FragmentReader.mjs +10 -0
- package/dist/react/FragmentReader.mjs.map +1 -0
- package/dist/react/FragmentRenderer.d.mts +20 -0
- package/dist/react/FragmentRenderer.d.mts.map +1 -0
- package/dist/react/FragmentRenderer.d.ts +18 -13
- package/dist/react/FragmentRenderer.d.ts.map +1 -1
- package/dist/react/FragmentRenderer.js +11 -33
- package/dist/react/FragmentRenderer.mjs +12 -0
- package/dist/react/FragmentRenderer.mjs.map +1 -0
- package/dist/react/IsographEnvironmentProvider.d.mts +17 -0
- package/dist/react/IsographEnvironmentProvider.d.mts.map +1 -0
- package/dist/react/IsographEnvironmentProvider.d.ts +15 -9
- package/dist/react/IsographEnvironmentProvider.d.ts.map +1 -1
- package/dist/react/IsographEnvironmentProvider.js +15 -39
- package/dist/react/IsographEnvironmentProvider.mjs +17 -0
- package/dist/react/IsographEnvironmentProvider.mjs.map +1 -0
- package/dist/react/LoadableFieldReader.d.mts +21 -0
- package/dist/react/LoadableFieldReader.d.mts.map +1 -0
- package/dist/react/LoadableFieldReader.d.ts +20 -11
- package/dist/react/LoadableFieldReader.d.ts.map +1 -1
- package/dist/react/LoadableFieldReader.js +13 -8
- package/dist/react/LoadableFieldReader.mjs +14 -0
- package/dist/react/LoadableFieldReader.mjs.map +1 -0
- package/dist/react/LoadableFieldRenderer.d.mts +22 -0
- package/dist/react/LoadableFieldRenderer.d.mts.map +1 -0
- package/dist/react/LoadableFieldRenderer.d.ts +21 -12
- package/dist/react/LoadableFieldRenderer.d.ts.map +1 -1
- package/dist/react/LoadableFieldRenderer.js +13 -35
- package/dist/react/LoadableFieldRenderer.mjs +14 -0
- package/dist/react/LoadableFieldRenderer.mjs.map +1 -0
- package/dist/react/RenderAfterCommit__DO_NOT_USE.d.mts +18 -0
- package/dist/react/RenderAfterCommit__DO_NOT_USE.d.mts.map +1 -0
- package/dist/react/RenderAfterCommit__DO_NOT_USE.d.ts +11 -3
- package/dist/react/RenderAfterCommit__DO_NOT_USE.d.ts.map +1 -1
- package/dist/react/RenderAfterCommit__DO_NOT_USE.js +17 -13
- package/dist/react/RenderAfterCommit__DO_NOT_USE.mjs +18 -0
- package/dist/react/RenderAfterCommit__DO_NOT_USE.mjs.map +1 -0
- package/dist/react/createIsographEnvironment.d.mts +9 -0
- package/dist/react/createIsographEnvironment.d.mts.map +1 -0
- package/dist/react/createIsographEnvironment.d.ts +8 -0
- package/dist/react/createIsographEnvironment.d.ts.map +1 -0
- package/dist/react/createIsographEnvironment.js +10 -0
- package/dist/react/createIsographEnvironment.mjs +11 -0
- package/dist/react/createIsographEnvironment.mjs.map +1 -0
- package/dist/react/maybeUnwrapNetworkRequest.js +11 -0
- package/dist/react/maybeUnwrapNetworkRequest.mjs +12 -0
- package/dist/react/maybeUnwrapNetworkRequest.mjs.map +1 -0
- package/dist/react/useImperativeReference.d.mts +15 -0
- package/dist/react/useImperativeReference.d.mts.map +1 -0
- package/dist/react/useImperativeReference.d.ts +13 -7
- package/dist/react/useImperativeReference.d.ts.map +1 -1
- package/dist/react/useImperativeReference.js +34 -32
- package/dist/react/useImperativeReference.mjs +35 -0
- package/dist/react/useImperativeReference.mjs.map +1 -0
- package/dist/react/useLazyReference.d.mts +13 -0
- package/dist/react/useLazyReference.d.mts.map +1 -0
- package/dist/react/useLazyReference.d.ts +11 -5
- package/dist/react/useLazyReference.d.ts.map +1 -1
- package/dist/react/useLazyReference.js +17 -40
- package/dist/react/useLazyReference.mjs +18 -0
- package/dist/react/useLazyReference.mjs.map +1 -0
- package/dist/react/useReadAndSubscribe.d.mts +20 -0
- package/dist/react/useReadAndSubscribe.d.mts.map +1 -0
- package/dist/react/useReadAndSubscribe.d.ts +14 -9
- package/dist/react/useReadAndSubscribe.d.ts.map +1 -1
- package/dist/react/useReadAndSubscribe.js +57 -39
- package/dist/react/useReadAndSubscribe.mjs +59 -0
- package/dist/react/useReadAndSubscribe.mjs.map +1 -0
- package/dist/react/useRerenderOnChange.d.mts +12 -0
- package/dist/react/useRerenderOnChange.d.mts.map +1 -0
- package/dist/react/useRerenderOnChange.d.ts +10 -6
- package/dist/react/useRerenderOnChange.d.ts.map +1 -1
- package/dist/react/useRerenderOnChange.js +16 -20
- package/dist/react/useRerenderOnChange.mjs +17 -0
- package/dist/react/useRerenderOnChange.mjs.map +1 -0
- package/dist/react/useResult.d.mts +8 -0
- package/dist/react/useResult.d.mts.map +1 -0
- package/dist/react/useResult.d.ts +7 -5
- package/dist/react/useResult.d.ts.map +1 -1
- package/dist/react/useResult.js +27 -39
- package/dist/react/useResult.mjs +30 -0
- package/dist/react/useResult.mjs.map +1 -0
- package/package.json +26 -19
- package/src/core/FragmentReference.ts +13 -7
- package/src/core/IsographEnvironment.ts +80 -21
- package/src/core/PromiseWrapper.ts +14 -7
- package/src/core/areEqualWithDeepComparison.ts +2 -18
- package/src/core/brand.ts +18 -0
- package/src/core/cache.ts +62 -332
- package/src/core/check.ts +30 -26
- package/src/core/componentCache.ts +11 -44
- package/src/core/entrypoint.ts +50 -9
- package/src/core/garbageCollection.ts +81 -28
- package/src/core/getOrCreateCacheForArtifact.ts +86 -0
- package/src/core/logging.ts +25 -13
- package/src/core/makeNetworkRequest.ts +320 -94
- package/src/core/optimisticProxy.ts +544 -0
- package/src/core/read.ts +251 -198
- package/src/core/reader.ts +18 -17
- package/src/core/startUpdate.ts +47 -36
- package/src/core/subscribe.ts +189 -0
- package/src/core/util.ts +26 -0
- package/src/core/writeData.ts +79 -0
- package/src/index.ts +6 -4
- package/src/loadable-hooks/useClientSideDefer.ts +80 -30
- package/src/loadable-hooks/useConnectionSpecPagination.ts +54 -35
- package/src/loadable-hooks/useImperativeLoadableField.ts +5 -5
- package/src/loadable-hooks/useSkipLimitPagination.ts +22 -21
- package/src/react/FragmentReader.tsx +3 -1
- package/src/react/FragmentRenderer.tsx +8 -1
- package/src/react/IsographEnvironmentProvider.tsx +2 -1
- package/src/react/LoadableFieldReader.tsx +125 -16
- package/src/react/LoadableFieldRenderer.tsx +124 -16
- package/src/react/createIsographEnvironment.ts +23 -0
- package/src/react/maybeUnwrapNetworkRequest.ts +17 -0
- package/src/react/useImperativeReference.ts +25 -15
- package/src/react/useLazyReference.ts +20 -10
- package/src/react/useReadAndSubscribe.ts +53 -12
- package/src/react/useRerenderOnChange.ts +3 -3
- package/src/react/useResult.ts +15 -35
- package/src/tests/__isograph/Node/asEconomist/resolver_reader.ts +1 -1
- package/src/tests/__isograph/Query/linkedUpdate/entrypoint.ts +3 -1
- package/src/tests/__isograph/Query/linkedUpdate/raw_response_type.ts +13 -0
- package/src/tests/__isograph/Query/linkedUpdate/resolver_reader.ts +1 -1
- package/src/tests/__isograph/Query/meName/entrypoint.ts +3 -1
- package/src/tests/__isograph/Query/meName/raw_response_type.ts +7 -0
- package/src/tests/__isograph/Query/meName/resolver_reader.ts +1 -1
- package/src/tests/__isograph/Query/meNameSuccessor/entrypoint.ts +3 -1
- package/src/tests/__isograph/Query/meNameSuccessor/raw_response_type.ts +14 -0
- package/src/tests/__isograph/Query/meNameSuccessor/resolver_reader.ts +1 -1
- package/src/tests/__isograph/Query/nodeField/entrypoint.ts +3 -1
- package/src/tests/__isograph/Query/nodeField/raw_response_type.ts +7 -0
- package/src/tests/__isograph/Query/nodeField/resolver_reader.ts +1 -1
- package/src/tests/__isograph/Query/normalizeUndefinedField/entrypoint.ts +33 -0
- package/src/tests/__isograph/Query/normalizeUndefinedField/normalization_ast.ts +25 -0
- package/src/tests/__isograph/Query/normalizeUndefinedField/output_type.ts +3 -0
- package/src/tests/__isograph/Query/normalizeUndefinedField/param_type.ts +9 -0
- package/src/tests/__isograph/Query/normalizeUndefinedField/query_text.ts +6 -0
- package/src/tests/__isograph/Query/normalizeUndefinedField/raw_response_type.ts +7 -0
- package/src/tests/__isograph/Query/normalizeUndefinedField/resolver_reader.ts +38 -0
- package/src/tests/__isograph/Query/startUpdate/entrypoint.ts +3 -1
- package/src/tests/__isograph/Query/startUpdate/raw_response_type.ts +8 -0
- package/src/tests/__isograph/Query/startUpdate/resolver_reader.ts +1 -1
- package/src/tests/__isograph/Query/subquery/entrypoint.ts +3 -1
- package/src/tests/__isograph/Query/subquery/raw_response_type.ts +9 -0
- package/src/tests/__isograph/Query/subquery/resolver_reader.ts +1 -1
- package/src/tests/__isograph/iso.ts +11 -1
- package/src/tests/garbageCollection.test.ts +10 -10
- package/src/tests/meNameSuccessor.ts +7 -4
- package/src/tests/nodeQuery.ts +6 -4
- package/src/tests/normalizeData.test.ts +94 -18
- package/src/tests/optimisticProxy.test.ts +862 -0
- package/src/tests/startUpdate.test.ts +11 -11
- package/vitest.config.ts +5 -0
- package/dist/core/areEqualWithDeepComparison.d.ts +0 -3
- package/dist/core/areEqualWithDeepComparison.d.ts.map +0 -1
- package/dist/core/brand.js +0 -2
- package/dist/core/componentCache.d.ts +0 -5
- package/dist/core/componentCache.d.ts.map +0 -1
- package/dist/core/reader.js +0 -2
- package/dist/core/startUpdate.d.ts +0 -8
- package/dist/core/startUpdate.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
|
@@ -1,107 +1,90 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
const require_PromiseWrapper = require('./PromiseWrapper.js');
|
|
2
|
+
const require_IsographEnvironment = require('./IsographEnvironment.js');
|
|
3
|
+
const require_cache = require('./cache.js');
|
|
4
|
+
|
|
5
|
+
//#region src/core/garbageCollection.ts
|
|
6
|
+
function isRetainedQueryWithNormalizationAst(query) {
|
|
7
|
+
return query.normalizationAst.result !== require_PromiseWrapper.NOT_SET && query.normalizationAst.result.kind === "Ok";
|
|
8
|
+
}
|
|
8
9
|
function unretainQuery(environment, retainedQuery) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
10
|
+
environment.retainedQueries.delete(retainedQuery);
|
|
11
|
+
environment.gcBuffer.push(retainedQuery);
|
|
12
|
+
if (environment.gcBuffer.length > environment.gcBufferSize) {
|
|
13
|
+
environment.gcBuffer.shift();
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
return false;
|
|
16
17
|
}
|
|
17
18
|
function retainQuery(environment, queryToRetain) {
|
|
18
|
-
|
|
19
|
-
// TODO can we remove this query from the buffer somehow?
|
|
20
|
-
// We are relying on === equality, but we really should be comparing
|
|
21
|
-
// id + variables
|
|
19
|
+
environment.retainedQueries.add(queryToRetain);
|
|
22
20
|
}
|
|
23
21
|
function garbageCollectEnvironment(environment) {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
const retainedTypeIds = retainedIds[typeName];
|
|
36
|
-
// delete all objects
|
|
37
|
-
if (retainedTypeIds == undefined || retainedTypeIds.size == 0) {
|
|
38
|
-
delete environment.store[typeName];
|
|
39
|
-
continue;
|
|
40
|
-
}
|
|
41
|
-
for (const dataId in dataById) {
|
|
42
|
-
if (!retainedTypeIds.has(dataId)) {
|
|
43
|
-
delete dataById[dataId];
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
if (Object.keys(dataById).length === 0) {
|
|
47
|
-
delete environment.store[typeName];
|
|
48
|
-
}
|
|
49
|
-
}
|
|
22
|
+
if (environment.store.kind !== "BaseStoreLayer") return;
|
|
23
|
+
const retainedQueries = [];
|
|
24
|
+
for (const query of environment.retainedQueries) {
|
|
25
|
+
if (!isRetainedQueryWithNormalizationAst(query)) return;
|
|
26
|
+
retainedQueries.push(query);
|
|
27
|
+
}
|
|
28
|
+
for (const query of environment.gcBuffer) {
|
|
29
|
+
if (!isRetainedQueryWithNormalizationAst(query)) return;
|
|
30
|
+
retainedQueries.push(query);
|
|
31
|
+
}
|
|
32
|
+
garbageCollectBaseStoreLayer(retainedQueries, environment.store);
|
|
50
33
|
}
|
|
51
|
-
function
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
34
|
+
function garbageCollectBaseStoreLayer(retainedQueries, baseStoreLayer) {
|
|
35
|
+
const retainedIds = {};
|
|
36
|
+
for (const query of retainedQueries) recordReachableIds(baseStoreLayer.data, query, retainedIds);
|
|
37
|
+
for (const typeName in baseStoreLayer.data) {
|
|
38
|
+
const dataById = baseStoreLayer.data[typeName];
|
|
39
|
+
if (dataById == null) continue;
|
|
40
|
+
const retainedTypeIds = retainedIds[typeName];
|
|
41
|
+
if (retainedTypeIds === void 0 || retainedTypeIds.size === 0) {
|
|
42
|
+
delete baseStoreLayer.data[typeName];
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
for (const dataId in dataById) if (!retainedTypeIds.has(dataId)) delete dataById[dataId];
|
|
46
|
+
if (Object.keys(dataById).length === 0) delete baseStoreLayer.data[typeName];
|
|
47
|
+
}
|
|
60
48
|
}
|
|
61
|
-
function
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
case 'Linked':
|
|
66
|
-
const linkKey = (0, cache_1.getParentRecordKey)(selection, variables !== null && variables !== void 0 ? variables : {});
|
|
67
|
-
const linkedFieldOrFields = currentRecord[linkKey];
|
|
68
|
-
const links = [];
|
|
69
|
-
if (Array.isArray(linkedFieldOrFields)) {
|
|
70
|
-
for (const maybeLink of linkedFieldOrFields) {
|
|
71
|
-
const link = (0, IsographEnvironment_1.assertLink)(maybeLink);
|
|
72
|
-
if (link != null) {
|
|
73
|
-
links.push(link);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
else {
|
|
78
|
-
const link = (0, IsographEnvironment_1.assertLink)(linkedFieldOrFields);
|
|
79
|
-
if (link != null) {
|
|
80
|
-
links.push(link);
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
let typeStore = selection.concreteType !== null
|
|
84
|
-
? store[selection.concreteType]
|
|
85
|
-
: null;
|
|
86
|
-
if (typeStore == null && selection.concreteType !== null) {
|
|
87
|
-
continue;
|
|
88
|
-
}
|
|
89
|
-
for (const nextRecordLink of links) {
|
|
90
|
-
let __typename = nextRecordLink.__typename;
|
|
91
|
-
const resolvedTypeStore = typeStore !== null && typeStore !== void 0 ? typeStore : store[__typename];
|
|
92
|
-
if (resolvedTypeStore == null) {
|
|
93
|
-
continue;
|
|
94
|
-
}
|
|
95
|
-
const nextRecord = resolvedTypeStore[nextRecordLink.__link];
|
|
96
|
-
if (nextRecord != null) {
|
|
97
|
-
const retainedRecordsIds = ((_a = mutableRetainedIds[__typename]) !== null && _a !== void 0 ? _a : (mutableRetainedIds[__typename] = new Set()));
|
|
98
|
-
retainedRecordsIds.add(nextRecordLink.__link);
|
|
99
|
-
recordReachableIdsFromRecord(store, nextRecord, mutableRetainedIds, selection.selections, variables);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
continue;
|
|
103
|
-
case 'Scalar':
|
|
104
|
-
continue;
|
|
105
|
-
}
|
|
106
|
-
}
|
|
49
|
+
function recordReachableIds(dataLayer, retainedQuery, mutableRetainedIds) {
|
|
50
|
+
const record = dataLayer[retainedQuery.root.__typename]?.[retainedQuery.root.__link];
|
|
51
|
+
(mutableRetainedIds[retainedQuery.root.__typename] ??= /* @__PURE__ */ new Set()).add(retainedQuery.root.__link);
|
|
52
|
+
if (record != null) recordReachableIdsFromRecord(dataLayer, record, mutableRetainedIds, retainedQuery.normalizationAst.result.value.selections, retainedQuery.variables);
|
|
107
53
|
}
|
|
54
|
+
function recordReachableIdsFromRecord(dataLayer, currentRecord, mutableRetainedIds, selections, variables) {
|
|
55
|
+
for (const selection of selections) switch (selection.kind) {
|
|
56
|
+
case "InlineFragment":
|
|
57
|
+
if (currentRecord[require_cache.TYPENAME_FIELD_NAME] === selection.type) recordReachableIdsFromRecord(dataLayer, currentRecord, mutableRetainedIds, selection.selections, variables);
|
|
58
|
+
continue;
|
|
59
|
+
case "Linked":
|
|
60
|
+
const linkedFieldOrFields = currentRecord[require_cache.getParentRecordKey(selection, variables ?? {})];
|
|
61
|
+
const links = [];
|
|
62
|
+
if (Array.isArray(linkedFieldOrFields)) for (const maybeLink of linkedFieldOrFields) {
|
|
63
|
+
const link = require_IsographEnvironment.assertLink(maybeLink);
|
|
64
|
+
if (link != null) links.push(link);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
const link = require_IsographEnvironment.assertLink(linkedFieldOrFields);
|
|
68
|
+
if (link != null) links.push(link);
|
|
69
|
+
}
|
|
70
|
+
let typeStore = selection.concreteType != null ? dataLayer[selection.concreteType] : null;
|
|
71
|
+
if (typeStore == null && selection.concreteType != null) continue;
|
|
72
|
+
for (const nextRecordLink of links) {
|
|
73
|
+
let __typename = nextRecordLink.__typename;
|
|
74
|
+
const resolvedTypeStore = typeStore ?? dataLayer[__typename];
|
|
75
|
+
if (resolvedTypeStore == null) continue;
|
|
76
|
+
const nextRecord = resolvedTypeStore[nextRecordLink.__link];
|
|
77
|
+
if (nextRecord != null) {
|
|
78
|
+
(mutableRetainedIds[__typename] ??= /* @__PURE__ */ new Set()).add(nextRecordLink.__link);
|
|
79
|
+
recordReachableIdsFromRecord(dataLayer, nextRecord, mutableRetainedIds, selection.selections, variables);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
continue;
|
|
83
|
+
case "Scalar": continue;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
//#endregion
|
|
88
|
+
exports.garbageCollectEnvironment = garbageCollectEnvironment;
|
|
89
|
+
exports.retainQuery = retainQuery;
|
|
90
|
+
exports.unretainQuery = unretainQuery;
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { NOT_SET } from "./PromiseWrapper.mjs";
|
|
2
|
+
import { assertLink } from "./IsographEnvironment.mjs";
|
|
3
|
+
import { TYPENAME_FIELD_NAME, getParentRecordKey } from "./cache.mjs";
|
|
4
|
+
|
|
5
|
+
//#region src/core/garbageCollection.ts
|
|
6
|
+
function isRetainedQueryWithNormalizationAst(query) {
|
|
7
|
+
return query.normalizationAst.result !== NOT_SET && query.normalizationAst.result.kind === "Ok";
|
|
8
|
+
}
|
|
9
|
+
function unretainQuery(environment, retainedQuery) {
|
|
10
|
+
environment.retainedQueries.delete(retainedQuery);
|
|
11
|
+
environment.gcBuffer.push(retainedQuery);
|
|
12
|
+
if (environment.gcBuffer.length > environment.gcBufferSize) {
|
|
13
|
+
environment.gcBuffer.shift();
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
function retainQuery(environment, queryToRetain) {
|
|
19
|
+
environment.retainedQueries.add(queryToRetain);
|
|
20
|
+
}
|
|
21
|
+
function garbageCollectEnvironment(environment) {
|
|
22
|
+
if (environment.store.kind !== "BaseStoreLayer") return;
|
|
23
|
+
const retainedQueries = [];
|
|
24
|
+
for (const query of environment.retainedQueries) {
|
|
25
|
+
if (!isRetainedQueryWithNormalizationAst(query)) return;
|
|
26
|
+
retainedQueries.push(query);
|
|
27
|
+
}
|
|
28
|
+
for (const query of environment.gcBuffer) {
|
|
29
|
+
if (!isRetainedQueryWithNormalizationAst(query)) return;
|
|
30
|
+
retainedQueries.push(query);
|
|
31
|
+
}
|
|
32
|
+
garbageCollectBaseStoreLayer(retainedQueries, environment.store);
|
|
33
|
+
}
|
|
34
|
+
function garbageCollectBaseStoreLayer(retainedQueries, baseStoreLayer) {
|
|
35
|
+
const retainedIds = {};
|
|
36
|
+
for (const query of retainedQueries) recordReachableIds(baseStoreLayer.data, query, retainedIds);
|
|
37
|
+
for (const typeName in baseStoreLayer.data) {
|
|
38
|
+
const dataById = baseStoreLayer.data[typeName];
|
|
39
|
+
if (dataById == null) continue;
|
|
40
|
+
const retainedTypeIds = retainedIds[typeName];
|
|
41
|
+
if (retainedTypeIds === void 0 || retainedTypeIds.size === 0) {
|
|
42
|
+
delete baseStoreLayer.data[typeName];
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
for (const dataId in dataById) if (!retainedTypeIds.has(dataId)) delete dataById[dataId];
|
|
46
|
+
if (Object.keys(dataById).length === 0) delete baseStoreLayer.data[typeName];
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
function recordReachableIds(dataLayer, retainedQuery, mutableRetainedIds) {
|
|
50
|
+
const record = dataLayer[retainedQuery.root.__typename]?.[retainedQuery.root.__link];
|
|
51
|
+
(mutableRetainedIds[retainedQuery.root.__typename] ??= /* @__PURE__ */ new Set()).add(retainedQuery.root.__link);
|
|
52
|
+
if (record != null) recordReachableIdsFromRecord(dataLayer, record, mutableRetainedIds, retainedQuery.normalizationAst.result.value.selections, retainedQuery.variables);
|
|
53
|
+
}
|
|
54
|
+
function recordReachableIdsFromRecord(dataLayer, currentRecord, mutableRetainedIds, selections, variables) {
|
|
55
|
+
for (const selection of selections) switch (selection.kind) {
|
|
56
|
+
case "InlineFragment":
|
|
57
|
+
if (currentRecord[TYPENAME_FIELD_NAME] === selection.type) recordReachableIdsFromRecord(dataLayer, currentRecord, mutableRetainedIds, selection.selections, variables);
|
|
58
|
+
continue;
|
|
59
|
+
case "Linked":
|
|
60
|
+
const linkedFieldOrFields = currentRecord[getParentRecordKey(selection, variables ?? {})];
|
|
61
|
+
const links = [];
|
|
62
|
+
if (Array.isArray(linkedFieldOrFields)) for (const maybeLink of linkedFieldOrFields) {
|
|
63
|
+
const link = assertLink(maybeLink);
|
|
64
|
+
if (link != null) links.push(link);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
const link = assertLink(linkedFieldOrFields);
|
|
68
|
+
if (link != null) links.push(link);
|
|
69
|
+
}
|
|
70
|
+
let typeStore = selection.concreteType != null ? dataLayer[selection.concreteType] : null;
|
|
71
|
+
if (typeStore == null && selection.concreteType != null) continue;
|
|
72
|
+
for (const nextRecordLink of links) {
|
|
73
|
+
let __typename = nextRecordLink.__typename;
|
|
74
|
+
const resolvedTypeStore = typeStore ?? dataLayer[__typename];
|
|
75
|
+
if (resolvedTypeStore == null) continue;
|
|
76
|
+
const nextRecord = resolvedTypeStore[nextRecordLink.__link];
|
|
77
|
+
if (nextRecord != null) {
|
|
78
|
+
(mutableRetainedIds[__typename] ??= /* @__PURE__ */ new Set()).add(nextRecordLink.__link);
|
|
79
|
+
recordReachableIdsFromRecord(dataLayer, nextRecord, mutableRetainedIds, selection.selections, variables);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
continue;
|
|
83
|
+
case "Scalar": continue;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
//#endregion
|
|
88
|
+
export { garbageCollectEnvironment, retainQuery, unretainQuery };
|
|
89
|
+
//# sourceMappingURL=garbageCollection.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"garbageCollection.mjs","names":["retainedQueries: RetainedQueryWithNormalizationAst[]","retainedIds: RetainedIds","links: StoreLink[]"],"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":";;;;;AA6BA,SAAS,oCACP,OAC4C;AAC5C,QACE,MAAM,iBAAiB,WAAW,WAClC,MAAM,iBAAiB,OAAO,SAAS;;AAK3C,SAAgB,cACd,aACA,eACsB;AACtB,aAAY,gBAAgB,OAAO,cAAc;AACjD,aAAY,SAAS,KAAK,cAAc;AAExC,KAAI,YAAY,SAAS,SAAS,YAAY,cAAc;AAC1D,cAAY,SAAS,OAAO;AAC5B,SAAO;;AAGT,QAAO;;AAGT,SAAgB,YACd,aACA,eACA;AACA,aAAY,gBAAgB,IAAI,cAAc;;AAMhD,SAAgB,0BAA0B,aAAkC;AAC1E,KAAI,YAAY,MAAM,SAAS,iBAC7B;CAGF,MAAMA,kBAAuD,EAAE;AAC/D,MAAK,MAAM,SAAS,YAAY,iBAAiB;AAC/C,MAAI,CAAC,oCAAoC,MAAM,CAC7C;AAEF,kBAAgB,KAAK,MAAM;;AAG7B,MAAK,MAAM,SAAS,YAAY,UAAU;AACxC,MAAI,CAAC,oCAAoC,MAAM,CAC7C;AAEF,kBAAgB,KAAK,MAAM;;AAG7B,8BAA6B,iBAAiB,YAAY,MAAM;;AAGlE,SAAgB,6BACd,iBACA,gBACA;CACA,MAAMC,cAA2B,EAAE;AAEnC,MAAK,MAAM,SAAS,gBAClB,oBAAmB,eAAe,MAAM,OAAO,YAAY;AAG7D,MAAK,MAAM,YAAY,eAAe,MAAM;EAC1C,MAAM,WAAW,eAAe,KAAK;AACrC,MAAI,YAAY,KAAM;EACtB,MAAM,kBAAkB,YAAY;AAGpC,MAAI,oBAAoB,UAAa,gBAAgB,SAAS,GAAG;AAC/D,UAAO,eAAe,KAAK;AAC3B;;AAGF,OAAK,MAAM,UAAU,SACnB,KAAI,CAAC,gBAAgB,IAAI,OAAO,CAC9B,QAAO,SAAS;AAIpB,MAAI,OAAO,KAAK,SAAS,CAAC,WAAW,EACnC,QAAO,eAAe,KAAK;;;AASjC,SAAS,mBACP,WACA,eACA,oBACA;CACA,MAAM,SACJ,UAAU,cAAc,KAAK,cAAc,cAAc,KAAK;AAKhE,EAH4B,mBAC1B,cAAc,KAAK,gCACf,IAAI,KAAK,EACI,IAAI,cAAc,KAAK,OAAO;AAEjD,KAAI,UAAU,KACZ,8BACE,WACA,QACA,oBACA,cAAc,iBAAiB,OAAO,MAAM,YAC5C,cAAc,UACf;;AAIL,SAAS,6BACP,WACA,eACA,oBACA,YACA,WACA;AACA,MAAK,MAAM,aAAa,WACtB,SAAQ,UAAU,MAAlB;EACE,KAAK;AACH,OAAI,cAAc,yBAAyB,UAAU,KACnD,8BACE,WACA,eACA,oBACA,UAAU,YACV,UACD;AAEH;EACF,KAAK;GAEH,MAAM,sBAAsB,cADZ,mBAAmB,WAAW,aAAa,EAAE,CAAC;GAG9D,MAAMC,QAAqB,EAAE;AAC7B,OAAI,MAAM,QAAQ,oBAAoB,CACpC,MAAK,MAAM,aAAa,qBAAqB;IAC3C,MAAM,OAAO,WAAW,UAAU;AAClC,QAAI,QAAQ,KACV,OAAM,KAAK,KAAK;;QAGf;IACL,MAAM,OAAO,WAAW,oBAAoB;AAC5C,QAAI,QAAQ,KACV,OAAM,KAAK,KAAK;;GAIpB,IAAI,YACF,UAAU,gBAAgB,OACtB,UAAU,UAAU,gBACpB;AAEN,OAAI,aAAa,QAAQ,UAAU,gBAAgB,KACjD;AAGF,QAAK,MAAM,kBAAkB,OAAO;IAClC,IAAI,aAAa,eAAe;IAEhC,MAAM,oBAAoB,aAAa,UAAU;AAEjD,QAAI,qBAAqB,KACvB;IAGF,MAAM,aAAa,kBAAkB,eAAe;AACpD,QAAI,cAAc,MAAM;AAGtB,MAF4B,mBAAmB,gCAC7C,IAAI,KAAK,EACQ,IAAI,eAAe,OAAO;AAC7C,kCACE,WACA,YACA,oBACA,UAAU,YACV,UACD;;;AAIL;EACF,KAAK,SACH"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
const require_util = require('./util.js');
|
|
2
|
+
const require_IsographEnvironment = require('./IsographEnvironment.js');
|
|
3
|
+
const require_makeNetworkRequest = require('./makeNetworkRequest.js');
|
|
4
|
+
const require_cache = require('./cache.js');
|
|
5
|
+
|
|
6
|
+
//#region src/core/getOrCreateCacheForArtifact.ts
|
|
7
|
+
function getOrCreateCacheForArtifact(environment, entrypoint, variables, fetchOptions) {
|
|
8
|
+
let cacheKey = "";
|
|
9
|
+
switch (entrypoint.networkRequestInfo.operation.kind) {
|
|
10
|
+
case "Operation":
|
|
11
|
+
cacheKey = entrypoint.networkRequestInfo.operation.text + JSON.stringify(require_util.stableCopy(variables));
|
|
12
|
+
break;
|
|
13
|
+
case "PersistedOperation":
|
|
14
|
+
cacheKey = entrypoint.networkRequestInfo.operation.operationId + JSON.stringify(require_util.stableCopy(variables));
|
|
15
|
+
break;
|
|
16
|
+
}
|
|
17
|
+
const factory = () => {
|
|
18
|
+
const { fieldName, readerArtifactKind, readerWithRefetchQueries } = require_IsographEnvironment.getOrLoadReaderWithRefetchQueries(environment, entrypoint.readerWithRefetchQueries);
|
|
19
|
+
const [networkRequest, disposeNetworkRequest] = require_makeNetworkRequest.maybeMakeNetworkRequest(environment, entrypoint, variables, readerWithRefetchQueries, fetchOptions ?? null);
|
|
20
|
+
return [{
|
|
21
|
+
kind: "FragmentReference",
|
|
22
|
+
readerWithRefetchQueries,
|
|
23
|
+
fieldName,
|
|
24
|
+
readerArtifactKind,
|
|
25
|
+
root: {
|
|
26
|
+
__link: require_IsographEnvironment.ROOT_ID,
|
|
27
|
+
__typename: entrypoint.concreteType
|
|
28
|
+
},
|
|
29
|
+
variables,
|
|
30
|
+
networkRequest
|
|
31
|
+
}, disposeNetworkRequest];
|
|
32
|
+
};
|
|
33
|
+
return require_cache.getOrCreateItemInSuspenseCache(environment, cacheKey, factory);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
//#endregion
|
|
37
|
+
exports.getOrCreateCacheForArtifact = getOrCreateCacheForArtifact;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { stableCopy } from "./util.mjs";
|
|
2
|
+
import { ROOT_ID, getOrLoadReaderWithRefetchQueries } from "./IsographEnvironment.mjs";
|
|
3
|
+
import { maybeMakeNetworkRequest } from "./makeNetworkRequest.mjs";
|
|
4
|
+
import { getOrCreateItemInSuspenseCache } from "./cache.mjs";
|
|
5
|
+
|
|
6
|
+
//#region src/core/getOrCreateCacheForArtifact.ts
|
|
7
|
+
function getOrCreateCacheForArtifact(environment, entrypoint, variables, fetchOptions) {
|
|
8
|
+
let cacheKey = "";
|
|
9
|
+
switch (entrypoint.networkRequestInfo.operation.kind) {
|
|
10
|
+
case "Operation":
|
|
11
|
+
cacheKey = entrypoint.networkRequestInfo.operation.text + JSON.stringify(stableCopy(variables));
|
|
12
|
+
break;
|
|
13
|
+
case "PersistedOperation":
|
|
14
|
+
cacheKey = entrypoint.networkRequestInfo.operation.operationId + JSON.stringify(stableCopy(variables));
|
|
15
|
+
break;
|
|
16
|
+
}
|
|
17
|
+
const factory = () => {
|
|
18
|
+
const { fieldName, readerArtifactKind, readerWithRefetchQueries } = getOrLoadReaderWithRefetchQueries(environment, entrypoint.readerWithRefetchQueries);
|
|
19
|
+
const [networkRequest, disposeNetworkRequest] = maybeMakeNetworkRequest(environment, entrypoint, variables, readerWithRefetchQueries, fetchOptions ?? null);
|
|
20
|
+
return [{
|
|
21
|
+
kind: "FragmentReference",
|
|
22
|
+
readerWithRefetchQueries,
|
|
23
|
+
fieldName,
|
|
24
|
+
readerArtifactKind,
|
|
25
|
+
root: {
|
|
26
|
+
__link: ROOT_ID,
|
|
27
|
+
__typename: entrypoint.concreteType
|
|
28
|
+
},
|
|
29
|
+
variables,
|
|
30
|
+
networkRequest
|
|
31
|
+
}, disposeNetworkRequest];
|
|
32
|
+
};
|
|
33
|
+
return getOrCreateItemInSuspenseCache(environment, cacheKey, factory);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
//#endregion
|
|
37
|
+
export { getOrCreateCacheForArtifact };
|
|
38
|
+
//# sourceMappingURL=getOrCreateCacheForArtifact.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getOrCreateCacheForArtifact.mjs","names":[],"sources":["../../src/core/getOrCreateCacheForArtifact.ts"],"sourcesContent":["import type { ItemCleanupPair } from '@isograph/isograph-disposable-types/dist';\nimport type { ParentCache } from '@isograph/isograph-react-disposable-state/dist';\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"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { CheckResult } from "./check.mjs";
|
|
2
|
+
import { Arguments } from "./util.mjs";
|
|
3
|
+
import { ReadDataResult } from "./read.mjs";
|
|
4
|
+
import { StoreLayer } from "./optimisticProxy.mjs";
|
|
5
|
+
import { IsographEnvironment, StoreLink, StoreRecord } from "./IsographEnvironment.mjs";
|
|
6
|
+
import { FragmentReference, Variables } from "./FragmentReference.mjs";
|
|
7
|
+
import { EncounteredIds, NetworkResponseObject } from "./cache.mjs";
|
|
8
|
+
import { IsographEntrypoint, NormalizationAstNodes, RefetchQueryNormalizationArtifact } from "./entrypoint.mjs";
|
|
9
|
+
import { CleanupFn } from "@isograph/disposable-types";
|
|
10
|
+
|
|
11
|
+
//#region src/core/logging.d.ts
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Note: these types are unstable. We will add and remove items from this enum
|
|
15
|
+
* and add and remove fields. Please do not rely on the specifics here (for now).
|
|
16
|
+
*
|
|
17
|
+
* Goals include:
|
|
18
|
+
* - convenient debugging for Isograph developers
|
|
19
|
+
* - eventual support for the Isograph devtools
|
|
20
|
+
*
|
|
21
|
+
* In some cases (e.g. in `AfterNormalization`), we include large objects and thus
|
|
22
|
+
* prevent them from getting garbage collected (if the log message is printed).
|
|
23
|
+
* Especially in cases like that, we intend to remove those!
|
|
24
|
+
*/
|
|
25
|
+
type LogMessage = {
|
|
26
|
+
kind: 'AboutToNormalize';
|
|
27
|
+
normalizationAst: NormalizationAstNodes;
|
|
28
|
+
networkResponse: NetworkResponseObject;
|
|
29
|
+
variables: Variables;
|
|
30
|
+
} | {
|
|
31
|
+
kind: 'AfterNormalization';
|
|
32
|
+
store: StoreLayer;
|
|
33
|
+
encounteredIds: EncounteredIds;
|
|
34
|
+
} | {
|
|
35
|
+
kind: 'DeepEqualityCheck';
|
|
36
|
+
fragmentReference: FragmentReference<any, any>;
|
|
37
|
+
old: object;
|
|
38
|
+
new: object;
|
|
39
|
+
deeplyEqual: boolean;
|
|
40
|
+
} | {
|
|
41
|
+
kind: 'ComponentRerendered';
|
|
42
|
+
componentName: string;
|
|
43
|
+
rootLink: StoreLink;
|
|
44
|
+
} | {
|
|
45
|
+
kind: 'MakeNetworkRequest';
|
|
46
|
+
artifact: RefetchQueryNormalizationArtifact | IsographEntrypoint<any, any, any, any>;
|
|
47
|
+
variables: Variables;
|
|
48
|
+
networkRequestId: string;
|
|
49
|
+
} | {
|
|
50
|
+
kind: 'ReceivedNetworkResponse';
|
|
51
|
+
networkResponse: any;
|
|
52
|
+
networkRequestId: string;
|
|
53
|
+
} | {
|
|
54
|
+
kind: 'ReceivedNetworkError';
|
|
55
|
+
error: any;
|
|
56
|
+
networkRequestId: string;
|
|
57
|
+
} | {
|
|
58
|
+
kind: 'MissingFieldHandlerCalled';
|
|
59
|
+
root: StoreLink;
|
|
60
|
+
storeRecord: StoreRecord;
|
|
61
|
+
fieldName: string;
|
|
62
|
+
arguments: Arguments | null;
|
|
63
|
+
variables: Variables;
|
|
64
|
+
} | {
|
|
65
|
+
kind: 'DoneReading';
|
|
66
|
+
response: ReadDataResult<any>;
|
|
67
|
+
fieldName: string;
|
|
68
|
+
root: StoreLink;
|
|
69
|
+
} | {
|
|
70
|
+
kind: 'NonEntrypointReceived';
|
|
71
|
+
entrypoint: any;
|
|
72
|
+
} | {
|
|
73
|
+
kind: 'EnvironmentCheck';
|
|
74
|
+
result: CheckResult;
|
|
75
|
+
} | {
|
|
76
|
+
kind: 'EnvironmentCreated';
|
|
77
|
+
} | {
|
|
78
|
+
kind: 'StartUpdateError';
|
|
79
|
+
error: any;
|
|
80
|
+
} | {
|
|
81
|
+
kind: 'StartUpdateComplete';
|
|
82
|
+
updatedIds: EncounteredIds;
|
|
83
|
+
} | {
|
|
84
|
+
kind: 'ErrorEncounteredInWithErrorHandling';
|
|
85
|
+
error: any;
|
|
86
|
+
};
|
|
87
|
+
type LogFunction = (logMessage: LogMessage) => void;
|
|
88
|
+
type WrappedLogFunction = {
|
|
89
|
+
log: LogFunction;
|
|
90
|
+
};
|
|
91
|
+
declare function logMessage(environment: IsographEnvironment, getMessage: () => LogMessage): void;
|
|
92
|
+
declare function registerLogger(environment: IsographEnvironment, log: LogFunction): CleanupFn;
|
|
93
|
+
//#endregion
|
|
94
|
+
export { LogFunction, LogMessage, WrappedLogFunction, logMessage, registerLogger };
|
|
95
|
+
//# sourceMappingURL=logging.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logging.d.mts","names":[],"sources":["../../src/core/logging.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;;;AA8BA;;;;;;;;;;AA6BiB,KA7BL,UAAA,GA6BK;EAgBL,IAAA,EAAA,kBAAA;EACO,gBAAA,EA3CK,qBA2CL;EAEF,eAAA,EA5CM,qBA4CN;EACA,SAAA,EA5CA,SA4CA;CAID,GAAA;EAEJ,IAAA,EAAA,oBAAA;EAQE,KAAA,EAtDD,UAsDC;EAWI,cAAA,EAhEI,cAgEJ;CAAc,GAAA;EAOpB,IAAA,EAAA,mBAAW;EAGX,iBAAA,EAtEa,iBAuElB,CAAA,GAAA,EAAA,GAAW,CAAA;EAGF,GAAA,EAAA,MAAA;EAcA,GAAA,EAAA,MAAA;EACD,WAAA,EAAA,OAAA;CACR,GAAA;EACJ,IAAA,EAAA,qBAAA;EAAS,aAAA,EAAA,MAAA;YAnFI;;;YAKN,oCACA;aACO;;;;;;;;;;;;QAgBL;eACO;;aAEF;aACA;;;YAID;;QAEJ;;;;;;UAQE;;;;;;;;cAWI;;;;;KAON,WAAA,gBAA2B;KAG3B,kBAAA;OACL;;iBAGS,UAAA,cACD,uCACK;iBAYJ,cAAA,cACD,0BACR,cACJ"}
|
package/dist/core/logging.d.ts
CHANGED
|
@@ -1,77 +1,95 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
1
|
+
import { CheckResult } from "./check.js";
|
|
2
|
+
import { Arguments } from "./util.js";
|
|
3
|
+
import { ReadDataResult } from "./read.js";
|
|
4
|
+
import { StoreLayer } from "./optimisticProxy.js";
|
|
5
|
+
import { IsographEnvironment, StoreLink, StoreRecord } from "./IsographEnvironment.js";
|
|
6
|
+
import { FragmentReference, Variables } from "./FragmentReference.js";
|
|
7
|
+
import { EncounteredIds, NetworkResponseObject } from "./cache.js";
|
|
8
|
+
import { IsographEntrypoint, NormalizationAstNodes, RefetchQueryNormalizationArtifact } from "./entrypoint.js";
|
|
9
|
+
import { CleanupFn } from "@isograph/disposable-types";
|
|
10
|
+
|
|
11
|
+
//#region src/core/logging.d.ts
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Note: these types are unstable. We will add and remove items from this enum
|
|
15
|
+
* and add and remove fields. Please do not rely on the specifics here (for now).
|
|
16
|
+
*
|
|
17
|
+
* Goals include:
|
|
18
|
+
* - convenient debugging for Isograph developers
|
|
19
|
+
* - eventual support for the Isograph devtools
|
|
20
|
+
*
|
|
21
|
+
* In some cases (e.g. in `AfterNormalization`), we include large objects and thus
|
|
22
|
+
* prevent them from getting garbage collected (if the log message is printed).
|
|
23
|
+
* Especially in cases like that, we intend to remove those!
|
|
24
|
+
*/
|
|
25
|
+
type LogMessage = {
|
|
26
|
+
kind: 'AboutToNormalize';
|
|
27
|
+
normalizationAst: NormalizationAstNodes;
|
|
28
|
+
networkResponse: NetworkResponseObject;
|
|
29
|
+
variables: Variables;
|
|
14
30
|
} | {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
31
|
+
kind: 'AfterNormalization';
|
|
32
|
+
store: StoreLayer;
|
|
33
|
+
encounteredIds: EncounteredIds;
|
|
18
34
|
} | {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
35
|
+
kind: 'DeepEqualityCheck';
|
|
36
|
+
fragmentReference: FragmentReference<any, any>;
|
|
37
|
+
old: object;
|
|
38
|
+
new: object;
|
|
39
|
+
deeplyEqual: boolean;
|
|
24
40
|
} | {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
41
|
+
kind: 'ComponentRerendered';
|
|
42
|
+
componentName: string;
|
|
43
|
+
rootLink: StoreLink;
|
|
28
44
|
} | {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
45
|
+
kind: 'MakeNetworkRequest';
|
|
46
|
+
artifact: RefetchQueryNormalizationArtifact | IsographEntrypoint<any, any, any, any>;
|
|
47
|
+
variables: Variables;
|
|
48
|
+
networkRequestId: string;
|
|
33
49
|
} | {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
50
|
+
kind: 'ReceivedNetworkResponse';
|
|
51
|
+
networkResponse: any;
|
|
52
|
+
networkRequestId: string;
|
|
37
53
|
} | {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
54
|
+
kind: 'ReceivedNetworkError';
|
|
55
|
+
error: any;
|
|
56
|
+
networkRequestId: string;
|
|
41
57
|
} | {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
58
|
+
kind: 'MissingFieldHandlerCalled';
|
|
59
|
+
root: StoreLink;
|
|
60
|
+
storeRecord: StoreRecord;
|
|
61
|
+
fieldName: string;
|
|
62
|
+
arguments: Arguments | null;
|
|
63
|
+
variables: Variables;
|
|
48
64
|
} | {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
65
|
+
kind: 'DoneReading';
|
|
66
|
+
response: ReadDataResult<any>;
|
|
67
|
+
fieldName: string;
|
|
68
|
+
root: StoreLink;
|
|
53
69
|
} | {
|
|
54
|
-
|
|
55
|
-
|
|
70
|
+
kind: 'NonEntrypointReceived';
|
|
71
|
+
entrypoint: any;
|
|
56
72
|
} | {
|
|
57
|
-
|
|
58
|
-
|
|
73
|
+
kind: 'EnvironmentCheck';
|
|
74
|
+
result: CheckResult;
|
|
59
75
|
} | {
|
|
60
|
-
|
|
76
|
+
kind: 'EnvironmentCreated';
|
|
61
77
|
} | {
|
|
62
|
-
|
|
63
|
-
|
|
78
|
+
kind: 'StartUpdateError';
|
|
79
|
+
error: any;
|
|
64
80
|
} | {
|
|
65
|
-
|
|
66
|
-
|
|
81
|
+
kind: 'StartUpdateComplete';
|
|
82
|
+
updatedIds: EncounteredIds;
|
|
67
83
|
} | {
|
|
68
|
-
|
|
69
|
-
|
|
84
|
+
kind: 'ErrorEncounteredInWithErrorHandling';
|
|
85
|
+
error: any;
|
|
70
86
|
};
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
87
|
+
type LogFunction = (logMessage: LogMessage) => void;
|
|
88
|
+
type WrappedLogFunction = {
|
|
89
|
+
log: LogFunction;
|
|
74
90
|
};
|
|
75
|
-
|
|
76
|
-
|
|
91
|
+
declare function logMessage(environment: IsographEnvironment, getMessage: () => LogMessage): void;
|
|
92
|
+
declare function registerLogger(environment: IsographEnvironment, log: LogFunction): CleanupFn;
|
|
93
|
+
//#endregion
|
|
94
|
+
export { LogFunction, LogMessage, WrappedLogFunction, logMessage, registerLogger };
|
|
77
95
|
//# sourceMappingURL=logging.d.ts.map
|