@isograph/react 0.0.0-main-5d8fefba → 0.0.0-main-50d1fb0b

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.
@@ -1,11 +1,11 @@
1
1
  ../.. |  WARN  Unsupported engine: wanted: {"node":"24.12.0"} (current: {"node":"v22.21.1","pnpm":"10.15.0"})
2
2
 
3
- > @isograph/react@0.0.0-main-5d8fefba compile-libs /home/runner/work/isograph/isograph/libs/isograph-react
3
+ > @isograph/react@0.0.0-main-50d1fb0b compile-libs /home/runner/work/isograph/isograph/libs/isograph-react
4
4
  > tsdown
5
5
 
6
6
  ℹ tsdown v0.15.10 powered by rolldown v1.0.0-beta.44
7
7
  ℹ Using tsdown config: /home/runner/work/isograph/isograph/tsdown.config.ts
8
- (node:2512) [MODULE_TYPELESS_PACKAGE_JSON] Warning: Module type of file:///home/runner/work/isograph/isograph/tsdown.config.ts is not specified and it doesn't parse as CommonJS.
8
+ (node:2709) [MODULE_TYPELESS_PACKAGE_JSON] Warning: Module type of file:///home/runner/work/isograph/isograph/tsdown.config.ts is not specified and it doesn't parse as CommonJS.
9
9
  Reparsing as ES module because module syntax was detected. This incurs a performance overhead.
10
10
  To eliminate this warning, add "type": "module" to /home/runner/work/isograph/isograph/package.json.
11
11
  (Use `node --trace-warnings ...` to show where the warning was created)
@@ -0,0 +1,5 @@
1
+ ../.. |  WARN  Unsupported engine: wanted: {"node":"24.12.0"} (current: {"node":"v22.21.1","pnpm":"10.15.0"})
2
+
3
+ > @isograph/react@0.0.0-main-50d1fb0b tsc /home/runner/work/isograph/isograph/libs/isograph-react
4
+ > tsc
5
+
@@ -5,6 +5,7 @@ import { NetworkRequestReaderOptions, WithEncounteredRecords } from "./read.mjs"
5
5
  import { StoreLayer } from "./optimisticProxy.mjs";
6
6
  import { WrappedLogFunction } from "./logging.mjs";
7
7
  import { ExtractStartUpdate, FragmentReference, StableIdForFragmentReference, UnknownTReadFromStore, Variables } from "./FragmentReference.mjs";
8
+ import { LinkedParentRecordKey, ScalarParentRecordKey } from "./cache.mjs";
8
9
  import { IsographEntrypoint, IsographOperation, IsographPersistedOperation } from "./entrypoint.mjs";
9
10
  import { RetainedQuery } from "./garbageCollection.mjs";
10
11
  import { ParentCache } from "@isograph/react-disposable-state";
@@ -65,9 +66,13 @@ type StoreLink = {
65
66
  readonly __link: DataId;
66
67
  readonly __typename: TypeName;
67
68
  };
68
- type DataTypeValue = undefined | number | boolean | string | null | StoreLink | readonly DataTypeValue[];
69
+ type DataTypeValueScalar = undefined | unknown | number | boolean | string | null | readonly DataTypeValueScalar[];
70
+ type DataTypeValueLinked = undefined | null | StoreLink | readonly DataTypeValueLinked[];
69
71
  type StoreRecord = {
70
- [index: DataId | string]: DataTypeValue;
72
+ [index: ScalarParentRecordKey]: DataTypeValueScalar;
73
+ [index: LinkedParentRecordKey]: DataTypeValueLinked;
74
+ } & {
75
+ readonly __typename?: TypeName;
71
76
  readonly id?: DataId;
72
77
  };
73
78
  type TypeName = string;
@@ -85,5 +90,5 @@ interface BaseStoreLayerData extends StoreLayerData {
85
90
  }
86
91
  declare function createIsographStore(): BaseStoreLayerData;
87
92
  //#endregion
88
- export { AnyChangesToRecordSubscription, AnyRecordSubscription, BaseStoreLayerData, CacheMap, ComponentOrFieldName, DataId, DataTypeValue, FieldCache, FragmentSubscription, IsographEnvironment, IsographNetworkFunction, Link, MissingFieldHandler, ROOT_ID, StoreLayerData, StoreLink, StoreRecord, StringifiedArgs, Subscription, Subscriptions, TypeName, createIsographStore };
93
+ export { AnyChangesToRecordSubscription, AnyRecordSubscription, BaseStoreLayerData, CacheMap, ComponentOrFieldName, DataId, DataTypeValueLinked, DataTypeValueScalar, FieldCache, FragmentSubscription, IsographEnvironment, IsographNetworkFunction, Link, MissingFieldHandler, ROOT_ID, StoreLayerData, StoreLink, StoreRecord, StringifiedArgs, Subscription, Subscriptions, TypeName, createIsographStore };
89
94
  //# sourceMappingURL=IsographEnvironment.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"IsographEnvironment.d.mts","names":[],"sources":["../../src/core/IsographEnvironment.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;KA4BY,oBAAA;KACA,eAAA;AADA,KAGA,UAHA,CAAA,CAAA,CAAA,GAAoB;EACpB,CAAA,GAAA,EAGJ,4BAHmB,CAAA,EAGY,CAHZ;AAE3B,CAAA;AAIY,KAAA,oBAAoB,CAAA,uBAAwB,qBAAxB,CAAA,GAAA;EAAwB,SAAA,IAAA,EAAA,sBAAA;EAIG,SAAA,QAAA,EAAA,CAAA,4BAAA,EAAvB,sBAAuB,CAAA,cAAA,CAAA,EAAA,GAAA,IAAA;EAAvB;EAGkB,yBAAA,EAAvB,sBAAuB,CAAA,cAAA,CAAA;EAAvB,SAAA,iBAAA,EACC,iBADD,CACmB,cADnB,EAAA,GAAA,CAAA;EACmB,SAAA,SAAA,EAC1B,SAD0B,CAChB,cADgB,CAAA;CAAlB;AACE,KAGtB,8BAAA,GAHsB;EAAV,SAAA,IAAA,EAAA,oBAAA;EAAS,SAAA,QAAA,EAAA,GAAA,GAAA,IAAA;EAGrB,SAAA,UAAA,EAGW,SAHX;AAMZ,CAAA;AAKY,KALA,qBAAA,GAKY;EACpB,SAAA,IAAA,EAAA,YAAA;EACA,SAAA,QAAA,EAAA,GAAA,GAAA,IAAA;CACA;AAAqB,KAHb,YAAA,GACR,oBAEqB,CAAA,GAAA,CAAA,GADrB,8BACqB,GAArB,qBAAqB;AACb,KAAA,aAAA,GAAgB,GAAH,CAAO,YAAA,CAAA;AAEpB,KAAA,QAAQ,CAAA,CAAA,CAAA,GAAA;EAER,CAAA,KAAA,EAAA,MAAA,CAAA,EAFiC,WAEd,CAF0B,CAE1B,CAAA;CACtB;AACmB,KAFhB,mBAAA,GAEgB;EACE,KAAA,EAFrB,UAEqB;EACE,SAAA,eAAA,EAFJ,uBAEI;EACM,SAAM,iBAAA,EAFd,yBAEc;EAAjB,SAAA,mBAAA,EADK,mBACL,GAAA,IAAA;EACa,SAAA,cAAA,EADb,UACa,CADF,KAAA,CAAM,EACJ,CAAA,GAAA,CAAA,CAAA;EAAX,SAAA,gBAAA,EAAA,UAAA,CAAW,WAAX,CAAA,GAAA,CAAA,GAAA,SAAA,CAAA;EACH,SAAA,aAAA,EAAA,aAAA;EAGS,SAAA,aAAA,EAAT,QAAS,CAAA,iBAAA,CAAA,GAAA,EAAA,GAAA,CAAA,CAAA;EAAT,SAAA,uBAAA,EAEU,GAFV,CAAA,MAAA,EAItB,cAJsB,CAIP,kBAJO,CAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,CAAA,CAAA,CAAA;EAIP,SAAA,eAAA,EAES,GAFT,CAEa,aAFb,CAAA;EAAf,SAAA,QAAA,EAGiB,KAHjB,CAGuB,aAHvB,CAAA;EAFgC,SAAA,YAAA,EAAA,MAAA;EAIJ,SAAA,OAAA,EAGZ,GAHY,CAGR,kBAHQ,CAAA;CAAJ;AACD,KAKf,mBAAA,GALe,CAAA,WAAA,EAMZ,WANY,EAAA,IAAA,EAOnB,SAPmB,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,EAAA;EAAN,CAAA,KAAA,EAAA,MAAA,CAAA,EAAA,GAAA;CAEG,GAAA,IAAA,EAAA,SAAA,EAQX,SARW,GAAA,IAAA,EAAA,GASnB,SATmB,GAAA,SAAA;AAAJ,KAWR,uBAAA,GAXQ,CAAA,SAAA,EAYP,iBAZO,GAYa,0BAZb,EAAA,SAAA,EAaP,SAbO,EAAA,GAcf,OAde,CAAA,GAAA,CAAA;AAAG,KAgBX,yBAAA,GAhBW,CAAA,uBAiBE,qBAjBF,GAAA,GAAA,CAAA,CAAA,WAAA,EAmBR,mBAnBQ,EAAA,iBAAA,EAoBF,iBApBE,CAoBgB,cApBhB,EAAA,GAAA,CAAA,EAAA,qBAAA,EAqBE,2BArBF,EAAA,WAAA,EAsBR,kBAtBQ,CAsBW,cAtBX,CAAA,EAAA,GAuBlB,KAAA,CAAM,EAvBY,CAAA,GAAA,CAAA;AAGX,UAsBK,IAtBL,CAAA,UAsBoB,QAtBD,CAAA,SAsBmB,SAtBnB,CAAA;EAChB,SAAA,MAAA,EAsBI,KAtBJ,CAsBU,MAtBV,EAsBkB,CAtBlB,CAAA;EACP,SAAA,UAAA,EAsBe,CAtBf;;AAIH,KAqBO,SAAA,GArBP;EAAS,SAAA,MAAA,EAsBK,MAtBL;EAEF,SAAA,UAAA,EAqBW,QArBY;CACtB;AAAoB,KAuBrB,aAAA,GAvBqB,SAAA,GAAA,MAAA,GAAA,OAAA,GAAA,MAAA,GAAA,IAAA,GAiC7B,SAjC6B,GAAA,SAmCpB,aAnCoB,EAAA;AACpB,KAoCD,WAAA,GApCC;EACR,CAAA,KAAA,EAoCK,MApCL,GAAA,MAAA,CAAA,EAoCuB,aApCvB;EAAO,SAAA,EAAA,CAAA,EAuCI,MAvCJ;AAEZ,CAAA;AACyB,KAuCb,QAAA,GAvCa,MAAA;AAEV,KAsCH,MAAA,GAtCG,MAAA;AACwB,cAuC1B,OAvC0B,EAuCjB,MAvCiB,GAAA,QAAA;AAAlB,KAyCT,cAAA,GAzCS;EACI,CAAA,KAAA,EAyCf,QAzCe,CAAA,EAAA;IACS,CAAA,KAAA,EAyCtB,MAzCsB,CAAA,EAyCb,WAzCa,GAAA,IAAA;EAAnB,CAAA,GAAA,IAAA;CACV;AAAQ,UA4CI,kBAAA,SAA2B,cA5C/B,CAAA;EAEI,SAAI,KAAA,EAAA;IAAW,SAAA,MAAA,EA4CX,WA5CW;EACP,CAAA;;AACF,iBAgFP,mBAAA,CAAA,CAhFO,EAgFgB,kBAhFhB"}
1
+ {"version":3,"file":"IsographEnvironment.d.mts","names":[],"sources":["../../src/core/IsographEnvironment.ts"],"sourcesContent":[],"mappings":"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"}
@@ -5,6 +5,7 @@ import { NetworkRequestReaderOptions, WithEncounteredRecords } from "./read.js";
5
5
  import { StoreLayer } from "./optimisticProxy.js";
6
6
  import { WrappedLogFunction } from "./logging.js";
7
7
  import { ExtractStartUpdate, FragmentReference, StableIdForFragmentReference, UnknownTReadFromStore, Variables } from "./FragmentReference.js";
8
+ import { LinkedParentRecordKey, ScalarParentRecordKey } from "./cache.js";
8
9
  import { IsographEntrypoint, IsographOperation, IsographPersistedOperation } from "./entrypoint.js";
9
10
  import { RetainedQuery } from "./garbageCollection.js";
10
11
  import { ParentCache } from "@isograph/react-disposable-state";
@@ -65,9 +66,13 @@ type StoreLink = {
65
66
  readonly __link: DataId;
66
67
  readonly __typename: TypeName;
67
68
  };
68
- type DataTypeValue = undefined | number | boolean | string | null | StoreLink | readonly DataTypeValue[];
69
+ type DataTypeValueScalar = undefined | unknown | number | boolean | string | null | readonly DataTypeValueScalar[];
70
+ type DataTypeValueLinked = undefined | null | StoreLink | readonly DataTypeValueLinked[];
69
71
  type StoreRecord = {
70
- [index: DataId | string]: DataTypeValue;
72
+ [index: ScalarParentRecordKey]: DataTypeValueScalar;
73
+ [index: LinkedParentRecordKey]: DataTypeValueLinked;
74
+ } & {
75
+ readonly __typename?: TypeName;
71
76
  readonly id?: DataId;
72
77
  };
73
78
  type TypeName = string;
@@ -85,5 +90,5 @@ interface BaseStoreLayerData extends StoreLayerData {
85
90
  }
86
91
  declare function createIsographStore(): BaseStoreLayerData;
87
92
  //#endregion
88
- export { AnyChangesToRecordSubscription, AnyRecordSubscription, BaseStoreLayerData, CacheMap, ComponentOrFieldName, DataId, DataTypeValue, FieldCache, FragmentSubscription, IsographEnvironment, IsographNetworkFunction, Link, MissingFieldHandler, ROOT_ID, StoreLayerData, StoreLink, StoreRecord, StringifiedArgs, Subscription, Subscriptions, TypeName, createIsographStore };
93
+ export { AnyChangesToRecordSubscription, AnyRecordSubscription, BaseStoreLayerData, CacheMap, ComponentOrFieldName, DataId, DataTypeValueLinked, DataTypeValueScalar, FieldCache, FragmentSubscription, IsographEnvironment, IsographNetworkFunction, Link, MissingFieldHandler, ROOT_ID, StoreLayerData, StoreLink, StoreRecord, StringifiedArgs, Subscription, Subscriptions, TypeName, createIsographStore };
89
94
  //# sourceMappingURL=IsographEnvironment.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"IsographEnvironment.d.ts","names":[],"sources":["../../src/core/IsographEnvironment.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"IsographEnvironment.d.ts","names":[],"sources":["../../src/core/IsographEnvironment.ts"],"sourcesContent":[],"mappings":"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"}
@@ -37,7 +37,7 @@ function assertLink(link) {
37
37
  throw new Error("Invalid link");
38
38
  }
39
39
  function getLink(maybeLink) {
40
- if (maybeLink != null && typeof maybeLink === "object" && "__link" in maybeLink && maybeLink.__link != null && "__typename" in maybeLink && maybeLink.__typename != null) return maybeLink;
40
+ if (!require_util.isArray(maybeLink)) return maybeLink ?? null;
41
41
  return null;
42
42
  }
43
43
  function getOrLoadIsographArtifact(environment, key, loader) {
@@ -37,7 +37,7 @@ function assertLink(link) {
37
37
  throw new Error("Invalid link");
38
38
  }
39
39
  function getLink(maybeLink) {
40
- if (maybeLink != null && typeof maybeLink === "object" && "__link" in maybeLink && maybeLink.__link != null && "__typename" in maybeLink && maybeLink.__typename != null) return maybeLink;
40
+ if (!isArray(maybeLink)) return maybeLink ?? null;
41
41
  return null;
42
42
  }
43
43
  function getOrLoadIsographArtifact(environment, key, loader) {
@@ -1 +1 @@
1
- {"version":3,"file":"IsographEnvironment.mjs","names":["ROOT_ID: DataId & '__ROOT'"],"sources":["../../src/core/IsographEnvironment.ts"],"sourcesContent":["import type { ParentCache } from '@isograph/react-disposable-state';\nimport type { Brand } from './brand';\nimport type {\n IsographEntrypoint,\n IsographOperation,\n IsographPersistedOperation,\n ReaderWithRefetchQueries,\n ReaderWithRefetchQueriesLoader,\n} from './entrypoint';\nimport type {\n ExtractStartUpdate,\n FragmentReference,\n StableIdForFragmentReference,\n UnknownTReadFromStore,\n Variables,\n} from './FragmentReference';\nimport type { RetainedQuery } from './garbageCollection';\nimport type { LogFunction, WrappedLogFunction } from './logging';\nimport { type StoreLayer } from './optimisticProxy';\nimport type { PromiseWrapper } from './PromiseWrapper';\nimport { wrapPromise, wrapResolvedValue } from './PromiseWrapper';\nimport type {\n NetworkRequestReaderOptions,\n WithEncounteredRecords,\n} from './read';\nimport type { ReaderAst, StartUpdate } from './reader';\nimport { isArray } from './util';\n\nexport type ComponentOrFieldName = string;\nexport type StringifiedArgs = string;\n\nexport type FieldCache<T> = {\n [key: StableIdForFragmentReference]: T;\n};\n\nexport type FragmentSubscription<TReadFromStore extends UnknownTReadFromStore> =\n {\n readonly kind: 'FragmentSubscription';\n readonly callback: (\n newEncounteredDataAndRecords: WithEncounteredRecords<TReadFromStore>,\n ) => void;\n /** The value read out from the previous call to readButDoNotEvaluate */\n encounteredDataAndRecords: WithEncounteredRecords<TReadFromStore>;\n readonly fragmentReference: FragmentReference<TReadFromStore, any>;\n readonly readerAst: ReaderAst<TReadFromStore>;\n };\n\nexport type AnyChangesToRecordSubscription = {\n readonly kind: 'AnyChangesToRecord';\n readonly callback: () => void;\n readonly recordLink: StoreLink;\n};\n\nexport type AnyRecordSubscription = {\n readonly kind: 'AnyRecords';\n readonly callback: () => void;\n};\n\nexport type Subscription =\n | FragmentSubscription<any>\n | AnyChangesToRecordSubscription\n | AnyRecordSubscription;\nexport type Subscriptions = Set<Subscription>;\n// Should this be a map?\nexport type CacheMap<T> = { [index: string]: ParentCache<T> };\n\nexport type IsographEnvironment = {\n store: StoreLayer;\n readonly networkFunction: IsographNetworkFunction;\n readonly componentFunction: IsographComponentFunction;\n readonly missingFieldHandler: MissingFieldHandler | null;\n readonly componentCache: FieldCache<React.FC<any>>;\n readonly eagerReaderCache: FieldCache<StartUpdate<any> | undefined>;\n readonly subscriptions: Subscriptions;\n // N.B. this must be <any, any>, but all *usages* of this should go through\n // a function that adds type parameters.\n readonly fragmentCache: CacheMap<FragmentReference<any, any>>;\n // TODO make this a CacheMap and add GC\n readonly entrypointArtifactCache: Map<\n string,\n PromiseWrapper<IsographEntrypoint<any, any, any, any>>\n >;\n readonly retainedQueries: Set<RetainedQuery>;\n readonly gcBuffer: Array<RetainedQuery>;\n readonly gcBufferSize: number;\n readonly loggers: Set<WrappedLogFunction>;\n};\n\nexport type MissingFieldHandler = (\n storeRecord: StoreRecord,\n root: StoreLink,\n fieldName: string,\n arguments_: { [index: string]: any } | null,\n variables: Variables | null,\n) => StoreLink | undefined;\n\nexport type IsographNetworkFunction = (\n operation: IsographOperation | IsographPersistedOperation,\n variables: Variables,\n) => Promise<any>;\n\nexport type IsographComponentFunction = <\n TReadFromStore extends UnknownTReadFromStore = any,\n>(\n environment: IsographEnvironment,\n fragmentReference: FragmentReference<TReadFromStore, any>,\n networkRequestOptions: NetworkRequestReaderOptions,\n startUpdate: ExtractStartUpdate<TReadFromStore>,\n) => React.FC<any>;\n\nexport interface Link<T extends TypeName> extends StoreLink {\n readonly __link: Brand<DataId, T>;\n readonly __typename: T;\n}\n\nexport type StoreLink = {\n readonly __link: DataId;\n readonly __typename: TypeName;\n};\n\nexport type DataTypeValue =\n // N.B. undefined is here to support optional id's, but\n // undefined should not *actually* be present in the store.\n | undefined\n // Singular scalar fields:\n | number\n | boolean\n | string\n | null\n // Singular linked fields:\n | StoreLink\n // Plural scalar and linked fields:\n | readonly DataTypeValue[];\n\nexport type StoreRecord = {\n [index: DataId | string]: DataTypeValue;\n // TODO __typename?: T, which is restricted to being a concrete string\n // TODO this shouldn't always be named id\n readonly id?: DataId;\n};\n\nexport type TypeName = string;\nexport type DataId = string;\n\nexport const ROOT_ID: DataId & '__ROOT' = '__ROOT';\n\nexport type StoreLayerData = {\n [index: TypeName]: {\n [index: DataId]: StoreRecord | null;\n } | null;\n};\n\nexport interface BaseStoreLayerData extends StoreLayerData {\n readonly Query: {\n readonly __ROOT: StoreRecord;\n };\n}\n\nconst DEFAULT_GC_BUFFER_SIZE = 10;\nexport function createIsographEnvironmentCore(\n baseStoreLayerData: BaseStoreLayerData,\n networkFunction: IsographNetworkFunction,\n componentFunction: IsographComponentFunction,\n missingFieldHandler?: MissingFieldHandler | null,\n logFunction?: LogFunction | null,\n): IsographEnvironment {\n logFunction?.({\n kind: 'EnvironmentCreated',\n });\n let store = {\n kind: 'BaseStoreLayer',\n data: baseStoreLayerData,\n parentStoreLayer: null,\n childStoreLayer: null,\n } as const;\n return {\n store,\n networkFunction,\n componentFunction,\n missingFieldHandler: missingFieldHandler ?? null,\n componentCache: {},\n eagerReaderCache: {},\n subscriptions: new Set(),\n fragmentCache: {},\n entrypointArtifactCache: new Map(),\n retainedQueries: new Set(),\n gcBuffer: [],\n gcBufferSize: DEFAULT_GC_BUFFER_SIZE,\n loggers: logFunction != null ? new Set([{ log: logFunction }]) : new Set(),\n };\n}\n\nexport function createIsographStore(): BaseStoreLayerData {\n return {\n Query: {\n [ROOT_ID]: {},\n },\n };\n}\n\nexport function assertLink(link: DataTypeValue): StoreLink | null | undefined {\n if (isArray(link)) {\n throw new Error('Unexpected array');\n }\n if (link == null) {\n return link;\n }\n if (typeof link === 'object') {\n return link;\n }\n throw new Error('Invalid link');\n}\n\nexport function getLink(maybeLink: DataTypeValue): StoreLink | null {\n if (\n maybeLink != null &&\n typeof maybeLink === 'object' &&\n '__link' in maybeLink &&\n maybeLink.__link != null &&\n '__typename' in maybeLink &&\n maybeLink.__typename != null\n ) {\n return maybeLink;\n }\n return null;\n}\n\nexport function getOrLoadIsographArtifact(\n environment: IsographEnvironment,\n key: string,\n loader: () => Promise<IsographEntrypoint<any, any, any, any>>,\n): PromiseWrapper<IsographEntrypoint<any, any, any, any>> {\n const value = environment.entrypointArtifactCache.get(key);\n if (value != null) {\n return value;\n }\n const wrapped = wrapPromise(loader());\n environment.entrypointArtifactCache.set(key, wrapped);\n return wrapped;\n}\n\nexport function getOrLoadReaderWithRefetchQueries(\n _environment: IsographEnvironment,\n readerWithRefetchQueries:\n | ReaderWithRefetchQueries<any, any>\n | ReaderWithRefetchQueriesLoader<any, any>,\n): {\n readerWithRefetchQueries: PromiseWrapper<ReaderWithRefetchQueries<any, any>>;\n fieldName: string;\n readerArtifactKind: 'EagerReaderArtifact' | 'ComponentReaderArtifact';\n} {\n switch (readerWithRefetchQueries.kind) {\n case 'ReaderWithRefetchQueries':\n return {\n readerWithRefetchQueries: wrapResolvedValue(readerWithRefetchQueries),\n fieldName: readerWithRefetchQueries.readerArtifact.fieldName,\n readerArtifactKind: readerWithRefetchQueries.readerArtifact.kind,\n };\n case 'ReaderWithRefetchQueriesLoader':\n return {\n // TODO: cache promise wrapper\n readerWithRefetchQueries: wrapPromise(\n readerWithRefetchQueries.loader(),\n ),\n fieldName: readerWithRefetchQueries.fieldName,\n readerArtifactKind: readerWithRefetchQueries.readerArtifactKind,\n };\n }\n}\n"],"mappings":";;;;AAgJA,MAAaA,UAA6B;AAc1C,MAAM,yBAAyB;AAC/B,SAAgB,8BACd,oBACA,iBACA,mBACA,qBACA,aACqB;AACrB,eAAc,EACZ,MAAM,sBACP,CAAC;AAOF,QAAO;EACL,OAPU;GACV,MAAM;GACN,MAAM;GACN,kBAAkB;GAClB,iBAAiB;GAClB;EAGC;EACA;EACA,qBAAqB,uBAAuB;EAC5C,gBAAgB,EAAE;EAClB,kBAAkB,EAAE;EACpB,+BAAe,IAAI,KAAK;EACxB,eAAe,EAAE;EACjB,yCAAyB,IAAI,KAAK;EAClC,iCAAiB,IAAI,KAAK;EAC1B,UAAU,EAAE;EACZ,cAAc;EACd,SAAS,eAAe,OAAO,IAAI,IAAI,CAAC,EAAE,KAAK,aAAa,CAAC,CAAC,mBAAG,IAAI,KAAK;EAC3E;;AAGH,SAAgB,sBAA0C;AACxD,QAAO,EACL,OAAO,GACJ,UAAU,EAAE,EACd,EACF;;AAGH,SAAgB,WAAW,MAAmD;AAC5E,KAAI,QAAQ,KAAK,CACf,OAAM,IAAI,MAAM,mBAAmB;AAErC,KAAI,QAAQ,KACV,QAAO;AAET,KAAI,OAAO,SAAS,SAClB,QAAO;AAET,OAAM,IAAI,MAAM,eAAe;;AAGjC,SAAgB,QAAQ,WAA4C;AAClE,KACE,aAAa,QACb,OAAO,cAAc,YACrB,YAAY,aACZ,UAAU,UAAU,QACpB,gBAAgB,aAChB,UAAU,cAAc,KAExB,QAAO;AAET,QAAO;;AAGT,SAAgB,0BACd,aACA,KACA,QACwD;CACxD,MAAM,QAAQ,YAAY,wBAAwB,IAAI,IAAI;AAC1D,KAAI,SAAS,KACX,QAAO;CAET,MAAM,UAAU,YAAY,QAAQ,CAAC;AACrC,aAAY,wBAAwB,IAAI,KAAK,QAAQ;AACrD,QAAO;;AAGT,SAAgB,kCACd,cACA,0BAOA;AACA,SAAQ,yBAAyB,MAAjC;EACE,KAAK,2BACH,QAAO;GACL,0BAA0B,kBAAkB,yBAAyB;GACrE,WAAW,yBAAyB,eAAe;GACnD,oBAAoB,yBAAyB,eAAe;GAC7D;EACH,KAAK,iCACH,QAAO;GAEL,0BAA0B,YACxB,yBAAyB,QAAQ,CAClC;GACD,WAAW,yBAAyB;GACpC,oBAAoB,yBAAyB;GAC9C"}
1
+ {"version":3,"file":"IsographEnvironment.mjs","names":["ROOT_ID: DataId & '__ROOT'"],"sources":["../../src/core/IsographEnvironment.ts"],"sourcesContent":["import type { ParentCache } from '@isograph/react-disposable-state';\nimport type { Brand } from './brand';\nimport type { LinkedParentRecordKey, ScalarParentRecordKey } from './cache';\nimport type {\n IsographEntrypoint,\n IsographOperation,\n IsographPersistedOperation,\n ReaderWithRefetchQueries,\n ReaderWithRefetchQueriesLoader,\n} from './entrypoint';\nimport type {\n ExtractStartUpdate,\n FragmentReference,\n StableIdForFragmentReference,\n UnknownTReadFromStore,\n Variables,\n} from './FragmentReference';\nimport type { RetainedQuery } from './garbageCollection';\nimport type { LogFunction, WrappedLogFunction } from './logging';\nimport { type StoreLayer } from './optimisticProxy';\nimport type { PromiseWrapper } from './PromiseWrapper';\nimport { wrapPromise, wrapResolvedValue } from './PromiseWrapper';\nimport type {\n NetworkRequestReaderOptions,\n WithEncounteredRecords,\n} from './read';\nimport type { ReaderAst, StartUpdate } from './reader';\nimport { isArray } from './util';\n\nexport type ComponentOrFieldName = string;\nexport type StringifiedArgs = string;\n\nexport type FieldCache<T> = {\n [key: StableIdForFragmentReference]: T;\n};\n\nexport type FragmentSubscription<TReadFromStore extends UnknownTReadFromStore> =\n {\n readonly kind: 'FragmentSubscription';\n readonly callback: (\n newEncounteredDataAndRecords: WithEncounteredRecords<TReadFromStore>,\n ) => void;\n /** The value read out from the previous call to readButDoNotEvaluate */\n encounteredDataAndRecords: WithEncounteredRecords<TReadFromStore>;\n readonly fragmentReference: FragmentReference<TReadFromStore, any>;\n readonly readerAst: ReaderAst<TReadFromStore>;\n };\n\nexport type AnyChangesToRecordSubscription = {\n readonly kind: 'AnyChangesToRecord';\n readonly callback: () => void;\n readonly recordLink: StoreLink;\n};\n\nexport type AnyRecordSubscription = {\n readonly kind: 'AnyRecords';\n readonly callback: () => void;\n};\n\nexport type Subscription =\n | FragmentSubscription<any>\n | AnyChangesToRecordSubscription\n | AnyRecordSubscription;\nexport type Subscriptions = Set<Subscription>;\n// Should this be a map?\nexport type CacheMap<T> = { [index: string]: ParentCache<T> };\n\nexport type IsographEnvironment = {\n store: StoreLayer;\n readonly networkFunction: IsographNetworkFunction;\n readonly componentFunction: IsographComponentFunction;\n readonly missingFieldHandler: MissingFieldHandler | null;\n readonly componentCache: FieldCache<React.FC<any>>;\n readonly eagerReaderCache: FieldCache<StartUpdate<any> | undefined>;\n readonly subscriptions: Subscriptions;\n // N.B. this must be <any, any>, but all *usages* of this should go through\n // a function that adds type parameters.\n readonly fragmentCache: CacheMap<FragmentReference<any, any>>;\n // TODO make this a CacheMap and add GC\n readonly entrypointArtifactCache: Map<\n string,\n PromiseWrapper<IsographEntrypoint<any, any, any, any>>\n >;\n readonly retainedQueries: Set<RetainedQuery>;\n readonly gcBuffer: Array<RetainedQuery>;\n readonly gcBufferSize: number;\n readonly loggers: Set<WrappedLogFunction>;\n};\n\nexport type MissingFieldHandler = (\n storeRecord: StoreRecord,\n root: StoreLink,\n fieldName: string,\n arguments_: { [index: string]: any } | null,\n variables: Variables | null,\n) => StoreLink | undefined;\n\nexport type IsographNetworkFunction = (\n operation: IsographOperation | IsographPersistedOperation,\n variables: Variables,\n) => Promise<any>;\n\nexport type IsographComponentFunction = <\n TReadFromStore extends UnknownTReadFromStore = any,\n>(\n environment: IsographEnvironment,\n fragmentReference: FragmentReference<TReadFromStore, any>,\n networkRequestOptions: NetworkRequestReaderOptions,\n startUpdate: ExtractStartUpdate<TReadFromStore>,\n) => React.FC<any>;\n\nexport interface Link<T extends TypeName> extends StoreLink {\n readonly __link: Brand<DataId, T>;\n readonly __typename: T;\n}\n\nexport type StoreLink = {\n readonly __link: DataId;\n readonly __typename: TypeName;\n};\n\nexport type DataTypeValueScalar =\n // N.B. undefined is here to support optional id's, but\n // undefined should not *actually* be present in the store.\n | undefined\n // Singular fields:\n | unknown\n | number\n | boolean\n | string\n | null\n // Plural fields:\n | readonly DataTypeValueScalar[];\n\nexport type DataTypeValueLinked =\n // N.B. undefined is here to support optional id's, but\n // undefined should not *actually* be present in the store.\n | undefined\n // Singular fields:\n | null\n | StoreLink\n // Plural fields:\n | readonly DataTypeValueLinked[];\n\nexport type StoreRecord = {\n [index: ScalarParentRecordKey]: DataTypeValueScalar;\n [index: LinkedParentRecordKey]: DataTypeValueLinked;\n} & {\n // TODO __typename?: T, which is restricted to being a concrete string\n // TODO this shouldn't always be named id\n readonly __typename?: TypeName;\n readonly id?: DataId;\n};\n\nexport type TypeName = string;\nexport type DataId = string;\n\nexport const ROOT_ID: DataId & '__ROOT' = '__ROOT';\n\nexport type StoreLayerData = {\n [index: TypeName]: {\n [index: DataId]: StoreRecord | null;\n } | null;\n};\n\nexport interface BaseStoreLayerData extends StoreLayerData {\n readonly Query: {\n readonly __ROOT: StoreRecord;\n };\n}\n\nconst DEFAULT_GC_BUFFER_SIZE = 10;\nexport function createIsographEnvironmentCore(\n baseStoreLayerData: BaseStoreLayerData,\n networkFunction: IsographNetworkFunction,\n componentFunction: IsographComponentFunction,\n missingFieldHandler?: MissingFieldHandler | null,\n logFunction?: LogFunction | null,\n): IsographEnvironment {\n logFunction?.({\n kind: 'EnvironmentCreated',\n });\n let store = {\n kind: 'BaseStoreLayer',\n data: baseStoreLayerData,\n parentStoreLayer: null,\n childStoreLayer: null,\n } as const;\n return {\n store,\n networkFunction,\n componentFunction,\n missingFieldHandler: missingFieldHandler ?? null,\n componentCache: {},\n eagerReaderCache: {},\n subscriptions: new Set(),\n fragmentCache: {},\n entrypointArtifactCache: new Map(),\n retainedQueries: new Set(),\n gcBuffer: [],\n gcBufferSize: DEFAULT_GC_BUFFER_SIZE,\n loggers: logFunction != null ? new Set([{ log: logFunction }]) : new Set(),\n };\n}\n\nexport function createIsographStore(): BaseStoreLayerData {\n return {\n Query: {\n [ROOT_ID]: {},\n },\n };\n}\n\nexport function assertLink(\n link: DataTypeValueLinked,\n): StoreLink | null | undefined {\n if (isArray(link)) {\n throw new Error('Unexpected array');\n }\n if (link == null) {\n return link;\n }\n if (typeof link === 'object') {\n return link;\n }\n throw new Error('Invalid link');\n}\n\nexport function getLink(maybeLink: DataTypeValueLinked): StoreLink | null {\n if (!isArray(maybeLink)) {\n return maybeLink ?? null;\n }\n return null;\n}\n\nexport function getOrLoadIsographArtifact(\n environment: IsographEnvironment,\n key: string,\n loader: () => Promise<IsographEntrypoint<any, any, any, any>>,\n): PromiseWrapper<IsographEntrypoint<any, any, any, any>> {\n const value = environment.entrypointArtifactCache.get(key);\n if (value != null) {\n return value;\n }\n const wrapped = wrapPromise(loader());\n environment.entrypointArtifactCache.set(key, wrapped);\n return wrapped;\n}\n\nexport function getOrLoadReaderWithRefetchQueries(\n _environment: IsographEnvironment,\n readerWithRefetchQueries:\n | ReaderWithRefetchQueries<any, any>\n | ReaderWithRefetchQueriesLoader<any, any>,\n): {\n readerWithRefetchQueries: PromiseWrapper<ReaderWithRefetchQueries<any, any>>;\n fieldName: string;\n readerArtifactKind: 'EagerReaderArtifact' | 'ComponentReaderArtifact';\n} {\n switch (readerWithRefetchQueries.kind) {\n case 'ReaderWithRefetchQueries':\n return {\n readerWithRefetchQueries: wrapResolvedValue(readerWithRefetchQueries),\n fieldName: readerWithRefetchQueries.readerArtifact.fieldName,\n readerArtifactKind: readerWithRefetchQueries.readerArtifact.kind,\n };\n case 'ReaderWithRefetchQueriesLoader':\n return {\n // TODO: cache promise wrapper\n readerWithRefetchQueries: wrapPromise(\n readerWithRefetchQueries.loader(),\n ),\n fieldName: readerWithRefetchQueries.fieldName,\n readerArtifactKind: readerWithRefetchQueries.readerArtifactKind,\n };\n }\n}\n"],"mappings":";;;;AA6JA,MAAaA,UAA6B;AAc1C,MAAM,yBAAyB;AAC/B,SAAgB,8BACd,oBACA,iBACA,mBACA,qBACA,aACqB;AACrB,eAAc,EACZ,MAAM,sBACP,CAAC;AAOF,QAAO;EACL,OAPU;GACV,MAAM;GACN,MAAM;GACN,kBAAkB;GAClB,iBAAiB;GAClB;EAGC;EACA;EACA,qBAAqB,uBAAuB;EAC5C,gBAAgB,EAAE;EAClB,kBAAkB,EAAE;EACpB,+BAAe,IAAI,KAAK;EACxB,eAAe,EAAE;EACjB,yCAAyB,IAAI,KAAK;EAClC,iCAAiB,IAAI,KAAK;EAC1B,UAAU,EAAE;EACZ,cAAc;EACd,SAAS,eAAe,OAAO,IAAI,IAAI,CAAC,EAAE,KAAK,aAAa,CAAC,CAAC,mBAAG,IAAI,KAAK;EAC3E;;AAGH,SAAgB,sBAA0C;AACxD,QAAO,EACL,OAAO,GACJ,UAAU,EAAE,EACd,EACF;;AAGH,SAAgB,WACd,MAC8B;AAC9B,KAAI,QAAQ,KAAK,CACf,OAAM,IAAI,MAAM,mBAAmB;AAErC,KAAI,QAAQ,KACV,QAAO;AAET,KAAI,OAAO,SAAS,SAClB,QAAO;AAET,OAAM,IAAI,MAAM,eAAe;;AAGjC,SAAgB,QAAQ,WAAkD;AACxE,KAAI,CAAC,QAAQ,UAAU,CACrB,QAAO,aAAa;AAEtB,QAAO;;AAGT,SAAgB,0BACd,aACA,KACA,QACwD;CACxD,MAAM,QAAQ,YAAY,wBAAwB,IAAI,IAAI;AAC1D,KAAI,SAAS,KACX,QAAO;CAET,MAAM,UAAU,YAAY,QAAQ,CAAC;AACrC,aAAY,wBAAwB,IAAI,KAAK,QAAQ;AACrD,QAAO;;AAGT,SAAgB,kCACd,cACA,0BAOA;AACA,SAAQ,yBAAyB,MAAjC;EACE,KAAK,2BACH,QAAO;GACL,0BAA0B,kBAAkB,yBAAyB;GACrE,WAAW,yBAAyB,eAAe;GACnD,oBAAoB,yBAAyB,eAAe;GAC7D;EACH,KAAK,iCACH,QAAO;GAEL,0BAA0B,YACxB,yBAAyB,QAAQ,CAClC;GACD,WAAW,yBAAyB;GACpC,oBAAoB,yBAAyB;GAC9C"}
@@ -1,3 +1,4 @@
1
+ import { Brand } from "./brand.mjs";
1
2
  import "./reader.mjs";
2
3
  import { StoreLayerWithData } from "./optimisticProxy.mjs";
3
4
  import { DataId, IsographEnvironment, StoreLink, TypeName } from "./IsographEnvironment.mjs";
@@ -6,15 +7,31 @@ import { NormalizationAstNodes } from "./entrypoint.mjs";
6
7
  import { ParentCache } from "@isograph/react-disposable-state";
7
8
 
8
9
  //#region src/core/cache.d.ts
10
+ type NetworkResponsePlural<T> = null | T | readonly T[] | readonly (null | T)[];
9
11
  type NetworkResponseScalarValue = string | number | boolean | unknown;
10
- type NetworkResponseValue = NetworkResponseScalarValue | null | NetworkResponseObject | readonly (NetworkResponseObject | null)[] | readonly (NetworkResponseScalarValue | null)[];
11
- type NetworkResponseObject = {
12
- readonly [index: string]: undefined | NetworkResponseValue;
12
+ type NetworkResponseValue = NetworkResponsePlural<NetworkResponseScalarValue> | NetworkResponsePlural<NetworkResponseObject>;
13
+ type NetworkResponseObject = { readonly [K in ScalarNetworkResponseKey | LinkedNetworkResponseKey]: K extends ScalarNetworkResponseKey ? undefined | NetworkResponsePlural<NetworkResponseScalarValue> : undefined | NetworkResponsePlural<NetworkResponseObject> } & {
13
14
  readonly id?: DataId;
14
15
  readonly __typename?: TypeName;
15
16
  };
16
17
  declare function normalizeData(environment: IsographEnvironment, storeLayer: StoreLayerWithData, normalizationAst: NormalizationAstNodes, networkResponse: NetworkResponseObject, variables: Variables, root: StoreLink, encounteredIds: EncounteredIds): EncounteredIds;
17
18
  type EncounteredIds = Map<TypeName, Set<DataId>>;
19
+ declare const LinkedParentRecordKeyBrand: unique symbol;
20
+ type LinkedParentRecordKey = string & {
21
+ brand?: Brand<undefined, typeof LinkedParentRecordKeyBrand>;
22
+ };
23
+ declare const ScalarParentRecordKeyBrand: unique symbol;
24
+ type ScalarParentRecordKey = string & {
25
+ brand?: Brand<undefined, typeof ScalarParentRecordKeyBrand>;
26
+ };
27
+ declare const LinkedNetworkResponseKeyBrand: unique symbol;
28
+ type LinkedNetworkResponseKey = string & {
29
+ brand?: Brand<undefined, typeof LinkedNetworkResponseKeyBrand>;
30
+ };
31
+ declare const ScalarNetworkResponseKeyBrand: unique symbol;
32
+ type ScalarNetworkResponseKey = string & {
33
+ brand?: Brand<undefined, typeof ScalarNetworkResponseKeyBrand>;
34
+ };
18
35
  //#endregion
19
- export { EncounteredIds, NetworkResponseObject, NetworkResponseScalarValue, NetworkResponseValue, normalizeData };
36
+ export { EncounteredIds, LinkedParentRecordKey, NetworkResponseObject, NetworkResponseScalarValue, NetworkResponseValue, ScalarParentRecordKey, normalizeData };
20
37
  //# sourceMappingURL=cache.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cache.d.mts","names":[],"sources":["../../src/core/cache.ts"],"sourcesContent":[],"mappings":";;;;;;;;AAgDY,KAAA,0BAAA,GAA0B,MAAA,GAAA,MAAA,GAAA,OAAA,GAAA,OAAA;AAC1B,KAAA,oBAAA,GACR,0BAD4B,GAAA,IAAA,GAG5B,qBAH4B,GAAA,SAAA,CAIlB,qBAJkB,GAAA,IAAA,CAAA,EAAA,GAAA,SAAA,CAKlB,0BALkB,GAAA,IAAA,CAAA,EAAA;AAC5B,KAMQ,qBAAA,GANR;EAEA,UAAA,KAAA,EAAA,MAAA,CAAA,EAAA,SAAA,GAOoC,oBAPpC;EACU,SAAA,EAAA,CAAA,EAOE,MAPF;EACA,SAAA,UAAA,CAAA,EAOU,QAPV;CAA0B;AAE5B,iBAQI,aAAA,CARiB,WAAA,EASlB,mBATkB,EAAA,UAAA,EAUnB,kBAVmB,EAAA,gBAAA,EAWb,qBAXa,EAAA,eAAA,EAYd,qBAZc,EAAA,SAAA,EAapB,SAboB,EAAA,IAAA,EAczB,SAdyB,EAAA,cAAA,EAef,cAfe,CAAA,EAgB9B,cAhB8B;AAKD,KA6EpB,cAAA,GAAiB,GA7EG,CA6EC,QA7ED,EA6EW,GA7EX,CA6Ee,MA7Ef,CAAA,CAAA"}
1
+ {"version":3,"file":"cache.d.mts","names":[],"sources":["../../src/core/cache.ts"],"sourcesContent":[],"mappings":";;;;;;;;;AAiDY,KAAA,qBAAqB,CAAA,CAAA,CAAA,GAAA,IAAA,GAE7B,CAF6B,GAAA,SAGpB,CAHoB,EAAA,GAAA,SAAA,CAAA,IAAA,GAIZ,CAJY,CAAA,EAAA;AAE7B,KAGQ,0BAAA,GAHR,MAAA,GAAA,MAAA,GAAA,OAAA,GAAA,OAAA;AACS,KAID,oBAAA,GACR,qBALS,CAKa,0BALb,CAAA,GAMT,qBANS,CAMa,qBANb,CAAA;AACQ,KAOT,qBAAA,GAPS,iBAWf,wBAXgB,GAYhB,wBAZgB,GAYW,CAZX,SAYqB,wBAZrB,GAAA,SAAA,GAaJ,qBAbI,CAakB,0BAblB,CAAA,GAAA,SAAA,GAcJ,qBAdI,CAckB,qBAdlB,CAAA,EACtB,GAAY;EAEA,SAAA,EAAA,CAAA,EAaI,MAbJ;EACc,SAAA,UAAA,CAAA,EAaF,QAbE;CAAtB;AACsB,iBAeV,aAAA,CAfU,WAAA,EAgBX,mBAhBW,EAAA,UAAA,EAiBZ,kBAjBY,EAAA,gBAAA,EAkBN,qBAlBM,EAAA,eAAA,EAmBP,qBAnBO,EAAA,SAAA,EAoBb,SApBa,EAAA,IAAA,EAqBlB,SArBkB,EAAA,cAAA,EAsBR,cAtBQ,CAAA,EAuBvB,cAvBuB;AAMpB,KAmFM,cAAA,GAAiB,GAnFvB,CAmF2B,QAnF3B,EAmFqC,GAnFrC,CAmFyC,MAnFzC,CAAA,CAAA;cAmXQ,0BAlXmB,EAAA,OAAA,MAAA;AAAU,KAmX/B,qBAAA,GAnX+B,MAAA,GAAA;EACH,KAAA,CAAA,EAmX9B,KAnX8B,CAAA,SAAA,EAAA,OAmXN,0BAnXM,CAAA;CAAtB;cAsXJ,0BArX0B,EAAA,OAAA,MAAA;AAAtB,KAsXN,qBAAA,GAtXM,MAAA,GAAA;EAEF,KAAA,CAAA,EAqXN,KArXM,CAAA,SAAA,EAAA,OAqXkB,0BArXlB,CAAA;CACQ;cA4bV,6BAxbC,EAAA,OAAA,MAAA;AACD,KAwbF,wBAAA,GAxbE,MAAA,GAAA;EACM,KAAA,CAAA,EAwbV,KAxbU,CAAA,SAAA,EAAA,OAwbc,6BAxbd,CAAA;CACD;cA0bL,6BAzbD,EAAA,OAAA,MAAA;AACL,KAybI,wBAAA,GAzbJ,MAAA,GAAA;EACU,KAAA,CAAA,EAybR,KAzbQ,CAAA,SAAA,EAAA,OAybgB,6BAzbhB,CAAA;CACf"}
@@ -1,3 +1,4 @@
1
+ import { Brand } from "./brand.js";
1
2
  import { StoreLayerWithData } from "./optimisticProxy.js";
2
3
  import { DataId, IsographEnvironment, StoreLink, TypeName } from "./IsographEnvironment.js";
3
4
  import { Variables } from "./FragmentReference.js";
@@ -6,15 +7,31 @@ import { ParentCache } from "@isograph/react-disposable-state";
6
7
 
7
8
  //#region src/core/cache.d.ts
8
9
 
10
+ type NetworkResponsePlural<T> = null | T | readonly T[] | readonly (null | T)[];
9
11
  type NetworkResponseScalarValue = string | number | boolean | unknown;
10
- type NetworkResponseValue = NetworkResponseScalarValue | null | NetworkResponseObject | readonly (NetworkResponseObject | null)[] | readonly (NetworkResponseScalarValue | null)[];
11
- type NetworkResponseObject = {
12
- readonly [index: string]: undefined | NetworkResponseValue;
12
+ type NetworkResponseValue = NetworkResponsePlural<NetworkResponseScalarValue> | NetworkResponsePlural<NetworkResponseObject>;
13
+ type NetworkResponseObject = { readonly [K in ScalarNetworkResponseKey | LinkedNetworkResponseKey]: K extends ScalarNetworkResponseKey ? undefined | NetworkResponsePlural<NetworkResponseScalarValue> : undefined | NetworkResponsePlural<NetworkResponseObject> } & {
13
14
  readonly id?: DataId;
14
15
  readonly __typename?: TypeName;
15
16
  };
16
17
  declare function normalizeData(environment: IsographEnvironment, storeLayer: StoreLayerWithData, normalizationAst: NormalizationAstNodes, networkResponse: NetworkResponseObject, variables: Variables, root: StoreLink, encounteredIds: EncounteredIds): EncounteredIds;
17
18
  type EncounteredIds = Map<TypeName, Set<DataId>>;
19
+ declare const LinkedParentRecordKeyBrand: unique symbol;
20
+ type LinkedParentRecordKey = string & {
21
+ brand?: Brand<undefined, typeof LinkedParentRecordKeyBrand>;
22
+ };
23
+ declare const ScalarParentRecordKeyBrand: unique symbol;
24
+ type ScalarParentRecordKey = string & {
25
+ brand?: Brand<undefined, typeof ScalarParentRecordKeyBrand>;
26
+ };
27
+ declare const LinkedNetworkResponseKeyBrand: unique symbol;
28
+ type LinkedNetworkResponseKey = string & {
29
+ brand?: Brand<undefined, typeof LinkedNetworkResponseKeyBrand>;
30
+ };
31
+ declare const ScalarNetworkResponseKeyBrand: unique symbol;
32
+ type ScalarNetworkResponseKey = string & {
33
+ brand?: Brand<undefined, typeof ScalarNetworkResponseKeyBrand>;
34
+ };
18
35
  //#endregion
19
- export { EncounteredIds, NetworkResponseObject, NetworkResponseScalarValue, NetworkResponseValue, normalizeData };
36
+ export { EncounteredIds, LinkedParentRecordKey, NetworkResponseObject, NetworkResponseScalarValue, NetworkResponseValue, ScalarParentRecordKey, normalizeData };
20
37
  //# sourceMappingURL=cache.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cache.d.ts","names":[],"sources":["../../src/core/cache.ts"],"sourcesContent":[],"mappings":";;;;;;;;AAiDY,KADA,0BAAA,GACoB,MAAA,GAAA,MAAA,GAAA,OAAA,GAAA,OAAA;AAC5B,KADQ,oBAAA,GACR,0BAAA,GAAA,IAAA,GAEA,qBAFA,GAAA,SAAA,CAGU,qBAHV,GAAA,IAAA,CAAA,EAAA,GAAA,SAAA,CAIU,0BAJV,GAAA,IAAA,CAAA,EAAA;AAEA,KAIQ,qBAAA,GAJR;EACU,UAAA,KAAA,EAAA,MAAA,CAAA,EAAA,SAAA,GAM0B,oBAN1B;EACA,SAAA,EAAA,CAAA,EAME,MANF;EAA0B,SAAA,UAAA,CAAA,EAOhB,QAPgB;AAExC,CAAA;AAGwC,iBAKxB,aAAA,CALwB,WAAA,EAMzB,mBANyB,EAAA,UAAA,EAO1B,kBAP0B,EAAA,gBAAA,EAQpB,qBARoB,EAAA,eAAA,EASrB,qBATqB,EAAA,SAAA,EAU3B,SAV2B,EAAA,IAAA,EAWhC,SAXgC,EAAA,cAAA,EAYtB,cAZsB,CAAA,EAarC,cAbqC;AAKxB,KA0EJ,cAAA,GAAiB,GA1EA,CA0EI,QA1EJ,EA0Ec,GA1Ed,CA0EkB,MA1ElB,CAAA,CAAA"}
1
+ {"version":3,"file":"cache.d.ts","names":[],"sources":["../../src/core/cache.ts"],"sourcesContent":[],"mappings":";;;;;;;;;AAmDI,KAFQ,qBAER,CAAA,CAAA,CAAA,GAAA,IAAA,GAAA,CAAA,GAAA,SACS,CADT,EAAA,GAAA,SAAA,CAAA,IAAA,GAEiB,CAFjB,CAAA,EAAA;AACS,KAED,0BAAA,GAFC,MAAA,GAAA,MAAA,GAAA,OAAA,GAAA,OAAA;AACQ,KAGT,oBAAA,GACR,qBAJiB,CAIK,0BAJL,CAAA,GAKjB,qBALiB,CAKK,qBALL,CAAA;AAAC,KAOV,qBAAA,GAPU,iBAWhB,wBAVgC,GAWhC,wBAXgC,GAWL,CAXK,SAWK,wBAXL,GAAA,SAAA,GAYpB,qBAZoB,CAYE,0BAZF,CAAA,GAAA,SAAA,GAapB,qBAboB,CAaE,qBAbF,CAAA,EAEtC,GAAY;EACc,SAAA,EAAA,CAAA,EAYV,MAZU;EAAtB,SAAA,UAAA,CAAA,EAaoB,QAbpB;CACsB;AAAtB,iBAeY,aAAA,CAfZ,WAAA,EAgBW,mBAhBX,EAAA,UAAA,EAiBU,kBAjBV,EAAA,gBAAA,EAkBgB,qBAlBhB,EAAA,eAAA,EAmBe,qBAnBf,EAAA,SAAA,EAoBS,SApBT,EAAA,IAAA,EAqBI,SArBJ,EAAA,cAAA,EAsBc,cAtBd,CAAA,EAuBD,cAvBC;AAOE,KAkFM,cAAA,GAAiB,GAlFvB,CAkF2B,QAlF3B,EAkFqC,GAlFrC,CAkFyC,MAlFzC,CAAA,CAAA;cAkXQ,0BAlX6B,EAAA,OAAA,MAAA;AACH,KAkX5B,qBAAA,GAlX4B,MAAA,GAAA;EAAtB,KAAA,CAAA,EAmXR,KAnXQ,CAAA,SAAA,EAAA,OAmXgB,0BAnXhB,CAAA;CACsB;cAqX1B,0BArXI,EAAA,OAAA,MAAA;AAEF,KAoXJ,qBAAA,GApXI,MAAA,GAAA;EACQ,KAAA,CAAA,EAoXd,KApXc,CAAA,SAAA,EAAA,OAoXU,0BApXV,CAAA;CAAQ;cA4blB,6BAvbA,EAAA,OAAA,MAAA;AACM,KAubR,wBAAA,GAvbQ,MAAA,GAAA;EACD,KAAA,CAAA,EAubT,KAvbS,CAAA,SAAA,EAAA,OAube,6BAvbf,CAAA;CACN;cAybC,6BAxbN,EAAA,OAAA,MAAA;AACU,KAwbN,wBAAA,GAxbM,MAAA,GAAA;EACf,KAAA,CAAA,EAwbO,KAxbP,CAAA,SAAA,EAAA,OAwb+B,6BAxb/B,CAAA;CAAc"}
@@ -88,10 +88,8 @@ function normalizeScalarField(astNode, networkResponseParentRecord, targetStoreR
88
88
  targetStoreRecord[parentRecordKey] = null;
89
89
  return existingValue === void 0 || existingValue != null;
90
90
  }
91
- if (isScalarOrEmptyArray(networkResponseData)) {
92
- targetStoreRecord[parentRecordKey] = networkResponseData;
93
- return existingValue !== networkResponseData;
94
- } else throw new Error("Unexpected object array when normalizing scalar");
91
+ targetStoreRecord[parentRecordKey] = networkResponseData;
92
+ return existingValue !== networkResponseData;
95
93
  }
96
94
  /**
97
95
  * Mutate targetParentRecord with a given linked field ast node.
@@ -104,7 +102,6 @@ function normalizeLinkedField(environment, storeLayer, astNode, networkResponseP
104
102
  targetParentRecord[parentRecordKey] = null;
105
103
  return existingValue === void 0 || existingValue != null;
106
104
  }
107
- if (isScalarOrEmptyArray(networkResponseData) && !isNullOrEmptyArray(networkResponseData)) throw new Error("Unexpected scalar network response when normalizing a linked field");
108
105
  if (require_util.isArray(networkResponseData)) {
109
106
  const dataIds = [];
110
107
  for (let i = 0; i < networkResponseData.length; i++) {
@@ -165,17 +162,6 @@ function normalizeNetworkResponseObject(environment, storeLayer, astNode, networ
165
162
  normalizeDataIntoRecord(environment, storeLayer, astNode.selections, networkResponseData, newStoreRecord, link, variables, mutableEncounteredIds);
166
163
  return newStoreRecordId;
167
164
  }
168
- function isScalarOrEmptyArray(data) {
169
- if (require_util.isArray(data)) return data.every((x) => isScalarOrEmptyArray(x));
170
- return data == null || typeof data === "string" || typeof data === "number" || typeof data === "boolean";
171
- }
172
- function isNullOrEmptyArray(data) {
173
- if (require_util.isArray(data)) {
174
- if (data.length === 0) return true;
175
- return data.every((x) => isNullOrEmptyArray(x));
176
- }
177
- return data == null;
178
- }
179
165
  function getParentRecordKey(astNode, variables) {
180
166
  let parentRecordKey = astNode.fieldName;
181
167
  const fieldParameters = astNode.arguments;
@@ -86,10 +86,8 @@ function normalizeScalarField(astNode, networkResponseParentRecord, targetStoreR
86
86
  targetStoreRecord[parentRecordKey] = null;
87
87
  return existingValue === void 0 || existingValue != null;
88
88
  }
89
- if (isScalarOrEmptyArray(networkResponseData)) {
90
- targetStoreRecord[parentRecordKey] = networkResponseData;
91
- return existingValue !== networkResponseData;
92
- } else throw new Error("Unexpected object array when normalizing scalar");
89
+ targetStoreRecord[parentRecordKey] = networkResponseData;
90
+ return existingValue !== networkResponseData;
93
91
  }
94
92
  /**
95
93
  * Mutate targetParentRecord with a given linked field ast node.
@@ -102,7 +100,6 @@ function normalizeLinkedField(environment, storeLayer, astNode, networkResponseP
102
100
  targetParentRecord[parentRecordKey] = null;
103
101
  return existingValue === void 0 || existingValue != null;
104
102
  }
105
- if (isScalarOrEmptyArray(networkResponseData) && !isNullOrEmptyArray(networkResponseData)) throw new Error("Unexpected scalar network response when normalizing a linked field");
106
103
  if (isArray(networkResponseData)) {
107
104
  const dataIds = [];
108
105
  for (let i = 0; i < networkResponseData.length; i++) {
@@ -163,17 +160,6 @@ function normalizeNetworkResponseObject(environment, storeLayer, astNode, networ
163
160
  normalizeDataIntoRecord(environment, storeLayer, astNode.selections, networkResponseData, newStoreRecord, link, variables, mutableEncounteredIds);
164
161
  return newStoreRecordId;
165
162
  }
166
- function isScalarOrEmptyArray(data) {
167
- if (isArray(data)) return data.every((x) => isScalarOrEmptyArray(x));
168
- return data == null || typeof data === "string" || typeof data === "number" || typeof data === "boolean";
169
- }
170
- function isNullOrEmptyArray(data) {
171
- if (isArray(data)) {
172
- if (data.length === 0) return true;
173
- return data.every((x) => isNullOrEmptyArray(x));
174
- }
175
- return data == null;
176
- }
177
163
  function getParentRecordKey(astNode, variables) {
178
164
  let parentRecordKey = astNode.fieldName;
179
165
  const fieldParameters = astNode.arguments;
@@ -1 +1 @@
1
- {"version":3,"file":"cache.mjs","names":["dataIds: (StoreLink | null)[]","argumentValue"],"sources":["../../src/core/cache.ts"],"sourcesContent":["import { type Factory, ParentCache } from '@isograph/react-disposable-state';\nimport type {\n NormalizationAstNodes,\n NormalizationInlineFragment,\n NormalizationLinkedField,\n NormalizationScalarField,\n} from './entrypoint';\nimport type {\n FragmentReference,\n UnknownTReadFromStore,\n Variables,\n VariableValue,\n} from './FragmentReference';\nimport {\n type DataId,\n type DataTypeValue,\n getLink,\n type IsographEnvironment,\n ROOT_ID,\n type StoreLink,\n type StoreRecord,\n type TypeName,\n} from './IsographEnvironment';\nimport { logMessage } from './logging';\nimport {\n getMutableStoreRecordProxy,\n type StoreLayerWithData,\n} from './optimisticProxy';\nimport type { ReaderLinkedField, ReaderScalarField } from './reader';\nimport { type Argument, type ArgumentValue, isArray, stableCopy } from './util';\n\nexport const TYPENAME_FIELD_NAME = '__typename';\n\nexport function getOrCreateItemInSuspenseCache<\n TReadFromStore extends UnknownTReadFromStore,\n TClientFieldValue,\n>(\n environment: IsographEnvironment,\n index: string,\n factory: Factory<FragmentReference<TReadFromStore, TClientFieldValue>>,\n): ParentCache<FragmentReference<TReadFromStore, TClientFieldValue>> {\n if (environment.fragmentCache[index] == null) {\n environment.fragmentCache[index] = new ParentCache(factory);\n }\n\n return environment.fragmentCache[index];\n}\n\nexport type NetworkResponseScalarValue = string | number | boolean | unknown;\nexport type NetworkResponseValue =\n | NetworkResponseScalarValue\n | null\n | NetworkResponseObject\n | readonly (NetworkResponseObject | null)[]\n | readonly (NetworkResponseScalarValue | null)[];\n\nexport type NetworkResponseObject = {\n // N.B. undefined is here to support optional id's, but\n // undefined should not *actually* be present in the network response.\n readonly [index: string]: undefined | NetworkResponseValue;\n readonly id?: DataId;\n readonly __typename?: TypeName;\n};\n\nexport function normalizeData(\n environment: IsographEnvironment,\n storeLayer: StoreLayerWithData,\n normalizationAst: NormalizationAstNodes,\n networkResponse: NetworkResponseObject,\n variables: Variables,\n root: StoreLink,\n encounteredIds: EncounteredIds,\n): EncounteredIds {\n logMessage(environment, () => ({\n kind: 'AboutToNormalize',\n normalizationAst,\n networkResponse,\n variables,\n }));\n\n const newStoreRecord = getMutableStoreRecordProxy(storeLayer, root);\n\n normalizeDataIntoRecord(\n environment,\n storeLayer,\n normalizationAst,\n networkResponse,\n newStoreRecord,\n root,\n variables,\n encounteredIds,\n );\n\n return encounteredIds;\n}\n\nexport function subscribeToAnyChange(\n environment: IsographEnvironment,\n callback: () => void,\n): () => void {\n const subscription = {\n kind: 'AnyRecords',\n callback,\n } as const;\n environment.subscriptions.add(subscription);\n return () => environment.subscriptions.delete(subscription);\n}\n\nexport function subscribeToAnyChangesToRecord(\n environment: IsographEnvironment,\n recordLink: StoreLink,\n callback: () => void,\n): () => void {\n const subscription = {\n kind: 'AnyChangesToRecord',\n recordLink,\n callback,\n } as const;\n environment.subscriptions.add(subscription);\n return () => environment.subscriptions.delete(subscription);\n}\n\nexport function onNextChangeToRecord(\n environment: IsographEnvironment,\n recordLink: StoreLink,\n): Promise<void> {\n return new Promise((resolve) => {\n const unsubscribe = subscribeToAnyChangesToRecord(\n environment,\n recordLink,\n () => {\n unsubscribe();\n resolve();\n },\n );\n });\n}\n\nexport type EncounteredIds = Map<TypeName, Set<DataId>>;\n/**\n * Mutate targetParentRecord according to the normalizationAst and networkResponseParentRecord.\n */\nfunction normalizeDataIntoRecord(\n environment: IsographEnvironment,\n storeLayer: StoreLayerWithData,\n normalizationAst: NormalizationAstNodes,\n networkResponseParentRecord: NetworkResponseObject,\n targetParentRecord: StoreRecord,\n targetParentRecordLink: StoreLink,\n variables: Variables,\n mutableEncounteredIds: EncounteredIds,\n): RecordHasBeenUpdated {\n let recordHasBeenUpdated = false;\n for (const normalizationNode of normalizationAst) {\n switch (normalizationNode.kind) {\n case 'Scalar': {\n const scalarFieldResultedInChange = normalizeScalarField(\n normalizationNode,\n networkResponseParentRecord,\n targetParentRecord,\n variables,\n );\n recordHasBeenUpdated =\n recordHasBeenUpdated || scalarFieldResultedInChange;\n break;\n }\n case 'Linked': {\n const linkedFieldResultedInChange = normalizeLinkedField(\n environment,\n storeLayer,\n normalizationNode,\n networkResponseParentRecord,\n targetParentRecord,\n targetParentRecordLink,\n variables,\n mutableEncounteredIds,\n );\n recordHasBeenUpdated =\n recordHasBeenUpdated || linkedFieldResultedInChange;\n break;\n }\n case 'InlineFragment': {\n const inlineFragmentResultedInChange = normalizeInlineFragment(\n environment,\n storeLayer,\n normalizationNode,\n networkResponseParentRecord,\n targetParentRecord,\n targetParentRecordLink,\n variables,\n mutableEncounteredIds,\n );\n recordHasBeenUpdated =\n recordHasBeenUpdated || inlineFragmentResultedInChange;\n break;\n }\n }\n }\n if (recordHasBeenUpdated) {\n let encounteredRecordsIds = insertEmptySetIfMissing(\n mutableEncounteredIds,\n targetParentRecordLink.__typename,\n );\n\n encounteredRecordsIds.add(targetParentRecordLink.__link);\n }\n return recordHasBeenUpdated;\n}\n\nexport function insertEmptySetIfMissing<K, V>(map: Map<K, Set<V>>, key: K) {\n let result = map.get(key);\n if (result === undefined) {\n result = new Set();\n map.set(key, result);\n }\n return result;\n}\n\ntype RecordHasBeenUpdated = boolean;\nfunction normalizeScalarField(\n astNode: NormalizationScalarField,\n networkResponseParentRecord: NetworkResponseObject,\n targetStoreRecord: StoreRecord,\n variables: Variables,\n): RecordHasBeenUpdated {\n const networkResponseKey = getNetworkResponseKey(astNode);\n const networkResponseData = networkResponseParentRecord[networkResponseKey];\n const parentRecordKey = getParentRecordKey(astNode, variables);\n const existingValue = targetStoreRecord[parentRecordKey];\n\n if (networkResponseData == null) {\n targetStoreRecord[parentRecordKey] = null;\n return existingValue === undefined || existingValue != null;\n }\n\n if (isScalarOrEmptyArray(networkResponseData)) {\n targetStoreRecord[parentRecordKey] = networkResponseData;\n return existingValue !== networkResponseData;\n } else {\n throw new Error('Unexpected object array when normalizing scalar');\n }\n}\n\n/**\n * Mutate targetParentRecord with a given linked field ast node.\n */\nfunction normalizeLinkedField(\n environment: IsographEnvironment,\n storeLayer: StoreLayerWithData,\n astNode: NormalizationLinkedField,\n networkResponseParentRecord: NetworkResponseObject,\n targetParentRecord: StoreRecord,\n targetParentRecordLink: StoreLink,\n variables: Variables,\n mutableEncounteredIds: EncounteredIds,\n): RecordHasBeenUpdated {\n const networkResponseKey = getNetworkResponseKey(astNode);\n const networkResponseData = networkResponseParentRecord[networkResponseKey];\n const parentRecordKey = getParentRecordKey(astNode, variables);\n const existingValue = targetParentRecord[parentRecordKey];\n\n if (networkResponseData == null) {\n targetParentRecord[parentRecordKey] = null;\n return existingValue === undefined || existingValue != null;\n }\n\n if (\n isScalarOrEmptyArray(networkResponseData) &&\n !isNullOrEmptyArray(networkResponseData)\n ) {\n throw new Error(\n 'Unexpected scalar network response when normalizing a linked field',\n );\n }\n\n if (isArray(networkResponseData)) {\n // TODO check astNode.plural or the like\n const dataIds: (StoreLink | null)[] = [];\n for (let i = 0; i < networkResponseData.length; i++) {\n const networkResponseObject = networkResponseData[i];\n if (networkResponseObject == null) {\n dataIds.push(null);\n continue;\n }\n const newStoreRecordId = normalizeNetworkResponseObject(\n environment,\n storeLayer,\n astNode,\n networkResponseObject,\n targetParentRecordLink,\n variables,\n i,\n mutableEncounteredIds,\n );\n\n const __typename =\n astNode.concreteType ?? networkResponseObject[TYPENAME_FIELD_NAME];\n if (__typename == null) {\n throw new Error(\n 'Unexpected missing __typename in network response when normalizing a linked field. ' +\n 'This is indicative of a bug in Isograph.',\n );\n }\n dataIds.push({\n __link: newStoreRecordId,\n __typename,\n });\n }\n targetParentRecord[parentRecordKey] = dataIds;\n return !dataIdsAreTheSame(existingValue, dataIds);\n } else {\n const newStoreRecordId = normalizeNetworkResponseObject(\n environment,\n storeLayer,\n astNode,\n networkResponseData,\n targetParentRecordLink,\n variables,\n null,\n mutableEncounteredIds,\n );\n\n let __typename =\n astNode.concreteType ?? networkResponseData[TYPENAME_FIELD_NAME];\n\n if (__typename == null) {\n throw new Error(\n 'Unexpected missing __typename in network response when normalizing a linked field. ' +\n 'This is indicative of a bug in Isograph.',\n );\n }\n\n targetParentRecord[parentRecordKey] = {\n __link: newStoreRecordId,\n __typename,\n };\n\n const link = getLink(existingValue);\n return link?.__link !== newStoreRecordId || link.__typename !== __typename;\n }\n}\n\n/**\n * Mutate targetParentRecord with a given linked field ast node.\n */\nfunction normalizeInlineFragment(\n environment: IsographEnvironment,\n storeLayer: StoreLayerWithData,\n astNode: NormalizationInlineFragment,\n networkResponseParentRecord: NetworkResponseObject,\n targetParentRecord: StoreRecord,\n targetParentRecordLink: StoreLink,\n variables: Variables,\n mutableEncounteredIds: EncounteredIds,\n): RecordHasBeenUpdated {\n const typeToRefineTo = astNode.type;\n if (networkResponseParentRecord[TYPENAME_FIELD_NAME] === typeToRefineTo) {\n const hasBeenModified = normalizeDataIntoRecord(\n environment,\n storeLayer,\n astNode.selections,\n networkResponseParentRecord,\n targetParentRecord,\n targetParentRecordLink,\n variables,\n mutableEncounteredIds,\n );\n return hasBeenModified;\n }\n return false;\n}\n\nfunction dataIdsAreTheSame(\n existingValue: DataTypeValue,\n newDataIds: (StoreLink | null)[],\n): boolean {\n if (isArray(existingValue)) {\n if (newDataIds.length !== existingValue.length) {\n return false;\n }\n for (let i = 0; i < newDataIds.length; i++) {\n const maybeLink = getLink(existingValue[i]);\n if (\n newDataIds[i]?.__link !== maybeLink?.__link ||\n newDataIds[i]?.__typename !== maybeLink?.__typename\n ) {\n return false;\n }\n }\n return true;\n } else {\n return false;\n }\n}\n\nfunction normalizeNetworkResponseObject(\n environment: IsographEnvironment,\n storeLayer: StoreLayerWithData,\n astNode: NormalizationLinkedField,\n networkResponseData: NetworkResponseObject,\n targetParentRecordLink: StoreLink,\n variables: Variables,\n index: number | null,\n mutableEncounteredIds: EncounteredIds,\n): DataId /* The id of the modified or newly created item */ {\n const newStoreRecordId = getDataIdOfNetworkResponse(\n targetParentRecordLink,\n networkResponseData,\n astNode,\n variables,\n index,\n );\n const __typename =\n astNode.concreteType ?? networkResponseData[TYPENAME_FIELD_NAME];\n\n if (__typename == null) {\n throw new Error(\n 'Unexpected missing __typename in network response object. ' +\n 'This is indicative of a bug in Isograph.',\n );\n }\n\n const link = { __link: newStoreRecordId, __typename };\n const newStoreRecord = getMutableStoreRecordProxy(storeLayer, link);\n\n normalizeDataIntoRecord(\n environment,\n storeLayer,\n astNode.selections,\n networkResponseData,\n newStoreRecord,\n link,\n variables,\n mutableEncounteredIds,\n );\n\n return newStoreRecordId;\n}\n\nfunction isScalarOrEmptyArray(\n data: NetworkResponseValue,\n): data is\n | NetworkResponseScalarValue\n | readonly (NetworkResponseScalarValue | null)[] {\n // N.B. empty arrays count as empty arrays of scalar fields.\n if (isArray(data)) {\n return data.every((x) => isScalarOrEmptyArray(x));\n }\n const isScalarValue =\n data == null ||\n typeof data === 'string' ||\n typeof data === 'number' ||\n typeof data === 'boolean';\n return isScalarValue;\n}\n\nfunction isNullOrEmptyArray(\n data: unknown,\n): data is readonly never[] | null[] | null {\n if (isArray(data)) {\n if (data.length === 0) {\n return true;\n }\n return data.every((x) => isNullOrEmptyArray(x));\n }\n\n return data == null;\n}\n\nexport function getParentRecordKey(\n astNode:\n | NormalizationLinkedField\n | NormalizationScalarField\n | ReaderLinkedField\n | ReaderScalarField,\n variables: Variables,\n): string {\n let parentRecordKey = astNode.fieldName;\n const fieldParameters = astNode.arguments;\n if (fieldParameters != null) {\n for (const fieldParameter of fieldParameters) {\n parentRecordKey += getStoreKeyChunkForArgument(fieldParameter, variables);\n }\n }\n\n return parentRecordKey;\n}\n\nfunction getStoreKeyChunkForArgumentValue(\n argumentValue: ArgumentValue,\n variables: Variables,\n): VariableValue {\n switch (argumentValue.kind) {\n case 'Object': {\n return Object.fromEntries(\n argumentValue.value.map(([argumentName, argumentValue]) => {\n return [\n argumentName,\n // substitute variables\n getStoreKeyChunkForArgumentValue(argumentValue, variables),\n ];\n }),\n );\n }\n case 'Literal': {\n return argumentValue.value;\n }\n case 'Variable': {\n return variables[argumentValue.name] ?? 'null';\n }\n case 'String': {\n return argumentValue.value;\n }\n case 'Enum': {\n return argumentValue.value;\n }\n }\n}\n\nfunction getStoreKeyChunkForArgument(argument: Argument, variables: Variables) {\n const [argumentName, argumentValue] = argument;\n let chunk = getStoreKeyChunkForArgumentValue(argumentValue, variables);\n\n if (typeof chunk === 'object') {\n chunk = JSON.stringify(stableCopy(chunk));\n }\n\n return `${FIRST_SPLIT_KEY}${argumentName}${SECOND_SPLIT_KEY}${chunk}`;\n}\n\nfunction getNetworkResponseKey(\n astNode: NormalizationLinkedField | NormalizationScalarField,\n): string {\n let networkResponseKey = astNode.fieldName;\n const fieldParameters = astNode.arguments;\n\n if (fieldParameters != null) {\n for (const [argumentName, argumentValue] of fieldParameters) {\n let argumentValueChunk = getArgumentValueChunk(argumentValue);\n networkResponseKey += `${FIRST_SPLIT_KEY}${argumentName}${SECOND_SPLIT_KEY}${argumentValueChunk}`;\n }\n }\n\n return networkResponseKey;\n}\n\nfunction getArgumentValueChunk(argumentValue: ArgumentValue): string {\n switch (argumentValue.kind) {\n case 'Object': {\n return (\n 'o_' +\n argumentValue.value\n .map(([argumentName, argumentValue]) => {\n return (\n argumentName +\n THIRD_SPLIT_KEY +\n getArgumentValueChunk(argumentValue)\n );\n })\n .join('_') +\n '_c'\n );\n }\n case 'Literal': {\n return 'l_' + argumentValue.value;\n }\n case 'Variable': {\n return 'v_' + argumentValue.name;\n }\n case 'String': {\n // replace all non-word characters (alphanumeric & underscore) with underscores\n return 's_' + argumentValue.value.replaceAll(/\\W/g, '_');\n }\n case 'Enum': {\n return 'e_' + argumentValue.value;\n }\n }\n}\n\n// an alias might be pullRequests____first___first____after___cursor\nexport const FIRST_SPLIT_KEY = '____';\nexport const SECOND_SPLIT_KEY = '___';\nexport const THIRD_SPLIT_KEY = '__';\n\n// Returns a key to look up an item in the store\nfunction getDataIdOfNetworkResponse(\n parentRecordLink: StoreLink,\n dataToNormalize: NetworkResponseObject,\n astNode: NormalizationLinkedField,\n variables: Variables,\n index: number | null,\n): DataId {\n // If we are dealing with nested Query, use __ROOT as id\n // TODO do not hard code this value here\n if (astNode.concreteType === 'Query') {\n return ROOT_ID;\n }\n\n // Check whether the dataToNormalize has an id field. If so, that is the key.\n // If not, we construct an id from the parentRecordId and the field parameters.\n\n const dataId = dataToNormalize.id;\n if (dataId != null) {\n return dataId;\n }\n\n let storeKey = `${parentRecordLink.__typename}:${parentRecordLink.__link}.${astNode.fieldName}`;\n if (index != null) {\n storeKey += `.${index}`;\n }\n\n const fieldParameters = astNode.arguments;\n if (fieldParameters == null) {\n return storeKey;\n }\n\n for (const fieldParameter of fieldParameters) {\n storeKey += getStoreKeyChunkForArgument(fieldParameter, variables);\n }\n return storeKey;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"cache.mjs","names":["dataIds: (StoreLink | null)[]","argumentValue"],"sources":["../../src/core/cache.ts"],"sourcesContent":["import { type Factory, ParentCache } from '@isograph/react-disposable-state';\nimport type { Brand } from './brand';\nimport type {\n NormalizationAstNodes,\n NormalizationInlineFragment,\n NormalizationLinkedField,\n NormalizationScalarField,\n} from './entrypoint';\nimport type {\n FragmentReference,\n UnknownTReadFromStore,\n Variables,\n VariableValue,\n} from './FragmentReference';\nimport {\n type DataId,\n type DataTypeValueLinked,\n getLink,\n type IsographEnvironment,\n ROOT_ID,\n type StoreLink,\n type StoreRecord,\n type TypeName,\n} from './IsographEnvironment';\nimport { logMessage } from './logging';\nimport {\n getMutableStoreRecordProxy,\n type StoreLayerWithData,\n} from './optimisticProxy';\nimport type { ReaderLinkedField, ReaderScalarField } from './reader';\nimport { type Argument, type ArgumentValue, isArray, stableCopy } from './util';\n\nexport const TYPENAME_FIELD_NAME = '__typename';\n\nexport function getOrCreateItemInSuspenseCache<\n TReadFromStore extends UnknownTReadFromStore,\n TClientFieldValue,\n>(\n environment: IsographEnvironment,\n index: string,\n factory: Factory<FragmentReference<TReadFromStore, TClientFieldValue>>,\n): ParentCache<FragmentReference<TReadFromStore, TClientFieldValue>> {\n if (environment.fragmentCache[index] == null) {\n environment.fragmentCache[index] = new ParentCache(factory);\n }\n\n return environment.fragmentCache[index];\n}\n\nexport type NetworkResponsePlural<T> =\n | null\n | T\n | readonly T[]\n | readonly (null | T)[];\nexport type NetworkResponseScalarValue = string | number | boolean | unknown;\n\nexport type NetworkResponseValue =\n | NetworkResponsePlural<NetworkResponseScalarValue>\n | NetworkResponsePlural<NetworkResponseObject>;\n\nexport type NetworkResponseObject = {\n // N.B. undefined is here to support optional id's, but\n // undefined should not *actually* be present in the network response.\n readonly [K in\n | ScalarNetworkResponseKey\n | LinkedNetworkResponseKey]: K extends ScalarNetworkResponseKey\n ? undefined | NetworkResponsePlural<NetworkResponseScalarValue>\n : undefined | NetworkResponsePlural<NetworkResponseObject>;\n} & {\n readonly id?: DataId;\n readonly __typename?: TypeName;\n};\n\nexport function normalizeData(\n environment: IsographEnvironment,\n storeLayer: StoreLayerWithData,\n normalizationAst: NormalizationAstNodes,\n networkResponse: NetworkResponseObject,\n variables: Variables,\n root: StoreLink,\n encounteredIds: EncounteredIds,\n): EncounteredIds {\n logMessage(environment, () => ({\n kind: 'AboutToNormalize',\n normalizationAst,\n networkResponse,\n variables,\n }));\n\n const newStoreRecord = getMutableStoreRecordProxy(storeLayer, root);\n\n normalizeDataIntoRecord(\n environment,\n storeLayer,\n normalizationAst,\n networkResponse,\n newStoreRecord,\n root,\n variables,\n encounteredIds,\n );\n\n return encounteredIds;\n}\n\nexport function subscribeToAnyChange(\n environment: IsographEnvironment,\n callback: () => void,\n): () => void {\n const subscription = {\n kind: 'AnyRecords',\n callback,\n } as const;\n environment.subscriptions.add(subscription);\n return () => environment.subscriptions.delete(subscription);\n}\n\nexport function subscribeToAnyChangesToRecord(\n environment: IsographEnvironment,\n recordLink: StoreLink,\n callback: () => void,\n): () => void {\n const subscription = {\n kind: 'AnyChangesToRecord',\n recordLink,\n callback,\n } as const;\n environment.subscriptions.add(subscription);\n return () => environment.subscriptions.delete(subscription);\n}\n\nexport function onNextChangeToRecord(\n environment: IsographEnvironment,\n recordLink: StoreLink,\n): Promise<void> {\n return new Promise((resolve) => {\n const unsubscribe = subscribeToAnyChangesToRecord(\n environment,\n recordLink,\n () => {\n unsubscribe();\n resolve();\n },\n );\n });\n}\n\nexport type EncounteredIds = Map<TypeName, Set<DataId>>;\n/**\n * Mutate targetParentRecord according to the normalizationAst and networkResponseParentRecord.\n */\nfunction normalizeDataIntoRecord(\n environment: IsographEnvironment,\n storeLayer: StoreLayerWithData,\n normalizationAst: NormalizationAstNodes,\n networkResponseParentRecord: NetworkResponseObject,\n targetParentRecord: StoreRecord,\n targetParentRecordLink: StoreLink,\n variables: Variables,\n mutableEncounteredIds: EncounteredIds,\n): RecordHasBeenUpdated {\n let recordHasBeenUpdated = false;\n for (const normalizationNode of normalizationAst) {\n switch (normalizationNode.kind) {\n case 'Scalar': {\n const scalarFieldResultedInChange = normalizeScalarField(\n normalizationNode,\n networkResponseParentRecord,\n targetParentRecord,\n variables,\n );\n recordHasBeenUpdated =\n recordHasBeenUpdated || scalarFieldResultedInChange;\n break;\n }\n case 'Linked': {\n const linkedFieldResultedInChange = normalizeLinkedField(\n environment,\n storeLayer,\n normalizationNode,\n networkResponseParentRecord,\n targetParentRecord,\n targetParentRecordLink,\n variables,\n mutableEncounteredIds,\n );\n recordHasBeenUpdated =\n recordHasBeenUpdated || linkedFieldResultedInChange;\n break;\n }\n case 'InlineFragment': {\n const inlineFragmentResultedInChange = normalizeInlineFragment(\n environment,\n storeLayer,\n normalizationNode,\n networkResponseParentRecord,\n targetParentRecord,\n targetParentRecordLink,\n variables,\n mutableEncounteredIds,\n );\n recordHasBeenUpdated =\n recordHasBeenUpdated || inlineFragmentResultedInChange;\n break;\n }\n }\n }\n if (recordHasBeenUpdated) {\n let encounteredRecordsIds = insertEmptySetIfMissing(\n mutableEncounteredIds,\n targetParentRecordLink.__typename,\n );\n\n encounteredRecordsIds.add(targetParentRecordLink.__link);\n }\n return recordHasBeenUpdated;\n}\n\nexport function insertEmptySetIfMissing<K, V>(map: Map<K, Set<V>>, key: K) {\n let result = map.get(key);\n if (result === undefined) {\n result = new Set();\n map.set(key, result);\n }\n return result;\n}\n\ntype RecordHasBeenUpdated = boolean;\nfunction normalizeScalarField(\n astNode: NormalizationScalarField,\n networkResponseParentRecord: NetworkResponseObject,\n targetStoreRecord: StoreRecord,\n variables: Variables,\n): RecordHasBeenUpdated {\n const networkResponseKey = getNetworkResponseKey(astNode);\n const networkResponseData = networkResponseParentRecord[networkResponseKey];\n const parentRecordKey = getParentRecordKey(astNode, variables);\n const existingValue = targetStoreRecord[parentRecordKey];\n\n if (networkResponseData == null) {\n targetStoreRecord[parentRecordKey] = null;\n return existingValue === undefined || existingValue != null;\n }\n\n targetStoreRecord[parentRecordKey] = networkResponseData;\n return existingValue !== networkResponseData;\n}\n\n/**\n * Mutate targetParentRecord with a given linked field ast node.\n */\nfunction normalizeLinkedField(\n environment: IsographEnvironment,\n storeLayer: StoreLayerWithData,\n astNode: NormalizationLinkedField,\n networkResponseParentRecord: NetworkResponseObject,\n targetParentRecord: StoreRecord,\n targetParentRecordLink: StoreLink,\n variables: Variables,\n mutableEncounteredIds: EncounteredIds,\n): RecordHasBeenUpdated {\n const networkResponseKey = getNetworkResponseKey(astNode);\n const networkResponseData = networkResponseParentRecord[networkResponseKey];\n const parentRecordKey = getParentRecordKey(astNode, variables);\n const existingValue = targetParentRecord[parentRecordKey];\n\n if (networkResponseData == null) {\n targetParentRecord[parentRecordKey] = null;\n return existingValue === undefined || existingValue != null;\n }\n\n if (isArray(networkResponseData)) {\n // TODO check astNode.plural or the like\n const dataIds: (StoreLink | null)[] = [];\n for (let i = 0; i < networkResponseData.length; i++) {\n const networkResponseObject = networkResponseData[i];\n if (networkResponseObject == null) {\n dataIds.push(null);\n continue;\n }\n const newStoreRecordId = normalizeNetworkResponseObject(\n environment,\n storeLayer,\n astNode,\n networkResponseObject,\n targetParentRecordLink,\n variables,\n i,\n mutableEncounteredIds,\n );\n\n const __typename =\n astNode.concreteType ?? networkResponseObject[TYPENAME_FIELD_NAME];\n if (__typename == null) {\n throw new Error(\n 'Unexpected missing __typename in network response when normalizing a linked field. ' +\n 'This is indicative of a bug in Isograph.',\n );\n }\n dataIds.push({\n __link: newStoreRecordId,\n __typename,\n });\n }\n targetParentRecord[parentRecordKey] = dataIds;\n return !dataIdsAreTheSame(existingValue, dataIds);\n } else {\n const newStoreRecordId = normalizeNetworkResponseObject(\n environment,\n storeLayer,\n astNode,\n networkResponseData,\n targetParentRecordLink,\n variables,\n null,\n mutableEncounteredIds,\n );\n\n let __typename =\n astNode.concreteType ?? networkResponseData[TYPENAME_FIELD_NAME];\n\n if (__typename == null) {\n throw new Error(\n 'Unexpected missing __typename in network response when normalizing a linked field. ' +\n 'This is indicative of a bug in Isograph.',\n );\n }\n\n targetParentRecord[parentRecordKey] = {\n __link: newStoreRecordId,\n __typename,\n };\n\n const link = getLink(existingValue);\n return link?.__link !== newStoreRecordId || link.__typename !== __typename;\n }\n}\n\n/**\n * Mutate targetParentRecord with a given linked field ast node.\n */\nfunction normalizeInlineFragment(\n environment: IsographEnvironment,\n storeLayer: StoreLayerWithData,\n astNode: NormalizationInlineFragment,\n networkResponseParentRecord: NetworkResponseObject,\n targetParentRecord: StoreRecord,\n targetParentRecordLink: StoreLink,\n variables: Variables,\n mutableEncounteredIds: EncounteredIds,\n): RecordHasBeenUpdated {\n const typeToRefineTo = astNode.type;\n if (networkResponseParentRecord[TYPENAME_FIELD_NAME] === typeToRefineTo) {\n const hasBeenModified = normalizeDataIntoRecord(\n environment,\n storeLayer,\n astNode.selections,\n networkResponseParentRecord,\n targetParentRecord,\n targetParentRecordLink,\n variables,\n mutableEncounteredIds,\n );\n return hasBeenModified;\n }\n return false;\n}\n\nfunction dataIdsAreTheSame(\n existingValue: DataTypeValueLinked,\n newDataIds: (StoreLink | null)[],\n): boolean {\n if (isArray(existingValue)) {\n if (newDataIds.length !== existingValue.length) {\n return false;\n }\n for (let i = 0; i < newDataIds.length; i++) {\n const maybeLink = getLink(existingValue[i]);\n if (\n newDataIds[i]?.__link !== maybeLink?.__link ||\n newDataIds[i]?.__typename !== maybeLink?.__typename\n ) {\n return false;\n }\n }\n return true;\n } else {\n return false;\n }\n}\n\nfunction normalizeNetworkResponseObject(\n environment: IsographEnvironment,\n storeLayer: StoreLayerWithData,\n astNode: NormalizationLinkedField,\n networkResponseData: NetworkResponseObject,\n targetParentRecordLink: StoreLink,\n variables: Variables,\n index: number | null,\n mutableEncounteredIds: EncounteredIds,\n): DataId /* The id of the modified or newly created item */ {\n const newStoreRecordId = getDataIdOfNetworkResponse(\n targetParentRecordLink,\n networkResponseData,\n astNode,\n variables,\n index,\n );\n const __typename =\n astNode.concreteType ?? networkResponseData[TYPENAME_FIELD_NAME];\n\n if (__typename == null) {\n throw new Error(\n 'Unexpected missing __typename in network response object. ' +\n 'This is indicative of a bug in Isograph.',\n );\n }\n\n const link = { __link: newStoreRecordId, __typename };\n const newStoreRecord = getMutableStoreRecordProxy(storeLayer, link);\n\n normalizeDataIntoRecord(\n environment,\n storeLayer,\n astNode.selections,\n networkResponseData,\n newStoreRecord,\n link,\n variables,\n mutableEncounteredIds,\n );\n\n return newStoreRecordId;\n}\n\ndeclare const LinkedParentRecordKeyBrand: unique symbol;\nexport type LinkedParentRecordKey = string & {\n brand?: Brand<undefined, typeof LinkedParentRecordKeyBrand>;\n};\n\ndeclare const ScalarParentRecordKeyBrand: unique symbol;\nexport type ScalarParentRecordKey = string & {\n brand?: Brand<undefined, typeof ScalarParentRecordKeyBrand>;\n};\n\nexport function getParentRecordKey(\n astNode: NormalizationLinkedField | ReaderLinkedField,\n variables: Variables,\n): LinkedParentRecordKey;\nexport function getParentRecordKey(\n astNode: NormalizationScalarField | ReaderScalarField,\n variables: Variables,\n): ScalarParentRecordKey;\nexport function getParentRecordKey(\n astNode:\n | NormalizationLinkedField\n | NormalizationScalarField\n | ReaderLinkedField\n | ReaderScalarField,\n variables: Variables,\n): string {\n let parentRecordKey = astNode.fieldName;\n const fieldParameters = astNode.arguments;\n if (fieldParameters != null) {\n for (const fieldParameter of fieldParameters) {\n parentRecordKey += getStoreKeyChunkForArgument(fieldParameter, variables);\n }\n }\n\n return parentRecordKey;\n}\n\nfunction getStoreKeyChunkForArgumentValue(\n argumentValue: ArgumentValue,\n variables: Variables,\n): VariableValue {\n switch (argumentValue.kind) {\n case 'Object': {\n return Object.fromEntries(\n argumentValue.value.map(([argumentName, argumentValue]) => {\n return [\n argumentName,\n // substitute variables\n getStoreKeyChunkForArgumentValue(argumentValue, variables),\n ];\n }),\n );\n }\n case 'Literal': {\n return argumentValue.value;\n }\n case 'Variable': {\n return variables[argumentValue.name] ?? 'null';\n }\n case 'String': {\n return argumentValue.value;\n }\n case 'Enum': {\n return argumentValue.value;\n }\n }\n}\n\nfunction getStoreKeyChunkForArgument(argument: Argument, variables: Variables) {\n const [argumentName, argumentValue] = argument;\n let chunk = getStoreKeyChunkForArgumentValue(argumentValue, variables);\n\n if (typeof chunk === 'object') {\n chunk = JSON.stringify(stableCopy(chunk));\n }\n\n return `${FIRST_SPLIT_KEY}${argumentName}${SECOND_SPLIT_KEY}${chunk}`;\n}\n\ndeclare const LinkedNetworkResponseKeyBrand: unique symbol;\nexport type LinkedNetworkResponseKey = string & {\n brand?: Brand<undefined, typeof LinkedNetworkResponseKeyBrand>;\n};\n\ndeclare const ScalarNetworkResponseKeyBrand: unique symbol;\nexport type ScalarNetworkResponseKey = string & {\n brand?: Brand<undefined, typeof ScalarNetworkResponseKeyBrand>;\n};\n\nfunction getNetworkResponseKey(\n astNode: NormalizationLinkedField,\n): LinkedNetworkResponseKey;\nfunction getNetworkResponseKey(\n astNode: NormalizationScalarField,\n): ScalarNetworkResponseKey;\nfunction getNetworkResponseKey(\n astNode: NormalizationLinkedField | NormalizationScalarField,\n): string {\n let networkResponseKey = astNode.fieldName;\n const fieldParameters = astNode.arguments;\n\n if (fieldParameters != null) {\n for (const [argumentName, argumentValue] of fieldParameters) {\n let argumentValueChunk = getArgumentValueChunk(argumentValue);\n networkResponseKey += `${FIRST_SPLIT_KEY}${argumentName}${SECOND_SPLIT_KEY}${argumentValueChunk}`;\n }\n }\n\n return networkResponseKey;\n}\n\nfunction getArgumentValueChunk(argumentValue: ArgumentValue): string {\n switch (argumentValue.kind) {\n case 'Object': {\n return (\n 'o_' +\n argumentValue.value\n .map(([argumentName, argumentValue]) => {\n return (\n argumentName +\n THIRD_SPLIT_KEY +\n getArgumentValueChunk(argumentValue)\n );\n })\n .join('_') +\n '_c'\n );\n }\n case 'Literal': {\n return 'l_' + argumentValue.value;\n }\n case 'Variable': {\n return 'v_' + argumentValue.name;\n }\n case 'String': {\n // replace all non-word characters (alphanumeric & underscore) with underscores\n return 's_' + argumentValue.value.replaceAll(/\\W/g, '_');\n }\n case 'Enum': {\n return 'e_' + argumentValue.value;\n }\n }\n}\n\n// an alias might be pullRequests____first___first____after___cursor\nexport const FIRST_SPLIT_KEY = '____';\nexport const SECOND_SPLIT_KEY = '___';\nexport const THIRD_SPLIT_KEY = '__';\n\n// Returns a key to look up an item in the store\nfunction getDataIdOfNetworkResponse(\n parentRecordLink: StoreLink,\n dataToNormalize: NetworkResponseObject,\n astNode: NormalizationLinkedField,\n variables: Variables,\n index: number | null,\n): DataId {\n // If we are dealing with nested Query, use __ROOT as id\n // TODO do not hard code this value here\n if (astNode.concreteType === 'Query') {\n return ROOT_ID;\n }\n\n // Check whether the dataToNormalize has an id field. If so, that is the key.\n // If not, we construct an id from the parentRecordId and the field parameters.\n\n const dataId = dataToNormalize.id;\n if (dataId != null) {\n return dataId;\n }\n\n let storeKey = `${parentRecordLink.__typename}:${parentRecordLink.__link}.${astNode.fieldName}`;\n if (index != null) {\n storeKey += `.${index}`;\n }\n\n const fieldParameters = astNode.arguments;\n if (fieldParameters == null) {\n return storeKey;\n }\n\n for (const fieldParameter of fieldParameters) {\n storeKey += getStoreKeyChunkForArgument(fieldParameter, variables);\n }\n return storeKey;\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"entrypoint.d.mts","names":[],"sources":["../../src/core/entrypoint.ts"],"sourcesContent":[],"mappings":";;;;;;;;KAUY,gDACa;;EADb,SAAA,cAAA,EAKe,sBALS,CAMhC,cANgC,EAOhC,iBAPgC,EAAA,GAAA,CAAA;EACX,SAAA,oBAAA,EAUQ,wCAVR,EAAA;CAKrB;AACA,KAOQ,8BAPR,CAAA,uBAQqB,qBARrB,EAAA,iBAAA,CAAA,GAAA;EAFuB,SAAA,IAAA,EAAA,gCAAA;EAMM,SAAA,SAAA,EAQX,oBARW;EAAwC,SAAA,kBAAA,EAAA,qBAAA,GAAA,yBAAA;EAG7D,SAAA,MAAA,EAAA,GAAA,GASa,OATb,CAUR,wBAVsC,CAUb,cAVa,EAUG,iBAVH,CAAA,CAAA;CACjB;AAIH,KASV,kBATU,CAAA,iBAAA,CAAA,GAAA;EAKO,SAAA,IAAA,EAAA,oBAAA;EAAgB,SAAA,SAAA,EAMvB,iBANuB,GAMH,0BANG;EAAzC,SAAA,gBAAA,EAOyB,iBAPzB;CADqB;AAAO,KAWpB,iBAAA,GAXoB;EAKpB,SAAA,IAAA,EAAA,WAAkB;EAER,SAAA,IAAA,EAAA,MAAA;CAAoB;AACb,KAQjB,0BAAA,GARiB;EAAiB,SAAA,IAAA,EAAA,oBAAA;EAGlC,SAAA,WAAiB,EAAA,MAAA;EAKjB,SAAA,SAAA,EAGU,mCAAA,GAAA,IAAA;AAGtB,CAAA;AAOY,KAPA,mCAAA,GAOkB;EACL,SAAA,IAAA,EAAA,6BAAA;EAEG,SAAA,aAAA,EAAA,MAAA,GAAA,IAAA;EAAmB,SAAA,aAAA,EAAA,OAAA,GAAA,UAAA,GAAA,cAAA;CACpB;AAGuB,KAPtC,kBAOsC,CAAA,uBANzB,qBAMyB,EAAA,iBAAA,EAAA,0BAJtB,gBAIsB,GAJH,sBAIG,EAAA,yBAHvB,qBAGuB,CAAA,GAAA;EAAnB,SAAA,IAAA,EAAA,YAAA;EAEA,SAAA,kBAAA,EAFA,kBAEA,CAFmB,iBAEnB,CAAA;EAAgB,SAAA,wBAAA,EAAzC,wBAAyC,CAAhB,cAAgB,EAAA,iBAAA,CAAA,GACzC,8BADyC,CACV,cADU,EACM,iBADN,CAAA;EAAzC,SAAA,YAAA,EAEmB,QAFnB;EAC+B;;;EACZ,SAAA,mBAAA,CAAA,EAIQ,WAJR,CAIoB,aAJpB,CAIkC,gBAJlC,CAAA,CAAA;CAIkC;AAAd,KAGjC,6BAHiC,CAAA,oBAIvB,kBAJuB,CAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,CAAA,CAAA,GAKzC,iBALyC,CAM3C,oBAN2C,CAMtB,WANsB,CAAA,EAO3C,uBAP2C,CAOnB,WAPmB,CAAA,CAAA;AAAZ,KAUrB,wBAVqB,CAAA,uBAWR,qBAXQ,EAAA,iBAAA,EAAA,yBAaN,qBAbM,CAAA,GAAA;EAAW,SAAA,IAAA,EAAA,kBAAA;EAGhC,SAAA,YAAA,EAAA,MAAA;EACU,SAAA,kBAAA,EAAA,qBAAA,GAAA,yBAAA;EAEC,SAAA,MAAA,EAAA,GAAA,GAcE,OAdF,CAenB,kBAfmB,CAgBjB,cAhBiB,EAiBjB,iBAjBiB,EAkBjB,gBAlBiB,EAmBjB,gBAnBiB,CAAA,CAAA;CAArB;AACwB,KAuBd,oBAAA,GACR,wBAxBsB,GAyBtB,wBAzBsB,GA0BtB,2BA1BsB;AAAxB,KA4BU,qBAAA,GAAwB,aA5BlC,CA4BgD,oBA5BhD,CAAA;AAFE,KAgCQ,gBAAA,GAhCR;EAAiB,SAAA,IAAA,EAAA,kBAAA;EAKT,SAAA,UAAA,EA6BW,qBA7Ba;CACX;AAEE,KA6Bf,sBAAA,GA7Be;EASrB,SAAA,IAAA,EAAA,wBAAA;EACA,SAAA,MAAA,EAAA,GAAA,GAqBmB,OArBnB,CAqB2B,gBArB3B,CAAA;CACA;AACA,KAsBM,wBAAA,GAtBN;EAJF,SAAA,IAAA,EAAA,QAAA;EADqB,SAAA,SAAA,EAAA,MAAA;EAAO,SAAA,SAAA,EA8BV,SA9BU,GAAA,IAAA;AAUhC,CAAA;AACI,KAsBQ,wBAAA,GAtBR;EACA,SAAA,IAAA,EAAA,QAAA;EACA,SAAA,SAAA,EAAA,MAAA;EAA2B,SAAA,SAAA,EAuBT,SAvBS,GAAA,IAAA;EAEnB,SAAA,UAAA,EAsBW,qBAtB2B;EAEtC,SAAA,YAAgB,EAqBH,QArBG,GAEL,IAAA;AAGvB,CAAA;AAKY,KAcA,2BAAA,GAdwB;EAMxB,SAAA,IAAA,EAAA,gBAAwB;EAGd,SAAA,IAAA,EAAA,MAAA;EACC,SAAA,UAAA,EAOA,qBAPA;CACE;AAAQ,KAUrB,iCAAA,GAVqB;EAGrB,SAAA,IAAA,EAAA,cAAA;EAOA,SAAA,kBAAA,EAEmB,kBAFc,CAEK,gBAFL,CAAA;EAEK,SAAA,YAAA,EACzB,QADyB;CAAnB;AACN,KAIb,wCAAA,GAJa;EAAQ,SAAA,QAAA,EAKZ,iCALY;EAIrB,SAAA,gBAAA,EAAA,MAAA,EAAA;AAKZ,CAAA;AACyB,iBADT,kBACS,CAAA,uBAAA,qBAAA,EAAA,iBAAA,EAAA,0BAEG,gBAFH,GAEsB,sBAFtB,EAAA,yBAGE,qBAHF,CAAA,CAAA,KAAA,EAMnB,kBANmB,CAOjB,cAPiB,EAQjB,iBARiB,EASjB,iBATiB,EAUjB,gBAViB,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,GAAA,EAAA,GAAA,GAAA,CAAA,GAAA,GAAA,CAAA,EAAA,QAAA,KAAA,IAgBL,kBAhBK,CAiBvB,cAjBuB,EAkBvB,iBAlBuB,EAmBvB,iBAnBuB,EAoBvB,gBApBuB,CAAA;AAEG,KAuBhB,oBAvBgB,CAAA,IAAA,CAAA,GAwB1B,IAxB0B,SAwBb,kBAxBa,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,CAAA,GAwBgC,CAxBhC,GAAA,KAAA;AAAmB,KAyBnC,uBAzBmC,CAAA,IAAA,CAAA,GA0B7C,IA1B6C,SA0BhC,kBA1BgC,CAAA,GAAA,EAAA,KAAA,EAAA,EAAA,GAAA,EAAA,GAAA,CAAA,GA0Ba,CA1Bb,GAAA,KAAA;AAKvC,KAwBI,qBAxBJ,CAAA,IAAA,CAAA,GAyBN,IAzBM,SAyBO,kBAzBP,CAAA,GAAA,EAAA,KAAA,EAAA,EAAA,GAAA,EAAA,GAAA,CAAA,GAyBoD,CAzBpD,GAAA,KAAA;AACA,KAyBI,YAzBJ,CAAA,IAAA,CAAA,GAyByB,IAzBzB,SAyBsC,KAAA,CAAM,EAzB5C,CAAA,KAAA,EAAA,CAAA,GAyB0D,CAzB1D,GAAA,KAAA"}
1
+ {"version":3,"file":"entrypoint.d.mts","names":[],"sources":["../../src/core/entrypoint.ts"],"sourcesContent":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"entrypoint.d.ts","names":[],"sources":["../../src/core/entrypoint.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"entrypoint.d.ts","names":[],"sources":["../../src/core/entrypoint.ts"],"sourcesContent":[],"mappings":";;;;;;;;KAUY,gDACa;;EADb,SAAA,cAAA,EAKe,sBALS,CAMhC,cANgC,EAOhC,iBAPgC,EAAA,GAAA,CAAA;EACX,SAAA,oBAAA,EAUQ,wCAVR,EAAA;CAKrB;AACA,KAOQ,8BAPR,CAAA,uBAQqB,qBARrB,EAAA,iBAAA,CAAA,GAAA;EAFuB,SAAA,IAAA,EAAA,gCAAA;EAMM,SAAA,SAAA,EAQX,oBARW;EAAwC,SAAA,kBAAA,EAAA,qBAAA,GAAA,yBAAA;EAG7D,SAAA,MAAA,EAAA,GAAA,GASa,OATb,CAUR,wBAVsC,CAUb,cAVa,EAUG,iBAVH,CAAA,CAAA;CACjB;AAIH,KASV,kBATU,CAAA,iBAAA,CAAA,GAAA;EAKO,SAAA,IAAA,EAAA,oBAAA;EAAgB,SAAA,SAAA,EAMvB,iBANuB,GAMH,0BANG;EAAzC,SAAA,gBAAA,EAOyB,iBAPzB;CADqB;AAAO,KAWpB,iBAAA,GAXoB;EAKpB,SAAA,IAAA,EAAA,WAAkB;EAER,SAAA,IAAA,EAAA,MAAA;CAAoB;AACb,KAQjB,0BAAA,GARiB;EAAiB,SAAA,IAAA,EAAA,oBAAA;EAGlC,SAAA,WAAiB,EAAA,MAAA;EAKjB,SAAA,SAAA,EAGU,mCAAA,GAAA,IAAA;AAGtB,CAAA;AAOY,KAPA,mCAAA,GAOkB;EACL,SAAA,IAAA,EAAA,6BAAA;EAEG,SAAA,aAAA,EAAA,MAAA,GAAA,IAAA;EAAmB,SAAA,aAAA,EAAA,OAAA,GAAA,UAAA,GAAA,cAAA;CACpB;AAGuB,KAPtC,kBAOsC,CAAA,uBANzB,qBAMyB,EAAA,iBAAA,EAAA,0BAJtB,gBAIsB,GAJH,sBAIG,EAAA,yBAHvB,qBAGuB,CAAA,GAAA;EAAnB,SAAA,IAAA,EAAA,YAAA;EAEA,SAAA,kBAAA,EAFA,kBAEA,CAFmB,iBAEnB,CAAA;EAAgB,SAAA,wBAAA,EAAzC,wBAAyC,CAAhB,cAAgB,EAAA,iBAAA,CAAA,GACzC,8BADyC,CACV,cADU,EACM,iBADN,CAAA;EAAzC,SAAA,YAAA,EAEmB,QAFnB;EAC+B;;;EACZ,SAAA,mBAAA,CAAA,EAIQ,WAJR,CAIoB,aAJpB,CAIkC,gBAJlC,CAAA,CAAA;CAIkC;AAAd,KAGjC,6BAHiC,CAAA,oBAIvB,kBAJuB,CAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,CAAA,CAAA,GAKzC,iBALyC,CAM3C,oBAN2C,CAMtB,WANsB,CAAA,EAO3C,uBAP2C,CAOnB,WAPmB,CAAA,CAAA;AAAZ,KAUrB,wBAVqB,CAAA,uBAWR,qBAXQ,EAAA,iBAAA,EAAA,yBAaN,qBAbM,CAAA,GAAA;EAAW,SAAA,IAAA,EAAA,kBAAA;EAGhC,SAAA,YAAA,EAAA,MAAA;EACU,SAAA,kBAAA,EAAA,qBAAA,GAAA,yBAAA;EAEC,SAAA,MAAA,EAAA,GAAA,GAcE,OAdF,CAenB,kBAfmB,CAgBjB,cAhBiB,EAiBjB,iBAjBiB,EAkBjB,gBAlBiB,EAmBjB,gBAnBiB,CAAA,CAAA;CAArB;AACwB,KAuBd,oBAAA,GACR,wBAxBsB,GAyBtB,wBAzBsB,GA0BtB,2BA1BsB;AAAxB,KA4BU,qBAAA,GAAwB,aA5BlC,CA4BgD,oBA5BhD,CAAA;AAFE,KAgCQ,gBAAA,GAhCR;EAAiB,SAAA,IAAA,EAAA,kBAAA;EAKT,SAAA,UAAA,EA6BW,qBA7Ba;CACX;AAEE,KA6Bf,sBAAA,GA7Be;EASrB,SAAA,IAAA,EAAA,wBAAA;EACA,SAAA,MAAA,EAAA,GAAA,GAqBmB,OArBnB,CAqB2B,gBArB3B,CAAA;CACA;AACA,KAsBM,wBAAA,GAtBN;EAJF,SAAA,IAAA,EAAA,QAAA;EADqB,SAAA,SAAA,EAAA,MAAA;EAAO,SAAA,SAAA,EA8BV,SA9BU,GAAA,IAAA;AAUhC,CAAA;AACI,KAsBQ,wBAAA,GAtBR;EACA,SAAA,IAAA,EAAA,QAAA;EACA,SAAA,SAAA,EAAA,MAAA;EAA2B,SAAA,SAAA,EAuBT,SAvBS,GAAA,IAAA;EAEnB,SAAA,UAAA,EAsBW,qBAtB2B;EAEtC,SAAA,YAAgB,EAqBH,QArBG,GAEL,IAAA;AAGvB,CAAA;AAKY,KAcA,2BAAA,GAdwB;EAMxB,SAAA,IAAA,EAAA,gBAAwB;EAGd,SAAA,IAAA,EAAA,MAAA;EACC,SAAA,UAAA,EAOA,qBAPA;CACE;AAAQ,KAUrB,iCAAA,GAVqB;EAGrB,SAAA,IAAA,EAAA,cAAA;EAOA,SAAA,kBAAA,EAEmB,kBAFc,CAEK,gBAFL,CAAA;EAEK,SAAA,YAAA,EACzB,QADyB;CAAnB;AACN,KAIb,wCAAA,GAJa;EAAQ,SAAA,QAAA,EAKZ,iCALY;EAIrB,SAAA,gBAAA,EAAA,MAAA,EAAA;AAKZ,CAAA;AACyB,iBADT,kBACS,CAAA,uBAAA,qBAAA,EAAA,iBAAA,EAAA,0BAEG,gBAFH,GAEsB,sBAFtB,EAAA,yBAGE,qBAHF,CAAA,CAAA,KAAA,EAMnB,kBANmB,CAOjB,cAPiB,EAQjB,iBARiB,EASjB,iBATiB,EAUjB,gBAViB,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,GAAA,EAAA,GAAA,GAAA,CAAA,GAAA,GAAA,CAAA,EAAA,QAAA,KAAA,IAgBL,kBAhBK,CAiBvB,cAjBuB,EAkBvB,iBAlBuB,EAmBvB,iBAnBuB,EAoBvB,gBApBuB,CAAA;AAEG,KAuBhB,oBAvBgB,CAAA,IAAA,CAAA,GAwB1B,IAxB0B,SAwBb,kBAxBa,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,CAAA,GAwBgC,CAxBhC,GAAA,KAAA;AAAmB,KAyBnC,uBAzBmC,CAAA,IAAA,CAAA,GA0B7C,IA1B6C,SA0BhC,kBA1BgC,CAAA,GAAA,EAAA,KAAA,EAAA,EAAA,GAAA,EAAA,GAAA,CAAA,GA0Ba,CA1Bb,GAAA,KAAA;AAKvC,KAwBI,qBAxBJ,CAAA,IAAA,CAAA,GAyBN,IAzBM,SAyBO,kBAzBP,CAAA,GAAA,EAAA,KAAA,EAAA,EAAA,GAAA,EAAA,GAAA,CAAA,GAyBoD,CAzBpD,GAAA,KAAA;AACA,KAyBI,YAzBJ,CAAA,IAAA,CAAA,GAyByB,IAzBzB,SAyBsC,KAAA,CAAM,EAzB5C,CAAA,KAAA,EAAA,CAAA,GAyB0D,CAzB1D,GAAA,KAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"read.d.mts","names":[],"sources":["../../src/core/read.ts"],"sourcesContent":[],"mappings":";;;;;;;AAoDY,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,KA8zBxB,2BAAA,GA9zBwB;EA8zBxB,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,KA4zBxB,2BAAA,GA5zBwB;EA4zBxB,iBAAA,EAAA,OAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"read.d.ts","names":[],"sources":["../../src/core/read.ts"],"sourcesContent":[],"mappings":";;;;;;AAsD6B,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;KAm0Bd,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;KAi0Bd,2BAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"read.mjs","names":["mutableEncounteredRecords: EncounteredIds","target: { [index: string]: any }","ast","root","variables","networkRequest","entrypointLoaderState:\n | {\n kind: 'EntrypointNotLoaded';\n }\n | {\n kind: 'NetworkRequestStarted';\n disposeNetworkRequest: CleanupFn;\n }\n | { kind: 'Disposed' }","result: Variables","childVars: Writable<Variables>","data","readData","link","result"],"sources":["../../src/core/read.ts"],"sourcesContent":["import type { CleanupFn, ItemCleanupPair } from '@isograph/disposable-types';\nimport {\n getParentRecordKey,\n insertEmptySetIfMissing,\n onNextChangeToRecord,\n type EncounteredIds,\n} from './cache';\nimport type { FetchOptions } from './check';\nimport { getOrCreateCachedComponent } from './componentCache';\nimport type {\n IsographEntrypoint,\n ReaderWithRefetchQueries,\n RefetchQueryNormalizationArtifactWrapper,\n} from './entrypoint';\nimport type {\n ExtractData,\n FragmentReference,\n UnknownTReadFromStore,\n Variables,\n} from './FragmentReference';\nimport type { IsographEnvironment } from './IsographEnvironment';\nimport {\n assertLink,\n getOrLoadIsographArtifact,\n getOrLoadReaderWithRefetchQueries,\n type DataTypeValue,\n type StoreLink,\n type StoreRecord,\n} from './IsographEnvironment';\nimport { logMessage } from './logging';\nimport { maybeMakeNetworkRequest } from './makeNetworkRequest';\nimport { getStoreRecordProxy } from './optimisticProxy';\nimport type { PromiseWrapper } from './PromiseWrapper';\nimport {\n getPromiseState,\n NOT_SET,\n readPromise,\n wrapPromise,\n wrapResolvedValue,\n} from './PromiseWrapper';\nimport type {\n LoadablySelectedField,\n ReaderAst,\n ReaderClientPointer,\n ReaderImperativelyLoadedField,\n ReaderLinkedField,\n ReaderNonLoadableResolverField,\n ReaderScalarField,\n} from './reader';\nimport { getOrCreateCachedStartUpdate } from './startUpdate';\nimport type { Arguments } from './util';\n\nexport type WithEncounteredRecords<T> = {\n readonly encounteredRecords: EncounteredIds;\n readonly item: ExtractData<T>;\n};\n\nexport function readButDoNotEvaluate<\n TReadFromStore extends UnknownTReadFromStore,\n>(\n environment: IsographEnvironment,\n fragmentReference: FragmentReference<TReadFromStore, unknown>,\n networkRequestOptions: NetworkRequestReaderOptions,\n): WithEncounteredRecords<TReadFromStore> {\n const mutableEncounteredRecords: EncounteredIds = new Map();\n\n // TODO consider moving this to the outside\n const readerWithRefetchQueries = readPromise(\n fragmentReference.readerWithRefetchQueries,\n );\n\n const response = readData(\n environment,\n readerWithRefetchQueries.readerArtifact.readerAst,\n fragmentReference.root,\n fragmentReference.variables ?? {},\n readerWithRefetchQueries.nestedRefetchQueries,\n fragmentReference.networkRequest,\n networkRequestOptions,\n mutableEncounteredRecords,\n );\n\n logMessage(environment, () => ({\n kind: 'DoneReading',\n response,\n fieldName: readerWithRefetchQueries.readerArtifact.fieldName,\n root: fragmentReference.root,\n }));\n\n if (response.kind === 'MissingData') {\n // There are two cases here that we care about:\n // 1. the network request is in flight, we haven't suspended on it, and we want\n // to throw if it errors out. So, networkRequestOptions.suspendIfInFlight === false\n // and networkRequestOptions.throwOnNetworkError === true.\n // 2. everything else\n //\n // In the first case, we cannot simply throw onNextChange, because if the network\n // response errors out, we will not update the store, so the onNextChange promise\n // will not resolve.\n if (\n !networkRequestOptions.suspendIfInFlight &&\n networkRequestOptions.throwOnNetworkError\n ) {\n // What are we doing here? If the network response has errored out, we can do\n // two things: throw a rejected promise, or throw an error. Both work identically\n // in the browser. However, during initial SSR on NextJS, throwing a rejected\n // promise results in an infinite loop (including re-issuing the query until the\n // process OOM's or something.) Hence, we throw an error.\n\n const result = fragmentReference.networkRequest.result;\n if (result !== NOT_SET && result.kind === 'Err') {\n throw new Error('NetworkError', { cause: result.error });\n }\n\n throw new Promise((resolve, reject) => {\n onNextChangeToRecord(environment, response.recordLink).then(resolve);\n fragmentReference.networkRequest.promise.catch(reject);\n });\n }\n throw onNextChangeToRecord(environment, response.recordLink);\n } else {\n return {\n encounteredRecords: mutableEncounteredRecords,\n item: response.data,\n };\n }\n}\n\nexport type ReadDataResultSuccess<Data> = {\n readonly kind: 'Success';\n readonly data: Data;\n};\n\nexport type ReadDataResult<Data> =\n | ReadDataResultSuccess<Data>\n | {\n readonly kind: 'MissingData';\n readonly reason: string;\n readonly nestedReason?: ReadDataResult<unknown>;\n readonly recordLink: StoreLink;\n };\n\nfunction readData<TReadFromStore>(\n environment: IsographEnvironment,\n ast: ReaderAst<TReadFromStore>,\n root: StoreLink,\n variables: Variables,\n nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[],\n networkRequest: PromiseWrapper<void, any>,\n networkRequestOptions: NetworkRequestReaderOptions,\n mutableEncounteredRecords: EncounteredIds,\n): ReadDataResult<ExtractData<TReadFromStore>> {\n const encounteredIds = insertEmptySetIfMissing(\n mutableEncounteredRecords,\n root.__typename,\n );\n encounteredIds.add(root.__link);\n let storeRecord = getStoreRecordProxy(environment.store, root);\n if (storeRecord === undefined) {\n return {\n kind: 'MissingData',\n reason: 'No record for root ' + root.__link,\n recordLink: root,\n };\n }\n\n if (storeRecord == null) {\n return {\n kind: 'Success',\n data: null as any,\n };\n }\n\n let target: { [index: string]: any } = {};\n\n for (const field of ast) {\n switch (field.kind) {\n case 'Scalar': {\n const data = readScalarFieldData(field, storeRecord, root, variables);\n\n if (data.kind === 'MissingData') {\n return data;\n }\n target[field.alias ?? field.fieldName] = data.data;\n break;\n }\n case 'Link': {\n target[field.alias] = root;\n break;\n }\n case 'Linked': {\n const data = readLinkedFieldData(\n environment,\n field,\n storeRecord,\n root,\n variables,\n nestedRefetchQueries,\n networkRequest,\n networkRequestOptions,\n (ast, root) =>\n readData(\n environment,\n ast,\n root,\n variables,\n nestedRefetchQueries,\n networkRequest,\n networkRequestOptions,\n mutableEncounteredRecords,\n ),\n );\n if (data.kind === 'MissingData') {\n return data;\n }\n target[field.alias ?? field.fieldName] = data.data;\n break;\n }\n case 'ImperativelyLoadedField': {\n const data = readImperativelyLoadedField(\n environment,\n field,\n root,\n variables,\n nestedRefetchQueries,\n networkRequest,\n networkRequestOptions,\n mutableEncounteredRecords,\n );\n if (data.kind === 'MissingData') {\n return data;\n }\n target[field.alias] = data.data;\n break;\n }\n case 'Resolver': {\n const data = readResolverFieldData(\n environment,\n field,\n root,\n variables,\n nestedRefetchQueries,\n networkRequest,\n networkRequestOptions,\n mutableEncounteredRecords,\n );\n if (data.kind === 'MissingData') {\n return data;\n }\n target[field.alias] = data.data;\n break;\n }\n case 'LoadablySelectedField': {\n const data = readLoadablySelectedFieldData(\n environment,\n field,\n root,\n variables,\n networkRequest,\n networkRequestOptions,\n mutableEncounteredRecords,\n );\n if (data.kind === 'MissingData') {\n return data;\n }\n target[field.alias] = data.data;\n break;\n }\n }\n }\n return {\n kind: 'Success',\n data: target as any,\n };\n}\n\nexport function readLoadablySelectedFieldData(\n environment: IsographEnvironment,\n field: LoadablySelectedField,\n root: StoreLink,\n variables: Variables,\n networkRequest: PromiseWrapper<void, any>,\n networkRequestOptions: NetworkRequestReaderOptions,\n mutableEncounteredRecords: EncounteredIds,\n): ReadDataResult<unknown> {\n const refetchReaderParams = readData(\n environment,\n field.refetchReaderAst,\n root,\n variables,\n // Refetch fields just read the id, and don't need refetch query artifacts\n [],\n networkRequest,\n networkRequestOptions,\n mutableEncounteredRecords,\n );\n\n if (refetchReaderParams.kind === 'MissingData') {\n return {\n kind: 'MissingData',\n reason: 'Missing data for ' + field.alias + ' on root ' + root.__link,\n nestedReason: refetchReaderParams,\n recordLink: refetchReaderParams.recordLink,\n };\n }\n\n return {\n kind: 'Success',\n data: (\n args: any,\n // TODO get the associated type for FetchOptions from the loadably selected field\n fetchOptions?: FetchOptions<any, never>,\n ) => {\n // TODO we should use the reader AST for this\n const includeReadOutData = (variables: any, readOutData: any) => {\n variables.id = readOutData.id;\n return variables;\n };\n const localVariables = includeReadOutData(\n args ?? {},\n refetchReaderParams.data,\n );\n writeQueryArgsToVariables(\n localVariables,\n field.queryArguments,\n variables,\n );\n\n return [\n // Stable id\n root.__typename +\n ':' +\n root.__link +\n '/' +\n field.name +\n '/' +\n stableStringifyArgs(localVariables),\n // Fetcher\n () => {\n const fragmentReferenceAndDisposeFromEntrypoint = (\n entrypoint: IsographEntrypoint<any, any, any, {}>,\n ): [FragmentReference<any, any>, CleanupFn] => {\n const { fieldName, readerArtifactKind, readerWithRefetchQueries } =\n getOrLoadReaderWithRefetchQueries(\n environment,\n entrypoint.readerWithRefetchQueries,\n );\n const [networkRequest, disposeNetworkRequest] =\n maybeMakeNetworkRequest(\n environment,\n entrypoint,\n localVariables,\n readerWithRefetchQueries,\n fetchOptions ?? null,\n );\n\n const fragmentReference: FragmentReference<any, any> = {\n kind: 'FragmentReference',\n readerWithRefetchQueries,\n fieldName,\n readerArtifactKind,\n // TODO localVariables is not guaranteed to have an id field\n root,\n variables: localVariables,\n networkRequest,\n };\n return [fragmentReference, disposeNetworkRequest];\n };\n\n if (field.entrypoint.kind === 'Entrypoint') {\n return fragmentReferenceAndDisposeFromEntrypoint(field.entrypoint);\n } else {\n const isographArtifactPromiseWrapper = getOrLoadIsographArtifact(\n environment,\n field.entrypoint.typeAndField,\n field.entrypoint.loader,\n );\n const state = getPromiseState(isographArtifactPromiseWrapper);\n if (state.kind === 'Ok') {\n return fragmentReferenceAndDisposeFromEntrypoint(state.value);\n } else {\n // Promise is pending or thrown\n\n let entrypointLoaderState:\n | {\n kind: 'EntrypointNotLoaded';\n }\n | {\n kind: 'NetworkRequestStarted';\n disposeNetworkRequest: CleanupFn;\n }\n | { kind: 'Disposed' } = { kind: 'EntrypointNotLoaded' };\n\n const readerWithRefetchQueries = wrapPromise(\n isographArtifactPromiseWrapper.promise.then(\n (entrypoint) =>\n getOrLoadReaderWithRefetchQueries(\n environment,\n entrypoint.readerWithRefetchQueries,\n ).readerWithRefetchQueries.promise,\n ),\n );\n const networkRequest = wrapPromise(\n isographArtifactPromiseWrapper.promise.then((entrypoint) => {\n if (entrypointLoaderState.kind === 'EntrypointNotLoaded') {\n const [networkRequest, disposeNetworkRequest] =\n maybeMakeNetworkRequest(\n environment,\n entrypoint,\n localVariables,\n readerWithRefetchQueries,\n fetchOptions ?? null,\n );\n entrypointLoaderState = {\n kind: 'NetworkRequestStarted',\n disposeNetworkRequest,\n };\n return networkRequest.promise;\n }\n }),\n );\n\n const fragmentReference: FragmentReference<any, any> = {\n kind: 'FragmentReference',\n readerWithRefetchQueries,\n fieldName: field.name,\n readerArtifactKind: field.entrypoint.readerArtifactKind,\n // TODO localVariables is not guaranteed to have an id field\n root,\n variables: localVariables,\n networkRequest,\n };\n\n return [\n fragmentReference,\n () => {\n if (entrypointLoaderState.kind === 'NetworkRequestStarted') {\n entrypointLoaderState.disposeNetworkRequest();\n }\n entrypointLoaderState = { kind: 'Disposed' };\n },\n ];\n }\n }\n },\n ];\n },\n };\n}\n\nfunction filterVariables(\n variables: Variables,\n allowedVariables: string[],\n): Variables {\n const result: Variables = {};\n for (const key of allowedVariables) {\n // @ts-expect-error\n result[key] = variables[key];\n }\n return result;\n}\n\nfunction generateChildVariableMap(\n variables: Variables,\n fieldArguments: Arguments | null,\n): Variables {\n if (fieldArguments == null) {\n return {};\n }\n\n type Writable<T> = { -readonly [P in keyof T]: T[P] };\n const childVars: Writable<Variables> = {};\n for (const [name, value] of fieldArguments) {\n if (value.kind === 'Object') {\n childVars[name] = generateChildVariableMap(variables, value.value);\n } else if (value.kind === 'Variable') {\n const variable = variables[value.name];\n // Variable could be null if it was not provided but has a default case,\n // so we allow the loop to continue rather than throwing an error.\n if (variable != null) {\n childVars[name] = variable;\n }\n } else {\n childVars[name] = value.value;\n }\n }\n return childVars;\n}\n\nfunction writeQueryArgsToVariables(\n targetVariables: any,\n queryArgs: Arguments | null,\n variables: Variables,\n) {\n if (queryArgs == null) {\n return;\n }\n for (const [name, argType] of queryArgs) {\n switch (argType.kind) {\n case 'Object': {\n writeQueryArgsToVariables(\n (targetVariables[name] = {}),\n argType.value,\n variables,\n );\n break;\n }\n case 'Variable': {\n targetVariables[name] = variables[argType.name];\n break;\n }\n case 'Enum': {\n targetVariables[name] = argType.value;\n break;\n }\n case 'Literal': {\n targetVariables[name] = argType.value;\n break;\n }\n case 'String': {\n targetVariables[name] = argType.value;\n break;\n }\n }\n }\n}\n\nexport function readResolverFieldData(\n environment: IsographEnvironment,\n field: ReaderNonLoadableResolverField,\n root: StoreLink,\n variables: Variables,\n nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[],\n networkRequest: PromiseWrapper<void, any>,\n networkRequestOptions: NetworkRequestReaderOptions,\n mutableEncounteredRecords: EncounteredIds,\n): ReadDataResult<unknown> {\n const usedRefetchQueries = field.usedRefetchQueries;\n const resolverRefetchQueries = usedRefetchQueries.map((index) => {\n const resolverRefetchQuery = nestedRefetchQueries[index];\n if (resolverRefetchQuery == null) {\n throw new Error(\n 'resolverRefetchQuery is null in Resolver. This is indicative of a bug in Isograph.',\n );\n }\n return resolverRefetchQuery;\n });\n\n const readerWithRefetchQueries = {\n kind: 'ReaderWithRefetchQueries',\n readerArtifact: field.readerArtifact,\n nestedRefetchQueries: resolverRefetchQueries,\n } satisfies ReaderWithRefetchQueries<any, any>;\n\n const fragment = {\n kind: 'FragmentReference',\n readerWithRefetchQueries: wrapResolvedValue(readerWithRefetchQueries),\n fieldName: field.readerArtifact.fieldName,\n readerArtifactKind: field.readerArtifact.kind,\n root,\n variables: generateChildVariableMap(variables, field.arguments),\n networkRequest,\n } satisfies FragmentReference<any, any>;\n\n switch (field.readerArtifact.kind) {\n case 'EagerReaderArtifact': {\n const data = readData(\n environment,\n field.readerArtifact.readerAst,\n root,\n generateChildVariableMap(variables, field.arguments),\n resolverRefetchQueries,\n networkRequest,\n networkRequestOptions,\n mutableEncounteredRecords,\n );\n if (data.kind === 'MissingData') {\n return {\n kind: 'MissingData',\n reason: 'Missing data for ' + field.alias + ' on root ' + root.__link,\n nestedReason: data,\n recordLink: data.recordLink,\n };\n }\n const firstParameter = {\n data: data.data,\n parameters: variables,\n startUpdate: field.readerArtifact.hasUpdatable\n ? getOrCreateCachedStartUpdate(\n environment,\n fragment,\n networkRequestOptions,\n )\n : undefined,\n };\n return {\n kind: 'Success',\n data: field.readerArtifact.resolver(firstParameter),\n };\n }\n case 'ComponentReaderArtifact': {\n return {\n kind: 'Success',\n data: getOrCreateCachedComponent(\n environment,\n fragment,\n networkRequestOptions,\n ),\n };\n }\n }\n}\n\nexport function readScalarFieldData(\n field: ReaderScalarField,\n storeRecord: StoreRecord,\n root: StoreLink,\n variables: Variables,\n): ReadDataResult<\n string | number | boolean | StoreLink | readonly DataTypeValue[] | null\n> {\n const storeRecordName = getParentRecordKey(field, variables);\n const value = storeRecord[storeRecordName];\n // TODO consider making scalars into discriminated unions. This probably has\n // to happen for when we handle errors.\n if (value === undefined) {\n return {\n kind: 'MissingData',\n reason: 'No value for ' + storeRecordName + ' on root ' + root.__link,\n recordLink: root,\n };\n }\n return { kind: 'Success', data: value };\n}\n\nexport function readLinkedFieldData(\n environment: IsographEnvironment,\n field: ReaderLinkedField,\n storeRecord: StoreRecord,\n root: StoreLink,\n variables: Variables,\n nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[],\n networkRequest: PromiseWrapper<void, any>,\n networkRequestOptions: NetworkRequestReaderOptions,\n readData: <TReadFromStore>(\n ast: ReaderAst<TReadFromStore>,\n root: StoreLink,\n ) => ReadDataResult<object>,\n): ReadDataResult<unknown> {\n const storeRecordName = getParentRecordKey(field, variables);\n let value = storeRecord[storeRecordName];\n\n if (field.condition != null) {\n const data = readData(field.condition.readerAst, root);\n if (data.kind === 'MissingData') {\n return {\n kind: 'MissingData',\n reason:\n 'Missing data for ' + storeRecordName + ' on root ' + root.__link,\n nestedReason: data,\n recordLink: data.recordLink,\n };\n }\n\n const readerWithRefetchQueries = {\n kind: 'ReaderWithRefetchQueries',\n readerArtifact: field.condition,\n // TODO this is wrong\n // should map field.condition.usedRefetchQueries\n // but it doesn't exist\n nestedRefetchQueries: [],\n } satisfies ReaderWithRefetchQueries<any, any>;\n\n const fragment = {\n kind: 'FragmentReference',\n readerWithRefetchQueries: wrapResolvedValue(readerWithRefetchQueries),\n root,\n fieldName: field.condition.fieldName,\n readerArtifactKind: field.condition.kind,\n variables: generateChildVariableMap(\n variables,\n // TODO this is wrong\n // should use field.arguments\n // but it doesn't exist\n [],\n ),\n networkRequest,\n } satisfies FragmentReference<any, any>;\n\n const condition = field.condition.resolver({\n data: data.data,\n parameters: {},\n ...(field.condition.hasUpdatable\n ? {\n startUpdate: getOrCreateCachedStartUpdate(\n environment,\n fragment,\n networkRequestOptions,\n ),\n }\n : undefined),\n });\n value = condition;\n }\n\n if (Array.isArray(value)) {\n const results = [];\n for (const item of value) {\n const link = assertLink(item);\n if (link === undefined) {\n return {\n kind: 'MissingData',\n reason:\n 'No link for ' +\n storeRecordName +\n ' on root ' +\n root.__link +\n '. Link is ' +\n JSON.stringify(item),\n recordLink: root,\n };\n } else if (link == null) {\n results.push(null);\n continue;\n }\n\n if (isClientPointer(field)) {\n const result = readClientPointerData(\n environment,\n field,\n link,\n variables,\n nestedRefetchQueries,\n readData,\n );\n if (result.kind === 'MissingData') {\n return {\n kind: 'MissingData',\n reason:\n 'Missing data for ' +\n storeRecordName +\n ' on root ' +\n root.__link +\n '. Link is ' +\n JSON.stringify(item),\n nestedReason: result,\n recordLink: result.recordLink,\n };\n }\n results.push(result.data);\n continue;\n }\n\n const result = readData(field.selections, link);\n if (result.kind === 'MissingData') {\n return {\n kind: 'MissingData',\n reason:\n 'Missing data for ' +\n storeRecordName +\n ' on root ' +\n root.__link +\n '. Link is ' +\n JSON.stringify(item),\n nestedReason: result,\n recordLink: result.recordLink,\n };\n }\n results.push(result.data);\n }\n return {\n kind: 'Success',\n data: results,\n };\n }\n let link = assertLink(value);\n\n if (link === undefined) {\n // TODO make this configurable, and also generated and derived from the schema\n const missingFieldHandler = environment.missingFieldHandler;\n\n const altLink = missingFieldHandler?.(\n storeRecord,\n root,\n field.fieldName,\n field.arguments,\n variables,\n );\n logMessage(environment, () => ({\n kind: 'MissingFieldHandlerCalled',\n root,\n storeRecord,\n fieldName: field.fieldName,\n arguments: field.arguments,\n variables,\n }));\n\n if (altLink === undefined) {\n return {\n kind: 'MissingData',\n reason:\n 'No link for ' +\n storeRecordName +\n ' on root ' +\n root.__link +\n '. Link is ' +\n JSON.stringify(value),\n recordLink: root,\n };\n } else {\n link = altLink;\n }\n } else if (link == null) {\n return {\n kind: 'Success',\n data: null,\n };\n }\n\n if (isClientPointer(field)) {\n const data = readClientPointerData(\n environment,\n field,\n link,\n variables,\n nestedRefetchQueries,\n readData,\n );\n if (data.kind === 'MissingData') {\n return {\n kind: 'MissingData',\n reason:\n 'Missing data for ' + storeRecordName + ' on root ' + root.__link,\n nestedReason: data,\n recordLink: data.recordLink,\n };\n }\n return data;\n }\n const data = readData(field.selections, link);\n if (data.kind === 'MissingData') {\n return {\n kind: 'MissingData',\n reason: 'Missing data for ' + storeRecordName + ' on root ' + root.__link,\n nestedReason: data,\n recordLink: data.recordLink,\n };\n }\n return data;\n}\n\nfunction isClientPointer(\n field: ReaderLinkedField,\n): field is ReaderClientPointer {\n return field.refetchQueryIndex != null;\n}\n\nexport function readClientPointerData(\n environment: IsographEnvironment,\n field: ReaderClientPointer,\n root: StoreLink,\n variables: Variables,\n nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[],\n readData: <TReadFromStore>(\n ast: ReaderAst<TReadFromStore>,\n root: StoreLink,\n ) => ReadDataResult<object>,\n): ReadDataResult<unknown> {\n const refetchReaderParams = readData(\n [\n {\n kind: 'Scalar',\n fieldName: 'id',\n alias: null,\n arguments: null,\n isUpdatable: false,\n },\n ],\n root,\n );\n\n if (refetchReaderParams.kind === 'MissingData') {\n return {\n kind: 'MissingData',\n reason: 'Missing data for ' + field.alias + ' on root ' + root.__link,\n nestedReason: refetchReaderParams,\n recordLink: refetchReaderParams.recordLink,\n };\n }\n\n const refetchQuery = nestedRefetchQueries[field.refetchQueryIndex];\n if (refetchQuery == null) {\n throw new Error(\n 'refetchQuery is null in RefetchField. This is indicative of a bug in Isograph.',\n );\n }\n const refetchQueryArtifact = refetchQuery.artifact;\n const allowedVariables = refetchQuery.allowedVariables;\n\n return {\n kind: 'Success',\n data: (\n args: any,\n // TODO get the associated type for FetchOptions from the loadably selected field\n fetchOptions?: FetchOptions<any, never>,\n ) => {\n const includeReadOutData = (variables: any, readOutData: any) => {\n variables.id = readOutData.id;\n return variables;\n };\n const localVariables = includeReadOutData(\n args ?? {},\n refetchReaderParams.data,\n );\n writeQueryArgsToVariables(localVariables, field.arguments, variables);\n\n return [\n // Stable id\n root.__typename +\n ':' +\n root.__link +\n '/' +\n field.fieldName +\n '/' +\n stableStringifyArgs(localVariables),\n // Fetcher\n (): ItemCleanupPair<FragmentReference<any, any>> | undefined => {\n const variables = includeReadOutData(\n filterVariables({ ...args, ...localVariables }, allowedVariables),\n refetchReaderParams.data,\n );\n\n const readerWithRefetchQueries = wrapResolvedValue({\n kind: 'ReaderWithRefetchQueries',\n readerArtifact: {\n kind: 'EagerReaderArtifact',\n fieldName: field.fieldName,\n readerAst: field.selections,\n resolver: ({ data }: { data: any }) => data,\n hasUpdatable: false,\n },\n nestedRefetchQueries,\n } as const);\n\n const [networkRequest, disposeNetworkRequest] =\n maybeMakeNetworkRequest(\n environment,\n refetchQueryArtifact,\n variables,\n readerWithRefetchQueries,\n fetchOptions ?? null,\n );\n\n const fragmentReference: FragmentReference<any, any> = {\n kind: 'FragmentReference',\n fieldName: field.fieldName,\n readerArtifactKind: 'EagerReaderArtifact',\n readerWithRefetchQueries: readerWithRefetchQueries,\n root,\n variables,\n networkRequest,\n };\n return [fragmentReference, disposeNetworkRequest];\n },\n ];\n },\n };\n}\n\nexport type NetworkRequestReaderOptions = {\n suspendIfInFlight: boolean;\n throwOnNetworkError: boolean;\n};\n\nexport function getNetworkRequestOptionsWithDefaults(\n networkRequestOptions?: Partial<NetworkRequestReaderOptions> | void,\n): NetworkRequestReaderOptions {\n return {\n suspendIfInFlight: networkRequestOptions?.suspendIfInFlight ?? false,\n throwOnNetworkError: networkRequestOptions?.throwOnNetworkError ?? true,\n };\n}\n\n// TODO use a description of the params for this?\n// TODO call stableStringifyArgs on the variable values, as well.\n// This doesn't matter for now, since we are just using primitive values\n// in the demo.\nfunction stableStringifyArgs(args: object) {\n const keys = Object.keys(args);\n keys.sort();\n let s = '';\n for (const key of keys) {\n // @ts-expect-error\n s += `${key}=${JSON.stringify(args[key])};`;\n }\n return s;\n}\n\nexport function readImperativelyLoadedField(\n environment: IsographEnvironment,\n field: ReaderImperativelyLoadedField,\n root: StoreLink,\n variables: Variables,\n nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[],\n networkRequest: PromiseWrapper<void, any>,\n networkRequestOptions: NetworkRequestReaderOptions,\n mutableEncounteredRecords: EncounteredIds,\n): ReadDataResult<unknown> {\n // First, we read the data using the refetch reader AST (i.e. read out the\n // id field).\n const data = readData(\n environment,\n field.refetchReaderArtifact.readerAst,\n root,\n variables,\n // Refetch fields just read the id, and don't need refetch query artifacts\n [],\n // This is probably indicative of the fact that we are doing redundant checks\n // on the status of this network request...\n networkRequest,\n networkRequestOptions,\n mutableEncounteredRecords,\n );\n if (data.kind === 'MissingData') {\n return {\n kind: 'MissingData',\n reason: 'Missing data for ' + field.alias + ' on root ' + root.__link,\n nestedReason: data,\n recordLink: data.recordLink,\n };\n } else {\n const { refetchQueryIndex } = field;\n const refetchQuery = nestedRefetchQueries[refetchQueryIndex];\n if (refetchQuery == null) {\n throw new Error(\n 'Refetch query not found. This is indicative of a bug in Isograph.',\n );\n }\n const refetchQueryArtifact = refetchQuery.artifact;\n const allowedVariables = refetchQuery.allowedVariables;\n\n // Second, we allow the user to call the resolver, which will ultimately\n // use the resolver reader AST to get the resolver parameters.\n return {\n kind: 'Success',\n data: (args: any) => [\n // Stable id\n root.__typename + ':' + root.__link + '__' + field.name,\n // Fetcher\n field.refetchReaderArtifact.resolver(\n environment,\n refetchQueryArtifact,\n data.data,\n filterVariables({ ...args, ...variables }, allowedVariables),\n root,\n // TODO these params should be removed\n null,\n [],\n ),\n ],\n };\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"read.mjs","names":["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 +1 @@
1
- {"version":3,"file":"util.d.ts","names":[],"sources":["../../src/core/util.ts"],"sourcesContent":[],"mappings":";;;KAEY,8DACV,gDAA8C;KACpC,oCACV,UAAU,OAAO,sBACb,KAAA,CAAM,GAAA,CAAI,sBACV,IAAI,KAAA,CAAM,GAAA,CAAI;AALR,KAOA,SAAA,GAAY,QAPM,EAAA;AAElB,KAMA,QAAA,GANA,CAMY,YANZ,EAM0B,aANI,CAAA;AACxC,KAMU,YAAA,GANV,MAAA;AAAiB,KAOP,aAAA,GAPO;EAAP,SAAA,IAAA,EAAA,UAAA;EACN,SAAU,IAAA,EAAA,MAAA;CACV,GAAA;EAAI,SAAU,IAAA,EAAA,SAAA;EAAmB,SAAA,KAAA,EAAA,GAAA;AAEvC,CAAA,GAAY;EACA,SAAA,IAAQ,EAAA,QAAA;EACR,SAAA,KAAA,EAAY,MAAA;AACxB,CAAA,GAAY;;;;;kBAmBU"}
1
+ {"version":3,"file":"util.d.ts","names":[],"sources":["../../src/core/util.ts"],"sourcesContent":[],"mappings":";;;KAEY,8DACV,gDAA8C;KACpC,oCACV,UAAU,OAAO,sBACb,KAAA,CAAM,GAAA,CAAI,sBACV,IAAI,KAAA,CAAM,GAAA,CAAI;AALR,KAOA,SAAA,GAAY,QAPM,EAAA;AAElB,KAMA,QAAA,GANA,CAMY,YANZ,EAM0B,aANI,CAAA;AACxC,KAMU,YAAA,GANV,MAAA;AAAiB,KAOP,aAAA,GAPO;EAAP,SAAA,IAAA,EAAA,UAAA;EACN,SAAU,IAAA,EAAA,MAAA;CACV,GAAA;EAAI,SAAU,IAAA,EAAA,SAAA;EAAmB,SAAA,KAAA,EAAA,GAAA;AAEvC,CAAA,GAAY;EACA,SAAA,IAAQ,EAAA,QAAI;EACZ,SAAA,KAAA,EAAY,MAAA;AACxB,CAAA,GAAY;;;;;kBAmBU"}
package/dist/index.d.mts CHANGED
@@ -4,7 +4,7 @@ import { Argument, ArgumentName, ArgumentValue, Arguments, CombineWithIntrinsicA
4
4
  import { ComponentReaderArtifact, EagerReaderArtifact, LoadableField, LoadablySelectedField, ReaderAst, ReaderAstNode, ReaderImperativelyLoadedField, ReaderLinkField, ReaderLinkedField, ReaderNonLoadableResolverField, ReaderScalarField, RefetchReaderArtifact, ResolverFirstParameter, StableId, StartUpdate, TopLevelReaderArtifact } from "./core/reader.mjs";
5
5
  import { NetworkRequestReaderOptions, ReadDataResult, WithEncounteredRecords, readButDoNotEvaluate } from "./core/read.mjs";
6
6
  import { LogFunction, LogMessage, WrappedLogFunction, logMessage, registerLogger } from "./core/logging.mjs";
7
- import { AnyChangesToRecordSubscription, AnyRecordSubscription, BaseStoreLayerData, CacheMap, ComponentOrFieldName, DataId, DataTypeValue, FieldCache, FragmentSubscription, IsographEnvironment, IsographNetworkFunction, Link, MissingFieldHandler, ROOT_ID, StoreLink, StoreRecord, StringifiedArgs, Subscription, Subscriptions, TypeName, createIsographStore } from "./core/IsographEnvironment.mjs";
7
+ import { AnyChangesToRecordSubscription, AnyRecordSubscription, BaseStoreLayerData, CacheMap, ComponentOrFieldName, DataId, DataTypeValueLinked, DataTypeValueScalar, FieldCache, FragmentSubscription, IsographEnvironment, IsographNetworkFunction, Link, MissingFieldHandler, ROOT_ID, StoreLink, StoreRecord, StringifiedArgs, Subscription, Subscriptions, TypeName, createIsographStore } from "./core/IsographEnvironment.mjs";
8
8
  import { ExtractData, ExtractParameters, ExtractStartUpdate, FragmentReference, StableIdForFragmentReference, UnknownTReadFromStore, VariableValue, Variables, stableIdForFragmentReference } from "./core/FragmentReference.mjs";
9
9
  import { EncounteredIds, NetworkResponseObject, NetworkResponseScalarValue, NetworkResponseValue, normalizeData } from "./core/cache.mjs";
10
10
  import { ExtractClientFieldValue, ExtractProps, ExtractReadFromStore, ExtractResolverResult, FragmentReferenceOfEntrypoint, IsographEntrypoint, IsographEntrypointLoader, IsographOperation, IsographPersistedOperation, IsographPersistedOperationExtraInfo, NetworkRequestInfo, NormalizationAst, NormalizationAstLoader, NormalizationAstNode, NormalizationAstNodes, NormalizationInlineFragment, NormalizationLinkedField, NormalizationScalarField, ReaderWithRefetchQueries, RefetchQueryNormalizationArtifact, RefetchQueryNormalizationArtifactWrapper, assertIsEntrypoint } from "./core/entrypoint.mjs";
@@ -29,4 +29,4 @@ import { UseImperativeLoadableFieldReturn, useImperativeExposedMutationField } f
29
29
  import { UseSkipLimitPaginationArgs, UseSkipLimitReturnValue, useSkipLimitPagination } from "./loadable-hooks/useSkipLimitPagination.mjs";
30
30
  import { Connection, PageInfo, UseConnectionSpecPaginationArgs, UsePaginationReturnValue, useConnectionSpecPagination } from "./loadable-hooks/useConnectionSpecPagination.mjs";
31
31
  import { UseImperativeLoadableFieldReturn as UseImperativeLoadableFieldReturn$1, useImperativeLoadableField } from "./loadable-hooks/useImperativeLoadableField.mjs";
32
- export { type AnyChangesToRecordSubscription, type AnyError, type AnyRecordSubscription, type Argument, type ArgumentName, type ArgumentValue, type Arguments, type CacheMap, type CheckResult, type CombineWithIntrinsicAttributes, type ComponentOrFieldName, type ComponentReaderArtifact, type Connection, type DataId, type DataTypeValue, type DidUnretainSomeQuery, type EagerReaderArtifact, type EncounteredIds, type ExtractClientFieldValue, type ExtractData, type ExtractParameters, type ExtractProps, type ExtractReadFromStore, type ExtractResolverResult, type ExtractSecondParam, type ExtractStartUpdate, type FetchOptions, type FieldCache, FragmentReader, type FragmentReference, type FragmentReferenceOfEntrypoint, FragmentRenderer, type FragmentSubscription, type IsExactlyIntrinsicAttributes, type IsographEntrypoint, type IsographEntrypointLoader, type IsographEnvironment, IsographEnvironmentProvider, type IsographEnvironmentProviderProps, type IsographNetworkFunction, type IsographOperation, type IsographPersistedOperation, type IsographPersistedOperationExtraInfo, type BaseStoreLayerData as IsographStore, type Link, type LoadableField, LoadableFieldReader, LoadableFieldRenderer, type LogFunction, type LogMessage, type MissingFieldHandler, NOT_SET, type NetworkRequestInfo, type NetworkRequestReaderOptions, type NetworkResponseObject, type NetworkResponseScalarValue, type NetworkResponseValue, type NormalizationAst, type NormalizationAstLoader, type NormalizationAstNode, type NormalizationAstNodes, type NormalizationInlineFragment, type NormalizationLinkedField, type NormalizationScalarField, type NotSet, type PageInfo, type PromiseState, type PromiseWrapper, ROOT_ID, type ReadDataResult, type ReaderAst, type ReaderAstNode, type ReaderImperativelyLoadedField, type ReaderLinkField, type ReaderLinkedField, type LoadablySelectedField as ReaderLoadableField, type ReaderNonLoadableResolverField, type ReaderScalarField, type ReaderWithRefetchQueries, type RefetchQueryNormalizationArtifact, type RefetchQueryNormalizationArtifactWrapper, type RefetchReaderArtifact, RenderAfterCommit__DO_NOT_USE, type RequiredFetchOptions, type RequiredShouldFetch, type ResolverFirstParameter, type Result, type RetainedQuery, type ShouldFetch, type StableId, type StableIdForFragmentReference, type StartUpdate, type StoreLink, type StoreRecord, type StringifiedArgs, type Subscription, type Subscriptions, type TopLevelReaderArtifact, type TypeName, type UnknownTReadFromStore, type UseConnectionSpecPaginationArgs, type UseImperativeLoadableFieldReturn as UseImperativeExposedMutationFieldReturn, type UseImperativeLoadableFieldReturn$1 as UseImperativeLoadableFieldReturn, type UseImperativeReferenceResult, type UsePaginationReturnValue, type UseSkipLimitPaginationArgs, type UseSkipLimitReturnValue, type VariableValue, type Variables, type WithEncounteredRecords, type WrappedLogFunction, assertIsEntrypoint, callSubscriptions, check, createIsographEnvironment, createIsographStore, garbageCollectEnvironment, getPromiseState, logMessage, makeNetworkRequest, normalizeData, readButDoNotEvaluate, readPromise, registerLogger, retainQuery, stableIdForFragmentReference, subscribe, unretainQuery, useClientSideDefer, useConnectionSpecPagination, useImperativeExposedMutationField, useImperativeLoadableField, useImperativeReference, useIsographEnvironment, useLazyReference, useReadAndSubscribe, useRerenderOnChange, useResult, useSkipLimitPagination, useSubscribeToMultiple, wrapPromise, wrapResolvedValue, writeData };
32
+ export { type AnyChangesToRecordSubscription, type AnyError, type AnyRecordSubscription, type Argument, type ArgumentName, type ArgumentValue, type Arguments, type CacheMap, type CheckResult, type CombineWithIntrinsicAttributes, type ComponentOrFieldName, type ComponentReaderArtifact, type Connection, type DataId, type DataTypeValueLinked, type DataTypeValueScalar, type DidUnretainSomeQuery, type EagerReaderArtifact, type EncounteredIds, type ExtractClientFieldValue, type ExtractData, type ExtractParameters, type ExtractProps, type ExtractReadFromStore, type ExtractResolverResult, type ExtractSecondParam, type ExtractStartUpdate, type FetchOptions, type FieldCache, FragmentReader, type FragmentReference, type FragmentReferenceOfEntrypoint, FragmentRenderer, type FragmentSubscription, type IsExactlyIntrinsicAttributes, type IsographEntrypoint, type IsographEntrypointLoader, type IsographEnvironment, IsographEnvironmentProvider, type IsographEnvironmentProviderProps, type IsographNetworkFunction, type IsographOperation, type IsographPersistedOperation, type IsographPersistedOperationExtraInfo, type BaseStoreLayerData as IsographStore, type Link, type LoadableField, LoadableFieldReader, LoadableFieldRenderer, type LogFunction, type LogMessage, type MissingFieldHandler, NOT_SET, type NetworkRequestInfo, type NetworkRequestReaderOptions, type NetworkResponseObject, type NetworkResponseScalarValue, type NetworkResponseValue, type NormalizationAst, type NormalizationAstLoader, type NormalizationAstNode, type NormalizationAstNodes, type NormalizationInlineFragment, type NormalizationLinkedField, type NormalizationScalarField, type NotSet, type PageInfo, type PromiseState, type PromiseWrapper, ROOT_ID, type ReadDataResult, type ReaderAst, type ReaderAstNode, type ReaderImperativelyLoadedField, type ReaderLinkField, type ReaderLinkedField, type LoadablySelectedField as ReaderLoadableField, type ReaderNonLoadableResolverField, type ReaderScalarField, type ReaderWithRefetchQueries, type RefetchQueryNormalizationArtifact, type RefetchQueryNormalizationArtifactWrapper, type RefetchReaderArtifact, RenderAfterCommit__DO_NOT_USE, type RequiredFetchOptions, type RequiredShouldFetch, type ResolverFirstParameter, type Result, type RetainedQuery, type ShouldFetch, type StableId, type StableIdForFragmentReference, type StartUpdate, type StoreLink, type StoreRecord, type StringifiedArgs, type Subscription, type Subscriptions, type TopLevelReaderArtifact, type TypeName, type UnknownTReadFromStore, type UseConnectionSpecPaginationArgs, type UseImperativeLoadableFieldReturn as UseImperativeExposedMutationFieldReturn, type UseImperativeLoadableFieldReturn$1 as UseImperativeLoadableFieldReturn, type UseImperativeReferenceResult, type UsePaginationReturnValue, type UseSkipLimitPaginationArgs, type UseSkipLimitReturnValue, type VariableValue, type Variables, type WithEncounteredRecords, type WrappedLogFunction, assertIsEntrypoint, callSubscriptions, check, createIsographEnvironment, createIsographStore, garbageCollectEnvironment, getPromiseState, logMessage, makeNetworkRequest, normalizeData, readButDoNotEvaluate, readPromise, registerLogger, retainQuery, stableIdForFragmentReference, subscribe, unretainQuery, useClientSideDefer, useConnectionSpecPagination, useImperativeExposedMutationField, useImperativeLoadableField, useImperativeReference, useIsographEnvironment, useLazyReference, useReadAndSubscribe, useRerenderOnChange, useResult, useSkipLimitPagination, useSubscribeToMultiple, wrapPromise, wrapResolvedValue, writeData };
package/dist/index.d.ts CHANGED
@@ -4,7 +4,7 @@ import { Argument, ArgumentName, ArgumentValue, Arguments, CombineWithIntrinsicA
4
4
  import { ComponentReaderArtifact, EagerReaderArtifact, LoadableField, LoadablySelectedField, ReaderAst, ReaderAstNode, ReaderImperativelyLoadedField, ReaderLinkField, ReaderLinkedField, ReaderNonLoadableResolverField, ReaderScalarField, RefetchReaderArtifact, ResolverFirstParameter, StableId, StartUpdate, TopLevelReaderArtifact } from "./core/reader.js";
5
5
  import { NetworkRequestReaderOptions, ReadDataResult, WithEncounteredRecords, readButDoNotEvaluate } from "./core/read.js";
6
6
  import { LogFunction, LogMessage, WrappedLogFunction, logMessage, registerLogger } from "./core/logging.js";
7
- import { AnyChangesToRecordSubscription, AnyRecordSubscription, BaseStoreLayerData, CacheMap, ComponentOrFieldName, DataId, DataTypeValue, FieldCache, FragmentSubscription, IsographEnvironment, IsographNetworkFunction, Link, MissingFieldHandler, ROOT_ID, StoreLink, StoreRecord, StringifiedArgs, Subscription, Subscriptions, TypeName, createIsographStore } from "./core/IsographEnvironment.js";
7
+ import { AnyChangesToRecordSubscription, AnyRecordSubscription, BaseStoreLayerData, CacheMap, ComponentOrFieldName, DataId, DataTypeValueLinked, DataTypeValueScalar, FieldCache, FragmentSubscription, IsographEnvironment, IsographNetworkFunction, Link, MissingFieldHandler, ROOT_ID, StoreLink, StoreRecord, StringifiedArgs, Subscription, Subscriptions, TypeName, createIsographStore } from "./core/IsographEnvironment.js";
8
8
  import { ExtractData, ExtractParameters, ExtractStartUpdate, FragmentReference, StableIdForFragmentReference, UnknownTReadFromStore, VariableValue, Variables, stableIdForFragmentReference } from "./core/FragmentReference.js";
9
9
  import { EncounteredIds, NetworkResponseObject, NetworkResponseScalarValue, NetworkResponseValue, normalizeData } from "./core/cache.js";
10
10
  import { ExtractClientFieldValue, ExtractProps, ExtractReadFromStore, ExtractResolverResult, FragmentReferenceOfEntrypoint, IsographEntrypoint, IsographEntrypointLoader, IsographOperation, IsographPersistedOperation, IsographPersistedOperationExtraInfo, NetworkRequestInfo, NormalizationAst, NormalizationAstLoader, NormalizationAstNode, NormalizationAstNodes, NormalizationInlineFragment, NormalizationLinkedField, NormalizationScalarField, ReaderWithRefetchQueries, RefetchQueryNormalizationArtifact, RefetchQueryNormalizationArtifactWrapper, assertIsEntrypoint } from "./core/entrypoint.js";
@@ -29,4 +29,4 @@ import { UseImperativeLoadableFieldReturn, useImperativeExposedMutationField } f
29
29
  import { UseSkipLimitPaginationArgs, UseSkipLimitReturnValue, useSkipLimitPagination } from "./loadable-hooks/useSkipLimitPagination.js";
30
30
  import { Connection, PageInfo, UseConnectionSpecPaginationArgs, UsePaginationReturnValue, useConnectionSpecPagination } from "./loadable-hooks/useConnectionSpecPagination.js";
31
31
  import { UseImperativeLoadableFieldReturn as UseImperativeLoadableFieldReturn$1, useImperativeLoadableField } from "./loadable-hooks/useImperativeLoadableField.js";
32
- export { type AnyChangesToRecordSubscription, type AnyError, type AnyRecordSubscription, type Argument, type ArgumentName, type ArgumentValue, type Arguments, type CacheMap, type CheckResult, type CombineWithIntrinsicAttributes, type ComponentOrFieldName, type ComponentReaderArtifact, type Connection, type DataId, type DataTypeValue, type DidUnretainSomeQuery, type EagerReaderArtifact, type EncounteredIds, type ExtractClientFieldValue, type ExtractData, type ExtractParameters, type ExtractProps, type ExtractReadFromStore, type ExtractResolverResult, type ExtractSecondParam, type ExtractStartUpdate, type FetchOptions, type FieldCache, FragmentReader, type FragmentReference, type FragmentReferenceOfEntrypoint, FragmentRenderer, type FragmentSubscription, type IsExactlyIntrinsicAttributes, type IsographEntrypoint, type IsographEntrypointLoader, type IsographEnvironment, IsographEnvironmentProvider, type IsographEnvironmentProviderProps, type IsographNetworkFunction, type IsographOperation, type IsographPersistedOperation, type IsographPersistedOperationExtraInfo, type BaseStoreLayerData as IsographStore, type Link, type LoadableField, LoadableFieldReader, LoadableFieldRenderer, type LogFunction, type LogMessage, type MissingFieldHandler, NOT_SET, type NetworkRequestInfo, type NetworkRequestReaderOptions, type NetworkResponseObject, type NetworkResponseScalarValue, type NetworkResponseValue, type NormalizationAst, type NormalizationAstLoader, type NormalizationAstNode, type NormalizationAstNodes, type NormalizationInlineFragment, type NormalizationLinkedField, type NormalizationScalarField, type NotSet, type PageInfo, type PromiseState, type PromiseWrapper, ROOT_ID, type ReadDataResult, type ReaderAst, type ReaderAstNode, type ReaderImperativelyLoadedField, type ReaderLinkField, type ReaderLinkedField, type LoadablySelectedField as ReaderLoadableField, type ReaderNonLoadableResolverField, type ReaderScalarField, type ReaderWithRefetchQueries, type RefetchQueryNormalizationArtifact, type RefetchQueryNormalizationArtifactWrapper, type RefetchReaderArtifact, RenderAfterCommit__DO_NOT_USE, type RequiredFetchOptions, type RequiredShouldFetch, type ResolverFirstParameter, type Result, type RetainedQuery, type ShouldFetch, type StableId, type StableIdForFragmentReference, type StartUpdate, type StoreLink, type StoreRecord, type StringifiedArgs, type Subscription, type Subscriptions, type TopLevelReaderArtifact, type TypeName, type UnknownTReadFromStore, type UseConnectionSpecPaginationArgs, type UseImperativeLoadableFieldReturn as UseImperativeExposedMutationFieldReturn, type UseImperativeLoadableFieldReturn$1 as UseImperativeLoadableFieldReturn, type UseImperativeReferenceResult, type UsePaginationReturnValue, type UseSkipLimitPaginationArgs, type UseSkipLimitReturnValue, type VariableValue, type Variables, type WithEncounteredRecords, type WrappedLogFunction, assertIsEntrypoint, callSubscriptions, check, createIsographEnvironment, createIsographStore, garbageCollectEnvironment, getPromiseState, logMessage, makeNetworkRequest, normalizeData, readButDoNotEvaluate, readPromise, registerLogger, retainQuery, stableIdForFragmentReference, subscribe, unretainQuery, useClientSideDefer, useConnectionSpecPagination, useImperativeExposedMutationField, useImperativeLoadableField, useImperativeReference, useIsographEnvironment, useLazyReference, useReadAndSubscribe, useRerenderOnChange, useResult, useSkipLimitPagination, useSubscribeToMultiple, wrapPromise, wrapResolvedValue, writeData };
32
+ export { type AnyChangesToRecordSubscription, type AnyError, type AnyRecordSubscription, type Argument, type ArgumentName, type ArgumentValue, type Arguments, type CacheMap, type CheckResult, type CombineWithIntrinsicAttributes, type ComponentOrFieldName, type ComponentReaderArtifact, type Connection, type DataId, type DataTypeValueLinked, type DataTypeValueScalar, type DidUnretainSomeQuery, type EagerReaderArtifact, type EncounteredIds, type ExtractClientFieldValue, type ExtractData, type ExtractParameters, type ExtractProps, type ExtractReadFromStore, type ExtractResolverResult, type ExtractSecondParam, type ExtractStartUpdate, type FetchOptions, type FieldCache, FragmentReader, type FragmentReference, type FragmentReferenceOfEntrypoint, FragmentRenderer, type FragmentSubscription, type IsExactlyIntrinsicAttributes, type IsographEntrypoint, type IsographEntrypointLoader, type IsographEnvironment, IsographEnvironmentProvider, type IsographEnvironmentProviderProps, type IsographNetworkFunction, type IsographOperation, type IsographPersistedOperation, type IsographPersistedOperationExtraInfo, type BaseStoreLayerData as IsographStore, type Link, type LoadableField, LoadableFieldReader, LoadableFieldRenderer, type LogFunction, type LogMessage, type MissingFieldHandler, NOT_SET, type NetworkRequestInfo, type NetworkRequestReaderOptions, type NetworkResponseObject, type NetworkResponseScalarValue, type NetworkResponseValue, type NormalizationAst, type NormalizationAstLoader, type NormalizationAstNode, type NormalizationAstNodes, type NormalizationInlineFragment, type NormalizationLinkedField, type NormalizationScalarField, type NotSet, type PageInfo, type PromiseState, type PromiseWrapper, ROOT_ID, type ReadDataResult, type ReaderAst, type ReaderAstNode, type ReaderImperativelyLoadedField, type ReaderLinkField, type ReaderLinkedField, type LoadablySelectedField as ReaderLoadableField, type ReaderNonLoadableResolverField, type ReaderScalarField, type ReaderWithRefetchQueries, type RefetchQueryNormalizationArtifact, type RefetchQueryNormalizationArtifactWrapper, type RefetchReaderArtifact, RenderAfterCommit__DO_NOT_USE, type RequiredFetchOptions, type RequiredShouldFetch, type ResolverFirstParameter, type Result, type RetainedQuery, type ShouldFetch, type StableId, type StableIdForFragmentReference, type StartUpdate, type StoreLink, type StoreRecord, type StringifiedArgs, type Subscription, type Subscriptions, type TopLevelReaderArtifact, type TypeName, type UnknownTReadFromStore, type UseConnectionSpecPaginationArgs, type UseImperativeLoadableFieldReturn as UseImperativeExposedMutationFieldReturn, type UseImperativeLoadableFieldReturn$1 as UseImperativeLoadableFieldReturn, type UseImperativeReferenceResult, type UsePaginationReturnValue, type UseSkipLimitPaginationArgs, type UseSkipLimitReturnValue, type VariableValue, type Variables, type WithEncounteredRecords, type WrappedLogFunction, assertIsEntrypoint, callSubscriptions, check, createIsographEnvironment, createIsographStore, garbageCollectEnvironment, getPromiseState, logMessage, makeNetworkRequest, normalizeData, readButDoNotEvaluate, readPromise, registerLogger, retainQuery, stableIdForFragmentReference, subscribe, unretainQuery, useClientSideDefer, useConnectionSpecPagination, useImperativeExposedMutationField, useImperativeLoadableField, useImperativeReference, useIsographEnvironment, useLazyReference, useReadAndSubscribe, useRerenderOnChange, useResult, useSkipLimitPagination, useSubscribeToMultiple, wrapPromise, wrapResolvedValue, writeData };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@isograph/react",
3
- "version": "0.0.0-main-5d8fefba",
3
+ "version": "0.0.0-main-50d1fb0b",
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-5d8fefba",
12
- "@isograph/react-disposable-state": "0.0.0-main-5d8fefba",
13
- "@isograph/reference-counted-pointer": "0.0.0-main-5d8fefba"
11
+ "@isograph/disposable-types": "0.0.0-main-50d1fb0b",
12
+ "@isograph/reference-counted-pointer": "0.0.0-main-50d1fb0b",
13
+ "@isograph/react-disposable-state": "0.0.0-main-50d1fb0b"
14
14
  },
15
15
  "peerDependencies": {
16
16
  "react": "^18.0.0 || ^19.0.0"
@@ -1,5 +1,6 @@
1
1
  import type { ParentCache } from '@isograph/react-disposable-state';
2
2
  import type { Brand } from './brand';
3
+ import type { LinkedParentRecordKey, ScalarParentRecordKey } from './cache';
3
4
  import type {
4
5
  IsographEntrypoint,
5
6
  IsographOperation,
@@ -118,24 +119,36 @@ export type StoreLink = {
118
119
  readonly __typename: TypeName;
119
120
  };
120
121
 
121
- export type DataTypeValue =
122
+ export type DataTypeValueScalar =
122
123
  // N.B. undefined is here to support optional id's, but
123
124
  // undefined should not *actually* be present in the store.
124
125
  | undefined
125
- // Singular scalar fields:
126
+ // Singular fields:
127
+ | unknown
126
128
  | number
127
129
  | boolean
128
130
  | string
129
131
  | null
130
- // Singular linked fields:
132
+ // Plural fields:
133
+ | readonly DataTypeValueScalar[];
134
+
135
+ export type DataTypeValueLinked =
136
+ // N.B. undefined is here to support optional id's, but
137
+ // undefined should not *actually* be present in the store.
138
+ | undefined
139
+ // Singular fields:
140
+ | null
131
141
  | StoreLink
132
- // Plural scalar and linked fields:
133
- | readonly DataTypeValue[];
142
+ // Plural fields:
143
+ | readonly DataTypeValueLinked[];
134
144
 
135
145
  export type StoreRecord = {
136
- [index: DataId | string]: DataTypeValue;
146
+ [index: ScalarParentRecordKey]: DataTypeValueScalar;
147
+ [index: LinkedParentRecordKey]: DataTypeValueLinked;
148
+ } & {
137
149
  // TODO __typename?: T, which is restricted to being a concrete string
138
150
  // TODO this shouldn't always be named id
151
+ readonly __typename?: TypeName;
139
152
  readonly id?: DataId;
140
153
  };
141
154
 
@@ -198,7 +211,9 @@ export function createIsographStore(): BaseStoreLayerData {
198
211
  };
199
212
  }
200
213
 
201
- export function assertLink(link: DataTypeValue): StoreLink | null | undefined {
214
+ export function assertLink(
215
+ link: DataTypeValueLinked,
216
+ ): StoreLink | null | undefined {
202
217
  if (isArray(link)) {
203
218
  throw new Error('Unexpected array');
204
219
  }
@@ -211,16 +226,9 @@ export function assertLink(link: DataTypeValue): StoreLink | null | undefined {
211
226
  throw new Error('Invalid link');
212
227
  }
213
228
 
214
- export function getLink(maybeLink: DataTypeValue): StoreLink | null {
215
- if (
216
- maybeLink != null &&
217
- typeof maybeLink === 'object' &&
218
- '__link' in maybeLink &&
219
- maybeLink.__link != null &&
220
- '__typename' in maybeLink &&
221
- maybeLink.__typename != null
222
- ) {
223
- return maybeLink;
229
+ export function getLink(maybeLink: DataTypeValueLinked): StoreLink | null {
230
+ if (!isArray(maybeLink)) {
231
+ return maybeLink ?? null;
224
232
  }
225
233
  return null;
226
234
  }
package/src/core/cache.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { type Factory, ParentCache } from '@isograph/react-disposable-state';
2
+ import type { Brand } from './brand';
2
3
  import type {
3
4
  NormalizationAstNodes,
4
5
  NormalizationInlineFragment,
@@ -13,7 +14,7 @@ import type {
13
14
  } from './FragmentReference';
14
15
  import {
15
16
  type DataId,
16
- type DataTypeValue,
17
+ type DataTypeValueLinked,
17
18
  getLink,
18
19
  type IsographEnvironment,
19
20
  ROOT_ID,
@@ -46,18 +47,26 @@ export function getOrCreateItemInSuspenseCache<
46
47
  return environment.fragmentCache[index];
47
48
  }
48
49
 
50
+ export type NetworkResponsePlural<T> =
51
+ | null
52
+ | T
53
+ | readonly T[]
54
+ | readonly (null | T)[];
49
55
  export type NetworkResponseScalarValue = string | number | boolean | unknown;
56
+
50
57
  export type NetworkResponseValue =
51
- | NetworkResponseScalarValue
52
- | null
53
- | NetworkResponseObject
54
- | readonly (NetworkResponseObject | null)[]
55
- | readonly (NetworkResponseScalarValue | null)[];
58
+ | NetworkResponsePlural<NetworkResponseScalarValue>
59
+ | NetworkResponsePlural<NetworkResponseObject>;
56
60
 
57
61
  export type NetworkResponseObject = {
58
62
  // N.B. undefined is here to support optional id's, but
59
63
  // undefined should not *actually* be present in the network response.
60
- readonly [index: string]: undefined | NetworkResponseValue;
64
+ readonly [K in
65
+ | ScalarNetworkResponseKey
66
+ | LinkedNetworkResponseKey]: K extends ScalarNetworkResponseKey
67
+ ? undefined | NetworkResponsePlural<NetworkResponseScalarValue>
68
+ : undefined | NetworkResponsePlural<NetworkResponseObject>;
69
+ } & {
61
70
  readonly id?: DataId;
62
71
  readonly __typename?: TypeName;
63
72
  };
@@ -233,12 +242,8 @@ function normalizeScalarField(
233
242
  return existingValue === undefined || existingValue != null;
234
243
  }
235
244
 
236
- if (isScalarOrEmptyArray(networkResponseData)) {
237
- targetStoreRecord[parentRecordKey] = networkResponseData;
238
- return existingValue !== networkResponseData;
239
- } else {
240
- throw new Error('Unexpected object array when normalizing scalar');
241
- }
245
+ targetStoreRecord[parentRecordKey] = networkResponseData;
246
+ return existingValue !== networkResponseData;
242
247
  }
243
248
 
244
249
  /**
@@ -264,15 +269,6 @@ function normalizeLinkedField(
264
269
  return existingValue === undefined || existingValue != null;
265
270
  }
266
271
 
267
- if (
268
- isScalarOrEmptyArray(networkResponseData) &&
269
- !isNullOrEmptyArray(networkResponseData)
270
- ) {
271
- throw new Error(
272
- 'Unexpected scalar network response when normalizing a linked field',
273
- );
274
- }
275
-
276
272
  if (isArray(networkResponseData)) {
277
273
  // TODO check astNode.plural or the like
278
274
  const dataIds: (StoreLink | null)[] = [];
@@ -371,7 +367,7 @@ function normalizeInlineFragment(
371
367
  }
372
368
 
373
369
  function dataIdsAreTheSame(
374
- existingValue: DataTypeValue,
370
+ existingValue: DataTypeValueLinked,
375
371
  newDataIds: (StoreLink | null)[],
376
372
  ): boolean {
377
373
  if (isArray(existingValue)) {
@@ -437,36 +433,24 @@ function normalizeNetworkResponseObject(
437
433
  return newStoreRecordId;
438
434
  }
439
435
 
440
- function isScalarOrEmptyArray(
441
- data: NetworkResponseValue,
442
- ): data is
443
- | NetworkResponseScalarValue
444
- | readonly (NetworkResponseScalarValue | null)[] {
445
- // N.B. empty arrays count as empty arrays of scalar fields.
446
- if (isArray(data)) {
447
- return data.every((x) => isScalarOrEmptyArray(x));
448
- }
449
- const isScalarValue =
450
- data == null ||
451
- typeof data === 'string' ||
452
- typeof data === 'number' ||
453
- typeof data === 'boolean';
454
- return isScalarValue;
455
- }
456
-
457
- function isNullOrEmptyArray(
458
- data: unknown,
459
- ): data is readonly never[] | null[] | null {
460
- if (isArray(data)) {
461
- if (data.length === 0) {
462
- return true;
463
- }
464
- return data.every((x) => isNullOrEmptyArray(x));
465
- }
436
+ declare const LinkedParentRecordKeyBrand: unique symbol;
437
+ export type LinkedParentRecordKey = string & {
438
+ brand?: Brand<undefined, typeof LinkedParentRecordKeyBrand>;
439
+ };
466
440
 
467
- return data == null;
468
- }
441
+ declare const ScalarParentRecordKeyBrand: unique symbol;
442
+ export type ScalarParentRecordKey = string & {
443
+ brand?: Brand<undefined, typeof ScalarParentRecordKeyBrand>;
444
+ };
469
445
 
446
+ export function getParentRecordKey(
447
+ astNode: NormalizationLinkedField | ReaderLinkedField,
448
+ variables: Variables,
449
+ ): LinkedParentRecordKey;
450
+ export function getParentRecordKey(
451
+ astNode: NormalizationScalarField | ReaderScalarField,
452
+ variables: Variables,
453
+ ): ScalarParentRecordKey;
470
454
  export function getParentRecordKey(
471
455
  astNode:
472
456
  | NormalizationLinkedField
@@ -528,6 +512,22 @@ function getStoreKeyChunkForArgument(argument: Argument, variables: Variables) {
528
512
  return `${FIRST_SPLIT_KEY}${argumentName}${SECOND_SPLIT_KEY}${chunk}`;
529
513
  }
530
514
 
515
+ declare const LinkedNetworkResponseKeyBrand: unique symbol;
516
+ export type LinkedNetworkResponseKey = string & {
517
+ brand?: Brand<undefined, typeof LinkedNetworkResponseKeyBrand>;
518
+ };
519
+
520
+ declare const ScalarNetworkResponseKeyBrand: unique symbol;
521
+ export type ScalarNetworkResponseKey = string & {
522
+ brand?: Brand<undefined, typeof ScalarNetworkResponseKeyBrand>;
523
+ };
524
+
525
+ function getNetworkResponseKey(
526
+ astNode: NormalizationLinkedField,
527
+ ): LinkedNetworkResponseKey;
528
+ function getNetworkResponseKey(
529
+ astNode: NormalizationScalarField,
530
+ ): ScalarNetworkResponseKey;
531
531
  function getNetworkResponseKey(
532
532
  astNode: NormalizationLinkedField | NormalizationScalarField,
533
533
  ): string {
package/src/core/read.ts CHANGED
@@ -18,12 +18,14 @@ import type {
18
18
  UnknownTReadFromStore,
19
19
  Variables,
20
20
  } from './FragmentReference';
21
- import type { IsographEnvironment } from './IsographEnvironment';
21
+ import type {
22
+ DataTypeValueScalar,
23
+ IsographEnvironment,
24
+ } from './IsographEnvironment';
22
25
  import {
23
26
  assertLink,
24
27
  getOrLoadIsographArtifact,
25
28
  getOrLoadReaderWithRefetchQueries,
26
- type DataTypeValue,
27
29
  type StoreLink,
28
30
  type StoreRecord,
29
31
  } from './IsographEnvironment';
@@ -616,9 +618,7 @@ export function readScalarFieldData(
616
618
  storeRecord: StoreRecord,
617
619
  root: StoreLink,
618
620
  variables: Variables,
619
- ): ReadDataResult<
620
- string | number | boolean | StoreLink | readonly DataTypeValue[] | null
621
- > {
621
+ ): ReadDataResult<DataTypeValueScalar> {
622
622
  const storeRecordName = getParentRecordKey(field, variables);
623
623
  const value = storeRecord[storeRecordName];
624
624
  // TODO consider making scalars into discriminated unions. This probably has
package/src/index.ts CHANGED
@@ -30,7 +30,8 @@ export { makeNetworkRequest } from './core/makeNetworkRequest';
30
30
  export {
31
31
  ROOT_ID,
32
32
  type DataId,
33
- type DataTypeValue,
33
+ type DataTypeValueLinked,
34
+ type DataTypeValueScalar,
34
35
  type IsographEnvironment,
35
36
  type IsographNetworkFunction,
36
37
  type BaseStoreLayerData as IsographStore,