@fourtwelvelabs/fetch-contentful 0.4.0 → 1.0.0

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 +1 @@
1
- {"version":3,"sources":["../src/errors.ts","../src/retry.ts","../src/split.ts","../src/client.ts","../src/env.ts","../src/inject.ts","../src/locales.ts","../src/shape.ts","../src/index.ts"],"names":["Kind","visit","print","COLLECTION_SUFFIX","isRecord","parse"],"mappings":"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","file":"index.cjs","sourcesContent":["import type {\n FetchContentfulErrorCode,\n ContentfulGraphQLError,\n} from './types.js';\n\n/** Error thrown (i.e. the rejection value) for every failure in fetch-contentful. */\nexport class FetchContentfulError extends Error {\n readonly code: FetchContentfulErrorCode;\n readonly status: number | undefined;\n readonly errors: ContentfulGraphQLError[] | undefined;\n /** Internal: whether a retry may succeed. */\n readonly retryable: boolean;\n /** Internal: server-requested retry delay (from Retry-After), in ms. */\n readonly retryAfterMs: number | undefined;\n\n constructor(\n message: string,\n options: {\n code: FetchContentfulErrorCode;\n status?: number;\n errors?: ContentfulGraphQLError[];\n retryable?: boolean;\n retryAfterMs?: number;\n cause?: unknown;\n },\n ) {\n super(message, { cause: options.cause });\n this.name = 'FetchContentfulError';\n this.code = options.code;\n this.status = options.status;\n this.errors = options.errors;\n this.retryable = options.retryable ?? false;\n this.retryAfterMs = options.retryAfterMs;\n }\n}\n\n/** Type guard for {@link FetchContentfulError}. */\nexport function isFetchContentfulError(\n value: unknown,\n): value is FetchContentfulError {\n return value instanceof FetchContentfulError;\n}\n","import { isFetchContentfulError } from './errors.js';\n\nexport interface RetryConfig {\n /** Number of retries after the initial attempt. */\n retries: number;\n /** Base backoff delay in ms. */\n baseDelayMs: number;\n /** Maximum backoff delay in ms. */\n maxDelayMs: number;\n /** Random source, injectable for deterministic tests. */\n random?: () => number;\n /** Sleep implementation, injectable for deterministic tests. */\n sleep?: (ms: number) => Promise<void>;\n}\n\nexport function defaultSleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/** Compute the backoff delay for a given (0-indexed) failed attempt. */\nexport function backoffDelay(\n attempt: number,\n config: Pick<RetryConfig, 'baseDelayMs' | 'maxDelayMs'> & {\n random: () => number;\n },\n): number {\n const exponential = config.baseDelayMs * 2 ** attempt;\n const jitter = config.random() * config.baseDelayMs;\n return Math.min(exponential + jitter, config.maxDelayMs);\n}\n\n/**\n * Runs `fn`, retrying when it rejects with a retryable\n * {@link FetchContentfulError}. Non-retryable errors reject immediately.\n */\nexport async function withRetries<T>(\n fn: (attempt: number) => Promise<T>,\n config: RetryConfig,\n): Promise<T> {\n const random = config.random ?? Math.random;\n const sleep = config.sleep ?? defaultSleep;\n let attempt = 0;\n while (true) {\n try {\n return await fn(attempt);\n } catch (error) {\n const retryable = isFetchContentfulError(error) && error.retryable;\n if (!retryable || attempt >= config.retries) {\n throw error;\n }\n const delay =\n error.retryAfterMs ?? backoffDelay(attempt, { ...config, random });\n await sleep(delay);\n attempt += 1;\n }\n }\n}\n","import {\n Kind,\n visit,\n type ArgumentNode,\n type DirectiveNode,\n type DocumentNode,\n type FieldNode,\n type FragmentDefinitionNode,\n type OperationDefinitionNode,\n type SelectionNode,\n type SelectionSetNode,\n type VariableDefinitionNode,\n} from 'graphql';\nimport { FetchContentfulError } from './errors.js';\n\n/**\n * User-facing directive that force-splits the field it annotates — a\n * one-to-one reference or a nested collection alike — regardless of\n * `autoSplitNestedCollections`. Not valid on a root field, which has no\n * parent to stitch onto.\n */\nexport const SPLIT_DIRECTIVE = 'split';\n/** Internal directive marking a field that must not be split again. */\nexport const NO_SPLIT_DIRECTIVE = '_noSplit';\n/** Alias injected on parent entries to read their sys id. */\nexport const SYS_ID_ALIAS = '_splitSysId';\n/** Alias injected on parent entries to read their concrete type. */\nexport const TYPENAME_ALIAS = '_splitTypename';\n/** Variable name used for parent-id batches in generated subqueries. */\nexport const IDS_VARIABLE = '_splitIds';\n\nconst COLLECTION_SUFFIX = 'Collection';\n\nexport interface SplitPlan {\n /** Response-data path (aliases included) from the root to the parent entries. */\n path: string[];\n /** Response key the split field occupies on each parent entry. */\n responseKey: string;\n /** The split field, marked with `@_noSplit` and stripped of `@split`. */\n field: FieldNode;\n /** Variable definitions from the original operation used inside the field. */\n variableDefinitions: VariableDefinitionNode[];\n /**\n * Concrete type condition of the nearest enclosing inline fragment, if any.\n * Only parents with this `__typename` are re-queried for this plan.\n * (`Entry`, being an interface, never matches a `__typename` and is\n * treated as unconditional.)\n */\n typeCondition?: string;\n}\n\nexport interface PlanResult {\n /** The outer document with split fields removed and markers injected. */\n document: DocumentNode;\n plans: SplitPlan[];\n}\n\n/* ------------------------------------------------------------------ */\n/* Small helpers */\n/* ------------------------------------------------------------------ */\n\nexport function lowerFirst(value: string): string {\n return value.charAt(0).toLowerCase() + value.slice(1);\n}\n\nexport function chunk<T>(items: T[], size: number): T[][] {\n const chunks: T[][] = [];\n for (let index = 0; index < items.length; index += size) {\n chunks.push(items.slice(index, index + size));\n }\n return chunks;\n}\n\nfunction directivesOf(field: FieldNode): readonly DirectiveNode[] {\n return field.directives ?? [];\n}\n\nfunction hasDirective(field: FieldNode, name: string): boolean {\n return directivesOf(field).some((d) => d.name.value === name);\n}\n\nfunction withoutDirective(field: FieldNode, name: string): FieldNode {\n return {\n ...field,\n directives: directivesOf(field).filter((d) => d.name.value !== name),\n };\n}\n\nfunction withDirective(field: FieldNode, name: string): FieldNode {\n const directive: DirectiveNode = {\n kind: Kind.DIRECTIVE,\n name: { kind: Kind.NAME, value: name },\n };\n return { ...field, directives: [...directivesOf(field), directive] };\n}\n\nfunction responseKeyOf(field: FieldNode): string {\n return field.alias?.value ?? field.name.value;\n}\n\nfunction isCollectionField(field: FieldNode): boolean {\n if (\n !field.name.value.endsWith(COLLECTION_SUFFIX) ||\n field.name.value === COLLECTION_SUFFIX ||\n !field.selectionSet\n ) {\n return false;\n }\n return field.selectionSet.selections.some(\n (selection) =>\n selection.kind === Kind.FIELD && selection.name.value === 'items',\n );\n}\n\nfunction namedField(name: string, alias?: string, selections?: SelectionNode[]): FieldNode {\n return {\n kind: Kind.FIELD,\n name: { kind: Kind.NAME, value: name },\n ...(alias ? { alias: { kind: Kind.NAME, value: alias } } : {}),\n ...(selections\n ? {\n selectionSet: {\n kind: Kind.SELECTION_SET,\n selections,\n } satisfies SelectionSetNode,\n }\n : {}),\n };\n}\n\nfunction sysIdMarker(): FieldNode {\n return namedField('sys', SYS_ID_ALIAS, [namedField('id')]);\n}\n\nfunction typenameMarker(): FieldNode {\n return namedField('__typename', TYPENAME_ALIAS);\n}\n\n/** Collect the names of all variables used anywhere inside a field subtree. */\nexport function collectVariableNames(field: FieldNode): Set<string> {\n const names = new Set<string>();\n visit(field, {\n Variable(node) {\n names.add(node.name.value);\n },\n });\n return names;\n}\n\n/** Return the single operation definition of a document, or throw. */\nexport function getOperation(document: DocumentNode): OperationDefinitionNode {\n const operations = document.definitions.filter(\n (definition): definition is OperationDefinitionNode =>\n definition.kind === Kind.OPERATION_DEFINITION,\n );\n const operation = operations[0];\n if (!operation || operations.length > 1) {\n throw new FetchContentfulError(\n 'fetch-contentful expects exactly one operation per document.',\n { code: 'CONFIG' },\n );\n }\n if (operation.operation !== 'query') {\n throw new FetchContentfulError(\n 'fetch-contentful only supports query operations.',\n { code: 'CONFIG' },\n );\n }\n return operation;\n}\n\n/* ------------------------------------------------------------------ */\n/* Fragment inlining */\n/* ------------------------------------------------------------------ */\n\n/**\n * Replaces every named fragment spread with an equivalent inline fragment so\n * split planning can see the whole query shape uniformly.\n */\nexport function inlineFragments(document: DocumentNode): DocumentNode {\n const fragments = new Map<string, FragmentDefinitionNode>();\n for (const definition of document.definitions) {\n if (definition.kind === Kind.FRAGMENT_DEFINITION) {\n fragments.set(definition.name.value, definition);\n }\n }\n\n function inlineSelectionSet(\n selectionSet: SelectionSetNode,\n stack: string[],\n ): SelectionSetNode {\n const selections: SelectionNode[] = selectionSet.selections.map(\n (selection): SelectionNode => {\n if (selection.kind === Kind.FRAGMENT_SPREAD) {\n const name = selection.name.value;\n const fragment = fragments.get(name);\n if (!fragment) {\n throw new FetchContentfulError(\n `Unknown fragment \"${name}\" referenced in query.`,\n { code: 'CONFIG' },\n );\n }\n if (stack.includes(name)) {\n throw new FetchContentfulError(\n `Fragment cycle detected involving \"${name}\".`,\n { code: 'CONFIG' },\n );\n }\n return {\n kind: Kind.INLINE_FRAGMENT,\n typeCondition: fragment.typeCondition,\n selectionSet: inlineSelectionSet(fragment.selectionSet, [\n ...stack,\n name,\n ]),\n };\n }\n if (selection.selectionSet) {\n return {\n ...selection,\n selectionSet: inlineSelectionSet(selection.selectionSet, stack),\n } as SelectionNode;\n }\n return selection;\n },\n );\n return { ...selectionSet, selections };\n }\n\n const definitions = document.definitions\n .filter((definition) => definition.kind !== Kind.FRAGMENT_DEFINITION)\n .map((definition) =>\n definition.kind === Kind.OPERATION_DEFINITION\n ? {\n ...definition,\n selectionSet: inlineSelectionSet(definition.selectionSet, []),\n }\n : definition,\n );\n\n return { ...document, definitions };\n}\n\n/* ------------------------------------------------------------------ */\n/* Split planning */\n/* ------------------------------------------------------------------ */\n\n/**\n * Walks the (fragment-inlined) document, removes every splittable reference\n * field, records a {@link SplitPlan} for each, and injects `sys { id }` and\n * `__typename` markers so parents can be re-queried and stitched.\n */\nexport function planSplits(\n document: DocumentNode,\n options: { autoSplitNestedCollections: boolean },\n): PlanResult {\n const operation = getOperation(document);\n const variableDefinitions = operation.variableDefinitions ?? [];\n const plans: SplitPlan[] = [];\n\n function processSelectionSet(\n selectionSet: SelectionSetNode,\n path: string[],\n depth: number,\n typeCondition: string | undefined,\n ): SelectionSetNode {\n const selections: SelectionNode[] = [];\n let needsMarkers = false;\n\n for (const selection of selectionSet.selections) {\n if (selection.kind === Kind.INLINE_FRAGMENT) {\n const condition = selection.typeCondition?.name.value;\n selections.push({\n ...selection,\n selectionSet: processSelectionSet(\n selection.selectionSet,\n path,\n depth,\n // `Entry` is Contentful's interface type: it never equals a\n // concrete `__typename`, so it must not constrain the plan.\n condition && condition !== 'Entry' ? condition : typeCondition,\n ),\n });\n continue;\n }\n /* v8 ignore next 6 -- fragment spreads are inlined before planning */\n if (selection.kind !== Kind.FIELD) {\n throw new FetchContentfulError(\n 'Fragment spreads must be inlined before split planning.',\n { code: 'CONFIG' },\n );\n }\n\n const field = selection;\n\n // The two triggers are deliberately independent:\n // `autoSplitNestedCollections` gates *only* the automatic detection of\n // nested collections, while `@split` is an explicit request that holds\n // whatever the option says — including on a `*Collection` field, which\n // takes exactly the same path as an auto-detected one.\n const isExplicitSplit = hasDirective(field, SPLIT_DIRECTIVE);\n const isAutoSplit =\n options.autoSplitNestedCollections && isCollectionField(field);\n\n // Root fields have no parent entry to stitch a result back onto, so\n // they are never splittable. Rather than strip a directive that cannot\n // do anything — leaving the author to wonder why their query still\n // exceeds the complexity limit — say so.\n if (isExplicitSplit && depth === 0) {\n throw new FetchContentfulError(\n `Cannot split root field \"${responseKeyOf(field)}\": @split needs a ` +\n 'parent entry to stitch the result back onto, and root fields ' +\n 'have none. Move the directive to a nested field, or page through ' +\n 'this field with its own `limit` and `skip` arguments.',\n { code: 'CONFIG' },\n );\n }\n\n const shouldSplit =\n depth > 0 &&\n field.selectionSet !== undefined &&\n !hasDirective(field, NO_SPLIT_DIRECTIVE) &&\n (isExplicitSplit || isAutoSplit);\n\n if (shouldSplit) {\n const planned = withDirective(\n withoutDirective(field, SPLIT_DIRECTIVE),\n NO_SPLIT_DIRECTIVE,\n );\n plans.push({\n path: [...path],\n responseKey: responseKeyOf(field),\n field: planned,\n variableDefinitions: variableDefinitions.filter((definition) =>\n collectVariableNames(field).has(definition.variable.name.value),\n ),\n ...(typeCondition !== undefined ? { typeCondition } : {}),\n });\n needsMarkers = true;\n continue;\n }\n\n if (field.selectionSet) {\n selections.push({\n ...field,\n selectionSet: processSelectionSet(\n field.selectionSet,\n [...path, responseKeyOf(field)],\n depth + 1,\n // Type conditions do not carry across a field boundary: the\n // field's own type governs its children.\n undefined,\n ),\n });\n } else {\n selections.push(field);\n }\n }\n\n if (needsMarkers) {\n selections.push(sysIdMarker(), typenameMarker());\n }\n return { ...selectionSet, selections };\n }\n\n const processedOperation: OperationDefinitionNode = {\n ...operation,\n selectionSet: processSelectionSet(operation.selectionSet, [], 0, undefined),\n };\n\n return {\n document: {\n ...document,\n definitions: document.definitions.map((definition) =>\n definition === operation ? processedOperation : definition,\n ),\n },\n plans,\n };\n}\n\n/* ------------------------------------------------------------------ */\n/* Subquery construction */\n/* ------------------------------------------------------------------ */\n\nfunction stringArgument(name: string, value: string): ArgumentNode {\n return {\n kind: Kind.ARGUMENT,\n name: { kind: Kind.NAME, value: name },\n value: { kind: Kind.STRING, value },\n };\n}\n\nfunction booleanArgument(name: string, value: boolean): ArgumentNode {\n return {\n kind: Kind.ARGUMENT,\n name: { kind: Kind.NAME, value: name },\n value: { kind: Kind.BOOLEAN, value },\n };\n}\n\nfunction intArgument(name: string, value: number): ArgumentNode {\n return {\n kind: Kind.ARGUMENT,\n name: { kind: Kind.NAME, value: name },\n value: { kind: Kind.INT, value: String(value) },\n };\n}\n\nfunction whereIdInArgument(): ArgumentNode {\n return {\n kind: Kind.ARGUMENT,\n name: { kind: Kind.NAME, value: 'where' },\n value: {\n kind: Kind.OBJECT,\n fields: [\n {\n kind: Kind.OBJECT_FIELD,\n name: { kind: Kind.NAME, value: 'sys' },\n value: {\n kind: Kind.OBJECT,\n fields: [\n {\n kind: Kind.OBJECT_FIELD,\n name: { kind: Kind.NAME, value: 'id_in' },\n value: {\n kind: Kind.VARIABLE,\n name: { kind: Kind.NAME, value: IDS_VARIABLE },\n },\n },\n ],\n },\n },\n ],\n },\n };\n}\n\n/**\n * Builds the document that re-fetches one split field for a batch of parent\n * entries of a single concrete type, keyed by sys id:\n *\n * ```graphql\n * query FetchContentfulSplit($_splitIds: [String!]!, ...usedVars) {\n * <type>Collection(where: { sys: { id_in: $_splitIds } }, limit: N) {\n * items { sys { id } <splitField @_noSplit> }\n * }\n * }\n * ```\n */\nexport function buildSubquery(\n plan: SplitPlan,\n typename: string,\n batchSize: number,\n context: { preview: boolean; locale: string | undefined },\n): { document: DocumentNode; rootKey: string } {\n const rootKey = `${lowerFirst(typename)}${COLLECTION_SUFFIX}`;\n const args: ArgumentNode[] = [\n whereIdInArgument(),\n intArgument('limit', batchSize),\n ];\n if (context.preview) {\n args.push(booleanArgument('preview', true));\n }\n if (context.locale !== undefined) {\n args.push(stringArgument('locale', context.locale));\n }\n\n const rootField: FieldNode = {\n ...namedField(rootKey, undefined, [\n namedField('items', undefined, [\n namedField('sys', undefined, [namedField('id')]),\n plan.field,\n ]),\n ]),\n arguments: args,\n };\n\n const idsVariable: VariableDefinitionNode = {\n kind: Kind.VARIABLE_DEFINITION,\n variable: {\n kind: Kind.VARIABLE,\n name: { kind: Kind.NAME, value: IDS_VARIABLE },\n },\n type: {\n kind: Kind.NON_NULL_TYPE,\n type: {\n kind: Kind.LIST_TYPE,\n type: {\n kind: Kind.NON_NULL_TYPE,\n type: {\n kind: Kind.NAMED_TYPE,\n name: { kind: Kind.NAME, value: 'String' },\n },\n },\n },\n },\n };\n\n const operation: OperationDefinitionNode = {\n kind: Kind.OPERATION_DEFINITION,\n operation: 'query' as OperationDefinitionNode['operation'],\n name: { kind: Kind.NAME, value: 'FetchContentfulSplit' },\n variableDefinitions: [idsVariable, ...plan.variableDefinitions],\n selectionSet: {\n kind: Kind.SELECTION_SET,\n selections: [rootField],\n },\n };\n\n return {\n document: { kind: Kind.DOCUMENT, definitions: [operation] },\n rootKey,\n };\n}\n\n/** Removes fetch-contentful's internal directives before a document is sent. */\nexport function stripInternalDirectives(document: DocumentNode): DocumentNode {\n return visit(document, {\n Directive(node) {\n if (\n node.name.value === SPLIT_DIRECTIVE ||\n node.name.value === NO_SPLIT_DIRECTIVE\n ) {\n return null;\n }\n return undefined;\n },\n });\n}\n","import { print, type DocumentNode } from 'graphql';\nimport { FetchContentfulError } from './errors.js';\nimport { withRetries, type RetryConfig } from './retry.js';\nimport { getOperation, stripInternalDirectives } from './split.js';\nimport type {\n ContentfulGraphQLError,\n GraphQLVariables,\n NextFetchOptions,\n} from './types.js';\n\nexport interface RequestContext {\n space: string;\n environment: string;\n token: string;\n fetch: typeof fetch;\n retry: RetryConfig;\n signal?: AbortSignal;\n next?: NextFetchOptions;\n cache?: RequestCache;\n}\n\nexport function graphqlEndpoint(space: string, environment: string): string {\n return `https://graphql.contentful.com/content/v1/spaces/${encodeURIComponent(\n space,\n )}/environments/${encodeURIComponent(environment)}`;\n}\n\n/** Parse a Retry-After header (seconds or HTTP date) into milliseconds. */\nexport function parseRetryAfter(header: string | null): number | undefined {\n if (!header) return undefined;\n const seconds = Number(header);\n if (Number.isFinite(seconds)) {\n return Math.max(0, seconds * 1000);\n }\n const date = Date.parse(header);\n if (Number.isFinite(date)) {\n return Math.max(0, date - Date.now());\n }\n return undefined;\n}\n\n/** Keep only the variables the document actually declares. */\nexport function pickDeclaredVariables(\n document: DocumentNode,\n variables: GraphQLVariables,\n): GraphQLVariables {\n const declared = new Set(\n (getOperation(document).variableDefinitions ?? []).map(\n (definition) => definition.variable.name.value,\n ),\n );\n const picked: GraphQLVariables = {};\n for (const [name, value] of Object.entries(variables)) {\n if (declared.has(name)) {\n picked[name] = value;\n }\n }\n return picked;\n}\n\nfunction isRetryableStatus(status: number): boolean {\n return status === 408 || status === 429 || status >= 500;\n}\n\n/**\n * Sends one GraphQL request (with retries) and returns `data`.\n * Rejects with a {@link FetchContentfulError} on any HTTP, network, or\n * GraphQL error — including partial responses that contain errors.\n */\nexport async function rawRequest(\n document: DocumentNode,\n variables: GraphQLVariables,\n context: RequestContext,\n): Promise<Record<string, unknown>> {\n const query = print(stripInternalDirectives(document));\n const body = JSON.stringify({\n query,\n variables: pickDeclaredVariables(document, variables),\n });\n const url = graphqlEndpoint(context.space, context.environment);\n\n return withRetries(async () => {\n let response: Response;\n try {\n const init: RequestInit & { next?: NextFetchOptions } = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${context.token}`,\n },\n body,\n };\n if (context.signal) init.signal = context.signal;\n if (context.cache) init.cache = context.cache;\n if (context.next) init.next = context.next;\n response = await context.fetch(url, init);\n } catch (cause) {\n throw new FetchContentfulError(\n `Network error while contacting Contentful: ${String(cause)}`,\n { code: 'NETWORK', retryable: true, cause },\n );\n }\n\n if (!response.ok) {\n const retryable = isRetryableStatus(response.status);\n throw new FetchContentfulError(\n `Contentful responded with HTTP ${response.status}.`,\n {\n code: 'HTTP',\n status: response.status,\n retryable,\n retryAfterMs: retryable\n ? parseRetryAfter(response.headers.get('Retry-After'))\n : undefined,\n },\n );\n }\n\n let payload: {\n data?: Record<string, unknown> | null;\n errors?: ContentfulGraphQLError[];\n };\n try {\n payload = (await response.json()) as typeof payload;\n } catch (cause) {\n throw new FetchContentfulError(\n 'Contentful returned an unreadable response body.',\n { code: 'NETWORK', retryable: true, cause },\n );\n }\n\n if (payload.errors && payload.errors.length > 0) {\n throw new FetchContentfulError(\n `Contentful returned GraphQL errors: ${payload.errors\n .map((error) => error.message)\n .join('; ')}`,\n { code: 'GRAPHQL', errors: payload.errors },\n );\n }\n\n if (!payload.data || typeof payload.data !== 'object') {\n throw new FetchContentfulError(\n 'Contentful returned no data and no errors.',\n { code: 'GRAPHQL' },\n );\n }\n\n return payload.data;\n }, context.retry);\n}\n","/**\n * Environment-derived configuration.\n *\n * Two families of variable names are supported, checked in this order:\n *\n * 1. Framework-neutral names — `CONTENTFUL_SPACE_ID`, `CONTENTFUL_ENVIRONMENT`,\n * `CONTENTFUL_ACCESS_TOKEN`, `CONTENTFUL_PREVIEW_ACCESS_TOKEN`.\n * 2. `NEXT_PUBLIC_`-prefixed equivalents for Next.js projects that call\n * Contentful from the browser — for the space, the environment and the\n * **delivery** token only.\n *\n * The preview token is deliberately absent from that second family. Next.js\n * inlines `NEXT_PUBLIC_` variables into client bundles by string-replacing\n * the literal accesses below, so merely importing this module in a project\n * that set `NEXT_PUBLIC_CONTENTFUL_PREVIEW_ACCESS_TOKEN` would bake the\n * token into public JavaScript — whether or not any client code ever asks\n * for preview content. A delivery token is read-only and commonly public; a\n * preview token reads unpublished content and must not leak. Callers that\n * genuinely need preview in the browser pass `previewToken` explicitly, so\n * the exposure is their deliberate choice rather than this module's.\n *\n * IMPORTANT: every lookup below is written as a literal\n * `process.env.SOME_NAME` property access, never a dynamic `process.env[x]`.\n * Next.js exposes `NEXT_PUBLIC_` variables to client bundles by\n * string-replacing those literal expressions at build time — dynamic access\n * is invisible to the inliner and resolves to `undefined` in the browser.\n * Do not \"refactor\" these into a loop or a name table.\n *\n * This module reads the already-populated `process.env`; loading `.env`\n * files from disk is deliberately left to the platform (Next.js, Vite,\n * dotenv, ...), whose precedence rules would otherwise be duplicated here.\n */\n\n/*\n * These variables are read at runtime inside the consuming application, not\n * while this package is built — the bundle ships the literal `process.env.X`\n * accesses untouched. Declaring them in turbo.json would therefore be\n * inaccurate and would invalidate the build cache for no reason.\n */\n/* eslint-disable turbo/no-undeclared-env-vars */\n\nexport interface EnvSettings {\n space: string | undefined;\n environment: string | undefined;\n /** Content Delivery API token, for published content. */\n deliveryToken: string | undefined;\n /**\n * Content Delivery API token.\n *\n * @deprecated Renamed to {@link EnvSettings.deliveryToken}, which says\n * which of the two tokens it is. Kept as an alias; same value.\n */\n token: string | undefined;\n /** Content Preview API token, for draft content. Server-side only. */\n previewToken: string | undefined;\n}\n\nfunction orUndefined(value: string | undefined): string | undefined {\n return value || undefined;\n}\n\n/** Reads Contentful settings from `process.env` (neutral names first). */\nexport function readEnvSettings(): EnvSettings {\n /* v8 ignore next 10 -- process always exists in the test runtime */\n if (typeof process === 'undefined' || !process.env) {\n return {\n space: undefined,\n environment: undefined,\n deliveryToken: undefined,\n token: undefined,\n previewToken: undefined,\n };\n }\n const deliveryToken = orUndefined(\n process.env.CONTENTFUL_ACCESS_TOKEN ||\n process.env.NEXT_PUBLIC_CONTENTFUL_ACCESS_TOKEN,\n );\n return {\n space: orUndefined(\n process.env.CONTENTFUL_SPACE_ID ||\n process.env.NEXT_PUBLIC_CONTENTFUL_SPACE_ID,\n ),\n environment: orUndefined(\n process.env.CONTENTFUL_ENVIRONMENT ||\n process.env.NEXT_PUBLIC_CONTENTFUL_ENVIRONMENT,\n ),\n deliveryToken,\n token: deliveryToken,\n // No `NEXT_PUBLIC_` fallback: see the note at the top of this file.\n previewToken: orUndefined(process.env.CONTENTFUL_PREVIEW_ACCESS_TOKEN),\n };\n}\n","import {\n Kind,\n type ArgumentNode,\n type DocumentNode,\n type FieldNode,\n type OperationDefinitionNode,\n type SelectionNode,\n type SelectionSetNode,\n} from 'graphql';\nimport { getOperation } from './split.js';\n\n/**\n * Contentful cascades `preview` and `locale` from a root query field down to\n * every nested field, so injecting the arguments at the root is equivalent to\n * threading them through the whole query by hand — without the boilerplate.\n */\nexport interface InjectableArgs {\n preview: boolean;\n locale: string | undefined;\n}\n\nfunction argumentsOf(field: FieldNode): readonly ArgumentNode[] {\n return field.arguments ?? [];\n}\n\nfunction hasArgument(field: FieldNode, name: string): boolean {\n return argumentsOf(field).some((argument) => argument.name.value === name);\n}\n\nfunction previewArgument(): ArgumentNode {\n return {\n kind: Kind.ARGUMENT,\n name: { kind: Kind.NAME, value: 'preview' },\n value: { kind: Kind.BOOLEAN, value: true },\n };\n}\n\nfunction localeArgument(locale: string): ArgumentNode {\n return {\n kind: Kind.ARGUMENT,\n name: { kind: Kind.NAME, value: 'locale' },\n value: { kind: Kind.STRING, value: locale },\n };\n}\n\nfunction injectIntoField(field: FieldNode, args: InjectableArgs): FieldNode {\n // Introspection fields (`__typename`, `__schema`, ...) take no arguments.\n if (field.name.value.startsWith('__')) {\n return field;\n }\n const additions: ArgumentNode[] = [];\n if (args.preview && !hasArgument(field, 'preview')) {\n additions.push(previewArgument());\n }\n if (args.locale !== undefined && !hasArgument(field, 'locale')) {\n additions.push(localeArgument(args.locale));\n }\n if (additions.length === 0) {\n return field;\n }\n return { ...field, arguments: [...argumentsOf(field), ...additions] };\n}\n\nfunction injectIntoSelectionSet(\n selectionSet: SelectionSetNode,\n args: InjectableArgs,\n): SelectionSetNode {\n const selections: SelectionNode[] = selectionSet.selections.map(\n (selection): SelectionNode => {\n if (selection.kind === Kind.FIELD) {\n return injectIntoField(selection, args);\n }\n // Root-level inline fragments (`... on Query`) still contain root\n // fields; named spreads are inlined before injection runs.\n if (selection.kind === Kind.INLINE_FRAGMENT) {\n return {\n ...selection,\n selectionSet: injectIntoSelectionSet(selection.selectionSet, args),\n };\n }\n return selection;\n },\n );\n return { ...selectionSet, selections };\n}\n\n/**\n * Adds `preview: true` and/or `locale: \"...\"` arguments to every root field\n * of the operation, unless the author already wrote that argument. Nested\n * fields are left untouched — Contentful inherits both arguments downward.\n */\nexport function injectRootArgs(\n document: DocumentNode,\n args: InjectableArgs,\n): DocumentNode {\n if (!args.preview && args.locale === undefined) {\n return document;\n }\n const operation = getOperation(document);\n const injected: OperationDefinitionNode = {\n ...operation,\n selectionSet: injectIntoSelectionSet(operation.selectionSet, args),\n };\n return {\n ...document,\n definitions: document.definitions.map((definition) =>\n definition === operation ? injected : definition,\n ),\n };\n}\n","import { FetchContentfulError } from './errors.js';\nimport { withRetries, type RetryConfig } from './retry.js';\nimport type { ContentfulLocale } from './types.js';\n\nexport interface LocalesContext {\n space: string;\n environment: string;\n preview: boolean;\n token: string;\n fetch: typeof fetch;\n retry: RetryConfig;\n signal?: AbortSignal;\n}\n\nconst cache = new Map<string, Promise<ContentfulLocale[]>>();\n\nfunction cacheKey(context: LocalesContext): string {\n return `${context.space}:${context.environment}:${context.preview ? 1 : 0}`;\n}\n\nexport function localesEndpoint(context: LocalesContext): string {\n const host = context.preview\n ? 'preview.contentful.com'\n : 'cdn.contentful.com';\n return `https://${host}/spaces/${encodeURIComponent(\n context.space,\n )}/environments/${encodeURIComponent(context.environment)}/locales`;\n}\n\nasync function fetchLocales(\n context: LocalesContext,\n): Promise<ContentfulLocale[]> {\n return withRetries(async () => {\n let response: Response;\n try {\n const init: RequestInit = {\n headers: { Authorization: `Bearer ${context.token}` },\n };\n if (context.signal) init.signal = context.signal;\n response = await context.fetch(localesEndpoint(context), init);\n } catch (cause) {\n throw new FetchContentfulError(\n `Network error while fetching locales: ${String(cause)}`,\n { code: 'NETWORK', retryable: true, cause },\n );\n }\n if (!response.ok) {\n throw new FetchContentfulError(\n `Locale request failed with HTTP ${response.status}.`,\n {\n code: 'HTTP',\n status: response.status,\n retryable: response.status === 429 || response.status >= 500,\n },\n );\n }\n const payload = (await response.json()) as {\n items?: Array<{\n code: string;\n name: string;\n default: boolean;\n fallbackCode: string | null;\n }>;\n };\n if (!Array.isArray(payload.items)) {\n throw new FetchContentfulError(\n 'Locale response did not include an items array.',\n { code: 'NETWORK' },\n );\n }\n return payload.items.map((item) => ({\n code: item.code,\n name: item.name,\n default: item.default,\n fallbackCode: item.fallbackCode,\n }));\n }, context.retry);\n}\n\n/**\n * Returns the locales configured in Contentful for a space/environment.\n * Results are cached in-module, so repeated fetches are free; failed\n * lookups are evicted so they can be retried later.\n */\nexport function getLocales(\n context: LocalesContext,\n): Promise<ContentfulLocale[]> {\n const key = cacheKey(context);\n const cached = cache.get(key);\n if (cached) {\n return cached;\n }\n const pending = fetchLocales(context).catch((error) => {\n cache.delete(key);\n throw error;\n });\n cache.set(key, pending);\n return pending;\n}\n\n/** Clears the in-module locale cache (mainly useful in tests). */\nexport function clearLocaleCache(): void {\n cache.clear();\n}\n","import type { ShapeCollections, UnwrapSingleRoot } from './types.js';\n\nconst COLLECTION_SUFFIX = 'Collection';\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction isCollectionValue(\n value: unknown,\n): value is { items: unknown[] } {\n return isRecord(value) && Array.isArray(value['items']);\n}\n\n/**\n * Recursively rewrites Contentful collection wrappers:\n * `{ fooCollection: { items: [...] } }` becomes `{ foo: [...] }`.\n * Non-collection data is returned untouched (deeply copied).\n */\nexport function shapeData<T>(data: T): ShapeCollections<T> {\n if (Array.isArray(data)) {\n return data.map((item) => shapeData(item)) as ShapeCollections<T>;\n }\n if (isRecord(data)) {\n const shaped: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(data)) {\n if (\n key.endsWith(COLLECTION_SUFFIX) &&\n key !== COLLECTION_SUFFIX &&\n isCollectionValue(value)\n ) {\n shaped[key.slice(0, -COLLECTION_SUFFIX.length)] = shapeData(\n value.items,\n );\n } else {\n shaped[key] = shapeData(value);\n }\n }\n return shaped as ShapeCollections<T>;\n }\n return data as ShapeCollections<T>;\n}\n\n/**\n * Unwraps a single-root response: `{ siteSettings: X }` becomes `X` when\n * `siteSettings` is the only root key. Anything else — multiple roots,\n * arrays, primitives — is returned untouched.\n */\nexport function unwrapSingleRoot<T>(data: T): UnwrapSingleRoot<T> {\n if (isRecord(data)) {\n const keys = Object.keys(data);\n if (keys.length === 1) {\n return data[keys[0] as string] as UnwrapSingleRoot<T>;\n }\n }\n return data as UnwrapSingleRoot<T>;\n}\n","import type { TypedDocumentNode } from '@graphql-typed-document-node/core';\nimport { Kind, parse, type DocumentNode } from 'graphql';\nimport { rawRequest, type RequestContext } from './client.js';\nimport { readEnvSettings } from './env.js';\nimport { injectRootArgs } from './inject.js';\nimport { FetchContentfulError } from './errors.js';\nimport { getLocales } from './locales.js';\nimport type { RetryConfig } from './retry.js';\nimport { shapeData, unwrapSingleRoot } from './shape.js';\nimport {\n buildSubquery,\n chunk,\n getOperation,\n inlineFragments,\n planSplits,\n SYS_ID_ALIAS,\n TYPENAME_ALIAS,\n type SplitPlan,\n} from './split.js';\nimport type {\n CallerVariables,\n DocumentResult,\n FetchContentfulOptions,\n GraphQLVariables,\n ShapeCollections,\n TypedFetchContentfulOptions,\n UnwrapSingleRoot,\n} from './types.js';\n\nexport { FetchContentfulError, isFetchContentfulError } from './errors.js';\nexport { readEnvSettings } from './env.js';\nexport { injectRootArgs } from './inject.js';\nexport { clearLocaleCache, getLocales } from './locales.js';\nexport { shapeData, unwrapSingleRoot } from './shape.js';\nexport type {\n AutoInjectedVariable,\n CallerVariables,\n DocumentResult,\n FetchContentfulErrorCode,\n FetchContentfulOptions,\n ContentfulGraphQLError,\n ContentfulLocale,\n GraphQLVariables,\n NextFetchOptions,\n ShapeCollections,\n TypedFetchContentfulOptions,\n UnwrapSingleRoot,\n VariablesOption,\n} from './types.js';\n\n/**\n * Locale requested when a call does not name one.\n *\n * Contentful's own default for a new space, and explicit beats implicit: a\n * query that says which locale it wants returns the same content whatever a\n * space is configured to fall back to. Pass `locale: null` to send no\n * `locale` argument and let the space decide.\n */\nconst DEFAULT_LOCALE = 'en-US';\n\nconst DEFAULT_RETRIES = 5;\nconst DEFAULT_RETRY_DELAY_MS = 250;\nconst DEFAULT_MAX_RETRY_DELAY_MS = 8000;\nconst DEFAULT_SPLIT_BATCH_SIZE = 50;\n\ninterface ExecutionContext extends RequestContext {\n preview: boolean;\n locale: string | undefined;\n autoSplitNestedCollections: boolean;\n splitBatchSize: number;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\n/** Collect every object reachable at a response path, flattening arrays. */\nexport function collectAtPath(\n data: unknown,\n path: string[],\n): Record<string, unknown>[] {\n let current: unknown[] = [data];\n for (const segment of path) {\n const next: unknown[] = [];\n for (const value of current) {\n if (isRecord(value)) {\n const child = value[segment];\n if (Array.isArray(child)) {\n next.push(...child);\n } else if (child !== null && child !== undefined) {\n next.push(child);\n }\n }\n }\n current = next;\n }\n return current.filter(isRecord);\n}\n\nfunction resolveContext(\n options: FetchContentfulOptions<GraphQLVariables>,\n): ExecutionContext {\n const env = readEnvSettings();\n const space = options.space ?? env.space;\n const environment = options.environment ?? env.environment ?? 'master';\n const preview = options.preview ?? false;\n\n // Each mode resolves its own token, so a factory can be configured with\n // both and every call picks the right one. The deprecated `token` still\n // applies to whichever mode is active, exactly as it used to.\n const token = preview\n ? (options.previewToken ?? options.token ?? env.previewToken)\n : (options.deliveryToken ?? options.token ?? env.deliveryToken);\n\n // Report every missing setting at once so a fresh setup is fixed in a\n // single round trip rather than one error at a time.\n if (!space || !token) {\n const missing: string[] = [];\n if (!space) {\n missing.push(\n 'space (pass `space` or set CONTENTFUL_SPACE_ID / NEXT_PUBLIC_CONTENTFUL_SPACE_ID)',\n );\n }\n if (!token) {\n missing.push(\n preview\n ? 'preview access token (pass `previewToken` or set CONTENTFUL_PREVIEW_ACCESS_TOKEN — note there is no NEXT_PUBLIC_ equivalent, by design)'\n : 'delivery access token (pass `deliveryToken` or set CONTENTFUL_ACCESS_TOKEN / NEXT_PUBLIC_CONTENTFUL_ACCESS_TOKEN)',\n );\n }\n throw new FetchContentfulError(\n `Missing required Contentful configuration: ${missing.join('; ')}.`,\n { code: 'CONFIG' },\n );\n }\n\n const retry: RetryConfig = {\n retries: options.retries ?? DEFAULT_RETRIES,\n baseDelayMs: options.retryDelayMs ?? DEFAULT_RETRY_DELAY_MS,\n maxDelayMs: options.maxRetryDelayMs ?? DEFAULT_MAX_RETRY_DELAY_MS,\n };\n\n const fetchImpl = options.fetch ?? globalThis.fetch;\n\n const context: ExecutionContext = {\n space,\n environment,\n token,\n preview,\n // `null` is the opt-out; `undefined` (or absent) takes the default.\n locale: options.locale === null ? undefined : (options.locale ?? DEFAULT_LOCALE),\n fetch: fetchImpl,\n retry,\n autoSplitNestedCollections: options.autoSplitNestedCollections ?? true,\n splitBatchSize: options.splitBatchSize ?? DEFAULT_SPLIT_BATCH_SIZE,\n };\n if (options.signal) context.signal = options.signal;\n if (options.next) context.next = options.next;\n if (options.cache) context.cache = options.cache;\n return context;\n}\n\n/**\n * Resolves one split plan: groups parent entries by concrete type, re-fetches\n * the split field in id batches, stitches results back onto the parents, and\n * fails loudly if any parent cannot be resolved.\n */\nasync function resolvePlan(\n plan: SplitPlan,\n data: Record<string, unknown>,\n variables: GraphQLVariables,\n context: ExecutionContext,\n): Promise<void> {\n const parents = collectAtPath(data, plan.path);\n const relevant = parents.filter(\n (parent) =>\n typeof parent[TYPENAME_ALIAS] === 'string' &&\n (plan.typeCondition === undefined ||\n parent[TYPENAME_ALIAS] === plan.typeCondition),\n );\n if (relevant.length === 0) {\n return;\n }\n\n const byType = new Map<string, Record<string, unknown>[]>();\n for (const parent of relevant) {\n const typename = parent[TYPENAME_ALIAS] as string;\n const sys = parent[SYS_ID_ALIAS];\n if (!isRecord(sys) || typeof sys['id'] !== 'string') {\n throw new FetchContentfulError(\n `Cannot split \"${plan.responseKey}\": a parent entry is missing its sys id.`,\n { code: 'STITCH' },\n );\n }\n const group = byType.get(typename) ?? [];\n group.push(parent);\n byType.set(typename, group);\n }\n\n const resolved = new Map<string, unknown>();\n\n await Promise.all(\n [...byType.entries()].map(async ([typename, group]) => {\n const ids = [\n ...new Set(\n group.map((parent) => {\n const sys = parent[SYS_ID_ALIAS] as { id: string };\n return sys.id;\n }),\n ),\n ];\n await Promise.all(\n chunk(ids, context.splitBatchSize).map(async (idBatch) => {\n const { document, rootKey } = buildSubquery(\n plan,\n typename,\n idBatch.length,\n context,\n );\n const subData = await executeDocument(\n document,\n { ...variables, _splitIds: idBatch },\n context,\n );\n const collection = subData[rootKey];\n const items =\n isRecord(collection) && Array.isArray(collection['items'])\n ? (collection['items'] as unknown[])\n : undefined;\n if (!items) {\n throw new FetchContentfulError(\n `Split subquery for \"${typename}\" returned no \"${rootKey}.items\". ` +\n 'Check that the content type follows Contentful naming conventions.',\n { code: 'STITCH' },\n );\n }\n for (const item of items) {\n if (isRecord(item)) {\n const sys = item['sys'];\n if (isRecord(sys) && typeof sys['id'] === 'string') {\n resolved.set(`${typename}:${sys['id']}`, item[plan.responseKey]);\n }\n }\n }\n }),\n );\n }),\n );\n\n for (const parent of relevant) {\n const typename = parent[TYPENAME_ALIAS] as string;\n const sys = parent[SYS_ID_ALIAS] as { id: string };\n const key = `${typename}:${sys.id}`;\n if (!resolved.has(key)) {\n throw new FetchContentfulError(\n `Split subquery did not return entry \"${sys.id}\" of type \"${typename}\" ` +\n `for field \"${plan.responseKey}\".`,\n { code: 'STITCH' },\n );\n }\n parent[plan.responseKey] = resolved.get(key);\n }\n}\n\nfunction cleanupMarkers(\n data: Record<string, unknown>,\n plans: SplitPlan[],\n): void {\n for (const plan of plans) {\n for (const parent of collectAtPath(data, plan.path)) {\n delete parent[SYS_ID_ALIAS];\n delete parent[TYPENAME_ALIAS];\n }\n }\n}\n\n/**\n * Executes a document: plans splits, runs the reduced outer query, then\n * recursively resolves every split subquery and stitches the data together.\n */\nasync function executeDocument(\n document: DocumentNode,\n variables: GraphQLVariables,\n context: ExecutionContext,\n): Promise<Record<string, unknown>> {\n const { document: outer, plans } = planSplits(document, context);\n const data = await rawRequest(outer, variables, context);\n await Promise.all(\n plans.map((plan) => resolvePlan(plan, data, variables, context)),\n );\n cleanupMarkers(data, plans);\n return data;\n}\n\n/** Replaces named fragment spreads with inline fragments (re-exported for advanced use). */\nexport { inlineFragments } from './split.js';\n\nfunction isDocumentNode(query: unknown): query is DocumentNode {\n return (\n typeof query === 'object' &&\n query !== null &&\n (query as DocumentNode).kind === Kind.DOCUMENT &&\n Array.isArray((query as DocumentNode).definitions)\n );\n}\n\n/**\n * Normalizes whatever was passed as the query into an AST.\n *\n * gql.tada and graphql-codegen's client preset both produce real\n * `DocumentNode`s, which pass through untouched. Anything else — a query\n * string, or a document object that only carries its source text — is\n * stringified and parsed.\n */\nfunction toDocument(query: string | DocumentNode): DocumentNode {\n if (isDocumentNode(query)) {\n return query;\n }\n try {\n return parse(typeof query === 'string' ? query : String(query));\n } catch (cause) {\n throw new FetchContentfulError(\n `Failed to parse GraphQL query: ${String(cause)}`,\n { code: 'CONFIG', cause },\n );\n }\n}\n\n/** Auto-fill `$preview` / `$locale` variables when the query declares them. */\nfunction withAutoVariables(\n document: DocumentNode,\n variables: GraphQLVariables,\n context: ExecutionContext,\n): GraphQLVariables {\n const declared = new Set(\n (getOperation(document).variableDefinitions ?? []).map(\n (definition) => definition.variable.name.value,\n ),\n );\n const merged: GraphQLVariables = { ...variables };\n if (declared.has('preview') && merged['preview'] === undefined) {\n merged['preview'] = context.preview;\n }\n if (\n declared.has('locale') &&\n merged['locale'] === undefined &&\n context.locale !== undefined\n ) {\n merged['locale'] = context.locale;\n }\n return merged;\n}\n\n/**\n * The single implementation behind both {@link fetchContentful} and the\n * function {@link createFetchContentful} returns.\n *\n * Both are heavily overloaded, and an overloaded signature cannot be called\n * with a `string | DocumentNode` union — so the bound function delegates\n * here rather than re-entering `fetchContentful` through its overloads.\n */\nasync function runFetchContentful(\n query: string | DocumentNode,\n options: FetchContentfulOptions<GraphQLVariables>,\n): Promise<unknown> {\n const context = resolveContext(options);\n let document = inlineFragments(toDocument(query));\n if (options.autoInjectArgs ?? true) {\n document = injectRootArgs(document, {\n preview: context.preview,\n locale: context.locale,\n });\n }\n\n if (options.validateLocale && context.locale !== undefined) {\n const locales = await getLocales(context);\n if (!locales.some((locale) => locale.code === context.locale)) {\n throw new FetchContentfulError(\n `Locale \"${context.locale}\" is not configured in space \"${context.space}\" ` +\n `(available: ${locales.map((locale) => locale.code).join(', ')}).`,\n { code: 'LOCALE' },\n );\n }\n }\n\n const variables = withAutoVariables(\n document,\n options.variables ?? {},\n context,\n );\n const data = await executeDocument(document, variables, context);\n const result = options.shapeResponseData === false ? data : shapeData(data);\n if (options.unwrapRootField === false) {\n return result;\n }\n return unwrapSingleRoot(result);\n}\n\n/**\n * Fetches data from Contentful's GraphQL API.\n *\n * - Splits nested reference collections (and `@split`-annotated references)\n * into recursive subqueries to stay under query complexity limits, then\n * stitches everything back together.\n * - Retries transient failures with exponential backoff.\n * - Rejects if any request in the tree fails; resolves only when the full\n * query has succeeded.\n * - Shapes the response so every `fooCollection.items` becomes `foo`\n * (disable with `shapeResponseData: false` to receive the raw wire shape).\n *\n * Pass a typed document — from gql.tada, graphql-codegen's client preset, or\n * anything else producing a `TypedDocumentNode` — and both the result and\n * the variables are inferred, with no type arguments to write by hand.\n */\nexport async function fetchContentful<TResult, TVariables = GraphQLVariables>(\n document: TypedDocumentNode<TResult, TVariables>,\n options: TypedFetchContentfulOptions<TVariables> & {\n shapeResponseData: false;\n unwrapRootField: false;\n },\n): Promise<DocumentResult<TResult>>;\nexport async function fetchContentful<TResult, TVariables = GraphQLVariables>(\n document: TypedDocumentNode<TResult, TVariables>,\n options: TypedFetchContentfulOptions<TVariables> & {\n shapeResponseData: false;\n },\n): Promise<UnwrapSingleRoot<DocumentResult<TResult>>>;\nexport async function fetchContentful<TResult, TVariables = GraphQLVariables>(\n document: TypedDocumentNode<TResult, TVariables>,\n options: TypedFetchContentfulOptions<TVariables> & {\n unwrapRootField: false;\n },\n): Promise<ShapeCollections<DocumentResult<TResult>>>;\nexport async function fetchContentful<TResult, TVariables = GraphQLVariables>(\n document: TypedDocumentNode<TResult, TVariables>,\n ...args: Record<string, never> extends CallerVariables<TVariables>\n ? [options?: TypedFetchContentfulOptions<TVariables>]\n : [options: TypedFetchContentfulOptions<TVariables>]\n): Promise<UnwrapSingleRoot<ShapeCollections<DocumentResult<TResult>>>>;\nexport async function fetchContentful<\n TData = Record<string, unknown>,\n TVariables extends GraphQLVariables = GraphQLVariables,\n>(\n query: string,\n options: FetchContentfulOptions<TVariables> & {\n shapeResponseData: false;\n unwrapRootField: false;\n },\n): Promise<TData>;\nexport async function fetchContentful<\n TData = Record<string, unknown>,\n TVariables extends GraphQLVariables = GraphQLVariables,\n>(\n query: string,\n options: FetchContentfulOptions<TVariables> & { shapeResponseData: false },\n): Promise<UnwrapSingleRoot<TData>>;\nexport async function fetchContentful<\n TData = Record<string, unknown>,\n TVariables extends GraphQLVariables = GraphQLVariables,\n>(\n query: string,\n options: FetchContentfulOptions<TVariables> & { unwrapRootField: false },\n): Promise<ShapeCollections<TData>>;\nexport async function fetchContentful<\n TData = Record<string, unknown>,\n TVariables extends GraphQLVariables = GraphQLVariables,\n>(\n query: string,\n options?: FetchContentfulOptions<TVariables>,\n): Promise<UnwrapSingleRoot<ShapeCollections<TData>>>;\nexport async function fetchContentful(\n query: string | DocumentNode,\n options: FetchContentfulOptions<GraphQLVariables> = {},\n): Promise<unknown> {\n return runFetchContentful(query, options);\n}\n\n/**\n * Creates a `fetchContentful` bound to default options — the recommended way\n * to configure the utility once per project:\n *\n * ```ts\n * // lib/contentful.ts\n * export const fetchContentful = createFetchContentful({\n * space: 'abc123',\n * locale: 'de-DE', // overrides the 'en-US' default for the whole project\n * retries: 3,\n * });\n * ```\n *\n * Per-call options win over defaults (top-level shallow merge). Note that\n * `shapeResponseData: false` only changes the *return type* when written on\n * the call itself, so prefer setting it per call.\n */\nexport function createFetchContentful<\n TDefaultVariables extends GraphQLVariables = GraphQLVariables,\n>(defaults: FetchContentfulOptions<TDefaultVariables> = {}) {\n function bound<TResult, TVariables = GraphQLVariables>(\n document: TypedDocumentNode<TResult, TVariables>,\n options: TypedFetchContentfulOptions<TVariables> & {\n shapeResponseData: false;\n unwrapRootField: false;\n },\n ): Promise<DocumentResult<TResult>>;\n function bound<TResult, TVariables = GraphQLVariables>(\n document: TypedDocumentNode<TResult, TVariables>,\n options: TypedFetchContentfulOptions<TVariables> & {\n shapeResponseData: false;\n },\n ): Promise<UnwrapSingleRoot<DocumentResult<TResult>>>;\n function bound<TResult, TVariables = GraphQLVariables>(\n document: TypedDocumentNode<TResult, TVariables>,\n options: TypedFetchContentfulOptions<TVariables> & {\n unwrapRootField: false;\n },\n ): Promise<ShapeCollections<DocumentResult<TResult>>>;\n function bound<TResult, TVariables = GraphQLVariables>(\n document: TypedDocumentNode<TResult, TVariables>,\n ...args: Record<string, never> extends CallerVariables<TVariables>\n ? [options?: TypedFetchContentfulOptions<TVariables>]\n : [options: TypedFetchContentfulOptions<TVariables>]\n ): Promise<UnwrapSingleRoot<ShapeCollections<DocumentResult<TResult>>>>;\n function bound<\n TData = Record<string, unknown>,\n TVariables extends GraphQLVariables = GraphQLVariables,\n >(\n query: string,\n options: FetchContentfulOptions<TVariables> & {\n shapeResponseData: false;\n unwrapRootField: false;\n },\n ): Promise<TData>;\n function bound<\n TData = Record<string, unknown>,\n TVariables extends GraphQLVariables = GraphQLVariables,\n >(\n query: string,\n options: FetchContentfulOptions<TVariables> & { shapeResponseData: false },\n ): Promise<UnwrapSingleRoot<TData>>;\n function bound<\n TData = Record<string, unknown>,\n TVariables extends GraphQLVariables = GraphQLVariables,\n >(\n query: string,\n options: FetchContentfulOptions<TVariables> & { unwrapRootField: false },\n ): Promise<ShapeCollections<TData>>;\n function bound<\n TData = Record<string, unknown>,\n TVariables extends GraphQLVariables = GraphQLVariables,\n >(\n query: string,\n options?: FetchContentfulOptions<TVariables>,\n ): Promise<UnwrapSingleRoot<ShapeCollections<TData>>>;\n function bound(\n query: string | DocumentNode,\n options: FetchContentfulOptions<GraphQLVariables> = {},\n ): Promise<unknown> {\n return runFetchContentful(query, {\n ...defaults,\n ...options,\n } as FetchContentfulOptions<GraphQLVariables>);\n }\n return bound;\n}\n\nexport default fetchContentful;\n"]}
1
+ {"version":3,"sources":["../src/annotate.ts","../src/errors.ts","../src/retry.ts","../src/split.ts","../src/unresolvable.ts","../src/client.ts","../src/env.ts","../src/inject.ts","../src/locales.ts","../src/shape.ts","../src/index.ts"],"names":["Kind","visit","COLLECTION_SUFFIX","isRecord","print","isCollectionValue","parse"],"mappings":";;;;;;;;;AAkBA,IAAM,GAAA,GAAM,MAAA,CAAO,YAAA,CAAa,EAAE,CAAA;AAElC,IAAM,IAAA,GAAO;AAAA,EACX,KAAA,EAAO,GAAG,GAAG,CAAA,GAAA,CAAA;AAAA,EACb,IAAA,EAAM,GAAG,GAAG,CAAA,GAAA,CAAA;AAAA,EACZ,GAAA,EAAK,GAAG,GAAG,CAAA,GAAA,CAAA;AAAA,EACX,GAAA,EAAK,GAAG,GAAG,CAAA,IAAA;AACb,CAAA;AAGA,IAAM,qBAAA,GAAwB,CAAA;AAqCvB,SAAS,aAAA,GAAyB;AAEvC,EAAA,IAAI,OAAO,OAAA,KAAY,WAAA,IAAe,CAAC,QAAQ,GAAA,EAAK;AAClD,IAAA,OAAO,KAAA;AAAA,EACT;AAGA,EAAA,MAAM,MAAA,GAAS,QAAQ,GAAA,CAAI,WAAA;AAC3B,EAAA,MAAM,QAAA,GAAW,QAAQ,GAAA,CAAI,QAAA;AAE7B,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,OAAO,MAAA,KAAW,OAAO,MAAA,KAAW,OAAA;AAAA,EACtC;AACA,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,OAAO,OAAA,CAAQ,OAAA,CAAQ,MAAA,EAAQ,KAAK,CAAA;AACtC;AAIA,SAAS,YAAY,OAAA,EAInB;AACA,EAAA,MAAM,KAAA,GACJ,CAAC,IAAA,KACD,CAAC,IAAA,KACC,OAAA,GAAU,CAAA,EAAG,IAAI,CAAA,EAAG,IAAI,CAAA,EAAG,IAAA,CAAK,KAAK,CAAA,CAAA,GAAK,IAAA;AAC9C,EAAA,OAAO;AAAA,IACL,GAAA,EAAK,KAAA,CAAM,IAAA,CAAK,GAAG,CAAA;AAAA,IACnB,GAAA,EAAK,KAAA,CAAM,IAAA,CAAK,GAAG,CAAA;AAAA,IACnB,IAAA,EAAM,KAAA,CAAM,IAAA,CAAK,IAAI;AAAA,GACvB;AACF;AAUO,SAAS,YAAA,CAAa,QAA2C,SAAA,EAA2B;AACjG,EAAA,MAAM,QAAgB,EAAC;AACvB,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,KAAA,MAAW,QAAA,IAAY,KAAA,CAAM,SAAA,IAAa,EAAC,EAAG;AAC5C,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,IAAI,CAAA;AAErC,MAAA,IAAI,EAAE,IAAA,IAAQ,CAAA,IAAK,IAAA,IAAQ,SAAA,CAAA,EAAY;AACvC,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,MAAM,CAAA;AAC3C,MAAA,MAAM,MAAA,GAAS,QAAA,IAAY,CAAA,GAAI,QAAA,GAAW,CAAA;AAC1C,MAAA,MAAM,MAAM,CAAA,EAAG,IAAI,IAAI,MAAM,CAAA,CAAA,EAAI,MAAM,OAAO,CAAA,CAAA;AAC9C,MAAA,IAAI,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,EAAG;AACnB,MAAA,IAAA,CAAK,IAAI,GAAG,CAAA;AACZ,MAAA,KAAA,CAAM,KAAK,EAAE,IAAA,EAAM,QAAQ,OAAA,EAAS,KAAA,CAAM,SAAS,CAAA;AAAA,IACrD;AAAA,EACF;AACA,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,IAAA,GAAO,CAAA,CAAE,IAAA,IAAQ,CAAA,CAAE,MAAA,GAAS,CAAA,CAAE,MAAM,CAAA;AACpE;AAOA,SAAS,WAAA,CAAY,KAAA,EAAwB,SAAA,EAAmB,YAAA,EAAiC;AAC/F,EAAA,MAAM,WAAsB,EAAC;AAC7B,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,QAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,OAAO,YAAY,CAAA;AAClD,IAAA,MAAM,MAAM,IAAA,CAAK,GAAA,CAAI,SAAA,EAAW,IAAA,CAAK,OAAO,YAAY,CAAA;AACxD,IAAA,MAAM,QAAA,GAAW,QAAA,CAAS,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA;AAC7C,IAAA,IAAI,QAAA,IAAY,KAAA,IAAS,QAAA,CAAS,GAAA,GAAM,CAAA,EAAG;AACzC,MAAA,QAAA,CAAS,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,QAAA,CAAS,KAAK,GAAG,CAAA;AAAA,IAC3C,CAAA,MAAO;AACL,MAAA,QAAA,CAAS,IAAA,CAAK,EAAE,KAAA,EAAO,GAAA,EAAK,CAAA;AAAA,IAC9B;AAAA,EACF;AACA,EAAA,OAAO,QAAA;AACT;AAiBO,SAAS,aAAA,CACd,KAAA,EACA,MAAA,EACA,OAAA,GAAgC,EAAC,EACzB;AACR,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,IAAI,CAAA;AAC9B,EAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,MAAA,EAAQ,KAAA,CAAM,MAAM,CAAA;AAC/C,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,EAAA;AAE/B,EAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,OAAA,CAAQ,KAAA,IAAS,eAAe,CAAA;AAC1D,EAAA,MAAM,WAAW,WAAA,CAAY,KAAA,EAAO,MAAM,MAAA,EAAQ,OAAA,CAAQ,gBAAgB,qBAAqB,CAAA;AAC/F,EAAA,MAAM,MAAA,GAAS,MAAA;AAAA,IACb,QAAA,CAAS,MAAA,CAAO,CAAC,MAAA,EAAQ,OAAA,KAAY,IAAA,CAAK,GAAA,CAAI,MAAA,EAAQ,OAAA,CAAQ,GAAG,CAAA,EAAG,CAAC;AAAA,GACvE,CAAE,MAAA;AACF,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,MAAA,CAAO,MAAM,CAAA;AAE/B,EAAA,MAAM,MAAgB,EAAC;AACvB,EAAA,KAAA,MAAW,CAAC,KAAA,EAAO,OAAO,CAAA,IAAK,QAAA,CAAS,SAAQ,EAAG;AACjD,IAAA,IAAI,KAAA,GAAQ,GAAG,GAAA,CAAI,IAAA,CAAK,MAAM,GAAA,CAAI,CAAA,EAAA,EAAK,KAAK,CAAA,IAAA,CAAM,CAAC,CAAA;AAInD,IAAA,MAAM,SAAS,KAAA,CAAM,KAAA,CAAM,QAAQ,KAAA,GAAQ,CAAA,EAAG,QAAQ,GAAG,CAAA;AACzD,IAAA,KAAA,MAAW,CAAC,MAAA,EAAQ,MAAM,CAAA,IAAK,MAAA,CAAO,SAAQ,EAAG;AAC/C,MAAA,MAAM,IAAA,GAAO,QAAQ,KAAA,GAAQ,MAAA;AAC7B,MAAA,MAAM,SAAS,MAAA,CAAO,IAAI,CAAA,CAAE,QAAA,CAAS,QAAQ,GAAG,CAAA;AAChD,MAAA,MAAM,OAAO,KAAA,CAAM,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,SAAS,IAAI,CAAA;AACtD,MAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,QAAA,GAAA,CAAI,IAAA,CAAK,CAAA,EAAG,KAAA,CAAM,GAAA,CAAI,CAAA,EAAA,EAAK,MAAM,CAAA,EAAA,CAAI,CAAC,CAAA,CAAA,EAAI,MAAM,CAAA,CAAE,CAAA;AAClD,QAAA;AAAA,MACF;AAEA,MAAA,GAAA,CAAI,IAAA,CAAK,CAAA,EAAG,KAAA,CAAM,GAAA,CAAI,CAAA,EAAA,EAAK,MAAM,CAAA,EAAA,CAAI,CAAC,CAAA,CAAA,EAAI,KAAA,CAAM,IAAA,CAAK,MAAM,CAAC,CAAA,CAAE,CAAA;AAC9D,MAAA,KAAA,MAAW,QAAQ,IAAA,EAAM;AACvB,QAAA,MAAM,IAAA,GAAO,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,SAAS,CAAC,CAAA;AACvC,QAAA,GAAA,CAAI,KAAK,CAAA,EAAG,KAAA,CAAM,IAAI,CAAA,EAAA,EAAK,KAAK,IAAI,CAAC,CAAA,CAAA,EAAI,IAAI,CAAA,EAAG,MAAM,GAAA,CAAI,CAAA,EAAA,EAAK,KAAK,OAAO,CAAA,CAAE,CAAC,CAAA,CAAE,CAAA;AAAA,MAClF;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,GAAA,CAAI,KAAK,IAAI,CAAA;AACtB;;;ACzMO,IAAM,oBAAA,GAAN,cAAmC,KAAA,CAAM;AAAA,EACrC,IAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,KAAA;AAAA;AAAA,EAEA,SAAA;AAAA;AAAA,EAEA,YAAA;AAAA,EAET,WAAA,CACE,SACA,OAAA,EASA;AACA,IAAA,KAAA,CAAM,OAAA,EAAS,EAAE,KAAA,EAAO,OAAA,CAAQ,OAAO,CAAA;AACvC,IAAA,IAAA,CAAK,IAAA,GAAO,sBAAA;AACZ,IAAA,IAAA,CAAK,OAAO,OAAA,CAAQ,IAAA;AACpB,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ,MAAA;AACtB,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ,MAAA;AACtB,IAAA,IAAA,CAAK,QAAQ,OAAA,CAAQ,KAAA;AACrB,IAAA,IAAA,CAAK,SAAA,GAAY,QAAQ,SAAA,IAAa,KAAA;AACtC,IAAA,IAAA,CAAK,eAAe,OAAA,CAAQ,YAAA;AAAA,EAC9B;AACF;AAGO,SAAS,uBAAuB,KAAA,EAA+C;AACpF,EAAA,OAAO,KAAA,YAAiB,oBAAA;AAC1B;;;AC9BO,SAAS,aAAa,EAAA,EAA2B;AACtD,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,YAAY,UAAA,CAAW,OAAA,EAAS,EAAE,CAAC,CAAA;AACzD;AAGO,SAAS,YAAA,CACd,SACA,MAAA,EAGQ;AACR,EAAA,MAAM,WAAA,GAAc,MAAA,CAAO,WAAA,GAAc,CAAA,IAAK,OAAA;AAC9C,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,MAAA,EAAO,GAAI,MAAA,CAAO,WAAA;AACxC,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,WAAA,GAAc,MAAA,EAAQ,OAAO,UAAU,CAAA;AACzD;AAMA,eAAsB,WAAA,CACpB,IACA,MAAA,EACY;AACZ,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,MAAA,IAAU,IAAA,CAAK,MAAA;AACrC,EAAA,MAAM,KAAA,GAAQ,OAAO,KAAA,IAAS,YAAA;AAC9B,EAAA,IAAI,OAAA,GAAU,CAAA;AACd,EAAA,OAAO,IAAA,EAAM;AACX,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,GAAG,OAAO,CAAA;AAAA,IACzB,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,SAAA,GAAY,sBAAA,CAAuB,KAAK,CAAA,IAAK,KAAA,CAAM,SAAA;AACzD,MAAA,IAAI,CAAC,SAAA,IAAa,OAAA,IAAW,MAAA,CAAO,OAAA,EAAS;AAC3C,QAAA,MAAM,KAAA;AAAA,MACR;AACA,MAAA,MAAM,KAAA,GAAQ,MAAM,YAAA,IAAgB,YAAA,CAAa,SAAS,EAAE,GAAG,MAAA,EAAQ,MAAA,EAAQ,CAAA;AAC/E,MAAA,MAAM,MAAM,KAAK,CAAA;AACjB,MAAA,OAAA,IAAW,CAAA;AAAA,IACb;AAAA,EACF;AACF;AClCO,IAAM,eAAA,GAAkB,OAAA;AAExB,IAAM,kBAAA,GAAqB,UAAA;AAE3B,IAAM,YAAA,GAAe,aAAA;AAErB,IAAM,cAAA,GAAiB,gBAAA;AAEvB,IAAM,YAAA,GAAe,WAAA;AAE5B,IAAM,iBAAA,GAAoB,YAAA;AA8BnB,SAAS,WAAW,KAAA,EAAuB;AAChD,EAAA,OAAO,KAAA,CAAM,OAAO,CAAC,CAAA,CAAE,aAAY,GAAI,KAAA,CAAM,MAAM,CAAC,CAAA;AACtD;AAEO,SAAS,KAAA,CAAS,OAAY,IAAA,EAAqB;AACxD,EAAA,MAAM,SAAgB,EAAC;AACvB,EAAA,KAAA,IAAS,QAAQ,CAAA,EAAG,KAAA,GAAQ,KAAA,CAAM,MAAA,EAAQ,SAAS,IAAA,EAAM;AACvD,IAAA,MAAA,CAAO,KAAK,KAAA,CAAM,KAAA,CAAM,KAAA,EAAO,KAAA,GAAQ,IAAI,CAAC,CAAA;AAAA,EAC9C;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,aAAa,KAAA,EAA4C;AAChE,EAAA,OAAO,KAAA,CAAM,cAAc,EAAC;AAC9B;AAEA,SAAS,YAAA,CAAa,OAAkB,IAAA,EAAuB;AAC7D,EAAA,OAAO,YAAA,CAAa,KAAK,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,CAAK,KAAA,KAAU,IAAI,CAAA;AAC9D;AAEA,SAAS,gBAAA,CAAiB,OAAkB,IAAA,EAAyB;AACnE,EAAA,OAAO;AAAA,IACL,GAAG,KAAA;AAAA,IACH,UAAA,EAAY,YAAA,CAAa,KAAK,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,CAAK,KAAA,KAAU,IAAI;AAAA,GACrE;AACF;AAEA,SAAS,aAAA,CAAc,OAAkB,IAAA,EAAyB;AAChE,EAAA,MAAM,SAAA,GAA2B;AAAA,IAC/B,MAAMA,YAAA,CAAK,SAAA;AAAA,IACX,MAAM,EAAE,IAAA,EAAMA,YAAA,CAAK,IAAA,EAAM,OAAO,IAAA;AAAK,GACvC;AACA,EAAA,OAAO,EAAE,GAAG,KAAA,EAAO,UAAA,EAAY,CAAC,GAAG,YAAA,CAAa,KAAK,CAAA,EAAG,SAAS,CAAA,EAAE;AACrE;AAEA,SAAS,cAAc,KAAA,EAA0B;AAC/C,EAAA,OAAO,KAAA,CAAM,KAAA,EAAO,KAAA,IAAS,KAAA,CAAM,IAAA,CAAK,KAAA;AAC1C;AAEA,SAAS,kBAAkB,KAAA,EAA2B;AACpD,EAAA,IACE,CAAC,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,iBAAiB,CAAA,IAC5C,KAAA,CAAM,IAAA,CAAK,KAAA,KAAU,iBAAA,IACrB,CAAC,MAAM,YAAA,EACP;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,OAAO,KAAA,CAAM,aAAa,UAAA,CAAW,IAAA;AAAA,IACnC,CAAC,cAAc,SAAA,CAAU,IAAA,KAASA,aAAK,KAAA,IAAS,SAAA,CAAU,KAAK,KAAA,KAAU;AAAA,GAC3E;AACF;AAEA,SAAS,UAAA,CAAW,IAAA,EAAc,KAAA,EAAgB,UAAA,EAAyC;AACzF,EAAA,OAAO;AAAA,IACL,MAAMA,YAAA,CAAK,KAAA;AAAA,IACX,MAAM,EAAE,IAAA,EAAMA,YAAA,CAAK,IAAA,EAAM,OAAO,IAAA,EAAK;AAAA,IACrC,GAAI,KAAA,GAAQ,EAAE,KAAA,EAAO,EAAE,IAAA,EAAMA,YAAA,CAAK,IAAA,EAAM,KAAA,EAAO,KAAA,EAAM,EAAE,GAAI,EAAC;AAAA,IAC5D,GAAI,UAAA,GACA;AAAA,MACE,YAAA,EAAc;AAAA,QACZ,MAAMA,YAAA,CAAK,aAAA;AAAA,QACX;AAAA;AACF,QAEF;AAAC,GACP;AACF;AAEA,SAAS,WAAA,GAAyB;AAChC,EAAA,OAAO,WAAW,KAAA,EAAO,YAAA,EAAc,CAAC,UAAA,CAAW,IAAI,CAAC,CAAC,CAAA;AAC3D;AAEA,SAAS,cAAA,GAA4B;AACnC,EAAA,OAAO,UAAA,CAAW,cAAc,cAAc,CAAA;AAChD;AAGO,SAAS,qBAAqB,KAAA,EAA+B;AAClE,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAY;AAC9B,EAAAC,aAAA,CAAM,KAAA,EAAO;AAAA,IACX,SAAS,IAAA,EAAM;AACb,MAAA,KAAA,CAAM,GAAA,CAAI,IAAA,CAAK,IAAA,CAAK,KAAK,CAAA;AAAA,IAC3B;AAAA,GACD,CAAA;AACD,EAAA,OAAO,KAAA;AACT;AAGO,SAAS,aAAa,QAAA,EAAiD;AAC5E,EAAA,MAAM,UAAA,GAAa,SAAS,WAAA,CAAY,MAAA;AAAA,IACtC,CAAC,UAAA,KACC,UAAA,CAAW,IAAA,KAASD,YAAA,CAAK;AAAA,GAC7B;AACA,EAAA,MAAM,SAAA,GAAY,WAAW,CAAC,CAAA;AAC9B,EAAA,IAAI,CAAC,SAAA,IAAa,UAAA,CAAW,MAAA,GAAS,CAAA,EAAG;AACvC,IAAA,MAAM,IAAI,qBAAqB,8DAAA,EAAgE;AAAA,MAC7F,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AACA,EAAA,IAAI,SAAA,CAAU,cAAc,OAAA,EAAS;AACnC,IAAA,MAAM,IAAI,qBAAqB,kDAAA,EAAoD;AAAA,MACjF,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AACA,EAAA,OAAO,SAAA;AACT;AAUO,SAAS,gBAAgB,QAAA,EAAsC;AACpE,EAAA,MAAM,SAAA,uBAAgB,GAAA,EAAoC;AAC1D,EAAA,KAAA,MAAW,UAAA,IAAc,SAAS,WAAA,EAAa;AAC7C,IAAA,IAAI,UAAA,CAAW,IAAA,KAASA,YAAA,CAAK,mBAAA,EAAqB;AAChD,MAAA,SAAA,CAAU,GAAA,CAAI,UAAA,CAAW,IAAA,CAAK,KAAA,EAAO,UAAU,CAAA;AAAA,IACjD;AAAA,EACF;AAEA,EAAA,SAAS,kBAAA,CAAmB,cAAgC,KAAA,EAAmC;AAC7F,IAAA,MAAM,UAAA,GAA8B,YAAA,CAAa,UAAA,CAAW,GAAA,CAAI,CAAC,SAAA,KAA6B;AAC5F,MAAA,IAAI,SAAA,CAAU,IAAA,KAASA,YAAA,CAAK,eAAA,EAAiB;AAC3C,QAAA,MAAM,IAAA,GAAO,UAAU,IAAA,CAAK,KAAA;AAC5B,QAAA,MAAM,QAAA,GAAW,SAAA,CAAU,GAAA,CAAI,IAAI,CAAA;AACnC,QAAA,IAAI,CAAC,QAAA,EAAU;AACb,UAAA,MAAM,IAAI,oBAAA,CAAqB,CAAA,kBAAA,EAAqB,IAAI,CAAA,sBAAA,CAAA,EAA0B;AAAA,YAChF,IAAA,EAAM;AAAA,WACP,CAAA;AAAA,QACH;AACA,QAAA,IAAI,KAAA,CAAM,QAAA,CAAS,IAAI,CAAA,EAAG;AACxB,UAAA,MAAM,IAAI,oBAAA,CAAqB,CAAA,mCAAA,EAAsC,IAAI,CAAA,EAAA,CAAA,EAAM;AAAA,YAC7E,IAAA,EAAM;AAAA,WACP,CAAA;AAAA,QACH;AACA,QAAA,OAAO;AAAA,UACL,MAAMA,YAAA,CAAK,eAAA;AAAA,UACX,eAAe,QAAA,CAAS,aAAA;AAAA,UACxB,YAAA,EAAc,mBAAmB,QAAA,CAAS,YAAA,EAAc,CAAC,GAAG,KAAA,EAAO,IAAI,CAAC;AAAA,SAC1E;AAAA,MACF;AACA,MAAA,IAAI,UAAU,YAAA,EAAc;AAC1B,QAAA,OAAO;AAAA,UACL,GAAG,SAAA;AAAA,UACH,YAAA,EAAc,kBAAA,CAAmB,SAAA,CAAU,YAAA,EAAc,KAAK;AAAA,SAChE;AAAA,MACF;AACA,MAAA,OAAO,SAAA;AAAA,IACT,CAAC,CAAA;AACD,IAAA,OAAO,EAAE,GAAG,YAAA,EAAc,UAAA,EAAW;AAAA,EACvC;AAEA,EAAA,MAAM,WAAA,GAAc,QAAA,CAAS,WAAA,CAC1B,MAAA,CAAO,CAAC,eAAe,UAAA,CAAW,IAAA,KAASA,YAAA,CAAK,mBAAmB,CAAA,CACnE,GAAA;AAAA,IAAI,CAAC,UAAA,KACJ,UAAA,CAAW,IAAA,KAASA,aAAK,oBAAA,GACrB;AAAA,MACE,GAAG,UAAA;AAAA,MACH,YAAA,EAAc,kBAAA,CAAmB,UAAA,CAAW,YAAA,EAAc,EAAE;AAAA,KAC9D,GACA;AAAA,GACN;AAEF,EAAA,OAAO,EAAE,GAAG,QAAA,EAAU,WAAA,EAAY;AACpC;AAWO,SAAS,UAAA,CACd,UACA,OAAA,EACY;AACZ,EAAA,MAAM,SAAA,GAAY,aAAa,QAAQ,CAAA;AACvC,EAAA,MAAM,mBAAA,GAAsB,SAAA,CAAU,mBAAA,IAAuB,EAAC;AAC9D,EAAA,MAAM,QAAqB,EAAC;AAE5B,EAAA,SAAS,mBAAA,CACP,YAAA,EACA,IAAA,EACA,KAAA,EACA,aAAA,EACkB;AAClB,IAAA,MAAM,aAA8B,EAAC;AACrC,IAAA,IAAI,YAAA,GAAe,KAAA;AAEnB,IAAA,KAAA,MAAW,SAAA,IAAa,aAAa,UAAA,EAAY;AAC/C,MAAA,IAAI,SAAA,CAAU,IAAA,KAASA,YAAA,CAAK,eAAA,EAAiB;AAC3C,QAAA,MAAM,SAAA,GAAY,SAAA,CAAU,aAAA,EAAe,IAAA,CAAK,KAAA;AAChD,QAAA,UAAA,CAAW,IAAA,CAAK;AAAA,UACd,GAAG,SAAA;AAAA,UACH,YAAA,EAAc,mBAAA;AAAA,YACZ,SAAA,CAAU,YAAA;AAAA,YACV,IAAA;AAAA,YACA,KAAA;AAAA;AAAA;AAAA,YAGA,SAAA,IAAa,SAAA,KAAc,OAAA,GAAU,SAAA,GAAY;AAAA;AACnD,SACD,CAAA;AACD,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,SAAA,CAAU,IAAA,KAASA,YAAA,CAAK,KAAA,EAAO;AACjC,QAAA,MAAM,IAAI,qBAAqB,yDAAA,EAA2D;AAAA,UACxF,IAAA,EAAM;AAAA,SACP,CAAA;AAAA,MACH;AAEA,MAAA,MAAM,KAAA,GAAQ,SAAA;AAOd,MAAA,MAAM,eAAA,GAAkB,YAAA,CAAa,KAAA,EAAO,eAAe,CAAA;AAC3D,MAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,0BAAA,IAA8B,iBAAA,CAAkB,KAAK,CAAA;AAMjF,MAAA,IAAI,eAAA,IAAmB,UAAU,CAAA,EAAG;AAClC,QAAA,MAAM,IAAI,oBAAA;AAAA,UACR,CAAA,yBAAA,EAA4B,aAAA,CAAc,KAAK,CAAC,CAAA,yMAAA,CAAA;AAAA,UAIhD,EAAE,MAAM,QAAA;AAAS,SACnB;AAAA,MACF;AAEA,MAAA,MAAM,WAAA,GACJ,KAAA,GAAQ,CAAA,IACR,KAAA,CAAM,YAAA,KAAiB,MAAA,IACvB,CAAC,YAAA,CAAa,KAAA,EAAO,kBAAkB,CAAA,KACtC,eAAA,IAAmB,WAAA,CAAA;AAEtB,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,MAAM,UAAU,aAAA,CAAc,gBAAA,CAAiB,KAAA,EAAO,eAAe,GAAG,kBAAkB,CAAA;AAC1F,QAAA,KAAA,CAAM,IAAA,CAAK;AAAA,UACT,IAAA,EAAM,CAAC,GAAG,IAAI,CAAA;AAAA,UACd,WAAA,EAAa,cAAc,KAAK,CAAA;AAAA,UAChC,KAAA,EAAO,OAAA;AAAA,UACP,qBAAqB,mBAAA,CAAoB,MAAA;AAAA,YAAO,CAAC,eAC/C,oBAAA,CAAqB,KAAK,EAAE,GAAA,CAAI,UAAA,CAAW,QAAA,CAAS,IAAA,CAAK,KAAK;AAAA,WAChE;AAAA,UACA,GAAI,aAAA,KAAkB,MAAA,GAAY,EAAE,aAAA,KAAkB;AAAC,SACxD,CAAA;AACD,QAAA,YAAA,GAAe,IAAA;AACf,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,MAAM,YAAA,EAAc;AACtB,QAAA,UAAA,CAAW,IAAA,CAAK;AAAA,UACd,GAAG,KAAA;AAAA,UACH,YAAA,EAAc,mBAAA;AAAA,YACZ,KAAA,CAAM,YAAA;AAAA,YACN,CAAC,GAAG,IAAA,EAAM,aAAA,CAAc,KAAK,CAAC,CAAA;AAAA,YAC9B,KAAA,GAAQ,CAAA;AAAA;AAAA;AAAA,YAGR;AAAA;AACF,SACD,CAAA;AAAA,MACH,CAAA,MAAO;AACL,QAAA,UAAA,CAAW,KAAK,KAAK,CAAA;AAAA,MACvB;AAAA,IACF;AAEA,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,UAAA,CAAW,IAAA,CAAK,WAAA,EAAY,EAAG,cAAA,EAAgB,CAAA;AAAA,IACjD;AACA,IAAA,OAAO,EAAE,GAAG,YAAA,EAAc,UAAA,EAAW;AAAA,EACvC;AAEA,EAAA,MAAM,kBAAA,GAA8C;AAAA,IAClD,GAAG,SAAA;AAAA,IACH,cAAc,mBAAA,CAAoB,SAAA,CAAU,cAAc,EAAC,EAAG,GAAG,MAAS;AAAA,GAC5E;AAEA,EAAA,OAAO;AAAA,IACL,QAAA,EAAU;AAAA,MACR,GAAG,QAAA;AAAA,MACH,WAAA,EAAa,SAAS,WAAA,CAAY,GAAA;AAAA,QAAI,CAAC,UAAA,KACrC,UAAA,KAAe,SAAA,GAAY,kBAAA,GAAqB;AAAA;AAClD,KACF;AAAA,IACA;AAAA,GACF;AACF;AAMA,SAAS,cAAA,CAAe,MAAc,KAAA,EAA6B;AACjE,EAAA,OAAO;AAAA,IACL,MAAMA,YAAA,CAAK,QAAA;AAAA,IACX,MAAM,EAAE,IAAA,EAAMA,YAAA,CAAK,IAAA,EAAM,OAAO,IAAA,EAAK;AAAA,IACrC,KAAA,EAAO,EAAE,IAAA,EAAMA,YAAA,CAAK,QAAQ,KAAA;AAAM,GACpC;AACF;AAEA,SAAS,eAAA,CAAgB,MAAc,KAAA,EAA8B;AACnE,EAAA,OAAO;AAAA,IACL,MAAMA,YAAA,CAAK,QAAA;AAAA,IACX,MAAM,EAAE,IAAA,EAAMA,YAAA,CAAK,IAAA,EAAM,OAAO,IAAA,EAAK;AAAA,IACrC,KAAA,EAAO,EAAE,IAAA,EAAMA,YAAA,CAAK,SAAS,KAAA;AAAM,GACrC;AACF;AAEA,SAAS,WAAA,CAAY,MAAc,KAAA,EAA6B;AAC9D,EAAA,OAAO;AAAA,IACL,MAAMA,YAAA,CAAK,QAAA;AAAA,IACX,MAAM,EAAE,IAAA,EAAMA,YAAA,CAAK,IAAA,EAAM,OAAO,IAAA,EAAK;AAAA,IACrC,KAAA,EAAO,EAAE,IAAA,EAAMA,YAAA,CAAK,KAAK,KAAA,EAAO,MAAA,CAAO,KAAK,CAAA;AAAE,GAChD;AACF;AAEA,SAAS,iBAAA,GAAkC;AACzC,EAAA,OAAO;AAAA,IACL,MAAMA,YAAA,CAAK,QAAA;AAAA,IACX,MAAM,EAAE,IAAA,EAAMA,YAAA,CAAK,IAAA,EAAM,OAAO,OAAA,EAAQ;AAAA,IACxC,KAAA,EAAO;AAAA,MACL,MAAMA,YAAA,CAAK,MAAA;AAAA,MACX,MAAA,EAAQ;AAAA,QACN;AAAA,UACE,MAAMA,YAAA,CAAK,YAAA;AAAA,UACX,MAAM,EAAE,IAAA,EAAMA,YAAA,CAAK,IAAA,EAAM,OAAO,KAAA,EAAM;AAAA,UACtC,KAAA,EAAO;AAAA,YACL,MAAMA,YAAA,CAAK,MAAA;AAAA,YACX,MAAA,EAAQ;AAAA,cACN;AAAA,gBACE,MAAMA,YAAA,CAAK,YAAA;AAAA,gBACX,MAAM,EAAE,IAAA,EAAMA,YAAA,CAAK,IAAA,EAAM,OAAO,OAAA,EAAQ;AAAA,gBACxC,KAAA,EAAO;AAAA,kBACL,MAAMA,YAAA,CAAK,QAAA;AAAA,kBACX,MAAM,EAAE,IAAA,EAAMA,YAAA,CAAK,IAAA,EAAM,OAAO,YAAA;AAAa;AAC/C;AACF;AACF;AACF;AACF;AACF;AACF,GACF;AACF;AAcO,SAAS,aAAA,CACd,IAAA,EACA,QAAA,EACA,SAAA,EACA,OAAA,EAC6C;AAC7C,EAAA,MAAM,UAAU,CAAA,EAAG,UAAA,CAAW,QAAQ,CAAC,GAAG,iBAAiB,CAAA,CAAA;AAC3D,EAAA,MAAM,OAAuB,CAAC,iBAAA,IAAqB,WAAA,CAAY,OAAA,EAAS,SAAS,CAAC,CAAA;AAClF,EAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,IAAA,IAAA,CAAK,IAAA,CAAK,eAAA,CAAgB,SAAA,EAAW,IAAI,CAAC,CAAA;AAAA,EAC5C;AACA,EAAA,IAAI,OAAA,CAAQ,WAAW,MAAA,EAAW;AAChC,IAAA,IAAA,CAAK,IAAA,CAAK,cAAA,CAAe,QAAA,EAAU,OAAA,CAAQ,MAAM,CAAC,CAAA;AAAA,EACpD;AAEA,EAAA,MAAM,SAAA,GAAuB;AAAA,IAC3B,GAAG,UAAA,CAAW,OAAA,EAAS,MAAA,EAAW;AAAA,MAChC,UAAA,CAAW,OAAA,EAAS,MAAA,EAAW,CAAC,WAAW,KAAA,EAAO,MAAA,EAAW,CAAC,UAAA,CAAW,IAAI,CAAC,CAAC,CAAA,EAAG,IAAA,CAAK,KAAK,CAAC;AAAA,KAC9F,CAAA;AAAA,IACD,SAAA,EAAW;AAAA,GACb;AAEA,EAAA,MAAM,WAAA,GAAsC;AAAA,IAC1C,MAAMA,YAAA,CAAK,mBAAA;AAAA,IACX,QAAA,EAAU;AAAA,MACR,MAAMA,YAAA,CAAK,QAAA;AAAA,MACX,MAAM,EAAE,IAAA,EAAMA,YAAA,CAAK,IAAA,EAAM,OAAO,YAAA;AAAa,KAC/C;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,MAAMA,YAAA,CAAK,aAAA;AAAA,MACX,IAAA,EAAM;AAAA,QACJ,MAAMA,YAAA,CAAK,SAAA;AAAA,QACX,IAAA,EAAM;AAAA,UACJ,MAAMA,YAAA,CAAK,aAAA;AAAA,UACX,IAAA,EAAM;AAAA,YACJ,MAAMA,YAAA,CAAK,UAAA;AAAA,YACX,MAAM,EAAE,IAAA,EAAMA,YAAA,CAAK,IAAA,EAAM,OAAO,QAAA;AAAS;AAC3C;AACF;AACF;AACF,GACF;AAEA,EAAA,MAAM,SAAA,GAAqC;AAAA,IACzC,MAAMA,YAAA,CAAK,oBAAA;AAAA,IACX,SAAA,EAAW,OAAA;AAAA,IACX,MAAM,EAAE,IAAA,EAAMA,YAAA,CAAK,IAAA,EAAM,OAAO,sBAAA,EAAuB;AAAA,IACvD,mBAAA,EAAqB,CAAC,WAAA,EAAa,GAAG,KAAK,mBAAmB,CAAA;AAAA,IAC9D,YAAA,EAAc;AAAA,MACZ,MAAMA,YAAA,CAAK,aAAA;AAAA,MACX,UAAA,EAAY,CAAC,SAAS;AAAA;AACxB,GACF;AAEA,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,EAAE,IAAA,EAAMA,YAAA,CAAK,UAAU,WAAA,EAAa,CAAC,SAAS,CAAA,EAAE;AAAA,IAC1D;AAAA,GACF;AACF;AAGO,SAAS,wBAAwB,QAAA,EAAsC;AAC5E,EAAA,OAAOC,cAAM,QAAA,EAAU;AAAA,IACrB,UAAU,IAAA,EAAM;AACd,MAAA,IAAI,KAAK,IAAA,CAAK,KAAA,KAAU,mBAAmB,IAAA,CAAK,IAAA,CAAK,UAAU,kBAAA,EAAoB;AACjF,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,OAAO,MAAA;AAAA,IACT;AAAA,GACD,CAAA;AACH;;;AC/eO,IAAM,sBAAA,GAAyB;AAEtC,IAAMC,kBAAAA,GAAoB,YAAA;AAE1B,SAAS,SAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,CAAC,KAAA,CAAM,QAAQ,KAAK,CAAA;AAC5E;AAEA,SAAS,kBAAkB,KAAA,EAA+C;AACxE,EAAA,OAAO,SAAS,KAAK,CAAA,IAAK,MAAM,OAAA,CAAQ,KAAA,CAAM,OAAO,CAAC,CAAA;AACxD;AAEA,SAAS,gBAAgB,GAAA,EAAsB;AAC7C,EAAA,OAAO,GAAA,CAAI,QAAA,CAASA,kBAAiB,CAAA,IAAK,GAAA,KAAQA,kBAAAA;AACpD;AAGO,SAAS,wBAAwB,KAAA,EAAwC;AAC9E,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,UAAA,GAAa,YAAY,CAAA;AAClD,EAAA,OAAO,QAAA,CAAS,UAAU,CAAA,IAAK,UAAA,CAAW,MAAM,CAAA,KAAM,sBAAA;AACxD;AAWO,SAAS,2BAA2B,MAAA,EAGzC;AACA,EAAA,MAAM,eAAyC,EAAC;AAChD,EAAA,MAAM,QAAkC,EAAC;AACzC,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,IAAI,uBAAA,CAAwB,KAAK,CAAA,EAAG;AAClC,MAAA,YAAA,CAAa,KAAK,KAAK,CAAA;AAAA,IACzB,CAAA,MAAO;AACL,MAAA,KAAA,CAAM,KAAK,KAAK,CAAA;AAAA,IAClB;AAAA,EACF;AACA,EAAA,OAAO,EAAE,cAAc,KAAA,EAAM;AAC/B;AAEA,SAAS,KAAK,KAAA,EAAyB;AACrC,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,OAAO,KAAA,CAAM,IAAI,IAAI,CAAA;AAAA,EACvB;AACA,EAAA,IAAI,QAAA,CAAS,KAAK,CAAA,EAAG;AACnB,IAAA,MAAM,SAAkC,EAAC;AACzC,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAChD,MAAA,MAAA,CAAO,GAAG,CAAA,GACR,eAAA,CAAgB,GAAG,CAAA,IAAK,iBAAA,CAAkB,KAAK,CAAA,GAAI,eAAA,CAAgB,KAAK,CAAA,GAAI,IAAA,CAAK,KAAK,CAAA;AAAA,IAC1F;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,gBAAgB,UAAA,EAA2C;AAClE,EAAA,MAAM,SAAkC,EAAC;AACzC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,UAAU,CAAA,EAAG;AACrD,IAAA,MAAA,CAAO,GAAG,CAAA,GACR,GAAA,KAAQ,OAAA,GACH,KAAA,CAAoB,OAAO,CAAC,IAAA,KAAS,IAAA,KAAS,IAAA,IAAQ,SAAS,MAAS,CAAA,CAAE,IAAI,IAAI,CAAA,GACnF,KAAK,KAAK,CAAA;AAAA,EAClB;AACA,EAAA,OAAO,MAAA;AACT;AAeO,SAAS,oBAAuB,IAAA,EAAiC;AACtE,EAAA,OAAO,KAAK,IAAI,CAAA;AAClB;;;AC9DO,SAAS,eAAA,CAAgB,OAAe,WAAA,EAA6B;AAC1E,EAAA,OAAO,CAAA,iDAAA,EAAoD,kBAAA;AAAA,IACzD;AAAA,GACD,CAAA,cAAA,EAAiB,kBAAA,CAAmB,WAAW,CAAC,CAAA,CAAA;AACnD;AAGO,SAAS,gBAAgB,MAAA,EAA2C;AACzE,EAAA,IAAI,CAAC,QAAQ,OAAO,MAAA;AACpB,EAAA,MAAM,OAAA,GAAU,OAAO,MAAM,CAAA;AAC7B,EAAA,IAAI,MAAA,CAAO,QAAA,CAAS,OAAO,CAAA,EAAG;AAC5B,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,OAAA,GAAU,GAAI,CAAA;AAAA,EACnC;AACA,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA;AAC9B,EAAA,IAAI,MAAA,CAAO,QAAA,CAAS,IAAI,CAAA,EAAG;AACzB,IAAA,OAAO,KAAK,GAAA,CAAI,CAAA,EAAG,IAAA,GAAO,IAAA,CAAK,KAAK,CAAA;AAAA,EACtC;AACA,EAAA,OAAO,MAAA;AACT;AAGO,SAAS,qBAAA,CACd,UACA,SAAA,EACkB;AAClB,EAAA,MAAM,WAAW,IAAI,GAAA;AAAA,IAAA,CAClB,YAAA,CAAa,QAAQ,CAAA,CAAE,mBAAA,IAAuB,EAAC,EAAG,GAAA;AAAA,MACjD,CAAC,UAAA,KAAe,UAAA,CAAW,QAAA,CAAS,IAAA,CAAK;AAAA;AAC3C,GACF;AACA,EAAA,MAAM,SAA2B,EAAC;AAClC,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA,EAAG;AACrD,IAAA,IAAI,QAAA,CAAS,GAAA,CAAI,IAAI,CAAA,EAAG;AACtB,MAAA,MAAA,CAAO,IAAI,CAAA,GAAI,KAAA;AAAA,IACjB;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,kBAAkB,MAAA,EAAyB;AAClD,EAAA,OAAO,MAAA,KAAW,GAAA,IAAO,MAAA,KAAW,GAAA,IAAO,MAAA,IAAU,GAAA;AACvD;AAEA,SAASC,UAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,CAAC,KAAA,CAAM,QAAQ,KAAK,CAAA;AAC5E;AAUA,SAAS,uBAAA,CAAwB,QAAkC,OAAA,EAA+B;AAChG,EAAA,IAAI,CAAC,QAAQ,kBAAA,EAAoB;AACjC,EAAA,IAAI;AACF,IAAA,OAAA,CAAQ,mBAAmB,MAAM,CAAA;AAAA,EACnC,CAAA,CAAA,MAAQ;AAAA,EAER;AACF;AASA,eAAe,kBACb,QAAA,EAC+C;AAC/C,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAW,MAAM,QAAA,CAAS,IAAA,EAAK;AAGrC,IAAA,MAAM,SAAS,OAAA,EAAS,MAAA;AACxB,IAAA,OAAO,MAAM,OAAA,CAAQ,MAAM,KAAK,MAAA,CAAO,MAAA,GAAS,IAAI,MAAA,GAAS,KAAA,CAAA;AAAA,EAC/D,CAAA,CAAA,MAAQ;AAEN,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAOA,SAAS,eAAA,CACP,OAAA,EACA,MAAA,EACA,KAAA,EACA,OAAA,EACQ;AACR,EAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,MAAA,KAAW,GAAG,OAAO,OAAA;AAC3C,EAAA,MAAM,OAAA,GAAU,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU,KAAA,CAAM,OAAO,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AAC7E,EAAA,IAAI,OAAA,CAAQ,oBAAA,KAAyB,KAAA,EAAO,OAAO,OAAA;AACnD,EAAA,MAAM,SAAA,GAAY,aAAA,CAAc,KAAA,EAAO,MAAM,CAAA;AAE7C,EAAA,OAAO,SAAA,GAAY,GAAG,OAAO;;AAAA,EAAO,SAAS;AAAA,CAAA,GAAO,OAAA;AACtD;AAWA,eAAsB,UAAA,CACpB,QAAA,EACA,SAAA,EACA,OAAA,EACkC;AAClC,EAAA,MAAM,KAAA,GAAQC,aAAA,CAAM,uBAAA,CAAwB,QAAQ,CAAC,CAAA;AACrD,EAAA,MAAM,IAAA,GAAO,KAAK,SAAA,CAAU;AAAA,IAC1B,KAAA;AAAA,IACA,SAAA,EAAW,qBAAA,CAAsB,QAAA,EAAU,SAAS;AAAA,GACrD,CAAA;AACD,EAAA,MAAM,GAAA,GAAM,eAAA,CAAgB,OAAA,CAAQ,KAAA,EAAO,QAAQ,WAAW,CAAA;AAE9D,EAAA,OAAO,YAAY,YAAY;AAC7B,IAAA,IAAI,QAAA;AACJ,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAkD;AAAA,QACtD,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS;AAAA,UACP,cAAA,EAAgB,kBAAA;AAAA,UAChB,aAAA,EAAe,CAAA,OAAA,EAAU,OAAA,CAAQ,KAAK,CAAA;AAAA,SACxC;AAAA,QACA;AAAA,OACF;AACA,MAAA,IAAI,OAAA,CAAQ,MAAA,EAAQ,IAAA,CAAK,MAAA,GAAS,OAAA,CAAQ,MAAA;AAC1C,MAAA,IAAI,OAAA,CAAQ,KAAA,EAAO,IAAA,CAAK,KAAA,GAAQ,OAAA,CAAQ,KAAA;AACxC,MAAA,IAAI,OAAA,CAAQ,IAAA,EAAM,IAAA,CAAK,IAAA,GAAO,OAAA,CAAQ,IAAA;AACtC,MAAA,QAAA,GAAW,MAAM,OAAA,CAAQ,KAAA,CAAM,GAAA,EAAK,IAAI,CAAA;AAAA,IAC1C,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,oBAAA;AAAA,QACR,CAAA,2CAAA,EAA8C,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA;AAAA,QAC3D,EAAE,IAAA,EAAM,SAAA,EAAW,KAAA,EAAO,SAAA,EAAW,MAAM,KAAA;AAAM,OACnD;AAAA,IACF;AAEA,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,SAAA,GAAY,iBAAA,CAAkB,QAAA,CAAS,MAAM,CAAA;AAInD,MAAA,MAAM,MAAA,GAAS,SAAA,GAAY,KAAA,CAAA,GAAY,MAAM,kBAAkB,QAAQ,CAAA;AACvE,MAAA,MAAM,IAAI,oBAAA;AAAA,QACR,eAAA;AAAA,UACE,CAAA,+BAAA,EAAkC,SAAS,MAAM,CAAA,CAAA,CAAA;AAAA,UACjD,MAAA;AAAA,UACA,KAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA;AAAA,UACE,IAAA,EAAM,MAAA;AAAA,UACN,QAAQ,QAAA,CAAS,MAAA;AAAA,UACjB,MAAA;AAAA,UACA,KAAA;AAAA,UACA,SAAA;AAAA,UACA,YAAA,EAAc,YAAY,eAAA,CAAgB,QAAA,CAAS,QAAQ,GAAA,CAAI,aAAa,CAAC,CAAA,GAAI,KAAA;AAAA;AACnF,OACF;AAAA,IACF;AAEA,IAAA,IAAI,OAAA;AAIJ,IAAA,IAAI;AACF,MAAA,OAAA,GAAW,MAAM,SAAS,IAAA,EAAK;AAAA,IACjC,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,qBAAqB,kDAAA,EAAoD;AAAA,QACjF,IAAA,EAAM,SAAA;AAAA,QACN,KAAA;AAAA,QACA,SAAA,EAAW,IAAA;AAAA,QACX;AAAA,OACD,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,OAAA,CAAQ,MAAA,IAAU,OAAA,CAAQ,MAAA,CAAO,SAAS,CAAA,EAAG;AAO/C,MAAA,MAAM,EAAE,YAAA,EAAc,KAAA,EAAM,GAAI,0BAAA,CAA2B,QAAQ,MAAM,CAAA;AACzE,MAAA,MAAM,SAAA,GACJ,OAAA,CAAQ,iBAAA,KAAsB,OAAA,IAC9B,KAAA,CAAM,MAAA,KAAW,CAAA,IACjB,YAAA,CAAa,MAAA,GAAS,CAAA,IACtBD,SAAAA,CAAS,OAAA,CAAQ,IAAI,CAAA;AAEvB,MAAA,IAAI,CAAC,SAAA,EAAW;AACd,QAAA,MAAM,IAAI,oBAAA;AAAA,UACR,eAAA,CAAgB,qCAAA,EAAuC,OAAA,CAAQ,MAAA,EAAQ,OAAO,OAAO,CAAA;AAAA,UACrF,EAAE,IAAA,EAAM,SAAA,EAAW,MAAA,EAAQ,OAAA,CAAQ,QAAQ,KAAA;AAAM,SACnD;AAAA,MACF;AACA,MAAA,uBAAA,CAAwB,cAAc,OAAO,CAAA;AAAA,IAC/C;AAEA,IAAA,IAAI,CAAC,OAAA,CAAQ,IAAA,IAAQ,OAAO,OAAA,CAAQ,SAAS,QAAA,EAAU;AACrD,MAAA,MAAM,IAAI,qBAAqB,4CAAA,EAA8C;AAAA,QAC3E,IAAA,EAAM,SAAA;AAAA,QACN;AAAA,OACD,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,OAAA,CAAQ,IAAA;AAAA,EACjB,CAAA,EAAG,QAAQ,KAAK,CAAA;AAClB;;;AC1MA,SAAS,YAAY,KAAA,EAA+C;AAClE,EAAA,OAAO,KAAA,IAAS,MAAA;AAClB;AAGO,SAAS,eAAA,GAA+B;AAE7C,EAAA,IAAI,OAAO,OAAA,KAAY,WAAA,IAAe,CAAC,QAAQ,GAAA,EAAK;AAClD,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,MAAA;AAAA,MACP,WAAA,EAAa,MAAA;AAAA,MACb,aAAA,EAAe,MAAA;AAAA,MACf,YAAA,EAAc;AAAA,KAChB;AAAA,EACF;AACA,EAAA,MAAM,aAAA,GAAgB,WAAA;AAAA,IACpB,OAAA,CAAQ,GAAA,CAAI,uBAAA,IAA2B,OAAA,CAAQ,GAAA,CAAI;AAAA,GACrD;AACA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,WAAA;AAAA,MACL,OAAA,CAAQ,GAAA,CAAI,mBAAA,IAAuB,OAAA,CAAQ,GAAA,CAAI;AAAA,KACjD;AAAA,IACA,WAAA,EAAa,WAAA;AAAA,MACX,OAAA,CAAQ,GAAA,CAAI,sBAAA,IAA0B,OAAA,CAAQ,GAAA,CAAI;AAAA,KACpD;AAAA,IACA,aAAA;AAAA;AAAA,IAEA,YAAA,EAAc,WAAA,CAAY,OAAA,CAAQ,GAAA,CAAI,+BAA+B;AAAA,GACvE;AACF;AC1DA,SAAS,YAAY,KAAA,EAA2C;AAC9D,EAAA,OAAO,KAAA,CAAM,aAAa,EAAC;AAC7B;AAEA,SAAS,WAAA,CAAY,OAAkB,IAAA,EAAuB;AAC5D,EAAA,OAAO,WAAA,CAAY,KAAK,CAAA,CAAE,IAAA,CAAK,CAAC,QAAA,KAAa,QAAA,CAAS,IAAA,CAAK,KAAA,KAAU,IAAI,CAAA;AAC3E;AAEA,SAAS,eAAA,GAAgC;AACvC,EAAA,OAAO;AAAA,IACL,MAAMH,YAAAA,CAAK,QAAA;AAAA,IACX,MAAM,EAAE,IAAA,EAAMA,YAAAA,CAAK,IAAA,EAAM,OAAO,SAAA,EAAU;AAAA,IAC1C,OAAO,EAAE,IAAA,EAAMA,YAAAA,CAAK,OAAA,EAAS,OAAO,IAAA;AAAK,GAC3C;AACF;AAEA,SAAS,eAAe,MAAA,EAA8B;AACpD,EAAA,OAAO;AAAA,IACL,MAAMA,YAAAA,CAAK,QAAA;AAAA,IACX,MAAM,EAAE,IAAA,EAAMA,YAAAA,CAAK,IAAA,EAAM,OAAO,QAAA,EAAS;AAAA,IACzC,OAAO,EAAE,IAAA,EAAMA,YAAAA,CAAK,MAAA,EAAQ,OAAO,MAAA;AAAO,GAC5C;AACF;AAEA,SAAS,eAAA,CAAgB,OAAkB,IAAA,EAAiC;AAE1E,EAAA,IAAI,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,IAAI,CAAA,EAAG;AACrC,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,MAAM,YAA4B,EAAC;AACnC,EAAA,IAAI,KAAK,OAAA,IAAW,CAAC,WAAA,CAAY,KAAA,EAAO,SAAS,CAAA,EAAG;AAClD,IAAA,SAAA,CAAU,IAAA,CAAK,iBAAiB,CAAA;AAAA,EAClC;AACA,EAAA,IAAI,KAAK,MAAA,KAAW,MAAA,IAAa,CAAC,WAAA,CAAY,KAAA,EAAO,QAAQ,CAAA,EAAG;AAC9D,IAAA,SAAA,CAAU,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,MAAM,CAAC,CAAA;AAAA,EAC5C;AACA,EAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAC1B,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,OAAO,EAAE,GAAG,KAAA,EAAO,SAAA,EAAW,CAAC,GAAG,WAAA,CAAY,KAAK,CAAA,EAAG,GAAG,SAAS,CAAA,EAAE;AACtE;AAEA,SAAS,sBAAA,CACP,cACA,IAAA,EACkB;AAClB,EAAA,MAAM,UAAA,GAA8B,YAAA,CAAa,UAAA,CAAW,GAAA,CAAI,CAAC,SAAA,KAA6B;AAC5F,IAAA,IAAI,SAAA,CAAU,IAAA,KAASA,YAAAA,CAAK,KAAA,EAAO;AACjC,MAAA,OAAO,eAAA,CAAgB,WAAW,IAAI,CAAA;AAAA,IACxC;AAGA,IAAA,IAAI,SAAA,CAAU,IAAA,KAASA,YAAAA,CAAK,eAAA,EAAiB;AAC3C,MAAA,OAAO;AAAA,QACL,GAAG,SAAA;AAAA,QACH,YAAA,EAAc,sBAAA,CAAuB,SAAA,CAAU,YAAA,EAAc,IAAI;AAAA,OACnE;AAAA,IACF;AACA,IAAA,OAAO,SAAA;AAAA,EACT,CAAC,CAAA;AACD,EAAA,OAAO,EAAE,GAAG,YAAA,EAAc,UAAA,EAAW;AACvC;AAOO,SAAS,cAAA,CAAe,UAAwB,IAAA,EAAoC;AACzF,EAAA,IAAI,CAAC,IAAA,CAAK,OAAA,IAAW,IAAA,CAAK,WAAW,MAAA,EAAW;AAC9C,IAAA,OAAO,QAAA;AAAA,EACT;AACA,EAAA,MAAM,SAAA,GAAY,aAAa,QAAQ,CAAA;AACvC,EAAA,MAAM,QAAA,GAAoC;AAAA,IACxC,GAAG,SAAA;AAAA,IACH,YAAA,EAAc,sBAAA,CAAuB,SAAA,CAAU,YAAA,EAAc,IAAI;AAAA,GACnE;AACA,EAAA,OAAO;AAAA,IACL,GAAG,QAAA;AAAA,IACH,WAAA,EAAa,SAAS,WAAA,CAAY,GAAA;AAAA,MAAI,CAAC,UAAA,KACrC,UAAA,KAAe,SAAA,GAAY,QAAA,GAAW;AAAA;AACxC,GACF;AACF;;;AC1FA,IAAM,KAAA,uBAAY,GAAA,EAAyC;AAE3D,SAAS,SAAS,OAAA,EAAiC;AACjD,EAAA,OAAO,CAAA,EAAG,OAAA,CAAQ,KAAK,CAAA,CAAA,EAAI,OAAA,CAAQ,WAAW,CAAA,CAAA,EAAI,OAAA,CAAQ,OAAA,GAAU,CAAA,GAAI,CAAC,CAAA,CAAA;AAC3E;AAEO,SAAS,gBAAgB,OAAA,EAAiC;AAC/D,EAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,OAAA,GAAU,wBAAA,GAA2B,oBAAA;AAC1D,EAAA,OAAO,CAAA,QAAA,EAAW,IAAI,CAAA,QAAA,EAAW,kBAAA;AAAA,IAC/B,OAAA,CAAQ;AAAA,GACT,CAAA,cAAA,EAAiB,kBAAA,CAAmB,OAAA,CAAQ,WAAW,CAAC,CAAA,QAAA,CAAA;AAC3D;AAEA,eAAe,aAAa,OAAA,EAAsD;AAChF,EAAA,OAAO,YAAY,YAAY;AAC7B,IAAA,IAAI,QAAA;AACJ,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAoB;AAAA,QACxB,SAAS,EAAE,aAAA,EAAe,CAAA,OAAA,EAAU,OAAA,CAAQ,KAAK,CAAA,CAAA;AAAG,OACtD;AACA,MAAA,IAAI,OAAA,CAAQ,MAAA,EAAQ,IAAA,CAAK,MAAA,GAAS,OAAA,CAAQ,MAAA;AAC1C,MAAA,QAAA,GAAW,MAAM,OAAA,CAAQ,KAAA,CAAM,eAAA,CAAgB,OAAO,GAAG,IAAI,CAAA;AAAA,IAC/D,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,oBAAA,CAAqB,CAAA,sCAAA,EAAyC,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA,EAAI;AAAA,QACvF,IAAA,EAAM,SAAA;AAAA,QACN,SAAA,EAAW,IAAA;AAAA,QACX;AAAA,OACD,CAAA;AAAA,IACH;AACA,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,oBAAA,CAAqB,CAAA,gCAAA,EAAmC,QAAA,CAAS,MAAM,CAAA,CAAA,CAAA,EAAK;AAAA,QACpF,IAAA,EAAM,MAAA;AAAA,QACN,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,SAAA,EAAW,QAAA,CAAS,MAAA,KAAW,GAAA,IAAO,SAAS,MAAA,IAAU;AAAA,OAC1D,CAAA;AAAA,IACH;AACA,IAAA,MAAM,OAAA,GAAW,MAAM,QAAA,CAAS,IAAA,EAAK;AAQrC,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,KAAK,CAAA,EAAG;AACjC,MAAA,MAAM,IAAI,qBAAqB,iDAAA,EAAmD;AAAA,QAChF,IAAA,EAAM;AAAA,OACP,CAAA;AAAA,IACH;AACA,IAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,MAClC,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,cAAc,IAAA,CAAK;AAAA,KACrB,CAAE,CAAA;AAAA,EACJ,CAAA,EAAG,QAAQ,KAAK,CAAA;AAClB;AAOO,SAAS,WAAW,OAAA,EAAsD;AAC/E,EAAA,MAAM,GAAA,GAAM,SAAS,OAAO,CAAA;AAC5B,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,GAAA,CAAI,GAAG,CAAA;AAC5B,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,MAAM,UAAU,YAAA,CAAa,OAAO,CAAA,CAAE,KAAA,CAAM,CAAC,KAAA,KAAU;AACrD,IAAA,KAAA,CAAM,OAAO,GAAG,CAAA;AAChB,IAAA,MAAM,KAAA;AAAA,EACR,CAAC,CAAA;AACD,EAAA,KAAA,CAAM,GAAA,CAAI,KAAK,OAAO,CAAA;AACtB,EAAA,OAAO,OAAA;AACT;AAGO,SAAS,gBAAA,GAAyB;AACvC,EAAA,KAAA,CAAM,KAAA,EAAM;AACd;;;AC5FA,IAAME,kBAAAA,GAAoB,YAAA;AAE1B,SAASC,UAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,CAAC,KAAA,CAAM,QAAQ,KAAK,CAAA;AAC5E;AAEA,SAASE,mBAAkB,KAAA,EAA+C;AACxE,EAAA,OAAOF,UAAS,KAAK,CAAA,IAAK,MAAM,OAAA,CAAQ,KAAA,CAAM,OAAO,CAAC,CAAA;AACxD;AAOO,SAAS,UAAa,IAAA,EAA8B;AACzD,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,EAAG;AACvB,IAAA,OAAO,KAAK,GAAA,CAAI,CAAC,IAAA,KAAS,SAAA,CAAU,IAAI,CAAC,CAAA;AAAA,EAC3C;AACA,EAAA,IAAIA,SAAAA,CAAS,IAAI,CAAA,EAAG;AAClB,IAAA,MAAM,SAAkC,EAAC;AACzC,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,EAAG;AAC/C,MAAA,IACE,GAAA,CAAI,SAASD,kBAAiB,CAAA,IAC9B,QAAQA,kBAAAA,IACRG,kBAAAA,CAAkB,KAAK,CAAA,EACvB;AACA,QAAA,MAAA,CAAO,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,CAACH,kBAAAA,CAAkB,MAAM,CAAC,CAAA,GAAI,SAAA,CAAU,KAAA,CAAM,KAAK,CAAA;AAAA,MACzE,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,GAAG,CAAA,GAAI,SAAA,CAAU,KAAK,CAAA;AAAA,MAC/B;AAAA,IACF;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAA;AACT;AAOO,SAAS,iBAAoB,IAAA,EAA8B;AAChE,EAAA,IAAIC,SAAAA,CAAS,IAAI,CAAA,EAAG;AAClB,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA;AAC7B,IAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,MAAA,OAAO,IAAA,CAAK,IAAA,CAAK,CAAC,CAAW,CAAA;AAAA,IAC/B;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;;;ACmBA,IAAM,cAAA,GAAiB,OAAA;AAEvB,IAAM,eAAA,GAAkB,CAAA;AACxB,IAAM,sBAAA,GAAyB,GAAA;AAC/B,IAAM,0BAAA,GAA6B,GAAA;AACnC,IAAM,wBAAA,GAA2B,EAAA;AAUjC,SAASA,UAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,CAAC,KAAA,CAAM,QAAQ,KAAK,CAAA;AAC5E;AAGO,SAAS,aAAA,CAAc,MAAe,IAAA,EAA2C;AACtF,EAAA,IAAI,OAAA,GAAqB,CAAC,IAAI,CAAA;AAC9B,EAAA,KAAA,MAAW,WAAW,IAAA,EAAM;AAC1B,IAAA,MAAM,OAAkB,EAAC;AACzB,IAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,MAAA,IAAIA,SAAAA,CAAS,KAAK,CAAA,EAAG;AACnB,QAAA,MAAM,KAAA,GAAQ,MAAM,OAAO,CAAA;AAC3B,QAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,UAAA,IAAA,CAAK,IAAA,CAAK,GAAG,KAAK,CAAA;AAAA,QACpB,CAAA,MAAA,IAAW,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW;AAChD,UAAA,IAAA,CAAK,KAAK,KAAK,CAAA;AAAA,QACjB;AAAA,MACF;AAAA,IACF;AACA,IAAA,OAAA,GAAU,IAAA;AAAA,EACZ;AACA,EAAA,OAAO,OAAA,CAAQ,OAAOA,SAAQ,CAAA;AAChC;AAEA,SAAS,eAAe,OAAA,EAAqE;AAC3F,EAAA,MAAM,MAAM,eAAA,EAAgB;AAC5B,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,IAAS,GAAA,CAAI,KAAA;AACnC,EAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,WAAA,IAAe,GAAA,CAAI,WAAA,IAAe,QAAA;AAC9D,EAAA,MAAM,OAAA,GAAU,QAAQ,OAAA,IAAW,KAAA;AAInC,EAAA,MAAM,KAAA,GAAQ,UACT,OAAA,CAAQ,YAAA,IAAgB,IAAI,YAAA,GAC5B,OAAA,CAAQ,iBAAiB,GAAA,CAAI,aAAA;AAIlC,EAAA,IAAI,CAAC,KAAA,IAAS,CAAC,KAAA,EAAO;AACpB,IAAA,MAAM,UAAoB,EAAC;AAC3B,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,OAAA,CAAQ,IAAA;AAAA,QACN;AAAA,OACF;AAAA,IACF;AACA,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,OAAA,CAAQ,IAAA;AAAA,QACN,UACI,8IAAA,GACA;AAAA,OACN;AAAA,IACF;AACA,IAAA,MAAM,IAAI,oBAAA;AAAA,MACR,CAAA,2CAAA,EAA8C,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,MAChE,EAAE,MAAM,QAAA;AAAS,KACnB;AAAA,EACF;AAEA,EAAA,MAAM,KAAA,GAAqB;AAAA,IACzB,OAAA,EAAS,QAAQ,OAAA,IAAW,eAAA;AAAA,IAC5B,WAAA,EAAa,QAAQ,YAAA,IAAgB,sBAAA;AAAA,IACrC,UAAA,EAAY,QAAQ,eAAA,IAAmB;AAAA,GACzC;AAEA,EAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,KAAA,IAAS,UAAA,CAAW,KAAA;AAE9C,EAAA,MAAM,OAAA,GAA4B;AAAA,IAChC,KAAA;AAAA,IACA,WAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAA;AAAA;AAAA,IAEA,QAAQ,OAAA,CAAQ,MAAA,KAAW,IAAA,GAAO,MAAA,GAAa,QAAQ,MAAA,IAAU,cAAA;AAAA,IACjE,KAAA,EAAO,SAAA;AAAA,IACP,KAAA;AAAA,IACA,0BAAA,EAA4B,QAAQ,0BAAA,IAA8B,IAAA;AAAA,IAClE,cAAA,EAAgB,QAAQ,cAAA,IAAkB,wBAAA;AAAA,IAC1C,oBAAA,EAAsB,QAAQ,oBAAA,IAAwB,IAAA;AAAA,IACtD,iBAAA,EAAmB,QAAQ,iBAAA,IAAqB;AAAA,GAClD;AACA,EAAA,IAAI,QAAQ,kBAAA,EAAoB;AAC9B,IAAA,OAAA,CAAQ,qBAAqB,OAAA,CAAQ,kBAAA;AAAA,EACvC;AACA,EAAA,IAAI,OAAA,CAAQ,MAAA,EAAQ,OAAA,CAAQ,MAAA,GAAS,OAAA,CAAQ,MAAA;AAC7C,EAAA,IAAI,OAAA,CAAQ,IAAA,EAAM,OAAA,CAAQ,IAAA,GAAO,OAAA,CAAQ,IAAA;AACzC,EAAA,IAAI,OAAA,CAAQ,KAAA,EAAO,OAAA,CAAQ,KAAA,GAAQ,OAAA,CAAQ,KAAA;AAC3C,EAAA,OAAO,OAAA;AACT;AAOA,eAAe,WAAA,CACb,IAAA,EACA,IAAA,EACA,SAAA,EACA,OAAA,EACe;AACf,EAAA,MAAM,OAAA,GAAU,aAAA,CAAc,IAAA,EAAM,IAAA,CAAK,IAAI,CAAA;AAC7C,EAAA,MAAM,WAAW,OAAA,CAAQ,MAAA;AAAA,IACvB,CAAC,MAAA,KACC,OAAO,MAAA,CAAO,cAAc,CAAA,KAAM,QAAA,KACjC,IAAA,CAAK,aAAA,KAAkB,MAAA,IAAa,MAAA,CAAO,cAAc,MAAM,IAAA,CAAK,aAAA;AAAA,GACzE;AACA,EAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,MAAA,uBAAa,GAAA,EAAuC;AAC1D,EAAA,KAAA,MAAW,UAAU,QAAA,EAAU;AAC7B,IAAA,MAAM,QAAA,GAAW,OAAO,cAAc,CAAA;AACtC,IAAA,MAAM,GAAA,GAAM,OAAO,YAAY,CAAA;AAC/B,IAAA,IAAI,CAACA,UAAS,GAAG,CAAA,IAAK,OAAO,GAAA,CAAI,IAAI,MAAM,QAAA,EAAU;AACnD,MAAA,MAAM,IAAI,oBAAA;AAAA,QACR,CAAA,cAAA,EAAiB,KAAK,WAAW,CAAA,wCAAA,CAAA;AAAA,QACjC,EAAE,MAAM,QAAA;AAAS,OACnB;AAAA,IACF;AACA,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,GAAA,CAAI,QAAQ,KAAK,EAAC;AACvC,IAAA,KAAA,CAAM,KAAK,MAAM,CAAA;AACjB,IAAA,MAAA,CAAO,GAAA,CAAI,UAAU,KAAK,CAAA;AAAA,EAC5B;AAEA,EAAA,MAAM,QAAA,uBAAe,GAAA,EAAqB;AAE1C,EAAA,MAAM,OAAA,CAAQ,GAAA;AAAA,IACZ,CAAC,GAAG,MAAA,CAAO,OAAA,EAAS,CAAA,CAAE,GAAA,CAAI,OAAO,CAAC,QAAA,EAAU,KAAK,CAAA,KAAM;AACrD,MAAA,MAAM,GAAA,GAAM;AAAA,QACV,GAAG,IAAI,GAAA;AAAA,UACL,KAAA,CAAM,GAAA,CAAI,CAAC,MAAA,KAAW;AACpB,YAAA,MAAM,GAAA,GAAM,OAAO,YAAY,CAAA;AAC/B,YAAA,OAAO,GAAA,CAAI,EAAA;AAAA,UACb,CAAC;AAAA;AACH,OACF;AACA,MAAA,MAAM,OAAA,CAAQ,GAAA;AAAA,QACZ,MAAM,GAAA,EAAK,OAAA,CAAQ,cAAc,CAAA,CAAE,GAAA,CAAI,OAAO,OAAA,KAAY;AACxD,UAAA,MAAM,EAAE,UAAU,OAAA,EAAQ,GAAI,cAAc,IAAA,EAAM,QAAA,EAAU,OAAA,CAAQ,MAAA,EAAQ,OAAO,CAAA;AACnF,UAAA,MAAM,UAAU,MAAM,eAAA;AAAA,YACpB,QAAA;AAAA,YACA,EAAE,GAAG,SAAA,EAAW,SAAA,EAAW,OAAA,EAAQ;AAAA,YACnC;AAAA,WACF;AACA,UAAA,MAAM,UAAA,GAAa,QAAQ,OAAO,CAAA;AAClC,UAAA,MAAM,KAAA,GACJA,SAAAA,CAAS,UAAU,CAAA,IAAK,KAAA,CAAM,OAAA,CAAQ,UAAA,CAAW,OAAO,CAAC,CAAA,GACpD,UAAA,CAAW,OAAO,CAAA,GACnB,MAAA;AACN,UAAA,IAAI,CAAC,KAAA,EAAO;AACV,YAAA,MAAM,IAAI,oBAAA;AAAA,cACR,CAAA,oBAAA,EAAuB,QAAQ,CAAA,eAAA,EAAkB,OAAO,CAAA,2EAAA,CAAA;AAAA,cAExD,EAAE,MAAM,QAAA;AAAS,aACnB;AAAA,UACF;AACA,UAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,YAAA,IAAIA,SAAAA,CAAS,IAAI,CAAA,EAAG;AAClB,cAAA,MAAM,GAAA,GAAM,KAAK,KAAK,CAAA;AACtB,cAAA,IAAIA,UAAS,GAAG,CAAA,IAAK,OAAO,GAAA,CAAI,IAAI,MAAM,QAAA,EAAU;AAClD,gBAAA,QAAA,CAAS,GAAA,CAAI,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,GAAA,CAAI,IAAI,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,IAAA,CAAK,WAAW,CAAC,CAAA;AAAA,cACjE;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAC;AAAA,OACH;AAAA,IACF,CAAC;AAAA,GACH;AAEA,EAAA,KAAA,MAAW,UAAU,QAAA,EAAU;AAC7B,IAAA,MAAM,QAAA,GAAW,OAAO,cAAc,CAAA;AACtC,IAAA,MAAM,GAAA,GAAM,OAAO,YAAY,CAAA;AAC/B,IAAA,MAAM,GAAA,GAAM,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,IAAI,EAAE,CAAA,CAAA;AACjC,IAAA,IAAI,CAAC,QAAA,CAAS,GAAA,CAAI,GAAG,CAAA,EAAG;AACtB,MAAA,MAAM,IAAI,oBAAA;AAAA,QACR,wCAAwC,GAAA,CAAI,EAAE,cAAc,QAAQ,CAAA,aAAA,EACpD,KAAK,WAAW,CAAA,EAAA,CAAA;AAAA,QAChC,EAAE,MAAM,QAAA;AAAS,OACnB;AAAA,IACF;AACA,IAAA,MAAA,CAAO,IAAA,CAAK,WAAW,CAAA,GAAI,QAAA,CAAS,IAAI,GAAG,CAAA;AAAA,EAC7C;AACF;AAEA,SAAS,cAAA,CAAe,MAA+B,KAAA,EAA0B;AAC/E,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,KAAA,MAAW,MAAA,IAAU,aAAA,CAAc,IAAA,EAAM,IAAA,CAAK,IAAI,CAAA,EAAG;AACnD,MAAA,OAAO,OAAO,YAAY,CAAA;AAC1B,MAAA,OAAO,OAAO,cAAc,CAAA;AAAA,IAC9B;AAAA,EACF;AACF;AAMA,eAAe,eAAA,CACb,QAAA,EACA,SAAA,EACA,OAAA,EACkC;AAClC,EAAA,MAAM,EAAE,QAAA,EAAU,KAAA,EAAO,OAAM,GAAI,UAAA,CAAW,UAAU,OAAO,CAAA;AAC/D,EAAA,MAAM,IAAA,GAAO,MAAM,UAAA,CAAW,KAAA,EAAO,WAAW,OAAO,CAAA;AACvD,EAAA,MAAM,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS,WAAA,CAAY,IAAA,EAAM,IAAA,EAAM,SAAA,EAAW,OAAO,CAAC,CAAC,CAAA;AAClF,EAAA,cAAA,CAAe,MAAM,KAAK,CAAA;AAC1B,EAAA,OAAO,IAAA;AACT;AAKA,SAAS,eAAe,KAAA,EAAuC;AAC7D,EAAA,OACE,OAAO,KAAA,KAAU,QAAA,IACjB,KAAA,KAAU,IAAA,IACT,KAAA,CAAuB,IAAA,KAASH,YAAAA,CAAK,QAAA,IACtC,KAAA,CAAM,OAAA,CAAS,KAAA,CAAuB,WAAW,CAAA;AAErD;AAUA,SAAS,WAAW,KAAA,EAA4C;AAC9D,EAAA,IAAI,cAAA,CAAe,KAAK,CAAA,EAAG;AACzB,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI;AACF,IAAA,OAAOM,cAAM,OAAO,KAAA,KAAU,WAAW,KAAA,GAAQ,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,EAChE,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,IAAI,oBAAA,CAAqB,CAAA,+BAAA,EAAkC,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA,EAAI;AAAA,MAChF,IAAA,EAAM,QAAA;AAAA,MACN;AAAA,KACD,CAAA;AAAA,EACH;AACF;AAGA,SAAS,iBAAA,CACP,QAAA,EACA,SAAA,EACA,OAAA,EACkB;AAClB,EAAA,MAAM,WAAW,IAAI,GAAA;AAAA,IAAA,CAClB,YAAA,CAAa,QAAQ,CAAA,CAAE,mBAAA,IAAuB,EAAC,EAAG,GAAA;AAAA,MACjD,CAAC,UAAA,KAAe,UAAA,CAAW,QAAA,CAAS,IAAA,CAAK;AAAA;AAC3C,GACF;AACA,EAAA,MAAM,MAAA,GAA2B,EAAE,GAAG,SAAA,EAAU;AAChD,EAAA,IAAI,SAAS,GAAA,CAAI,SAAS,KAAK,MAAA,CAAO,SAAS,MAAM,MAAA,EAAW;AAC9D,IAAA,MAAA,CAAO,SAAS,IAAI,OAAA,CAAQ,OAAA;AAAA,EAC9B;AACA,EAAA,IAAI,QAAA,CAAS,GAAA,CAAI,QAAQ,CAAA,IAAK,MAAA,CAAO,QAAQ,CAAA,KAAM,MAAA,IAAa,OAAA,CAAQ,MAAA,KAAW,MAAA,EAAW;AAC5F,IAAA,MAAA,CAAO,QAAQ,IAAI,OAAA,CAAQ,MAAA;AAAA,EAC7B;AACA,EAAA,OAAO,MAAA;AACT;AAUA,eAAe,kBAAA,CACb,OACA,OAAA,EACkB;AAClB,EAAA,MAAM,OAAA,GAAU,eAAe,OAAO,CAAA;AACtC,EAAA,IAAI,QAAA,GAAW,eAAA,CAAgB,UAAA,CAAW,KAAK,CAAC,CAAA;AAChD,EAAA,IAAI,OAAA,CAAQ,kBAAkB,IAAA,EAAM;AAClC,IAAA,QAAA,GAAW,eAAe,QAAA,EAAU;AAAA,MAClC,SAAS,OAAA,CAAQ,OAAA;AAAA,MACjB,QAAQ,OAAA,CAAQ;AAAA,KACjB,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,OAAA,CAAQ,cAAA,IAAkB,OAAA,CAAQ,MAAA,KAAW,MAAA,EAAW;AAC1D,IAAA,MAAM,OAAA,GAAU,MAAM,UAAA,CAAW,OAAO,CAAA;AACxC,IAAA,IAAI,CAAC,QAAQ,IAAA,CAAK,CAAC,WAAW,MAAA,CAAO,IAAA,KAAS,OAAA,CAAQ,MAAM,CAAA,EAAG;AAC7D,MAAA,MAAM,IAAI,oBAAA;AAAA,QACR,WAAW,OAAA,CAAQ,MAAM,CAAA,8BAAA,EAAiC,OAAA,CAAQ,KAAK,CAAA,cAAA,EACtD,OAAA,CAAQ,GAAA,CAAI,CAAC,WAAW,MAAA,CAAO,IAAI,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,EAAA,CAAA;AAAA,QAChE,EAAE,MAAM,QAAA;AAAS,OACnB;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,YAAY,iBAAA,CAAkB,QAAA,EAAU,QAAQ,SAAA,IAAa,IAAI,OAAO,CAAA;AAC9E,EAAA,MAAM,IAAA,GAAO,MAAM,eAAA,CAAgB,QAAA,EAAU,WAAW,OAAO,CAAA;AAG/D,EAAA,MAAM,WAAW,OAAA,CAAQ,iBAAA,KAAsB,MAAA,GAAS,IAAA,GAAO,oBAAoB,IAAI,CAAA;AACvF,EAAA,MAAM,SAAS,OAAA,CAAQ,iBAAA,KAAsB,KAAA,GAAQ,QAAA,GAAW,UAAU,QAAQ,CAAA;AAClF,EAAA,IAAI,OAAA,CAAQ,oBAAoB,KAAA,EAAO;AACrC,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,iBAAiB,MAAM,CAAA;AAChC;AAsJA,eAAsB,eAAA,CACpB,KAAA,EACA,OAAA,GAAoD,EAAC,EACnC;AAClB,EAAA,OAAO,kBAAA,CAAmB,OAAO,OAAO,CAAA;AAC1C;AAqBO,SAAS,qBAAA,CAEd,QAAA,GAAsD,EAAC,EAAG;AAiI1D,EAAA,SAAS,KAAA,CACP,KAAA,EACA,OAAA,GAAoD,EAAC,EACnC;AAClB,IAAA,OAAO,mBAAmB,KAAA,EAAO;AAAA,MAC/B,GAAG,QAAA;AAAA,MACH,GAAG;AAAA,KACwC,CAAA;AAAA,EAC/C;AACA,EAAA,OAAO,KAAA;AACT;AAEA,IAAO,aAAA,GAAQ","file":"index.cjs","sourcesContent":["/**\n * Rendering a rejected query back to the developer.\n *\n * Contentful's GraphQL errors carry `locations` — a line and column into\n * the query **as sent**. That text is rarely the text anyone wrote: by the\n * time it leaves this package, fragments have been inlined, `preview` and\n * `locale` arguments injected, and split fields hoisted into generated\n * subqueries. \"Cannot query field X\" plus a line number into a document you\n * have never seen is a dead end, so this module prints that document back\n * and puts a caret under the column Contentful named.\n *\n * Color is emitted as bare ANSI escapes rather than through a dependency:\n * this package ships CJS as well as ESM, and the obvious candidate (chalk\n * v5) is ESM-only. The four codes below are the entire surface we need.\n */\nimport type { ContentfulGraphQLError } from './types.js';\n\n/** Escape, built rather than written, so no tool in the chain can eat it. */\nconst ESC = String.fromCharCode(27);\n\nconst ANSI = {\n reset: `${ESC}[0m`,\n bold: `${ESC}[1m`,\n dim: `${ESC}[2m`,\n red: `${ESC}[31m`\n} as const;\n\n/** Source lines shown above and below a marked line when none is given. */\nconst DEFAULT_CONTEXT_LINES = 3;\n\nexport interface AnnotateQueryOptions {\n /**\n * How many source lines to show above and below each marked line.\n * Defaults to `3`; pass `Infinity` to print the whole query.\n */\n contextLines?: number;\n /**\n * Whether to emit ANSI color. Defaults to {@link supportsColor}, so a\n * developer watching a terminal gets color while a log pipeline gets\n * plain text it can store.\n */\n color?: boolean;\n}\n\n/** One reported position in the query, with the message that cited it. */\ninterface Mark {\n line: number;\n column: number;\n message: string;\n}\n\n/** An inclusive run of source lines, printed as a single excerpt. */\ninterface Excerpt {\n start: number;\n end: number;\n}\n\n/**\n * Whether ANSI color is likely to be understood by whoever reads this.\n *\n * Honors the `NO_COLOR` and `FORCE_COLOR` conventions, then falls back to\n * asking whether stderr is a terminal — false in a browser, an edge\n * runtime, or a container shipping JSON logs, which is exactly where escape\n * codes would be garbage.\n */\nexport function supportsColor(): boolean {\n /* v8 ignore next 3 -- process always exists in the test runtime */\n if (typeof process === 'undefined' || !process.env) {\n return false;\n }\n /* eslint-disable turbo/no-undeclared-env-vars -- read from the consuming\n app's environment at runtime, not from this package's build. */\n const forced = process.env.FORCE_COLOR;\n const disabled = process.env.NO_COLOR;\n /* eslint-enable turbo/no-undeclared-env-vars */\n if (forced) {\n return forced !== '0' && forced !== 'false';\n }\n if (disabled) {\n return false;\n }\n return Boolean(process.stderr?.isTTY);\n}\n\ntype Paint = (text: string) => string;\n\nfunction makePalette(enabled: boolean): {\n dim: Paint;\n red: Paint;\n bold: Paint;\n} {\n const paint =\n (code: string): Paint =>\n (text) =>\n enabled ? `${code}${text}${ANSI.reset}` : text;\n return {\n dim: paint(ANSI.dim),\n red: paint(ANSI.red),\n bold: paint(ANSI.bold)\n };\n}\n\n/**\n * Flattens GraphQL errors into positions that actually exist in `lineCount`\n * lines of source, deduplicated and ordered top to bottom.\n *\n * A location pointing past the end of the query (or carrying a non-numeric\n * line) is dropped rather than trusted: it would put a caret under nothing,\n * which reads as a bug in the annotation rather than in the query.\n */\nexport function collectMarks(errors: readonly ContentfulGraphQLError[], lineCount: number): Mark[] {\n const marks: Mark[] = [];\n const seen = new Set<string>();\n for (const error of errors) {\n for (const location of error.locations ?? []) {\n const line = Math.trunc(location.line);\n // Written as a negated range so a NaN line falls out here too.\n if (!(line >= 1 && line <= lineCount)) continue;\n const reported = Math.trunc(location.column);\n const column = reported >= 1 ? reported : 1;\n const key = `${line}:${column}:${error.message}`;\n if (seen.has(key)) continue;\n seen.add(key);\n marks.push({ line, column, message: error.message });\n }\n }\n return marks.sort((a, b) => a.line - b.line || a.column - b.column);\n}\n\n/**\n * Groups marks into the excerpts to print, merging any that touch so two\n * errors a few lines apart read as one continuous piece of query rather\n * than as two excerpts separated by a gap marker standing in for nothing.\n */\nfunction excerptsFor(marks: readonly Mark[], lineCount: number, contextLines: number): Excerpt[] {\n const excerpts: Excerpt[] = [];\n for (const mark of marks) {\n const start = Math.max(1, mark.line - contextLines);\n const end = Math.min(lineCount, mark.line + contextLines);\n const previous = excerpts[excerpts.length - 1];\n if (previous && start <= previous.end + 1) {\n previous.end = Math.max(previous.end, end);\n } else {\n excerpts.push({ start, end });\n }\n }\n return excerpts;\n}\n\n/**\n * Renders `query` with a caret under every position the errors reported:\n *\n * ```text\n * 2 | pageCollection(where: { slug: $slug }, limit: 1) {\n * 3 | items {\n * > 4 | titel\n * | ^ Cannot query field \"titel\" on type \"Page\". Did you mean \"title\"?\n * 5 | }\n * ```\n *\n * Returns an empty string when no error carries a usable location — there\n * is nothing to point at, and dumping the whole query would only bury the\n * message that matters.\n */\nexport function annotateQuery(\n query: string,\n errors: readonly ContentfulGraphQLError[],\n options: AnnotateQueryOptions = {}\n): string {\n const lines = query.split('\\n');\n const marks = collectMarks(errors, lines.length);\n if (marks.length === 0) return '';\n\n const color = makePalette(options.color ?? supportsColor());\n const excerpts = excerptsFor(marks, lines.length, options.contextLines ?? DEFAULT_CONTEXT_LINES);\n const gutter = String(\n excerpts.reduce((widest, excerpt) => Math.max(widest, excerpt.end), 0)\n ).length;\n const blank = ' '.repeat(gutter);\n\n const out: string[] = [];\n for (const [index, excerpt] of excerpts.entries()) {\n if (index > 0) out.push(color.dim(` ${blank} ...`));\n // Sliced rather than indexed by line number: the excerpt is already\n // clamped to the source, so this hands us a `string` and no unreachable\n // fallback to explain.\n const window = lines.slice(excerpt.start - 1, excerpt.end);\n for (const [offset, source] of window.entries()) {\n const line = excerpt.start + offset;\n const number = String(line).padStart(gutter, ' ');\n const here = marks.filter((mark) => mark.line === line);\n if (here.length === 0) {\n out.push(`${color.dim(` ${number} |`)} ${source}`);\n continue;\n }\n // The `>` marker carries the highlight when color is off.\n out.push(`${color.red(`> ${number} |`)} ${color.bold(source)}`);\n for (const mark of here) {\n const lead = ' '.repeat(mark.column - 1);\n out.push(`${color.dim(` ${blank} |`)} ${lead}${color.red(`^ ${mark.message}`)}`);\n }\n }\n }\n return out.join('\\n');\n}\n","import type { ContentfulGraphQLError, FetchContentfulErrorCode } from './types.js';\n\n/** Error thrown (i.e. the rejection value) for every failure in fetch-contentful. */\nexport class FetchContentfulError extends Error {\n readonly code: FetchContentfulErrorCode;\n readonly status: number | undefined;\n readonly errors: ContentfulGraphQLError[] | undefined;\n /**\n * The GraphQL query exactly as it was sent to Contentful — fragments\n * inlined, arguments injected, and (for a subquery) generated. This is\n * the text the `line`/`column` in {@link FetchContentfulError.errors}\n * point into, so it is the text to annotate; see `annotateQuery`.\n */\n readonly query: string | undefined;\n /** Internal: whether a retry may succeed. */\n readonly retryable: boolean;\n /** Internal: server-requested retry delay (from Retry-After), in ms. */\n readonly retryAfterMs: number | undefined;\n\n constructor(\n message: string,\n options: {\n code: FetchContentfulErrorCode;\n status?: number;\n errors?: ContentfulGraphQLError[];\n query?: string;\n retryable?: boolean;\n retryAfterMs?: number;\n cause?: unknown;\n }\n ) {\n super(message, { cause: options.cause });\n this.name = 'FetchContentfulError';\n this.code = options.code;\n this.status = options.status;\n this.errors = options.errors;\n this.query = options.query;\n this.retryable = options.retryable ?? false;\n this.retryAfterMs = options.retryAfterMs;\n }\n}\n\n/** Type guard for {@link FetchContentfulError}. */\nexport function isFetchContentfulError(value: unknown): value is FetchContentfulError {\n return value instanceof FetchContentfulError;\n}\n","import { isFetchContentfulError } from './errors.js';\n\nexport interface RetryConfig {\n /** Number of retries after the initial attempt. */\n retries: number;\n /** Base backoff delay in ms. */\n baseDelayMs: number;\n /** Maximum backoff delay in ms. */\n maxDelayMs: number;\n /** Random source, injectable for deterministic tests. */\n random?: () => number;\n /** Sleep implementation, injectable for deterministic tests. */\n sleep?: (ms: number) => Promise<void>;\n}\n\nexport function defaultSleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/** Compute the backoff delay for a given (0-indexed) failed attempt. */\nexport function backoffDelay(\n attempt: number,\n config: Pick<RetryConfig, 'baseDelayMs' | 'maxDelayMs'> & {\n random: () => number;\n }\n): number {\n const exponential = config.baseDelayMs * 2 ** attempt;\n const jitter = config.random() * config.baseDelayMs;\n return Math.min(exponential + jitter, config.maxDelayMs);\n}\n\n/**\n * Runs `fn`, retrying when it rejects with a retryable\n * {@link FetchContentfulError}. Non-retryable errors reject immediately.\n */\nexport async function withRetries<T>(\n fn: (attempt: number) => Promise<T>,\n config: RetryConfig\n): Promise<T> {\n const random = config.random ?? Math.random;\n const sleep = config.sleep ?? defaultSleep;\n let attempt = 0;\n while (true) {\n try {\n return await fn(attempt);\n } catch (error) {\n const retryable = isFetchContentfulError(error) && error.retryable;\n if (!retryable || attempt >= config.retries) {\n throw error;\n }\n const delay = error.retryAfterMs ?? backoffDelay(attempt, { ...config, random });\n await sleep(delay);\n attempt += 1;\n }\n }\n}\n","import {\n Kind,\n visit,\n type ArgumentNode,\n type DirectiveNode,\n type DocumentNode,\n type FieldNode,\n type FragmentDefinitionNode,\n type OperationDefinitionNode,\n type SelectionNode,\n type SelectionSetNode,\n type VariableDefinitionNode\n} from 'graphql';\nimport { FetchContentfulError } from './errors.js';\n\n/**\n * User-facing directive that force-splits the field it annotates — a\n * one-to-one reference or a nested collection alike — regardless of\n * `autoSplitNestedCollections`. Not valid on a root field, which has no\n * parent to stitch onto.\n */\nexport const SPLIT_DIRECTIVE = 'split';\n/** Internal directive marking a field that must not be split again. */\nexport const NO_SPLIT_DIRECTIVE = '_noSplit';\n/** Alias injected on parent entries to read their sys id. */\nexport const SYS_ID_ALIAS = '_splitSysId';\n/** Alias injected on parent entries to read their concrete type. */\nexport const TYPENAME_ALIAS = '_splitTypename';\n/** Variable name used for parent-id batches in generated subqueries. */\nexport const IDS_VARIABLE = '_splitIds';\n\nconst COLLECTION_SUFFIX = 'Collection';\n\nexport interface SplitPlan {\n /** Response-data path (aliases included) from the root to the parent entries. */\n path: string[];\n /** Response key the split field occupies on each parent entry. */\n responseKey: string;\n /** The split field, marked with `@_noSplit` and stripped of `@split`. */\n field: FieldNode;\n /** Variable definitions from the original operation used inside the field. */\n variableDefinitions: VariableDefinitionNode[];\n /**\n * Concrete type condition of the nearest enclosing inline fragment, if any.\n * Only parents with this `__typename` are re-queried for this plan.\n * (`Entry`, being an interface, never matches a `__typename` and is\n * treated as unconditional.)\n */\n typeCondition?: string;\n}\n\nexport interface PlanResult {\n /** The outer document with split fields removed and markers injected. */\n document: DocumentNode;\n plans: SplitPlan[];\n}\n\n/* ------------------------------------------------------------------ */\n/* Small helpers */\n/* ------------------------------------------------------------------ */\n\nexport function lowerFirst(value: string): string {\n return value.charAt(0).toLowerCase() + value.slice(1);\n}\n\nexport function chunk<T>(items: T[], size: number): T[][] {\n const chunks: T[][] = [];\n for (let index = 0; index < items.length; index += size) {\n chunks.push(items.slice(index, index + size));\n }\n return chunks;\n}\n\nfunction directivesOf(field: FieldNode): readonly DirectiveNode[] {\n return field.directives ?? [];\n}\n\nfunction hasDirective(field: FieldNode, name: string): boolean {\n return directivesOf(field).some((d) => d.name.value === name);\n}\n\nfunction withoutDirective(field: FieldNode, name: string): FieldNode {\n return {\n ...field,\n directives: directivesOf(field).filter((d) => d.name.value !== name)\n };\n}\n\nfunction withDirective(field: FieldNode, name: string): FieldNode {\n const directive: DirectiveNode = {\n kind: Kind.DIRECTIVE,\n name: { kind: Kind.NAME, value: name }\n };\n return { ...field, directives: [...directivesOf(field), directive] };\n}\n\nfunction responseKeyOf(field: FieldNode): string {\n return field.alias?.value ?? field.name.value;\n}\n\nfunction isCollectionField(field: FieldNode): boolean {\n if (\n !field.name.value.endsWith(COLLECTION_SUFFIX) ||\n field.name.value === COLLECTION_SUFFIX ||\n !field.selectionSet\n ) {\n return false;\n }\n return field.selectionSet.selections.some(\n (selection) => selection.kind === Kind.FIELD && selection.name.value === 'items'\n );\n}\n\nfunction namedField(name: string, alias?: string, selections?: SelectionNode[]): FieldNode {\n return {\n kind: Kind.FIELD,\n name: { kind: Kind.NAME, value: name },\n ...(alias ? { alias: { kind: Kind.NAME, value: alias } } : {}),\n ...(selections\n ? {\n selectionSet: {\n kind: Kind.SELECTION_SET,\n selections\n } satisfies SelectionSetNode\n }\n : {})\n };\n}\n\nfunction sysIdMarker(): FieldNode {\n return namedField('sys', SYS_ID_ALIAS, [namedField('id')]);\n}\n\nfunction typenameMarker(): FieldNode {\n return namedField('__typename', TYPENAME_ALIAS);\n}\n\n/** Collect the names of all variables used anywhere inside a field subtree. */\nexport function collectVariableNames(field: FieldNode): Set<string> {\n const names = new Set<string>();\n visit(field, {\n Variable(node) {\n names.add(node.name.value);\n }\n });\n return names;\n}\n\n/** Return the single operation definition of a document, or throw. */\nexport function getOperation(document: DocumentNode): OperationDefinitionNode {\n const operations = document.definitions.filter(\n (definition): definition is OperationDefinitionNode =>\n definition.kind === Kind.OPERATION_DEFINITION\n );\n const operation = operations[0];\n if (!operation || operations.length > 1) {\n throw new FetchContentfulError('fetch-contentful expects exactly one operation per document.', {\n code: 'CONFIG'\n });\n }\n if (operation.operation !== 'query') {\n throw new FetchContentfulError('fetch-contentful only supports query operations.', {\n code: 'CONFIG'\n });\n }\n return operation;\n}\n\n/* ------------------------------------------------------------------ */\n/* Fragment inlining */\n/* ------------------------------------------------------------------ */\n\n/**\n * Replaces every named fragment spread with an equivalent inline fragment so\n * split planning can see the whole query shape uniformly.\n */\nexport function inlineFragments(document: DocumentNode): DocumentNode {\n const fragments = new Map<string, FragmentDefinitionNode>();\n for (const definition of document.definitions) {\n if (definition.kind === Kind.FRAGMENT_DEFINITION) {\n fragments.set(definition.name.value, definition);\n }\n }\n\n function inlineSelectionSet(selectionSet: SelectionSetNode, stack: string[]): SelectionSetNode {\n const selections: SelectionNode[] = selectionSet.selections.map((selection): SelectionNode => {\n if (selection.kind === Kind.FRAGMENT_SPREAD) {\n const name = selection.name.value;\n const fragment = fragments.get(name);\n if (!fragment) {\n throw new FetchContentfulError(`Unknown fragment \"${name}\" referenced in query.`, {\n code: 'CONFIG'\n });\n }\n if (stack.includes(name)) {\n throw new FetchContentfulError(`Fragment cycle detected involving \"${name}\".`, {\n code: 'CONFIG'\n });\n }\n return {\n kind: Kind.INLINE_FRAGMENT,\n typeCondition: fragment.typeCondition,\n selectionSet: inlineSelectionSet(fragment.selectionSet, [...stack, name])\n };\n }\n if (selection.selectionSet) {\n return {\n ...selection,\n selectionSet: inlineSelectionSet(selection.selectionSet, stack)\n } as SelectionNode;\n }\n return selection;\n });\n return { ...selectionSet, selections };\n }\n\n const definitions = document.definitions\n .filter((definition) => definition.kind !== Kind.FRAGMENT_DEFINITION)\n .map((definition) =>\n definition.kind === Kind.OPERATION_DEFINITION\n ? {\n ...definition,\n selectionSet: inlineSelectionSet(definition.selectionSet, [])\n }\n : definition\n );\n\n return { ...document, definitions };\n}\n\n/* ------------------------------------------------------------------ */\n/* Split planning */\n/* ------------------------------------------------------------------ */\n\n/**\n * Walks the (fragment-inlined) document, removes every splittable reference\n * field, records a {@link SplitPlan} for each, and injects `sys { id }` and\n * `__typename` markers so parents can be re-queried and stitched.\n */\nexport function planSplits(\n document: DocumentNode,\n options: { autoSplitNestedCollections: boolean }\n): PlanResult {\n const operation = getOperation(document);\n const variableDefinitions = operation.variableDefinitions ?? [];\n const plans: SplitPlan[] = [];\n\n function processSelectionSet(\n selectionSet: SelectionSetNode,\n path: string[],\n depth: number,\n typeCondition: string | undefined\n ): SelectionSetNode {\n const selections: SelectionNode[] = [];\n let needsMarkers = false;\n\n for (const selection of selectionSet.selections) {\n if (selection.kind === Kind.INLINE_FRAGMENT) {\n const condition = selection.typeCondition?.name.value;\n selections.push({\n ...selection,\n selectionSet: processSelectionSet(\n selection.selectionSet,\n path,\n depth,\n // `Entry` is Contentful's interface type: it never equals a\n // concrete `__typename`, so it must not constrain the plan.\n condition && condition !== 'Entry' ? condition : typeCondition\n )\n });\n continue;\n }\n /* v8 ignore next 6 -- fragment spreads are inlined before planning */\n if (selection.kind !== Kind.FIELD) {\n throw new FetchContentfulError('Fragment spreads must be inlined before split planning.', {\n code: 'CONFIG'\n });\n }\n\n const field = selection;\n\n // The two triggers are deliberately independent:\n // `autoSplitNestedCollections` gates *only* the automatic detection of\n // nested collections, while `@split` is an explicit request that holds\n // whatever the option says — including on a `*Collection` field, which\n // takes exactly the same path as an auto-detected one.\n const isExplicitSplit = hasDirective(field, SPLIT_DIRECTIVE);\n const isAutoSplit = options.autoSplitNestedCollections && isCollectionField(field);\n\n // Root fields have no parent entry to stitch a result back onto, so\n // they are never splittable. Rather than strip a directive that cannot\n // do anything — leaving the author to wonder why their query still\n // exceeds the complexity limit — say so.\n if (isExplicitSplit && depth === 0) {\n throw new FetchContentfulError(\n `Cannot split root field \"${responseKeyOf(field)}\": @split needs a ` +\n 'parent entry to stitch the result back onto, and root fields ' +\n 'have none. Move the directive to a nested field, or page through ' +\n 'this field with its own `limit` and `skip` arguments.',\n { code: 'CONFIG' }\n );\n }\n\n const shouldSplit =\n depth > 0 &&\n field.selectionSet !== undefined &&\n !hasDirective(field, NO_SPLIT_DIRECTIVE) &&\n (isExplicitSplit || isAutoSplit);\n\n if (shouldSplit) {\n const planned = withDirective(withoutDirective(field, SPLIT_DIRECTIVE), NO_SPLIT_DIRECTIVE);\n plans.push({\n path: [...path],\n responseKey: responseKeyOf(field),\n field: planned,\n variableDefinitions: variableDefinitions.filter((definition) =>\n collectVariableNames(field).has(definition.variable.name.value)\n ),\n ...(typeCondition !== undefined ? { typeCondition } : {})\n });\n needsMarkers = true;\n continue;\n }\n\n if (field.selectionSet) {\n selections.push({\n ...field,\n selectionSet: processSelectionSet(\n field.selectionSet,\n [...path, responseKeyOf(field)],\n depth + 1,\n // Type conditions do not carry across a field boundary: the\n // field's own type governs its children.\n undefined\n )\n });\n } else {\n selections.push(field);\n }\n }\n\n if (needsMarkers) {\n selections.push(sysIdMarker(), typenameMarker());\n }\n return { ...selectionSet, selections };\n }\n\n const processedOperation: OperationDefinitionNode = {\n ...operation,\n selectionSet: processSelectionSet(operation.selectionSet, [], 0, undefined)\n };\n\n return {\n document: {\n ...document,\n definitions: document.definitions.map((definition) =>\n definition === operation ? processedOperation : definition\n )\n },\n plans\n };\n}\n\n/* ------------------------------------------------------------------ */\n/* Subquery construction */\n/* ------------------------------------------------------------------ */\n\nfunction stringArgument(name: string, value: string): ArgumentNode {\n return {\n kind: Kind.ARGUMENT,\n name: { kind: Kind.NAME, value: name },\n value: { kind: Kind.STRING, value }\n };\n}\n\nfunction booleanArgument(name: string, value: boolean): ArgumentNode {\n return {\n kind: Kind.ARGUMENT,\n name: { kind: Kind.NAME, value: name },\n value: { kind: Kind.BOOLEAN, value }\n };\n}\n\nfunction intArgument(name: string, value: number): ArgumentNode {\n return {\n kind: Kind.ARGUMENT,\n name: { kind: Kind.NAME, value: name },\n value: { kind: Kind.INT, value: String(value) }\n };\n}\n\nfunction whereIdInArgument(): ArgumentNode {\n return {\n kind: Kind.ARGUMENT,\n name: { kind: Kind.NAME, value: 'where' },\n value: {\n kind: Kind.OBJECT,\n fields: [\n {\n kind: Kind.OBJECT_FIELD,\n name: { kind: Kind.NAME, value: 'sys' },\n value: {\n kind: Kind.OBJECT,\n fields: [\n {\n kind: Kind.OBJECT_FIELD,\n name: { kind: Kind.NAME, value: 'id_in' },\n value: {\n kind: Kind.VARIABLE,\n name: { kind: Kind.NAME, value: IDS_VARIABLE }\n }\n }\n ]\n }\n }\n ]\n }\n };\n}\n\n/**\n * Builds the document that re-fetches one split field for a batch of parent\n * entries of a single concrete type, keyed by sys id:\n *\n * ```graphql\n * query FetchContentfulSplit($_splitIds: [String!]!, ...usedVars) {\n * <type>Collection(where: { sys: { id_in: $_splitIds } }, limit: N) {\n * items { sys { id } <splitField @_noSplit> }\n * }\n * }\n * ```\n */\nexport function buildSubquery(\n plan: SplitPlan,\n typename: string,\n batchSize: number,\n context: { preview: boolean; locale: string | undefined }\n): { document: DocumentNode; rootKey: string } {\n const rootKey = `${lowerFirst(typename)}${COLLECTION_SUFFIX}`;\n const args: ArgumentNode[] = [whereIdInArgument(), intArgument('limit', batchSize)];\n if (context.preview) {\n args.push(booleanArgument('preview', true));\n }\n if (context.locale !== undefined) {\n args.push(stringArgument('locale', context.locale));\n }\n\n const rootField: FieldNode = {\n ...namedField(rootKey, undefined, [\n namedField('items', undefined, [namedField('sys', undefined, [namedField('id')]), plan.field])\n ]),\n arguments: args\n };\n\n const idsVariable: VariableDefinitionNode = {\n kind: Kind.VARIABLE_DEFINITION,\n variable: {\n kind: Kind.VARIABLE,\n name: { kind: Kind.NAME, value: IDS_VARIABLE }\n },\n type: {\n kind: Kind.NON_NULL_TYPE,\n type: {\n kind: Kind.LIST_TYPE,\n type: {\n kind: Kind.NON_NULL_TYPE,\n type: {\n kind: Kind.NAMED_TYPE,\n name: { kind: Kind.NAME, value: 'String' }\n }\n }\n }\n }\n };\n\n const operation: OperationDefinitionNode = {\n kind: Kind.OPERATION_DEFINITION,\n operation: 'query' as OperationDefinitionNode['operation'],\n name: { kind: Kind.NAME, value: 'FetchContentfulSplit' },\n variableDefinitions: [idsVariable, ...plan.variableDefinitions],\n selectionSet: {\n kind: Kind.SELECTION_SET,\n selections: [rootField]\n }\n };\n\n return {\n document: { kind: Kind.DOCUMENT, definitions: [operation] },\n rootKey\n };\n}\n\n/** Removes fetch-contentful's internal directives before a document is sent. */\nexport function stripInternalDirectives(document: DocumentNode): DocumentNode {\n return visit(document, {\n Directive(node) {\n if (node.name.value === SPLIT_DIRECTIVE || node.name.value === NO_SPLIT_DIRECTIVE) {\n return null;\n }\n return undefined;\n }\n });\n}\n","import type { ContentfulGraphQLError, OmitUnresolvedLinks } from './types.js';\n\n/**\n * The `extensions.contentful.code` Contentful sets on a link it could not\n * resolve — the target was deleted, or is a draft the Delivery API cannot\n * see. It arrives on an HTTP 200 alongside usable `data`.\n */\nexport const UNRESOLVABLE_LINK_CODE = 'UNRESOLVABLE_LINK';\n\nconst COLLECTION_SUFFIX = 'Collection';\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction isCollectionValue(value: unknown): value is { items: unknown[] } {\n return isRecord(value) && Array.isArray(value['items']);\n}\n\nfunction isCollectionKey(key: string): boolean {\n return key.endsWith(COLLECTION_SUFFIX) && key !== COLLECTION_SUFFIX;\n}\n\n/** Whether one GraphQL error is Contentful's `UNRESOLVABLE_LINK`. */\nexport function isUnresolvableLinkError(error: ContentfulGraphQLError): boolean {\n const contentful = error.extensions?.['contentful'];\n return isRecord(contentful) && contentful['code'] === UNRESOLVABLE_LINK_CODE;\n}\n\n/**\n * Splits Contentful's `errors` into the links that merely could not be\n * resolved and everything else.\n *\n * The distinction is the whole point: an unresolvable link describes content\n * that is missing, and leaves the rest of the response intact and correct. A\n * validation or complexity error describes a query that was wrong, and there\n * is nothing to salvage. Only the first kind is ever tolerated.\n */\nexport function partitionUnresolvableLinks(errors: ContentfulGraphQLError[]): {\n unresolvable: ContentfulGraphQLError[];\n fatal: ContentfulGraphQLError[];\n} {\n const unresolvable: ContentfulGraphQLError[] = [];\n const fatal: ContentfulGraphQLError[] = [];\n for (const error of errors) {\n if (isUnresolvableLinkError(error)) {\n unresolvable.push(error);\n } else {\n fatal.push(error);\n }\n }\n return { unresolvable, fatal };\n}\n\nfunction walk(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map(walk);\n }\n if (isRecord(value)) {\n const result: Record<string, unknown> = {};\n for (const [key, child] of Object.entries(value)) {\n result[key] =\n isCollectionKey(key) && isCollectionValue(child) ? stripCollection(child) : walk(child);\n }\n return result;\n }\n return value;\n}\n\nfunction stripCollection(collection: { items: unknown[] }): unknown {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(collection)) {\n result[key] =\n key === 'items'\n ? (value as unknown[]).filter((item) => item !== null && item !== undefined).map(walk)\n : walk(value);\n }\n return result;\n}\n\n/**\n * Removes the `null` positions an unresolvable link leaves behind in every\n * `fooCollection.items`, recursively. Everything else is returned untouched\n * (deeply copied), including a `null` on a one-to-one reference field —\n * there is no position there to drop, only a field that has no value.\n *\n * This runs on the raw wire shape, before `shapeData`, so it applies just as\n * much to a caller who passed `shapeResponseData: false`. A null inside\n * `items` is never legitimate data — Contentful puts one there only for a\n * link it could not resolve — so the walk is structural and needs no\n * cross-referencing against the `errors` array, which matters because a\n * split subquery reports its own errors against its own generated query.\n */\nexport function omitUnresolvedLinks<T>(data: T): OmitUnresolvedLinks<T> {\n return walk(data) as OmitUnresolvedLinks<T>;\n}\n","import { print, type DocumentNode } from 'graphql';\nimport { annotateQuery } from './annotate.js';\nimport { FetchContentfulError } from './errors.js';\nimport { withRetries, type RetryConfig } from './retry.js';\nimport { getOperation, stripInternalDirectives } from './split.js';\nimport type {\n ContentfulGraphQLError,\n GraphQLVariables,\n NextFetchOptions,\n UnresolvableLinkMode\n} from './types.js';\nimport { partitionUnresolvableLinks } from './unresolvable.js';\n\nexport interface RequestContext {\n space: string;\n environment: string;\n token: string;\n fetch: typeof fetch;\n retry: RetryConfig;\n signal?: AbortSignal;\n next?: NextFetchOptions;\n cache?: RequestCache;\n /** Append the annotated query to error messages. Defaults to `true`. */\n annotateQueryOnError?: boolean;\n /**\n * How to treat an `UNRESOLVABLE_LINK` error. Anything but `'error'` lets\n * the partial response through. Defaults to `'omit'`.\n */\n unresolvableLinks?: UnresolvableLinkMode;\n /** Notified of the unresolvable links a tolerated response carried. */\n onUnresolvableLink?: (errors: ContentfulGraphQLError[]) => void;\n}\n\nexport function graphqlEndpoint(space: string, environment: string): string {\n return `https://graphql.contentful.com/content/v1/spaces/${encodeURIComponent(\n space\n )}/environments/${encodeURIComponent(environment)}`;\n}\n\n/** Parse a Retry-After header (seconds or HTTP date) into milliseconds. */\nexport function parseRetryAfter(header: string | null): number | undefined {\n if (!header) return undefined;\n const seconds = Number(header);\n if (Number.isFinite(seconds)) {\n return Math.max(0, seconds * 1000);\n }\n const date = Date.parse(header);\n if (Number.isFinite(date)) {\n return Math.max(0, date - Date.now());\n }\n return undefined;\n}\n\n/** Keep only the variables the document actually declares. */\nexport function pickDeclaredVariables(\n document: DocumentNode,\n variables: GraphQLVariables\n): GraphQLVariables {\n const declared = new Set(\n (getOperation(document).variableDefinitions ?? []).map(\n (definition) => definition.variable.name.value\n )\n );\n const picked: GraphQLVariables = {};\n for (const [name, value] of Object.entries(variables)) {\n if (declared.has(name)) {\n picked[name] = value;\n }\n }\n return picked;\n}\n\nfunction isRetryableStatus(status: number): boolean {\n return status === 408 || status === 429 || status >= 500;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\n/**\n * Hands the tolerated unresolvable links to the caller's reporter.\n *\n * Anything it throws is swallowed deliberately. This sits inside the retry\n * loop, so a reporter that failed would not merely surface as the fetch's\n * rejection — it would look like a failed request and send the very same\n * query again.\n */\nfunction reportUnresolvableLinks(errors: ContentfulGraphQLError[], context: RequestContext): void {\n if (!context.onUnresolvableLink) return;\n try {\n context.onUnresolvableLink(errors);\n } catch {\n // See above: a logger must not be able to fail — or repeat — a fetch.\n }\n}\n\n/**\n * Reads the `errors` array out of a failed response body.\n *\n * Contentful answers a query it cannot validate with HTTP 400 and the very\n * same error objects a 200 would have carried, locations included — so the\n * status alone is the least useful half of what it just told us.\n */\nasync function readGraphQLErrors(\n response: Response\n): Promise<ContentfulGraphQLError[] | undefined> {\n try {\n const payload = (await response.json()) as {\n errors?: ContentfulGraphQLError[];\n } | null;\n const errors = payload?.errors;\n return Array.isArray(errors) && errors.length > 0 ? errors : undefined;\n } catch {\n // A body that is not JSON tells us nothing the status has not already.\n return undefined;\n }\n}\n\n/**\n * Builds the message for a failure Contentful explained: the summary, the\n * messages themselves, and — when any of them says where in the query it\n * went wrong — that query with a caret under the spot.\n */\nfunction describeFailure(\n summary: string,\n errors: ContentfulGraphQLError[] | undefined,\n query: string,\n context: RequestContext\n): string {\n if (!errors || errors.length === 0) return summary;\n const message = `${summary} ${errors.map((error) => error.message).join('; ')}`;\n if (context.annotateQueryOnError === false) return message;\n const annotated = annotateQuery(query, errors);\n // The trailing newline keeps the stack trace off the last caret line.\n return annotated ? `${message}\\n\\n${annotated}\\n` : message;\n}\n\n/**\n * Sends one GraphQL request (with retries) and returns `data`.\n *\n * Rejects with a {@link FetchContentfulError} on any HTTP, network, or\n * GraphQL error. The one exception is a partial response whose only\n * complaint is an unresolvable link: that data is returned, with the holes\n * still in it, for `omitUnresolvedLinks` to clean up once the full response\n * (subqueries included) has been stitched together.\n */\nexport async function rawRequest(\n document: DocumentNode,\n variables: GraphQLVariables,\n context: RequestContext\n): Promise<Record<string, unknown>> {\n const query = print(stripInternalDirectives(document));\n const body = JSON.stringify({\n query,\n variables: pickDeclaredVariables(document, variables)\n });\n const url = graphqlEndpoint(context.space, context.environment);\n\n return withRetries(async () => {\n let response: Response;\n try {\n const init: RequestInit & { next?: NextFetchOptions } = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${context.token}`\n },\n body\n };\n if (context.signal) init.signal = context.signal;\n if (context.cache) init.cache = context.cache;\n if (context.next) init.next = context.next;\n response = await context.fetch(url, init);\n } catch (cause) {\n throw new FetchContentfulError(\n `Network error while contacting Contentful: ${String(cause)}`,\n { code: 'NETWORK', query, retryable: true, cause }\n );\n }\n\n if (!response.ok) {\n const retryable = isRetryableStatus(response.status);\n // Only a rejected request has a query to explain; a 5xx body is a\n // server-side failure with nothing to point at, and this one is on\n // its way to another attempt anyway.\n const errors = retryable ? undefined : await readGraphQLErrors(response);\n throw new FetchContentfulError(\n describeFailure(\n `Contentful responded with HTTP ${response.status}.`,\n errors,\n query,\n context\n ),\n {\n code: 'HTTP',\n status: response.status,\n errors,\n query,\n retryable,\n retryAfterMs: retryable ? parseRetryAfter(response.headers.get('Retry-After')) : undefined\n }\n );\n }\n\n let payload: {\n data?: Record<string, unknown> | null;\n errors?: ContentfulGraphQLError[];\n };\n try {\n payload = (await response.json()) as typeof payload;\n } catch (cause) {\n throw new FetchContentfulError('Contentful returned an unreadable response body.', {\n code: 'NETWORK',\n query,\n retryable: true,\n cause\n });\n }\n\n if (payload.errors && payload.errors.length > 0) {\n // A response can be both errored and correct: an unresolvable link\n // reports content that is missing, not a query that was wrong, and\n // everything else Contentful sent is exactly what was asked for. It is\n // tolerated only when it is the *sole* complaint and there is data to\n // keep — a validation error alongside it means the query itself was\n // never answered, and the whole list goes into the rejection.\n const { unresolvable, fatal } = partitionUnresolvableLinks(payload.errors);\n const tolerable =\n context.unresolvableLinks !== 'error' &&\n fatal.length === 0 &&\n unresolvable.length > 0 &&\n isRecord(payload.data);\n\n if (!tolerable) {\n throw new FetchContentfulError(\n describeFailure('Contentful returned GraphQL errors:', payload.errors, query, context),\n { code: 'GRAPHQL', errors: payload.errors, query }\n );\n }\n reportUnresolvableLinks(unresolvable, context);\n }\n\n if (!payload.data || typeof payload.data !== 'object') {\n throw new FetchContentfulError('Contentful returned no data and no errors.', {\n code: 'GRAPHQL',\n query\n });\n }\n\n return payload.data;\n }, context.retry);\n}\n","/**\n * Environment-derived configuration.\n *\n * Two families of variable names are supported, checked in this order:\n *\n * 1. Framework-neutral names — `CONTENTFUL_SPACE_ID`, `CONTENTFUL_ENVIRONMENT`,\n * `CONTENTFUL_ACCESS_TOKEN`, `CONTENTFUL_PREVIEW_ACCESS_TOKEN`.\n * 2. `NEXT_PUBLIC_`-prefixed equivalents for Next.js projects that call\n * Contentful from the browser — for the space, the environment and the\n * **delivery** token only.\n *\n * The preview token is deliberately absent from that second family. Next.js\n * inlines `NEXT_PUBLIC_` variables into client bundles by string-replacing\n * the literal accesses below, so merely importing this module in a project\n * that set `NEXT_PUBLIC_CONTENTFUL_PREVIEW_ACCESS_TOKEN` would bake the\n * token into public JavaScript — whether or not any client code ever asks\n * for preview content. A delivery token is read-only and commonly public; a\n * preview token reads unpublished content and must not leak. Callers that\n * genuinely need preview in the browser pass `previewToken` explicitly, so\n * the exposure is their deliberate choice rather than this module's.\n *\n * IMPORTANT: every lookup below is written as a literal\n * `process.env.SOME_NAME` property access, never a dynamic `process.env[x]`.\n * Next.js exposes `NEXT_PUBLIC_` variables to client bundles by\n * string-replacing those literal expressions at build time — dynamic access\n * is invisible to the inliner and resolves to `undefined` in the browser.\n * Do not \"refactor\" these into a loop or a name table.\n *\n * This module reads the already-populated `process.env`; loading `.env`\n * files from disk is deliberately left to the platform (Next.js, Vite,\n * dotenv, ...), whose precedence rules would otherwise be duplicated here.\n */\n\n/*\n * These variables are read at runtime inside the consuming application, not\n * while this package is built — the bundle ships the literal `process.env.X`\n * accesses untouched. Declaring them in turbo.json would therefore be\n * inaccurate and would invalidate the build cache for no reason.\n */\n/* eslint-disable turbo/no-undeclared-env-vars */\n\nexport interface EnvSettings {\n space: string | undefined;\n environment: string | undefined;\n /** Content Delivery API token, for published content. */\n deliveryToken: string | undefined;\n /** Content Preview API token, for draft content. Server-side only. */\n previewToken: string | undefined;\n}\n\nfunction orUndefined(value: string | undefined): string | undefined {\n return value || undefined;\n}\n\n/** Reads Contentful settings from `process.env` (neutral names first). */\nexport function readEnvSettings(): EnvSettings {\n /* v8 ignore next 10 -- process always exists in the test runtime */\n if (typeof process === 'undefined' || !process.env) {\n return {\n space: undefined,\n environment: undefined,\n deliveryToken: undefined,\n previewToken: undefined\n };\n }\n const deliveryToken = orUndefined(\n process.env.CONTENTFUL_ACCESS_TOKEN || process.env.NEXT_PUBLIC_CONTENTFUL_ACCESS_TOKEN\n );\n return {\n space: orUndefined(\n process.env.CONTENTFUL_SPACE_ID || process.env.NEXT_PUBLIC_CONTENTFUL_SPACE_ID\n ),\n environment: orUndefined(\n process.env.CONTENTFUL_ENVIRONMENT || process.env.NEXT_PUBLIC_CONTENTFUL_ENVIRONMENT\n ),\n deliveryToken,\n // No `NEXT_PUBLIC_` fallback: see the note at the top of this file.\n previewToken: orUndefined(process.env.CONTENTFUL_PREVIEW_ACCESS_TOKEN)\n };\n}\n","import {\n Kind,\n type ArgumentNode,\n type DocumentNode,\n type FieldNode,\n type OperationDefinitionNode,\n type SelectionNode,\n type SelectionSetNode\n} from 'graphql';\nimport { getOperation } from './split.js';\n\n/**\n * Contentful cascades `preview` and `locale` from a root query field down to\n * every nested field, so injecting the arguments at the root is equivalent to\n * threading them through the whole query by hand — without the boilerplate.\n */\nexport interface InjectableArgs {\n preview: boolean;\n locale: string | undefined;\n}\n\nfunction argumentsOf(field: FieldNode): readonly ArgumentNode[] {\n return field.arguments ?? [];\n}\n\nfunction hasArgument(field: FieldNode, name: string): boolean {\n return argumentsOf(field).some((argument) => argument.name.value === name);\n}\n\nfunction previewArgument(): ArgumentNode {\n return {\n kind: Kind.ARGUMENT,\n name: { kind: Kind.NAME, value: 'preview' },\n value: { kind: Kind.BOOLEAN, value: true }\n };\n}\n\nfunction localeArgument(locale: string): ArgumentNode {\n return {\n kind: Kind.ARGUMENT,\n name: { kind: Kind.NAME, value: 'locale' },\n value: { kind: Kind.STRING, value: locale }\n };\n}\n\nfunction injectIntoField(field: FieldNode, args: InjectableArgs): FieldNode {\n // Introspection fields (`__typename`, `__schema`, ...) take no arguments.\n if (field.name.value.startsWith('__')) {\n return field;\n }\n const additions: ArgumentNode[] = [];\n if (args.preview && !hasArgument(field, 'preview')) {\n additions.push(previewArgument());\n }\n if (args.locale !== undefined && !hasArgument(field, 'locale')) {\n additions.push(localeArgument(args.locale));\n }\n if (additions.length === 0) {\n return field;\n }\n return { ...field, arguments: [...argumentsOf(field), ...additions] };\n}\n\nfunction injectIntoSelectionSet(\n selectionSet: SelectionSetNode,\n args: InjectableArgs\n): SelectionSetNode {\n const selections: SelectionNode[] = selectionSet.selections.map((selection): SelectionNode => {\n if (selection.kind === Kind.FIELD) {\n return injectIntoField(selection, args);\n }\n // Root-level inline fragments (`... on Query`) still contain root\n // fields; named spreads are inlined before injection runs.\n if (selection.kind === Kind.INLINE_FRAGMENT) {\n return {\n ...selection,\n selectionSet: injectIntoSelectionSet(selection.selectionSet, args)\n };\n }\n return selection;\n });\n return { ...selectionSet, selections };\n}\n\n/**\n * Adds `preview: true` and/or `locale: \"...\"` arguments to every root field\n * of the operation, unless the author already wrote that argument. Nested\n * fields are left untouched — Contentful inherits both arguments downward.\n */\nexport function injectRootArgs(document: DocumentNode, args: InjectableArgs): DocumentNode {\n if (!args.preview && args.locale === undefined) {\n return document;\n }\n const operation = getOperation(document);\n const injected: OperationDefinitionNode = {\n ...operation,\n selectionSet: injectIntoSelectionSet(operation.selectionSet, args)\n };\n return {\n ...document,\n definitions: document.definitions.map((definition) =>\n definition === operation ? injected : definition\n )\n };\n}\n","import { FetchContentfulError } from './errors.js';\nimport { withRetries, type RetryConfig } from './retry.js';\nimport type { ContentfulLocale } from './types.js';\n\nexport interface LocalesContext {\n space: string;\n environment: string;\n preview: boolean;\n token: string;\n fetch: typeof fetch;\n retry: RetryConfig;\n signal?: AbortSignal;\n}\n\nconst cache = new Map<string, Promise<ContentfulLocale[]>>();\n\nfunction cacheKey(context: LocalesContext): string {\n return `${context.space}:${context.environment}:${context.preview ? 1 : 0}`;\n}\n\nexport function localesEndpoint(context: LocalesContext): string {\n const host = context.preview ? 'preview.contentful.com' : 'cdn.contentful.com';\n return `https://${host}/spaces/${encodeURIComponent(\n context.space\n )}/environments/${encodeURIComponent(context.environment)}/locales`;\n}\n\nasync function fetchLocales(context: LocalesContext): Promise<ContentfulLocale[]> {\n return withRetries(async () => {\n let response: Response;\n try {\n const init: RequestInit = {\n headers: { Authorization: `Bearer ${context.token}` }\n };\n if (context.signal) init.signal = context.signal;\n response = await context.fetch(localesEndpoint(context), init);\n } catch (cause) {\n throw new FetchContentfulError(`Network error while fetching locales: ${String(cause)}`, {\n code: 'NETWORK',\n retryable: true,\n cause\n });\n }\n if (!response.ok) {\n throw new FetchContentfulError(`Locale request failed with HTTP ${response.status}.`, {\n code: 'HTTP',\n status: response.status,\n retryable: response.status === 429 || response.status >= 500\n });\n }\n const payload = (await response.json()) as {\n items?: Array<{\n code: string;\n name: string;\n default: boolean;\n fallbackCode: string | null;\n }>;\n };\n if (!Array.isArray(payload.items)) {\n throw new FetchContentfulError('Locale response did not include an items array.', {\n code: 'NETWORK'\n });\n }\n return payload.items.map((item) => ({\n code: item.code,\n name: item.name,\n default: item.default,\n fallbackCode: item.fallbackCode\n }));\n }, context.retry);\n}\n\n/**\n * Returns the locales configured in Contentful for a space/environment.\n * Results are cached in-module, so repeated fetches are free; failed\n * lookups are evicted so they can be retried later.\n */\nexport function getLocales(context: LocalesContext): Promise<ContentfulLocale[]> {\n const key = cacheKey(context);\n const cached = cache.get(key);\n if (cached) {\n return cached;\n }\n const pending = fetchLocales(context).catch((error) => {\n cache.delete(key);\n throw error;\n });\n cache.set(key, pending);\n return pending;\n}\n\n/** Clears the in-module locale cache (mainly useful in tests). */\nexport function clearLocaleCache(): void {\n cache.clear();\n}\n","import type { ShapeCollections, UnwrapSingleRoot } from './types.js';\n\nconst COLLECTION_SUFFIX = 'Collection';\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction isCollectionValue(value: unknown): value is { items: unknown[] } {\n return isRecord(value) && Array.isArray(value['items']);\n}\n\n/**\n * Recursively rewrites Contentful collection wrappers:\n * `{ fooCollection: { items: [...] } }` becomes `{ foo: [...] }`.\n * Non-collection data is returned untouched (deeply copied).\n */\nexport function shapeData<T>(data: T): ShapeCollections<T> {\n if (Array.isArray(data)) {\n return data.map((item) => shapeData(item)) as ShapeCollections<T>;\n }\n if (isRecord(data)) {\n const shaped: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(data)) {\n if (\n key.endsWith(COLLECTION_SUFFIX) &&\n key !== COLLECTION_SUFFIX &&\n isCollectionValue(value)\n ) {\n shaped[key.slice(0, -COLLECTION_SUFFIX.length)] = shapeData(value.items);\n } else {\n shaped[key] = shapeData(value);\n }\n }\n return shaped as ShapeCollections<T>;\n }\n return data as ShapeCollections<T>;\n}\n\n/**\n * Unwraps a single-root response: `{ siteSettings: X }` becomes `X` when\n * `siteSettings` is the only root key. Anything else — multiple roots,\n * arrays, primitives — is returned untouched.\n */\nexport function unwrapSingleRoot<T>(data: T): UnwrapSingleRoot<T> {\n if (isRecord(data)) {\n const keys = Object.keys(data);\n if (keys.length === 1) {\n return data[keys[0] as string] as UnwrapSingleRoot<T>;\n }\n }\n return data as UnwrapSingleRoot<T>;\n}\n","import type { TypedDocumentNode } from '@graphql-typed-document-node/core';\nimport { Kind, parse, type DocumentNode } from 'graphql';\nimport { rawRequest, type RequestContext } from './client.js';\nimport { readEnvSettings } from './env.js';\nimport { FetchContentfulError } from './errors.js';\nimport { injectRootArgs } from './inject.js';\nimport { getLocales } from './locales.js';\nimport type { RetryConfig } from './retry.js';\nimport { shapeData, unwrapSingleRoot } from './shape.js';\nimport {\n buildSubquery,\n chunk,\n getOperation,\n inlineFragments,\n planSplits,\n SYS_ID_ALIAS,\n TYPENAME_ALIAS,\n type SplitPlan\n} from './split.js';\nimport type {\n CallerVariables,\n DocumentResult,\n FetchContentfulOptions,\n GraphQLVariables,\n OmitUnresolvedLinks,\n ShapeCollections,\n TypedFetchContentfulOptions,\n UnresolvableLinkMode,\n UnwrapSingleRoot\n} from './types.js';\nimport { omitUnresolvedLinks } from './unresolvable.js';\n\nexport { annotateQuery } from './annotate.js';\nexport { FetchContentfulError, isFetchContentfulError } from './errors.js';\nexport { readEnvSettings } from './env.js';\nexport { injectRootArgs } from './inject.js';\nexport { clearLocaleCache, getLocales } from './locales.js';\nexport { shapeData, unwrapSingleRoot } from './shape.js';\nexport {\n isUnresolvableLinkError,\n omitUnresolvedLinks,\n partitionUnresolvableLinks,\n UNRESOLVABLE_LINK_CODE\n} from './unresolvable.js';\nexport type { AnnotateQueryOptions } from './annotate.js';\nexport type {\n AutoInjectedVariable,\n CallerVariables,\n DocumentResult,\n FetchContentfulErrorCode,\n FetchContentfulOptions,\n ContentfulGraphQLError,\n ContentfulLocale,\n GraphQLVariables,\n NextFetchOptions,\n OmitUnresolvedLinks,\n ShapeCollections,\n TypedFetchContentfulOptions,\n UnresolvableLinkMode,\n UnwrapSingleRoot,\n VariablesOption\n} from './types.js';\n\n/**\n * Locale requested when a call does not name one.\n *\n * Contentful's own default for a new space, and explicit beats implicit: a\n * query that says which locale it wants returns the same content whatever a\n * space is configured to fall back to. Pass `locale: null` to send no\n * `locale` argument and let the space decide.\n */\nconst DEFAULT_LOCALE = 'en-US';\n\nconst DEFAULT_RETRIES = 5;\nconst DEFAULT_RETRY_DELAY_MS = 250;\nconst DEFAULT_MAX_RETRY_DELAY_MS = 8000;\nconst DEFAULT_SPLIT_BATCH_SIZE = 50;\n\ninterface ExecutionContext extends RequestContext {\n preview: boolean;\n locale: string | undefined;\n autoSplitNestedCollections: boolean;\n splitBatchSize: number;\n unresolvableLinks: UnresolvableLinkMode;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\n/** Collect every object reachable at a response path, flattening arrays. */\nexport function collectAtPath(data: unknown, path: string[]): Record<string, unknown>[] {\n let current: unknown[] = [data];\n for (const segment of path) {\n const next: unknown[] = [];\n for (const value of current) {\n if (isRecord(value)) {\n const child = value[segment];\n if (Array.isArray(child)) {\n next.push(...child);\n } else if (child !== null && child !== undefined) {\n next.push(child);\n }\n }\n }\n current = next;\n }\n return current.filter(isRecord);\n}\n\nfunction resolveContext(options: FetchContentfulOptions<GraphQLVariables>): ExecutionContext {\n const env = readEnvSettings();\n const space = options.space ?? env.space;\n const environment = options.environment ?? env.environment ?? 'master';\n const preview = options.preview ?? false;\n\n // Each mode resolves its own token, so a factory can be configured with\n // both and every call picks the right one.\n const token = preview\n ? (options.previewToken ?? env.previewToken)\n : (options.deliveryToken ?? env.deliveryToken);\n\n // Report every missing setting at once so a fresh setup is fixed in a\n // single round trip rather than one error at a time.\n if (!space || !token) {\n const missing: string[] = [];\n if (!space) {\n missing.push(\n 'space (pass `space` or set CONTENTFUL_SPACE_ID / NEXT_PUBLIC_CONTENTFUL_SPACE_ID)'\n );\n }\n if (!token) {\n missing.push(\n preview\n ? 'preview access token (pass `previewToken` or set CONTENTFUL_PREVIEW_ACCESS_TOKEN — note there is no NEXT_PUBLIC_ equivalent, by design)'\n : 'delivery access token (pass `deliveryToken` or set CONTENTFUL_ACCESS_TOKEN / NEXT_PUBLIC_CONTENTFUL_ACCESS_TOKEN)'\n );\n }\n throw new FetchContentfulError(\n `Missing required Contentful configuration: ${missing.join('; ')}.`,\n { code: 'CONFIG' }\n );\n }\n\n const retry: RetryConfig = {\n retries: options.retries ?? DEFAULT_RETRIES,\n baseDelayMs: options.retryDelayMs ?? DEFAULT_RETRY_DELAY_MS,\n maxDelayMs: options.maxRetryDelayMs ?? DEFAULT_MAX_RETRY_DELAY_MS\n };\n\n const fetchImpl = options.fetch ?? globalThis.fetch;\n\n const context: ExecutionContext = {\n space,\n environment,\n token,\n preview,\n // `null` is the opt-out; `undefined` (or absent) takes the default.\n locale: options.locale === null ? undefined : (options.locale ?? DEFAULT_LOCALE),\n fetch: fetchImpl,\n retry,\n autoSplitNestedCollections: options.autoSplitNestedCollections ?? true,\n splitBatchSize: options.splitBatchSize ?? DEFAULT_SPLIT_BATCH_SIZE,\n annotateQueryOnError: options.annotateQueryOnError ?? true,\n unresolvableLinks: options.unresolvableLinks ?? 'omit'\n };\n if (options.onUnresolvableLink) {\n context.onUnresolvableLink = options.onUnresolvableLink;\n }\n if (options.signal) context.signal = options.signal;\n if (options.next) context.next = options.next;\n if (options.cache) context.cache = options.cache;\n return context;\n}\n\n/**\n * Resolves one split plan: groups parent entries by concrete type, re-fetches\n * the split field in id batches, stitches results back onto the parents, and\n * fails loudly if any parent cannot be resolved.\n */\nasync function resolvePlan(\n plan: SplitPlan,\n data: Record<string, unknown>,\n variables: GraphQLVariables,\n context: ExecutionContext\n): Promise<void> {\n const parents = collectAtPath(data, plan.path);\n const relevant = parents.filter(\n (parent) =>\n typeof parent[TYPENAME_ALIAS] === 'string' &&\n (plan.typeCondition === undefined || parent[TYPENAME_ALIAS] === plan.typeCondition)\n );\n if (relevant.length === 0) {\n return;\n }\n\n const byType = new Map<string, Record<string, unknown>[]>();\n for (const parent of relevant) {\n const typename = parent[TYPENAME_ALIAS] as string;\n const sys = parent[SYS_ID_ALIAS];\n if (!isRecord(sys) || typeof sys['id'] !== 'string') {\n throw new FetchContentfulError(\n `Cannot split \"${plan.responseKey}\": a parent entry is missing its sys id.`,\n { code: 'STITCH' }\n );\n }\n const group = byType.get(typename) ?? [];\n group.push(parent);\n byType.set(typename, group);\n }\n\n const resolved = new Map<string, unknown>();\n\n await Promise.all(\n [...byType.entries()].map(async ([typename, group]) => {\n const ids = [\n ...new Set(\n group.map((parent) => {\n const sys = parent[SYS_ID_ALIAS] as { id: string };\n return sys.id;\n })\n )\n ];\n await Promise.all(\n chunk(ids, context.splitBatchSize).map(async (idBatch) => {\n const { document, rootKey } = buildSubquery(plan, typename, idBatch.length, context);\n const subData = await executeDocument(\n document,\n { ...variables, _splitIds: idBatch },\n context\n );\n const collection = subData[rootKey];\n const items =\n isRecord(collection) && Array.isArray(collection['items'])\n ? (collection['items'] as unknown[])\n : undefined;\n if (!items) {\n throw new FetchContentfulError(\n `Split subquery for \"${typename}\" returned no \"${rootKey}.items\". ` +\n 'Check that the content type follows Contentful naming conventions.',\n { code: 'STITCH' }\n );\n }\n for (const item of items) {\n if (isRecord(item)) {\n const sys = item['sys'];\n if (isRecord(sys) && typeof sys['id'] === 'string') {\n resolved.set(`${typename}:${sys['id']}`, item[plan.responseKey]);\n }\n }\n }\n })\n );\n })\n );\n\n for (const parent of relevant) {\n const typename = parent[TYPENAME_ALIAS] as string;\n const sys = parent[SYS_ID_ALIAS] as { id: string };\n const key = `${typename}:${sys.id}`;\n if (!resolved.has(key)) {\n throw new FetchContentfulError(\n `Split subquery did not return entry \"${sys.id}\" of type \"${typename}\" ` +\n `for field \"${plan.responseKey}\".`,\n { code: 'STITCH' }\n );\n }\n parent[plan.responseKey] = resolved.get(key);\n }\n}\n\nfunction cleanupMarkers(data: Record<string, unknown>, plans: SplitPlan[]): void {\n for (const plan of plans) {\n for (const parent of collectAtPath(data, plan.path)) {\n delete parent[SYS_ID_ALIAS];\n delete parent[TYPENAME_ALIAS];\n }\n }\n}\n\n/**\n * Executes a document: plans splits, runs the reduced outer query, then\n * recursively resolves every split subquery and stitches the data together.\n */\nasync function executeDocument(\n document: DocumentNode,\n variables: GraphQLVariables,\n context: ExecutionContext\n): Promise<Record<string, unknown>> {\n const { document: outer, plans } = planSplits(document, context);\n const data = await rawRequest(outer, variables, context);\n await Promise.all(plans.map((plan) => resolvePlan(plan, data, variables, context)));\n cleanupMarkers(data, plans);\n return data;\n}\n\n/** Replaces named fragment spreads with inline fragments (re-exported for advanced use). */\nexport { inlineFragments } from './split.js';\n\nfunction isDocumentNode(query: unknown): query is DocumentNode {\n return (\n typeof query === 'object' &&\n query !== null &&\n (query as DocumentNode).kind === Kind.DOCUMENT &&\n Array.isArray((query as DocumentNode).definitions)\n );\n}\n\n/**\n * Normalizes whatever was passed as the query into an AST.\n *\n * gql.tada and graphql-codegen's client preset both produce real\n * `DocumentNode`s, which pass through untouched. Anything else — a query\n * string, or a document object that only carries its source text — is\n * stringified and parsed.\n */\nfunction toDocument(query: string | DocumentNode): DocumentNode {\n if (isDocumentNode(query)) {\n return query;\n }\n try {\n return parse(typeof query === 'string' ? query : String(query));\n } catch (cause) {\n throw new FetchContentfulError(`Failed to parse GraphQL query: ${String(cause)}`, {\n code: 'CONFIG',\n cause\n });\n }\n}\n\n/** Auto-fill `$preview` / `$locale` variables when the query declares them. */\nfunction withAutoVariables(\n document: DocumentNode,\n variables: GraphQLVariables,\n context: ExecutionContext\n): GraphQLVariables {\n const declared = new Set(\n (getOperation(document).variableDefinitions ?? []).map(\n (definition) => definition.variable.name.value\n )\n );\n const merged: GraphQLVariables = { ...variables };\n if (declared.has('preview') && merged['preview'] === undefined) {\n merged['preview'] = context.preview;\n }\n if (declared.has('locale') && merged['locale'] === undefined && context.locale !== undefined) {\n merged['locale'] = context.locale;\n }\n return merged;\n}\n\n/**\n * The single implementation behind both {@link fetchContentful} and the\n * function {@link createFetchContentful} returns.\n *\n * Both are heavily overloaded, and an overloaded signature cannot be called\n * with a `string | DocumentNode` union — so the bound function delegates\n * here rather than re-entering `fetchContentful` through its overloads.\n */\nasync function runFetchContentful(\n query: string | DocumentNode,\n options: FetchContentfulOptions<GraphQLVariables>\n): Promise<unknown> {\n const context = resolveContext(options);\n let document = inlineFragments(toDocument(query));\n if (options.autoInjectArgs ?? true) {\n document = injectRootArgs(document, {\n preview: context.preview,\n locale: context.locale\n });\n }\n\n if (options.validateLocale && context.locale !== undefined) {\n const locales = await getLocales(context);\n if (!locales.some((locale) => locale.code === context.locale)) {\n throw new FetchContentfulError(\n `Locale \"${context.locale}\" is not configured in space \"${context.space}\" ` +\n `(available: ${locales.map((locale) => locale.code).join(', ')}).`,\n { code: 'LOCALE' }\n );\n }\n }\n\n const variables = withAutoVariables(document, options.variables ?? {}, context);\n const data = await executeDocument(document, variables, context);\n // Runs on the raw shape, after every subquery has been stitched in, so a\n // split collection is cleaned exactly like an inline one.\n const resolved = context.unresolvableLinks === 'null' ? data : omitUnresolvedLinks(data);\n const result = options.shapeResponseData === false ? resolved : shapeData(resolved);\n if (options.unwrapRootField === false) {\n return result;\n }\n return unwrapSingleRoot(result);\n}\n\n/**\n * Fetches data from Contentful's GraphQL API.\n *\n * - Splits nested reference collections (and `@split`-annotated references)\n * into recursive subqueries to stay under query complexity limits, then\n * stitches everything back together.\n * - Retries transient failures with exponential backoff.\n * - Rejects if any request in the tree fails; resolves only when the full\n * query has succeeded. A link Contentful could not resolve is the one\n * thing that does not count as a failure — see below.\n * - Shapes the response so every `fooCollection.items` becomes `foo`\n * (disable with `shapeResponseData: false` to receive the raw wire shape).\n * - Drops the `null` positions an unresolvable link leaves in a collection,\n * in the data *and* in the return type, so `items` is safe to map over\n * (change with `unresolvableLinks`; report them with `onUnresolvableLink`).\n *\n * Pass a typed document — from gql.tada, graphql-codegen's client preset, or\n * anything else producing a `TypedDocumentNode` — and both the result and\n * the variables are inferred, with no type arguments to write by hand.\n */\nexport async function fetchContentful<TResult, TVariables = GraphQLVariables>(\n document: TypedDocumentNode<TResult, TVariables>,\n options: TypedFetchContentfulOptions<TVariables> & {\n unresolvableLinks: 'null';\n shapeResponseData: false;\n unwrapRootField: false;\n }\n): Promise<DocumentResult<TResult>>;\nexport async function fetchContentful<TResult, TVariables = GraphQLVariables>(\n document: TypedDocumentNode<TResult, TVariables>,\n options: TypedFetchContentfulOptions<TVariables> & {\n unresolvableLinks: 'null';\n shapeResponseData: false;\n }\n): Promise<UnwrapSingleRoot<DocumentResult<TResult>>>;\nexport async function fetchContentful<TResult, TVariables = GraphQLVariables>(\n document: TypedDocumentNode<TResult, TVariables>,\n options: TypedFetchContentfulOptions<TVariables> & {\n unresolvableLinks: 'null';\n unwrapRootField: false;\n }\n): Promise<ShapeCollections<DocumentResult<TResult>>>;\nexport async function fetchContentful<TResult, TVariables = GraphQLVariables>(\n document: TypedDocumentNode<TResult, TVariables>,\n options: TypedFetchContentfulOptions<TVariables> & {\n unresolvableLinks: 'null';\n }\n): Promise<UnwrapSingleRoot<ShapeCollections<DocumentResult<TResult>>>>;\nexport async function fetchContentful<\n TData = Record<string, unknown>,\n TVariables extends GraphQLVariables = GraphQLVariables\n>(\n query: string,\n options: FetchContentfulOptions<TVariables> & {\n unresolvableLinks: 'null';\n shapeResponseData: false;\n unwrapRootField: false;\n }\n): Promise<TData>;\nexport async function fetchContentful<\n TData = Record<string, unknown>,\n TVariables extends GraphQLVariables = GraphQLVariables\n>(\n query: string,\n options: FetchContentfulOptions<TVariables> & {\n unresolvableLinks: 'null';\n shapeResponseData: false;\n }\n): Promise<UnwrapSingleRoot<TData>>;\nexport async function fetchContentful<\n TData = Record<string, unknown>,\n TVariables extends GraphQLVariables = GraphQLVariables\n>(\n query: string,\n options: FetchContentfulOptions<TVariables> & {\n unresolvableLinks: 'null';\n unwrapRootField: false;\n }\n): Promise<ShapeCollections<TData>>;\nexport async function fetchContentful<\n TData = Record<string, unknown>,\n TVariables extends GraphQLVariables = GraphQLVariables\n>(\n query: string,\n options: FetchContentfulOptions<TVariables> & {\n unresolvableLinks: 'null';\n }\n): Promise<UnwrapSingleRoot<ShapeCollections<TData>>>;\nexport async function fetchContentful<TResult, TVariables = GraphQLVariables>(\n document: TypedDocumentNode<TResult, TVariables>,\n options: TypedFetchContentfulOptions<TVariables> & {\n shapeResponseData: false;\n unwrapRootField: false;\n }\n): Promise<OmitUnresolvedLinks<DocumentResult<TResult>>>;\nexport async function fetchContentful<TResult, TVariables = GraphQLVariables>(\n document: TypedDocumentNode<TResult, TVariables>,\n options: TypedFetchContentfulOptions<TVariables> & {\n shapeResponseData: false;\n }\n): Promise<UnwrapSingleRoot<OmitUnresolvedLinks<DocumentResult<TResult>>>>;\nexport async function fetchContentful<TResult, TVariables = GraphQLVariables>(\n document: TypedDocumentNode<TResult, TVariables>,\n options: TypedFetchContentfulOptions<TVariables> & {\n unwrapRootField: false;\n }\n): Promise<ShapeCollections<OmitUnresolvedLinks<DocumentResult<TResult>>>>;\nexport async function fetchContentful<TResult, TVariables = GraphQLVariables>(\n document: TypedDocumentNode<TResult, TVariables>,\n ...args: Record<string, never> extends CallerVariables<TVariables>\n ? [options?: TypedFetchContentfulOptions<TVariables>]\n : [options: TypedFetchContentfulOptions<TVariables>]\n): Promise<UnwrapSingleRoot<ShapeCollections<OmitUnresolvedLinks<DocumentResult<TResult>>>>>;\nexport async function fetchContentful<\n TData = Record<string, unknown>,\n TVariables extends GraphQLVariables = GraphQLVariables\n>(\n query: string,\n options: FetchContentfulOptions<TVariables> & {\n shapeResponseData: false;\n unwrapRootField: false;\n }\n): Promise<OmitUnresolvedLinks<TData>>;\nexport async function fetchContentful<\n TData = Record<string, unknown>,\n TVariables extends GraphQLVariables = GraphQLVariables\n>(\n query: string,\n options: FetchContentfulOptions<TVariables> & {\n shapeResponseData: false;\n }\n): Promise<UnwrapSingleRoot<OmitUnresolvedLinks<TData>>>;\nexport async function fetchContentful<\n TData = Record<string, unknown>,\n TVariables extends GraphQLVariables = GraphQLVariables\n>(\n query: string,\n options: FetchContentfulOptions<TVariables> & {\n unwrapRootField: false;\n }\n): Promise<ShapeCollections<OmitUnresolvedLinks<TData>>>;\nexport async function fetchContentful<\n TData = Record<string, unknown>,\n TVariables extends GraphQLVariables = GraphQLVariables\n>(\n query: string,\n options?: FetchContentfulOptions<TVariables>\n): Promise<UnwrapSingleRoot<ShapeCollections<OmitUnresolvedLinks<TData>>>>;\nexport async function fetchContentful(\n query: string | DocumentNode,\n options: FetchContentfulOptions<GraphQLVariables> = {}\n): Promise<unknown> {\n return runFetchContentful(query, options);\n}\n\n/**\n * Creates a `fetchContentful` bound to default options — the recommended way\n * to configure the utility once per project:\n *\n * ```ts\n * // lib/contentful.ts\n * export const fetchContentful = createFetchContentful({\n * space: 'abc123',\n * locale: 'de-DE', // overrides the 'en-US' default for the whole project\n * retries: 3,\n * });\n * ```\n *\n * Per-call options win over defaults (top-level shallow merge). Note that\n * `shapeResponseData: false`, `unwrapRootField: false` and\n * `unresolvableLinks: 'null'` only change the *return type* when written on\n * the call itself, so prefer setting those per call. Set on the factory they\n * still take effect at runtime — the type just assumes the default.\n */\nexport function createFetchContentful<\n TDefaultVariables extends GraphQLVariables = GraphQLVariables\n>(defaults: FetchContentfulOptions<TDefaultVariables> = {}) {\n function bound<TResult, TVariables = GraphQLVariables>(\n document: TypedDocumentNode<TResult, TVariables>,\n options: TypedFetchContentfulOptions<TVariables> & {\n unresolvableLinks: 'null';\n shapeResponseData: false;\n unwrapRootField: false;\n }\n ): Promise<DocumentResult<TResult>>;\n function bound<TResult, TVariables = GraphQLVariables>(\n document: TypedDocumentNode<TResult, TVariables>,\n options: TypedFetchContentfulOptions<TVariables> & {\n unresolvableLinks: 'null';\n shapeResponseData: false;\n }\n ): Promise<UnwrapSingleRoot<DocumentResult<TResult>>>;\n function bound<TResult, TVariables = GraphQLVariables>(\n document: TypedDocumentNode<TResult, TVariables>,\n options: TypedFetchContentfulOptions<TVariables> & {\n unresolvableLinks: 'null';\n unwrapRootField: false;\n }\n ): Promise<ShapeCollections<DocumentResult<TResult>>>;\n function bound<TResult, TVariables = GraphQLVariables>(\n document: TypedDocumentNode<TResult, TVariables>,\n options: TypedFetchContentfulOptions<TVariables> & {\n unresolvableLinks: 'null';\n }\n ): Promise<UnwrapSingleRoot<ShapeCollections<DocumentResult<TResult>>>>;\n function bound<\n TData = Record<string, unknown>,\n TVariables extends GraphQLVariables = GraphQLVariables\n >(\n query: string,\n options: FetchContentfulOptions<TVariables> & {\n unresolvableLinks: 'null';\n shapeResponseData: false;\n unwrapRootField: false;\n }\n ): Promise<TData>;\n function bound<\n TData = Record<string, unknown>,\n TVariables extends GraphQLVariables = GraphQLVariables\n >(\n query: string,\n options: FetchContentfulOptions<TVariables> & {\n unresolvableLinks: 'null';\n shapeResponseData: false;\n }\n ): Promise<UnwrapSingleRoot<TData>>;\n function bound<\n TData = Record<string, unknown>,\n TVariables extends GraphQLVariables = GraphQLVariables\n >(\n query: string,\n options: FetchContentfulOptions<TVariables> & {\n unresolvableLinks: 'null';\n unwrapRootField: false;\n }\n ): Promise<ShapeCollections<TData>>;\n function bound<\n TData = Record<string, unknown>,\n TVariables extends GraphQLVariables = GraphQLVariables\n >(\n query: string,\n options: FetchContentfulOptions<TVariables> & {\n unresolvableLinks: 'null';\n }\n ): Promise<UnwrapSingleRoot<ShapeCollections<TData>>>;\n function bound<TResult, TVariables = GraphQLVariables>(\n document: TypedDocumentNode<TResult, TVariables>,\n options: TypedFetchContentfulOptions<TVariables> & {\n shapeResponseData: false;\n unwrapRootField: false;\n }\n ): Promise<OmitUnresolvedLinks<DocumentResult<TResult>>>;\n function bound<TResult, TVariables = GraphQLVariables>(\n document: TypedDocumentNode<TResult, TVariables>,\n options: TypedFetchContentfulOptions<TVariables> & {\n shapeResponseData: false;\n }\n ): Promise<UnwrapSingleRoot<OmitUnresolvedLinks<DocumentResult<TResult>>>>;\n function bound<TResult, TVariables = GraphQLVariables>(\n document: TypedDocumentNode<TResult, TVariables>,\n options: TypedFetchContentfulOptions<TVariables> & {\n unwrapRootField: false;\n }\n ): Promise<ShapeCollections<OmitUnresolvedLinks<DocumentResult<TResult>>>>;\n function bound<TResult, TVariables = GraphQLVariables>(\n document: TypedDocumentNode<TResult, TVariables>,\n ...args: Record<string, never> extends CallerVariables<TVariables>\n ? [options?: TypedFetchContentfulOptions<TVariables>]\n : [options: TypedFetchContentfulOptions<TVariables>]\n ): Promise<UnwrapSingleRoot<ShapeCollections<OmitUnresolvedLinks<DocumentResult<TResult>>>>>;\n function bound<\n TData = Record<string, unknown>,\n TVariables extends GraphQLVariables = GraphQLVariables\n >(\n query: string,\n options: FetchContentfulOptions<TVariables> & {\n shapeResponseData: false;\n unwrapRootField: false;\n }\n ): Promise<OmitUnresolvedLinks<TData>>;\n function bound<\n TData = Record<string, unknown>,\n TVariables extends GraphQLVariables = GraphQLVariables\n >(\n query: string,\n options: FetchContentfulOptions<TVariables> & {\n shapeResponseData: false;\n }\n ): Promise<UnwrapSingleRoot<OmitUnresolvedLinks<TData>>>;\n function bound<\n TData = Record<string, unknown>,\n TVariables extends GraphQLVariables = GraphQLVariables\n >(\n query: string,\n options: FetchContentfulOptions<TVariables> & {\n unwrapRootField: false;\n }\n ): Promise<ShapeCollections<OmitUnresolvedLinks<TData>>>;\n function bound<\n TData = Record<string, unknown>,\n TVariables extends GraphQLVariables = GraphQLVariables\n >(\n query: string,\n options?: FetchContentfulOptions<TVariables>\n ): Promise<UnwrapSingleRoot<ShapeCollections<OmitUnresolvedLinks<TData>>>>;\n function bound(\n query: string | DocumentNode,\n options: FetchContentfulOptions<GraphQLVariables> = {}\n ): Promise<unknown> {\n return runFetchContentful(query, {\n ...defaults,\n ...options\n } as FetchContentfulOptions<GraphQLVariables>);\n }\n return bound;\n}\n\nexport default fetchContentful;\n"]}