@isograph/react 0.5.1 → 0.5.4
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 -6
- package/.turbo/turbo-tsc.log +5 -0
- package/dist/_virtual/{rolldown_runtime.js → rolldown_runtime.cjs} +10 -6
- package/dist/core/{FragmentReference.js → FragmentReference.cjs} +1 -1
- package/dist/core/{FragmentReference.d.ts → FragmentReference.d.cts} +5 -5
- package/dist/core/FragmentReference.d.cts.map +1 -0
- package/dist/core/FragmentReference.d.mts.map +1 -1
- package/dist/core/{IsographEnvironment.js → IsographEnvironment.cjs} +19 -9
- package/dist/core/{IsographEnvironment.d.ts → IsographEnvironment.d.cts} +19 -15
- package/dist/core/IsographEnvironment.d.cts.map +1 -0
- package/dist/core/IsographEnvironment.d.mts +9 -5
- package/dist/core/IsographEnvironment.d.mts.map +1 -1
- package/dist/core/IsographEnvironment.mjs +17 -7
- package/dist/core/IsographEnvironment.mjs.map +1 -1
- package/dist/core/{PromiseWrapper.d.ts → PromiseWrapper.d.cts} +1 -1
- package/dist/core/PromiseWrapper.d.cts.map +1 -0
- package/dist/core/PromiseWrapper.d.mts.map +1 -1
- package/dist/core/PromiseWrapper.mjs.map +1 -1
- package/dist/core/{areEqualWithDeepComparison.js → areEqualWithDeepComparison.cjs} +7 -7
- package/dist/core/areEqualWithDeepComparison.mjs +7 -7
- package/dist/core/areEqualWithDeepComparison.mjs.map +1 -1
- package/dist/core/{brand.d.ts → brand.d.cts} +2 -2
- package/dist/core/brand.d.cts.map +1 -0
- package/dist/core/brand.d.mts +1 -1
- package/dist/core/brand.d.mts.map +1 -1
- package/dist/core/{cache.js → cache.cjs} +16 -29
- package/dist/core/cache.d.cts +44 -0
- package/dist/core/cache.d.cts.map +1 -0
- package/dist/core/cache.d.mts +29 -4
- package/dist/core/cache.d.mts.map +1 -1
- package/dist/core/cache.mjs +9 -21
- package/dist/core/cache.mjs.map +1 -1
- package/dist/core/{check.js → check.cjs} +4 -4
- package/dist/core/{check.d.ts → check.d.cts} +4 -4
- package/dist/core/check.d.cts.map +1 -0
- package/dist/core/check.d.mts.map +1 -1
- package/dist/core/check.mjs.map +1 -1
- package/dist/core/{componentCache.js → componentCache.cjs} +2 -2
- package/dist/core/{entrypoint.d.ts → entrypoint.d.cts} +16 -9
- package/dist/core/entrypoint.d.cts.map +1 -0
- package/dist/core/entrypoint.d.mts +9 -2
- package/dist/core/entrypoint.d.mts.map +1 -1
- package/dist/core/entrypoint.mjs.map +1 -1
- package/dist/core/{garbageCollection.js → garbageCollection.cjs} +3 -3
- package/dist/core/{garbageCollection.d.ts → garbageCollection.d.cts} +4 -4
- package/dist/core/garbageCollection.d.cts.map +1 -0
- package/dist/core/garbageCollection.d.mts.map +1 -1
- package/dist/core/garbageCollection.mjs.map +1 -1
- package/dist/core/{getOrCreateCacheForArtifact.js → getOrCreateCacheForArtifact.cjs} +4 -4
- package/dist/core/getOrCreateCacheForArtifact.mjs.map +1 -1
- package/dist/core/{logging.d.ts → logging.d.cts} +9 -10
- package/dist/core/logging.d.cts.map +1 -0
- package/dist/core/logging.d.mts +0 -1
- package/dist/core/logging.d.mts.map +1 -1
- package/dist/core/{makeNetworkRequest.js → makeNetworkRequest.cjs} +21 -21
- package/dist/core/{makeNetworkRequest.d.ts → makeNetworkRequest.d.cts} +7 -7
- package/dist/core/makeNetworkRequest.d.cts.map +1 -0
- package/dist/core/makeNetworkRequest.d.mts.map +1 -1
- package/dist/core/makeNetworkRequest.mjs +10 -10
- package/dist/core/makeNetworkRequest.mjs.map +1 -1
- package/dist/core/{optimisticProxy.js → optimisticProxy.cjs} +2 -2
- package/dist/core/{optimisticProxy.d.ts → optimisticProxy.d.cts} +2 -3
- package/dist/core/optimisticProxy.d.cts.map +1 -0
- package/dist/core/optimisticProxy.d.mts +0 -1
- package/dist/core/optimisticProxy.d.mts.map +1 -1
- package/dist/core/optimisticProxy.mjs.map +1 -1
- package/dist/core/{read.js → read.cjs} +66 -63
- package/dist/core/{read.d.ts → read.d.cts} +4 -5
- package/dist/core/read.d.cts.map +1 -0
- package/dist/core/read.d.mts.map +1 -1
- package/dist/core/read.mjs +58 -55
- package/dist/core/read.mjs.map +1 -1
- package/dist/core/{reader.d.ts → reader.d.cts} +11 -9
- package/dist/core/reader.d.cts.map +1 -0
- package/dist/core/reader.d.mts +5 -3
- package/dist/core/reader.d.mts.map +1 -1
- package/dist/core/{startUpdate.js → startUpdate.cjs} +14 -14
- package/dist/core/startUpdate.mjs +6 -6
- package/dist/core/startUpdate.mjs.map +1 -1
- package/dist/core/{subscribe.js → subscribe.cjs} +3 -3
- package/dist/core/{subscribe.d.ts → subscribe.d.cts} +6 -6
- package/dist/core/subscribe.d.cts.map +1 -0
- package/dist/core/subscribe.d.mts.map +1 -1
- package/dist/core/subscribe.mjs.map +1 -1
- package/dist/core/{util.d.ts → util.d.cts} +1 -1
- package/dist/core/util.d.cts.map +1 -0
- package/dist/core/util.d.mts.map +1 -1
- package/dist/core/util.mjs.map +1 -1
- package/dist/core/{writeData.js → writeData.cjs} +6 -6
- package/dist/core/{writeData.d.ts → writeData.d.cts} +6 -6
- package/dist/core/writeData.d.cts.map +1 -0
- package/dist/core/writeData.d.mts +1 -1
- package/dist/core/writeData.d.mts.map +1 -1
- package/dist/core/writeData.mjs.map +1 -1
- package/dist/{index.js → index.cjs} +29 -29
- package/dist/index.d.cts +32 -0
- package/dist/index.d.mts +2 -2
- package/dist/loadable-hooks/useClientSideDefer.cjs +14 -0
- package/dist/loadable-hooks/{useClientSideDefer.d.ts → useClientSideDefer.d.cts} +4 -4
- package/dist/loadable-hooks/useClientSideDefer.d.cts.map +1 -0
- package/dist/loadable-hooks/useClientSideDefer.d.mts.map +1 -1
- package/dist/loadable-hooks/{useConnectionSpecPagination.js → useConnectionSpecPagination.cjs} +13 -16
- package/dist/loadable-hooks/{useConnectionSpecPagination.d.ts → useConnectionSpecPagination.d.cts} +4 -4
- package/dist/loadable-hooks/useConnectionSpecPagination.d.cts.map +1 -0
- package/dist/loadable-hooks/useConnectionSpecPagination.d.mts.map +1 -1
- package/dist/loadable-hooks/useConnectionSpecPagination.mjs.map +1 -1
- package/dist/loadable-hooks/{useImperativeExposedMutationField.d.ts → useImperativeExposedMutationField.d.cts} +1 -1
- package/dist/loadable-hooks/useImperativeExposedMutationField.d.cts.map +1 -0
- package/dist/loadable-hooks/useImperativeExposedMutationField.d.mts.map +1 -1
- package/dist/loadable-hooks/{useImperativeLoadableField.js → useImperativeLoadableField.cjs} +4 -5
- package/dist/loadable-hooks/{useImperativeLoadableField.d.ts → useImperativeLoadableField.d.cts} +4 -4
- package/dist/loadable-hooks/useImperativeLoadableField.d.cts.map +1 -0
- package/dist/loadable-hooks/useImperativeLoadableField.d.mts.map +1 -1
- package/dist/loadable-hooks/{useSkipLimitPagination.js → useSkipLimitPagination.cjs} +13 -16
- package/dist/loadable-hooks/{useSkipLimitPagination.d.ts → useSkipLimitPagination.d.cts} +4 -4
- package/dist/loadable-hooks/useSkipLimitPagination.d.cts.map +1 -0
- package/dist/loadable-hooks/useSkipLimitPagination.d.mts.map +1 -1
- package/dist/loadable-hooks/useSkipLimitPagination.mjs.map +1 -1
- package/dist/react/{FragmentReader.js → FragmentReader.cjs} +1 -1
- package/dist/react/{FragmentReader.d.ts → FragmentReader.d.cts} +5 -5
- package/dist/react/FragmentReader.d.cts.map +1 -0
- package/dist/react/FragmentReader.d.mts.map +1 -1
- package/dist/react/{FragmentRenderer.js → FragmentRenderer.cjs} +2 -2
- package/dist/react/{FragmentRenderer.d.ts → FragmentRenderer.d.cts} +5 -5
- package/dist/react/FragmentRenderer.d.cts.map +1 -0
- package/dist/react/FragmentRenderer.d.mts.map +1 -1
- package/dist/react/{IsographEnvironmentProvider.js → IsographEnvironmentProvider.cjs} +1 -1
- package/dist/react/{IsographEnvironmentProvider.d.ts → IsographEnvironmentProvider.d.cts} +2 -2
- package/dist/react/IsographEnvironmentProvider.d.cts.map +1 -0
- package/dist/react/IsographEnvironmentProvider.d.mts.map +1 -1
- package/dist/react/{LoadableFieldReader.js → LoadableFieldReader.cjs} +3 -3
- package/dist/react/{LoadableFieldReader.d.ts → LoadableFieldReader.d.cts} +5 -5
- package/dist/react/LoadableFieldReader.d.cts.map +1 -0
- package/dist/react/LoadableFieldReader.d.mts.map +1 -1
- package/dist/react/{LoadableFieldRenderer.js → LoadableFieldRenderer.cjs} +3 -3
- package/dist/react/{LoadableFieldRenderer.d.ts → LoadableFieldRenderer.d.cts} +5 -5
- package/dist/react/LoadableFieldRenderer.d.cts.map +1 -0
- package/dist/react/LoadableFieldRenderer.d.mts.map +1 -1
- package/dist/react/{RenderAfterCommit__DO_NOT_USE.js → RenderAfterCommit__DO_NOT_USE.cjs} +1 -2
- package/dist/react/{RenderAfterCommit__DO_NOT_USE.d.ts → RenderAfterCommit__DO_NOT_USE.d.cts} +1 -2
- package/dist/react/RenderAfterCommit__DO_NOT_USE.d.cts.map +1 -0
- package/dist/react/RenderAfterCommit__DO_NOT_USE.d.mts +0 -1
- package/dist/react/RenderAfterCommit__DO_NOT_USE.d.mts.map +1 -1
- package/dist/react/{createIsographEnvironment.js → createIsographEnvironment.cjs} +2 -2
- package/dist/react/{createIsographEnvironment.d.ts → createIsographEnvironment.d.cts} +3 -3
- package/dist/react/createIsographEnvironment.d.cts.map +1 -0
- package/dist/react/createIsographEnvironment.d.mts +0 -1
- package/dist/react/createIsographEnvironment.d.mts.map +1 -1
- package/dist/react/{maybeUnwrapNetworkRequest.js → maybeUnwrapNetworkRequest.cjs} +1 -1
- package/dist/react/{useImperativeReference.js → useImperativeReference.cjs} +7 -8
- package/dist/react/{useImperativeReference.d.ts → useImperativeReference.d.cts} +5 -6
- package/dist/react/useImperativeReference.d.cts.map +1 -0
- package/dist/react/useImperativeReference.d.mts +0 -1
- package/dist/react/useImperativeReference.d.mts.map +1 -1
- package/dist/react/useLazyReference.cjs +18 -0
- package/dist/react/{useLazyReference.d.ts → useLazyReference.d.cts} +5 -6
- package/dist/react/useLazyReference.d.cts.map +1 -0
- package/dist/react/useLazyReference.d.mts +0 -1
- package/dist/react/useLazyReference.d.mts.map +1 -1
- package/dist/react/{useReadAndSubscribe.js → useReadAndSubscribe.cjs} +9 -10
- package/dist/react/{useReadAndSubscribe.d.ts → useReadAndSubscribe.d.cts} +4 -5
- package/dist/react/useReadAndSubscribe.d.cts.map +1 -0
- package/dist/react/useReadAndSubscribe.d.mts +0 -1
- package/dist/react/useReadAndSubscribe.d.mts.map +1 -1
- package/dist/react/useReadAndSubscribe.mjs.map +1 -1
- package/dist/react/{useRerenderOnChange.js → useRerenderOnChange.cjs} +3 -4
- package/dist/react/{useRerenderOnChange.d.ts → useRerenderOnChange.d.cts} +4 -4
- package/dist/react/useRerenderOnChange.d.cts.map +1 -0
- package/dist/react/useRerenderOnChange.d.mts.map +1 -1
- package/dist/react/{useResult.js → useResult.cjs} +7 -7
- package/dist/react/{useResult.d.ts → useResult.d.cts} +3 -3
- package/dist/react/useResult.d.cts.map +1 -0
- package/dist/react/useResult.d.mts.map +1 -1
- package/package.json +9 -9
- package/src/core/IsographEnvironment.ts +47 -22
- package/src/core/cache.ts +76 -55
- package/src/core/entrypoint.ts +18 -2
- package/src/core/getOrCreateCacheForArtifact.ts +2 -2
- package/src/core/makeNetworkRequest.ts +10 -12
- package/src/core/read.ts +21 -19
- package/src/core/reader.ts +9 -5
- package/src/core/writeData.ts +4 -4
- package/src/index.ts +2 -1
- package/src/tests/__isograph/Economist/__link/output_type.ts +2 -1
- package/src/tests/__isograph/Node/asEconomist/resolver_reader.ts +4 -3
- package/src/tests/__isograph/Query/linkedUpdate/normalization_ast.ts +12 -0
- package/src/tests/__isograph/Query/linkedUpdate/resolver_reader.ts +9 -3
- package/src/tests/__isograph/Query/meName/normalization_ast.ts +3 -0
- package/src/tests/__isograph/Query/meName/resolver_reader.ts +5 -3
- package/src/tests/__isograph/Query/meNameSuccessor/normalization_ast.ts +8 -0
- package/src/tests/__isograph/Query/meNameSuccessor/resolver_reader.ts +8 -3
- package/src/tests/__isograph/Query/nodeField/normalization_ast.ts +3 -0
- package/src/tests/__isograph/Query/nodeField/raw_response_type.ts +1 -1
- package/src/tests/__isograph/Query/nodeField/resolver_reader.ts +5 -3
- package/src/tests/__isograph/Query/normalizeUndefinedField/normalization_ast.ts +3 -0
- package/src/tests/__isograph/Query/normalizeUndefinedField/resolver_reader.ts +5 -3
- package/src/tests/__isograph/Query/startUpdate/normalization_ast.ts +6 -0
- package/src/tests/__isograph/Query/startUpdate/resolver_reader.ts +6 -3
- package/src/tests/__isograph/Query/subquery/normalization_ast.ts +4 -0
- package/src/tests/__isograph/Query/subquery/raw_response_type.ts +1 -1
- package/src/tests/__isograph/Query/subquery/resolver_reader.ts +6 -3
- package/src/tests/garbageCollection.test.ts +11 -11
- package/src/tests/normalizeData.test.ts +11 -3
- package/src/tests/optimisticProxy.test.ts +23 -23
- package/src/tests/startUpdate.test.ts +2 -2
- package/tsconfig.json +5 -4
- package/tsconfig.package.json +8 -0
- package/tsconfig.test.json +12 -0
- package/tsdown.config.ts +8 -0
- package/vitest.config.ts +1 -1
- package/dist/core/FragmentReference.d.ts.map +0 -1
- package/dist/core/IsographEnvironment.d.ts.map +0 -1
- package/dist/core/PromiseWrapper.d.ts.map +0 -1
- package/dist/core/brand.d.ts.map +0 -1
- package/dist/core/cache.d.ts +0 -20
- package/dist/core/cache.d.ts.map +0 -1
- package/dist/core/check.d.ts.map +0 -1
- package/dist/core/entrypoint.d.ts.map +0 -1
- package/dist/core/garbageCollection.d.ts.map +0 -1
- package/dist/core/logging.d.ts.map +0 -1
- package/dist/core/makeNetworkRequest.d.ts.map +0 -1
- package/dist/core/optimisticProxy.d.ts.map +0 -1
- package/dist/core/read.d.ts.map +0 -1
- package/dist/core/reader.d.ts.map +0 -1
- package/dist/core/subscribe.d.ts.map +0 -1
- package/dist/core/util.d.ts.map +0 -1
- package/dist/core/writeData.d.ts.map +0 -1
- package/dist/index.d.ts +0 -32
- package/dist/loadable-hooks/useClientSideDefer.d.ts.map +0 -1
- package/dist/loadable-hooks/useClientSideDefer.js +0 -15
- package/dist/loadable-hooks/useConnectionSpecPagination.d.ts.map +0 -1
- package/dist/loadable-hooks/useImperativeExposedMutationField.d.ts.map +0 -1
- package/dist/loadable-hooks/useImperativeLoadableField.d.ts.map +0 -1
- package/dist/loadable-hooks/useSkipLimitPagination.d.ts.map +0 -1
- package/dist/react/FragmentReader.d.ts.map +0 -1
- package/dist/react/FragmentRenderer.d.ts.map +0 -1
- package/dist/react/IsographEnvironmentProvider.d.ts.map +0 -1
- package/dist/react/LoadableFieldReader.d.ts.map +0 -1
- package/dist/react/LoadableFieldRenderer.d.ts.map +0 -1
- package/dist/react/RenderAfterCommit__DO_NOT_USE.d.ts.map +0 -1
- package/dist/react/createIsographEnvironment.d.ts.map +0 -1
- package/dist/react/useImperativeReference.d.ts.map +0 -1
- package/dist/react/useLazyReference.d.ts.map +0 -1
- package/dist/react/useLazyReference.js +0 -19
- package/dist/react/useReadAndSubscribe.d.ts.map +0 -1
- package/dist/react/useRerenderOnChange.d.ts.map +0 -1
- package/dist/react/useResult.d.ts.map +0 -1
- package/src/tests/tsconfig.json +0 -21
- package/tsconfig.pkg.json +0 -16
- /package/dist/core/{PromiseWrapper.js → PromiseWrapper.cjs} +0 -0
- /package/dist/core/{entrypoint.js → entrypoint.cjs} +0 -0
- /package/dist/core/{logging.js → logging.cjs} +0 -0
- /package/dist/core/{util.js → util.cjs} +0 -0
- /package/dist/loadable-hooks/{useImperativeExposedMutationField.js → useImperativeExposedMutationField.cjs} +0 -0
package/dist/core/read.mjs
CHANGED
|
@@ -57,7 +57,7 @@ function readData(environment, ast, root, variables, nestedRefetchQueries, netwo
|
|
|
57
57
|
target[field.alias] = root;
|
|
58
58
|
break;
|
|
59
59
|
case "Linked": {
|
|
60
|
-
const data = readLinkedFieldData(environment, field, storeRecord, root, variables, nestedRefetchQueries, networkRequest, networkRequestOptions, (ast
|
|
60
|
+
const data = readLinkedFieldData(environment, field, storeRecord, root, variables, nestedRefetchQueries, networkRequest, networkRequestOptions, (ast, root) => readData(environment, ast, root, variables, nestedRefetchQueries, networkRequest, networkRequestOptions, mutableEncounteredRecords));
|
|
61
61
|
if (data.kind === "MissingData") return data;
|
|
62
62
|
target[field.alias ?? field.fieldName] = data.data;
|
|
63
63
|
break;
|
|
@@ -97,16 +97,16 @@ function readLoadablySelectedFieldData(environment, field, root, variables, netw
|
|
|
97
97
|
return {
|
|
98
98
|
kind: "Success",
|
|
99
99
|
data: (args, fetchOptions) => {
|
|
100
|
-
const includeReadOutData = (variables
|
|
101
|
-
variables
|
|
102
|
-
return variables
|
|
100
|
+
const includeReadOutData = (variables, readOutData) => {
|
|
101
|
+
variables.id = readOutData.id;
|
|
102
|
+
return variables;
|
|
103
103
|
};
|
|
104
104
|
const localVariables = includeReadOutData(args ?? {}, refetchReaderParams.data);
|
|
105
105
|
writeQueryArgsToVariables(localVariables, field.queryArguments, variables);
|
|
106
106
|
return [root.__typename + ":" + root.__link + "/" + field.name + "/" + stableStringifyArgs(localVariables), () => {
|
|
107
107
|
const fragmentReferenceAndDisposeFromEntrypoint = (entrypoint) => {
|
|
108
108
|
const { fieldName, readerArtifactKind, readerWithRefetchQueries } = getOrLoadReaderWithRefetchQueries(environment, entrypoint.readerWithRefetchQueries);
|
|
109
|
-
const [networkRequest
|
|
109
|
+
const [networkRequest, disposeNetworkRequest] = maybeMakeNetworkRequest(environment, entrypoint, localVariables, readerWithRefetchQueries, fetchOptions ?? null);
|
|
110
110
|
return [{
|
|
111
111
|
kind: "FragmentReference",
|
|
112
112
|
readerWithRefetchQueries,
|
|
@@ -114,7 +114,7 @@ function readLoadablySelectedFieldData(environment, field, root, variables, netw
|
|
|
114
114
|
readerArtifactKind,
|
|
115
115
|
root,
|
|
116
116
|
variables: localVariables,
|
|
117
|
-
networkRequest
|
|
117
|
+
networkRequest
|
|
118
118
|
}, disposeNetworkRequest];
|
|
119
119
|
};
|
|
120
120
|
if (field.entrypoint.kind === "Entrypoint") return fragmentReferenceAndDisposeFromEntrypoint(field.entrypoint);
|
|
@@ -125,14 +125,14 @@ function readLoadablySelectedFieldData(environment, field, root, variables, netw
|
|
|
125
125
|
else {
|
|
126
126
|
let entrypointLoaderState = { kind: "EntrypointNotLoaded" };
|
|
127
127
|
const readerWithRefetchQueries = wrapPromise(isographArtifactPromiseWrapper.promise.then((entrypoint) => getOrLoadReaderWithRefetchQueries(environment, entrypoint.readerWithRefetchQueries).readerWithRefetchQueries.promise));
|
|
128
|
-
const networkRequest
|
|
128
|
+
const networkRequest = wrapPromise(isographArtifactPromiseWrapper.promise.then((entrypoint) => {
|
|
129
129
|
if (entrypointLoaderState.kind === "EntrypointNotLoaded") {
|
|
130
|
-
const [networkRequest
|
|
130
|
+
const [networkRequest, disposeNetworkRequest] = maybeMakeNetworkRequest(environment, entrypoint, localVariables, readerWithRefetchQueries, fetchOptions ?? null);
|
|
131
131
|
entrypointLoaderState = {
|
|
132
132
|
kind: "NetworkRequestStarted",
|
|
133
133
|
disposeNetworkRequest
|
|
134
134
|
};
|
|
135
|
-
return networkRequest
|
|
135
|
+
return networkRequest.promise;
|
|
136
136
|
}
|
|
137
137
|
}));
|
|
138
138
|
return [{
|
|
@@ -142,7 +142,7 @@ function readLoadablySelectedFieldData(environment, field, root, variables, netw
|
|
|
142
142
|
readerArtifactKind: field.entrypoint.readerArtifactKind,
|
|
143
143
|
root,
|
|
144
144
|
variables: localVariables,
|
|
145
|
-
networkRequest
|
|
145
|
+
networkRequest
|
|
146
146
|
}, () => {
|
|
147
147
|
if (entrypointLoaderState.kind === "NetworkRequestStarted") entrypointLoaderState.disposeNetworkRequest();
|
|
148
148
|
entrypointLoaderState = { kind: "Disposed" };
|
|
@@ -194,22 +194,23 @@ function readResolverFieldData(environment, field, root, variables, nestedRefetc
|
|
|
194
194
|
if (resolverRefetchQuery == null) throw new Error("resolverRefetchQuery is null in Resolver. This is indicative of a bug in Isograph.");
|
|
195
195
|
return resolverRefetchQuery;
|
|
196
196
|
});
|
|
197
|
+
const readerWithRefetchQueries = {
|
|
198
|
+
kind: "ReaderWithRefetchQueries",
|
|
199
|
+
readerArtifact: field.readerArtifact(),
|
|
200
|
+
nestedRefetchQueries: resolverRefetchQueries
|
|
201
|
+
};
|
|
197
202
|
const fragment = {
|
|
198
203
|
kind: "FragmentReference",
|
|
199
|
-
readerWithRefetchQueries: wrapResolvedValue(
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
nestedRefetchQueries: resolverRefetchQueries
|
|
203
|
-
}),
|
|
204
|
-
fieldName: field.readerArtifact.fieldName,
|
|
205
|
-
readerArtifactKind: field.readerArtifact.kind,
|
|
204
|
+
readerWithRefetchQueries: wrapResolvedValue(readerWithRefetchQueries),
|
|
205
|
+
fieldName: readerWithRefetchQueries.readerArtifact.fieldName,
|
|
206
|
+
readerArtifactKind: readerWithRefetchQueries.readerArtifact.kind,
|
|
206
207
|
root,
|
|
207
208
|
variables: generateChildVariableMap(variables, field.arguments),
|
|
208
209
|
networkRequest
|
|
209
210
|
};
|
|
210
|
-
switch (
|
|
211
|
+
switch (readerWithRefetchQueries.readerArtifact.kind) {
|
|
211
212
|
case "EagerReaderArtifact": {
|
|
212
|
-
const data = readData(environment,
|
|
213
|
+
const data = readData(environment, readerWithRefetchQueries.readerArtifact.readerAst, root, generateChildVariableMap(variables, field.arguments), resolverRefetchQueries, networkRequest, networkRequestOptions, mutableEncounteredRecords);
|
|
213
214
|
if (data.kind === "MissingData") return {
|
|
214
215
|
kind: "MissingData",
|
|
215
216
|
reason: "Missing data for " + field.alias + " on root " + root.__link,
|
|
@@ -219,11 +220,11 @@ function readResolverFieldData(environment, field, root, variables, nestedRefetc
|
|
|
219
220
|
const firstParameter = {
|
|
220
221
|
data: data.data,
|
|
221
222
|
parameters: variables,
|
|
222
|
-
startUpdate:
|
|
223
|
+
startUpdate: readerWithRefetchQueries.readerArtifact.hasUpdatable ? getOrCreateCachedStartUpdate(environment, fragment, networkRequestOptions) : void 0
|
|
223
224
|
};
|
|
224
225
|
return {
|
|
225
226
|
kind: "Success",
|
|
226
|
-
data:
|
|
227
|
+
data: readerWithRefetchQueries.readerArtifact.resolver(firstParameter)
|
|
227
228
|
};
|
|
228
229
|
}
|
|
229
230
|
case "ComponentReaderArtifact": return {
|
|
@@ -245,61 +246,62 @@ function readScalarFieldData(field, storeRecord, root, variables) {
|
|
|
245
246
|
data: value
|
|
246
247
|
};
|
|
247
248
|
}
|
|
248
|
-
function readLinkedFieldData(environment, field, storeRecord, root, variables, nestedRefetchQueries, networkRequest, networkRequestOptions, readData
|
|
249
|
+
function readLinkedFieldData(environment, field, storeRecord, root, variables, nestedRefetchQueries, networkRequest, networkRequestOptions, readData) {
|
|
249
250
|
const storeRecordName = getParentRecordKey(field, variables);
|
|
250
251
|
let value = storeRecord[storeRecordName];
|
|
251
252
|
if (field.condition != null) {
|
|
252
|
-
const
|
|
253
|
-
|
|
253
|
+
const condition = field.condition();
|
|
254
|
+
const data = readData(condition.readerAst, root);
|
|
255
|
+
if (data.kind === "MissingData") return {
|
|
254
256
|
kind: "MissingData",
|
|
255
257
|
reason: "Missing data for " + storeRecordName + " on root " + root.__link,
|
|
256
|
-
nestedReason: data
|
|
257
|
-
recordLink: data
|
|
258
|
+
nestedReason: data,
|
|
259
|
+
recordLink: data.recordLink
|
|
258
260
|
};
|
|
259
261
|
const fragment = {
|
|
260
262
|
kind: "FragmentReference",
|
|
261
263
|
readerWithRefetchQueries: wrapResolvedValue({
|
|
262
264
|
kind: "ReaderWithRefetchQueries",
|
|
263
|
-
readerArtifact:
|
|
265
|
+
readerArtifact: condition,
|
|
264
266
|
nestedRefetchQueries: []
|
|
265
267
|
}),
|
|
266
268
|
root,
|
|
267
|
-
fieldName:
|
|
268
|
-
readerArtifactKind:
|
|
269
|
+
fieldName: condition.fieldName,
|
|
270
|
+
readerArtifactKind: condition.kind,
|
|
269
271
|
variables: generateChildVariableMap(variables, []),
|
|
270
272
|
networkRequest
|
|
271
273
|
};
|
|
272
|
-
value =
|
|
273
|
-
data: data
|
|
274
|
+
value = condition.resolver({
|
|
275
|
+
data: data.data,
|
|
274
276
|
parameters: {},
|
|
275
|
-
...
|
|
277
|
+
...condition.hasUpdatable ? { startUpdate: getOrCreateCachedStartUpdate(environment, fragment, networkRequestOptions) } : void 0
|
|
276
278
|
});
|
|
277
279
|
}
|
|
278
280
|
if (Array.isArray(value)) {
|
|
279
281
|
const results = [];
|
|
280
282
|
for (const item of value) {
|
|
281
|
-
const link
|
|
282
|
-
if (link
|
|
283
|
+
const link = assertLink(item);
|
|
284
|
+
if (link === void 0) return {
|
|
283
285
|
kind: "MissingData",
|
|
284
286
|
reason: "No link for " + storeRecordName + " on root " + root.__link + ". Link is " + JSON.stringify(item),
|
|
285
287
|
recordLink: root
|
|
286
288
|
};
|
|
287
|
-
else if (link
|
|
289
|
+
else if (link == null) {
|
|
288
290
|
results.push(null);
|
|
289
291
|
continue;
|
|
290
292
|
}
|
|
291
293
|
if (isClientPointer(field)) {
|
|
292
|
-
const result
|
|
293
|
-
if (result
|
|
294
|
+
const result = readClientPointerData(environment, field, link, variables, nestedRefetchQueries, readData);
|
|
295
|
+
if (result.kind === "MissingData") return {
|
|
294
296
|
kind: "MissingData",
|
|
295
297
|
reason: "Missing data for " + storeRecordName + " on root " + root.__link + ". Link is " + JSON.stringify(item),
|
|
296
|
-
nestedReason: result
|
|
297
|
-
recordLink: result
|
|
298
|
+
nestedReason: result,
|
|
299
|
+
recordLink: result.recordLink
|
|
298
300
|
};
|
|
299
|
-
results.push(result
|
|
301
|
+
results.push(result.data);
|
|
300
302
|
continue;
|
|
301
303
|
}
|
|
302
|
-
const result = readData
|
|
304
|
+
const result = readData(field.selections, link);
|
|
303
305
|
if (result.kind === "MissingData") return {
|
|
304
306
|
kind: "MissingData",
|
|
305
307
|
reason: "Missing data for " + storeRecordName + " on root " + root.__link + ". Link is " + JSON.stringify(item),
|
|
@@ -336,16 +338,16 @@ function readLinkedFieldData(environment, field, storeRecord, root, variables, n
|
|
|
336
338
|
data: null
|
|
337
339
|
};
|
|
338
340
|
if (isClientPointer(field)) {
|
|
339
|
-
const data
|
|
340
|
-
if (data
|
|
341
|
+
const data = readClientPointerData(environment, field, link, variables, nestedRefetchQueries, readData);
|
|
342
|
+
if (data.kind === "MissingData") return {
|
|
341
343
|
kind: "MissingData",
|
|
342
344
|
reason: "Missing data for " + storeRecordName + " on root " + root.__link,
|
|
343
|
-
nestedReason: data
|
|
344
|
-
recordLink: data
|
|
345
|
+
nestedReason: data,
|
|
346
|
+
recordLink: data.recordLink
|
|
345
347
|
};
|
|
346
|
-
return data
|
|
348
|
+
return data;
|
|
347
349
|
}
|
|
348
|
-
const data = readData
|
|
350
|
+
const data = readData(field.selections, link);
|
|
349
351
|
if (data.kind === "MissingData") return {
|
|
350
352
|
kind: "MissingData",
|
|
351
353
|
reason: "Missing data for " + storeRecordName + " on root " + root.__link,
|
|
@@ -357,9 +359,10 @@ function readLinkedFieldData(environment, field, storeRecord, root, variables, n
|
|
|
357
359
|
function isClientPointer(field) {
|
|
358
360
|
return field.refetchQueryIndex != null;
|
|
359
361
|
}
|
|
360
|
-
function readClientPointerData(environment, field, root, variables, nestedRefetchQueries, readData
|
|
361
|
-
const refetchReaderParams = readData
|
|
362
|
+
function readClientPointerData(environment, field, root, variables, nestedRefetchQueries, readData) {
|
|
363
|
+
const refetchReaderParams = readData([{
|
|
362
364
|
kind: "Scalar",
|
|
365
|
+
isFallible: false,
|
|
363
366
|
fieldName: "id",
|
|
364
367
|
alias: null,
|
|
365
368
|
arguments: null,
|
|
@@ -378,14 +381,14 @@ function readClientPointerData(environment, field, root, variables, nestedRefetc
|
|
|
378
381
|
return {
|
|
379
382
|
kind: "Success",
|
|
380
383
|
data: (args, fetchOptions) => {
|
|
381
|
-
const includeReadOutData = (variables
|
|
382
|
-
variables
|
|
383
|
-
return variables
|
|
384
|
+
const includeReadOutData = (variables, readOutData) => {
|
|
385
|
+
variables.id = readOutData.id;
|
|
386
|
+
return variables;
|
|
384
387
|
};
|
|
385
388
|
const localVariables = includeReadOutData(args ?? {}, refetchReaderParams.data);
|
|
386
389
|
writeQueryArgsToVariables(localVariables, field.arguments, variables);
|
|
387
390
|
return [root.__typename + ":" + root.__link + "/" + field.fieldName + "/" + stableStringifyArgs(localVariables), () => {
|
|
388
|
-
const variables
|
|
391
|
+
const variables = includeReadOutData(filterVariables({
|
|
389
392
|
...args,
|
|
390
393
|
...localVariables
|
|
391
394
|
}, allowedVariables), refetchReaderParams.data);
|
|
@@ -400,14 +403,14 @@ function readClientPointerData(environment, field, root, variables, nestedRefetc
|
|
|
400
403
|
},
|
|
401
404
|
nestedRefetchQueries
|
|
402
405
|
});
|
|
403
|
-
const [networkRequest, disposeNetworkRequest] = maybeMakeNetworkRequest(environment, refetchQueryArtifact, variables
|
|
406
|
+
const [networkRequest, disposeNetworkRequest] = maybeMakeNetworkRequest(environment, refetchQueryArtifact, variables, readerWithRefetchQueries, fetchOptions ?? null);
|
|
404
407
|
return [{
|
|
405
408
|
kind: "FragmentReference",
|
|
406
409
|
fieldName: field.fieldName,
|
|
407
410
|
readerArtifactKind: "EagerReaderArtifact",
|
|
408
411
|
readerWithRefetchQueries,
|
|
409
412
|
root,
|
|
410
|
-
variables
|
|
413
|
+
variables,
|
|
411
414
|
networkRequest
|
|
412
415
|
}, disposeNetworkRequest];
|
|
413
416
|
}];
|
package/dist/core/read.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read.mjs","names":["mutableEncounteredRecords: EncounteredIds","target: { [index: string]: any }","ast","root","variables","networkRequest","entrypointLoaderState:\n | {\n kind: 'EntrypointNotLoaded';\n }\n | {\n kind: 'NetworkRequestStarted';\n disposeNetworkRequest: CleanupFn;\n }\n | { kind: 'Disposed' }","result: Variables","childVars: Writable<Variables>","data","readData","link","result"],"sources":["../../src/core/read.ts"],"sourcesContent":["import type { CleanupFn, ItemCleanupPair } from '@isograph/disposable-types';\nimport {\n getParentRecordKey,\n insertEmptySetIfMissing,\n onNextChangeToRecord,\n type EncounteredIds,\n} from './cache';\nimport type { FetchOptions } from './check';\nimport { getOrCreateCachedComponent } from './componentCache';\nimport type {\n IsographEntrypoint,\n ReaderWithRefetchQueries,\n RefetchQueryNormalizationArtifactWrapper,\n} from './entrypoint';\nimport type {\n ExtractData,\n FragmentReference,\n UnknownTReadFromStore,\n Variables,\n} from './FragmentReference';\nimport type { IsographEnvironment } from './IsographEnvironment';\nimport {\n assertLink,\n getOrLoadIsographArtifact,\n getOrLoadReaderWithRefetchQueries,\n type DataTypeValue,\n type StoreLink,\n type StoreRecord,\n} from './IsographEnvironment';\nimport { logMessage } from './logging';\nimport { maybeMakeNetworkRequest } from './makeNetworkRequest';\nimport { getStoreRecordProxy } from './optimisticProxy';\nimport type { PromiseWrapper } from './PromiseWrapper';\nimport {\n getPromiseState,\n NOT_SET,\n readPromise,\n wrapPromise,\n wrapResolvedValue,\n} from './PromiseWrapper';\nimport type {\n LoadablySelectedField,\n ReaderAst,\n ReaderClientPointer,\n ReaderImperativelyLoadedField,\n ReaderLinkedField,\n ReaderNonLoadableResolverField,\n ReaderScalarField,\n} from './reader';\nimport { getOrCreateCachedStartUpdate } from './startUpdate';\nimport type { Arguments } from './util';\n\nexport type WithEncounteredRecords<T> = {\n readonly encounteredRecords: EncounteredIds;\n readonly item: ExtractData<T>;\n};\n\nexport function readButDoNotEvaluate<\n TReadFromStore extends UnknownTReadFromStore,\n>(\n environment: IsographEnvironment,\n fragmentReference: FragmentReference<TReadFromStore, unknown>,\n networkRequestOptions: NetworkRequestReaderOptions,\n): WithEncounteredRecords<TReadFromStore> {\n const mutableEncounteredRecords: EncounteredIds = new Map();\n\n // TODO consider moving this to the outside\n const readerWithRefetchQueries = readPromise(\n fragmentReference.readerWithRefetchQueries,\n );\n\n const response = readData(\n environment,\n readerWithRefetchQueries.readerArtifact.readerAst,\n fragmentReference.root,\n fragmentReference.variables ?? {},\n readerWithRefetchQueries.nestedRefetchQueries,\n fragmentReference.networkRequest,\n networkRequestOptions,\n mutableEncounteredRecords,\n );\n\n logMessage(environment, () => ({\n kind: 'DoneReading',\n response,\n fieldName: readerWithRefetchQueries.readerArtifact.fieldName,\n root: fragmentReference.root,\n }));\n\n if (response.kind === 'MissingData') {\n // There are two cases here that we care about:\n // 1. the network request is in flight, we haven't suspended on it, and we want\n // to throw if it errors out. So, networkRequestOptions.suspendIfInFlight === false\n // and networkRequestOptions.throwOnNetworkError === true.\n // 2. everything else\n //\n // In the first case, we cannot simply throw onNextChange, because if the network\n // response errors out, we will not update the store, so the onNextChange promise\n // will not resolve.\n if (\n !networkRequestOptions.suspendIfInFlight &&\n networkRequestOptions.throwOnNetworkError\n ) {\n // What are we doing here? If the network response has errored out, we can do\n // two things: throw a rejected promise, or throw an error. Both work identically\n // in the browser. However, during initial SSR on NextJS, throwing a rejected\n // promise results in an infinite loop (including re-issuing the query until the\n // process OOM's or something.) Hence, we throw an error.\n\n const result = fragmentReference.networkRequest.result;\n if (result !== NOT_SET && result.kind === 'Err') {\n throw new Error('NetworkError', { cause: result.error });\n }\n\n throw new Promise((resolve, reject) => {\n onNextChangeToRecord(environment, response.recordLink).then(resolve);\n fragmentReference.networkRequest.promise.catch(reject);\n });\n }\n throw onNextChangeToRecord(environment, response.recordLink);\n } else {\n return {\n encounteredRecords: mutableEncounteredRecords,\n item: response.data,\n };\n }\n}\n\nexport type ReadDataResultSuccess<Data> = {\n readonly kind: 'Success';\n readonly data: Data;\n};\n\nexport type ReadDataResult<Data> =\n | ReadDataResultSuccess<Data>\n | {\n readonly kind: 'MissingData';\n readonly reason: string;\n readonly nestedReason?: ReadDataResult<unknown>;\n readonly recordLink: StoreLink;\n };\n\nfunction readData<TReadFromStore>(\n environment: IsographEnvironment,\n ast: ReaderAst<TReadFromStore>,\n root: StoreLink,\n variables: Variables,\n nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[],\n networkRequest: PromiseWrapper<void, any>,\n networkRequestOptions: NetworkRequestReaderOptions,\n mutableEncounteredRecords: EncounteredIds,\n): ReadDataResult<ExtractData<TReadFromStore>> {\n const encounteredIds = insertEmptySetIfMissing(\n mutableEncounteredRecords,\n root.__typename,\n );\n encounteredIds.add(root.__link);\n let storeRecord = getStoreRecordProxy(environment.store, root);\n if (storeRecord === undefined) {\n return {\n kind: 'MissingData',\n reason: 'No record for root ' + root.__link,\n recordLink: root,\n };\n }\n\n if (storeRecord == null) {\n return {\n kind: 'Success',\n data: null as any,\n };\n }\n\n let target: { [index: string]: any } = {};\n\n for (const field of ast) {\n switch (field.kind) {\n case 'Scalar': {\n const data = readScalarFieldData(field, storeRecord, root, variables);\n\n if (data.kind === 'MissingData') {\n return data;\n }\n target[field.alias ?? field.fieldName] = data.data;\n break;\n }\n case 'Link': {\n target[field.alias] = root;\n break;\n }\n case 'Linked': {\n const data = readLinkedFieldData(\n environment,\n field,\n storeRecord,\n root,\n variables,\n nestedRefetchQueries,\n networkRequest,\n networkRequestOptions,\n (ast, root) =>\n readData(\n environment,\n ast,\n root,\n variables,\n nestedRefetchQueries,\n networkRequest,\n networkRequestOptions,\n mutableEncounteredRecords,\n ),\n );\n if (data.kind === 'MissingData') {\n return data;\n }\n target[field.alias ?? field.fieldName] = data.data;\n break;\n }\n case 'ImperativelyLoadedField': {\n const data = readImperativelyLoadedField(\n environment,\n field,\n root,\n variables,\n nestedRefetchQueries,\n networkRequest,\n networkRequestOptions,\n mutableEncounteredRecords,\n );\n if (data.kind === 'MissingData') {\n return data;\n }\n target[field.alias] = data.data;\n break;\n }\n case 'Resolver': {\n const data = readResolverFieldData(\n environment,\n field,\n root,\n variables,\n nestedRefetchQueries,\n networkRequest,\n networkRequestOptions,\n mutableEncounteredRecords,\n );\n if (data.kind === 'MissingData') {\n return data;\n }\n target[field.alias] = data.data;\n break;\n }\n case 'LoadablySelectedField': {\n const data = readLoadablySelectedFieldData(\n environment,\n field,\n root,\n variables,\n networkRequest,\n networkRequestOptions,\n mutableEncounteredRecords,\n );\n if (data.kind === 'MissingData') {\n return data;\n }\n target[field.alias] = data.data;\n break;\n }\n }\n }\n return {\n kind: 'Success',\n data: target as any,\n };\n}\n\nexport function readLoadablySelectedFieldData(\n environment: IsographEnvironment,\n field: LoadablySelectedField,\n root: StoreLink,\n variables: Variables,\n networkRequest: PromiseWrapper<void, any>,\n networkRequestOptions: NetworkRequestReaderOptions,\n mutableEncounteredRecords: EncounteredIds,\n): ReadDataResult<unknown> {\n const refetchReaderParams = readData(\n environment,\n field.refetchReaderAst,\n root,\n variables,\n // Refetch fields just read the id, and don't need refetch query artifacts\n [],\n networkRequest,\n networkRequestOptions,\n mutableEncounteredRecords,\n );\n\n if (refetchReaderParams.kind === 'MissingData') {\n return {\n kind: 'MissingData',\n reason: 'Missing data for ' + field.alias + ' on root ' + root.__link,\n nestedReason: refetchReaderParams,\n recordLink: refetchReaderParams.recordLink,\n };\n }\n\n return {\n kind: 'Success',\n data: (\n args: any,\n // TODO get the associated type for FetchOptions from the loadably selected field\n fetchOptions?: FetchOptions<any, never>,\n ) => {\n // TODO we should use the reader AST for this\n const includeReadOutData = (variables: any, readOutData: any) => {\n variables.id = readOutData.id;\n return variables;\n };\n const localVariables = includeReadOutData(\n args ?? {},\n refetchReaderParams.data,\n );\n writeQueryArgsToVariables(\n localVariables,\n field.queryArguments,\n variables,\n );\n\n return [\n // Stable id\n root.__typename +\n ':' +\n root.__link +\n '/' +\n field.name +\n '/' +\n stableStringifyArgs(localVariables),\n // Fetcher\n () => {\n const fragmentReferenceAndDisposeFromEntrypoint = (\n entrypoint: IsographEntrypoint<any, any, any, {}>,\n ): [FragmentReference<any, any>, CleanupFn] => {\n const { fieldName, readerArtifactKind, readerWithRefetchQueries } =\n getOrLoadReaderWithRefetchQueries(\n environment,\n entrypoint.readerWithRefetchQueries,\n );\n const [networkRequest, disposeNetworkRequest] =\n maybeMakeNetworkRequest(\n environment,\n entrypoint,\n localVariables,\n readerWithRefetchQueries,\n fetchOptions ?? null,\n );\n\n const fragmentReference: FragmentReference<any, any> = {\n kind: 'FragmentReference',\n readerWithRefetchQueries,\n fieldName,\n readerArtifactKind,\n // TODO localVariables is not guaranteed to have an id field\n root,\n variables: localVariables,\n networkRequest,\n };\n return [fragmentReference, disposeNetworkRequest];\n };\n\n if (field.entrypoint.kind === 'Entrypoint') {\n return fragmentReferenceAndDisposeFromEntrypoint(field.entrypoint);\n } else {\n const isographArtifactPromiseWrapper = getOrLoadIsographArtifact(\n environment,\n field.entrypoint.typeAndField,\n field.entrypoint.loader,\n );\n const state = getPromiseState(isographArtifactPromiseWrapper);\n if (state.kind === 'Ok') {\n return fragmentReferenceAndDisposeFromEntrypoint(state.value);\n } else {\n // Promise is pending or thrown\n\n let entrypointLoaderState:\n | {\n kind: 'EntrypointNotLoaded';\n }\n | {\n kind: 'NetworkRequestStarted';\n disposeNetworkRequest: CleanupFn;\n }\n | { kind: 'Disposed' } = { kind: 'EntrypointNotLoaded' };\n\n const readerWithRefetchQueries = wrapPromise(\n isographArtifactPromiseWrapper.promise.then(\n (entrypoint) =>\n getOrLoadReaderWithRefetchQueries(\n environment,\n entrypoint.readerWithRefetchQueries,\n ).readerWithRefetchQueries.promise,\n ),\n );\n const networkRequest = wrapPromise(\n isographArtifactPromiseWrapper.promise.then((entrypoint) => {\n if (entrypointLoaderState.kind === 'EntrypointNotLoaded') {\n const [networkRequest, disposeNetworkRequest] =\n maybeMakeNetworkRequest(\n environment,\n entrypoint,\n localVariables,\n readerWithRefetchQueries,\n fetchOptions ?? null,\n );\n entrypointLoaderState = {\n kind: 'NetworkRequestStarted',\n disposeNetworkRequest,\n };\n return networkRequest.promise;\n }\n }),\n );\n\n const fragmentReference: FragmentReference<any, any> = {\n kind: 'FragmentReference',\n readerWithRefetchQueries,\n fieldName: field.name,\n readerArtifactKind: field.entrypoint.readerArtifactKind,\n // TODO localVariables is not guaranteed to have an id field\n root,\n variables: localVariables,\n networkRequest,\n };\n\n return [\n fragmentReference,\n () => {\n if (entrypointLoaderState.kind === 'NetworkRequestStarted') {\n entrypointLoaderState.disposeNetworkRequest();\n }\n entrypointLoaderState = { kind: 'Disposed' };\n },\n ];\n }\n }\n },\n ];\n },\n };\n}\n\nfunction filterVariables(\n variables: Variables,\n allowedVariables: string[],\n): Variables {\n const result: Variables = {};\n for (const key of allowedVariables) {\n // @ts-expect-error\n result[key] = variables[key];\n }\n return result;\n}\n\nfunction generateChildVariableMap(\n variables: Variables,\n fieldArguments: Arguments | null,\n): Variables {\n if (fieldArguments == null) {\n return {};\n }\n\n type Writable<T> = { -readonly [P in keyof T]: T[P] };\n const childVars: Writable<Variables> = {};\n for (const [name, value] of fieldArguments) {\n if (value.kind === 'Object') {\n childVars[name] = generateChildVariableMap(variables, value.value);\n } else if (value.kind === 'Variable') {\n const variable = variables[value.name];\n // Variable could be null if it was not provided but has a default case,\n // so we allow the loop to continue rather than throwing an error.\n if (variable != null) {\n childVars[name] = variable;\n }\n } else {\n childVars[name] = value.value;\n }\n }\n return childVars;\n}\n\nfunction writeQueryArgsToVariables(\n targetVariables: any,\n queryArgs: Arguments | null,\n variables: Variables,\n) {\n if (queryArgs == null) {\n return;\n }\n for (const [name, argType] of queryArgs) {\n switch (argType.kind) {\n case 'Object': {\n writeQueryArgsToVariables(\n (targetVariables[name] = {}),\n argType.value,\n variables,\n );\n break;\n }\n case 'Variable': {\n targetVariables[name] = variables[argType.name];\n break;\n }\n case 'Enum': {\n targetVariables[name] = argType.value;\n break;\n }\n case 'Literal': {\n targetVariables[name] = argType.value;\n break;\n }\n case 'String': {\n targetVariables[name] = argType.value;\n break;\n }\n }\n }\n}\n\nexport function readResolverFieldData(\n environment: IsographEnvironment,\n field: ReaderNonLoadableResolverField,\n root: StoreLink,\n variables: Variables,\n nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[],\n networkRequest: PromiseWrapper<void, any>,\n networkRequestOptions: NetworkRequestReaderOptions,\n mutableEncounteredRecords: EncounteredIds,\n): ReadDataResult<unknown> {\n const usedRefetchQueries = field.usedRefetchQueries;\n const resolverRefetchQueries = usedRefetchQueries.map((index) => {\n const resolverRefetchQuery = nestedRefetchQueries[index];\n if (resolverRefetchQuery == null) {\n throw new Error(\n 'resolverRefetchQuery is null in Resolver. This is indicative of a bug in Isograph.',\n );\n }\n return resolverRefetchQuery;\n });\n\n const readerWithRefetchQueries = {\n kind: 'ReaderWithRefetchQueries',\n readerArtifact: field.readerArtifact,\n nestedRefetchQueries: resolverRefetchQueries,\n } satisfies ReaderWithRefetchQueries<any, any>;\n\n const fragment = {\n kind: 'FragmentReference',\n readerWithRefetchQueries: wrapResolvedValue(readerWithRefetchQueries),\n fieldName: field.readerArtifact.fieldName,\n readerArtifactKind: field.readerArtifact.kind,\n root,\n variables: generateChildVariableMap(variables, field.arguments),\n networkRequest,\n } satisfies FragmentReference<any, any>;\n\n switch (field.readerArtifact.kind) {\n case 'EagerReaderArtifact': {\n const data = readData(\n environment,\n field.readerArtifact.readerAst,\n root,\n generateChildVariableMap(variables, field.arguments),\n resolverRefetchQueries,\n networkRequest,\n networkRequestOptions,\n mutableEncounteredRecords,\n );\n if (data.kind === 'MissingData') {\n return {\n kind: 'MissingData',\n reason: 'Missing data for ' + field.alias + ' on root ' + root.__link,\n nestedReason: data,\n recordLink: data.recordLink,\n };\n }\n const firstParameter = {\n data: data.data,\n parameters: variables,\n startUpdate: field.readerArtifact.hasUpdatable\n ? getOrCreateCachedStartUpdate(\n environment,\n fragment,\n networkRequestOptions,\n )\n : undefined,\n };\n return {\n kind: 'Success',\n data: field.readerArtifact.resolver(firstParameter),\n };\n }\n case 'ComponentReaderArtifact': {\n return {\n kind: 'Success',\n data: getOrCreateCachedComponent(\n environment,\n fragment,\n networkRequestOptions,\n ),\n };\n }\n }\n}\n\nexport function readScalarFieldData(\n field: ReaderScalarField,\n storeRecord: StoreRecord,\n root: StoreLink,\n variables: Variables,\n): ReadDataResult<\n string | number | boolean | StoreLink | readonly DataTypeValue[] | null\n> {\n const storeRecordName = getParentRecordKey(field, variables);\n const value = storeRecord[storeRecordName];\n // TODO consider making scalars into discriminated unions. This probably has\n // to happen for when we handle errors.\n if (value === undefined) {\n return {\n kind: 'MissingData',\n reason: 'No value for ' + storeRecordName + ' on root ' + root.__link,\n recordLink: root,\n };\n }\n return { kind: 'Success', data: value };\n}\n\nexport function readLinkedFieldData(\n environment: IsographEnvironment,\n field: ReaderLinkedField,\n storeRecord: StoreRecord,\n root: StoreLink,\n variables: Variables,\n nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[],\n networkRequest: PromiseWrapper<void, any>,\n networkRequestOptions: NetworkRequestReaderOptions,\n readData: <TReadFromStore>(\n ast: ReaderAst<TReadFromStore>,\n root: StoreLink,\n ) => ReadDataResult<object>,\n): ReadDataResult<unknown> {\n const storeRecordName = getParentRecordKey(field, variables);\n let value = storeRecord[storeRecordName];\n\n if (field.condition != null) {\n const data = readData(field.condition.readerAst, root);\n if (data.kind === 'MissingData') {\n return {\n kind: 'MissingData',\n reason:\n 'Missing data for ' + storeRecordName + ' on root ' + root.__link,\n nestedReason: data,\n recordLink: data.recordLink,\n };\n }\n\n const readerWithRefetchQueries = {\n kind: 'ReaderWithRefetchQueries',\n readerArtifact: field.condition,\n // TODO this is wrong\n // should map field.condition.usedRefetchQueries\n // but it doesn't exist\n nestedRefetchQueries: [],\n } satisfies ReaderWithRefetchQueries<any, any>;\n\n const fragment = {\n kind: 'FragmentReference',\n readerWithRefetchQueries: wrapResolvedValue(readerWithRefetchQueries),\n root,\n fieldName: field.condition.fieldName,\n readerArtifactKind: field.condition.kind,\n variables: generateChildVariableMap(\n variables,\n // TODO this is wrong\n // should use field.arguments\n // but it doesn't exist\n [],\n ),\n networkRequest,\n } satisfies FragmentReference<any, any>;\n\n const condition = field.condition.resolver({\n data: data.data,\n parameters: {},\n ...(field.condition.hasUpdatable\n ? {\n startUpdate: getOrCreateCachedStartUpdate(\n environment,\n fragment,\n networkRequestOptions,\n ),\n }\n : undefined),\n });\n value = condition;\n }\n\n if (Array.isArray(value)) {\n const results = [];\n for (const item of value) {\n const link = assertLink(item);\n if (link === undefined) {\n return {\n kind: 'MissingData',\n reason:\n 'No link for ' +\n storeRecordName +\n ' on root ' +\n root.__link +\n '. Link is ' +\n JSON.stringify(item),\n recordLink: root,\n };\n } else if (link == null) {\n results.push(null);\n continue;\n }\n\n if (isClientPointer(field)) {\n const result = readClientPointerData(\n environment,\n field,\n link,\n variables,\n nestedRefetchQueries,\n readData,\n );\n if (result.kind === 'MissingData') {\n return {\n kind: 'MissingData',\n reason:\n 'Missing data for ' +\n storeRecordName +\n ' on root ' +\n root.__link +\n '. Link is ' +\n JSON.stringify(item),\n nestedReason: result,\n recordLink: result.recordLink,\n };\n }\n results.push(result.data);\n continue;\n }\n\n const result = readData(field.selections, link);\n if (result.kind === 'MissingData') {\n return {\n kind: 'MissingData',\n reason:\n 'Missing data for ' +\n storeRecordName +\n ' on root ' +\n root.__link +\n '. Link is ' +\n JSON.stringify(item),\n nestedReason: result,\n recordLink: result.recordLink,\n };\n }\n results.push(result.data);\n }\n return {\n kind: 'Success',\n data: results,\n };\n }\n let link = assertLink(value);\n\n if (link === undefined) {\n // TODO make this configurable, and also generated and derived from the schema\n const missingFieldHandler = environment.missingFieldHandler;\n\n const altLink = missingFieldHandler?.(\n storeRecord,\n root,\n field.fieldName,\n field.arguments,\n variables,\n );\n logMessage(environment, () => ({\n kind: 'MissingFieldHandlerCalled',\n root,\n storeRecord,\n fieldName: field.fieldName,\n arguments: field.arguments,\n variables,\n }));\n\n if (altLink === undefined) {\n return {\n kind: 'MissingData',\n reason:\n 'No link for ' +\n storeRecordName +\n ' on root ' +\n root.__link +\n '. Link is ' +\n JSON.stringify(value),\n recordLink: root,\n };\n } else {\n link = altLink;\n }\n } else if (link == null) {\n return {\n kind: 'Success',\n data: null,\n };\n }\n\n if (isClientPointer(field)) {\n const data = readClientPointerData(\n environment,\n field,\n link,\n variables,\n nestedRefetchQueries,\n readData,\n );\n if (data.kind === 'MissingData') {\n return {\n kind: 'MissingData',\n reason:\n 'Missing data for ' + storeRecordName + ' on root ' + root.__link,\n nestedReason: data,\n recordLink: data.recordLink,\n };\n }\n return data;\n }\n const data = readData(field.selections, link);\n if (data.kind === 'MissingData') {\n return {\n kind: 'MissingData',\n reason: 'Missing data for ' + storeRecordName + ' on root ' + root.__link,\n nestedReason: data,\n recordLink: data.recordLink,\n };\n }\n return data;\n}\n\nfunction isClientPointer(\n field: ReaderLinkedField,\n): field is ReaderClientPointer {\n return field.refetchQueryIndex != null;\n}\n\nexport function readClientPointerData(\n environment: IsographEnvironment,\n field: ReaderClientPointer,\n root: StoreLink,\n variables: Variables,\n nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[],\n readData: <TReadFromStore>(\n ast: ReaderAst<TReadFromStore>,\n root: StoreLink,\n ) => ReadDataResult<object>,\n): ReadDataResult<unknown> {\n const refetchReaderParams = readData(\n [\n {\n kind: 'Scalar',\n fieldName: 'id',\n alias: null,\n arguments: null,\n isUpdatable: false,\n },\n ],\n root,\n );\n\n if (refetchReaderParams.kind === 'MissingData') {\n return {\n kind: 'MissingData',\n reason: 'Missing data for ' + field.alias + ' on root ' + root.__link,\n nestedReason: refetchReaderParams,\n recordLink: refetchReaderParams.recordLink,\n };\n }\n\n const refetchQuery = nestedRefetchQueries[field.refetchQueryIndex];\n if (refetchQuery == null) {\n throw new Error(\n 'refetchQuery is null in RefetchField. This is indicative of a bug in Isograph.',\n );\n }\n const refetchQueryArtifact = refetchQuery.artifact;\n const allowedVariables = refetchQuery.allowedVariables;\n\n return {\n kind: 'Success',\n data: (\n args: any,\n // TODO get the associated type for FetchOptions from the loadably selected field\n fetchOptions?: FetchOptions<any, never>,\n ) => {\n const includeReadOutData = (variables: any, readOutData: any) => {\n variables.id = readOutData.id;\n return variables;\n };\n const localVariables = includeReadOutData(\n args ?? {},\n refetchReaderParams.data,\n );\n writeQueryArgsToVariables(localVariables, field.arguments, variables);\n\n return [\n // Stable id\n root.__typename +\n ':' +\n root.__link +\n '/' +\n field.fieldName +\n '/' +\n stableStringifyArgs(localVariables),\n // Fetcher\n (): ItemCleanupPair<FragmentReference<any, any>> | undefined => {\n const variables = includeReadOutData(\n filterVariables({ ...args, ...localVariables }, allowedVariables),\n refetchReaderParams.data,\n );\n\n const readerWithRefetchQueries = wrapResolvedValue({\n kind: 'ReaderWithRefetchQueries',\n readerArtifact: {\n kind: 'EagerReaderArtifact',\n fieldName: field.fieldName,\n readerAst: field.selections,\n resolver: ({ data }: { data: any }) => data,\n hasUpdatable: false,\n },\n nestedRefetchQueries,\n } as const);\n\n const [networkRequest, disposeNetworkRequest] =\n maybeMakeNetworkRequest(\n environment,\n refetchQueryArtifact,\n variables,\n readerWithRefetchQueries,\n fetchOptions ?? null,\n );\n\n const fragmentReference: FragmentReference<any, any> = {\n kind: 'FragmentReference',\n fieldName: field.fieldName,\n readerArtifactKind: 'EagerReaderArtifact',\n readerWithRefetchQueries: readerWithRefetchQueries,\n root,\n variables,\n networkRequest,\n };\n return [fragmentReference, disposeNetworkRequest];\n },\n ];\n },\n };\n}\n\nexport type NetworkRequestReaderOptions = {\n suspendIfInFlight: boolean;\n throwOnNetworkError: boolean;\n};\n\nexport function getNetworkRequestOptionsWithDefaults(\n networkRequestOptions?: Partial<NetworkRequestReaderOptions> | void,\n): NetworkRequestReaderOptions {\n return {\n suspendIfInFlight: networkRequestOptions?.suspendIfInFlight ?? false,\n throwOnNetworkError: networkRequestOptions?.throwOnNetworkError ?? true,\n };\n}\n\n// TODO use a description of the params for this?\n// TODO call stableStringifyArgs on the variable values, as well.\n// This doesn't matter for now, since we are just using primitive values\n// in the demo.\nfunction stableStringifyArgs(args: object) {\n const keys = Object.keys(args);\n keys.sort();\n let s = '';\n for (const key of keys) {\n // @ts-expect-error\n s += `${key}=${JSON.stringify(args[key])};`;\n }\n return s;\n}\n\nexport function readImperativelyLoadedField(\n environment: IsographEnvironment,\n field: ReaderImperativelyLoadedField,\n root: StoreLink,\n variables: Variables,\n nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[],\n networkRequest: PromiseWrapper<void, any>,\n networkRequestOptions: NetworkRequestReaderOptions,\n mutableEncounteredRecords: EncounteredIds,\n): ReadDataResult<unknown> {\n // First, we read the data using the refetch reader AST (i.e. read out the\n // id field).\n const data = readData(\n environment,\n field.refetchReaderArtifact.readerAst,\n root,\n variables,\n // Refetch fields just read the id, and don't need refetch query artifacts\n [],\n // This is probably indicative of the fact that we are doing redundant checks\n // on the status of this network request...\n networkRequest,\n networkRequestOptions,\n mutableEncounteredRecords,\n );\n if (data.kind === 'MissingData') {\n return {\n kind: 'MissingData',\n reason: 'Missing data for ' + field.alias + ' on root ' + root.__link,\n nestedReason: data,\n recordLink: data.recordLink,\n };\n } else {\n const { refetchQueryIndex } = field;\n const refetchQuery = nestedRefetchQueries[refetchQueryIndex];\n if (refetchQuery == null) {\n throw new Error(\n 'Refetch query not found. This is indicative of a bug in Isograph.',\n );\n }\n const refetchQueryArtifact = refetchQuery.artifact;\n const allowedVariables = refetchQuery.allowedVariables;\n\n // Second, we allow the user to call the resolver, which will ultimately\n // use the resolver reader AST to get the resolver parameters.\n return {\n kind: 'Success',\n data: (args: any) => [\n // Stable id\n root.__typename + ':' + root.__link + '__' + field.name,\n // Fetcher\n field.refetchReaderArtifact.resolver(\n environment,\n refetchQueryArtifact,\n data.data,\n filterVariables({ ...args, ...variables }, allowedVariables),\n root,\n // TODO these params should be removed\n null,\n [],\n ),\n ],\n };\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"read.mjs","names":[],"sources":["../../src/core/read.ts"],"sourcesContent":["import type { CleanupFn, ItemCleanupPair } from '@isograph/disposable-types';\nimport {\n getParentRecordKey,\n insertEmptySetIfMissing,\n onNextChangeToRecord,\n type EncounteredIds,\n} from './cache';\nimport type { FetchOptions } from './check';\nimport { getOrCreateCachedComponent } from './componentCache';\nimport type {\n IsographEntrypoint,\n ReaderWithRefetchQueries,\n RefetchQueryNormalizationArtifactWrapper,\n} from './entrypoint';\nimport type {\n ExtractData,\n FragmentReference,\n UnknownTReadFromStore,\n Variables,\n} from './FragmentReference';\nimport type {\n DataTypeValueScalar,\n IsographEnvironment,\n} from './IsographEnvironment';\nimport {\n assertLink,\n getOrLoadIsographArtifact,\n getOrLoadReaderWithRefetchQueries,\n type StoreLink,\n type StoreRecord,\n} from './IsographEnvironment';\nimport { logMessage } from './logging';\nimport { maybeMakeNetworkRequest } from './makeNetworkRequest';\nimport { getStoreRecordProxy } from './optimisticProxy';\nimport type { PromiseWrapper } from './PromiseWrapper';\nimport {\n getPromiseState,\n NOT_SET,\n readPromise,\n wrapPromise,\n wrapResolvedValue,\n} from './PromiseWrapper';\nimport type {\n LoadablySelectedField,\n ReaderAst,\n ReaderClientPointer,\n ReaderImperativelyLoadedField,\n ReaderLinkedField,\n ReaderNonLoadableResolverField,\n ReaderScalarField,\n} from './reader';\nimport { getOrCreateCachedStartUpdate } from './startUpdate';\nimport type { Arguments } from './util';\n\nexport type WithEncounteredRecords<T> = {\n readonly encounteredRecords: EncounteredIds;\n readonly item: ExtractData<T>;\n};\n\nexport function readButDoNotEvaluate<\n TReadFromStore extends UnknownTReadFromStore,\n>(\n environment: IsographEnvironment,\n fragmentReference: FragmentReference<TReadFromStore, unknown>,\n networkRequestOptions: NetworkRequestReaderOptions,\n): WithEncounteredRecords<TReadFromStore> {\n const mutableEncounteredRecords: EncounteredIds = new Map();\n\n // TODO consider moving this to the outside\n const readerWithRefetchQueries = readPromise(\n fragmentReference.readerWithRefetchQueries,\n );\n\n const response = readData(\n environment,\n readerWithRefetchQueries.readerArtifact.readerAst,\n fragmentReference.root,\n fragmentReference.variables ?? {},\n readerWithRefetchQueries.nestedRefetchQueries,\n fragmentReference.networkRequest,\n networkRequestOptions,\n mutableEncounteredRecords,\n );\n\n logMessage(environment, () => ({\n kind: 'DoneReading',\n response,\n fieldName: readerWithRefetchQueries.readerArtifact.fieldName,\n root: fragmentReference.root,\n }));\n\n if (response.kind === 'MissingData') {\n // There are two cases here that we care about:\n // 1. the network request is in flight, we haven't suspended on it, and we want\n // to throw if it errors out. So, networkRequestOptions.suspendIfInFlight === false\n // and networkRequestOptions.throwOnNetworkError === true.\n // 2. everything else\n //\n // In the first case, we cannot simply throw onNextChange, because if the network\n // response errors out, we will not update the store, so the onNextChange promise\n // will not resolve.\n if (\n !networkRequestOptions.suspendIfInFlight &&\n networkRequestOptions.throwOnNetworkError\n ) {\n // What are we doing here? If the network response has errored out, we can do\n // two things: throw a rejected promise, or throw an error. Both work identically\n // in the browser. However, during initial SSR on NextJS, throwing a rejected\n // promise results in an infinite loop (including re-issuing the query until the\n // process OOM's or something.) Hence, we throw an error.\n\n const result = fragmentReference.networkRequest.result;\n if (result !== NOT_SET && result.kind === 'Err') {\n throw new Error('NetworkError', { cause: result.error });\n }\n\n throw new Promise((resolve, reject) => {\n onNextChangeToRecord(environment, response.recordLink).then(resolve);\n fragmentReference.networkRequest.promise.catch(reject);\n });\n }\n throw onNextChangeToRecord(environment, response.recordLink);\n } else {\n return {\n encounteredRecords: mutableEncounteredRecords,\n item: response.data,\n };\n }\n}\n\nexport type ReadDataResultSuccess<Data> = {\n readonly kind: 'Success';\n readonly data: Data;\n};\n\nexport type ReadDataResult<Data> =\n | ReadDataResultSuccess<Data>\n | {\n readonly kind: 'MissingData';\n readonly reason: string;\n readonly nestedReason?: ReadDataResult<unknown>;\n readonly recordLink: StoreLink;\n };\n\nfunction readData<TReadFromStore>(\n environment: IsographEnvironment,\n ast: ReaderAst<TReadFromStore>,\n root: StoreLink,\n variables: Variables,\n nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[],\n networkRequest: PromiseWrapper<void, any>,\n networkRequestOptions: NetworkRequestReaderOptions,\n mutableEncounteredRecords: EncounteredIds,\n): ReadDataResult<ExtractData<TReadFromStore>> {\n const encounteredIds = insertEmptySetIfMissing(\n mutableEncounteredRecords,\n root.__typename,\n );\n encounteredIds.add(root.__link);\n let storeRecord = getStoreRecordProxy(environment.store, root);\n if (storeRecord === undefined) {\n return {\n kind: 'MissingData',\n reason: 'No record for root ' + root.__link,\n recordLink: root,\n };\n }\n\n if (storeRecord == null) {\n return {\n kind: 'Success',\n data: null as any,\n };\n }\n\n let target: { [index: string]: any } = {};\n\n for (const field of ast) {\n switch (field.kind) {\n case 'Scalar': {\n const data = readScalarFieldData(field, storeRecord, root, variables);\n\n if (data.kind === 'MissingData') {\n return data;\n }\n target[field.alias ?? field.fieldName] = data.data;\n break;\n }\n case 'Link': {\n target[field.alias] = root;\n break;\n }\n case 'Linked': {\n const data = readLinkedFieldData(\n environment,\n field,\n storeRecord,\n root,\n variables,\n nestedRefetchQueries,\n networkRequest,\n networkRequestOptions,\n (ast, root) =>\n readData(\n environment,\n ast,\n root,\n variables,\n nestedRefetchQueries,\n networkRequest,\n networkRequestOptions,\n mutableEncounteredRecords,\n ),\n );\n if (data.kind === 'MissingData') {\n return data;\n }\n target[field.alias ?? field.fieldName] = data.data;\n break;\n }\n case 'ImperativelyLoadedField': {\n const data = readImperativelyLoadedField(\n environment,\n field,\n root,\n variables,\n nestedRefetchQueries,\n networkRequest,\n networkRequestOptions,\n mutableEncounteredRecords,\n );\n if (data.kind === 'MissingData') {\n return data;\n }\n target[field.alias] = data.data;\n break;\n }\n case 'Resolver': {\n const data = readResolverFieldData(\n environment,\n field,\n root,\n variables,\n nestedRefetchQueries,\n networkRequest,\n networkRequestOptions,\n mutableEncounteredRecords,\n );\n if (data.kind === 'MissingData') {\n return data;\n }\n target[field.alias] = data.data;\n break;\n }\n case 'LoadablySelectedField': {\n const data = readLoadablySelectedFieldData(\n environment,\n field,\n root,\n variables,\n networkRequest,\n networkRequestOptions,\n mutableEncounteredRecords,\n );\n if (data.kind === 'MissingData') {\n return data;\n }\n target[field.alias] = data.data;\n break;\n }\n }\n }\n return {\n kind: 'Success',\n data: target as any,\n };\n}\n\nexport function readLoadablySelectedFieldData(\n environment: IsographEnvironment,\n field: LoadablySelectedField,\n root: StoreLink,\n variables: Variables,\n networkRequest: PromiseWrapper<void, any>,\n networkRequestOptions: NetworkRequestReaderOptions,\n mutableEncounteredRecords: EncounteredIds,\n): ReadDataResult<unknown> {\n const refetchReaderParams = readData(\n environment,\n field.refetchReaderAst,\n root,\n variables,\n // Refetch fields just read the id, and don't need refetch query artifacts\n [],\n networkRequest,\n networkRequestOptions,\n mutableEncounteredRecords,\n );\n\n if (refetchReaderParams.kind === 'MissingData') {\n return {\n kind: 'MissingData',\n reason: 'Missing data for ' + field.alias + ' on root ' + root.__link,\n nestedReason: refetchReaderParams,\n recordLink: refetchReaderParams.recordLink,\n };\n }\n\n return {\n kind: 'Success',\n data: (\n args: any,\n // TODO get the associated type for FetchOptions from the loadably selected field\n fetchOptions?: FetchOptions<any, never>,\n ) => {\n // TODO we should use the reader AST for this\n const includeReadOutData = (variables: any, readOutData: any) => {\n variables.id = readOutData.id;\n return variables;\n };\n const localVariables = includeReadOutData(\n args ?? {},\n refetchReaderParams.data,\n );\n writeQueryArgsToVariables(\n localVariables,\n field.queryArguments,\n variables,\n );\n\n return [\n // Stable id\n root.__typename +\n ':' +\n root.__link +\n '/' +\n field.name +\n '/' +\n stableStringifyArgs(localVariables),\n // Fetcher\n () => {\n const fragmentReferenceAndDisposeFromEntrypoint = (\n entrypoint: IsographEntrypoint<any, any, any, {}>,\n ): [FragmentReference<any, any>, CleanupFn] => {\n const { fieldName, readerArtifactKind, readerWithRefetchQueries } =\n getOrLoadReaderWithRefetchQueries(\n environment,\n entrypoint.readerWithRefetchQueries,\n );\n const [networkRequest, disposeNetworkRequest] =\n maybeMakeNetworkRequest(\n environment,\n entrypoint,\n localVariables,\n readerWithRefetchQueries,\n fetchOptions ?? null,\n );\n\n const fragmentReference: FragmentReference<any, any> = {\n kind: 'FragmentReference',\n readerWithRefetchQueries,\n fieldName,\n readerArtifactKind,\n // TODO localVariables is not guaranteed to have an id field\n root,\n variables: localVariables,\n networkRequest,\n };\n return [fragmentReference, disposeNetworkRequest];\n };\n\n if (field.entrypoint.kind === 'Entrypoint') {\n return fragmentReferenceAndDisposeFromEntrypoint(field.entrypoint);\n } else {\n const isographArtifactPromiseWrapper = getOrLoadIsographArtifact(\n environment,\n field.entrypoint.typeAndField,\n field.entrypoint.loader,\n );\n const state = getPromiseState(isographArtifactPromiseWrapper);\n if (state.kind === 'Ok') {\n return fragmentReferenceAndDisposeFromEntrypoint(state.value);\n } else {\n // Promise is pending or thrown\n\n let entrypointLoaderState:\n | {\n kind: 'EntrypointNotLoaded';\n }\n | {\n kind: 'NetworkRequestStarted';\n disposeNetworkRequest: CleanupFn;\n }\n | { kind: 'Disposed' } = { kind: 'EntrypointNotLoaded' };\n\n const readerWithRefetchQueries = wrapPromise(\n isographArtifactPromiseWrapper.promise.then(\n (entrypoint) =>\n getOrLoadReaderWithRefetchQueries(\n environment,\n entrypoint.readerWithRefetchQueries,\n ).readerWithRefetchQueries.promise,\n ),\n );\n const networkRequest = wrapPromise(\n isographArtifactPromiseWrapper.promise.then((entrypoint) => {\n if (entrypointLoaderState.kind === 'EntrypointNotLoaded') {\n const [networkRequest, disposeNetworkRequest] =\n maybeMakeNetworkRequest(\n environment,\n entrypoint,\n localVariables,\n readerWithRefetchQueries,\n fetchOptions ?? null,\n );\n entrypointLoaderState = {\n kind: 'NetworkRequestStarted',\n disposeNetworkRequest,\n };\n return networkRequest.promise;\n }\n }),\n );\n\n const fragmentReference: FragmentReference<any, any> = {\n kind: 'FragmentReference',\n readerWithRefetchQueries,\n fieldName: field.name,\n readerArtifactKind: field.entrypoint.readerArtifactKind,\n // TODO localVariables is not guaranteed to have an id field\n root,\n variables: localVariables,\n networkRequest,\n };\n\n return [\n fragmentReference,\n () => {\n if (entrypointLoaderState.kind === 'NetworkRequestStarted') {\n entrypointLoaderState.disposeNetworkRequest();\n }\n entrypointLoaderState = { kind: 'Disposed' };\n },\n ];\n }\n }\n },\n ];\n },\n };\n}\n\nfunction filterVariables(\n variables: Variables,\n allowedVariables: string[],\n): Variables {\n const result: Variables = {};\n for (const key of allowedVariables) {\n // @ts-expect-error\n result[key] = variables[key];\n }\n return result;\n}\n\nfunction generateChildVariableMap(\n variables: Variables,\n fieldArguments: Arguments | null,\n): Variables {\n if (fieldArguments == null) {\n return {};\n }\n\n type Writable<T> = { -readonly [P in keyof T]: T[P] };\n const childVars: Writable<Variables> = {};\n for (const [name, value] of fieldArguments) {\n if (value.kind === 'Object') {\n childVars[name] = generateChildVariableMap(variables, value.value);\n } else if (value.kind === 'Variable') {\n const variable = variables[value.name];\n // Variable could be null if it was not provided but has a default case,\n // so we allow the loop to continue rather than throwing an error.\n if (variable != null) {\n childVars[name] = variable;\n }\n } else {\n childVars[name] = value.value;\n }\n }\n return childVars;\n}\n\nfunction writeQueryArgsToVariables(\n targetVariables: any,\n queryArgs: Arguments | null,\n variables: Variables,\n) {\n if (queryArgs == null) {\n return;\n }\n for (const [name, argType] of queryArgs) {\n switch (argType.kind) {\n case 'Object': {\n writeQueryArgsToVariables(\n (targetVariables[name] = {}),\n argType.value,\n variables,\n );\n break;\n }\n case 'Variable': {\n targetVariables[name] = variables[argType.name];\n break;\n }\n case 'Enum': {\n targetVariables[name] = argType.value;\n break;\n }\n case 'Literal': {\n targetVariables[name] = argType.value;\n break;\n }\n case 'String': {\n targetVariables[name] = argType.value;\n break;\n }\n }\n }\n}\n\nexport function readResolverFieldData(\n environment: IsographEnvironment,\n field: ReaderNonLoadableResolverField,\n root: StoreLink,\n variables: Variables,\n nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[],\n networkRequest: PromiseWrapper<void, any>,\n networkRequestOptions: NetworkRequestReaderOptions,\n mutableEncounteredRecords: EncounteredIds,\n): ReadDataResult<unknown> {\n const usedRefetchQueries = field.usedRefetchQueries;\n const resolverRefetchQueries = usedRefetchQueries.map((index) => {\n const resolverRefetchQuery = nestedRefetchQueries[index];\n if (resolverRefetchQuery == null) {\n throw new Error(\n 'resolverRefetchQuery is null in Resolver. This is indicative of a bug in Isograph.',\n );\n }\n return resolverRefetchQuery;\n });\n\n const readerWithRefetchQueries = {\n kind: 'ReaderWithRefetchQueries',\n readerArtifact: field.readerArtifact(),\n nestedRefetchQueries: resolverRefetchQueries,\n } satisfies ReaderWithRefetchQueries<any, any>;\n\n const fragment = {\n kind: 'FragmentReference',\n readerWithRefetchQueries: wrapResolvedValue(readerWithRefetchQueries),\n fieldName: readerWithRefetchQueries.readerArtifact.fieldName,\n readerArtifactKind: readerWithRefetchQueries.readerArtifact.kind,\n root,\n variables: generateChildVariableMap(variables, field.arguments),\n networkRequest,\n } satisfies FragmentReference<any, any>;\n\n switch (readerWithRefetchQueries.readerArtifact.kind) {\n case 'EagerReaderArtifact': {\n const data = readData(\n environment,\n readerWithRefetchQueries.readerArtifact.readerAst,\n root,\n generateChildVariableMap(variables, field.arguments),\n resolverRefetchQueries,\n networkRequest,\n networkRequestOptions,\n mutableEncounteredRecords,\n );\n if (data.kind === 'MissingData') {\n return {\n kind: 'MissingData',\n reason: 'Missing data for ' + field.alias + ' on root ' + root.__link,\n nestedReason: data,\n recordLink: data.recordLink,\n };\n }\n const firstParameter = {\n data: data.data,\n parameters: variables,\n startUpdate: readerWithRefetchQueries.readerArtifact.hasUpdatable\n ? getOrCreateCachedStartUpdate(\n environment,\n fragment,\n networkRequestOptions,\n )\n : undefined,\n };\n return {\n kind: 'Success',\n data: readerWithRefetchQueries.readerArtifact.resolver(firstParameter),\n };\n }\n case 'ComponentReaderArtifact': {\n return {\n kind: 'Success',\n data: getOrCreateCachedComponent(\n environment,\n fragment,\n networkRequestOptions,\n ),\n };\n }\n }\n}\n\nexport function readScalarFieldData(\n field: ReaderScalarField,\n storeRecord: StoreRecord,\n root: StoreLink,\n variables: Variables,\n): ReadDataResult<DataTypeValueScalar> {\n const storeRecordName = getParentRecordKey(field, variables);\n const value = storeRecord[storeRecordName];\n // TODO consider making scalars into discriminated unions. This probably has\n // to happen for when we handle errors.\n if (value === undefined) {\n return {\n kind: 'MissingData',\n reason: 'No value for ' + storeRecordName + ' on root ' + root.__link,\n recordLink: root,\n };\n }\n return { kind: 'Success', data: value };\n}\n\nexport function readLinkedFieldData(\n environment: IsographEnvironment,\n field: ReaderLinkedField,\n storeRecord: StoreRecord,\n root: StoreLink,\n variables: Variables,\n nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[],\n networkRequest: PromiseWrapper<void, any>,\n networkRequestOptions: NetworkRequestReaderOptions,\n readData: <TReadFromStore>(\n ast: ReaderAst<TReadFromStore>,\n root: StoreLink,\n ) => ReadDataResult<object>,\n): ReadDataResult<unknown> {\n const storeRecordName = getParentRecordKey(field, variables);\n let value = storeRecord[storeRecordName];\n\n if (field.condition != null) {\n const condition = field.condition();\n const data = readData(condition.readerAst, root);\n if (data.kind === 'MissingData') {\n return {\n kind: 'MissingData',\n reason:\n 'Missing data for ' + storeRecordName + ' on root ' + root.__link,\n nestedReason: data,\n recordLink: data.recordLink,\n };\n }\n\n const readerWithRefetchQueries = {\n kind: 'ReaderWithRefetchQueries',\n readerArtifact: condition,\n // TODO this is wrong\n // should map field.condition.usedRefetchQueries\n // but it doesn't exist\n nestedRefetchQueries: [],\n } satisfies ReaderWithRefetchQueries<any, any>;\n\n const fragment = {\n kind: 'FragmentReference',\n readerWithRefetchQueries: wrapResolvedValue(readerWithRefetchQueries),\n root,\n fieldName: condition.fieldName,\n readerArtifactKind: condition.kind,\n variables: generateChildVariableMap(\n variables,\n // TODO this is wrong\n // should use field.arguments\n // but it doesn't exist\n [],\n ),\n networkRequest,\n } satisfies FragmentReference<any, any>;\n\n const link = condition.resolver({\n data: data.data,\n parameters: {},\n ...(condition.hasUpdatable\n ? {\n startUpdate: getOrCreateCachedStartUpdate(\n environment,\n fragment,\n networkRequestOptions,\n ),\n }\n : undefined),\n });\n value = link;\n }\n\n if (Array.isArray(value)) {\n const results = [];\n for (const item of value) {\n const link = assertLink(item);\n if (link === undefined) {\n return {\n kind: 'MissingData',\n reason:\n 'No link for ' +\n storeRecordName +\n ' on root ' +\n root.__link +\n '. Link is ' +\n JSON.stringify(item),\n recordLink: root,\n };\n } else if (link == null) {\n results.push(null);\n continue;\n }\n\n if (isClientPointer(field)) {\n const result = readClientPointerData(\n environment,\n field,\n link,\n variables,\n nestedRefetchQueries,\n readData,\n );\n if (result.kind === 'MissingData') {\n return {\n kind: 'MissingData',\n reason:\n 'Missing data for ' +\n storeRecordName +\n ' on root ' +\n root.__link +\n '. Link is ' +\n JSON.stringify(item),\n nestedReason: result,\n recordLink: result.recordLink,\n };\n }\n results.push(result.data);\n continue;\n }\n\n const result = readData(field.selections, link);\n if (result.kind === 'MissingData') {\n return {\n kind: 'MissingData',\n reason:\n 'Missing data for ' +\n storeRecordName +\n ' on root ' +\n root.__link +\n '. Link is ' +\n JSON.stringify(item),\n nestedReason: result,\n recordLink: result.recordLink,\n };\n }\n results.push(result.data);\n }\n return {\n kind: 'Success',\n data: results,\n };\n }\n let link = assertLink(value);\n\n if (link === undefined) {\n // TODO make this configurable, and also generated and derived from the schema\n const missingFieldHandler = environment.missingFieldHandler;\n\n const altLink = missingFieldHandler?.(\n storeRecord,\n root,\n field.fieldName,\n field.arguments,\n variables,\n );\n logMessage(environment, () => ({\n kind: 'MissingFieldHandlerCalled',\n root,\n storeRecord,\n fieldName: field.fieldName,\n arguments: field.arguments,\n variables,\n }));\n\n if (altLink === undefined) {\n return {\n kind: 'MissingData',\n reason:\n 'No link for ' +\n storeRecordName +\n ' on root ' +\n root.__link +\n '. Link is ' +\n JSON.stringify(value),\n recordLink: root,\n };\n } else {\n link = altLink;\n }\n } else if (link == null) {\n return {\n kind: 'Success',\n data: null,\n };\n }\n\n if (isClientPointer(field)) {\n const data = readClientPointerData(\n environment,\n field,\n link,\n variables,\n nestedRefetchQueries,\n readData,\n );\n if (data.kind === 'MissingData') {\n return {\n kind: 'MissingData',\n reason:\n 'Missing data for ' + storeRecordName + ' on root ' + root.__link,\n nestedReason: data,\n recordLink: data.recordLink,\n };\n }\n return data;\n }\n const data = readData(field.selections, link);\n if (data.kind === 'MissingData') {\n return {\n kind: 'MissingData',\n reason: 'Missing data for ' + storeRecordName + ' on root ' + root.__link,\n nestedReason: data,\n recordLink: data.recordLink,\n };\n }\n return data;\n}\n\nfunction isClientPointer(\n field: ReaderLinkedField,\n): field is ReaderClientPointer {\n return field.refetchQueryIndex != null;\n}\n\nexport function readClientPointerData(\n environment: IsographEnvironment,\n field: ReaderClientPointer,\n root: StoreLink,\n variables: Variables,\n nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[],\n readData: <TReadFromStore>(\n ast: ReaderAst<TReadFromStore>,\n root: StoreLink,\n ) => ReadDataResult<object>,\n): ReadDataResult<unknown> {\n const refetchReaderParams = readData(\n [\n {\n kind: 'Scalar',\n isFallible: false,\n fieldName: 'id',\n alias: null,\n arguments: null,\n isUpdatable: false,\n },\n ],\n root,\n );\n\n if (refetchReaderParams.kind === 'MissingData') {\n return {\n kind: 'MissingData',\n reason: 'Missing data for ' + field.alias + ' on root ' + root.__link,\n nestedReason: refetchReaderParams,\n recordLink: refetchReaderParams.recordLink,\n };\n }\n\n const refetchQuery = nestedRefetchQueries[field.refetchQueryIndex];\n if (refetchQuery == null) {\n throw new Error(\n 'refetchQuery is null in RefetchField. This is indicative of a bug in Isograph.',\n );\n }\n const refetchQueryArtifact = refetchQuery.artifact;\n const allowedVariables = refetchQuery.allowedVariables;\n\n return {\n kind: 'Success',\n data: (\n args: any,\n // TODO get the associated type for FetchOptions from the loadably selected field\n fetchOptions?: FetchOptions<any, never>,\n ) => {\n const includeReadOutData = (variables: any, readOutData: any) => {\n variables.id = readOutData.id;\n return variables;\n };\n const localVariables = includeReadOutData(\n args ?? {},\n refetchReaderParams.data,\n );\n writeQueryArgsToVariables(localVariables, field.arguments, variables);\n\n return [\n // Stable id\n root.__typename +\n ':' +\n root.__link +\n '/' +\n field.fieldName +\n '/' +\n stableStringifyArgs(localVariables),\n // Fetcher\n (): ItemCleanupPair<FragmentReference<any, any>> | undefined => {\n const variables = includeReadOutData(\n filterVariables({ ...args, ...localVariables }, allowedVariables),\n refetchReaderParams.data,\n );\n\n const readerWithRefetchQueries = wrapResolvedValue({\n kind: 'ReaderWithRefetchQueries',\n readerArtifact: {\n kind: 'EagerReaderArtifact',\n fieldName: field.fieldName,\n readerAst: field.selections,\n resolver: ({ data }: { data: any }) => data,\n hasUpdatable: false,\n },\n nestedRefetchQueries,\n } as const);\n\n const [networkRequest, disposeNetworkRequest] =\n maybeMakeNetworkRequest(\n environment,\n refetchQueryArtifact,\n variables,\n readerWithRefetchQueries,\n fetchOptions ?? null,\n );\n\n const fragmentReference: FragmentReference<any, any> = {\n kind: 'FragmentReference',\n fieldName: field.fieldName,\n readerArtifactKind: 'EagerReaderArtifact',\n readerWithRefetchQueries: readerWithRefetchQueries,\n root,\n variables,\n networkRequest,\n };\n return [fragmentReference, disposeNetworkRequest];\n },\n ];\n },\n };\n}\n\nexport type NetworkRequestReaderOptions = {\n suspendIfInFlight: boolean;\n throwOnNetworkError: boolean;\n};\n\nexport function getNetworkRequestOptionsWithDefaults(\n networkRequestOptions?: Partial<NetworkRequestReaderOptions> | void,\n): NetworkRequestReaderOptions {\n return {\n suspendIfInFlight: networkRequestOptions?.suspendIfInFlight ?? false,\n throwOnNetworkError: networkRequestOptions?.throwOnNetworkError ?? true,\n };\n}\n\n// TODO use a description of the params for this?\n// TODO call stableStringifyArgs on the variable values, as well.\n// This doesn't matter for now, since we are just using primitive values\n// in the demo.\nfunction stableStringifyArgs(args: object) {\n const keys = Object.keys(args);\n keys.sort();\n let s = '';\n for (const key of keys) {\n // @ts-expect-error\n s += `${key}=${JSON.stringify(args[key])};`;\n }\n return s;\n}\n\nexport function readImperativelyLoadedField(\n environment: IsographEnvironment,\n field: ReaderImperativelyLoadedField,\n root: StoreLink,\n variables: Variables,\n nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[],\n networkRequest: PromiseWrapper<void, any>,\n networkRequestOptions: NetworkRequestReaderOptions,\n mutableEncounteredRecords: EncounteredIds,\n): ReadDataResult<unknown> {\n // First, we read the data using the refetch reader AST (i.e. read out the\n // id field).\n const data = readData(\n environment,\n field.refetchReaderArtifact.readerAst,\n root,\n variables,\n // Refetch fields just read the id, and don't need refetch query artifacts\n [],\n // This is probably indicative of the fact that we are doing redundant checks\n // on the status of this network request...\n networkRequest,\n networkRequestOptions,\n mutableEncounteredRecords,\n );\n if (data.kind === 'MissingData') {\n return {\n kind: 'MissingData',\n reason: 'Missing data for ' + field.alias + ' on root ' + root.__link,\n nestedReason: data,\n recordLink: data.recordLink,\n };\n } else {\n const { refetchQueryIndex } = field;\n const refetchQuery = nestedRefetchQueries[refetchQueryIndex];\n if (refetchQuery == null) {\n throw new Error(\n 'Refetch query not found. This is indicative of a bug in Isograph.',\n );\n }\n const refetchQueryArtifact = refetchQuery.artifact;\n const allowedVariables = refetchQuery.allowedVariables;\n\n // Second, we allow the user to call the resolver, which will ultimately\n // use the resolver reader AST to get the resolver parameters.\n return {\n kind: 'Success',\n data: (args: any) => [\n // Stable id\n root.__typename + ':' + root.__link + '__' + field.name,\n // Fetcher\n field.refetchReaderArtifact.resolver(\n environment,\n refetchQueryArtifact,\n data.data,\n filterVariables({ ...args, ...variables }, allowedVariables),\n root,\n // TODO these params should be removed\n null,\n [],\n ),\n ],\n };\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { FetchOptions } from "./check.
|
|
2
|
-
import { Arguments } from "./util.
|
|
3
|
-
import { ComponentOrFieldName, IsographEnvironment, StoreLink } from "./IsographEnvironment.
|
|
4
|
-
import { ExtractParameters, FragmentReference, UnknownTReadFromStore } from "./FragmentReference.
|
|
5
|
-
import { IsographEntrypoint, IsographEntrypointLoader, RefetchQueryNormalizationArtifact, RefetchQueryNormalizationArtifactWrapper } from "./entrypoint.
|
|
1
|
+
import { FetchOptions } from "./check.cjs";
|
|
2
|
+
import { Arguments } from "./util.cjs";
|
|
3
|
+
import { ComponentOrFieldName, IsographEnvironment, StoreLink } from "./IsographEnvironment.cjs";
|
|
4
|
+
import { ExtractParameters, FragmentReference, UnknownTReadFromStore } from "./FragmentReference.cjs";
|
|
5
|
+
import { IsographEntrypoint, IsographEntrypointLoader, RefetchQueryNormalizationArtifact, RefetchQueryNormalizationArtifactWrapper } from "./entrypoint.cjs";
|
|
6
6
|
import { Factory } from "@isograph/disposable-types";
|
|
7
7
|
|
|
8
8
|
//#region src/core/reader.d.ts
|
|
@@ -34,6 +34,7 @@ type ReaderAstNode = ReaderScalarField | ReaderLinkedField | ReaderNonLoadableRe
|
|
|
34
34
|
type ReaderAst<TReadFromStore> = ReadonlyArray<ReaderAstNode>;
|
|
35
35
|
type ReaderScalarField = {
|
|
36
36
|
readonly kind: 'Scalar';
|
|
37
|
+
readonly isFallible: boolean;
|
|
37
38
|
readonly fieldName: string;
|
|
38
39
|
readonly alias: string | null;
|
|
39
40
|
readonly arguments: Arguments | null;
|
|
@@ -45,15 +46,16 @@ type ReaderLinkField = {
|
|
|
45
46
|
};
|
|
46
47
|
type ReaderLinkedField = {
|
|
47
48
|
readonly kind: 'Linked';
|
|
49
|
+
readonly isFallible: boolean;
|
|
48
50
|
readonly fieldName: string;
|
|
49
51
|
readonly alias: string | null;
|
|
50
52
|
readonly selections: ReaderAst<unknown>;
|
|
51
53
|
readonly arguments: Arguments | null;
|
|
52
|
-
readonly condition: EagerReaderArtifact<{
|
|
54
|
+
readonly condition: (() => EagerReaderArtifact<{
|
|
53
55
|
data: any;
|
|
54
56
|
parameters: any;
|
|
55
57
|
startUpdate?: StartUpdate<any>;
|
|
56
|
-
}, StoreLink | null | (StoreLink | null)[] | StoreLink[]> | null;
|
|
58
|
+
}, StoreLink | null | (StoreLink | null)[] | StoreLink[]>) | null;
|
|
57
59
|
readonly isUpdatable: boolean;
|
|
58
60
|
/**
|
|
59
61
|
* If refetchQueryIndex != null, then the linked field is a client pointer.
|
|
@@ -63,7 +65,7 @@ type ReaderLinkedField = {
|
|
|
63
65
|
type ReaderNonLoadableResolverField = {
|
|
64
66
|
readonly kind: 'Resolver';
|
|
65
67
|
readonly alias: string;
|
|
66
|
-
readonly readerArtifact: TopLevelReaderArtifact<any, any, any>;
|
|
68
|
+
readonly readerArtifact: () => TopLevelReaderArtifact<any, any, any>;
|
|
67
69
|
readonly arguments: Arguments | null;
|
|
68
70
|
readonly usedRefetchQueries: number[];
|
|
69
71
|
};
|
|
@@ -86,4 +88,4 @@ type StableId = string;
|
|
|
86
88
|
type LoadableField<TReadFromStore extends UnknownTReadFromStore, TResult, TArgs = ExtractParameters<TReadFromStore>> = (args: TArgs | void, fetchOptions: FetchOptions<TResult, never>) => [StableId, Factory<FragmentReference<TReadFromStore, TResult>>];
|
|
87
89
|
//#endregion
|
|
88
90
|
export { ComponentReaderArtifact, EagerReaderArtifact, LoadableField, LoadablySelectedField, ReaderAst, ReaderAstNode, ReaderImperativelyLoadedField, ReaderLinkField, ReaderLinkedField, ReaderNonLoadableResolverField, ReaderScalarField, RefetchReaderArtifact, ResolverFirstParameter, StableId, StartUpdate, TopLevelReaderArtifact };
|
|
89
|
-
//# sourceMappingURL=reader.d.
|
|
91
|
+
//# sourceMappingURL=reader.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reader.d.cts","names":[],"sources":["../../src/core/reader.ts"],"mappings":"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"}
|
package/dist/core/reader.d.mts
CHANGED
|
@@ -34,6 +34,7 @@ type ReaderAstNode = ReaderScalarField | ReaderLinkedField | ReaderNonLoadableRe
|
|
|
34
34
|
type ReaderAst<TReadFromStore> = ReadonlyArray<ReaderAstNode>;
|
|
35
35
|
type ReaderScalarField = {
|
|
36
36
|
readonly kind: 'Scalar';
|
|
37
|
+
readonly isFallible: boolean;
|
|
37
38
|
readonly fieldName: string;
|
|
38
39
|
readonly alias: string | null;
|
|
39
40
|
readonly arguments: Arguments | null;
|
|
@@ -45,15 +46,16 @@ type ReaderLinkField = {
|
|
|
45
46
|
};
|
|
46
47
|
type ReaderLinkedField = {
|
|
47
48
|
readonly kind: 'Linked';
|
|
49
|
+
readonly isFallible: boolean;
|
|
48
50
|
readonly fieldName: string;
|
|
49
51
|
readonly alias: string | null;
|
|
50
52
|
readonly selections: ReaderAst<unknown>;
|
|
51
53
|
readonly arguments: Arguments | null;
|
|
52
|
-
readonly condition: EagerReaderArtifact<{
|
|
54
|
+
readonly condition: (() => EagerReaderArtifact<{
|
|
53
55
|
data: any;
|
|
54
56
|
parameters: any;
|
|
55
57
|
startUpdate?: StartUpdate<any>;
|
|
56
|
-
}, StoreLink | null | (StoreLink | null)[] | StoreLink[]> | null;
|
|
58
|
+
}, StoreLink | null | (StoreLink | null)[] | StoreLink[]>) | null;
|
|
57
59
|
readonly isUpdatable: boolean;
|
|
58
60
|
/**
|
|
59
61
|
* If refetchQueryIndex != null, then the linked field is a client pointer.
|
|
@@ -63,7 +65,7 @@ type ReaderLinkedField = {
|
|
|
63
65
|
type ReaderNonLoadableResolverField = {
|
|
64
66
|
readonly kind: 'Resolver';
|
|
65
67
|
readonly alias: string;
|
|
66
|
-
readonly readerArtifact: TopLevelReaderArtifact<any, any, any>;
|
|
68
|
+
readonly readerArtifact: () => TopLevelReaderArtifact<any, any, any>;
|
|
67
69
|
readonly arguments: Arguments | null;
|
|
68
70
|
readonly usedRefetchQueries: number[];
|
|
69
71
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reader.d.mts","names":[],"sources":["../../src/core/reader.ts"],"
|
|
1
|
+
{"version":3,"file":"reader.d.mts","names":[],"sources":["../../src/core/reader.ts"],"mappings":";;;;;;;;KAiBY,sBAAA,wBACa,qBAAA,6CAEC,MAAA,CAAO,WAAA,YAE7B,mBAAA,CAAoB,cAAA,EAAgB,iBAAA,IACpC,uBAAA,CAAwB,cAAA,EAAgB,eAAA;AAAA,KAEhC,mBAAA,wBACa,qBAAA;EAAA,SAGd,IAAA;EAAA,SACA,SAAA,EAAW,oBAAA;EAAA,SACX,SAAA,EAAW,SAAA,CAAU,cAAA;EAAA,SACrB,QAAA,GACP,IAAA,EAAM,sBAAA,CAAuB,cAAA,MAC1B,iBAAA;EAAA,SACI,YAAA;AAAA;AAAA,KAGC,uBAAA,wBACa,qBAAA,0BACC,MAAA,oBAA0B,MAAA,CAAO,WAAA;EAAA,SAEhD,IAAA;EAAA,SACA,SAAA,EAAW,oBAAA;EAAA,SACX,SAAA,EAAW,SAAA,CAAU,cAAA;EAAA,SACrB,QAAA,GACP,IAAA,EAAM,sBAAA,CAAuB,cAAA,GAC7B,YAAA,EAAc,eAAA,KACX,KAAA,CAAM,SAAA;EAAA,SACF,YAAA;AAAA;AAAA,KAGC,sBAAA,wBACa,qBAAA,IACrB,IAAA,CAAK,cAAA;AAAA,KAEG,WAAA,mBACV,OAAA,GAAU,iBAAA;EAAqB,aAAA,EAAe,aAAA;AAAA;AAAA,KAGpC,qBAAA;EAAA,SACD,IAAA;EAAA,SACA,SAAA,EAAW,SAAA;EAAA,SACX,QAAA,GACP,WAAA,EAAa,mBAAA,EACb,QAAA,EAAU,iCAAA,EAEV,SAAA,OAEA,iBAAA,OACA,QAAA,EAAU,SAAA,EACV,cAAA,EAAgB,sBAAA,wBAEhB,oBAAA,EAAsB,wCAAA;AAAA;AAAA,KAId,aAAA,GACR,iBAAA,GACA,iBAAA,GACA,8BAAA,GACA,6BAAA,GACA,qBAAA,GACA,eAAA;AAAA,KAGQ,SAAA,mBAA4B,aAAA,CAAc,aAAA;AAAA,KAE1C,iBAAA;EAAA,SACD,IAAA;EAAA,SACA,UAAA;EAAA,SACA,SAAA;EAAA,SACA,KAAA;EAAA,SACA,SAAA,EAAW,SAAA;EAAA,SACX,WAAA;AAAA;AAAA,KAGC,eAAA;EAAA,SACD,IAAA;EAAA,SACA,KAAA;AAAA;AAAA,KAGC,iBAAA;EAAA,SACD,IAAA;EAAA,SACA,UAAA;EAAA,SACA,SAAA;EAAA,SACA,KAAA;EAAA,SACA,UAAA,EAAY,SAAA;EAAA,SACZ,SAAA,EAAW,SAAA;EAAA,SACX,SAAA,SACE,mBAAA;IACH,IAAA;IAAW,UAAA;IAAiB,WAAA,GAAc,WAAA;EAAA,GAC5C,SAAA,WAAoB,SAAA,aAAsB,SAAA;EAAA,SAGvC,WAAA;EAlFsB;;;EAAA,SAsFtB,iBAAA;AAAA;AAAA,KAOC,8BAAA;EAAA,SACD,IAAA;EAAA,SACA,KAAA;EAAA,SAEA,cAAA,QAAsB,sBAAA;EAAA,SACtB,SAAA,EAAW,SAAA;EAAA,SACX,kBAAA;AAAA;AAAA,KAGC,6BAAA;EAAA,SACD,IAAA;EAAA,SACA,KAAA;EAAA,SACA,qBAAA,EAAuB,qBAAA;EAAA,SACvB,iBAAA;EAAA,SACA,IAAA;AAAA;AAAA,KAGC,qBAAA;EAAA,SACD,IAAA;EAAA,SACA,KAAA;EAAA,SAKA,IAAA;EAAA,SACA,cAAA,EAAgB,SAAA;EAAA,SAChB,gBAAA,EAAkB,SAAA;EAAA,SAGlB,UAAA,EACL,kBAAA,uBACA,wBAAA;AAAA;AAAA,KAGM,QAAA;AAAA,KAUA,aAAA,wBACa,qBAAA,mBAEf,iBAAA,CAAkB,cAAA,MAE1B,IAAA,EAAM,KAAA,SAKN,YAAA,EAAc,YAAA,CAAa,OAAA,cACvB,QAAA,EAAU,OAAA,CAAQ,iBAAA,CAAkB,cAAA,EAAgB,OAAA"}
|