@isograph/react 0.0.0-main-d4700c2e → 0.0.0-main-51ef9bdb

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.
Files changed (44) hide show
  1. package/.turbo/turbo-compile-libs.log +2 -2
  2. package/.turbo/turbo-tsc.log +1 -1
  3. package/dist/core/IsographEnvironment.d.mts.map +1 -1
  4. package/dist/core/IsographEnvironment.d.ts.map +1 -1
  5. package/dist/core/IsographEnvironment.js +16 -6
  6. package/dist/core/IsographEnvironment.mjs +16 -6
  7. package/dist/core/IsographEnvironment.mjs.map +1 -1
  8. package/dist/core/PromiseWrapper.d.mts.map +1 -1
  9. package/dist/core/cache.js +1 -3
  10. package/dist/core/cache.mjs +1 -3
  11. package/dist/core/cache.mjs.map +1 -1
  12. package/dist/core/entrypoint.d.mts +7 -2
  13. package/dist/core/entrypoint.d.mts.map +1 -1
  14. package/dist/core/entrypoint.d.ts +7 -2
  15. package/dist/core/entrypoint.d.ts.map +1 -1
  16. package/dist/core/entrypoint.mjs.map +1 -1
  17. package/dist/core/logging.d.ts.map +1 -1
  18. package/dist/core/makeNetworkRequest.js +6 -6
  19. package/dist/core/makeNetworkRequest.mjs +6 -6
  20. package/dist/core/makeNetworkRequest.mjs.map +1 -1
  21. package/dist/core/read.d.mts.map +1 -1
  22. package/dist/core/read.d.ts.map +1 -1
  23. package/dist/core/read.js +19 -17
  24. package/dist/core/read.mjs +19 -17
  25. package/dist/core/read.mjs.map +1 -1
  26. package/dist/core/reader.d.mts +3 -3
  27. package/dist/core/reader.d.mts.map +1 -1
  28. package/dist/core/reader.d.ts +3 -3
  29. package/dist/core/reader.d.ts.map +1 -1
  30. package/package.json +4 -4
  31. package/src/core/IsographEnvironment.ts +18 -5
  32. package/src/core/cache.ts +1 -9
  33. package/src/core/entrypoint.ts +16 -2
  34. package/src/core/makeNetworkRequest.ts +10 -12
  35. package/src/core/read.ts +15 -14
  36. package/src/core/reader.ts +7 -5
  37. package/src/tests/__isograph/Node/asEconomist/resolver_reader.ts +3 -3
  38. package/src/tests/__isograph/Query/linkedUpdate/resolver_reader.ts +3 -3
  39. package/src/tests/__isograph/Query/meName/resolver_reader.ts +3 -3
  40. package/src/tests/__isograph/Query/meNameSuccessor/resolver_reader.ts +3 -3
  41. package/src/tests/__isograph/Query/nodeField/resolver_reader.ts +3 -3
  42. package/src/tests/__isograph/Query/normalizeUndefinedField/resolver_reader.ts +3 -3
  43. package/src/tests/__isograph/Query/startUpdate/resolver_reader.ts +3 -3
  44. package/src/tests/__isograph/Query/subquery/resolver_reader.ts +3 -3
@@ -1 +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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"}
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 if (readerWithRefetchQueries == null) {\n throw new Error(\n 'Expected readerWithRefetchQueries to be not null. This is indicative of a bug in Isograph.',\n );\n }\n\n const fragment: FragmentReference<TReadFromStore, TClientFieldValue> = {\n kind: 'FragmentReference',\n // TODO this smells.\n readerWithRefetchQueries: wrapResolvedValue(readerWithRefetchQueries),\n fieldName: readerWithRefetchQueries.readerArtifact.fieldName,\n readerArtifactKind: readerWithRefetchQueries.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 = readerWithRefetchQueries.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 readerWithRefetchQueries.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":";;;;;;;;;;;;;AA2CA,IAAI,mBAAmB;AAEvB,SAAgB,wBAMd,aACA,UAQA,WACA,0BAGA,cACiD;AACjD,SAAQ,cAAc,eAAe,4BAArC;EACE,KAAK,MACH,QAAO,mBACL,aACA,UACA,WACA,0BACA,aACD;EAEH,KAAK,KACH,QAAO,uCACL,aACA,UACA,UACD;EAEH,KAAK;AACH,OACE,SAAS,mBAAmB,iBAAiB,SAC7C,yBAEA,OAAM,IAAI,MACR,gIAED;AAYH,OAVe,MACb,aACA,SAAS,mBAAmB,iBAAiB,YAC7C,WACA;IACE,QAAQ;IACR,YAAY,SAAS;IACtB,CACF,CAEU,SAAS,aAClB,QAAO,uCACL,aACA,UACA,UACD;OAED,QAAO,mBACL,aACA,UACA,WACA,0BACA,aACD;;;AAMT,SAAgB,uCAKd,aACA,UAQA,WACiD;CACjD,IAAIA,SAE+B;EACjC,MAAM;EACN,eAAe,uCACb,aACA,UACA,UACD;EACF;AACD,QAAO,CACL,kBAAkB,OAAU,QACtB;AACJ,MAAI,OAAO,SAAS,WAClB,UAAS,0BAA0B,aAAa,OAAO;GAG5D;;AAGH,SAAgB,mBAMd,aACA,UAQA,WACA,0BAGA,cACiD;CAEjD,MAAM,qBAAqB,mBAAmB;AAC9C;CACA,IAAIC,SAA+B;EACjC,MAAM;EACN,eAAe,uCACb,aACA,UACA,UACD;EACD,YACE,cAAc,6BAA6B,OACvC,qBACE,aACA,UACA,WACA,cAAc,0BACf,GACD;EACP;AAED,YAAW,oBAAoB;EAC7B,MAAM;EACN;EACA;EACA,kBAAkB;EACnB,EAAE;AAqIH,QAhBkE,CAFlD,YAhHA,QAAQ,IAAI;EAC1B,YAAY,gBACV,SAAS,mBAAmB,WAC5B,UACD;EACD,OAAO,cAAc,iBAAiB;EACtC,0BAA0B;EAC3B,CAAC,CACC,MAAM,CAAC,iBAAiB,kBAAkBC,gCAA8B;AACvE,aAAW,oBAAoB;GAC7B,MAAM;GACN;GACA,kBAAkB;GACnB,EAAE;AAEH,MAAI,gBAAgB,UAAU,MAAM;AAClC,OAAI;AACF,kBAAc,WAAW;WACnB;AACR,SAAM,IAAI,MAAM,+BAA+B,EAC7C,OAAO,iBACR,CAAC;;EAGJ,MAAM,OAAO;GAAE,QAAQ;GAAS,YAAY,SAAS;GAAc;AAEnE,MAAI,OAAO,SAAS,uBAClB,KAAI,OAAO,cAAc,KACvB,UACE,gEACE,aACA,SACC,eACC,cACE,aACA,YACA,iBAAiB,YACjB,gBAAgB,QAAQ,EAAE,EAC1B,WACA,sBACA,IAAI,KAAK,CACV,CACJ;OACE;GACL,MAAMC,iCAAiC,IAAI,KAAK;AAChD,eAAY,QAAQ,6BAA6B,YAAY,MAAM;AACnE,iBACE,aACA,YAAY,OACZ,iBAAiB,YACjB,gBAAgB,QAAQ,EAAE,EAC1B,WACA,MACA,eACD;AAED,cAAW,oBAAoB;IAC7B,MAAM;IACN,OAAO,YAAY;IACH;IACjB,EAAE;AAEH,qBAAkB,aAAa,eAAe;AAE9C,YAAS;IACP,MAAM;IACN,eAAe,OAAO;IACvB;;EAIL,MAAM,aAAa,cAAc;AACjC,MAAI,cAAc,MAAM;GACtB,IAAI,OAAO,sBACT,UACA,aACA,MACA,WACAD,2BACD;AAED,OAAI;AAKF,eAAW,KAAK;WACV;;GAEV,CACD,OAAO,MAAM;AACZ,aAAW,oBAAoB;GAC7B,MAAM;GACN,kBAAkB;GAClB,OAAO;GACR,EAAE;AACH,MAAI;AACF,iBAAc,WAAW;UACnB;AAER,MAAI,OAAO,SAAS,uBAClB,UACE,gEACE,aACA,QACA,KACD;AAGL,QAAM;GACN,CAEgC,QAI5B;AACJ,MAAI,OAAO,SAAS,uBAClB,UACE,gEACE,aACA,QACA,KACD;AAEL,MAAI,OAAO,SAAS,WAClB,UAAS,0BAA0B,aAAa,OAAO;GAG5D;;AAwBH,SAAS,sBAMP,UAQA,aACA,MACA,WACA,0BAG0B;AAO1B,KAAI,SAAS,SAAS,cAAc;EAElC,MAAM,qBAAqB,kBAAkB,OAAU;EAGvD,MAAM,4BAA4B;GAChC,mBAAmB;GACnB,qBAAqB;GACtB;AACD,MAAI,4BAA4B,KAC9B,OAAM,IAAI,MACR,6FACD;EAGH,MAAME,WAAiE;GACrE,MAAM;GAEN,0BAA0B,kBAAkB,yBAAyB;GACrE,WAAW,yBAAyB,eAAe;GACnD,oBAAoB,yBAAyB,eAAe;GAC5D;GACA;GACA,gBAAgB;GACjB;EACD,MAAM,iBAAiB,qBACrB,aACA,UACA,0BACD,CAAC;EACF,MAAM,iBAAiB,yBAAyB;AAChD,UAAQ,eAAe,MAAvB;GACE,KAAK,0BAIH,QAAO,2BACL,aACA;IACE,MAAM;IACN,0BAA0B,kBAAkB;KAC1C,MAAM;KACU;KAChB,sBACE,yBAAyB;KAC5B,CAAC;IACF,WAAW,eAAe;IAC1B,oBAAoB,eAAe;IACnC;IACA;IACA,gBAAgB;IACjB,EACD,0BACD;GAEH,KAAK,sBACH,QAAO,eAAe,SAAS;IAC7B,MAAM;IACN,YAAY;IACZ,GAAI,eAAe,eACf,EACE,aAAa,6BACX,aACA,UACA,0BACD,EACF,GACD;IACL,CAAC;;;AAIR,QAAO;;AAGT,SAAS,uCAKP,aACA,UAQA,WACe;CAOf,MAAMC,gBAA+B;EACnC,kBANA,SAAS,mBAAmB,iBAAiB,SAAS,qBAClD,kBAAkB,SAAS,mBAAmB,iBAAiB,GAC/D,YAAY,SAAS,mBAAmB,iBAAiB,QAAQ,CAAC;EAKtE;EACA,MAJW;GAAE,QAAQ;GAAS,YAAY,SAAS;GAAc;EAKlE;AACD,aAAY,aAAa,cAAc;AACvC,QAAO;;AAGT,SAAS,qBAMP,aACA,UAQA,WACA,2BACsB;CACtB,MAAM,OAAO;EAAE,QAAQ;EAAS,YAAY,SAAS;EAAc;AAEnE,KACE,SAAS,mBAAmB,iBAAiB,SAC7C,yBAEA,OAAM,IAAI,MACR,sFACD;CAEH,MAAMF,iCAAiC,IAAI,KAAK;CAChD,MAAM,aAAc,YAAY,QAC9B,uCAAuC,YAAY,MAAM;AAC3D,eACE,aACA,YAAY,OACZ,SAAS,mBAAmB,iBAAiB,YAC7C,2BACA,WACA,MACA,eACD;AAED,YAAW,oBAAoB;EAC7B,MAAM;EACN,OAAO,YAAY;EACH;EACjB,EAAE;AAEH,mBAAkB,aAAa,eAAe;AAC9C,QAAO;;AAGT,SAAS,gEACP,aACA,QACA,iBACwC;AACxC,KAAI,OAAO,cAAc,KACvB,2CACE,aACA,OAAO,YACPG,gBACD;AAGH,QAAO;EACL,MAAM;EACN,eAAe,OAAO;EACvB;;AAGH,SAAS,0BACP,aACA,QAC8B;AAE9B,KAD6B,cAAc,aAAa,OAAO,cAAc,CAE3E,2BAA0B,YAAY;AAGxC,QAAO,EACL,MAAM,YACP"}
@@ -1 +1 @@
1
- {"version":3,"file":"read.d.mts","names":[],"sources":["../../src/core/read.ts"],"sourcesContent":[],"mappings":";;;;;;;AAsDY,KAAA,sBAAsB,CAAA,CAAA,CAAA,GAAA;EACH,SAAA,kBAAA,EAAA,cAAA;EACF,SAAA,IAAA,EAAZ,WAAY,CAAA,CAAA,CAAA;CAAZ;AAAW,iBAGZ,oBAHY,CAAA,uBAIH,qBAJG,CAAA,CAAA,WAAA,EAMb,mBANa,EAAA,iBAAA,EAOP,iBAPO,CAOW,cAPX,EAAA,OAAA,CAAA,EAAA,qBAAA,EAQH,2BARG,CAAA,EASzB,sBATyB,CASF,cATE,CAAA;AAGZ,KAuEJ,qBAvEwB,CAAA,IAAA,CAAA,GAAA;EACX,SAAA,IAAA,EAAA,SAAA;EAEV,SAAA,IAAA,EAsEE,IAtEF;CACwB;AAAlB,KAwET,cAxES,CAAA,IAAA,CAAA,GAyEjB,qBAzEiB,CAyEK,IAzEL,CAAA,GAAA;EACI,SAAA,IAAA,EAAA,aAAA;EACC,SAAA,MAAA,EAAA,MAAA;EAAvB,SAAA,YAAA,CAAA,EA2E2B,cA3E3B,CAAA,OAAA,CAAA;EAAsB,SAAA,UAAA,EA4EE,SA5EF;AAiEzB,CAAA;AAWoC,KA4zBxB,2BAAA,GA5zBwB;EA4zBxB,iBAAA,EAAA,OAAA"}
1
+ {"version":3,"file":"read.d.mts","names":[],"sources":["../../src/core/read.ts"],"sourcesContent":[],"mappings":";;;;;;;AAsDY,KAAA,sBAAsB,CAAA,CAAA,CAAA,GAAA;EACH,SAAA,kBAAA,EAAA,cAAA;EACF,SAAA,IAAA,EAAZ,WAAY,CAAA,CAAA,CAAA;CAAZ;AAAW,iBAGZ,oBAHY,CAAA,uBAIH,qBAJG,CAAA,CAAA,WAAA,EAMb,mBANa,EAAA,iBAAA,EAOP,iBAPO,CAOW,cAPX,EAAA,OAAA,CAAA,EAAA,qBAAA,EAQH,2BARG,CAAA,EASzB,sBATyB,CASF,cATE,CAAA;AAGZ,KAuEJ,qBAvEwB,CAAA,IAAA,CAAA,GAAA;EACX,SAAA,IAAA,EAAA,SAAA;EAEV,SAAA,IAAA,EAsEE,IAtEF;CACwB;AAAlB,KAwET,cAxES,CAAA,IAAA,CAAA,GAyEjB,qBAzEiB,CAyEK,IAzEL,CAAA,GAAA;EACI,SAAA,IAAA,EAAA,aAAA;EACC,SAAA,MAAA,EAAA,MAAA;EAAvB,SAAA,YAAA,CAAA,EA2E2B,cA3E3B,CAAA,OAAA,CAAA;EAAsB,SAAA,UAAA,EA4EE,SA5EF;AAiEzB,CAAA;AAWoC,KA6zBxB,2BAAA,GA7zBwB;EA6zBxB,iBAAA,EAAA,OAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"read.d.ts","names":[],"sources":["../../src/core/read.ts"],"sourcesContent":[],"mappings":";;;;;;AAwD6B,KAFjB,sBAEiB,CAAA,CAAA,CAAA,GAAA;EAAZ,SAAA,kBAAA,EADc,cACd;EAAW,SAAA,IAAA,EAAX,WAAW,CAAC,CAAD,CAAA;AAG5B,CAAA;AACyB,iBADT,oBACS,CAAA,uBAAA,qBAAA,CAAA,CAAA,WAAA,EAEV,mBAFU,EAAA,iBAAA,EAGJ,iBAHI,CAGc,cAHd,EAAA,OAAA,CAAA,EAAA,qBAAA,EAIA,2BAJA,CAAA,EAKtB,sBALsB,CAKC,cALD,CAAA;AAEV,KAoEH,qBApEG,CAAA,IAAA,CAAA,GAAA;EACwB,SAAA,IAAA,EAAA,SAAA;EAAlB,SAAA,IAAA,EAqEJ,IArEI;CACI;AACC,KAsEd,cAtEc,CAAA,IAAA,CAAA,GAuEtB,qBAvEsB,CAuEA,IAvEA,CAAA,GAAA;EAAvB,SAAA,IAAA,EAAA,aAAA;EAAsB,SAAA,MAAA,EAAA,MAAA;EAiEb,SAAA,YAAA,CAAA,EAUkB,cAVG,CAAA,OAEZ,CAAA;EAGT,SAAA,UAAc,EAMC,SAND;CACA;KAi0Bd,2BAAA"}
1
+ {"version":3,"file":"read.d.ts","names":[],"sources":["../../src/core/read.ts"],"sourcesContent":[],"mappings":";;;;;;AAwD6B,KAFjB,sBAEiB,CAAA,CAAA,CAAA,GAAA;EAAZ,SAAA,kBAAA,EADc,cACd;EAAW,SAAA,IAAA,EAAX,WAAW,CAAC,CAAD,CAAA;AAG5B,CAAA;AACyB,iBADT,oBACS,CAAA,uBAAA,qBAAA,CAAA,CAAA,WAAA,EAEV,mBAFU,EAAA,iBAAA,EAGJ,iBAHI,CAGc,cAHd,EAAA,OAAA,CAAA,EAAA,qBAAA,EAIA,2BAJA,CAAA,EAKtB,sBALsB,CAKC,cALD,CAAA;AAEV,KAoEH,qBApEG,CAAA,IAAA,CAAA,GAAA;EACwB,SAAA,IAAA,EAAA,SAAA;EAAlB,SAAA,IAAA,EAqEJ,IArEI;CACI;AACC,KAsEd,cAtEc,CAAA,IAAA,CAAA,GAuEtB,qBAvEsB,CAuEA,IAvEA,CAAA,GAAA;EAAvB,SAAA,IAAA,EAAA,aAAA;EAAsB,SAAA,MAAA,EAAA,MAAA;EAiEb,SAAA,YAAA,CAAA,EAUkB,cAVG,CAAA,OAEZ,CAAA;EAGT,SAAA,UAAc,EAMC,SAND;CACA;KAk0Bd,2BAAA"}
package/dist/core/read.js CHANGED
@@ -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: require_PromiseWrapper.wrapResolvedValue({
200
- kind: "ReaderWithRefetchQueries",
201
- readerArtifact: field.readerArtifact,
202
- nestedRefetchQueries: resolverRefetchQueries
203
- }),
204
- fieldName: field.readerArtifact.fieldName,
205
- readerArtifactKind: field.readerArtifact.kind,
204
+ readerWithRefetchQueries: require_PromiseWrapper.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 (field.readerArtifact.kind) {
211
+ switch (readerWithRefetchQueries.readerArtifact.kind) {
211
212
  case "EagerReaderArtifact": {
212
- const data = readData(environment, field.readerArtifact.readerAst, root, generateChildVariableMap(variables, field.arguments), resolverRefetchQueries, networkRequest, networkRequestOptions, mutableEncounteredRecords);
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: field.readerArtifact.hasUpdatable ? require_startUpdate.getOrCreateCachedStartUpdate(environment, fragment, networkRequestOptions) : void 0
223
+ startUpdate: readerWithRefetchQueries.readerArtifact.hasUpdatable ? require_startUpdate.getOrCreateCachedStartUpdate(environment, fragment, networkRequestOptions) : void 0
223
224
  };
224
225
  return {
225
226
  kind: "Success",
226
- data: field.readerArtifact.resolver(firstParameter)
227
+ data: readerWithRefetchQueries.readerArtifact.resolver(firstParameter)
227
228
  };
228
229
  }
229
230
  case "ComponentReaderArtifact": return {
@@ -249,7 +250,8 @@ function readLinkedFieldData(environment, field, storeRecord, root, variables, n
249
250
  const storeRecordName = require_cache.getParentRecordKey(field, variables);
250
251
  let value = storeRecord[storeRecordName];
251
252
  if (field.condition != null) {
252
- const data$1 = readData$1(field.condition.readerAst, root);
253
+ const condition = field.condition();
254
+ const data$1 = readData$1(condition.readerAst, root);
253
255
  if (data$1.kind === "MissingData") return {
254
256
  kind: "MissingData",
255
257
  reason: "Missing data for " + storeRecordName + " on root " + root.__link,
@@ -260,19 +262,19 @@ function readLinkedFieldData(environment, field, storeRecord, root, variables, n
260
262
  kind: "FragmentReference",
261
263
  readerWithRefetchQueries: require_PromiseWrapper.wrapResolvedValue({
262
264
  kind: "ReaderWithRefetchQueries",
263
- readerArtifact: field.condition,
265
+ readerArtifact: condition,
264
266
  nestedRefetchQueries: []
265
267
  }),
266
268
  root,
267
- fieldName: field.condition.fieldName,
268
- readerArtifactKind: field.condition.kind,
269
+ fieldName: condition.fieldName,
270
+ readerArtifactKind: condition.kind,
269
271
  variables: generateChildVariableMap(variables, []),
270
272
  networkRequest
271
273
  };
272
- value = field.condition.resolver({
274
+ value = condition.resolver({
273
275
  data: data$1.data,
274
276
  parameters: {},
275
- ...field.condition.hasUpdatable ? { startUpdate: require_startUpdate.getOrCreateCachedStartUpdate(environment, fragment, networkRequestOptions) } : void 0
277
+ ...condition.hasUpdatable ? { startUpdate: require_startUpdate.getOrCreateCachedStartUpdate(environment, fragment, networkRequestOptions) } : void 0
276
278
  });
277
279
  }
278
280
  if (Array.isArray(value)) {
@@ -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
- kind: "ReaderWithRefetchQueries",
201
- readerArtifact: field.readerArtifact,
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 (field.readerArtifact.kind) {
211
+ switch (readerWithRefetchQueries.readerArtifact.kind) {
211
212
  case "EagerReaderArtifact": {
212
- const data = readData(environment, field.readerArtifact.readerAst, root, generateChildVariableMap(variables, field.arguments), resolverRefetchQueries, networkRequest, networkRequestOptions, mutableEncounteredRecords);
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: field.readerArtifact.hasUpdatable ? getOrCreateCachedStartUpdate(environment, fragment, networkRequestOptions) : void 0
223
+ startUpdate: readerWithRefetchQueries.readerArtifact.hasUpdatable ? getOrCreateCachedStartUpdate(environment, fragment, networkRequestOptions) : void 0
223
224
  };
224
225
  return {
225
226
  kind: "Success",
226
- data: field.readerArtifact.resolver(firstParameter)
227
+ data: readerWithRefetchQueries.readerArtifact.resolver(firstParameter)
227
228
  };
228
229
  }
229
230
  case "ComponentReaderArtifact": return {
@@ -249,7 +250,8 @@ function readLinkedFieldData(environment, field, storeRecord, root, variables, n
249
250
  const storeRecordName = getParentRecordKey(field, variables);
250
251
  let value = storeRecord[storeRecordName];
251
252
  if (field.condition != null) {
252
- const data$1 = readData$1(field.condition.readerAst, root);
253
+ const condition = field.condition();
254
+ const data$1 = readData$1(condition.readerAst, root);
253
255
  if (data$1.kind === "MissingData") return {
254
256
  kind: "MissingData",
255
257
  reason: "Missing data for " + storeRecordName + " on root " + root.__link,
@@ -260,19 +262,19 @@ function readLinkedFieldData(environment, field, storeRecord, root, variables, n
260
262
  kind: "FragmentReference",
261
263
  readerWithRefetchQueries: wrapResolvedValue({
262
264
  kind: "ReaderWithRefetchQueries",
263
- readerArtifact: field.condition,
265
+ readerArtifact: condition,
264
266
  nestedRefetchQueries: []
265
267
  }),
266
268
  root,
267
- fieldName: field.condition.fieldName,
268
- readerArtifactKind: field.condition.kind,
269
+ fieldName: condition.fieldName,
270
+ readerArtifactKind: condition.kind,
269
271
  variables: generateChildVariableMap(variables, []),
270
272
  networkRequest
271
273
  };
272
- value = field.condition.resolver({
274
+ value = condition.resolver({
273
275
  data: data$1.data,
274
276
  parameters: {},
275
- ...field.condition.hasUpdatable ? { startUpdate: getOrCreateCachedStartUpdate(environment, fragment, networkRequestOptions) } : void 0
277
+ ...condition.hasUpdatable ? { startUpdate: getOrCreateCachedStartUpdate(environment, fragment, networkRequestOptions) } : void 0
276
278
  });
277
279
  }
278
280
  if (Array.isArray(value)) {
@@ -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 {\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: 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<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 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":["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 {\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 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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"}
@@ -49,11 +49,11 @@ type ReaderLinkedField = {
49
49
  readonly alias: string | null;
50
50
  readonly selections: ReaderAst<unknown>;
51
51
  readonly arguments: Arguments | null;
52
- readonly condition: EagerReaderArtifact<{
52
+ readonly condition: (() => EagerReaderArtifact<{
53
53
  data: any;
54
54
  parameters: any;
55
55
  startUpdate?: StartUpdate<any>;
56
- }, StoreLink | null | (StoreLink | null)[] | StoreLink[]> | null;
56
+ }, StoreLink | null | (StoreLink | null)[] | StoreLink[]>) | null;
57
57
  readonly isUpdatable: boolean;
58
58
  /**
59
59
  * If refetchQueryIndex != null, then the linked field is a client pointer.
@@ -63,7 +63,7 @@ type ReaderLinkedField = {
63
63
  type ReaderNonLoadableResolverField = {
64
64
  readonly kind: 'Resolver';
65
65
  readonly alias: string;
66
- readonly readerArtifact: TopLevelReaderArtifact<any, any, any>;
66
+ readonly readerArtifact: () => TopLevelReaderArtifact<any, any, any>;
67
67
  readonly arguments: Arguments | null;
68
68
  readonly usedRefetchQueries: number[];
69
69
  };
@@ -1 +1 @@
1
- {"version":3,"file":"reader.d.mts","names":[],"sources":["../../src/core/reader.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"reader.d.mts","names":[],"sources":["../../src/core/reader.ts"],"sourcesContent":[],"mappings":"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"}
@@ -49,11 +49,11 @@ type ReaderLinkedField = {
49
49
  readonly alias: string | null;
50
50
  readonly selections: ReaderAst<unknown>;
51
51
  readonly arguments: Arguments | null;
52
- readonly condition: EagerReaderArtifact<{
52
+ readonly condition: (() => EagerReaderArtifact<{
53
53
  data: any;
54
54
  parameters: any;
55
55
  startUpdate?: StartUpdate<any>;
56
- }, StoreLink | null | (StoreLink | null)[] | StoreLink[]> | null;
56
+ }, StoreLink | null | (StoreLink | null)[] | StoreLink[]>) | null;
57
57
  readonly isUpdatable: boolean;
58
58
  /**
59
59
  * If refetchQueryIndex != null, then the linked field is a client pointer.
@@ -63,7 +63,7 @@ type ReaderLinkedField = {
63
63
  type ReaderNonLoadableResolverField = {
64
64
  readonly kind: 'Resolver';
65
65
  readonly alias: string;
66
- readonly readerArtifact: TopLevelReaderArtifact<any, any, any>;
66
+ readonly readerArtifact: () => TopLevelReaderArtifact<any, any, any>;
67
67
  readonly arguments: Arguments | null;
68
68
  readonly usedRefetchQueries: number[];
69
69
  };
@@ -1 +1 @@
1
- {"version":3,"file":"reader.d.ts","names":[],"sources":["../../src/core/reader.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"reader.d.ts","names":[],"sources":["../../src/core/reader.ts"],"sourcesContent":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@isograph/react",
3
- "version": "0.0.0-main-d4700c2e",
3
+ "version": "0.0.0-main-51ef9bdb",
4
4
  "description": "Use Isograph with React",
5
5
  "homepage": "https://isograph.dev",
6
6
  "main": "./dist/index.js",
@@ -8,9 +8,9 @@
8
8
  "author": "Isograph Labs",
9
9
  "license": "MIT",
10
10
  "dependencies": {
11
- "@isograph/disposable-types": "0.0.0-main-d4700c2e",
12
- "@isograph/react-disposable-state": "0.0.0-main-d4700c2e",
13
- "@isograph/reference-counted-pointer": "0.0.0-main-d4700c2e"
11
+ "@isograph/disposable-types": "0.0.0-main-51ef9bdb",
12
+ "@isograph/react-disposable-state": "0.0.0-main-51ef9bdb",
13
+ "@isograph/reference-counted-pointer": "0.0.0-main-51ef9bdb"
14
14
  },
15
15
  "peerDependencies": {
16
16
  "react": "^18.0.0 || ^19.0.0"