{"version":3,"file":"entrypoint.mjs","names":[],"sources":["../../src/core/entrypoint.ts"],"sourcesContent":["import type { Contravariant, PhantomData } from './brand';\nimport type { NetworkResponseObject } from './cache';\nimport type {\n  FragmentReference,\n  UnknownTReadFromStore,\n} from './FragmentReference';\nimport type { ComponentOrFieldName, TypeName } from './IsographEnvironment';\nimport type { TopLevelReaderArtifact } from './reader';\nimport type { Arguments } from './util';\n\nexport type ReaderWithRefetchQueries<\n  TReadFromStore extends UnknownTReadFromStore,\n  TClientFieldValue,\n> = {\n  readonly kind: 'ReaderWithRefetchQueries';\n  readonly readerArtifact: TopLevelReaderArtifact<\n    TReadFromStore,\n    TClientFieldValue,\n    // TODO don't type this as any\n    any\n  >;\n  readonly nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[];\n};\n\nexport type ReaderWithRefetchQueriesLoader<\n  TReadFromStore extends UnknownTReadFromStore,\n  TClientFieldValue,\n> = {\n  readonly kind: 'ReaderWithRefetchQueriesLoader';\n  readonly fieldName: ComponentOrFieldName;\n  readonly readerArtifactKind:\n    | 'EagerReaderArtifact'\n    | 'ComponentReaderArtifact';\n  readonly loader: () => Promise<\n    ReaderWithRefetchQueries<TReadFromStore, TClientFieldValue>\n  >;\n};\n\nexport type NetworkRequestInfo<TNormalizationAst> = {\n  readonly kind: 'NetworkRequestInfo';\n  readonly operation: IsographOperation | IsographPersistedOperation;\n  readonly normalizationAst: TNormalizationAst;\n};\n\nexport type IsographOperation = {\n  readonly kind: 'Operation';\n  readonly text: string;\n};\n\nexport type IsographPersistedOperation = {\n  readonly kind: 'PersistedOperation';\n  readonly operationId: string;\n  readonly extraInfo: IsographPersistedOperationExtraInfo | null;\n};\n\nexport type IsographPersistedOperationExtraInfo = {\n  readonly kind: 'PersistedOperationExtraInfo';\n  readonly operationName: string | null;\n  readonly operationKind: 'Query' | 'Mutation' | 'Subscription';\n};\n\n// This type should be treated as an opaque type.\nexport type IsographEntrypoint<\n  TReadFromStore extends UnknownTReadFromStore,\n  TClientFieldValue,\n  TNormalizationAst extends NormalizationAst | NormalizationAstLoader,\n  TRawResponseType extends NetworkResponseObject,\n> = {\n  readonly kind: 'Entrypoint';\n  readonly networkRequestInfo: NetworkRequestInfo<TNormalizationAst>;\n  readonly readerWithRefetchQueries:\n    | ReaderWithRefetchQueries<TReadFromStore, TClientFieldValue>\n    | ReaderWithRefetchQueriesLoader<TReadFromStore, TClientFieldValue>;\n  readonly concreteType: TypeName;\n  /**\n   * This field exists solely for typechecking, and will not exist at runtime.\n   */\n  readonly '~TRawResponseType'?: PhantomData<Contravariant<TRawResponseType>>;\n};\n\nexport type FragmentReferenceOfEntrypoint<\n  TEntrypoint extends IsographEntrypoint<any, any, any, any>,\n> = FragmentReference<\n  ExtractReadFromStore<TEntrypoint>,\n  ExtractClientFieldValue<TEntrypoint>\n>;\n\nexport type IsographEntrypointLoader<\n  TReadFromStore extends UnknownTReadFromStore,\n  TClientFieldValue,\n  TRawResponseType extends NetworkResponseObject,\n> = {\n  readonly kind: 'EntrypointLoader';\n  readonly typeAndField: string;\n  readonly readerArtifactKind:\n    | 'EagerReaderArtifact'\n    | 'ComponentReaderArtifact';\n  readonly loader: () => Promise<\n    IsographEntrypoint<\n      TReadFromStore,\n      TClientFieldValue,\n      NormalizationAst,\n      TRawResponseType\n    >\n  >;\n};\n\nexport type NormalizationAstNode =\n  | NormalizationScalarField\n  | NormalizationLinkedField\n  | NormalizationInlineFragment;\n\nexport type NormalizationAstNodes = ReadonlyArray<NormalizationAstNode>;\n\nexport type NormalizationAst = {\n  readonly kind: 'NormalizationAst';\n  readonly selections: NormalizationAstNodes;\n};\n\nexport type NormalizationAstLoader = {\n  readonly kind: 'NormalizationAstLoader';\n  readonly loader: () => Promise<NormalizationAst>;\n};\n\nexport type NormalizationScalarField = {\n  readonly kind: 'Scalar';\n  readonly fieldName: string;\n  readonly arguments: Arguments | null;\n};\n\nexport type NormalizationLinkedField = {\n  readonly kind: 'Linked';\n  readonly fieldName: string;\n  readonly arguments: Arguments | null;\n  readonly selections: NormalizationAstNodes;\n  readonly concreteType: TypeName | null;\n};\n\nexport type NormalizationInlineFragment = {\n  readonly kind: 'InlineFragment';\n  readonly type: string;\n  readonly selections: NormalizationAstNodes;\n};\n\n// This is more like an entrypoint, but one specifically for a refetch query/mutation\nexport type RefetchQueryNormalizationArtifact = {\n  readonly kind: 'RefetchQuery';\n  readonly networkRequestInfo: NetworkRequestInfo<NormalizationAst>;\n  readonly concreteType: TypeName;\n};\n\n// TODO rename\nexport type RefetchQueryNormalizationArtifactWrapper = {\n  readonly artifact: RefetchQueryNormalizationArtifact;\n  readonly allowedVariables: string[];\n};\n\nexport function assertIsEntrypoint<\n  TReadFromStore extends UnknownTReadFromStore,\n  TClientFieldValue,\n  TNormalizationAst extends NormalizationAst | NormalizationAstLoader,\n  TRawResponseType extends NetworkResponseObject,\n>(\n  value:\n    | IsographEntrypoint<\n        TReadFromStore,\n        TClientFieldValue,\n        TNormalizationAst,\n        TRawResponseType\n      >\n    | ((_: any) => any)\n    // Temporarily, allow any here. Once we automatically provide\n    // types to entrypoints, we probably don't need this.\n    | any,\n): asserts value is IsographEntrypoint<\n  TReadFromStore,\n  TClientFieldValue,\n  TNormalizationAst,\n  TRawResponseType\n> {\n  if (typeof value === 'function') throw new Error('Not a string');\n}\n\nexport type ExtractReadFromStore<Type> =\n  Type extends IsographEntrypoint<infer X, any, any, any> ? X : never;\nexport type ExtractClientFieldValue<Type> =\n  Type extends IsographEntrypoint<any, infer X, any, any> ? X : never;\nexport type ExtractRawResponseType<Type> =\n  Type extends IsographEntrypoint<any, any, any, infer X> ? X : never;\nexport type ExtractResolverResult<Type> =\n  Type extends IsographEntrypoint<any, infer X, any, any> ? X : never;\nexport type ExtractProps<Type> = Type extends React.FC<infer X> ? X : never;\n"],"mappings":";AA6JA,SAAgB,mBAMd,OAgBA;AACA,KAAI,OAAO,UAAU,WAAY,OAAM,IAAI,MAAM,eAAe"}