@fourtwelvelabs/fetch-contentful 0.3.0 → 0.4.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.
package/dist/index.cjs CHANGED
@@ -518,10 +518,14 @@ function readEnvSettings() {
518
518
  return {
519
519
  space: void 0,
520
520
  environment: void 0,
521
+ deliveryToken: void 0,
521
522
  token: void 0,
522
523
  previewToken: void 0
523
524
  };
524
525
  }
526
+ const deliveryToken = orUndefined(
527
+ process.env.CONTENTFUL_ACCESS_TOKEN || process.env.NEXT_PUBLIC_CONTENTFUL_ACCESS_TOKEN
528
+ );
525
529
  return {
526
530
  space: orUndefined(
527
531
  process.env.CONTENTFUL_SPACE_ID || process.env.NEXT_PUBLIC_CONTENTFUL_SPACE_ID
@@ -529,12 +533,10 @@ function readEnvSettings() {
529
533
  environment: orUndefined(
530
534
  process.env.CONTENTFUL_ENVIRONMENT || process.env.NEXT_PUBLIC_CONTENTFUL_ENVIRONMENT
531
535
  ),
532
- token: orUndefined(
533
- process.env.CONTENTFUL_ACCESS_TOKEN || process.env.NEXT_PUBLIC_CONTENTFUL_ACCESS_TOKEN
534
- ),
535
- previewToken: orUndefined(
536
- process.env.CONTENTFUL_PREVIEW_ACCESS_TOKEN || process.env.NEXT_PUBLIC_CONTENTFUL_PREVIEW_ACCESS_TOKEN
537
- )
536
+ deliveryToken,
537
+ token: deliveryToken,
538
+ // No `NEXT_PUBLIC_` fallback: see the note at the top of this file.
539
+ previewToken: orUndefined(process.env.CONTENTFUL_PREVIEW_ACCESS_TOKEN)
538
540
  };
539
541
  }
540
542
  function argumentsOf(field) {
@@ -744,7 +746,7 @@ function resolveContext(options) {
744
746
  const space = options.space ?? env.space;
745
747
  const environment = options.environment ?? env.environment ?? "master";
746
748
  const preview = options.preview ?? false;
747
- const token = options.token ?? (preview ? env.previewToken : env.token);
749
+ const token = preview ? options.previewToken ?? options.token ?? env.previewToken : options.deliveryToken ?? options.token ?? env.deliveryToken;
748
750
  if (!space || !token) {
749
751
  const missing = [];
750
752
  if (!space) {
@@ -754,7 +756,7 @@ function resolveContext(options) {
754
756
  }
755
757
  if (!token) {
756
758
  missing.push(
757
- preview ? "preview access token (pass `token` or set CONTENTFUL_PREVIEW_ACCESS_TOKEN / NEXT_PUBLIC_CONTENTFUL_PREVIEW_ACCESS_TOKEN)" : "access token (pass `token` or set CONTENTFUL_ACCESS_TOKEN / NEXT_PUBLIC_CONTENTFUL_ACCESS_TOKEN)"
759
+ preview ? "preview access token (pass `previewToken` or set CONTENTFUL_PREVIEW_ACCESS_TOKEN \u2014 note there is no NEXT_PUBLIC_ equivalent, by design)" : "delivery access token (pass `deliveryToken` or set CONTENTFUL_ACCESS_TOKEN / NEXT_PUBLIC_CONTENTFUL_ACCESS_TOKEN)"
758
760
  );
759
761
  }
760
762
  throw new FetchContentfulError(
@@ -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.\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 token: string | undefined;\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 9 -- process always exists in the test runtime */\n if (typeof process === 'undefined' || !process.env) {\n return {\n space: undefined,\n environment: undefined,\n token: undefined,\n previewToken: undefined,\n };\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 token: orUndefined(\n process.env.CONTENTFUL_ACCESS_TOKEN ||\n process.env.NEXT_PUBLIC_CONTENTFUL_ACCESS_TOKEN,\n ),\n previewToken: orUndefined(\n process.env.CONTENTFUL_PREVIEW_ACCESS_TOKEN ||\n process.env.NEXT_PUBLIC_CONTENTFUL_PREVIEW_ACCESS_TOKEN,\n ),\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 const token = options.token ?? (preview ? env.previewToken : env.token);\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 `token` or set CONTENTFUL_PREVIEW_ACCESS_TOKEN / NEXT_PUBLIC_CONTENTFUL_PREVIEW_ACCESS_TOKEN)'\n : 'access token (pass `token` 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/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"]}
package/dist/index.d.cts CHANGED
@@ -73,9 +73,30 @@ interface FetchContentfulOptions<TVariables extends GraphQLVariables = GraphQLVa
73
73
  */
74
74
  validateLocale?: boolean;
75
75
  /**
76
- * Access token. Defaults to `process.env.CONTENTFUL_PREVIEW_ACCESS_TOKEN`
77
- * when `preview` is true, otherwise `process.env.CONTENTFUL_ACCESS_TOKEN`
78
- * (with `NEXT_PUBLIC_`-prefixed fallbacks for client-side use).
76
+ * Content Delivery API token, used when `preview` is `false`.
77
+ *
78
+ * Defaults to `process.env.CONTENTFUL_ACCESS_TOKEN`, then
79
+ * `process.env.NEXT_PUBLIC_CONTENTFUL_ACCESS_TOKEN`. Delivery tokens are
80
+ * read-only and safe to expose to a browser.
81
+ */
82
+ deliveryToken?: string;
83
+ /**
84
+ * Content Preview API token, used when `preview` is `true`.
85
+ *
86
+ * Defaults to `process.env.CONTENTFUL_PREVIEW_ACCESS_TOKEN`. There is
87
+ * deliberately **no** `NEXT_PUBLIC_` fallback: a preview token reads
88
+ * unpublished content, and Next.js would inline such a variable into
89
+ * client bundles. Pass this option explicitly if you have decided that
90
+ * shipping it to the browser is acceptable for your app.
91
+ */
92
+ previewToken?: string;
93
+ /**
94
+ * Access token for whichever mode is active.
95
+ *
96
+ * @deprecated Use {@link FetchContentfulOptions.deliveryToken} and
97
+ * {@link FetchContentfulOptions.previewToken}. A single `token` cannot
98
+ * serve both modes, so a factory configured with one sends the wrong
99
+ * token as soon as a call passes `preview: true`.
79
100
  */
80
101
  token?: string;
81
102
  /**
@@ -236,7 +257,18 @@ declare function isFetchContentfulError(value: unknown): value is FetchContentfu
236
257
  * 1. Framework-neutral names — `CONTENTFUL_SPACE_ID`, `CONTENTFUL_ENVIRONMENT`,
237
258
  * `CONTENTFUL_ACCESS_TOKEN`, `CONTENTFUL_PREVIEW_ACCESS_TOKEN`.
238
259
  * 2. `NEXT_PUBLIC_`-prefixed equivalents for Next.js projects that call
239
- * Contentful from the browser.
260
+ * Contentful from the browser — for the space, the environment and the
261
+ * **delivery** token only.
262
+ *
263
+ * The preview token is deliberately absent from that second family. Next.js
264
+ * inlines `NEXT_PUBLIC_` variables into client bundles by string-replacing
265
+ * the literal accesses below, so merely importing this module in a project
266
+ * that set `NEXT_PUBLIC_CONTENTFUL_PREVIEW_ACCESS_TOKEN` would bake the
267
+ * token into public JavaScript — whether or not any client code ever asks
268
+ * for preview content. A delivery token is read-only and commonly public; a
269
+ * preview token reads unpublished content and must not leak. Callers that
270
+ * genuinely need preview in the browser pass `previewToken` explicitly, so
271
+ * the exposure is their deliberate choice rather than this module's.
240
272
  *
241
273
  * IMPORTANT: every lookup below is written as a literal
242
274
  * `process.env.SOME_NAME` property access, never a dynamic `process.env[x]`.
@@ -252,7 +284,16 @@ declare function isFetchContentfulError(value: unknown): value is FetchContentfu
252
284
  interface EnvSettings {
253
285
  space: string | undefined;
254
286
  environment: string | undefined;
287
+ /** Content Delivery API token, for published content. */
288
+ deliveryToken: string | undefined;
289
+ /**
290
+ * Content Delivery API token.
291
+ *
292
+ * @deprecated Renamed to {@link EnvSettings.deliveryToken}, which says
293
+ * which of the two tokens it is. Kept as an alias; same value.
294
+ */
255
295
  token: string | undefined;
296
+ /** Content Preview API token, for draft content. Server-side only. */
256
297
  previewToken: string | undefined;
257
298
  }
258
299
  /** Reads Contentful settings from `process.env` (neutral names first). */
package/dist/index.d.ts CHANGED
@@ -73,9 +73,30 @@ interface FetchContentfulOptions<TVariables extends GraphQLVariables = GraphQLVa
73
73
  */
74
74
  validateLocale?: boolean;
75
75
  /**
76
- * Access token. Defaults to `process.env.CONTENTFUL_PREVIEW_ACCESS_TOKEN`
77
- * when `preview` is true, otherwise `process.env.CONTENTFUL_ACCESS_TOKEN`
78
- * (with `NEXT_PUBLIC_`-prefixed fallbacks for client-side use).
76
+ * Content Delivery API token, used when `preview` is `false`.
77
+ *
78
+ * Defaults to `process.env.CONTENTFUL_ACCESS_TOKEN`, then
79
+ * `process.env.NEXT_PUBLIC_CONTENTFUL_ACCESS_TOKEN`. Delivery tokens are
80
+ * read-only and safe to expose to a browser.
81
+ */
82
+ deliveryToken?: string;
83
+ /**
84
+ * Content Preview API token, used when `preview` is `true`.
85
+ *
86
+ * Defaults to `process.env.CONTENTFUL_PREVIEW_ACCESS_TOKEN`. There is
87
+ * deliberately **no** `NEXT_PUBLIC_` fallback: a preview token reads
88
+ * unpublished content, and Next.js would inline such a variable into
89
+ * client bundles. Pass this option explicitly if you have decided that
90
+ * shipping it to the browser is acceptable for your app.
91
+ */
92
+ previewToken?: string;
93
+ /**
94
+ * Access token for whichever mode is active.
95
+ *
96
+ * @deprecated Use {@link FetchContentfulOptions.deliveryToken} and
97
+ * {@link FetchContentfulOptions.previewToken}. A single `token` cannot
98
+ * serve both modes, so a factory configured with one sends the wrong
99
+ * token as soon as a call passes `preview: true`.
79
100
  */
80
101
  token?: string;
81
102
  /**
@@ -236,7 +257,18 @@ declare function isFetchContentfulError(value: unknown): value is FetchContentfu
236
257
  * 1. Framework-neutral names — `CONTENTFUL_SPACE_ID`, `CONTENTFUL_ENVIRONMENT`,
237
258
  * `CONTENTFUL_ACCESS_TOKEN`, `CONTENTFUL_PREVIEW_ACCESS_TOKEN`.
238
259
  * 2. `NEXT_PUBLIC_`-prefixed equivalents for Next.js projects that call
239
- * Contentful from the browser.
260
+ * Contentful from the browser — for the space, the environment and the
261
+ * **delivery** token only.
262
+ *
263
+ * The preview token is deliberately absent from that second family. Next.js
264
+ * inlines `NEXT_PUBLIC_` variables into client bundles by string-replacing
265
+ * the literal accesses below, so merely importing this module in a project
266
+ * that set `NEXT_PUBLIC_CONTENTFUL_PREVIEW_ACCESS_TOKEN` would bake the
267
+ * token into public JavaScript — whether or not any client code ever asks
268
+ * for preview content. A delivery token is read-only and commonly public; a
269
+ * preview token reads unpublished content and must not leak. Callers that
270
+ * genuinely need preview in the browser pass `previewToken` explicitly, so
271
+ * the exposure is their deliberate choice rather than this module's.
240
272
  *
241
273
  * IMPORTANT: every lookup below is written as a literal
242
274
  * `process.env.SOME_NAME` property access, never a dynamic `process.env[x]`.
@@ -252,7 +284,16 @@ declare function isFetchContentfulError(value: unknown): value is FetchContentfu
252
284
  interface EnvSettings {
253
285
  space: string | undefined;
254
286
  environment: string | undefined;
287
+ /** Content Delivery API token, for published content. */
288
+ deliveryToken: string | undefined;
289
+ /**
290
+ * Content Delivery API token.
291
+ *
292
+ * @deprecated Renamed to {@link EnvSettings.deliveryToken}, which says
293
+ * which of the two tokens it is. Kept as an alias; same value.
294
+ */
255
295
  token: string | undefined;
296
+ /** Content Preview API token, for draft content. Server-side only. */
256
297
  previewToken: string | undefined;
257
298
  }
258
299
  /** Reads Contentful settings from `process.env` (neutral names first). */