@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,53 +1,68 @@
|
|
|
1
|
-
import { ItemCleanupPair } from '@isograph/disposable-types';
|
|
2
|
-
import { normalizeData } from './cache';
|
|
3
|
-
import { check, DEFAULT_SHOULD_FETCH_VALUE, FetchOptions } from './check';
|
|
4
|
-
import { getOrCreateCachedComponent } from './componentCache';
|
|
1
|
+
import type { ItemCleanupPair } from '@isograph/disposable-types';
|
|
5
2
|
import {
|
|
3
|
+
normalizeData,
|
|
4
|
+
type EncounteredIds,
|
|
5
|
+
type NetworkResponseObject,
|
|
6
|
+
} from './cache';
|
|
7
|
+
import type { FetchOptions } from './check';
|
|
8
|
+
import { check, DEFAULT_SHOULD_FETCH_VALUE } from './check';
|
|
9
|
+
import { getOrCreateCachedComponent } from './componentCache';
|
|
10
|
+
import type {
|
|
6
11
|
IsographEntrypoint,
|
|
12
|
+
NormalizationAst,
|
|
13
|
+
NormalizationAstLoader,
|
|
7
14
|
ReaderWithRefetchQueries,
|
|
8
15
|
RefetchQueryNormalizationArtifact,
|
|
9
|
-
type NormalizationAst,
|
|
10
|
-
type NormalizationAstLoader,
|
|
11
16
|
} from './entrypoint';
|
|
12
|
-
import {
|
|
17
|
+
import type {
|
|
13
18
|
ExtractParameters,
|
|
14
|
-
|
|
15
|
-
|
|
19
|
+
FragmentReference,
|
|
20
|
+
UnknownTReadFromStore,
|
|
16
21
|
} from './FragmentReference';
|
|
22
|
+
import type { RetainedQuery } from './garbageCollection';
|
|
17
23
|
import {
|
|
18
24
|
garbageCollectEnvironment,
|
|
19
|
-
RetainedQuery,
|
|
20
25
|
retainQuery,
|
|
21
26
|
unretainQuery,
|
|
22
27
|
} from './garbageCollection';
|
|
23
|
-
import { IsographEnvironment,
|
|
28
|
+
import type { IsographEnvironment, StoreLink } from './IsographEnvironment';
|
|
29
|
+
import { ROOT_ID } from './IsographEnvironment';
|
|
24
30
|
import { logMessage } from './logging';
|
|
25
31
|
import {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
32
|
+
addNetworkResponseStoreLayer,
|
|
33
|
+
addOptimisticNetworkResponseStoreLayer,
|
|
34
|
+
revertOptimisticStoreLayerAndMaybeReplace,
|
|
35
|
+
type OptimisticStoreLayer,
|
|
36
|
+
type StoreLayerWithData,
|
|
37
|
+
} from './optimisticProxy';
|
|
38
|
+
import type { AnyError, PromiseWrapper } from './PromiseWrapper';
|
|
39
|
+
import { wrapPromise, wrapResolvedValue } from './PromiseWrapper';
|
|
31
40
|
import { readButDoNotEvaluate } from './read';
|
|
32
41
|
import { getOrCreateCachedStartUpdate } from './startUpdate';
|
|
42
|
+
import { callSubscriptions } from './subscribe';
|
|
33
43
|
|
|
34
44
|
let networkRequestId = 0;
|
|
35
45
|
|
|
36
46
|
export function maybeMakeNetworkRequest<
|
|
37
47
|
TReadFromStore extends UnknownTReadFromStore,
|
|
38
48
|
TClientFieldValue,
|
|
39
|
-
TArtifact extends
|
|
40
|
-
| RefetchQueryNormalizationArtifact
|
|
41
|
-
| IsographEntrypoint<TReadFromStore, TClientFieldValue, TNormalizationAst>,
|
|
42
49
|
TNormalizationAst extends NormalizationAst | NormalizationAstLoader,
|
|
50
|
+
TRawResponseType extends NetworkResponseObject,
|
|
43
51
|
>(
|
|
44
52
|
environment: IsographEnvironment,
|
|
45
|
-
artifact:
|
|
53
|
+
artifact:
|
|
54
|
+
| RefetchQueryNormalizationArtifact
|
|
55
|
+
| IsographEntrypoint<
|
|
56
|
+
TReadFromStore,
|
|
57
|
+
TClientFieldValue,
|
|
58
|
+
TNormalizationAst,
|
|
59
|
+
TRawResponseType
|
|
60
|
+
>,
|
|
46
61
|
variables: ExtractParameters<TReadFromStore>,
|
|
47
62
|
readerWithRefetchQueries: PromiseWrapper<
|
|
48
63
|
ReaderWithRefetchQueries<TReadFromStore, TClientFieldValue>
|
|
49
64
|
> | null,
|
|
50
|
-
fetchOptions: FetchOptions<TClientFieldValue> | null,
|
|
65
|
+
fetchOptions: FetchOptions<TClientFieldValue, TRawResponseType> | null,
|
|
51
66
|
): ItemCleanupPair<PromiseWrapper<void, AnyError>> {
|
|
52
67
|
switch (fetchOptions?.shouldFetch ?? DEFAULT_SHOULD_FETCH_VALUE) {
|
|
53
68
|
case 'Yes': {
|
|
@@ -60,7 +75,11 @@ export function maybeMakeNetworkRequest<
|
|
|
60
75
|
);
|
|
61
76
|
}
|
|
62
77
|
case 'No': {
|
|
63
|
-
return
|
|
78
|
+
return retainQueryWithoutMakingNetworkRequest(
|
|
79
|
+
environment,
|
|
80
|
+
artifact,
|
|
81
|
+
variables,
|
|
82
|
+
);
|
|
64
83
|
}
|
|
65
84
|
case 'IfNecessary': {
|
|
66
85
|
if (
|
|
@@ -68,7 +87,8 @@ export function maybeMakeNetworkRequest<
|
|
|
68
87
|
'NormalizationAstLoader'
|
|
69
88
|
) {
|
|
70
89
|
throw new Error(
|
|
71
|
-
'Using lazy loaded normalizationAst with shouldFetch: "IfNecessary" is
|
|
90
|
+
'Using lazy loaded normalizationAst with shouldFetch: "IfNecessary" is ' +
|
|
91
|
+
'not supported as it will lead to a network waterfall.',
|
|
72
92
|
);
|
|
73
93
|
}
|
|
74
94
|
const result = check(
|
|
@@ -82,7 +102,11 @@ export function maybeMakeNetworkRequest<
|
|
|
82
102
|
);
|
|
83
103
|
|
|
84
104
|
if (result.kind === 'EnoughData') {
|
|
85
|
-
return
|
|
105
|
+
return retainQueryWithoutMakingNetworkRequest(
|
|
106
|
+
environment,
|
|
107
|
+
artifact,
|
|
108
|
+
variables,
|
|
109
|
+
);
|
|
86
110
|
} else {
|
|
87
111
|
return makeNetworkRequest(
|
|
88
112
|
environment,
|
|
@@ -96,38 +120,83 @@ export function maybeMakeNetworkRequest<
|
|
|
96
120
|
}
|
|
97
121
|
}
|
|
98
122
|
|
|
99
|
-
function
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
123
|
+
export function retainQueryWithoutMakingNetworkRequest<
|
|
124
|
+
TReadFromStore extends UnknownTReadFromStore,
|
|
125
|
+
TClientFieldValue,
|
|
126
|
+
TRawResponseType extends NetworkResponseObject,
|
|
127
|
+
>(
|
|
128
|
+
environment: IsographEnvironment,
|
|
129
|
+
artifact:
|
|
130
|
+
| RefetchQueryNormalizationArtifact
|
|
131
|
+
| IsographEntrypoint<
|
|
132
|
+
TReadFromStore,
|
|
133
|
+
TClientFieldValue,
|
|
134
|
+
NormalizationAst | NormalizationAstLoader,
|
|
135
|
+
TRawResponseType
|
|
136
|
+
>,
|
|
137
|
+
variables: ExtractParameters<TReadFromStore>,
|
|
138
|
+
): ItemCleanupPair<PromiseWrapper<void, AnyError>> {
|
|
139
|
+
let status:
|
|
140
|
+
| NetworkRequestStatusUndisposedComplete
|
|
141
|
+
| NetworkRequestStatusDisposed = {
|
|
142
|
+
kind: 'UndisposedComplete',
|
|
143
|
+
retainedQuery: fetchNormalizationAstAndRetainArtifact(
|
|
144
|
+
environment,
|
|
145
|
+
artifact,
|
|
146
|
+
variables,
|
|
147
|
+
),
|
|
148
|
+
};
|
|
149
|
+
return [
|
|
150
|
+
wrapResolvedValue(undefined),
|
|
151
|
+
() => {
|
|
152
|
+
if (status.kind !== 'Disposed') {
|
|
153
|
+
status = unretainAndGarbageCollect(environment, status);
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
];
|
|
110
157
|
}
|
|
111
158
|
|
|
112
159
|
export function makeNetworkRequest<
|
|
113
160
|
TReadFromStore extends UnknownTReadFromStore,
|
|
114
161
|
TClientFieldValue,
|
|
115
|
-
TArtifact extends
|
|
116
|
-
| RefetchQueryNormalizationArtifact
|
|
117
|
-
| IsographEntrypoint<TReadFromStore, TClientFieldValue, TNormalizationAst>,
|
|
118
162
|
TNormalizationAst extends NormalizationAst | NormalizationAstLoader,
|
|
163
|
+
TRawResponseType extends NetworkResponseObject,
|
|
119
164
|
>(
|
|
120
165
|
environment: IsographEnvironment,
|
|
121
|
-
artifact:
|
|
166
|
+
artifact:
|
|
167
|
+
| RefetchQueryNormalizationArtifact
|
|
168
|
+
| IsographEntrypoint<
|
|
169
|
+
TReadFromStore,
|
|
170
|
+
TClientFieldValue,
|
|
171
|
+
TNormalizationAst,
|
|
172
|
+
TRawResponseType
|
|
173
|
+
>,
|
|
122
174
|
variables: ExtractParameters<TReadFromStore>,
|
|
123
175
|
readerWithRefetchQueries: PromiseWrapper<
|
|
124
176
|
ReaderWithRefetchQueries<TReadFromStore, TClientFieldValue>
|
|
125
177
|
> | null,
|
|
126
|
-
fetchOptions: FetchOptions<TClientFieldValue> | null,
|
|
178
|
+
fetchOptions: FetchOptions<TClientFieldValue, TRawResponseType> | null,
|
|
127
179
|
): ItemCleanupPair<PromiseWrapper<void, AnyError>> {
|
|
128
180
|
// TODO this should be a DataId and stored in the store
|
|
129
181
|
const myNetworkRequestId = networkRequestId + '';
|
|
130
182
|
networkRequestId++;
|
|
183
|
+
let status: NetworkRequestStatus = {
|
|
184
|
+
kind: 'UndisposedIncomplete',
|
|
185
|
+
retainedQuery: fetchNormalizationAstAndRetainArtifact(
|
|
186
|
+
environment,
|
|
187
|
+
artifact,
|
|
188
|
+
variables,
|
|
189
|
+
),
|
|
190
|
+
optimistic:
|
|
191
|
+
fetchOptions?.optimisticNetworkResponse != null
|
|
192
|
+
? makeOptimisticUpdate(
|
|
193
|
+
environment,
|
|
194
|
+
artifact,
|
|
195
|
+
variables,
|
|
196
|
+
fetchOptions?.optimisticNetworkResponse,
|
|
197
|
+
)
|
|
198
|
+
: null,
|
|
199
|
+
};
|
|
131
200
|
|
|
132
201
|
logMessage(environment, () => ({
|
|
133
202
|
kind: 'MakeNetworkRequest',
|
|
@@ -136,16 +205,13 @@ export function makeNetworkRequest<
|
|
|
136
205
|
networkRequestId: myNetworkRequestId,
|
|
137
206
|
}));
|
|
138
207
|
|
|
139
|
-
let status: NetworkRequestStatus = {
|
|
140
|
-
kind: 'UndisposedIncomplete',
|
|
141
|
-
};
|
|
142
208
|
// This should be an observable, not a promise
|
|
143
209
|
const promise = Promise.all([
|
|
144
210
|
environment.networkFunction(
|
|
145
211
|
artifact.networkRequestInfo.operation,
|
|
146
212
|
variables,
|
|
147
213
|
),
|
|
148
|
-
|
|
214
|
+
status.retainedQuery.normalizationAst.promise,
|
|
149
215
|
readerWithRefetchQueries?.promise,
|
|
150
216
|
])
|
|
151
217
|
.then(([networkResponse, normalizationAst, readerWithRefetchQueries]) => {
|
|
@@ -159,30 +225,56 @@ export function makeNetworkRequest<
|
|
|
159
225
|
try {
|
|
160
226
|
fetchOptions?.onError?.();
|
|
161
227
|
} catch {}
|
|
162
|
-
throw new Error('
|
|
228
|
+
throw new Error('Network response had errors', {
|
|
163
229
|
cause: networkResponse,
|
|
164
230
|
});
|
|
165
231
|
}
|
|
166
232
|
|
|
167
233
|
const root = { __link: ROOT_ID, __typename: artifact.concreteType };
|
|
234
|
+
|
|
168
235
|
if (status.kind === 'UndisposedIncomplete') {
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
236
|
+
if (status.optimistic != null) {
|
|
237
|
+
status =
|
|
238
|
+
revertOptimisticStoreLayerAndMaybeReplaceIfUndisposedIncomplete(
|
|
239
|
+
environment,
|
|
240
|
+
status,
|
|
241
|
+
(storeLayer) =>
|
|
242
|
+
normalizeData(
|
|
243
|
+
environment,
|
|
244
|
+
storeLayer,
|
|
245
|
+
normalizationAst.selections,
|
|
246
|
+
networkResponse.data ?? {},
|
|
247
|
+
variables,
|
|
248
|
+
root,
|
|
249
|
+
new Map(),
|
|
250
|
+
),
|
|
251
|
+
);
|
|
252
|
+
} else {
|
|
253
|
+
const encounteredIds: EncounteredIds = new Map();
|
|
254
|
+
environment.store = addNetworkResponseStoreLayer(environment.store);
|
|
255
|
+
normalizeData(
|
|
256
|
+
environment,
|
|
257
|
+
environment.store,
|
|
258
|
+
normalizationAst.selections,
|
|
259
|
+
networkResponse.data ?? {},
|
|
260
|
+
variables,
|
|
261
|
+
root,
|
|
262
|
+
encounteredIds,
|
|
263
|
+
);
|
|
264
|
+
|
|
265
|
+
logMessage(environment, () => ({
|
|
266
|
+
kind: 'AfterNormalization',
|
|
267
|
+
store: environment.store,
|
|
268
|
+
encounteredIds: encounteredIds,
|
|
269
|
+
}));
|
|
270
|
+
|
|
271
|
+
callSubscriptions(environment, encounteredIds);
|
|
272
|
+
|
|
273
|
+
status = {
|
|
274
|
+
kind: 'UndisposedComplete',
|
|
275
|
+
retainedQuery: status.retainedQuery,
|
|
276
|
+
};
|
|
277
|
+
}
|
|
186
278
|
}
|
|
187
279
|
|
|
188
280
|
const onComplete = fetchOptions?.onComplete;
|
|
@@ -213,6 +305,16 @@ export function makeNetworkRequest<
|
|
|
213
305
|
try {
|
|
214
306
|
fetchOptions?.onError?.();
|
|
215
307
|
} catch {}
|
|
308
|
+
|
|
309
|
+
if (status.kind === 'UndisposedIncomplete') {
|
|
310
|
+
status =
|
|
311
|
+
revertOptimisticStoreLayerAndMaybeReplaceIfUndisposedIncomplete(
|
|
312
|
+
environment,
|
|
313
|
+
status,
|
|
314
|
+
null,
|
|
315
|
+
);
|
|
316
|
+
}
|
|
317
|
+
|
|
216
318
|
throw e;
|
|
217
319
|
});
|
|
218
320
|
|
|
@@ -221,44 +323,56 @@ export function makeNetworkRequest<
|
|
|
221
323
|
const response: ItemCleanupPair<PromiseWrapper<void, AnyError>> = [
|
|
222
324
|
wrapper,
|
|
223
325
|
() => {
|
|
224
|
-
if (status.kind === '
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
326
|
+
if (status.kind === 'UndisposedIncomplete') {
|
|
327
|
+
status =
|
|
328
|
+
revertOptimisticStoreLayerAndMaybeReplaceIfUndisposedIncomplete(
|
|
329
|
+
environment,
|
|
330
|
+
status,
|
|
331
|
+
null,
|
|
332
|
+
);
|
|
333
|
+
}
|
|
334
|
+
if (status.kind !== 'Disposed') {
|
|
335
|
+
status = unretainAndGarbageCollect(environment, status);
|
|
232
336
|
}
|
|
233
|
-
status = {
|
|
234
|
-
kind: 'Disposed',
|
|
235
|
-
};
|
|
236
337
|
},
|
|
237
338
|
];
|
|
238
339
|
return response;
|
|
239
340
|
}
|
|
240
341
|
|
|
342
|
+
type NetworkRequestStatusUndisposedIncomplete = {
|
|
343
|
+
readonly kind: 'UndisposedIncomplete';
|
|
344
|
+
readonly retainedQuery: RetainedQuery;
|
|
345
|
+
readonly optimistic: OptimisticStoreLayer | null;
|
|
346
|
+
};
|
|
347
|
+
|
|
348
|
+
type NetworkRequestStatusUndisposedComplete = {
|
|
349
|
+
readonly kind: 'UndisposedComplete';
|
|
350
|
+
readonly retainedQuery: RetainedQuery;
|
|
351
|
+
};
|
|
352
|
+
|
|
353
|
+
type NetworkRequestStatusDisposed = {
|
|
354
|
+
readonly kind: 'Disposed';
|
|
355
|
+
};
|
|
356
|
+
|
|
241
357
|
type NetworkRequestStatus =
|
|
242
|
-
|
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
| {
|
|
246
|
-
readonly kind: 'Disposed';
|
|
247
|
-
}
|
|
248
|
-
| {
|
|
249
|
-
readonly kind: 'UndisposedComplete';
|
|
250
|
-
readonly retainedQuery: RetainedQuery;
|
|
251
|
-
};
|
|
358
|
+
| NetworkRequestStatusUndisposedIncomplete
|
|
359
|
+
| NetworkRequestStatusUndisposedComplete
|
|
360
|
+
| NetworkRequestStatusDisposed;
|
|
252
361
|
|
|
253
362
|
function readDataForOnComplete<
|
|
254
363
|
TReadFromStore extends UnknownTReadFromStore,
|
|
255
364
|
TClientFieldValue,
|
|
256
|
-
TArtifact extends
|
|
257
|
-
| RefetchQueryNormalizationArtifact
|
|
258
|
-
| IsographEntrypoint<TReadFromStore, TClientFieldValue, TNormalizationAst>,
|
|
259
365
|
TNormalizationAst extends NormalizationAst | NormalizationAstLoader,
|
|
366
|
+
TRawResponseType extends NetworkResponseObject,
|
|
260
367
|
>(
|
|
261
|
-
artifact:
|
|
368
|
+
artifact:
|
|
369
|
+
| RefetchQueryNormalizationArtifact
|
|
370
|
+
| IsographEntrypoint<
|
|
371
|
+
TReadFromStore,
|
|
372
|
+
TClientFieldValue,
|
|
373
|
+
TNormalizationAst,
|
|
374
|
+
TRawResponseType
|
|
375
|
+
>,
|
|
262
376
|
environment: IsographEnvironment,
|
|
263
377
|
root: StoreLink,
|
|
264
378
|
variables: ExtractParameters<TReadFromStore>,
|
|
@@ -293,6 +407,8 @@ function readDataForOnComplete<
|
|
|
293
407
|
readerWithRefetchQueries: wrapResolvedValue(
|
|
294
408
|
resolvedReaderWithRefetchQueries,
|
|
295
409
|
),
|
|
410
|
+
fieldName: resolvedReaderWithRefetchQueries.readerArtifact.fieldName,
|
|
411
|
+
readerArtifactKind: resolvedReaderWithRefetchQueries.readerArtifact.kind,
|
|
296
412
|
root,
|
|
297
413
|
variables,
|
|
298
414
|
networkRequest: fakeNetworkRequest,
|
|
@@ -310,7 +426,6 @@ function readDataForOnComplete<
|
|
|
310
426
|
// TClientFieldValue which is a React.FC<...>
|
|
311
427
|
return getOrCreateCachedComponent(
|
|
312
428
|
environment,
|
|
313
|
-
readerArtifact.fieldName,
|
|
314
429
|
{
|
|
315
430
|
kind: 'FragmentReference',
|
|
316
431
|
readerWithRefetchQueries: wrapResolvedValue({
|
|
@@ -319,6 +434,8 @@ function readDataForOnComplete<
|
|
|
319
434
|
nestedRefetchQueries:
|
|
320
435
|
resolvedReaderWithRefetchQueries.nestedRefetchQueries,
|
|
321
436
|
}),
|
|
437
|
+
fieldName: readerArtifact.fieldName,
|
|
438
|
+
readerArtifactKind: readerArtifact.kind,
|
|
322
439
|
root,
|
|
323
440
|
variables,
|
|
324
441
|
networkRequest: fakeNetworkRequest,
|
|
@@ -335,19 +452,128 @@ function readDataForOnComplete<
|
|
|
335
452
|
startUpdate: getOrCreateCachedStartUpdate(
|
|
336
453
|
environment,
|
|
337
454
|
fragment,
|
|
338
|
-
resolvedReaderWithRefetchQueries.readerArtifact.fieldName,
|
|
339
455
|
fakeNetworkRequestOptions,
|
|
340
456
|
),
|
|
341
457
|
}
|
|
342
458
|
: undefined),
|
|
343
459
|
});
|
|
344
460
|
}
|
|
345
|
-
default: {
|
|
346
|
-
const _: never = readerArtifact;
|
|
347
|
-
_;
|
|
348
|
-
throw new Error('Expected case');
|
|
349
|
-
}
|
|
350
461
|
}
|
|
351
462
|
}
|
|
352
463
|
return null;
|
|
353
464
|
}
|
|
465
|
+
|
|
466
|
+
function fetchNormalizationAstAndRetainArtifact<
|
|
467
|
+
TReadFromStore extends UnknownTReadFromStore,
|
|
468
|
+
TClientFieldValue,
|
|
469
|
+
TRawResponseType extends NetworkResponseObject,
|
|
470
|
+
>(
|
|
471
|
+
environment: IsographEnvironment,
|
|
472
|
+
artifact:
|
|
473
|
+
| RefetchQueryNormalizationArtifact
|
|
474
|
+
| IsographEntrypoint<
|
|
475
|
+
TReadFromStore,
|
|
476
|
+
TClientFieldValue,
|
|
477
|
+
NormalizationAst | NormalizationAstLoader,
|
|
478
|
+
TRawResponseType
|
|
479
|
+
>,
|
|
480
|
+
variables: ExtractParameters<TReadFromStore>,
|
|
481
|
+
): RetainedQuery {
|
|
482
|
+
const normalizationAst =
|
|
483
|
+
artifact.networkRequestInfo.normalizationAst.kind === 'NormalizationAst'
|
|
484
|
+
? wrapResolvedValue(artifact.networkRequestInfo.normalizationAst)
|
|
485
|
+
: wrapPromise(artifact.networkRequestInfo.normalizationAst.loader());
|
|
486
|
+
|
|
487
|
+
const root = { __link: ROOT_ID, __typename: artifact.concreteType };
|
|
488
|
+
const retainedQuery: RetainedQuery = {
|
|
489
|
+
normalizationAst: normalizationAst,
|
|
490
|
+
variables,
|
|
491
|
+
root,
|
|
492
|
+
};
|
|
493
|
+
retainQuery(environment, retainedQuery);
|
|
494
|
+
return retainedQuery;
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
function makeOptimisticUpdate<
|
|
498
|
+
TReadFromStore extends UnknownTReadFromStore,
|
|
499
|
+
TClientFieldValue,
|
|
500
|
+
TNormalizationAst extends NormalizationAst | NormalizationAstLoader,
|
|
501
|
+
TRawResponseType extends NetworkResponseObject,
|
|
502
|
+
>(
|
|
503
|
+
environment: IsographEnvironment,
|
|
504
|
+
artifact:
|
|
505
|
+
| RefetchQueryNormalizationArtifact
|
|
506
|
+
| IsographEntrypoint<
|
|
507
|
+
TReadFromStore,
|
|
508
|
+
TClientFieldValue,
|
|
509
|
+
TNormalizationAst,
|
|
510
|
+
TRawResponseType
|
|
511
|
+
>,
|
|
512
|
+
variables: ExtractParameters<TReadFromStore>,
|
|
513
|
+
optimisticNetworkResponse: TRawResponseType,
|
|
514
|
+
): OptimisticStoreLayer {
|
|
515
|
+
const root = { __link: ROOT_ID, __typename: artifact.concreteType };
|
|
516
|
+
|
|
517
|
+
if (
|
|
518
|
+
artifact.networkRequestInfo.normalizationAst.kind ===
|
|
519
|
+
'NormalizationAstLoader'
|
|
520
|
+
) {
|
|
521
|
+
throw new Error(
|
|
522
|
+
'Using lazy loaded normalizationAst with optimisticNetworkResponse is not supported.',
|
|
523
|
+
);
|
|
524
|
+
}
|
|
525
|
+
const encounteredIds: EncounteredIds = new Map();
|
|
526
|
+
const optimistic = (environment.store =
|
|
527
|
+
addOptimisticNetworkResponseStoreLayer(environment.store));
|
|
528
|
+
normalizeData(
|
|
529
|
+
environment,
|
|
530
|
+
environment.store,
|
|
531
|
+
artifact.networkRequestInfo.normalizationAst.selections,
|
|
532
|
+
optimisticNetworkResponse,
|
|
533
|
+
variables,
|
|
534
|
+
root,
|
|
535
|
+
encounteredIds,
|
|
536
|
+
);
|
|
537
|
+
|
|
538
|
+
logMessage(environment, () => ({
|
|
539
|
+
kind: 'AfterNormalization',
|
|
540
|
+
store: environment.store,
|
|
541
|
+
encounteredIds: encounteredIds,
|
|
542
|
+
}));
|
|
543
|
+
|
|
544
|
+
callSubscriptions(environment, encounteredIds);
|
|
545
|
+
return optimistic;
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
function revertOptimisticStoreLayerAndMaybeReplaceIfUndisposedIncomplete(
|
|
549
|
+
environment: IsographEnvironment,
|
|
550
|
+
status: NetworkRequestStatusUndisposedIncomplete,
|
|
551
|
+
normalizeData: null | ((storeLayer: StoreLayerWithData) => void),
|
|
552
|
+
): NetworkRequestStatusUndisposedComplete {
|
|
553
|
+
if (status.optimistic != null) {
|
|
554
|
+
revertOptimisticStoreLayerAndMaybeReplace(
|
|
555
|
+
environment,
|
|
556
|
+
status.optimistic,
|
|
557
|
+
normalizeData,
|
|
558
|
+
);
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
return {
|
|
562
|
+
kind: 'UndisposedComplete',
|
|
563
|
+
retainedQuery: status.retainedQuery,
|
|
564
|
+
};
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
function unretainAndGarbageCollect(
|
|
568
|
+
environment: IsographEnvironment,
|
|
569
|
+
status: NetworkRequestStatusUndisposedComplete,
|
|
570
|
+
): NetworkRequestStatusDisposed {
|
|
571
|
+
const didUnretainSomeQuery = unretainQuery(environment, status.retainedQuery);
|
|
572
|
+
if (didUnretainSomeQuery) {
|
|
573
|
+
garbageCollectEnvironment(environment);
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
return {
|
|
577
|
+
kind: 'Disposed',
|
|
578
|
+
};
|
|
579
|
+
}
|