@isograph/react 0.5.0 → 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 +9 -2
- 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 -29
- package/dist/core/FragmentReference.d.ts.map +1 -1
- package/dist/core/FragmentReference.js +7 -5
- 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 +76 -79
- package/dist/core/IsographEnvironment.d.ts.map +1 -1
- package/dist/core/IsographEnvironment.js +60 -82
- 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 +26 -23
- 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 +6 -6
- 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 -37
- package/dist/core/cache.d.ts.map +1 -1
- package/dist/core/cache.js +203 -537
- 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 +21 -19
- package/dist/core/check.d.ts.map +1 -1
- package/dist/core/check.js +80 -127
- package/dist/core/check.mjs +84 -0
- package/dist/core/check.mjs.map +1 -0
- package/dist/core/componentCache.js +9 -35
- 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 -78
- 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 -16
- package/dist/core/garbageCollection.d.ts.map +1 -1
- package/dist/core/garbageCollection.js +76 -115
- 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 +66 -61
- 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 -10
- package/dist/core/makeNetworkRequest.d.ts.map +1 -1
- package/dist/core/makeNetworkRequest.js +180 -264
- 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 +37 -53
- package/dist/core/optimisticProxy.d.ts.map +1 -1
- package/dist/core/optimisticProxy.js +245 -371
- 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 -28
- package/dist/core/read.d.ts.map +1 -1
- package/dist/core/read.js +435 -650
- 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 -77
- package/dist/core/reader.d.ts.map +1 -1
- package/dist/core/startUpdate.js +115 -152
- 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 -69
- 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 +9 -12
- package/dist/loadable-hooks/useClientSideDefer.d.ts.map +1 -1
- package/dist/loadable-hooks/useClientSideDefer.js +13 -44
- 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 +26 -22
- package/dist/loadable-hooks/useConnectionSpecPagination.d.ts.map +1 -1
- package/dist/loadable-hooks/useConnectionSpecPagination.js +133 -172
- 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 -8
- 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 -14
- 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 +15 -12
- package/dist/react/LoadableFieldReader.d.ts.map +1 -1
- package/dist/react/LoadableFieldReader.js +13 -47
- 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 +16 -13
- package/dist/react/LoadableFieldRenderer.d.ts.map +1 -1
- package/dist/react/LoadableFieldRenderer.js +13 -70
- 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 -8
- package/dist/react/useImperativeReference.d.ts.map +1 -1
- package/dist/react/useImperativeReference.js +34 -30
- 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 -6
- 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 -37
- 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 -40
- package/dist/react/useResult.mjs +30 -0
- package/dist/react/useResult.mjs.map +1 -0
- package/package.json +17 -9
- package/src/core/FragmentReference.ts +3 -3
- package/src/core/IsographEnvironment.ts +29 -16
- package/src/core/areEqualWithDeepComparison.ts +2 -18
- package/src/core/cache.ts +18 -383
- package/src/core/check.ts +9 -16
- package/src/core/componentCache.ts +10 -47
- package/src/core/entrypoint.ts +15 -3
- package/src/core/garbageCollection.ts +21 -10
- package/src/core/getOrCreateCacheForArtifact.ts +86 -0
- package/src/core/logging.ts +10 -10
- package/src/core/makeNetworkRequest.ts +16 -23
- package/src/core/optimisticProxy.ts +28 -47
- package/src/core/read.ts +21 -38
- package/src/core/reader.ts +8 -11
- package/src/core/startUpdate.ts +2 -6
- 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 +5 -4
- package/src/loadable-hooks/useClientSideDefer.ts +4 -4
- package/src/loadable-hooks/useConnectionSpecPagination.ts +20 -18
- package/src/loadable-hooks/useImperativeLoadableField.ts +3 -3
- package/src/loadable-hooks/useSkipLimitPagination.ts +20 -18
- package/src/react/IsographEnvironmentProvider.tsx +2 -1
- package/src/react/LoadableFieldReader.tsx +2 -4
- package/src/react/LoadableFieldRenderer.tsx +2 -4
- package/src/react/createIsographEnvironment.ts +23 -0
- package/src/react/maybeUnwrapNetworkRequest.ts +17 -0
- package/src/react/useImperativeReference.ts +5 -4
- package/src/react/useLazyReference.ts +7 -8
- package/src/react/useReadAndSubscribe.ts +53 -5
- package/src/react/useRerenderOnChange.ts +3 -3
- package/src/react/useResult.ts +6 -24
- package/src/tests/__isograph/Economist/__link/output_type.ts +2 -0
- package/src/tests/garbageCollection.test.ts +3 -6
- package/src/tests/meNameSuccessor.ts +1 -1
- package/src/tests/nodeQuery.ts +2 -2
- package/src/tests/normalizeData.test.ts +5 -3
- package/src/tests/optimisticProxy.test.ts +7 -5
- package/src/tests/startUpdate.test.ts +5 -7
- 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 -9
- package/dist/core/startUpdate.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import { wrapPromise, wrapResolvedValue } from "./PromiseWrapper.mjs";
|
|
2
|
+
import { ROOT_ID } from "./IsographEnvironment.mjs";
|
|
3
|
+
import { logMessage } from "./logging.mjs";
|
|
4
|
+
import { getOrCreateCachedStartUpdate } from "./startUpdate.mjs";
|
|
5
|
+
import { getOrCreateCachedComponent } from "./componentCache.mjs";
|
|
6
|
+
import { DEFAULT_SHOULD_FETCH_VALUE, check } from "./check.mjs";
|
|
7
|
+
import { readButDoNotEvaluate } from "./read.mjs";
|
|
8
|
+
import { callSubscriptions } from "./subscribe.mjs";
|
|
9
|
+
import { addNetworkResponseStoreLayer, addOptimisticNetworkResponseStoreLayer, revertOptimisticStoreLayerAndMaybeReplace } from "./optimisticProxy.mjs";
|
|
10
|
+
import { normalizeData } from "./cache.mjs";
|
|
11
|
+
import { garbageCollectEnvironment, retainQuery, unretainQuery } from "./garbageCollection.mjs";
|
|
12
|
+
|
|
13
|
+
//#region src/core/makeNetworkRequest.ts
|
|
14
|
+
let networkRequestId = 0;
|
|
15
|
+
function maybeMakeNetworkRequest(environment, artifact, variables, readerWithRefetchQueries, fetchOptions) {
|
|
16
|
+
switch (fetchOptions?.shouldFetch ?? DEFAULT_SHOULD_FETCH_VALUE) {
|
|
17
|
+
case "Yes": return makeNetworkRequest(environment, artifact, variables, readerWithRefetchQueries, fetchOptions);
|
|
18
|
+
case "No": return retainQueryWithoutMakingNetworkRequest(environment, artifact, variables);
|
|
19
|
+
case "IfNecessary":
|
|
20
|
+
if (artifact.networkRequestInfo.normalizationAst.kind === "NormalizationAstLoader") throw new Error("Using lazy loaded normalizationAst with shouldFetch: \"IfNecessary\" is not supported as it will lead to a network waterfall.");
|
|
21
|
+
if (check(environment, artifact.networkRequestInfo.normalizationAst.selections, variables, {
|
|
22
|
+
__link: ROOT_ID,
|
|
23
|
+
__typename: artifact.concreteType
|
|
24
|
+
}).kind === "EnoughData") return retainQueryWithoutMakingNetworkRequest(environment, artifact, variables);
|
|
25
|
+
else return makeNetworkRequest(environment, artifact, variables, readerWithRefetchQueries, fetchOptions);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function retainQueryWithoutMakingNetworkRequest(environment, artifact, variables) {
|
|
29
|
+
let status = {
|
|
30
|
+
kind: "UndisposedComplete",
|
|
31
|
+
retainedQuery: fetchNormalizationAstAndRetainArtifact(environment, artifact, variables)
|
|
32
|
+
};
|
|
33
|
+
return [wrapResolvedValue(void 0), () => {
|
|
34
|
+
if (status.kind !== "Disposed") status = unretainAndGarbageCollect(environment, status);
|
|
35
|
+
}];
|
|
36
|
+
}
|
|
37
|
+
function makeNetworkRequest(environment, artifact, variables, readerWithRefetchQueries, fetchOptions) {
|
|
38
|
+
const myNetworkRequestId = networkRequestId + "";
|
|
39
|
+
networkRequestId++;
|
|
40
|
+
let status = {
|
|
41
|
+
kind: "UndisposedIncomplete",
|
|
42
|
+
retainedQuery: fetchNormalizationAstAndRetainArtifact(environment, artifact, variables),
|
|
43
|
+
optimistic: fetchOptions?.optimisticNetworkResponse != null ? makeOptimisticUpdate(environment, artifact, variables, fetchOptions?.optimisticNetworkResponse) : null
|
|
44
|
+
};
|
|
45
|
+
logMessage(environment, () => ({
|
|
46
|
+
kind: "MakeNetworkRequest",
|
|
47
|
+
artifact,
|
|
48
|
+
variables,
|
|
49
|
+
networkRequestId: myNetworkRequestId
|
|
50
|
+
}));
|
|
51
|
+
return [wrapPromise(Promise.all([
|
|
52
|
+
environment.networkFunction(artifact.networkRequestInfo.operation, variables),
|
|
53
|
+
status.retainedQuery.normalizationAst.promise,
|
|
54
|
+
readerWithRefetchQueries?.promise
|
|
55
|
+
]).then(([networkResponse, normalizationAst, readerWithRefetchQueries$1]) => {
|
|
56
|
+
logMessage(environment, () => ({
|
|
57
|
+
kind: "ReceivedNetworkResponse",
|
|
58
|
+
networkResponse,
|
|
59
|
+
networkRequestId: myNetworkRequestId
|
|
60
|
+
}));
|
|
61
|
+
if (networkResponse.errors != null) {
|
|
62
|
+
try {
|
|
63
|
+
fetchOptions?.onError?.();
|
|
64
|
+
} catch {}
|
|
65
|
+
throw new Error("Network response had errors", { cause: networkResponse });
|
|
66
|
+
}
|
|
67
|
+
const root = {
|
|
68
|
+
__link: ROOT_ID,
|
|
69
|
+
__typename: artifact.concreteType
|
|
70
|
+
};
|
|
71
|
+
if (status.kind === "UndisposedIncomplete") if (status.optimistic != null) status = revertOptimisticStoreLayerAndMaybeReplaceIfUndisposedIncomplete(environment, status, (storeLayer) => normalizeData(environment, storeLayer, normalizationAst.selections, networkResponse.data ?? {}, variables, root, /* @__PURE__ */ new Map()));
|
|
72
|
+
else {
|
|
73
|
+
const encounteredIds = /* @__PURE__ */ new Map();
|
|
74
|
+
environment.store = addNetworkResponseStoreLayer(environment.store);
|
|
75
|
+
normalizeData(environment, environment.store, normalizationAst.selections, networkResponse.data ?? {}, variables, root, encounteredIds);
|
|
76
|
+
logMessage(environment, () => ({
|
|
77
|
+
kind: "AfterNormalization",
|
|
78
|
+
store: environment.store,
|
|
79
|
+
encounteredIds
|
|
80
|
+
}));
|
|
81
|
+
callSubscriptions(environment, encounteredIds);
|
|
82
|
+
status = {
|
|
83
|
+
kind: "UndisposedComplete",
|
|
84
|
+
retainedQuery: status.retainedQuery
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
const onComplete = fetchOptions?.onComplete;
|
|
88
|
+
if (onComplete != null) {
|
|
89
|
+
let data = readDataForOnComplete(artifact, environment, root, variables, readerWithRefetchQueries$1);
|
|
90
|
+
try {
|
|
91
|
+
onComplete(data);
|
|
92
|
+
} catch {}
|
|
93
|
+
}
|
|
94
|
+
}).catch((e) => {
|
|
95
|
+
logMessage(environment, () => ({
|
|
96
|
+
kind: "ReceivedNetworkError",
|
|
97
|
+
networkRequestId: myNetworkRequestId,
|
|
98
|
+
error: e
|
|
99
|
+
}));
|
|
100
|
+
try {
|
|
101
|
+
fetchOptions?.onError?.();
|
|
102
|
+
} catch {}
|
|
103
|
+
if (status.kind === "UndisposedIncomplete") status = revertOptimisticStoreLayerAndMaybeReplaceIfUndisposedIncomplete(environment, status, null);
|
|
104
|
+
throw e;
|
|
105
|
+
})), () => {
|
|
106
|
+
if (status.kind === "UndisposedIncomplete") status = revertOptimisticStoreLayerAndMaybeReplaceIfUndisposedIncomplete(environment, status, null);
|
|
107
|
+
if (status.kind !== "Disposed") status = unretainAndGarbageCollect(environment, status);
|
|
108
|
+
}];
|
|
109
|
+
}
|
|
110
|
+
function readDataForOnComplete(artifact, environment, root, variables, readerWithRefetchQueries) {
|
|
111
|
+
if (artifact.kind === "Entrypoint") {
|
|
112
|
+
const fakeNetworkRequest = wrapResolvedValue(void 0);
|
|
113
|
+
const fakeNetworkRequestOptions = {
|
|
114
|
+
suspendIfInFlight: false,
|
|
115
|
+
throwOnNetworkError: false
|
|
116
|
+
};
|
|
117
|
+
const resolvedReaderWithRefetchQueries = readerWithRefetchQueries;
|
|
118
|
+
const fragment = {
|
|
119
|
+
kind: "FragmentReference",
|
|
120
|
+
readerWithRefetchQueries: wrapResolvedValue(resolvedReaderWithRefetchQueries),
|
|
121
|
+
fieldName: resolvedReaderWithRefetchQueries.readerArtifact.fieldName,
|
|
122
|
+
readerArtifactKind: resolvedReaderWithRefetchQueries.readerArtifact.kind,
|
|
123
|
+
root,
|
|
124
|
+
variables,
|
|
125
|
+
networkRequest: fakeNetworkRequest
|
|
126
|
+
};
|
|
127
|
+
const fragmentResult = readButDoNotEvaluate(environment, fragment, fakeNetworkRequestOptions).item;
|
|
128
|
+
const readerArtifact = resolvedReaderWithRefetchQueries.readerArtifact;
|
|
129
|
+
switch (readerArtifact.kind) {
|
|
130
|
+
case "ComponentReaderArtifact": return getOrCreateCachedComponent(environment, {
|
|
131
|
+
kind: "FragmentReference",
|
|
132
|
+
readerWithRefetchQueries: wrapResolvedValue({
|
|
133
|
+
kind: "ReaderWithRefetchQueries",
|
|
134
|
+
readerArtifact,
|
|
135
|
+
nestedRefetchQueries: resolvedReaderWithRefetchQueries.nestedRefetchQueries
|
|
136
|
+
}),
|
|
137
|
+
fieldName: readerArtifact.fieldName,
|
|
138
|
+
readerArtifactKind: readerArtifact.kind,
|
|
139
|
+
root,
|
|
140
|
+
variables,
|
|
141
|
+
networkRequest: fakeNetworkRequest
|
|
142
|
+
}, fakeNetworkRequestOptions);
|
|
143
|
+
case "EagerReaderArtifact": return readerArtifact.resolver({
|
|
144
|
+
data: fragmentResult,
|
|
145
|
+
parameters: variables,
|
|
146
|
+
...readerArtifact.hasUpdatable ? { startUpdate: getOrCreateCachedStartUpdate(environment, fragment, fakeNetworkRequestOptions) } : void 0
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return null;
|
|
151
|
+
}
|
|
152
|
+
function fetchNormalizationAstAndRetainArtifact(environment, artifact, variables) {
|
|
153
|
+
const retainedQuery = {
|
|
154
|
+
normalizationAst: artifact.networkRequestInfo.normalizationAst.kind === "NormalizationAst" ? wrapResolvedValue(artifact.networkRequestInfo.normalizationAst) : wrapPromise(artifact.networkRequestInfo.normalizationAst.loader()),
|
|
155
|
+
variables,
|
|
156
|
+
root: {
|
|
157
|
+
__link: ROOT_ID,
|
|
158
|
+
__typename: artifact.concreteType
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
retainQuery(environment, retainedQuery);
|
|
162
|
+
return retainedQuery;
|
|
163
|
+
}
|
|
164
|
+
function makeOptimisticUpdate(environment, artifact, variables, optimisticNetworkResponse) {
|
|
165
|
+
const root = {
|
|
166
|
+
__link: ROOT_ID,
|
|
167
|
+
__typename: artifact.concreteType
|
|
168
|
+
};
|
|
169
|
+
if (artifact.networkRequestInfo.normalizationAst.kind === "NormalizationAstLoader") throw new Error("Using lazy loaded normalizationAst with optimisticNetworkResponse is not supported.");
|
|
170
|
+
const encounteredIds = /* @__PURE__ */ new Map();
|
|
171
|
+
const optimistic = environment.store = addOptimisticNetworkResponseStoreLayer(environment.store);
|
|
172
|
+
normalizeData(environment, environment.store, artifact.networkRequestInfo.normalizationAst.selections, optimisticNetworkResponse, variables, root, encounteredIds);
|
|
173
|
+
logMessage(environment, () => ({
|
|
174
|
+
kind: "AfterNormalization",
|
|
175
|
+
store: environment.store,
|
|
176
|
+
encounteredIds
|
|
177
|
+
}));
|
|
178
|
+
callSubscriptions(environment, encounteredIds);
|
|
179
|
+
return optimistic;
|
|
180
|
+
}
|
|
181
|
+
function revertOptimisticStoreLayerAndMaybeReplaceIfUndisposedIncomplete(environment, status, normalizeData$1) {
|
|
182
|
+
if (status.optimistic != null) revertOptimisticStoreLayerAndMaybeReplace(environment, status.optimistic, normalizeData$1);
|
|
183
|
+
return {
|
|
184
|
+
kind: "UndisposedComplete",
|
|
185
|
+
retainedQuery: status.retainedQuery
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
function unretainAndGarbageCollect(environment, status) {
|
|
189
|
+
if (unretainQuery(environment, status.retainedQuery)) garbageCollectEnvironment(environment);
|
|
190
|
+
return { kind: "Disposed" };
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
//#endregion
|
|
194
|
+
export { makeNetworkRequest, maybeMakeNetworkRequest, retainQueryWithoutMakingNetworkRequest };
|
|
195
|
+
//# sourceMappingURL=makeNetworkRequest.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"makeNetworkRequest.mjs","names":["status:\n | NetworkRequestStatusUndisposedComplete\n | NetworkRequestStatusDisposed","status: NetworkRequestStatus","readerWithRefetchQueries","encounteredIds: EncounteredIds","fragment: FragmentReference<TReadFromStore, TClientFieldValue>","retainedQuery: RetainedQuery","normalizeData"],"sources":["../../src/core/makeNetworkRequest.ts"],"sourcesContent":["import type { ItemCleanupPair } from '@isograph/disposable-types';\nimport {\n normalizeData,\n type EncounteredIds,\n type NetworkResponseObject,\n} from './cache';\nimport type { FetchOptions } from './check';\nimport { check, DEFAULT_SHOULD_FETCH_VALUE } from './check';\nimport { getOrCreateCachedComponent } from './componentCache';\nimport type {\n IsographEntrypoint,\n NormalizationAst,\n NormalizationAstLoader,\n ReaderWithRefetchQueries,\n RefetchQueryNormalizationArtifact,\n} from './entrypoint';\nimport type {\n ExtractParameters,\n FragmentReference,\n UnknownTReadFromStore,\n} from './FragmentReference';\nimport type { RetainedQuery } from './garbageCollection';\nimport {\n garbageCollectEnvironment,\n retainQuery,\n unretainQuery,\n} from './garbageCollection';\nimport type { IsographEnvironment, StoreLink } from './IsographEnvironment';\nimport { ROOT_ID } from './IsographEnvironment';\nimport { logMessage } from './logging';\nimport {\n addNetworkResponseStoreLayer,\n addOptimisticNetworkResponseStoreLayer,\n revertOptimisticStoreLayerAndMaybeReplace,\n type OptimisticStoreLayer,\n type StoreLayerWithData,\n} from './optimisticProxy';\nimport type { AnyError, PromiseWrapper } from './PromiseWrapper';\nimport { wrapPromise, wrapResolvedValue } from './PromiseWrapper';\nimport { readButDoNotEvaluate } from './read';\nimport { getOrCreateCachedStartUpdate } from './startUpdate';\nimport { callSubscriptions } from './subscribe';\n\nlet networkRequestId = 0;\n\nexport function maybeMakeNetworkRequest<\n TReadFromStore extends UnknownTReadFromStore,\n TClientFieldValue,\n TNormalizationAst extends NormalizationAst | NormalizationAstLoader,\n TRawResponseType extends NetworkResponseObject,\n>(\n environment: IsographEnvironment,\n artifact:\n | RefetchQueryNormalizationArtifact\n | IsographEntrypoint<\n TReadFromStore,\n TClientFieldValue,\n TNormalizationAst,\n TRawResponseType\n >,\n variables: ExtractParameters<TReadFromStore>,\n readerWithRefetchQueries: PromiseWrapper<\n ReaderWithRefetchQueries<TReadFromStore, TClientFieldValue>\n > | null,\n fetchOptions: FetchOptions<TClientFieldValue, TRawResponseType> | null,\n): ItemCleanupPair<PromiseWrapper<void, AnyError>> {\n switch (fetchOptions?.shouldFetch ?? DEFAULT_SHOULD_FETCH_VALUE) {\n case 'Yes': {\n return makeNetworkRequest(\n environment,\n artifact,\n variables,\n readerWithRefetchQueries,\n fetchOptions,\n );\n }\n case 'No': {\n return retainQueryWithoutMakingNetworkRequest(\n environment,\n artifact,\n variables,\n );\n }\n case 'IfNecessary': {\n if (\n artifact.networkRequestInfo.normalizationAst.kind ===\n 'NormalizationAstLoader'\n ) {\n throw new Error(\n 'Using lazy loaded normalizationAst with shouldFetch: \"IfNecessary\" is ' +\n 'not supported as it will lead to a network waterfall.',\n );\n }\n const result = check(\n environment,\n artifact.networkRequestInfo.normalizationAst.selections,\n variables,\n {\n __link: ROOT_ID,\n __typename: artifact.concreteType,\n },\n );\n\n if (result.kind === 'EnoughData') {\n return retainQueryWithoutMakingNetworkRequest(\n environment,\n artifact,\n variables,\n );\n } else {\n return makeNetworkRequest(\n environment,\n artifact,\n variables,\n readerWithRefetchQueries,\n fetchOptions,\n );\n }\n }\n }\n}\n\nexport function retainQueryWithoutMakingNetworkRequest<\n TReadFromStore extends UnknownTReadFromStore,\n TClientFieldValue,\n TRawResponseType extends NetworkResponseObject,\n>(\n environment: IsographEnvironment,\n artifact:\n | RefetchQueryNormalizationArtifact\n | IsographEntrypoint<\n TReadFromStore,\n TClientFieldValue,\n NormalizationAst | NormalizationAstLoader,\n TRawResponseType\n >,\n variables: ExtractParameters<TReadFromStore>,\n): ItemCleanupPair<PromiseWrapper<void, AnyError>> {\n let status:\n | NetworkRequestStatusUndisposedComplete\n | NetworkRequestStatusDisposed = {\n kind: 'UndisposedComplete',\n retainedQuery: fetchNormalizationAstAndRetainArtifact(\n environment,\n artifact,\n variables,\n ),\n };\n return [\n wrapResolvedValue(undefined),\n () => {\n if (status.kind !== 'Disposed') {\n status = unretainAndGarbageCollect(environment, status);\n }\n },\n ];\n}\n\nexport function makeNetworkRequest<\n TReadFromStore extends UnknownTReadFromStore,\n TClientFieldValue,\n TNormalizationAst extends NormalizationAst | NormalizationAstLoader,\n TRawResponseType extends NetworkResponseObject,\n>(\n environment: IsographEnvironment,\n artifact:\n | RefetchQueryNormalizationArtifact\n | IsographEntrypoint<\n TReadFromStore,\n TClientFieldValue,\n TNormalizationAst,\n TRawResponseType\n >,\n variables: ExtractParameters<TReadFromStore>,\n readerWithRefetchQueries: PromiseWrapper<\n ReaderWithRefetchQueries<TReadFromStore, TClientFieldValue>\n > | null,\n fetchOptions: FetchOptions<TClientFieldValue, TRawResponseType> | null,\n): ItemCleanupPair<PromiseWrapper<void, AnyError>> {\n // TODO this should be a DataId and stored in the store\n const myNetworkRequestId = networkRequestId + '';\n networkRequestId++;\n let status: NetworkRequestStatus = {\n kind: 'UndisposedIncomplete',\n retainedQuery: fetchNormalizationAstAndRetainArtifact(\n environment,\n artifact,\n variables,\n ),\n optimistic:\n fetchOptions?.optimisticNetworkResponse != null\n ? makeOptimisticUpdate(\n environment,\n artifact,\n variables,\n fetchOptions?.optimisticNetworkResponse,\n )\n : null,\n };\n\n logMessage(environment, () => ({\n kind: 'MakeNetworkRequest',\n artifact,\n variables,\n networkRequestId: myNetworkRequestId,\n }));\n\n // This should be an observable, not a promise\n const promise = Promise.all([\n environment.networkFunction(\n artifact.networkRequestInfo.operation,\n variables,\n ),\n status.retainedQuery.normalizationAst.promise,\n readerWithRefetchQueries?.promise,\n ])\n .then(([networkResponse, normalizationAst, readerWithRefetchQueries]) => {\n logMessage(environment, () => ({\n kind: 'ReceivedNetworkResponse',\n networkResponse,\n networkRequestId: myNetworkRequestId,\n }));\n\n if (networkResponse.errors != null) {\n try {\n fetchOptions?.onError?.();\n } catch {}\n throw new Error('Network response had errors', {\n cause: networkResponse,\n });\n }\n\n const root = { __link: ROOT_ID, __typename: artifact.concreteType };\n\n if (status.kind === 'UndisposedIncomplete') {\n if (status.optimistic != null) {\n status =\n revertOptimisticStoreLayerAndMaybeReplaceIfUndisposedIncomplete(\n environment,\n status,\n (storeLayer) =>\n normalizeData(\n environment,\n storeLayer,\n normalizationAst.selections,\n networkResponse.data ?? {},\n variables,\n root,\n new Map(),\n ),\n );\n } else {\n const encounteredIds: EncounteredIds = new Map();\n environment.store = addNetworkResponseStoreLayer(environment.store);\n normalizeData(\n environment,\n environment.store,\n normalizationAst.selections,\n networkResponse.data ?? {},\n variables,\n root,\n encounteredIds,\n );\n\n logMessage(environment, () => ({\n kind: 'AfterNormalization',\n store: environment.store,\n encounteredIds: encounteredIds,\n }));\n\n callSubscriptions(environment, encounteredIds);\n\n status = {\n kind: 'UndisposedComplete',\n retainedQuery: status.retainedQuery,\n };\n }\n }\n\n const onComplete = fetchOptions?.onComplete;\n if (onComplete != null) {\n let data = readDataForOnComplete(\n artifact,\n environment,\n root,\n variables,\n readerWithRefetchQueries,\n );\n\n try {\n // @ts-expect-error this problem will be fixed when we remove RefetchQueryNormalizationArtifact\n // (or we can fix this by having a single param of type { kind: 'Entrypoint', entrypoint,\n // fetchOptions: FetchOptions<TReadFromStore> } | { kind: 'RefetchQuery', refetchQuery,\n // fetchOptions: FetchOptions<void> }).\n onComplete(data);\n } catch {}\n }\n })\n .catch((e) => {\n logMessage(environment, () => ({\n kind: 'ReceivedNetworkError',\n networkRequestId: myNetworkRequestId,\n error: e,\n }));\n try {\n fetchOptions?.onError?.();\n } catch {}\n\n if (status.kind === 'UndisposedIncomplete') {\n status =\n revertOptimisticStoreLayerAndMaybeReplaceIfUndisposedIncomplete(\n environment,\n status,\n null,\n );\n }\n\n throw e;\n });\n\n const wrapper = wrapPromise(promise);\n\n const response: ItemCleanupPair<PromiseWrapper<void, AnyError>> = [\n wrapper,\n () => {\n if (status.kind === 'UndisposedIncomplete') {\n status =\n revertOptimisticStoreLayerAndMaybeReplaceIfUndisposedIncomplete(\n environment,\n status,\n null,\n );\n }\n if (status.kind !== 'Disposed') {\n status = unretainAndGarbageCollect(environment, status);\n }\n },\n ];\n return response;\n}\n\ntype NetworkRequestStatusUndisposedIncomplete = {\n readonly kind: 'UndisposedIncomplete';\n readonly retainedQuery: RetainedQuery;\n readonly optimistic: OptimisticStoreLayer | null;\n};\n\ntype NetworkRequestStatusUndisposedComplete = {\n readonly kind: 'UndisposedComplete';\n readonly retainedQuery: RetainedQuery;\n};\n\ntype NetworkRequestStatusDisposed = {\n readonly kind: 'Disposed';\n};\n\ntype NetworkRequestStatus =\n | NetworkRequestStatusUndisposedIncomplete\n | NetworkRequestStatusUndisposedComplete\n | NetworkRequestStatusDisposed;\n\nfunction readDataForOnComplete<\n TReadFromStore extends UnknownTReadFromStore,\n TClientFieldValue,\n TNormalizationAst extends NormalizationAst | NormalizationAstLoader,\n TRawResponseType extends NetworkResponseObject,\n>(\n artifact:\n | RefetchQueryNormalizationArtifact\n | IsographEntrypoint<\n TReadFromStore,\n TClientFieldValue,\n TNormalizationAst,\n TRawResponseType\n >,\n environment: IsographEnvironment,\n root: StoreLink,\n variables: ExtractParameters<TReadFromStore>,\n readerWithRefetchQueries:\n | ReaderWithRefetchQueries<TReadFromStore, TClientFieldValue>\n | undefined,\n): TClientFieldValue | null {\n // An entrypoint, but not a RefetchQueryNormalizationArtifact, has a reader ASTs.\n // So, we can only pass data to onComplete if makeNetworkRequest was passed an entrypoint.\n // This is awkward, since we don't express that in the types of the parameters\n // (i.e. FetchOptions could be passed, along with a RefetchQueryNormalizationArtifact).\n //\n // However, this isn't a big deal: RefetchQueryNormalizationArtifact is going away.\n if (artifact.kind === 'Entrypoint') {\n // TODO this is a smell!\n const fakeNetworkRequest = wrapResolvedValue(undefined);\n // TODO this is a smell — we know the network response is not in flight,\n // so we don't really care!\n const fakeNetworkRequestOptions = {\n suspendIfInFlight: false,\n throwOnNetworkError: false,\n };\n const resolvedReaderWithRefetchQueries =\n readerWithRefetchQueries as ReaderWithRefetchQueries<\n TReadFromStore,\n TClientFieldValue\n >;\n\n const fragment: FragmentReference<TReadFromStore, TClientFieldValue> = {\n kind: 'FragmentReference',\n // TODO this smells.\n readerWithRefetchQueries: wrapResolvedValue(\n resolvedReaderWithRefetchQueries,\n ),\n fieldName: resolvedReaderWithRefetchQueries.readerArtifact.fieldName,\n readerArtifactKind: resolvedReaderWithRefetchQueries.readerArtifact.kind,\n root,\n variables,\n networkRequest: fakeNetworkRequest,\n };\n const fragmentResult = readButDoNotEvaluate(\n environment,\n fragment,\n fakeNetworkRequestOptions,\n ).item;\n const readerArtifact = resolvedReaderWithRefetchQueries.readerArtifact;\n switch (readerArtifact.kind) {\n case 'ComponentReaderArtifact': {\n // @ts-expect-error We should find a way to encode this in the type system:\n // if we have a ComponentReaderArtifact, we will necessarily have a\n // TClientFieldValue which is a React.FC<...>\n return getOrCreateCachedComponent(\n environment,\n {\n kind: 'FragmentReference',\n readerWithRefetchQueries: wrapResolvedValue({\n kind: 'ReaderWithRefetchQueries',\n readerArtifact: readerArtifact,\n nestedRefetchQueries:\n resolvedReaderWithRefetchQueries.nestedRefetchQueries,\n }),\n fieldName: readerArtifact.fieldName,\n readerArtifactKind: readerArtifact.kind,\n root,\n variables,\n networkRequest: fakeNetworkRequest,\n } as const,\n fakeNetworkRequestOptions,\n );\n }\n case 'EagerReaderArtifact': {\n return readerArtifact.resolver({\n data: fragmentResult,\n parameters: variables,\n ...(readerArtifact.hasUpdatable\n ? {\n startUpdate: getOrCreateCachedStartUpdate(\n environment,\n fragment,\n fakeNetworkRequestOptions,\n ),\n }\n : undefined),\n });\n }\n }\n }\n return null;\n}\n\nfunction fetchNormalizationAstAndRetainArtifact<\n TReadFromStore extends UnknownTReadFromStore,\n TClientFieldValue,\n TRawResponseType extends NetworkResponseObject,\n>(\n environment: IsographEnvironment,\n artifact:\n | RefetchQueryNormalizationArtifact\n | IsographEntrypoint<\n TReadFromStore,\n TClientFieldValue,\n NormalizationAst | NormalizationAstLoader,\n TRawResponseType\n >,\n variables: ExtractParameters<TReadFromStore>,\n): RetainedQuery {\n const normalizationAst =\n artifact.networkRequestInfo.normalizationAst.kind === 'NormalizationAst'\n ? wrapResolvedValue(artifact.networkRequestInfo.normalizationAst)\n : wrapPromise(artifact.networkRequestInfo.normalizationAst.loader());\n\n const root = { __link: ROOT_ID, __typename: artifact.concreteType };\n const retainedQuery: RetainedQuery = {\n normalizationAst: normalizationAst,\n variables,\n root,\n };\n retainQuery(environment, retainedQuery);\n return retainedQuery;\n}\n\nfunction makeOptimisticUpdate<\n TReadFromStore extends UnknownTReadFromStore,\n TClientFieldValue,\n TNormalizationAst extends NormalizationAst | NormalizationAstLoader,\n TRawResponseType extends NetworkResponseObject,\n>(\n environment: IsographEnvironment,\n artifact:\n | RefetchQueryNormalizationArtifact\n | IsographEntrypoint<\n TReadFromStore,\n TClientFieldValue,\n TNormalizationAst,\n TRawResponseType\n >,\n variables: ExtractParameters<TReadFromStore>,\n optimisticNetworkResponse: TRawResponseType,\n): OptimisticStoreLayer {\n const root = { __link: ROOT_ID, __typename: artifact.concreteType };\n\n if (\n artifact.networkRequestInfo.normalizationAst.kind ===\n 'NormalizationAstLoader'\n ) {\n throw new Error(\n 'Using lazy loaded normalizationAst with optimisticNetworkResponse is not supported.',\n );\n }\n const encounteredIds: EncounteredIds = new Map();\n const optimistic = (environment.store =\n addOptimisticNetworkResponseStoreLayer(environment.store));\n normalizeData(\n environment,\n environment.store,\n artifact.networkRequestInfo.normalizationAst.selections,\n optimisticNetworkResponse,\n variables,\n root,\n encounteredIds,\n );\n\n logMessage(environment, () => ({\n kind: 'AfterNormalization',\n store: environment.store,\n encounteredIds: encounteredIds,\n }));\n\n callSubscriptions(environment, encounteredIds);\n return optimistic;\n}\n\nfunction revertOptimisticStoreLayerAndMaybeReplaceIfUndisposedIncomplete(\n environment: IsographEnvironment,\n status: NetworkRequestStatusUndisposedIncomplete,\n normalizeData: null | ((storeLayer: StoreLayerWithData) => void),\n): NetworkRequestStatusUndisposedComplete {\n if (status.optimistic != null) {\n revertOptimisticStoreLayerAndMaybeReplace(\n environment,\n status.optimistic,\n normalizeData,\n );\n }\n\n return {\n kind: 'UndisposedComplete',\n retainedQuery: status.retainedQuery,\n };\n}\n\nfunction unretainAndGarbageCollect(\n environment: IsographEnvironment,\n status: NetworkRequestStatusUndisposedComplete,\n): NetworkRequestStatusDisposed {\n const didUnretainSomeQuery = unretainQuery(environment, status.retainedQuery);\n if (didUnretainSomeQuery) {\n garbageCollectEnvironment(environment);\n }\n\n return {\n kind: 'Disposed',\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { BaseStoreLayerData, StoreLayerData } from "./IsographEnvironment.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/core/optimisticProxy.d.ts
|
|
4
|
+
|
|
5
|
+
type BaseStoreLayer = {
|
|
6
|
+
readonly kind: 'BaseStoreLayer';
|
|
7
|
+
childStoreLayer: OptimisticStoreLayer | null;
|
|
8
|
+
readonly parentStoreLayer: null;
|
|
9
|
+
readonly data: BaseStoreLayerData;
|
|
10
|
+
};
|
|
11
|
+
type NetworkResponseStoreLayer = {
|
|
12
|
+
readonly kind: 'NetworkResponseStoreLayer';
|
|
13
|
+
childStoreLayer: OptimisticStoreLayer | StartUpdateStoreLayer | null;
|
|
14
|
+
parentStoreLayer: OptimisticStoreLayer | StartUpdateStoreLayer;
|
|
15
|
+
readonly data: StoreLayerData;
|
|
16
|
+
};
|
|
17
|
+
type DataUpdate<TStoreLayer extends StoreLayer> = (storeLayer: TStoreLayer) => void;
|
|
18
|
+
type StartUpdateStoreLayer = {
|
|
19
|
+
readonly kind: 'StartUpdateStoreLayer';
|
|
20
|
+
childStoreLayer: OptimisticStoreLayer | NetworkResponseStoreLayer | null;
|
|
21
|
+
parentStoreLayer: OptimisticStoreLayer | NetworkResponseStoreLayer;
|
|
22
|
+
data: StoreLayerData;
|
|
23
|
+
startUpdate: DataUpdate<StartUpdateStoreLayer | BaseStoreLayer>;
|
|
24
|
+
};
|
|
25
|
+
type OptimisticStoreLayer = OptimisticUpdaterStoreLayer | OptimisticNetworkResponseStoreLayer;
|
|
26
|
+
type OptimisticUpdaterStoreLayer = {
|
|
27
|
+
readonly kind: 'OptimisticUpdaterStoreLayer';
|
|
28
|
+
childStoreLayer: OptimisticStoreLayer | StartUpdateStoreLayer | NetworkResponseStoreLayer | null;
|
|
29
|
+
parentStoreLayer: OptimisticStoreLayer | StartUpdateStoreLayer | NetworkResponseStoreLayer | BaseStoreLayer;
|
|
30
|
+
data: StoreLayerData;
|
|
31
|
+
readonly startUpdate: DataUpdate<OptimisticUpdaterStoreLayer>;
|
|
32
|
+
};
|
|
33
|
+
type OptimisticNetworkResponseStoreLayer = {
|
|
34
|
+
readonly kind: 'OptimisticNetworkResponseStoreLayer';
|
|
35
|
+
childStoreLayer: OptimisticStoreLayer | StartUpdateStoreLayer | NetworkResponseStoreLayer | null;
|
|
36
|
+
parentStoreLayer: OptimisticStoreLayer | StartUpdateStoreLayer | NetworkResponseStoreLayer | BaseStoreLayer;
|
|
37
|
+
data: StoreLayerData;
|
|
38
|
+
};
|
|
39
|
+
type StoreLayer = OptimisticStoreLayer | NetworkResponseStoreLayer | StartUpdateStoreLayer | BaseStoreLayer;
|
|
40
|
+
type StoreLayerWithData = BaseStoreLayer | NetworkResponseStoreLayer | OptimisticNetworkResponseStoreLayer;
|
|
41
|
+
//#endregion
|
|
42
|
+
export { StoreLayer, StoreLayerWithData };
|
|
43
|
+
//# sourceMappingURL=optimisticProxy.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optimisticProxy.d.mts","names":[],"sources":["../../src/core/optimisticProxy.ts"],"sourcesContent":[],"mappings":";;;;AA8GiB,KAXL,cAAA,GAWK;EAAc,SAAA,IAAA,EAAA,gBAAA;EAGnB,eAAU,EAZH,oBAYwB,GAAA,IAAA;EAI/B,SAAA,gBAAqB,EAAA,IAAA;EAEd,SAAA,IAAA,EAhBF,kBAgBE;CAAuB;AACtB,KAdR,yBAAA,GAcQ;EAAuB,SAAA,IAAA,EAAA,2BAAA;EACnC,eAAA,EAbW,oBAaX,GAbkC,qBAalC,GAAA,IAAA;EACkB,gBAAA,EAbN,oBAaM,GAbiB,qBAajB;EAAwB,SAAA,IAAA,EAZjC,cAYiC;CAAnC;AAAU,KATb,UASa,CAAA,oBATkB,UASlB,CAAA,GAAA,CAAA,UAAA,EARX,WAQW,EAAA,GAAA,IAAA;AAGb,KARA,qBAAA,GAQoB;EAIpB,SAAA,IAAA,EAAA,uBAA2B;EAGjC,eAAA,EAba,oBAab,GAboC,yBAapC,GAAA,IAAA;EACA,gBAAA,EAbc,oBAad,GAbqC,yBAarC;EACA,IAAA,EAbE,cAaF;EAGA,WAAA,EAfS,UAeT,CAfoB,qBAepB,GAf4C,cAe5C,CAAA;CACA;AACA,KAdM,oBAAA,GACR,2BAaE,GAZF,mCAYE;AACA,KAXM,2BAAA,GAWN;EACE,SAAA,IAAA,EAAA,6BAAA;EAC2B,eAAA,EAV7B,oBAU6B,GAT7B,qBAS6B,GAR7B,yBAQ6B,GAAA,IAAA;EAAX,gBAAA,EALlB,oBAKkB,GAJlB,qBAIkB,GAHlB,yBAGkB,GAFlB,cAEkB;EAAU,IAAA,EAD1B,cAC0B;EAGtB,SAAA,WAAA,EAHY,UAGZ,CAHuB,2BAGY,CAAA;CAGzC;AACA,KAJM,mCAAA,GAIN;EACA,SAAA,IAAA,EAAA,qCAAA;EAGA,eAAA,EALA,oBAKA,GAJA,qBAIA,GAHA,yBAGA,GAAA,IAAA;EACA,gBAAA,EADA,oBACA,GAAA,qBAAA,GACA,yBADA,GAEA,cAFA;EACA,IAAA,EAEE,cAFF;CACA;KAkVM,UAAA,GACR,uBACA,4BACA,wBACA;KAEQ,kBAAA,GACR,iBACA,4BACA"}
|
|
@@ -1,59 +1,43 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
export type BaseStoreLayer = {
|
|
11
|
-
readonly kind: 'BaseStoreLayer';
|
|
12
|
-
childStoreLayer: OptimisticStoreLayer | null;
|
|
13
|
-
readonly parentStoreLayer: null;
|
|
14
|
-
readonly data: BaseStoreLayerData;
|
|
1
|
+
import { BaseStoreLayerData, StoreLayerData } from "./IsographEnvironment.js";
|
|
2
|
+
|
|
3
|
+
//#region src/core/optimisticProxy.d.ts
|
|
4
|
+
|
|
5
|
+
type BaseStoreLayer = {
|
|
6
|
+
readonly kind: 'BaseStoreLayer';
|
|
7
|
+
childStoreLayer: OptimisticStoreLayer | null;
|
|
8
|
+
readonly parentStoreLayer: null;
|
|
9
|
+
readonly data: BaseStoreLayerData;
|
|
15
10
|
};
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
11
|
+
type NetworkResponseStoreLayer = {
|
|
12
|
+
readonly kind: 'NetworkResponseStoreLayer';
|
|
13
|
+
childStoreLayer: OptimisticStoreLayer | StartUpdateStoreLayer | null;
|
|
14
|
+
parentStoreLayer: OptimisticStoreLayer | StartUpdateStoreLayer;
|
|
15
|
+
readonly data: StoreLayerData;
|
|
21
16
|
};
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
17
|
+
type DataUpdate<TStoreLayer extends StoreLayer> = (storeLayer: TStoreLayer) => void;
|
|
18
|
+
type StartUpdateStoreLayer = {
|
|
19
|
+
readonly kind: 'StartUpdateStoreLayer';
|
|
20
|
+
childStoreLayer: OptimisticStoreLayer | NetworkResponseStoreLayer | null;
|
|
21
|
+
parentStoreLayer: OptimisticStoreLayer | NetworkResponseStoreLayer;
|
|
22
|
+
data: StoreLayerData;
|
|
23
|
+
startUpdate: DataUpdate<StartUpdateStoreLayer | BaseStoreLayer>;
|
|
29
24
|
};
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
25
|
+
type OptimisticStoreLayer = OptimisticUpdaterStoreLayer | OptimisticNetworkResponseStoreLayer;
|
|
26
|
+
type OptimisticUpdaterStoreLayer = {
|
|
27
|
+
readonly kind: 'OptimisticUpdaterStoreLayer';
|
|
28
|
+
childStoreLayer: OptimisticStoreLayer | StartUpdateStoreLayer | NetworkResponseStoreLayer | null;
|
|
29
|
+
parentStoreLayer: OptimisticStoreLayer | StartUpdateStoreLayer | NetworkResponseStoreLayer | BaseStoreLayer;
|
|
30
|
+
data: StoreLayerData;
|
|
31
|
+
readonly startUpdate: DataUpdate<OptimisticUpdaterStoreLayer>;
|
|
37
32
|
};
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
33
|
+
type OptimisticNetworkResponseStoreLayer = {
|
|
34
|
+
readonly kind: 'OptimisticNetworkResponseStoreLayer';
|
|
35
|
+
childStoreLayer: OptimisticStoreLayer | StartUpdateStoreLayer | NetworkResponseStoreLayer | null;
|
|
36
|
+
parentStoreLayer: OptimisticStoreLayer | StartUpdateStoreLayer | NetworkResponseStoreLayer | BaseStoreLayer;
|
|
37
|
+
data: StoreLayerData;
|
|
43
38
|
};
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
export
|
|
48
|
-
/**
|
|
49
|
-
* Remove an optimistic store layer from the stack, potentially replacing it
|
|
50
|
-
* with a network response.
|
|
51
|
-
*
|
|
52
|
-
* After we do this, we must re-execute all child startUpdate and optimistic
|
|
53
|
-
* layers (since their data may have changed.) We also keep track of changed
|
|
54
|
-
* records, in order to call affected subscriptions.
|
|
55
|
-
*/
|
|
56
|
-
export declare function revertOptimisticStoreLayerAndMaybeReplace(environment: IsographEnvironment, optimisticNode: OptimisticStoreLayer, normalizeData: null | ((storeLayer: StoreLayerWithData) => void)): void;
|
|
57
|
-
export type StoreLayer = OptimisticStoreLayer | NetworkResponseStoreLayer | StartUpdateStoreLayer | BaseStoreLayer;
|
|
58
|
-
export type StoreLayerWithData = BaseStoreLayer | NetworkResponseStoreLayer | OptimisticNetworkResponseStoreLayer;
|
|
39
|
+
type StoreLayer = OptimisticStoreLayer | NetworkResponseStoreLayer | StartUpdateStoreLayer | BaseStoreLayer;
|
|
40
|
+
type StoreLayerWithData = BaseStoreLayer | NetworkResponseStoreLayer | OptimisticNetworkResponseStoreLayer;
|
|
41
|
+
//#endregion
|
|
42
|
+
export { StoreLayer, StoreLayerWithData };
|
|
59
43
|
//# sourceMappingURL=optimisticProxy.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"optimisticProxy.d.ts","
|
|
1
|
+
{"version":3,"file":"optimisticProxy.d.ts","names":[],"sources":["../../src/core/optimisticProxy.ts"],"sourcesContent":[],"mappings":";;;;AA8GiB,KAXL,cAAA,GAWK;EAAc,SAAA,IAAA,EAAA,gBAAA;EAGnB,eAAU,EAZH,oBAYwB,GAAA,IAAA;EAI/B,SAAA,gBAAqB,EAAA,IAAA;EAEd,SAAA,IAAA,EAhBF,kBAgBE;CAAuB;AACtB,KAdR,yBAAA,GAcQ;EAAuB,SAAA,IAAA,EAAA,2BAAA;EACnC,eAAA,EAbW,oBAaX,GAbkC,qBAalC,GAAA,IAAA;EACkB,gBAAA,EAbN,oBAaM,GAbiB,qBAajB;EAAwB,SAAA,IAAA,EAZjC,cAYiC;CAAnC;AAAU,KATb,UASa,CAAA,oBATkB,UASlB,CAAA,GAAA,CAAA,UAAA,EARX,WAQW,EAAA,GAAA,IAAA;AAGb,KARA,qBAAA,GAQoB;EAIpB,SAAA,IAAA,EAAA,uBAA2B;EAGjC,eAAA,EAba,oBAab,GAboC,yBAapC,GAAA,IAAA;EACA,gBAAA,EAbc,oBAad,GAbqC,yBAarC;EACA,IAAA,EAbE,cAaF;EAGA,WAAA,EAfS,UAeT,CAfoB,qBAepB,GAf4C,cAe5C,CAAA;CACA;AACA,KAdM,oBAAA,GACR,2BAaE,GAZF,mCAYE;AACA,KAXM,2BAAA,GAWN;EACE,SAAA,IAAA,EAAA,6BAAA;EAC2B,eAAA,EAV7B,oBAU6B,GAT7B,qBAS6B,GAR7B,yBAQ6B,GAAA,IAAA;EAAX,gBAAA,EALlB,oBAKkB,GAJlB,qBAIkB,GAHlB,yBAGkB,GAFlB,cAEkB;EAAU,IAAA,EAD1B,cAC0B;EAGtB,SAAA,WAAA,EAHY,UAGZ,CAHuB,2BAGY,CAAA;CAGzC;AACA,KAJM,mCAAA,GAIN;EACA,SAAA,IAAA,EAAA,qCAAA;EAGA,eAAA,EALA,oBAKA,GAJA,qBAIA,GAHA,yBAGA,GAAA,IAAA;EACA,gBAAA,EADA,oBACA,GAAA,qBAAA,GACA,yBADA,GAEA,cAFA;EACA,IAAA,EAEE,cAFF;CACA;KAkVM,UAAA,GACR,uBACA,4BACA,wBACA;KAEQ,kBAAA,GACR,iBACA,4BACA"}
|