@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
package/src/core/check.ts
CHANGED
|
@@ -1,28 +1,35 @@
|
|
|
1
1
|
import { getParentRecordKey } from './cache';
|
|
2
|
-
import { NormalizationAstNodes } from './entrypoint';
|
|
3
|
-
import { Variables } from './FragmentReference';
|
|
4
|
-
import {
|
|
5
|
-
getLink,
|
|
2
|
+
import type { NormalizationAstNodes } from './entrypoint';
|
|
3
|
+
import type { Variables } from './FragmentReference';
|
|
4
|
+
import type {
|
|
6
5
|
IsographEnvironment,
|
|
7
6
|
StoreLink,
|
|
8
7
|
StoreRecord,
|
|
9
8
|
} from './IsographEnvironment';
|
|
9
|
+
import { getLink } from './IsographEnvironment';
|
|
10
10
|
import { logMessage } from './logging';
|
|
11
|
+
import { getStoreRecordProxy } from './optimisticProxy';
|
|
11
12
|
|
|
12
13
|
export type ShouldFetch = RequiredShouldFetch | 'IfNecessary';
|
|
13
14
|
export type RequiredShouldFetch = 'Yes' | 'No';
|
|
14
15
|
|
|
15
16
|
export const DEFAULT_SHOULD_FETCH_VALUE: ShouldFetch = 'IfNecessary';
|
|
16
17
|
|
|
17
|
-
|
|
18
|
-
shouldFetch?: ShouldFetch;
|
|
18
|
+
type FetchOptionsShared<TReadOutData> = {
|
|
19
19
|
onComplete?: (data: TReadOutData) => void;
|
|
20
20
|
onError?: () => void;
|
|
21
21
|
};
|
|
22
22
|
|
|
23
|
-
export
|
|
23
|
+
export interface FetchOptions<TReadOutData, TRawResponseType>
|
|
24
|
+
extends FetchOptionsShared<TReadOutData> {
|
|
25
|
+
shouldFetch?: ShouldFetch;
|
|
26
|
+
optimisticNetworkResponse?: TRawResponseType;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export interface RequiredFetchOptions<TReadOutData>
|
|
30
|
+
extends FetchOptionsShared<TReadOutData> {
|
|
24
31
|
shouldFetch: RequiredShouldFetch;
|
|
25
|
-
}
|
|
32
|
+
}
|
|
26
33
|
|
|
27
34
|
export type CheckResult =
|
|
28
35
|
| {
|
|
@@ -39,8 +46,14 @@ export function check(
|
|
|
39
46
|
variables: Variables,
|
|
40
47
|
root: StoreLink,
|
|
41
48
|
): CheckResult {
|
|
42
|
-
const
|
|
43
|
-
|
|
49
|
+
const newStoreRecord = getStoreRecordProxy(environment.store, root);
|
|
50
|
+
|
|
51
|
+
if (newStoreRecord == null) {
|
|
52
|
+
return {
|
|
53
|
+
kind: 'MissingData',
|
|
54
|
+
record: root,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
44
57
|
|
|
45
58
|
const checkResult = checkFromRecord(
|
|
46
59
|
environment,
|
|
@@ -95,27 +108,26 @@ function checkFromRecord(
|
|
|
95
108
|
kind: 'MissingData',
|
|
96
109
|
record: recordLink,
|
|
97
110
|
};
|
|
98
|
-
} else if (linkedValue
|
|
111
|
+
} else if (linkedValue == null) {
|
|
99
112
|
continue;
|
|
100
113
|
} else if (Array.isArray(linkedValue)) {
|
|
101
114
|
arrayItemsLoop: for (const item of linkedValue) {
|
|
102
115
|
const link = getLink(item);
|
|
103
|
-
if (link
|
|
116
|
+
if (link == null) {
|
|
104
117
|
throw new Error(
|
|
105
118
|
'Unexpected non-link in the Isograph store. ' +
|
|
106
119
|
'This is indicative of a bug in Isograph.',
|
|
107
120
|
);
|
|
108
121
|
}
|
|
109
122
|
|
|
110
|
-
const linkedRecord =
|
|
111
|
-
environment.store[link.__typename]?.[link.__link];
|
|
123
|
+
const linkedRecord = getStoreRecordProxy(environment.store, link);
|
|
112
124
|
|
|
113
125
|
if (linkedRecord === undefined) {
|
|
114
126
|
return {
|
|
115
127
|
kind: 'MissingData',
|
|
116
128
|
record: link,
|
|
117
129
|
};
|
|
118
|
-
} else if (linkedRecord
|
|
130
|
+
} else if (linkedRecord == null) {
|
|
119
131
|
continue arrayItemsLoop;
|
|
120
132
|
} else {
|
|
121
133
|
// TODO in __DEV__ assert linkedRecord is an object
|
|
@@ -134,22 +146,21 @@ function checkFromRecord(
|
|
|
134
146
|
}
|
|
135
147
|
} else {
|
|
136
148
|
const link = getLink(linkedValue);
|
|
137
|
-
if (link
|
|
149
|
+
if (link == null) {
|
|
138
150
|
throw new Error(
|
|
139
151
|
'Unexpected non-link in the Isograph store. ' +
|
|
140
152
|
'This is indicative of a bug in Isograph.',
|
|
141
153
|
);
|
|
142
154
|
}
|
|
143
155
|
|
|
144
|
-
const linkedRecord =
|
|
145
|
-
environment.store[link.__typename]?.[link.__link];
|
|
156
|
+
const linkedRecord = getStoreRecordProxy(environment.store, link);
|
|
146
157
|
|
|
147
158
|
if (linkedRecord === undefined) {
|
|
148
159
|
return {
|
|
149
160
|
kind: 'MissingData',
|
|
150
161
|
record: link,
|
|
151
162
|
};
|
|
152
|
-
} else if (linkedRecord
|
|
163
|
+
} else if (linkedRecord == null) {
|
|
153
164
|
continue normalizationAstLoop;
|
|
154
165
|
} else {
|
|
155
166
|
// TODO in __DEV__ assert linkedRecord is an object
|
|
@@ -195,13 +206,6 @@ function checkFromRecord(
|
|
|
195
206
|
|
|
196
207
|
continue normalizationAstLoop;
|
|
197
208
|
}
|
|
198
|
-
default: {
|
|
199
|
-
let _: never = normalizationAstNode;
|
|
200
|
-
_;
|
|
201
|
-
throw new Error(
|
|
202
|
-
'Unexpected case. This is indicative of a bug in Isograph.',
|
|
203
|
-
);
|
|
204
|
-
}
|
|
205
209
|
}
|
|
206
210
|
}
|
|
207
211
|
|
|
@@ -1,17 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
} from './FragmentReference';
|
|
6
|
-
import { IsographEnvironment } from './IsographEnvironment';
|
|
7
|
-
import { logMessage } from './logging';
|
|
8
|
-
import { readPromise } from './PromiseWrapper';
|
|
9
|
-
import { NetworkRequestReaderOptions } from './read';
|
|
1
|
+
import type { FragmentReference } from './FragmentReference';
|
|
2
|
+
import { stableIdForFragmentReference } from './FragmentReference';
|
|
3
|
+
import type { IsographEnvironment } from './IsographEnvironment';
|
|
4
|
+
import type { NetworkRequestReaderOptions } from './read';
|
|
10
5
|
import { createStartUpdate } from './startUpdate';
|
|
11
6
|
|
|
12
7
|
export function getOrCreateCachedComponent(
|
|
13
8
|
environment: IsographEnvironment,
|
|
14
|
-
componentName: string,
|
|
15
9
|
fragmentReference: FragmentReference<any, any>,
|
|
16
10
|
networkRequestOptions: NetworkRequestReaderOptions,
|
|
17
11
|
): React.FC<any> {
|
|
@@ -23,38 +17,11 @@ export function getOrCreateCachedComponent(
|
|
|
23
17
|
);
|
|
24
18
|
|
|
25
19
|
return (environment.componentCache[
|
|
26
|
-
stableIdForFragmentReference(fragmentReference
|
|
27
|
-
] ??= (
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
const data = useReadAndSubscribe(
|
|
34
|
-
fragmentReference,
|
|
35
|
-
networkRequestOptions,
|
|
36
|
-
readerWithRefetchQueries.readerArtifact.readerAst,
|
|
37
|
-
);
|
|
38
|
-
|
|
39
|
-
logMessage(environment, () => ({
|
|
40
|
-
kind: 'ComponentRerendered',
|
|
41
|
-
componentName,
|
|
42
|
-
rootLink: fragmentReference.root,
|
|
43
|
-
}));
|
|
44
|
-
|
|
45
|
-
return readerWithRefetchQueries.readerArtifact.resolver(
|
|
46
|
-
{
|
|
47
|
-
data,
|
|
48
|
-
parameters: fragmentReference.variables,
|
|
49
|
-
startUpdate: readerWithRefetchQueries.readerArtifact.hasUpdatable
|
|
50
|
-
? startUpdate
|
|
51
|
-
: undefined,
|
|
52
|
-
},
|
|
53
|
-
additionalRuntimeProps,
|
|
54
|
-
);
|
|
55
|
-
}
|
|
56
|
-
const idString = `(type: ${fragmentReference.root.__typename}, id: ${fragmentReference.root.__link})`;
|
|
57
|
-
Component.displayName = `${componentName} ${idString} @component`;
|
|
58
|
-
return Component;
|
|
59
|
-
})());
|
|
20
|
+
stableIdForFragmentReference(fragmentReference)
|
|
21
|
+
] ??= environment.componentFunction(
|
|
22
|
+
environment,
|
|
23
|
+
fragmentReference,
|
|
24
|
+
networkRequestOptions,
|
|
25
|
+
startUpdate,
|
|
26
|
+
));
|
|
60
27
|
}
|
package/src/core/entrypoint.ts
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
3
|
-
import {
|
|
4
|
-
|
|
1
|
+
import type { Contravariant, PhantomData } from './brand';
|
|
2
|
+
import type { NetworkResponseObject } from './cache';
|
|
3
|
+
import type {
|
|
4
|
+
FragmentReference,
|
|
5
|
+
UnknownTReadFromStore,
|
|
6
|
+
} from './FragmentReference';
|
|
7
|
+
import type { ComponentOrFieldName, TypeName } from './IsographEnvironment';
|
|
8
|
+
import type { TopLevelReaderArtifact } from './reader';
|
|
9
|
+
import type { Arguments } from './util';
|
|
5
10
|
|
|
6
11
|
export type ReaderWithRefetchQueries<
|
|
7
12
|
TReadFromStore extends UnknownTReadFromStore,
|
|
@@ -22,6 +27,10 @@ export type ReaderWithRefetchQueriesLoader<
|
|
|
22
27
|
TClientFieldValue,
|
|
23
28
|
> = {
|
|
24
29
|
readonly kind: 'ReaderWithRefetchQueriesLoader';
|
|
30
|
+
readonly fieldName: ComponentOrFieldName;
|
|
31
|
+
readonly readerArtifactKind:
|
|
32
|
+
| 'EagerReaderArtifact'
|
|
33
|
+
| 'ComponentReaderArtifact';
|
|
25
34
|
readonly loader: () => Promise<
|
|
26
35
|
ReaderWithRefetchQueries<TReadFromStore, TClientFieldValue>
|
|
27
36
|
>;
|
|
@@ -55,6 +64,7 @@ export type IsographEntrypoint<
|
|
|
55
64
|
TReadFromStore extends UnknownTReadFromStore,
|
|
56
65
|
TClientFieldValue,
|
|
57
66
|
TNormalizationAst extends NormalizationAst | NormalizationAstLoader,
|
|
67
|
+
TRawResponseType extends NetworkResponseObject,
|
|
58
68
|
> = {
|
|
59
69
|
readonly kind: 'Entrypoint';
|
|
60
70
|
readonly networkRequestInfo: NetworkRequestInfo<TNormalizationAst>;
|
|
@@ -62,16 +72,36 @@ export type IsographEntrypoint<
|
|
|
62
72
|
| ReaderWithRefetchQueries<TReadFromStore, TClientFieldValue>
|
|
63
73
|
| ReaderWithRefetchQueriesLoader<TReadFromStore, TClientFieldValue>;
|
|
64
74
|
readonly concreteType: TypeName;
|
|
75
|
+
/**
|
|
76
|
+
* This field exists solely for typechecking, and will not exist at runtime.
|
|
77
|
+
*/
|
|
78
|
+
readonly '~TRawResponseType'?: PhantomData<Contravariant<TRawResponseType>>;
|
|
65
79
|
};
|
|
66
80
|
|
|
81
|
+
export type FragmentReferenceOfEntrypoint<
|
|
82
|
+
TEntrypoint extends IsographEntrypoint<any, any, any, any>,
|
|
83
|
+
> = FragmentReference<
|
|
84
|
+
ExtractReadFromStore<TEntrypoint>,
|
|
85
|
+
ExtractClientFieldValue<TEntrypoint>
|
|
86
|
+
>;
|
|
87
|
+
|
|
67
88
|
export type IsographEntrypointLoader<
|
|
68
89
|
TReadFromStore extends UnknownTReadFromStore,
|
|
69
90
|
TClientFieldValue,
|
|
91
|
+
TRawResponseType extends NetworkResponseObject,
|
|
70
92
|
> = {
|
|
71
93
|
readonly kind: 'EntrypointLoader';
|
|
72
94
|
readonly typeAndField: string;
|
|
95
|
+
readonly readerArtifactKind:
|
|
96
|
+
| 'EagerReaderArtifact'
|
|
97
|
+
| 'ComponentReaderArtifact';
|
|
73
98
|
readonly loader: () => Promise<
|
|
74
|
-
IsographEntrypoint<
|
|
99
|
+
IsographEntrypoint<
|
|
100
|
+
TReadFromStore,
|
|
101
|
+
TClientFieldValue,
|
|
102
|
+
NormalizationAst,
|
|
103
|
+
TRawResponseType
|
|
104
|
+
>
|
|
75
105
|
>;
|
|
76
106
|
};
|
|
77
107
|
|
|
@@ -129,9 +159,15 @@ export function assertIsEntrypoint<
|
|
|
129
159
|
TReadFromStore extends UnknownTReadFromStore,
|
|
130
160
|
TClientFieldValue,
|
|
131
161
|
TNormalizationAst extends NormalizationAst | NormalizationAstLoader,
|
|
162
|
+
TRawResponseType extends NetworkResponseObject,
|
|
132
163
|
>(
|
|
133
164
|
value:
|
|
134
|
-
| IsographEntrypoint<
|
|
165
|
+
| IsographEntrypoint<
|
|
166
|
+
TReadFromStore,
|
|
167
|
+
TClientFieldValue,
|
|
168
|
+
TNormalizationAst,
|
|
169
|
+
TRawResponseType
|
|
170
|
+
>
|
|
135
171
|
| ((_: any) => any)
|
|
136
172
|
// Temporarily, allow any here. Once we automatically provide
|
|
137
173
|
// types to entrypoints, we probably don't need this.
|
|
@@ -139,13 +175,18 @@ export function assertIsEntrypoint<
|
|
|
139
175
|
): asserts value is IsographEntrypoint<
|
|
140
176
|
TReadFromStore,
|
|
141
177
|
TClientFieldValue,
|
|
142
|
-
TNormalizationAst
|
|
178
|
+
TNormalizationAst,
|
|
179
|
+
TRawResponseType
|
|
143
180
|
> {
|
|
144
181
|
if (typeof value === 'function') throw new Error('Not a string');
|
|
145
182
|
}
|
|
146
183
|
|
|
147
184
|
export type ExtractReadFromStore<Type> =
|
|
148
|
-
Type extends IsographEntrypoint<infer X, any, any> ? X : never;
|
|
185
|
+
Type extends IsographEntrypoint<infer X, any, any, any> ? X : never;
|
|
186
|
+
export type ExtractClientFieldValue<Type> =
|
|
187
|
+
Type extends IsographEntrypoint<any, infer X, any, any> ? X : never;
|
|
188
|
+
export type ExtractRawResponseType<Type> =
|
|
189
|
+
Type extends IsographEntrypoint<any, any, any, infer X> ? X : never;
|
|
149
190
|
export type ExtractResolverResult<Type> =
|
|
150
|
-
Type extends IsographEntrypoint<any, infer X, any> ? X : never;
|
|
191
|
+
Type extends IsographEntrypoint<any, infer X, any, any> ? X : never;
|
|
151
192
|
export type ExtractProps<Type> = Type extends React.FC<infer X> ? X : never;
|
|
@@ -1,22 +1,41 @@
|
|
|
1
|
-
import { getParentRecordKey } from './cache';
|
|
2
|
-
import { NormalizationAstNodes } from './entrypoint';
|
|
3
|
-
import { Variables } from './FragmentReference';
|
|
1
|
+
import { getParentRecordKey, TYPENAME_FIELD_NAME } from './cache';
|
|
2
|
+
import type { NormalizationAstNodes, NormalizationAst } from './entrypoint';
|
|
3
|
+
import type { Variables } from './FragmentReference';
|
|
4
4
|
import {
|
|
5
5
|
assertLink,
|
|
6
|
-
DataId,
|
|
7
|
-
IsographEnvironment,
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
type DataId,
|
|
7
|
+
type IsographEnvironment,
|
|
8
|
+
type StoreRecord,
|
|
9
|
+
type StoreLayerData,
|
|
10
10
|
type StoreLink,
|
|
11
11
|
type TypeName,
|
|
12
12
|
} from './IsographEnvironment';
|
|
13
|
+
import type { BaseStoreLayer } from './optimisticProxy';
|
|
14
|
+
import {
|
|
15
|
+
NOT_SET,
|
|
16
|
+
type PromiseWrapper,
|
|
17
|
+
type PromiseWrapperOk,
|
|
18
|
+
} from './PromiseWrapper';
|
|
13
19
|
|
|
14
20
|
export type RetainedQuery = {
|
|
15
|
-
readonly normalizationAst:
|
|
21
|
+
readonly normalizationAst: PromiseWrapper<NormalizationAst>;
|
|
16
22
|
readonly variables: {};
|
|
17
23
|
readonly root: StoreLink;
|
|
18
24
|
};
|
|
19
25
|
|
|
26
|
+
export interface RetainedQueryWithNormalizationAst extends RetainedQuery {
|
|
27
|
+
readonly normalizationAst: PromiseWrapperOk<NormalizationAst>;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function isRetainedQueryWithNormalizationAst(
|
|
31
|
+
query: RetainedQuery,
|
|
32
|
+
): query is RetainedQueryWithNormalizationAst {
|
|
33
|
+
return (
|
|
34
|
+
query.normalizationAst.result !== NOT_SET &&
|
|
35
|
+
query.normalizationAst.result.kind === 'Ok'
|
|
36
|
+
);
|
|
37
|
+
}
|
|
38
|
+
|
|
20
39
|
export type DidUnretainSomeQuery = boolean;
|
|
21
40
|
export function unretainQuery(
|
|
22
41
|
environment: IsographEnvironment,
|
|
@@ -44,23 +63,46 @@ export function retainQuery(
|
|
|
44
63
|
}
|
|
45
64
|
|
|
46
65
|
export function garbageCollectEnvironment(environment: IsographEnvironment) {
|
|
47
|
-
|
|
66
|
+
if (environment.store.kind !== 'BaseStoreLayer') {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
48
69
|
|
|
70
|
+
const retainedQueries: RetainedQueryWithNormalizationAst[] = [];
|
|
49
71
|
for (const query of environment.retainedQueries) {
|
|
50
|
-
|
|
72
|
+
if (!isRetainedQueryWithNormalizationAst(query)) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
retainedQueries.push(query);
|
|
51
76
|
}
|
|
77
|
+
|
|
52
78
|
for (const query of environment.gcBuffer) {
|
|
53
|
-
|
|
79
|
+
if (!isRetainedQueryWithNormalizationAst(query)) {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
retainedQueries.push(query);
|
|
54
83
|
}
|
|
55
84
|
|
|
56
|
-
|
|
57
|
-
|
|
85
|
+
garbageCollectBaseStoreLayer(retainedQueries, environment.store);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export function garbageCollectBaseStoreLayer(
|
|
89
|
+
retainedQueries: RetainedQueryWithNormalizationAst[],
|
|
90
|
+
baseStoreLayer: BaseStoreLayer,
|
|
91
|
+
) {
|
|
92
|
+
const retainedIds: RetainedIds = {};
|
|
93
|
+
|
|
94
|
+
for (const query of retainedQueries) {
|
|
95
|
+
recordReachableIds(baseStoreLayer.data, query, retainedIds);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
for (const typeName in baseStoreLayer.data) {
|
|
99
|
+
const dataById = baseStoreLayer.data[typeName];
|
|
58
100
|
if (dataById == null) continue;
|
|
59
101
|
const retainedTypeIds = retainedIds[typeName];
|
|
60
102
|
|
|
61
103
|
// delete all objects
|
|
62
|
-
if (retainedTypeIds
|
|
63
|
-
delete
|
|
104
|
+
if (retainedTypeIds === undefined || retainedTypeIds.size === 0) {
|
|
105
|
+
delete baseStoreLayer.data[typeName];
|
|
64
106
|
continue;
|
|
65
107
|
}
|
|
66
108
|
|
|
@@ -71,7 +113,7 @@ export function garbageCollectEnvironment(environment: IsographEnvironment) {
|
|
|
71
113
|
}
|
|
72
114
|
|
|
73
115
|
if (Object.keys(dataById).length === 0) {
|
|
74
|
-
delete
|
|
116
|
+
delete baseStoreLayer.data[typeName];
|
|
75
117
|
}
|
|
76
118
|
}
|
|
77
119
|
}
|
|
@@ -81,31 +123,31 @@ interface RetainedIds {
|
|
|
81
123
|
}
|
|
82
124
|
|
|
83
125
|
function recordReachableIds(
|
|
84
|
-
|
|
85
|
-
retainedQuery:
|
|
126
|
+
dataLayer: StoreLayerData,
|
|
127
|
+
retainedQuery: RetainedQueryWithNormalizationAst,
|
|
86
128
|
mutableRetainedIds: RetainedIds,
|
|
87
129
|
) {
|
|
88
130
|
const record =
|
|
89
|
-
|
|
131
|
+
dataLayer[retainedQuery.root.__typename]?.[retainedQuery.root.__link];
|
|
90
132
|
|
|
91
133
|
const retainedRecordsIds = (mutableRetainedIds[
|
|
92
134
|
retainedQuery.root.__typename
|
|
93
135
|
] ??= new Set());
|
|
94
136
|
retainedRecordsIds.add(retainedQuery.root.__link);
|
|
95
137
|
|
|
96
|
-
if (record) {
|
|
138
|
+
if (record != null) {
|
|
97
139
|
recordReachableIdsFromRecord(
|
|
98
|
-
|
|
140
|
+
dataLayer,
|
|
99
141
|
record,
|
|
100
142
|
mutableRetainedIds,
|
|
101
|
-
retainedQuery.normalizationAst,
|
|
143
|
+
retainedQuery.normalizationAst.result.value.selections,
|
|
102
144
|
retainedQuery.variables,
|
|
103
145
|
);
|
|
104
146
|
}
|
|
105
147
|
}
|
|
106
148
|
|
|
107
149
|
function recordReachableIdsFromRecord(
|
|
108
|
-
|
|
150
|
+
dataLayer: StoreLayerData,
|
|
109
151
|
currentRecord: StoreRecord,
|
|
110
152
|
mutableRetainedIds: RetainedIds,
|
|
111
153
|
selections: NormalizationAstNodes,
|
|
@@ -113,6 +155,17 @@ function recordReachableIdsFromRecord(
|
|
|
113
155
|
) {
|
|
114
156
|
for (const selection of selections) {
|
|
115
157
|
switch (selection.kind) {
|
|
158
|
+
case 'InlineFragment':
|
|
159
|
+
if (currentRecord[TYPENAME_FIELD_NAME] === selection.type) {
|
|
160
|
+
recordReachableIdsFromRecord(
|
|
161
|
+
dataLayer,
|
|
162
|
+
currentRecord,
|
|
163
|
+
mutableRetainedIds,
|
|
164
|
+
selection.selections,
|
|
165
|
+
variables,
|
|
166
|
+
);
|
|
167
|
+
}
|
|
168
|
+
continue;
|
|
116
169
|
case 'Linked':
|
|
117
170
|
const linkKey = getParentRecordKey(selection, variables ?? {});
|
|
118
171
|
const linkedFieldOrFields = currentRecord[linkKey];
|
|
@@ -133,18 +186,18 @@ function recordReachableIdsFromRecord(
|
|
|
133
186
|
}
|
|
134
187
|
|
|
135
188
|
let typeStore =
|
|
136
|
-
selection.concreteType
|
|
137
|
-
?
|
|
189
|
+
selection.concreteType != null
|
|
190
|
+
? dataLayer[selection.concreteType]
|
|
138
191
|
: null;
|
|
139
192
|
|
|
140
|
-
if (typeStore == null && selection.concreteType
|
|
193
|
+
if (typeStore == null && selection.concreteType != null) {
|
|
141
194
|
continue;
|
|
142
195
|
}
|
|
143
196
|
|
|
144
197
|
for (const nextRecordLink of links) {
|
|
145
198
|
let __typename = nextRecordLink.__typename;
|
|
146
199
|
|
|
147
|
-
const resolvedTypeStore = typeStore ??
|
|
200
|
+
const resolvedTypeStore = typeStore ?? dataLayer[__typename];
|
|
148
201
|
|
|
149
202
|
if (resolvedTypeStore == null) {
|
|
150
203
|
continue;
|
|
@@ -156,7 +209,7 @@ function recordReachableIdsFromRecord(
|
|
|
156
209
|
new Set());
|
|
157
210
|
retainedRecordsIds.add(nextRecordLink.__link);
|
|
158
211
|
recordReachableIdsFromRecord(
|
|
159
|
-
|
|
212
|
+
dataLayer,
|
|
160
213
|
nextRecord,
|
|
161
214
|
mutableRetainedIds,
|
|
162
215
|
selection.selections,
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import type { ItemCleanupPair } from '@isograph/isograph-disposable-types/dist';
|
|
2
|
+
import type { ParentCache } from '@isograph/isograph-react-disposable-state/dist';
|
|
3
|
+
import {
|
|
4
|
+
type NetworkResponseObject,
|
|
5
|
+
getOrCreateItemInSuspenseCache,
|
|
6
|
+
} from './cache';
|
|
7
|
+
import type { FetchOptions } from './check';
|
|
8
|
+
import type {
|
|
9
|
+
IsographEntrypoint,
|
|
10
|
+
NormalizationAst,
|
|
11
|
+
NormalizationAstLoader,
|
|
12
|
+
} from './entrypoint';
|
|
13
|
+
import type {
|
|
14
|
+
ExtractParameters,
|
|
15
|
+
FragmentReference,
|
|
16
|
+
UnknownTReadFromStore,
|
|
17
|
+
} from './FragmentReference';
|
|
18
|
+
import {
|
|
19
|
+
type IsographEnvironment,
|
|
20
|
+
getOrLoadReaderWithRefetchQueries,
|
|
21
|
+
ROOT_ID,
|
|
22
|
+
} from './IsographEnvironment';
|
|
23
|
+
import { maybeMakeNetworkRequest } from './makeNetworkRequest';
|
|
24
|
+
import { stableCopy } from './util';
|
|
25
|
+
|
|
26
|
+
export function getOrCreateCacheForArtifact<
|
|
27
|
+
TReadFromStore extends UnknownTReadFromStore,
|
|
28
|
+
TClientFieldValue,
|
|
29
|
+
TNormalizationAst extends NormalizationAst | NormalizationAstLoader,
|
|
30
|
+
TRawResponseType extends NetworkResponseObject,
|
|
31
|
+
>(
|
|
32
|
+
environment: IsographEnvironment,
|
|
33
|
+
entrypoint: IsographEntrypoint<
|
|
34
|
+
TReadFromStore,
|
|
35
|
+
TClientFieldValue,
|
|
36
|
+
TNormalizationAst,
|
|
37
|
+
TRawResponseType
|
|
38
|
+
>,
|
|
39
|
+
variables: ExtractParameters<TReadFromStore>,
|
|
40
|
+
fetchOptions?: FetchOptions<TClientFieldValue, TRawResponseType>,
|
|
41
|
+
): ParentCache<FragmentReference<TReadFromStore, TClientFieldValue>> {
|
|
42
|
+
let cacheKey = '';
|
|
43
|
+
switch (entrypoint.networkRequestInfo.operation.kind) {
|
|
44
|
+
case 'Operation':
|
|
45
|
+
cacheKey =
|
|
46
|
+
entrypoint.networkRequestInfo.operation.text +
|
|
47
|
+
JSON.stringify(stableCopy(variables));
|
|
48
|
+
break;
|
|
49
|
+
case 'PersistedOperation':
|
|
50
|
+
cacheKey =
|
|
51
|
+
entrypoint.networkRequestInfo.operation.operationId +
|
|
52
|
+
JSON.stringify(stableCopy(variables));
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
const factory = () => {
|
|
56
|
+
const { fieldName, readerArtifactKind, readerWithRefetchQueries } =
|
|
57
|
+
getOrLoadReaderWithRefetchQueries(
|
|
58
|
+
environment,
|
|
59
|
+
entrypoint.readerWithRefetchQueries,
|
|
60
|
+
);
|
|
61
|
+
const [networkRequest, disposeNetworkRequest] = maybeMakeNetworkRequest(
|
|
62
|
+
environment,
|
|
63
|
+
entrypoint,
|
|
64
|
+
variables,
|
|
65
|
+
readerWithRefetchQueries,
|
|
66
|
+
fetchOptions ?? null,
|
|
67
|
+
);
|
|
68
|
+
|
|
69
|
+
const itemCleanupPair: ItemCleanupPair<
|
|
70
|
+
FragmentReference<TReadFromStore, TClientFieldValue>
|
|
71
|
+
> = [
|
|
72
|
+
{
|
|
73
|
+
kind: 'FragmentReference',
|
|
74
|
+
readerWithRefetchQueries,
|
|
75
|
+
fieldName,
|
|
76
|
+
readerArtifactKind,
|
|
77
|
+
root: { __link: ROOT_ID, __typename: entrypoint.concreteType },
|
|
78
|
+
variables,
|
|
79
|
+
networkRequest: networkRequest,
|
|
80
|
+
},
|
|
81
|
+
disposeNetworkRequest,
|
|
82
|
+
];
|
|
83
|
+
return itemCleanupPair;
|
|
84
|
+
};
|
|
85
|
+
return getOrCreateItemInSuspenseCache(environment, cacheKey, factory);
|
|
86
|
+
}
|
package/src/core/logging.ts
CHANGED
|
@@ -1,21 +1,33 @@
|
|
|
1
|
-
import { CleanupFn } from '@isograph/disposable-types';
|
|
2
|
-
import { NetworkResponseObject,
|
|
3
|
-
import { CheckResult } from './check';
|
|
4
|
-
import {
|
|
1
|
+
import type { CleanupFn } from '@isograph/disposable-types';
|
|
2
|
+
import type { NetworkResponseObject, EncounteredIds } from './cache';
|
|
3
|
+
import type { CheckResult } from './check';
|
|
4
|
+
import type {
|
|
5
5
|
IsographEntrypoint,
|
|
6
6
|
RefetchQueryNormalizationArtifact,
|
|
7
|
-
|
|
7
|
+
NormalizationAstNodes,
|
|
8
8
|
} from './entrypoint';
|
|
9
|
-
import { FragmentReference, Variables } from './FragmentReference';
|
|
10
|
-
import {
|
|
9
|
+
import type { FragmentReference, Variables } from './FragmentReference';
|
|
10
|
+
import type {
|
|
11
11
|
IsographEnvironment,
|
|
12
|
-
IsographStore,
|
|
13
12
|
StoreRecord,
|
|
14
|
-
|
|
13
|
+
StoreLink,
|
|
15
14
|
} from './IsographEnvironment';
|
|
16
|
-
import { ReadDataResult } from './read';
|
|
17
|
-
import { Arguments } from './util';
|
|
15
|
+
import type { ReadDataResult } from './read';
|
|
16
|
+
import type { Arguments } from './util';
|
|
17
|
+
import type { StoreLayer } from './optimisticProxy';
|
|
18
18
|
|
|
19
|
+
/**
|
|
20
|
+
* Note: these types are unstable. We will add and remove items from this enum
|
|
21
|
+
* and add and remove fields. Please do not rely on the specifics here (for now).
|
|
22
|
+
*
|
|
23
|
+
* Goals include:
|
|
24
|
+
* - convenient debugging for Isograph developers
|
|
25
|
+
* - eventual support for the Isograph devtools
|
|
26
|
+
*
|
|
27
|
+
* In some cases (e.g. in `AfterNormalization`), we include large objects and thus
|
|
28
|
+
* prevent them from getting garbage collected (if the log message is printed).
|
|
29
|
+
* Especially in cases like that, we intend to remove those!
|
|
30
|
+
*/
|
|
19
31
|
export type LogMessage =
|
|
20
32
|
| {
|
|
21
33
|
kind: 'AboutToNormalize';
|
|
@@ -25,7 +37,7 @@ export type LogMessage =
|
|
|
25
37
|
}
|
|
26
38
|
| {
|
|
27
39
|
kind: 'AfterNormalization';
|
|
28
|
-
store:
|
|
40
|
+
store: StoreLayer;
|
|
29
41
|
encounteredIds: EncounteredIds;
|
|
30
42
|
}
|
|
31
43
|
| {
|
|
@@ -44,7 +56,7 @@ export type LogMessage =
|
|
|
44
56
|
kind: 'MakeNetworkRequest';
|
|
45
57
|
artifact:
|
|
46
58
|
| RefetchQueryNormalizationArtifact
|
|
47
|
-
| IsographEntrypoint<any, any, any>;
|
|
59
|
+
| IsographEntrypoint<any, any, any, any>;
|
|
48
60
|
variables: Variables;
|
|
49
61
|
networkRequestId: string;
|
|
50
62
|
}
|