@soda-gql/core 0.1.0 → 0.2.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.
Files changed (68) hide show
  1. package/README.md +70 -135
  2. package/dist/adapter.cjs +35 -0
  3. package/dist/adapter.cjs.map +1 -0
  4. package/dist/adapter.d.cts +35 -0
  5. package/dist/adapter.d.cts.map +1 -0
  6. package/dist/adapter.d.ts +35 -0
  7. package/dist/adapter.d.ts.map +1 -0
  8. package/dist/adapter.js +34 -0
  9. package/dist/adapter.js.map +1 -0
  10. package/dist/index-B-erotAZ.d.cts +657 -0
  11. package/dist/index-B-erotAZ.d.cts.map +1 -0
  12. package/dist/index-Djr9A4KL.d.ts +657 -0
  13. package/dist/index-Djr9A4KL.d.ts.map +1 -0
  14. package/dist/index.cjs +430 -416
  15. package/dist/index.cjs.map +1 -0
  16. package/dist/index.d.cts +88 -3
  17. package/dist/index.d.cts.map +1 -0
  18. package/dist/index.d.ts +88 -3
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +399 -386
  21. package/dist/index.js.map +1 -1
  22. package/dist/runtime.cjs +85 -0
  23. package/dist/runtime.cjs.map +1 -0
  24. package/dist/runtime.d.cts +40 -0
  25. package/dist/runtime.d.cts.map +1 -0
  26. package/dist/runtime.d.ts +40 -0
  27. package/dist/runtime.d.ts.map +1 -0
  28. package/dist/runtime.js +82 -0
  29. package/dist/runtime.js.map +1 -0
  30. package/dist/schema-Bip7o0g3.cjs +128 -0
  31. package/dist/schema-Bip7o0g3.cjs.map +1 -0
  32. package/dist/{index-zGZ61WLt.d.cts → schema-BygZwEX8.d.ts} +246 -117
  33. package/dist/schema-BygZwEX8.d.ts.map +1 -0
  34. package/dist/schema-D9wIW5Dl.js +86 -0
  35. package/dist/schema-D9wIW5Dl.js.map +1 -0
  36. package/dist/{index-Db9ogofS.d.ts → schema-DRkKucYe.d.cts} +246 -117
  37. package/dist/schema-DRkKucYe.d.cts.map +1 -0
  38. package/dist/schema-builder-8zadflz-.d.cts +40 -0
  39. package/dist/schema-builder-8zadflz-.d.cts.map +1 -0
  40. package/dist/schema-builder-vwQtCGYI.d.ts +40 -0
  41. package/dist/schema-builder-vwQtCGYI.d.ts.map +1 -0
  42. package/package.json +34 -14
  43. package/dist/index-DYwkqPzd.d.ts +0 -1015
  44. package/dist/index-DYwkqPzd.d.ts.map +0 -1
  45. package/dist/index-Db9ogofS.d.ts.map +0 -1
  46. package/dist/index-Dth0NSJt.d.cts +0 -1015
  47. package/dist/index-Dth0NSJt.d.cts.map +0 -1
  48. package/dist/index-zGZ61WLt.d.cts.map +0 -1
  49. package/dist/merge-CeMx09is.js +0 -74
  50. package/dist/merge-CeMx09is.js.map +0 -1
  51. package/dist/merge-ZxKV1syS.cjs +0 -85
  52. package/dist/metadata/index.cjs +0 -62
  53. package/dist/metadata/index.d.cts +0 -71
  54. package/dist/metadata/index.d.cts.map +0 -1
  55. package/dist/metadata/index.d.ts +0 -71
  56. package/dist/metadata/index.d.ts.map +0 -1
  57. package/dist/metadata/index.js +0 -59
  58. package/dist/metadata/index.js.map +0 -1
  59. package/dist/runtime/index.cjs +0 -107
  60. package/dist/runtime/index.d.cts +0 -72
  61. package/dist/runtime/index.d.cts.map +0 -1
  62. package/dist/runtime/index.d.ts +0 -72
  63. package/dist/runtime/index.d.ts.map +0 -1
  64. package/dist/runtime/index.js +0 -104
  65. package/dist/runtime/index.js.map +0 -1
  66. package/dist/slice-BuSNc8vw.js +0 -278
  67. package/dist/slice-BuSNc8vw.js.map +0 -1
  68. package/dist/slice-C-FIQK-f.cjs +0 -373
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["value","field","curr: Readonly<{ modifier: string; type: TypeNode }>","cache: { value: TDefinition } | null","promise: Promise<void> | null","define","define","define","define","define","paths","options","fields","cacheMap: CacheMap","factory: AnyFieldSelectionFactory","factoryReturn: AnyFieldSelectionFactoryReturn<TAlias>","operationTypeName: TTypeName | null","operationTypeName: TTypeName | null","elementComposer: GqlElementComposer<typeof composers, typeof helper>"],"sources":["../src/composer/build-document.ts","../src/types/element/gql-element.ts","../src/types/element/composed-operation.ts","../src/types/element/fields-builder.ts","../src/types/element/inline-operation.ts","../src/types/element/model.ts","../src/types/element/slice.ts","../src/composer/projection-path-graph.ts","../src/composer/composed-operation.ts","../src/utils/wrap-by-key.ts","../src/composer/fields-builder.ts","../src/composer/inline-operation.ts","../src/composer/model.ts","../src/composer/slice.ts","../src/types/type-foundation/modified-type-name.ts","../src/composer/var-builder.ts","../src/composer/gql-composer.ts","../src/composer/helpers.ts","../src/utils/type-meta.ts","../src/schema/type-specifier-builder.ts","../src/schema/schema-builder.ts"],"sourcesContent":["import type { TypedDocumentNode } from \"@graphql-typed-document-node/core\";\nimport {\n type ArgumentNode,\n type ConstObjectFieldNode,\n type ConstValueNode,\n type DocumentNode,\n type FieldNode,\n type InlineFragmentNode,\n Kind,\n type NamedTypeNode,\n type ObjectFieldNode,\n OperationTypeNode,\n type TypeNode,\n type ValueNode,\n type VariableDefinitionNode,\n} from \"graphql\";\nimport {\n type AnyAssignableInput,\n type AnyAssignableInputValue,\n type AnyFields,\n type AnyNestedUnion,\n type InferFields,\n VarRef,\n} from \"../types/fragment\";\nimport type { AnyGraphqlSchema, ConstAssignableInput, OperationType } from \"../types/schema\";\nimport type { ConstValue, InputTypeSpecifiers, TypeModifier } from \"../types/type-foundation\";\n\nexport const buildArgumentValue = (value: AnyAssignableInputValue): ValueNode | null => {\n if (value === undefined) {\n return null;\n }\n\n if (value === null) {\n return {\n kind: Kind.NULL,\n };\n }\n\n if (value instanceof VarRef) {\n const inner = VarRef.getInner(value);\n if (inner.type === \"variable\") {\n return {\n kind: Kind.VARIABLE,\n name: { kind: Kind.NAME, value: inner.name },\n };\n }\n\n if (inner.type === \"const-value\") {\n return buildConstValueNode(inner.value);\n }\n\n throw new Error(`Unknown var ref type: ${inner satisfies never}`);\n }\n\n if (Array.isArray(value)) {\n return {\n kind: Kind.LIST,\n values: value.map((item) => buildArgumentValue(item)).filter((item) => item !== null),\n };\n }\n\n if (typeof value === \"object\") {\n return {\n kind: Kind.OBJECT,\n fields: Object.entries(value)\n .map(([key, value]): ObjectFieldNode | null => {\n const valueNode = buildArgumentValue(value);\n return valueNode\n ? {\n kind: Kind.OBJECT_FIELD,\n name: { kind: Kind.NAME, value: key },\n value: valueNode,\n }\n : null;\n })\n .filter((item) => item !== null),\n };\n }\n\n if (typeof value === \"string\") {\n return {\n kind: Kind.STRING,\n value,\n };\n }\n\n if (typeof value === \"number\") {\n // Distinguish between INT and FLOAT\n const isFloat = !Number.isInteger(value) || value.toString().includes(\".\");\n return {\n kind: isFloat ? Kind.FLOAT : Kind.INT,\n value: value.toString(),\n };\n }\n\n if (typeof value === \"boolean\") {\n return {\n kind: Kind.BOOLEAN,\n value,\n };\n }\n\n throw new Error(`Unknown value type: ${typeof (value satisfies never)}`);\n};\n\nconst buildArguments = (args: AnyAssignableInput): ArgumentNode[] =>\n Object.entries(args ?? {})\n .map(([name, value]): ArgumentNode | null => {\n const valueNode = buildArgumentValue(value);\n return valueNode\n ? {\n kind: Kind.ARGUMENT,\n name: { kind: Kind.NAME, value: name },\n value: valueNode,\n }\n : null;\n })\n .filter((item) => item !== null);\n\nconst buildUnionSelection = (union: AnyNestedUnion): InlineFragmentNode[] =>\n Object.entries(union)\n .map(([typeName, object]): InlineFragmentNode | null => {\n return object\n ? {\n kind: Kind.INLINE_FRAGMENT,\n typeCondition: {\n kind: Kind.NAMED_TYPE,\n name: { kind: Kind.NAME, value: typeName },\n },\n selectionSet: {\n kind: Kind.SELECTION_SET,\n selections: buildField(object),\n },\n }\n : null;\n })\n .filter((item) => item !== null);\n\nconst buildField = (field: AnyFields): FieldNode[] =>\n Object.entries(field).map(\n ([alias, { args, field, object, union }]): FieldNode => ({\n kind: Kind.FIELD,\n name: { kind: Kind.NAME, value: field },\n alias: alias !== field ? { kind: Kind.NAME, value: alias } : undefined,\n arguments: buildArguments(args),\n selectionSet: object\n ? {\n kind: Kind.SELECTION_SET,\n selections: buildField(object),\n }\n : union\n ? {\n kind: Kind.SELECTION_SET,\n selections: buildUnionSelection(union),\n }\n : undefined,\n }),\n );\n\nexport const buildConstValueNode = (value: ConstValue): ConstValueNode | null => {\n if (value === undefined) {\n return null;\n }\n\n if (value === null) {\n return { kind: Kind.NULL };\n }\n\n if (typeof value === \"string\") {\n return { kind: Kind.STRING, value };\n }\n\n if (typeof value === \"boolean\") {\n return { kind: Kind.BOOLEAN, value };\n }\n\n if (typeof value === \"number\") {\n // Distinguish between INT and FLOAT\n const isFloat = !Number.isInteger(value) || value.toString().includes(\".\");\n return { kind: isFloat ? Kind.FLOAT : Kind.INT, value: value.toString() };\n }\n\n if (Array.isArray(value)) {\n return {\n kind: Kind.LIST,\n values: value.map((item) => buildConstValueNode(item)).filter((item) => item !== null),\n };\n }\n\n if (typeof value === \"object\") {\n return {\n kind: Kind.OBJECT,\n fields: Object.entries(value)\n .map(([key, value]): ConstObjectFieldNode | null => {\n const valueNode = buildConstValueNode(value);\n return valueNode\n ? {\n kind: Kind.OBJECT_FIELD,\n name: { kind: Kind.NAME, value: key },\n value: valueNode,\n }\n : null;\n })\n .filter((item) => item !== null),\n };\n }\n\n throw new Error(`Unknown value type: ${typeof (value satisfies never)}`);\n};\n\nexport const buildWithTypeModifier = (modifier: TypeModifier, buildType: () => NamedTypeNode): TypeNode => {\n const baseType = buildType();\n\n if (modifier === \"?\") {\n return baseType;\n }\n\n if (modifier === \"!\") {\n return { kind: Kind.NON_NULL_TYPE, type: baseType };\n }\n\n // Validate modifier format: must start with ? or !, followed by []? or []! pairs\n // Valid patterns: \"?\", \"!\", \"?[]?\", \"?[]!\", \"![]?\", \"![]!\", \"?[]?[]?\", etc.\n const validModifierPattern = /^[?!](\\[\\][?!])*$/;\n if (!validModifierPattern.test(modifier)) {\n throw new Error(`Unknown modifier: ${modifier}`);\n }\n\n // New format: starts with inner type modifier (? or !), then []? or []! pairs\n // e.g., \"?[]?\" = nullable list of nullable, \"![]!\" = non-null list of non-null\n let curr: Readonly<{ modifier: string; type: TypeNode }> = {\n modifier,\n type: baseType,\n };\n\n while (curr.modifier.length > 0) {\n // Handle inner type modifier (? or !)\n if (curr.modifier.startsWith(\"?\")) {\n // Nullable inner type - type stays as-is\n curr = {\n modifier: curr.modifier.slice(1),\n type: curr.type,\n };\n continue;\n }\n\n if (curr.modifier.startsWith(\"!\")) {\n // Non-null inner type\n curr = {\n modifier: curr.modifier.slice(1),\n type: curr.type.kind === Kind.NON_NULL_TYPE ? curr.type : { kind: Kind.NON_NULL_TYPE, type: curr.type },\n };\n continue;\n }\n\n // Handle list modifiers ([]? or []!)\n if (curr.modifier.startsWith(\"[]?\")) {\n // Nullable list\n curr = {\n modifier: curr.modifier.slice(3),\n type: { kind: Kind.LIST_TYPE, type: curr.type },\n };\n continue;\n }\n\n if (curr.modifier.startsWith(\"[]!\")) {\n // Non-null list\n curr = {\n modifier: curr.modifier.slice(3),\n type: {\n kind: Kind.NON_NULL_TYPE,\n type: { kind: Kind.LIST_TYPE, type: curr.type },\n },\n };\n continue;\n }\n\n throw new Error(`Unknown modifier: ${curr.modifier}`);\n }\n\n return curr.type;\n};\n\nconst buildVariables = (variables: InputTypeSpecifiers): VariableDefinitionNode[] => {\n return Object.entries(variables).map(\n ([name, ref]): VariableDefinitionNode => ({\n kind: Kind.VARIABLE_DEFINITION,\n variable: { kind: Kind.VARIABLE, name: { kind: Kind.NAME, value: name } },\n defaultValue: (ref.defaultValue && buildConstValueNode(ref.defaultValue.default)) || undefined,\n type: buildWithTypeModifier(ref.modifier, () => ({\n kind: Kind.NAMED_TYPE,\n name: { kind: Kind.NAME, value: ref.name },\n })),\n }),\n );\n};\n\nexport const buildOperationTypeNode = (operation: OperationType): OperationTypeNode => {\n switch (operation) {\n case \"query\":\n return OperationTypeNode.QUERY;\n case \"mutation\":\n return OperationTypeNode.MUTATION;\n case \"subscription\":\n return OperationTypeNode.SUBSCRIPTION;\n default:\n throw new Error(`Unknown operation type: ${operation}`);\n }\n};\n\n// Overloaded function signatures for flexible usage\nexport const buildDocument = <\n TSchema extends AnyGraphqlSchema,\n TFields extends AnyFields,\n TVarDefinitions extends InputTypeSpecifiers,\n>(options: {\n operationName: string;\n operationType: OperationType;\n variables: TVarDefinitions;\n fields: TFields;\n}): TypedDocumentNode<InferFields<TSchema, TFields>, ConstAssignableInput<TSchema, TVarDefinitions>> => {\n const { operationName, operationType, variables, fields } = options;\n return {\n kind: Kind.DOCUMENT,\n definitions: [\n {\n kind: Kind.OPERATION_DEFINITION,\n operation: buildOperationTypeNode(operationType),\n name: { kind: Kind.NAME, value: operationName },\n variableDefinitions: buildVariables(variables),\n // directives: directives || [],\n selectionSet: {\n kind: Kind.SELECTION_SET,\n selections: buildField(fields),\n },\n },\n ],\n } satisfies DocumentNode as TypedDocumentNode<InferFields<TSchema, TFields>, ConstAssignableInput<TSchema, TVarDefinitions>>;\n};\n","const GQL_ELEMENT_FACTORY = Symbol(\"GQL_ELEMENT_FACTORY\");\nconst GQL_ELEMENT_CONTEXT = Symbol(\"GQL_ELEMENT_CONTEXT\");\n\nexport type GqlElementContext = {\n canonicalId: string;\n};\n\nexport type GqlElementDefinitionFactory<T> = (context: GqlElementContext | null) => T | Promise<T>;\ntype GqlElementDefinitionFactoryExecutor<T> = (context: GqlElementContext | null) => Generator<Promise<void>, T, void>;\n\nexport abstract class GqlElement<TDefinition extends object, TInfer extends object = object> {\n declare readonly $infer: TInfer;\n\n private [GQL_ELEMENT_FACTORY]: GqlElementDefinitionFactoryExecutor<TDefinition>;\n private [GQL_ELEMENT_CONTEXT]: GqlElementContext | null = null;\n\n protected constructor(define: GqlElementDefinitionFactory<TDefinition>, getDeps?: () => GqlElement<any>[]) {\n let cache: { value: TDefinition } | null = null;\n let promise: Promise<void> | null = null;\n\n this[GQL_ELEMENT_FACTORY] = function* execute(\n context: GqlElementContext | null,\n ): Generator<Promise<void>, TDefinition, void> {\n if (cache) {\n return cache.value;\n }\n\n if (promise) {\n yield promise;\n // biome-ignore lint/style/noNonNullAssertion: promise is guaranteed to be set\n return cache!.value;\n }\n\n if (getDeps) {\n // Need to evaluate the dependencies before the current element is evaluated.\n //\n // When dependencies is evaluated while the current element is being evaluated,\n // the evaluation method will be synchronous regardless of how the current builder\n // performs. If the dependencies need to be evaluated asynchronously, they throw an error.\n for (const dep of getDeps()) {\n yield* GqlElement.createEvaluationGenerator(dep);\n }\n }\n\n const defined = define(context);\n if (!(defined instanceof Promise)) {\n return (cache = { value: defined }).value;\n }\n\n // Create a promise to resolve the value of the element asynchronously.\n // Yield the promise to make the builder process handle the asynchronous operation if it supports it.\n promise = defined.then((value) => {\n cache = { value };\n promise = null;\n });\n\n yield promise;\n // biome-ignore lint/style/noNonNullAssertion: cache is guaranteed to be set\n return cache!.value;\n };\n\n Object.defineProperty(this, \"$infer\", {\n get() {\n throw new Error(\"This property is only for type meta. Do not access this property directly.\");\n },\n });\n }\n\n static setContext<TElement extends GqlElement<any>>(element: TElement, context: GqlElementContext): void {\n element[GQL_ELEMENT_CONTEXT] = context;\n }\n\n static *createEvaluationGenerator(element: GqlElement<any>): Generator<Promise<void>, void, void> {\n const context = element[GQL_ELEMENT_CONTEXT];\n yield* element[GQL_ELEMENT_FACTORY](context);\n }\n\n private static evaluateInstantly<TValue extends object>(element: GqlElement<TValue>): TValue {\n const context = element[GQL_ELEMENT_CONTEXT];\n const result = element[GQL_ELEMENT_FACTORY](context).next();\n\n if (!result.done) {\n throw new Error(\"Async operation is not supported in sync evaluation.\");\n }\n\n return result.value;\n }\n\n static evaluateSync(element: GqlElement<any>): void {\n void GqlElement.evaluateInstantly(element);\n }\n\n static get<TValue extends object>(element: GqlElement<TValue>): TValue {\n return GqlElement.evaluateInstantly(element);\n }\n}\n","/** Operation composition helpers (`gql.query`, `gql.mutation`, `gql.subscription`). */\n\nimport type { TypedDocumentNode } from \"@graphql-typed-document-node/core\";\nimport type { Hidden } from \"../../utils/hidden\";\nimport type { UnionToIntersection } from \"../../utils/type-utils\";\nimport type { AnyFields, AssigningInput, InferFields } from \"../fragment\";\nimport type { OperationMetadata } from \"../metadata\";\nimport type { AnyGraphqlRuntimeAdapter, InferExecutionResultProjection, NormalizedExecutionResult } from \"../runtime\";\nimport type { AnyConstAssignableInput, AnyGraphqlSchema, ConstAssignableInput, OperationType } from \"../schema\";\nimport type { InputTypeSpecifiers } from \"../type-foundation\";\nimport { GqlElement, type GqlElementContext } from \"./gql-element\";\nimport type { AnySlicePayloads } from \"./slice\";\n\nexport type AnyComposedOperation =\n | AnyComposedOperationOf<\"query\">\n | AnyComposedOperationOf<\"mutation\">\n | AnyComposedOperationOf<\"subscription\">;\nexport type AnyComposedOperationOf<TOperationType extends OperationType> = ComposedOperation<\n AnyGraphqlRuntimeAdapter,\n TOperationType,\n string,\n string[],\n any,\n any,\n any\n>;\n\nexport type ComposedOperationInferMeta<TVariables, TRawData extends object, TProjectedData extends object> = {\n readonly input: TVariables;\n readonly output: { readonly raw: TRawData; readonly projected: TProjectedData };\n};\n\ndeclare const __COMPOSED_OPERATION_BRAND__: unique symbol;\n\ntype ComposedOperationDefinition<\n TRuntimeAdapter extends AnyGraphqlRuntimeAdapter,\n TOperationType extends OperationType,\n TOperationName extends string,\n TVariableNames extends string[],\n TVariables extends AnyConstAssignableInput,\n TRawData extends object,\n TProjectedData extends object,\n> = {\n readonly operationType: TOperationType;\n readonly operationName: TOperationName;\n readonly variableNames: TVariableNames;\n readonly projectionPathGraph: ProjectionPathGraphNode;\n readonly document: TypedDocumentNode<TRawData, TVariables>;\n readonly parse: (result: NormalizedExecutionResult<TRuntimeAdapter, TRawData, any>) => TProjectedData;\n readonly metadata?: OperationMetadata;\n};\n\nexport class ComposedOperation<\n TRuntimeAdapter extends AnyGraphqlRuntimeAdapter,\n TOperationType extends OperationType,\n TOperationName extends string,\n TVariableNames extends string[],\n TVariables extends AnyConstAssignableInput,\n TRawData extends object,\n TProjectedData extends object,\n >\n extends GqlElement<\n ComposedOperationDefinition<\n TRuntimeAdapter,\n TOperationType,\n TOperationName,\n TVariableNames,\n TVariables,\n TRawData,\n TProjectedData\n >,\n ComposedOperationInferMeta<TVariables, TRawData, TProjectedData>\n >\n implements\n ComposedOperationDefinition<\n TRuntimeAdapter,\n TOperationType,\n TOperationName,\n TVariableNames,\n TVariables,\n TRawData,\n TProjectedData\n >\n{\n declare readonly [__COMPOSED_OPERATION_BRAND__]: Hidden<{\n operationType: TOperationType;\n }>;\n\n private constructor(\n define: (\n context: GqlElementContext | null,\n ) =>\n | ComposedOperationDefinition<\n TRuntimeAdapter,\n TOperationType,\n TOperationName,\n TVariableNames,\n TVariables,\n TRawData,\n TProjectedData\n >\n | Promise<\n ComposedOperationDefinition<\n TRuntimeAdapter,\n TOperationType,\n TOperationName,\n TVariableNames,\n TVariables,\n TRawData,\n TProjectedData\n >\n >,\n ) {\n super(define);\n }\n\n public get operationType() {\n return GqlElement.get(this).operationType;\n }\n public get operationName() {\n return GqlElement.get(this).operationName;\n }\n public get variableNames() {\n return GqlElement.get(this).variableNames;\n }\n public get projectionPathGraph() {\n return GqlElement.get(this).projectionPathGraph;\n }\n public get document() {\n return GqlElement.get(this).document;\n }\n public get parse() {\n return GqlElement.get(this).parse;\n }\n public get metadata() {\n return GqlElement.get(this).metadata;\n }\n\n static create<\n TSchema extends AnyGraphqlSchema,\n TRuntimeAdapter extends AnyGraphqlRuntimeAdapter,\n TOperationType extends OperationType,\n TOperationName extends string,\n TVariableDefinitions extends InputTypeSpecifiers,\n TSliceFragments extends AnySlicePayloads,\n >(\n define: (context: import(\"./gql-element\").GqlElementContext | null) =>\n | {\n operationType: TOperationType;\n operationName: TOperationName;\n variableNames: (keyof TVariableDefinitions & string)[];\n projectionPathGraph: ProjectionPathGraphNode;\n document: TypedDocumentNode<\n InferComposedOperationRawData<TSchema, TSliceFragments>,\n ConstAssignableInput<TSchema, TVariableDefinitions>\n >;\n parse: (\n result: NormalizedExecutionResult<TRuntimeAdapter, InferComposedOperationRawData<TSchema, TSliceFragments>, any>,\n ) => {\n [K in keyof TSliceFragments]: InferExecutionResultProjection<TSliceFragments[K][\"projection\"]>;\n };\n metadata?: OperationMetadata;\n }\n | Promise<{\n operationType: TOperationType;\n operationName: TOperationName;\n variableNames: (keyof TVariableDefinitions & string)[];\n projectionPathGraph: ProjectionPathGraphNode;\n document: TypedDocumentNode<\n InferComposedOperationRawData<TSchema, TSliceFragments>,\n ConstAssignableInput<TSchema, TVariableDefinitions>\n >;\n parse: (\n result: NormalizedExecutionResult<TRuntimeAdapter, InferComposedOperationRawData<TSchema, TSliceFragments>, any>,\n ) => {\n [K in keyof TSliceFragments]: InferExecutionResultProjection<TSliceFragments[K][\"projection\"]>;\n };\n metadata?: OperationMetadata;\n }>,\n ) {\n return new ComposedOperation(define);\n }\n}\n\nexport type ProjectionPathGraphNode = {\n readonly matches: { label: string; path: string; exact: boolean }[];\n readonly children: { readonly [segment: string]: ProjectionPathGraphNode };\n};\n\nexport type ConcatSlicePayloads<TSlicePayloads extends AnySlicePayloads> = UnionToIntersection<\n {\n [TLabel in keyof TSlicePayloads & string]: TSlicePayloads[TLabel] extends { getFields: () => infer TFields }\n ? { [K in keyof TFields & string as `${TLabel}_${K}`]: TFields[K] }\n : {};\n }[keyof TSlicePayloads & string]\n> &\n AnyFields;\n\nexport type InferComposedOperationRawData<\n TSchema extends AnyGraphqlSchema,\n TSlicePayloads extends AnySlicePayloads,\n> = InferFields<TSchema, ConcatSlicePayloads<TSlicePayloads>>;\n\nexport type ComposedOperationDefinitionBuilder<\n TSchema extends AnyGraphqlSchema,\n TVarDefinitions extends InputTypeSpecifiers,\n TSliceContents extends AnySlicePayloads,\n> = (tools: { $: NoInfer<AssigningInput<TSchema, TVarDefinitions>> }) => TSliceContents;\n","/** Field builder factories shared by model and slice helpers. */\n\nimport type { IfEmpty } from \"../../utils/empty-object\";\nimport type { UnionToIntersection } from \"../../utils/type-utils\";\nimport type {\n AbstractFieldSelection,\n AnyAssignableInput,\n AnyDirectiveAttachments,\n AnyFieldSelection,\n AnyFields,\n AnyNestedObject,\n AnyNestedUnion,\n AssigningInput,\n FieldSelectionTemplateOf,\n} from \"../fragment\";\nimport type { AnyGraphqlSchema, ObjectFieldRecord, UnionMemberName } from \"../schema\";\nimport type {\n InputTypeSpecifiers,\n OutputEnumSpecifier,\n OutputObjectSpecifier,\n OutputScalarSpecifier,\n OutputTypenameSpecifier,\n OutputUnionSpecifier,\n} from \"../type-foundation\";\n\nexport const mergeFields = <TFieldEntries extends AnyFields[]>(fields: TFieldEntries) =>\n Object.assign({}, ...fields) as MergeFields<TFieldEntries>;\n\nexport type MergeFields<TFieldEntries extends AnyFields[]> = UnionToIntersection<\n TFieldEntries[number]\n> extends infer TFieldsIntersection\n ? {\n [TFieldName in keyof TFieldsIntersection]: TFieldsIntersection[TFieldName] extends AnyFieldSelection\n ? TFieldsIntersection[TFieldName]\n : never;\n } & {}\n : never;\n\n/**\n * Builder signature exposed to userland `model` and `slice` helpers. The\n * tooling `f`/`fields`/`_` aliases provide ergonomic access to GraphQL fields\n * while preserving the original schema information for inference.\n */\nexport type FieldsBuilder<\n TSchema extends AnyGraphqlSchema,\n TTypeName extends keyof TSchema[\"object\"] & string,\n TVariableDefinitions extends InputTypeSpecifiers,\n TFields extends AnyFields[],\n> = (tools: NoInfer<FieldsBuilderTools<TSchema, TTypeName, TVariableDefinitions>>) => TFields;\n\nexport type FieldsBuilderTools<\n TSchema extends AnyGraphqlSchema,\n TTypeName extends keyof TSchema[\"object\"] & string,\n TVariableDefinitions extends InputTypeSpecifiers,\n> = {\n f: FieldSelectionFactories<TSchema, TTypeName>;\n $: AssigningInput<TSchema, TVariableDefinitions>;\n};\n\n/** Narrow builder used when a field resolves to an object and we need nested selections. */\nexport type NestedObjectFieldsBuilder<\n TSchema extends AnyGraphqlSchema,\n TTypeName extends keyof TSchema[\"object\"] & string,\n TFields extends AnyNestedObject[],\n> = (tools: NoInfer<NestedObjectFieldsBuilderTools<TSchema, TTypeName>>) => TFields;\n\nexport type NestedObjectFieldsBuilderTools<\n TSchema extends AnyGraphqlSchema,\n TTypeName extends keyof TSchema[\"object\"] & string,\n> = {\n f: FieldSelectionFactories<TSchema, TTypeName>;\n};\n\nexport type NestedUnionFieldsBuilder<\n TSchema extends AnyGraphqlSchema,\n TMemberName extends string,\n TUnionFields extends AnyNestedUnion,\n> = {\n [TTypename in keyof TUnionFields & TMemberName]?: NestedObjectFieldsBuilder<\n TSchema,\n TTypename,\n NonNullable<TUnionFields[TTypename]>[]\n >;\n};\n\n/** Map each field to a factory capable of emitting fully-typed references. */\nexport type FieldSelectionFactories<TSchema extends AnyGraphqlSchema, TTypeName extends keyof TSchema[\"object\"] & string> = {\n [TFieldName in keyof ObjectFieldRecord<TSchema, TTypeName>]: TFieldName extends string\n ? FieldSelectionFactory<TSchema, FieldSelectionTemplateOf<TSchema, TTypeName, TFieldName>>\n : never;\n};\n\nexport type AnyFieldSelectionFactory = <TAlias extends string | null = null>(\n fieldArgs: AnyAssignableInput | void,\n extras?: { alias?: TAlias; directives?: AnyDirectiveAttachments },\n) => AnyFieldSelectionFactoryReturn<TAlias>;\n\nexport type FieldSelectionFactory<TSchema extends AnyGraphqlSchema, TSelection extends AnyFieldSelection> = <\n TAlias extends string | null = null,\n>(\n fieldArgs: TSelection[\"args\"] | IfEmpty<TSelection[\"args\"], void | null>,\n extras?: { alias?: TAlias; directives?: TSelection[\"directives\"] },\n) => FieldSelectionFactoryReturn<TSchema, TSelection, TAlias>;\n\nexport type AnyFieldSelectionFactoryReturn<TAlias extends string | null> =\n | FieldSelectionFactoryReturn<AnyGraphqlSchema, AnyFieldSelection & { type: OutputObjectSpecifier }, TAlias>\n | FieldSelectionFactoryReturn<AnyGraphqlSchema, AnyFieldSelection & { type: OutputUnionSpecifier }, TAlias>\n | FieldSelectionFactoryReturn<\n AnyGraphqlSchema,\n AnyFieldSelection & { type: OutputTypenameSpecifier | OutputScalarSpecifier | OutputEnumSpecifier },\n TAlias\n >;\n\nexport type FieldSelectionFactoryReturn<\n TSchema extends AnyGraphqlSchema,\n TSelection extends AnyFieldSelection,\n TAlias extends string | null,\n> = TSelection extends { type: OutputObjectSpecifier }\n ? FieldSelectionFactoryObjectReturn<TSchema, TSelection, TAlias>\n : TSelection extends { type: OutputUnionSpecifier }\n ? FieldSelectionFactoryUnionReturn<TSchema, TSelection, TAlias>\n : TSelection extends { type: OutputTypenameSpecifier | OutputScalarSpecifier | OutputEnumSpecifier }\n ? FieldSelectionFactoryPrimitiveReturn<TSelection, TAlias>\n : never;\n\nexport type FieldSelectionFactoryObjectReturn<\n TSchema extends AnyGraphqlSchema,\n TSelection extends AnyFieldSelection & { type: OutputObjectSpecifier },\n TAlias extends string | null,\n> = <TNested extends AnyNestedObject[]>(\n nest: NestedObjectFieldsBuilder<TSchema, TSelection[\"type\"][\"name\"], TNested>,\n) => {\n [_ in TAlias extends null ? TSelection[\"field\"] : TAlias]: AbstractFieldSelection<\n TSelection[\"parent\"],\n TSelection[\"field\"],\n TSelection[\"type\"],\n TSelection[\"args\"],\n TSelection[\"directives\"],\n { object: MergeFields<TNested> }\n >;\n};\n\nexport type FieldSelectionFactoryUnionReturn<\n TSchema extends AnyGraphqlSchema,\n TSelection extends AnyFieldSelection & { type: OutputUnionSpecifier },\n TAlias extends string | null,\n> = <TNested extends AnyNestedUnion>(\n nest: NestedUnionFieldsBuilder<TSchema, UnionMemberName<TSchema, TSelection[\"type\"]>, TNested>,\n) => {\n [_ in TAlias extends null ? TSelection[\"field\"] : TAlias]: AbstractFieldSelection<\n TSelection[\"parent\"],\n TSelection[\"field\"],\n TSelection[\"type\"],\n TSelection[\"args\"],\n TSelection[\"directives\"],\n { union: TNested }\n >;\n};\n\nexport type FieldSelectionFactoryPrimitiveReturn<\n TSelection extends AnyFieldSelection & { type: OutputTypenameSpecifier | OutputScalarSpecifier | OutputEnumSpecifier },\n TAlias extends string | null,\n> = {\n [_ in TAlias extends null ? TSelection[\"field\"] : TAlias]: AbstractFieldSelection<\n TSelection[\"parent\"],\n TSelection[\"field\"],\n TSelection[\"type\"],\n TSelection[\"args\"],\n TSelection[\"directives\"],\n {}\n >;\n};\n\nexport type FieldSelectionFactoryFieldArguments<TFieldSelectionTemplate extends AnyFieldSelection> =\n | TFieldSelectionTemplate[\"args\"]\n | IfEmpty<TFieldSelectionTemplate[\"args\"], void | null>;\n","import type { TypedDocumentNode } from \"@graphql-typed-document-node/core\";\nimport type { Hidden } from \"../../utils/hidden\";\nimport type { AnyFields, InferFields } from \"../fragment\";\nimport type { OperationMetadata } from \"../metadata\";\nimport type { AnyConstAssignableInput, AnyGraphqlSchema, ConstAssignableInput, OperationType } from \"../schema\";\nimport type { InputTypeSpecifiers } from \"../type-foundation\";\nimport { GqlElement, type GqlElementContext } from \"./gql-element\";\n\nexport type AnyInlineOperation =\n | AnyInlineOperationOf<\"query\">\n | AnyInlineOperationOf<\"mutation\">\n | AnyInlineOperationOf<\"subscription\">;\nexport type AnyInlineOperationOf<TOperationType extends OperationType> = InlineOperation<\n TOperationType,\n string,\n string[],\n any,\n AnyFields,\n any\n>;\n\nexport type InlineOperationInferMeta<TVariables, TData extends object> = {\n readonly input: TVariables;\n readonly output: TData;\n};\n\ndeclare const __INLINE_OPERATION_BRAND__: unique symbol;\n\ntype InlineOperationArtifact<\n TOperationType extends OperationType,\n TOperationName extends string,\n TVariableNames extends string[],\n TVariables extends AnyConstAssignableInput,\n TFields extends Partial<AnyFields>,\n TData extends object,\n> = {\n readonly operationType: TOperationType;\n readonly operationName: TOperationName;\n readonly variableNames: TVariableNames;\n readonly documentSource: () => TFields;\n readonly document: TypedDocumentNode<TData, TVariables>;\n readonly metadata?: OperationMetadata;\n};\n\nexport class InlineOperation<\n TOperationType extends OperationType,\n TOperationName extends string,\n TVariableNames extends string[],\n TVariables extends AnyConstAssignableInput,\n TFields extends Partial<AnyFields>,\n TData extends object,\n >\n extends GqlElement<\n InlineOperationArtifact<TOperationType, TOperationName, TVariableNames, TVariables, TFields, TData>,\n InlineOperationInferMeta<TVariables, TData>\n >\n implements InlineOperationArtifact<TOperationType, TOperationName, TVariableNames, TVariables, TFields, TData>\n{\n declare readonly [__INLINE_OPERATION_BRAND__]: Hidden<{\n operationType: TOperationType;\n }>;\n\n private constructor(\n define: (\n context: GqlElementContext | null,\n ) =>\n | InlineOperationArtifact<TOperationType, TOperationName, TVariableNames, TVariables, TFields, TData>\n | Promise<InlineOperationArtifact<TOperationType, TOperationName, TVariableNames, TVariables, TFields, TData>>,\n ) {\n super(define);\n }\n\n public get operationType() {\n return GqlElement.get(this).operationType;\n }\n public get operationName() {\n return GqlElement.get(this).operationName;\n }\n public get variableNames() {\n return GqlElement.get(this).variableNames;\n }\n public get documentSource() {\n return GqlElement.get(this).documentSource;\n }\n public get document() {\n return GqlElement.get(this).document;\n }\n public get metadata() {\n return GqlElement.get(this).metadata;\n }\n\n static create<\n TSchema extends AnyGraphqlSchema,\n TOperationType extends OperationType,\n TOperationName extends string,\n TVariableDefinitions extends InputTypeSpecifiers,\n TFields extends AnyFields,\n >(\n define: (context: GqlElementContext | null) =>\n | {\n operationType: TOperationType;\n operationName: TOperationName;\n variableNames: (keyof TVariableDefinitions & string)[];\n documentSource: () => TFields;\n document: TypedDocumentNode<InferFields<TSchema, TFields>, ConstAssignableInput<TSchema, TVariableDefinitions>>;\n metadata?: OperationMetadata;\n }\n | Promise<{\n operationType: TOperationType;\n operationName: TOperationName;\n variableNames: (keyof TVariableDefinitions & string)[];\n documentSource: () => TFields;\n document: TypedDocumentNode<InferFields<TSchema, TFields>, ConstAssignableInput<TSchema, TVariableDefinitions>>;\n metadata?: OperationMetadata;\n }>,\n ) {\n return new InlineOperation(define);\n }\n}\n","/** Model helper types mirroring the `gql.model` API. */\n\nimport type { SwitchIfEmpty } from \"../../utils/empty-object\";\nimport type { Hidden } from \"../../utils/hidden\";\nimport type { AnyAssignableInput, AnyFields, AssignableInput, InferFields } from \"../fragment\";\nimport type { AnyGraphqlSchema } from \"../schema\";\nimport type { InputTypeSpecifiers } from \"../type-foundation\";\nimport { GqlElement } from \"./gql-element\";\n\nexport type AnyModel = Model<string, any, AnyFields, any, any>;\n\nexport type ModelInferMeta<TVariables, TRaw extends object, TNormalized extends object> = {\n readonly input: TVariables;\n readonly output: { readonly raw: TRaw; readonly normalized: TNormalized };\n};\n\ninterface ModelArtifact<\n TTypeName extends string,\n TVariables extends Partial<AnyAssignableInput> | void,\n TFields extends Partial<AnyFields>,\n TRaw extends object,\n TNormalized extends object,\n> {\n readonly typename: TTypeName;\n readonly fragment: (variables: TVariables) => TFields;\n readonly normalize: (raw: TRaw) => TNormalized;\n}\n\ndeclare const __MODEL_BRAND__: unique symbol;\nexport class Model<\n TTypeName extends string,\n TVariables extends Partial<AnyAssignableInput> | void,\n TFields extends Partial<AnyFields>,\n TRaw extends object,\n TNormalized extends object,\n >\n extends GqlElement<\n ModelArtifact<TTypeName, TVariables, TFields, TRaw, TNormalized>,\n ModelInferMeta<TVariables, TRaw, TNormalized>\n >\n implements ModelArtifact<TTypeName, TVariables, TFields, TRaw, TNormalized>\n{\n declare readonly [__MODEL_BRAND__]: Hidden<{\n input: TVariables;\n output: TNormalized;\n }>;\n\n private constructor(define: () => ModelArtifact<TTypeName, TVariables, TFields, TRaw, TNormalized>) {\n super(define);\n }\n\n public get typename() {\n return GqlElement.get(this).typename;\n }\n public get fragment() {\n return GqlElement.get(this).fragment;\n }\n public get normalize() {\n return GqlElement.get(this).normalize;\n }\n\n static create<\n TSchema extends AnyGraphqlSchema,\n TTypeName extends keyof TSchema[\"object\"] & string,\n TVariableDefinitions extends InputTypeSpecifiers,\n TFields extends AnyFields,\n TNormalized extends object,\n >(\n define: () => {\n typename: TTypeName;\n fragment: (variables: SwitchIfEmpty<TVariableDefinitions, void, AssignableInput<TSchema, TVariableDefinitions>>) => TFields;\n normalize: (raw: NoInfer<InferFields<TSchema, TFields>>) => TNormalized;\n },\n ) {\n type Fields = TFields & { [key: symbol]: never };\n type Raw = InferFields<TSchema, TFields> & { [key: symbol]: never };\n type Variables = SwitchIfEmpty<TVariableDefinitions, void, AssignableInput<TSchema, TVariableDefinitions>>;\n\n return new Model(define as () => ModelArtifact<TTypeName, Variables, Fields, Raw, TNormalized>);\n }\n}\n","import type { SwitchIfEmpty } from \"../../utils/empty-object\";\nimport type { Hidden } from \"../../utils/hidden\";\nimport type { AnyAssignableInput, AnyFields, AssignableInput } from \"../fragment\";\nimport type { SliceMetadata } from \"../metadata\";\nimport type { AnyProjection, InferExecutionResultProjection } from \"../runtime\";\nimport type { AnyGraphqlSchema, OperationType } from \"../schema\";\nimport type { InputTypeSpecifiers } from \"../type-foundation\";\nimport { GqlElement } from \"./gql-element\";\n\nexport type AnySlice = AnySliceOf<\"query\"> | AnySliceOf<\"mutation\"> | AnySliceOf<\"subscription\">;\nexport type AnySliceOf<TOperationType extends OperationType> = Slice<TOperationType, any, AnyFields, AnyProjection>;\n\nexport type SliceInferMeta<TVariables, TProjected> = {\n readonly input: TVariables;\n readonly output: TProjected;\n};\n\ntype SliceDefinition<\n TOperationType extends OperationType,\n TVariables extends Partial<AnyAssignableInput> | void,\n TFields extends Partial<AnyFields>,\n TProjection extends AnyProjection,\n> = {\n readonly operationType: TOperationType;\n readonly embed: (variables: TVariables) => SlicePayload<TVariables, TFields, TProjection>;\n};\n\ndeclare const __OPERATION_SLICE_BRAND__: unique symbol;\nexport class Slice<\n TOperationType extends OperationType,\n TVariables extends Partial<AnyAssignableInput> | void,\n TFields extends Partial<AnyFields>,\n TProjection extends AnyProjection,\n >\n extends GqlElement<\n SliceDefinition<TOperationType, TVariables, TFields, TProjection>,\n SliceInferMeta<TVariables, InferExecutionResultProjection<TProjection>>\n >\n implements SliceDefinition<TOperationType, TVariables, TFields, TProjection>\n{\n declare readonly [__OPERATION_SLICE_BRAND__]: Hidden<{\n operationType: TOperationType;\n output: InferExecutionResultProjection<TProjection>;\n }>;\n\n private constructor(define: () => SliceDefinition<TOperationType, TVariables, TFields, TProjection>) {\n super(define);\n }\n\n public get operationType() {\n return GqlElement.get(this).operationType;\n }\n public get embed() {\n return GqlElement.get(this).embed;\n }\n\n static create<\n TSchema extends AnyGraphqlSchema,\n TOperationType extends OperationType,\n TVariableDefinitions extends InputTypeSpecifiers,\n TFields extends AnyFields,\n TProjection extends AnyProjection,\n >(\n define: () => {\n operationType: TOperationType;\n embed: (\n variables: SwitchIfEmpty<TVariableDefinitions, void, AssignableInput<TSchema, TVariableDefinitions>>,\n ) => SlicePayload<\n SwitchIfEmpty<TVariableDefinitions, void, AssignableInput<TSchema, TVariableDefinitions>>,\n TFields,\n TProjection\n >;\n },\n ) {\n type Fields = TFields & { [key: symbol]: never };\n type Variables = SwitchIfEmpty<TVariableDefinitions, void, AssignableInput<TSchema, TVariableDefinitions>>;\n\n return new Slice(define as () => SliceDefinition<TOperationType, Variables, Fields, TProjection>);\n }\n}\n\nexport type AnySlicePayloads = { [key: string]: AnySlicePayload };\n\nexport type AnySlicePayload = SlicePayload<AnyAssignableInput | void, AnyFields, AnyProjection>;\nexport type SlicePayload<\n TVariables extends Partial<AnyAssignableInput> | void,\n TFields extends Partial<AnyFields>,\n TProjection extends AnyProjection,\n> = {\n variables: TVariables;\n getFields: () => TFields;\n projection: TProjection;\n metadata?: SliceMetadata | Promise<SliceMetadata>;\n};\n\nexport type InferOutputOfSlice<TSlice extends AnySliceOf<any>> = ReturnType<TSlice[typeof __OPERATION_SLICE_BRAND__]>[\"output\"];\n","import type { AnySlicePayload, ProjectionPathGraphNode } from \"../types/element\";\nimport { mapValues } from \"../utils/map-values\";\n\ntype ExecutionResultProjectionPathGraphIntermediate = {\n [segment: string]: { label: string; raw: string; segments: string[] }[];\n};\n\nfunction createPathGraph(paths: ExecutionResultProjectionPathGraphIntermediate[string]): ProjectionPathGraphNode {\n const intermediate = paths.reduce(\n (acc: ExecutionResultProjectionPathGraphIntermediate, { label, raw, segments: [segment, ...segments] }) => {\n if (segment) {\n (acc[segment] || (acc[segment] = [])).push({ label, raw, segments });\n }\n return acc;\n },\n {},\n );\n\n return {\n matches: paths.map(({ label, raw, segments }) => ({ label, path: raw, exact: segments.length === 0 })),\n children: mapValues(intermediate, (paths) => createPathGraph(paths)),\n } satisfies ProjectionPathGraphNode;\n}\n\nexport function createPathGraphFromSliceEntries(fragments: { [key: string]: AnySlicePayload }) {\n const paths = Object.entries(fragments).flatMap(([label, slice]) =>\n Array.from(\n new Map(\n slice.projection.paths.map(({ full: raw, segments }) => {\n const [first, ...rest] = segments;\n return [raw, { label, raw, segments: [`${label}_${first}`, ...rest] }];\n }),\n ).values(),\n ),\n );\n\n return createPathGraph(paths);\n}\n","import { defaultMergeSliceMetadata } from \"../metadata/merge\";\nimport { createExecutionResultParser } from \"../runtime/parse-execution-result\";\nimport {\n type AnySlicePayloads,\n ComposedOperation,\n type ComposedOperationDefinitionBuilder,\n type ConcatSlicePayloads,\n} from \"../types/element\";\nimport type { AnyMetadataAdapter, MetadataBuilder, OperationMetadata, SliceMetadata } from \"../types/metadata\";\nimport type { AnyGraphqlRuntimeAdapter } from \"../types/runtime\";\nimport type { AnyGraphqlSchema, OperationType } from \"../types/schema\";\nimport type { InputTypeSpecifiers } from \"../types/type-foundation\";\n\nimport { buildDocument } from \"./build-document\";\nimport { createVarRefs, type MergeVarDefinitions, mergeVarDefinitions } from \"./input\";\nimport { createPathGraphFromSliceEntries } from \"./projection-path-graph\";\n\nexport type ComposedOperationComposerOptions = {\n metadataAdapter?: AnyMetadataAdapter;\n};\n\nexport const createComposedOperationComposerFactory = <\n TSchema extends AnyGraphqlSchema,\n TRuntimeAdapter extends AnyGraphqlRuntimeAdapter,\n>(\n options: ComposedOperationComposerOptions = {},\n) => {\n const { metadataAdapter } = options;\n return <TOperationType extends OperationType>(operationType: TOperationType) => {\n return <\n TOperationName extends string,\n TSliceFragments extends AnySlicePayloads,\n TVarDefinitions extends InputTypeSpecifiers[] = [{}],\n >(\n options: {\n operationName: TOperationName;\n variables?: TVarDefinitions;\n metadata?: MetadataBuilder<\n ReturnType<typeof createVarRefs<TSchema, MergeVarDefinitions<TVarDefinitions>>>,\n OperationMetadata\n >;\n },\n builder: ComposedOperationDefinitionBuilder<TSchema, MergeVarDefinitions<TVarDefinitions>, TSliceFragments>,\n ) => {\n return ComposedOperation.create<\n TSchema,\n TRuntimeAdapter,\n TOperationType,\n TOperationName,\n MergeVarDefinitions<TVarDefinitions>,\n TSliceFragments\n >(() => {\n const { operationName } = options;\n const variables = mergeVarDefinitions((options.variables ?? []) as TVarDefinitions);\n const $ = createVarRefs<TSchema, typeof variables>(variables);\n const fragments = builder({ $ });\n\n const fields = Object.fromEntries(\n Object.entries(fragments).flatMap(([label, { getFields: fields }]) =>\n Object.entries(fields).map(([key, reference]) => [`${label}_${key}`, reference]),\n ),\n ) as ConcatSlicePayloads<TSliceFragments>;\n const projectionPathGraph = createPathGraphFromSliceEntries(fragments);\n\n const document = buildDocument({\n operationName,\n operationType,\n variables,\n fields,\n });\n const operationMetadataResult = options.metadata?.({ $, document });\n\n // Collect metadata from all slices\n const sliceMetadataResults = Object.values(fragments)\n .map((fragment) => fragment.metadata)\n .filter((m): m is SliceMetadata | Promise<SliceMetadata> => m != null);\n\n const mergeSliceMetadata = metadataAdapter?.mergeSliceMetadata ?? defaultMergeSliceMetadata;\n\n const createDefinition = (operationMetadata: OperationMetadata | undefined, sliceMetadataList: SliceMetadata[]) => {\n const metadata = mergeSliceMetadata(operationMetadata ?? {}, sliceMetadataList);\n return {\n operationType,\n operationName,\n variableNames: Object.keys(variables) as (keyof MergeVarDefinitions<TVarDefinitions> & string)[],\n projectionPathGraph,\n document,\n parse: createExecutionResultParser({ fragments, projectionPathGraph }),\n metadata: Object.keys(metadata).length > 0 ? metadata : undefined,\n };\n };\n\n // Check if any metadata is a Promise\n const hasAsyncOperationMetadata = operationMetadataResult instanceof Promise;\n const hasAsyncSliceMetadata = sliceMetadataResults.some((m) => m instanceof Promise);\n\n if (hasAsyncOperationMetadata || hasAsyncSliceMetadata) {\n // Resolve all promises and create definition\n return Promise.all([\n hasAsyncOperationMetadata ? operationMetadataResult : Promise.resolve(operationMetadataResult),\n Promise.all(sliceMetadataResults.map((m) => (m instanceof Promise ? m : Promise.resolve(m)))),\n ]).then(([operationMetadata, sliceMetadataList]) => createDefinition(operationMetadata, sliceMetadataList));\n }\n\n return createDefinition(operationMetadataResult, sliceMetadataResults as SliceMetadata[]);\n });\n };\n };\n};\n","export function wrapByKey<TName extends string, TValue>(name: TName, value: TValue) {\n return {\n [name]: value,\n } as {\n [K in TName]: TValue;\n };\n}\n","import {\n type AnyFieldSelectionFactory,\n type AnyFieldSelectionFactoryReturn,\n type FieldSelectionFactories,\n type FieldSelectionFactoryObjectReturn,\n type FieldSelectionFactoryPrimitiveReturn,\n type FieldSelectionFactoryUnionReturn,\n mergeFields,\n type NestedObjectFieldsBuilder,\n type NestedUnionFieldsBuilder,\n} from \"../types/element\";\nimport type { AnyFieldSelection, AnyNestedObject, AnyNestedUnion } from \"../types/fragment\";\nimport type { AnyGraphqlSchema, UnionMemberName } from \"../types/schema\";\nimport type {\n OutputEnumSpecifier,\n OutputObjectSpecifier,\n OutputScalarSpecifier,\n OutputTypenameSpecifier,\n OutputUnionSpecifier,\n} from \"../types/type-foundation\";\nimport { mapValues } from \"../utils/map-values\";\nimport { wrapByKey } from \"../utils/wrap-by-key\";\n\n// Cache is schema-scoped to avoid cross-schema contamination when multiple schemas share type names\ntype CacheMap = Map<string, Record<string, AnyFieldSelectionFactory>>;\n\nconst cacheMapBySchema = new WeakMap<AnyGraphqlSchema, CacheMap>();\nconst ensureCacheMapBySchema = (schema: AnyGraphqlSchema) => {\n const cachedCacheMap = cacheMapBySchema.get(schema);\n if (cachedCacheMap) {\n return cachedCacheMap;\n }\n\n const cacheMap: CacheMap = new Map();\n cacheMapBySchema.set(schema, cacheMap);\n return cacheMap;\n};\n\nexport const createFieldFactories = <TSchema extends AnyGraphqlSchema, TTypeName extends keyof TSchema[\"object\"] & string>(\n schema: TSchema,\n typeName: TTypeName,\n): FieldSelectionFactories<TSchema, TTypeName> => {\n const cacheMap = ensureCacheMapBySchema(schema);\n const cached = cacheMap.get(typeName);\n if (cached) {\n return cached as unknown as FieldSelectionFactories<TSchema, TTypeName>;\n }\n\n const factories = createFieldFactoriesInner(schema, typeName);\n cacheMap.set(typeName, factories as unknown as Record<string, AnyFieldSelectionFactory>);\n\n return factories;\n};\n\nconst createFieldFactoriesInner = <TSchema extends AnyGraphqlSchema, TTypeName extends keyof TSchema[\"object\"] & string>(\n schema: TSchema,\n typeName: TTypeName,\n): FieldSelectionFactories<TSchema, TTypeName> => {\n const typeDef = schema.object[typeName];\n if (!typeDef) {\n throw new Error(`Type ${typeName} is not defined in schema objects`);\n }\n\n const entries = Object.entries(typeDef.fields).map(([fieldName, type]): [string, AnyFieldSelectionFactory] => {\n const factory: AnyFieldSelectionFactory = <TAlias extends string | null = null>(\n fieldArgs: AnyFieldSelection[\"args\"] | null | void,\n extras?: { alias?: TAlias; directives?: AnyFieldSelection[\"directives\"] },\n ) => {\n const wrap = <T>(value: T) => wrapByKey((extras?.alias ?? fieldName) as TAlias extends null ? string : TAlias, value);\n\n if (type.kind === \"object\") {\n type TSelection = AnyFieldSelection & { type: OutputObjectSpecifier };\n const factoryReturn: AnyFieldSelectionFactoryReturn<TAlias> = (<TNested extends AnyNestedObject[]>(\n nest: NestedObjectFieldsBuilder<TSchema, TSelection[\"type\"][\"name\"], TNested>,\n ) =>\n wrap({\n parent: typeName,\n field: fieldName,\n type: type,\n args: fieldArgs ?? {},\n directives: extras?.directives ?? {},\n object: mergeFields(nest({ f: createFieldFactories(schema, type.name) })),\n union: null,\n } satisfies AnyFieldSelection)) satisfies FieldSelectionFactoryObjectReturn<TSchema, TSelection, TAlias>;\n\n return factoryReturn;\n }\n\n if (type.kind === \"union\") {\n type TSelection = AnyFieldSelection & { type: OutputUnionSpecifier };\n const factoryReturn: AnyFieldSelectionFactoryReturn<TAlias> = (<TNested extends AnyNestedUnion>(\n nest: NestedUnionFieldsBuilder<TSchema, UnionMemberName<TSchema, TSelection[\"type\"]>, TNested>,\n ) =>\n wrap({\n parent: typeName,\n field: fieldName,\n type: type,\n args: fieldArgs ?? {},\n directives: extras?.directives ?? {},\n object: null,\n union: mapValues(\n nest as Record<string, NestedObjectFieldsBuilder<TSchema, string, AnyNestedObject[]> | undefined>,\n (builder, memberName) => {\n if (!builder) {\n throw new Error(`Builder is undefined for member name: ${memberName}`);\n }\n return mergeFields(builder({ f: createFieldFactories(schema, memberName) }));\n },\n ) as TNested,\n } satisfies AnyFieldSelection)) satisfies FieldSelectionFactoryUnionReturn<TSchema, TSelection, TAlias>;\n\n return factoryReturn;\n }\n\n if (type.kind === \"scalar\" || type.kind === \"enum\" || type.kind === \"typename\") {\n type TSelection = AnyFieldSelection & { type: OutputTypenameSpecifier | OutputScalarSpecifier | OutputEnumSpecifier };\n const factoryReturn: AnyFieldSelectionFactoryReturn<TAlias> = wrap({\n parent: typeName,\n field: fieldName,\n type,\n args: fieldArgs ?? {},\n directives: extras?.directives ?? {},\n object: null,\n union: null,\n } satisfies AnyFieldSelection) satisfies FieldSelectionFactoryPrimitiveReturn<TSelection, TAlias>;\n return factoryReturn;\n }\n\n throw new Error(`Unsupported field type: ${type satisfies never}`);\n };\n\n return [fieldName, factory] as const;\n });\n\n const factories: Record<string, AnyFieldSelectionFactory> = Object.fromEntries(entries);\n\n return factories as unknown as FieldSelectionFactories<TSchema, TTypeName>;\n};\n","import { type FieldsBuilder, InlineOperation, type MergeFields, mergeFields } from \"../types/element\";\nimport type { AnyFields } from \"../types/fragment\";\nimport type { MetadataBuilder, OperationMetadata } from \"../types/metadata\";\nimport type { AnyGraphqlRuntimeAdapter } from \"../types/runtime\";\nimport type { AnyGraphqlSchema, OperationType } from \"../types/schema\";\nimport type { InputTypeSpecifiers } from \"../types/type-foundation\";\n\nimport { buildDocument } from \"./build-document\";\nimport { createFieldFactories } from \"./fields-builder\";\nimport { createVarRefs, type MergeVarDefinitions, mergeVarDefinitions } from \"./input\";\n\nexport const createInlineOperationComposerFactory = <\n TSchema extends AnyGraphqlSchema,\n _TRuntimeAdapter extends AnyGraphqlRuntimeAdapter,\n>(\n schema: NoInfer<TSchema>,\n) => {\n return <TOperationType extends OperationType>(operationType: TOperationType) => {\n type TTypeName = TSchema[\"operations\"][TOperationType] & keyof TSchema[\"object\"] & string;\n const operationTypeName: TTypeName | null = schema.operations[operationType];\n if (operationTypeName === null) {\n throw new Error(`Operation type ${operationType} is not defined in schema roots`);\n }\n\n return <TOperationName extends string, TFields extends AnyFields[], TVarDefinitions extends InputTypeSpecifiers[] = [{}]>(\n options: {\n operationName: TOperationName;\n variables?: TVarDefinitions;\n metadata?: MetadataBuilder<\n ReturnType<typeof createVarRefs<TSchema, MergeVarDefinitions<TVarDefinitions>>>,\n OperationMetadata\n >;\n },\n fieldBuilder: FieldsBuilder<TSchema, TTypeName, MergeVarDefinitions<TVarDefinitions>, TFields>,\n ) => {\n return InlineOperation.create<\n TSchema,\n TOperationType,\n TOperationName,\n MergeVarDefinitions<TVarDefinitions>,\n MergeFields<TFields>\n >(() => {\n const { operationName } = options;\n const variables = mergeVarDefinitions((options.variables ?? []) as TVarDefinitions);\n const $ = createVarRefs<TSchema, MergeVarDefinitions<TVarDefinitions>>(variables);\n const f = createFieldFactories(schema, operationTypeName);\n const fields = mergeFields(fieldBuilder({ f, $ }));\n\n const document = buildDocument({\n operationName,\n operationType,\n variables,\n fields,\n });\n const metadataResult = options.metadata?.({ $, document });\n\n const createDefinition = (metadata: OperationMetadata | undefined) => ({\n operationType,\n operationName,\n variableNames: Object.keys(variables) as (keyof MergeVarDefinitions<TVarDefinitions> & string)[],\n documentSource: () => fields,\n document,\n metadata,\n });\n\n if (metadataResult instanceof Promise) {\n return metadataResult.then(createDefinition);\n }\n\n return createDefinition(metadataResult);\n });\n };\n };\n};\n","import { type FieldsBuilder, type MergeFields, Model, mergeFields } from \"../types/element\";\nimport type { AnyFields, InferFields } from \"../types/fragment\";\nimport type { AnyGraphqlSchema, OperationType } from \"../types/schema\";\nimport type { InputTypeSpecifiers } from \"../types/type-foundation\";\nimport { mapValues } from \"../utils/map-values\";\nimport { createFieldFactories } from \"./fields-builder\";\nimport { createVarAssignments, type MergeVarDefinitions, mergeVarDefinitions } from \"./input\";\n\nexport const createGqlModelComposers = <TSchema extends AnyGraphqlSchema>(schema: NoInfer<TSchema>) => {\n type ModelBuilder<TTypeName extends keyof TSchema[\"object\"] & string> = <\n TFieldEntries extends AnyFields[],\n TNormalized extends object,\n TVarDefinitions extends InputTypeSpecifiers[] = [{}],\n >(\n options: {\n variables?: TVarDefinitions;\n },\n builder: FieldsBuilder<TSchema, TTypeName, MergeVarDefinitions<TVarDefinitions>, TFieldEntries>,\n normalize: (raw: NoInfer<InferFields<TSchema, MergeFields<TFieldEntries>>>) => TNormalized,\n ) => ReturnType<\n typeof Model.create<TSchema, TTypeName, MergeVarDefinitions<TVarDefinitions>, MergeFields<TFieldEntries>, TNormalized>\n >;\n\n const createModelComposer = <TTypeName extends keyof TSchema[\"object\"] & string>(\n typename: TTypeName,\n ): ModelBuilder<TTypeName> => {\n return <TFieldEntries extends AnyFields[], TNormalized extends object, TVarDefinitions extends InputTypeSpecifiers[] = [{}]>(\n options: {\n variables?: TVarDefinitions;\n },\n builder: FieldsBuilder<TSchema, TTypeName, MergeVarDefinitions<TVarDefinitions>, TFieldEntries>,\n normalize: (raw: NoInfer<InferFields<TSchema, MergeFields<TFieldEntries>>>) => TNormalized,\n ) =>\n Model.create<TSchema, TTypeName, MergeVarDefinitions<TVarDefinitions>, MergeFields<TFieldEntries>, TNormalized>(() => {\n const varDefinitions = mergeVarDefinitions((options.variables ?? []) as TVarDefinitions);\n return {\n typename,\n fragment: (variables) => {\n const f = createFieldFactories(schema, typename);\n const $ = createVarAssignments<TSchema, MergeVarDefinitions<TVarDefinitions>>(varDefinitions, variables);\n return mergeFields(builder({ f, $ }));\n },\n normalize,\n };\n });\n };\n\n type ModelBuildersAll = {\n readonly [TTypeName in keyof TSchema[\"object\"]]: TTypeName extends string ? ModelBuilder<TTypeName> : never;\n };\n type ModelBuilders = Omit<ModelBuildersAll, TSchema[\"operations\"][OperationType] & keyof ModelBuildersAll>;\n\n return mapValues(schema.object, (_, typename) => createModelComposer(typename)) as ModelBuilders;\n};\n","import { handleProjectionBuilder } from \"../runtime/slice\";\nimport {\n type ExecutionResultProjectionsBuilder,\n type FieldsBuilder,\n type MergeFields,\n mergeFields,\n Slice,\n} from \"../types/element\";\nimport type { AnyFields, AssigningInput } from \"../types/fragment\";\nimport type { SliceMetadataBuilder } from \"../types/metadata\";\nimport type { AnyGraphqlRuntimeAdapter, AnyProjection } from \"../types/runtime\";\nimport type { AnyGraphqlSchema, OperationType } from \"../types/schema\";\nimport type { InputTypeSpecifiers } from \"../types/type-foundation\";\n\nimport { createFieldFactories } from \"./fields-builder\";\nimport { createVarAssignments, type MergeVarDefinitions, mergeVarDefinitions } from \"./input\";\n\nexport const createSliceComposerFactory = <TSchema extends AnyGraphqlSchema, TRuntimeAdapter extends AnyGraphqlRuntimeAdapter>(\n schema: NoInfer<TSchema>,\n) => {\n return <TOperationType extends OperationType>(operationType: TOperationType) => {\n type TTypeName = TSchema[\"operations\"][TOperationType] & keyof TSchema[\"object\"] & string;\n const operationTypeName: TTypeName | null = schema.operations[operationType];\n if (operationTypeName === null) {\n throw new Error(`Operation type ${operationType} is not defined in schema roots`);\n }\n\n return <\n TFieldEntries extends AnyFields[],\n TProjection extends AnyProjection,\n TVarDefinitions extends InputTypeSpecifiers[] = [{}],\n >(\n options: {\n variables?: TVarDefinitions;\n metadata?: SliceMetadataBuilder<AssigningInput<TSchema, MergeVarDefinitions<TVarDefinitions>>>;\n },\n fieldBuilder: FieldsBuilder<TSchema, TTypeName, MergeVarDefinitions<TVarDefinitions>, TFieldEntries>,\n projectionBuilder: ExecutionResultProjectionsBuilder<TSchema, TRuntimeAdapter, MergeFields<TFieldEntries>, TProjection>,\n ) =>\n Slice.create<TSchema, TOperationType, MergeVarDefinitions<TVarDefinitions>, MergeFields<TFieldEntries>, TProjection>(() => {\n const varDefinitions = mergeVarDefinitions((options.variables ?? []) as TVarDefinitions);\n const projection = handleProjectionBuilder(projectionBuilder);\n const { metadata: metadataOption } = options;\n\n return {\n operationType,\n embed: (variables) => {\n const f = createFieldFactories(schema, operationTypeName);\n const $ = createVarAssignments<TSchema, typeof varDefinitions>(varDefinitions, variables);\n const fields = mergeFields(fieldBuilder({ f, $ }));\n const metadata = metadataOption?.({ $ });\n return { variables, getFields: () => fields, projection, metadata };\n },\n };\n });\n };\n};\n","import type { TypeModifier, ValidTypeModifier } from \"./type-modifier-core.generated\";\n\nexport type ModifiedTypeName<\n // Wrapping by array to avoid type distribution\n TNameCandidate extends [string],\n TName extends TNameCandidate[0],\n TModifier extends TypeModifier,\n> = [string] extends TNameCandidate // For abstract implementation\n ? `${TName}:${TModifier}`\n : TNameCandidate extends [TName]\n ? // First, user inputs TName based on TNameCandidate\n NoInfer<`${TNameCandidate[0]}`> | (TName & NoInfer<TypeModifier extends TModifier ? never : string>)\n : // With valid TName, user can input TModifier based on TypeModifierNS.ValidTypeModifier\n `${TName}:${TModifier & ValidTypeModifier}`;\n\nexport function parseModifiedTypeName<TNameCandidate extends [string], TName extends string, TModifier extends TypeModifier>(\n nameAndModifier: ModifiedTypeName<TNameCandidate, TName, TModifier>,\n) {\n if (typeof nameAndModifier !== \"string\") {\n throw new Error(`Invalid modified type name: ${nameAndModifier}`);\n }\n\n const [name, modifier] = nameAndModifier.split(\":\") as [TName, TModifier];\n return { name, modifier };\n}\n","import type { AnyConstDirectiveAttachments, AnyGraphqlSchema, ConstAssignableInputValue } from \"../types/schema\";\nimport { type AnyTypeSpecifier, type ModifiedTypeName, parseModifiedTypeName, type TypeModifier } from \"../types/type-foundation\";\nimport { getVarRefInner, getVarRefName, getVarRefValue } from \"../types/type-foundation/var-ref\";\nimport { wrapByKey } from \"../utils/wrap-by-key\";\n\ntype AssignableDefaultValue<\n TSchema extends AnyGraphqlSchema,\n TKind extends \"scalar\" | \"enum\" | \"input\",\n TName extends keyof TSchema[TKind] & string,\n TModifier extends TypeModifier,\n> = ConstAssignableInputValue<\n TSchema,\n {\n scalar: { kind: \"scalar\"; name: TName; modifier: TModifier; directives: {}; defaultValue: null };\n enum: { kind: \"enum\"; name: TName; modifier: TModifier; directives: {}; defaultValue: null };\n input: { kind: \"input\"; name: TName; modifier: TModifier; directives: {}; defaultValue: null };\n }[TKind]\n>;\n\nexport const createVarBuilder = <TSchema extends AnyGraphqlSchema>(schema: TSchema) => {\n const varBuilder = <TVarName extends string>(varName: TVarName) => {\n const createVarSpecifierBuilder = <TKind extends \"scalar\" | \"enum\" | \"input\">(kind: TKind) => {\n type VarSpecifier<\n TTypeName extends keyof TSchema[TKind] & string,\n TModifier extends TypeModifier,\n TDefaultFn extends (() => AssignableDefaultValue<TSchema, TKind, TTypeName, TModifier>) | null,\n TDirectives extends AnyConstDirectiveAttachments,\n > = {\n kind: TKind;\n name: TTypeName;\n modifier: TModifier;\n defaultValue: TDefaultFn extends null\n ? null\n : {\n default: ReturnType<NonNullable<TDefaultFn>>;\n };\n directives: TDirectives;\n };\n\n return <\n const TTypeName extends keyof TSchema[TKind] & string,\n const TModifier extends TypeModifier,\n const TDefaultFn extends (() => AssignableDefaultValue<TSchema, TKind, TTypeName, TModifier>) | null = null,\n const TDirectives extends AnyConstDirectiveAttachments = {},\n >(\n type: ModifiedTypeName<[keyof TSchema[TKind] & string], TTypeName, TModifier>,\n extras?: {\n default?:\n | (TDefaultFn & (() => AssignableDefaultValue<TSchema, TKind, TTypeName, TModifier>))\n | (NoInfer<TDefaultFn> extends null ? () => AssignableDefaultValue<TSchema, TKind, TTypeName, TModifier> : never);\n directives?: TDirectives;\n },\n ) =>\n wrapByKey(varName, {\n kind,\n ...parseModifiedTypeName(type),\n defaultValue: extras?.default ? { default: extras.default() } : null,\n } satisfies AnyTypeSpecifier as VarSpecifier<TTypeName, TModifier, TDefaultFn, TDirectives>);\n };\n\n return {\n scalar: createVarSpecifierBuilder(\"scalar\"),\n enum: createVarSpecifierBuilder(\"enum\"),\n input: createVarSpecifierBuilder(\"input\"),\n\n byField: <\n const TTypeName extends keyof TSchema[\"object\"] & string,\n const TFieldName extends keyof TSchema[\"object\"][TTypeName][\"fields\"] & string,\n const TArgName extends keyof TSchema[\"object\"][TTypeName][\"fields\"][TFieldName][\"arguments\"] & string,\n >(\n typeName: TTypeName,\n fieldName: TFieldName,\n argName: TArgName,\n ) => {\n const argTypeRef = schema.object[typeName]?.fields[fieldName]?.arguments[argName];\n\n if (!argTypeRef) {\n throw new Error(`Argument ${argName} not found in field ${fieldName} of type ${typeName}`);\n }\n\n // TODO: clone\n return { ...argTypeRef } as TSchema[\"object\"][TTypeName][\"fields\"][TFieldName][\"arguments\"][TArgName];\n },\n };\n };\n\n const $var = Object.assign(varBuilder, {\n getName: getVarRefName,\n getValue: getVarRefValue,\n getInner: getVarRefInner,\n });\n\n return { $var };\n};\n","import type { AnyComposedOperation, AnyInlineOperation, AnyModel, AnySlice } from \"../types/element\";\nimport type { AnyMetadataAdapter } from \"../types/metadata\";\nimport type { AnyGraphqlRuntimeAdapter } from \"../types/runtime\";\nimport type { AnyGraphqlSchema } from \"../types/schema\";\nimport { createComposedOperationComposerFactory } from \"./composed-operation\";\nimport { createInlineOperationComposerFactory } from \"./inline-operation\";\nimport { createGqlModelComposers } from \"./model\";\nimport { createSliceComposerFactory } from \"./slice\";\nimport { createVarBuilder } from \"./var-builder\";\n\nexport type GqlElementComposer<TComposers, THelper> = <\n TResult extends AnyModel | AnySlice | AnyComposedOperation | AnyInlineOperation,\n>(\n composeElement: (composers: TComposers, helper: THelper) => TResult,\n) => TResult;\n\nexport type GqlElementComposerOptions<THelpers extends object = object> = {\n metadataAdapter?: AnyMetadataAdapter;\n helpers?: THelpers;\n};\n\nexport const createGqlElementComposer = <\n TSchema extends AnyGraphqlSchema,\n TRuntimeAdapter extends AnyGraphqlRuntimeAdapter,\n THelpers extends object = object,\n>(\n schema: NoInfer<TSchema>,\n options: GqlElementComposerOptions<NoInfer<THelpers>> = {} as GqlElementComposerOptions<THelpers>,\n) => {\n const { metadataAdapter, helpers } = options;\n const model = createGqlModelComposers<TSchema>(schema);\n const createSliceComposer = createSliceComposerFactory<TSchema, TRuntimeAdapter>(schema);\n const createComposedOperationFactory = createComposedOperationComposerFactory<TSchema, TRuntimeAdapter>({\n metadataAdapter,\n });\n const createInlineOperationComposer = createInlineOperationComposerFactory<TSchema, TRuntimeAdapter>(schema);\n const composers = {\n model,\n query: {\n slice: createSliceComposer(\"query\"),\n composed: createComposedOperationFactory(\"query\"),\n inline: createInlineOperationComposer(\"query\"),\n },\n mutation: {\n slice: createSliceComposer(\"mutation\"),\n composed: createComposedOperationFactory(\"mutation\"),\n inline: createInlineOperationComposer(\"mutation\"),\n },\n subscription: {\n slice: createSliceComposer(\"subscription\"),\n composed: createComposedOperationFactory(\"subscription\"),\n inline: createInlineOperationComposer(\"subscription\"),\n },\n };\n\n const helper = {\n ...createVarBuilder(schema),\n ...(helpers ?? ({} as THelpers)),\n };\n\n const elementComposer: GqlElementComposer<typeof composers, typeof helper> = (composeElement) =>\n composeElement(composers, helper);\n\n return elementComposer;\n};\n","/**\n * Helper function for defining typed helpers with better inference.\n * Use this when you need explicit typing or when type inference needs assistance.\n *\n * @example\n * ```typescript\n * const gql = createGqlElementComposer(schema, {\n * helpers: defineHelpers({\n * auth: {\n * requiresLogin: () => ({ requiresAuth: true }),\n * adminOnly: () => ({ requiresAuth: true, role: 'admin' }),\n * },\n * }),\n * });\n * ```\n */\nexport const defineHelpers = <T extends object>(helpers: T): T => helpers;\n","export interface WithTypeMeta<T extends object> {\n readonly $type: T;\n}\n\nexport const withTypeMeta = <TTarget extends WithTypeMeta<TTypeMeta>, TTypeMeta extends object>(\n target: Omit<NoInfer<TTarget>, \"$type\">,\n): TTarget => {\n if (process.env.NODE_ENV !== \"production\") {\n if ((typeof target !== \"object\" && typeof target !== \"function\") || target === null) {\n throw new Error(\"Target must be an object or a function.\");\n }\n\n Object.defineProperty(target, \"$type\", {\n get() {\n throw new Error(\"This property is only for type inference. Do not access this property directly.\");\n },\n });\n }\n\n return target as TTarget;\n};\n","import type { AnyConstDirectiveAttachments } from \"../types/schema\";\nimport {\n type AnyTypeSpecifier,\n type InputTypeKind,\n type InputTypeSpecifiers,\n type ModifiedTypeName,\n type OutputTypeKind,\n parseModifiedTypeName,\n type TypeModifier,\n} from \"../types/type-foundation\";\nimport type { ConstValue } from \"../types/type-foundation/const-value\";\n\nconst createUnsafeInputTypeSpecifierFactory = <const TKind extends InputTypeKind>(kind: TKind) => {\n type UnsafeInputTypeSpecifier<\n TName extends string,\n TModifier extends TypeModifier,\n TDefaultFactory extends (() => ConstValue) | null,\n TDirectives extends AnyConstDirectiveAttachments,\n > = {\n kind: TKind;\n name: TName;\n modifier: TModifier;\n defaultValue: TDefaultFactory extends null ? null : { default: ReturnType<NonNullable<TDefaultFactory>> };\n directives: TDirectives;\n };\n\n return <\n const TName extends string,\n const TModifier extends TypeModifier,\n const TDefaultFactory extends (() => ConstValue) | null = null,\n const TDirectives extends AnyConstDirectiveAttachments = {},\n >(\n type: ModifiedTypeName<[string], TName, TModifier>,\n extras: {\n default?: TDefaultFactory;\n directives?: TDirectives;\n },\n ): UnsafeInputTypeSpecifier<TName, TModifier, TDefaultFactory, TDirectives> =>\n ({\n kind,\n ...parseModifiedTypeName(type),\n defaultValue: extras.default ? { default: extras.default() } : null,\n }) satisfies AnyTypeSpecifier as UnsafeInputTypeSpecifier<TName, TModifier, TDefaultFactory, TDirectives>;\n};\n\nexport const unsafeInputType = {\n scalar: createUnsafeInputTypeSpecifierFactory(\"scalar\"),\n enum: createUnsafeInputTypeSpecifierFactory(\"enum\"),\n input: createUnsafeInputTypeSpecifierFactory(\"input\"),\n};\n\nconst createUnsafeOutputTypeSpecifierFactory = <const TKind extends OutputTypeKind>(kind: TKind) => {\n type UnsafeOutputTypeSpecifier<TName extends string, TModifier extends TypeModifier, TArguments extends InputTypeSpecifiers> = {\n kind: TKind;\n name: TName;\n modifier: TModifier;\n arguments: TArguments;\n };\n\n return <const TName extends string, const TModifier extends TypeModifier, const TArguments extends InputTypeSpecifiers = {}>(\n type: ModifiedTypeName<[string], TName, TModifier>,\n extras: {\n arguments?: TArguments;\n },\n ): UnsafeOutputTypeSpecifier<TName, TModifier, InputTypeSpecifiers extends TArguments ? {} : TArguments> =>\n ({\n kind,\n ...parseModifiedTypeName(type),\n arguments: extras.arguments ?? ({} as TArguments),\n }) satisfies AnyTypeSpecifier as UnsafeOutputTypeSpecifier<\n TName,\n TModifier,\n InputTypeSpecifiers extends TArguments ? {} : TArguments\n >;\n};\n\nexport const unsafeOutputType = {\n scalar: createUnsafeOutputTypeSpecifierFactory(\"scalar\"),\n enum: createUnsafeOutputTypeSpecifierFactory(\"enum\"),\n object: createUnsafeOutputTypeSpecifierFactory(\"object\"),\n union: createUnsafeOutputTypeSpecifierFactory(\"union\"),\n typename: createUnsafeOutputTypeSpecifierFactory(\"typename\"),\n};\n","import type {\n EnumDefinition,\n InputDefinition,\n ObjectDefinition,\n OperationRoots,\n ScalarDefinition,\n UnionDefinition,\n} from \"../types/schema\";\nimport { withTypeMeta } from \"../utils/type-meta\";\nimport { wrapByKey } from \"../utils/wrap-by-key\";\nimport { unsafeOutputType } from \"./type-specifier-builder\";\n\nexport const defineScalar = <const TName extends string, TInput, TOutput>(name: NoInfer<TName>) =>\n wrapByKey(\n name,\n withTypeMeta({ name }) satisfies ScalarDefinition<{\n name: TName;\n input: TInput;\n output: TOutput;\n }>,\n );\n\nexport const define = <const TName extends string>(name: TName) => ({\n enum: <const TValues extends EnumDefinition<{ name: TName; values: string }>[\"values\"]>(values: TValues) =>\n withTypeMeta({ name, values }) satisfies EnumDefinition<{\n name: TName;\n values: Extract<keyof TValues, string>;\n }>,\n\n input: <TFields extends InputDefinition[\"fields\"]>(fields: TFields) =>\n ({\n name,\n fields,\n }) satisfies InputDefinition,\n\n object: <TFields extends ObjectDefinition[\"fields\"]>(fields: TFields) =>\n ({\n name,\n fields: {\n __typename: unsafeOutputType.typename(`${name}:!`, {}),\n ...fields,\n },\n }) satisfies ObjectDefinition,\n\n union: <TTypes extends UnionDefinition[\"types\"]>(types: TTypes) =>\n ({\n name,\n types,\n }) satisfies UnionDefinition,\n});\n\nexport const defineOperationRoots = <const TOperationRoots extends OperationRoots>(operationRoots: TOperationRoots) =>\n operationRoots;\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["inner: VarRefInner","value","field","curr: Readonly<{ modifier: string; type: TypeNode }>","fieldPathContext: { current: FieldPath | null }","newSegment: FieldPathSegment","cache: { value: T } | null","promise: Promise<void> | null","define","define","cache: TValue | null","lazyCreateEvaluationGenerator","lazyEvaluateSync","define","define","cacheMap: CacheMap","factory: AnyFieldSelectionFactory","factoryReturn: AnyFieldSelectionFactoryReturn<TAlias>","fragmentUsageContext: { current: FragmentUsageRecord[] | null }","usages: FragmentUsageRecord[]","defaultMetadataAdapter: DefaultMetadataAdapter","operationTypeName: TTypeName | null","fragmentMetadataResults: (TFragmentMetadata | undefined | Promise<TFragmentMetadata>)[]","fragmentMetaInfos: FragmentMetaInfo<TFragmentMetadata>[]","elementComposer: GqlElementComposer<typeof composers, typeof helper>"],"sources":["../src/types/type-foundation/var-ref.ts","../src/composer/build-document.ts","../src/composer/colocate.ts","../src/composer/field-path-context.ts","../src/types/element/fields-builder.ts","../src/types/element/lazy-evaluator.ts","../src/types/element/gql-element.ts","../src/types/element/fragment.ts","../src/types/element/operation.ts","../src/utils/map-values.ts","../src/composer/fields-builder.ts","../src/composer/fragment-usage-context.ts","../src/composer/input.ts","../src/composer/fragment.ts","../src/types/metadata/adapter.ts","../src/composer/operation.ts","../src/composer/var-builder.ts","../src/composer/gql-composer.ts"],"sourcesContent":["import type { ConstValue } from \"./const-value\";\nimport type { TypeProfile } from \"./type-profile\";\n\nexport interface AnyVarRefMeta {\n readonly profile: TypeProfile;\n readonly signature: unknown;\n}\n\nexport type VarRefInner =\n | {\n type: \"variable\";\n name: string;\n }\n | {\n type: \"const-value\";\n value: ConstValue;\n };\n\nexport type AnyVarRef = VarRef<any>;\n\ndeclare const __VAR_REF_BRAND__: unique symbol;\nexport class VarRef<TMeta extends AnyVarRefMeta> {\n declare readonly [__VAR_REF_BRAND__]: TMeta;\n\n constructor(private readonly inner: VarRefInner) {}\n\n static getInner(varRef: AnyVarRef): VarRefInner {\n return varRef.inner;\n }\n}\n\nexport const isVarRef = (value: unknown): value is AnyVarRef => {\n return typeof value === \"object\" && value !== null && value instanceof VarRef;\n};\n\nexport const createVarRefFromVariable = <TProfile extends TypeProfile.WithMeta>(name: string) => {\n return new VarRef<TypeProfile.AssigningVarRefMeta<TProfile>>({ type: \"variable\", name });\n};\n\nexport const createVarRefFromConstValue = <TProfile extends TypeProfile.WithMeta>(value: ConstValue) => {\n return new VarRef<TypeProfile.AssigningVarRefMeta<TProfile>>({ type: \"const-value\", value });\n};\n\nexport const getVarRefInner = (varRef: AnyVarRef): VarRefInner => {\n return VarRef.getInner(varRef);\n};\n\n/**\n * Get the variable name from a VarRef.\n * Throws if the VarRef contains a const-value instead of a variable reference.\n */\nexport const getVarRefName = (varRef: AnyVarRef): string => {\n const inner = VarRef.getInner(varRef);\n if (inner.type !== \"variable\") {\n throw new Error(\"Expected variable reference, got const-value\");\n }\n return inner.name;\n};\n\n/**\n * Get the const value from a VarRef.\n * Throws if the VarRef contains a variable reference instead of a const-value.\n */\nexport const getVarRefValue = (varRef: AnyVarRef): ConstValue => {\n const inner = VarRef.getInner(varRef);\n if (inner.type !== \"const-value\") {\n throw new Error(\"Expected const-value, got variable reference\");\n }\n return inner.value;\n};\n","import type { TypedDocumentNode } from \"@graphql-typed-document-node/core\";\nimport {\n type ArgumentNode,\n type ConstObjectFieldNode,\n type ConstValueNode,\n type DocumentNode,\n type FieldNode,\n type InlineFragmentNode,\n Kind,\n type NamedTypeNode,\n type ObjectFieldNode,\n OperationTypeNode,\n type TypeNode,\n type ValueNode,\n type VariableDefinitionNode,\n} from \"graphql\";\nimport {\n type AnyAssignableInput,\n type AnyAssignableInputValue,\n type AnyFields,\n type AnyNestedUnion,\n type InferFields,\n VarRef,\n} from \"../types/fragment\";\nimport type { AnyGraphqlSchema, ConstAssignableInput, OperationType } from \"../types/schema\";\nimport type { ConstValue, InputTypeSpecifiers, TypeModifier } from \"../types/type-foundation\";\n\nexport const buildArgumentValue = (value: AnyAssignableInputValue): ValueNode | null => {\n if (value === undefined) {\n return null;\n }\n\n if (value === null) {\n return {\n kind: Kind.NULL,\n };\n }\n\n if (value instanceof VarRef) {\n const inner = VarRef.getInner(value);\n if (inner.type === \"variable\") {\n return {\n kind: Kind.VARIABLE,\n name: { kind: Kind.NAME, value: inner.name },\n };\n }\n\n if (inner.type === \"const-value\") {\n return buildConstValueNode(inner.value);\n }\n\n throw new Error(`Unknown var ref type: ${inner satisfies never}`);\n }\n\n if (Array.isArray(value)) {\n return {\n kind: Kind.LIST,\n values: value.map((item) => buildArgumentValue(item)).filter((item) => item !== null),\n };\n }\n\n if (typeof value === \"object\") {\n return {\n kind: Kind.OBJECT,\n fields: Object.entries(value)\n .map(([key, value]): ObjectFieldNode | null => {\n const valueNode = buildArgumentValue(value);\n return valueNode\n ? {\n kind: Kind.OBJECT_FIELD,\n name: { kind: Kind.NAME, value: key },\n value: valueNode,\n }\n : null;\n })\n .filter((item) => item !== null),\n };\n }\n\n if (typeof value === \"string\") {\n return {\n kind: Kind.STRING,\n value,\n };\n }\n\n if (typeof value === \"number\") {\n // Distinguish between INT and FLOAT\n const isFloat = !Number.isInteger(value) || value.toString().includes(\".\");\n return {\n kind: isFloat ? Kind.FLOAT : Kind.INT,\n value: value.toString(),\n };\n }\n\n if (typeof value === \"boolean\") {\n return {\n kind: Kind.BOOLEAN,\n value,\n };\n }\n\n throw new Error(`Unknown value type: ${typeof (value satisfies never)}`);\n};\n\nconst buildArguments = (args: AnyAssignableInput): ArgumentNode[] =>\n Object.entries(args ?? {})\n .map(([name, value]): ArgumentNode | null => {\n const valueNode = buildArgumentValue(value);\n return valueNode\n ? {\n kind: Kind.ARGUMENT,\n name: { kind: Kind.NAME, value: name },\n value: valueNode,\n }\n : null;\n })\n .filter((item) => item !== null);\n\nconst buildUnionSelection = (union: AnyNestedUnion): InlineFragmentNode[] =>\n Object.entries(union)\n .map(([typeName, object]): InlineFragmentNode | null => {\n return object\n ? {\n kind: Kind.INLINE_FRAGMENT,\n typeCondition: {\n kind: Kind.NAMED_TYPE,\n name: { kind: Kind.NAME, value: typeName },\n },\n selectionSet: {\n kind: Kind.SELECTION_SET,\n selections: buildField(object),\n },\n }\n : null;\n })\n .filter((item) => item !== null);\n\nconst buildField = (field: AnyFields): FieldNode[] =>\n Object.entries(field).map(\n ([alias, { args, field, object, union }]): FieldNode => ({\n kind: Kind.FIELD,\n name: { kind: Kind.NAME, value: field },\n alias: alias !== field ? { kind: Kind.NAME, value: alias } : undefined,\n arguments: buildArguments(args),\n selectionSet: object\n ? {\n kind: Kind.SELECTION_SET,\n selections: buildField(object),\n }\n : union\n ? {\n kind: Kind.SELECTION_SET,\n selections: buildUnionSelection(union),\n }\n : undefined,\n }),\n );\n\nexport const buildConstValueNode = (value: ConstValue): ConstValueNode | null => {\n if (value === undefined) {\n return null;\n }\n\n if (value === null) {\n return { kind: Kind.NULL };\n }\n\n if (typeof value === \"string\") {\n return { kind: Kind.STRING, value };\n }\n\n if (typeof value === \"boolean\") {\n return { kind: Kind.BOOLEAN, value };\n }\n\n if (typeof value === \"number\") {\n // Distinguish between INT and FLOAT\n const isFloat = !Number.isInteger(value) || value.toString().includes(\".\");\n return { kind: isFloat ? Kind.FLOAT : Kind.INT, value: value.toString() };\n }\n\n if (Array.isArray(value)) {\n return {\n kind: Kind.LIST,\n values: value.map((item) => buildConstValueNode(item)).filter((item) => item !== null),\n };\n }\n\n if (typeof value === \"object\") {\n return {\n kind: Kind.OBJECT,\n fields: Object.entries(value)\n .map(([key, value]): ConstObjectFieldNode | null => {\n const valueNode = buildConstValueNode(value);\n return valueNode\n ? {\n kind: Kind.OBJECT_FIELD,\n name: { kind: Kind.NAME, value: key },\n value: valueNode,\n }\n : null;\n })\n .filter((item) => item !== null),\n };\n }\n\n throw new Error(`Unknown value type: ${typeof (value satisfies never)}`);\n};\n\nexport const buildWithTypeModifier = (modifier: TypeModifier, buildType: () => NamedTypeNode): TypeNode => {\n const baseType = buildType();\n\n if (modifier === \"?\") {\n return baseType;\n }\n\n if (modifier === \"!\") {\n return { kind: Kind.NON_NULL_TYPE, type: baseType };\n }\n\n // Validate modifier format: must start with ? or !, followed by []? or []! pairs\n // Valid patterns: \"?\", \"!\", \"?[]?\", \"?[]!\", \"![]?\", \"![]!\", \"?[]?[]?\", etc.\n const validModifierPattern = /^[?!](\\[\\][?!])*$/;\n if (!validModifierPattern.test(modifier)) {\n throw new Error(`Unknown modifier: ${modifier}`);\n }\n\n // New format: starts with inner type modifier (? or !), then []? or []! pairs\n // e.g., \"?[]?\" = nullable list of nullable, \"![]!\" = non-null list of non-null\n let curr: Readonly<{ modifier: string; type: TypeNode }> = {\n modifier,\n type: baseType,\n };\n\n while (curr.modifier.length > 0) {\n // Handle inner type modifier (? or !)\n if (curr.modifier.startsWith(\"?\")) {\n // Nullable inner type - type stays as-is\n curr = {\n modifier: curr.modifier.slice(1),\n type: curr.type,\n };\n continue;\n }\n\n if (curr.modifier.startsWith(\"!\")) {\n // Non-null inner type\n curr = {\n modifier: curr.modifier.slice(1),\n type: curr.type.kind === Kind.NON_NULL_TYPE ? curr.type : { kind: Kind.NON_NULL_TYPE, type: curr.type },\n };\n continue;\n }\n\n // Handle list modifiers ([]? or []!)\n if (curr.modifier.startsWith(\"[]?\")) {\n // Nullable list\n curr = {\n modifier: curr.modifier.slice(3),\n type: { kind: Kind.LIST_TYPE, type: curr.type },\n };\n continue;\n }\n\n if (curr.modifier.startsWith(\"[]!\")) {\n // Non-null list\n curr = {\n modifier: curr.modifier.slice(3),\n type: {\n kind: Kind.NON_NULL_TYPE,\n type: { kind: Kind.LIST_TYPE, type: curr.type },\n },\n };\n continue;\n }\n\n throw new Error(`Unknown modifier: ${curr.modifier}`);\n }\n\n return curr.type;\n};\n\nconst buildVariables = (variables: InputTypeSpecifiers): VariableDefinitionNode[] => {\n return Object.entries(variables).map(\n ([name, ref]): VariableDefinitionNode => ({\n kind: Kind.VARIABLE_DEFINITION,\n variable: { kind: Kind.VARIABLE, name: { kind: Kind.NAME, value: name } },\n defaultValue: (ref.defaultValue && buildConstValueNode(ref.defaultValue.default)) || undefined,\n type: buildWithTypeModifier(ref.modifier, () => ({\n kind: Kind.NAMED_TYPE,\n name: { kind: Kind.NAME, value: ref.name },\n })),\n }),\n );\n};\n\nexport const buildOperationTypeNode = (operation: OperationType): OperationTypeNode => {\n switch (operation) {\n case \"query\":\n return OperationTypeNode.QUERY;\n case \"mutation\":\n return OperationTypeNode.MUTATION;\n case \"subscription\":\n return OperationTypeNode.SUBSCRIPTION;\n default:\n throw new Error(`Unknown operation type: ${operation}`);\n }\n};\n\n// Overloaded function signatures for flexible usage\nexport const buildDocument = <\n TSchema extends AnyGraphqlSchema,\n TFields extends AnyFields,\n TVarDefinitions extends InputTypeSpecifiers,\n>(options: {\n operationName: string;\n operationType: OperationType;\n variables: TVarDefinitions;\n fields: TFields;\n}): TypedDocumentNode<InferFields<TSchema, TFields>, ConstAssignableInput<TSchema, TVarDefinitions>> => {\n const { operationName, operationType, variables, fields } = options;\n return {\n kind: Kind.DOCUMENT,\n definitions: [\n {\n kind: Kind.OPERATION_DEFINITION,\n operation: buildOperationTypeNode(operationType),\n name: { kind: Kind.NAME, value: operationName },\n variableDefinitions: buildVariables(variables),\n // directives: directives || [],\n selectionSet: {\n kind: Kind.SELECTION_SET,\n selections: buildField(fields),\n },\n },\n ],\n } satisfies DocumentNode as TypedDocumentNode<InferFields<TSchema, TFields>, ConstAssignableInput<TSchema, TVarDefinitions>>;\n};\n","import type { AnyFields } from \"../types/fragment\";\nimport type { UnionToIntersection } from \"../utils/type-utils\";\n\n/**\n * Type for colocated field entries.\n * Maps labels to their corresponding field selections.\n */\nexport type ColocatedEntries = Record<string, AnyFields>;\n\n/**\n * Result type for colocated fields.\n * Merges all prefixed entries into a single object.\n */\nexport type ColocatedFields<TEntries extends ColocatedEntries> = UnionToIntersection<\n {\n [KPrefix in keyof TEntries]: KPrefix extends string\n ? {\n [KField in keyof TEntries[KPrefix] as KField extends string\n ? `${KPrefix}_${KField}`\n : never]: TEntries[KPrefix][KField];\n }\n : never;\n }[keyof TEntries]\n>;\n\n/**\n * Creates a $colocate helper function for fragment colocation.\n *\n * $colocate takes an object of { label: fields } and applies prefix-based\n * aliasing to each entry. This mirrors the structure of createExecutionResultParser\n * from @soda-gql/colocation-tools.\n *\n * @example\n * ```typescript\n * // In operation definition\n * query.operation({ name: \"GetData\" }, ({ f, $ }) => [\n * $colocate({\n * userCard: userCardFragment.embed({ userId: $.userId }),\n * posts: postsFragment.embed({ userId: $.userId }),\n * }),\n * ]);\n *\n * // In parser definition (same labels)\n * createExecutionResultParser({\n * userCard: userCardProjection,\n * posts: postsProjection,\n * });\n * ```\n */\nexport const createColocateHelper = () => {\n /**\n * Colocate multiple field selections with labeled prefixes.\n *\n * @param entries - Object mapping labels to field selections\n * @returns Merged object of all prefixed field entries\n */\n const $colocate = <TEntries extends ColocatedEntries>(entries: TEntries): ColocatedFields<TEntries> =>\n Object.fromEntries(\n Object.entries(entries).flatMap(([label, fields]) =>\n Object.entries(fields).map(([key, value]) => [`${label}_${key}`, value] as const),\n ),\n ) as ColocatedFields<TEntries>;\n\n return $colocate;\n};\n\nexport type ColocateHelper = ReturnType<typeof createColocateHelper>;\n","/**\n * Field path context using shared value container pattern.\n *\n * This module tracks the current field path during field building,\n * similar to how React tracks the current fiber.\n * No changes to field builder arguments are needed - use getCurrentFieldPath() to access.\n */\n\n/**\n * A segment in the field path.\n */\nexport type FieldPathSegment = {\n /** The field name */\n readonly field: string;\n /** The parent type name */\n readonly parent: string;\n /** Whether this field returns a list */\n readonly isList: boolean;\n};\n\n/**\n * Complete field path from root to current position.\n */\nexport type FieldPath = {\n /** Full path string (e.g., \"$.user.posts[].author\") */\n readonly full: string;\n /** Individual path segments */\n readonly segments: readonly FieldPathSegment[];\n};\n\n/**\n * Shared mutable container for field path context.\n * Only synchronous access is supported.\n */\nconst fieldPathContext: { current: FieldPath | null } = {\n current: null,\n};\n\n/**\n * Get the current field path.\n * Returns null if not in a field building context.\n *\n * @example\n * ```typescript\n * import { getCurrentFieldPath } from '@soda-gql/core';\n *\n * // Inside a field builder or model embed:\n * const path = getCurrentFieldPath();\n * console.log(path?.full); // \"$.user.posts[].author\"\n * ```\n */\nexport const getCurrentFieldPath = (): FieldPath | null => fieldPathContext.current;\n\n/**\n * Run a function with a specific field path context.\n * Restores the previous path after the function completes.\n *\n * @internal\n */\nexport const withFieldPath = <T>(path: FieldPath, fn: () => T): T => {\n const previousPath = fieldPathContext.current;\n fieldPathContext.current = path;\n try {\n return fn();\n } finally {\n fieldPathContext.current = previousPath;\n }\n};\n\n/**\n * Append a new segment to the current path.\n *\n * @internal\n */\nexport const appendToPath = (\n parent: FieldPath | null,\n segment: { field: string; parentType: string; isList: boolean },\n): FieldPath => {\n const listSuffix = segment.isList ? \"[]\" : \"\";\n const newSegment: FieldPathSegment = {\n field: segment.field,\n parent: segment.parentType,\n isList: segment.isList,\n };\n\n if (!parent) {\n return {\n full: `$.${segment.field}${listSuffix}`,\n segments: [newSegment],\n };\n }\n\n return {\n full: `${parent.full}.${segment.field}${listSuffix}`,\n segments: [...parent.segments, newSegment],\n };\n};\n\n/**\n * Check if a type specifier represents a list type.\n * Matches patterns like \"Type:![]!\", \"Type:![]?\", \"Type:?[]!\", etc.\n *\n * @internal\n */\nexport const isListType = (typeString: string): boolean => {\n return typeString.includes(\"[]\");\n};\n","/** Field builder factories shared by model and slice helpers. */\n\nimport type { IfEmpty } from \"../../utils/empty-object\";\nimport type { UnionToIntersection } from \"../../utils/type-utils\";\nimport type {\n AbstractFieldSelection,\n AnyAssignableInput,\n AnyDirectiveAttachments,\n AnyFieldSelection,\n AnyFields,\n AnyNestedObject,\n AnyNestedUnion,\n AssigningInput,\n FieldSelectionTemplateOf,\n} from \"../fragment\";\nimport type { AnyGraphqlSchema, ObjectFieldRecord, UnionMemberName } from \"../schema\";\nimport type {\n InputTypeSpecifiers,\n OutputEnumSpecifier,\n OutputObjectSpecifier,\n OutputScalarSpecifier,\n OutputTypenameSpecifier,\n OutputUnionSpecifier,\n} from \"../type-foundation\";\n\nexport const mergeFields = <TFieldEntries extends AnyFields[]>(fields: TFieldEntries) =>\n Object.assign({}, ...fields) as MergeFields<TFieldEntries>;\n\nexport type MergeFields<TFieldEntries extends AnyFields[]> = UnionToIntersection<\n TFieldEntries[number]\n> extends infer TFieldsIntersection\n ? {\n [TFieldName in keyof TFieldsIntersection]: TFieldsIntersection[TFieldName] extends AnyFieldSelection\n ? TFieldsIntersection[TFieldName]\n : never;\n } & {}\n : never;\n\n/**\n * Builder signature exposed to userland `model` and `slice` helpers. The\n * tooling `f`/`fields`/`_` aliases provide ergonomic access to GraphQL fields\n * while preserving the original schema information for inference.\n */\nexport type FieldsBuilder<\n TSchema extends AnyGraphqlSchema,\n TTypeName extends keyof TSchema[\"object\"] & string,\n TVariableDefinitions extends InputTypeSpecifiers,\n TFields extends AnyFields[],\n> = (tools: NoInfer<FieldsBuilderTools<TSchema, TTypeName, TVariableDefinitions>>) => TFields;\n\nexport type FieldsBuilderTools<\n TSchema extends AnyGraphqlSchema,\n TTypeName extends keyof TSchema[\"object\"] & string,\n TVariableDefinitions extends InputTypeSpecifiers,\n> = {\n f: FieldSelectionFactories<TSchema, TTypeName>;\n $: AssigningInput<TSchema, TVariableDefinitions>;\n};\n\n/** Narrow builder used when a field resolves to an object and we need nested selections. */\nexport type NestedObjectFieldsBuilder<\n TSchema extends AnyGraphqlSchema,\n TTypeName extends keyof TSchema[\"object\"] & string,\n TFields extends AnyNestedObject[],\n> = (tools: NoInfer<NestedObjectFieldsBuilderTools<TSchema, TTypeName>>) => TFields;\n\nexport type NestedObjectFieldsBuilderTools<\n TSchema extends AnyGraphqlSchema,\n TTypeName extends keyof TSchema[\"object\"] & string,\n> = {\n f: FieldSelectionFactories<TSchema, TTypeName>;\n};\n\nexport type NestedUnionFieldsBuilder<\n TSchema extends AnyGraphqlSchema,\n TMemberName extends string,\n TUnionFields extends AnyNestedUnion,\n> = {\n [TTypename in keyof TUnionFields & TMemberName]?: NestedObjectFieldsBuilder<\n TSchema,\n TTypename,\n NonNullable<TUnionFields[TTypename]>[]\n >;\n};\n\n/** Map each field to a factory capable of emitting fully-typed references. */\nexport type FieldSelectionFactories<TSchema extends AnyGraphqlSchema, TTypeName extends keyof TSchema[\"object\"] & string> = {\n [TFieldName in keyof ObjectFieldRecord<TSchema, TTypeName>]: TFieldName extends string\n ? FieldSelectionFactory<TSchema, FieldSelectionTemplateOf<TSchema, TTypeName, TFieldName>>\n : never;\n};\n\nexport type AnyFieldSelectionFactory = <TAlias extends string | null = null>(\n fieldArgs: AnyAssignableInput | void,\n extras?: { alias?: TAlias; directives?: AnyDirectiveAttachments },\n) => AnyFieldSelectionFactoryReturn<TAlias>;\n\nexport type FieldSelectionFactory<TSchema extends AnyGraphqlSchema, TSelection extends AnyFieldSelection> = <\n TAlias extends string | null = null,\n>(\n fieldArgs: TSelection[\"args\"] | IfEmpty<TSelection[\"args\"], void | null>,\n extras?: { alias?: TAlias; directives?: TSelection[\"directives\"] },\n) => FieldSelectionFactoryReturn<TSchema, TSelection, TAlias>;\n\nexport type AnyFieldSelectionFactoryReturn<TAlias extends string | null> =\n | FieldSelectionFactoryReturn<AnyGraphqlSchema, AnyFieldSelection & { type: OutputObjectSpecifier }, TAlias>\n | FieldSelectionFactoryReturn<AnyGraphqlSchema, AnyFieldSelection & { type: OutputUnionSpecifier }, TAlias>\n | FieldSelectionFactoryReturn<\n AnyGraphqlSchema,\n AnyFieldSelection & { type: OutputTypenameSpecifier | OutputScalarSpecifier | OutputEnumSpecifier },\n TAlias\n >;\n\nexport type FieldSelectionFactoryReturn<\n TSchema extends AnyGraphqlSchema,\n TSelection extends AnyFieldSelection,\n TAlias extends string | null,\n> = TSelection extends { type: OutputObjectSpecifier }\n ? FieldSelectionFactoryObjectReturn<TSchema, TSelection, TAlias>\n : TSelection extends { type: OutputUnionSpecifier }\n ? FieldSelectionFactoryUnionReturn<TSchema, TSelection, TAlias>\n : TSelection extends { type: OutputTypenameSpecifier | OutputScalarSpecifier | OutputEnumSpecifier }\n ? FieldSelectionFactoryPrimitiveReturn<TSelection, TAlias>\n : never;\n\nexport type FieldSelectionFactoryObjectReturn<\n TSchema extends AnyGraphqlSchema,\n TSelection extends AnyFieldSelection & { type: OutputObjectSpecifier },\n TAlias extends string | null,\n> = <TNested extends AnyNestedObject[]>(\n nest: NestedObjectFieldsBuilder<TSchema, TSelection[\"type\"][\"name\"], TNested>,\n) => {\n [_ in TAlias extends null ? TSelection[\"field\"] : TAlias]: AbstractFieldSelection<\n TSelection[\"parent\"],\n TSelection[\"field\"],\n TSelection[\"type\"],\n TSelection[\"args\"],\n TSelection[\"directives\"],\n { object: MergeFields<TNested> }\n >;\n};\n\nexport type FieldSelectionFactoryUnionReturn<\n TSchema extends AnyGraphqlSchema,\n TSelection extends AnyFieldSelection & { type: OutputUnionSpecifier },\n TAlias extends string | null,\n> = <TNested extends AnyNestedUnion>(\n nest: NestedUnionFieldsBuilder<TSchema, UnionMemberName<TSchema, TSelection[\"type\"]>, TNested>,\n) => {\n [_ in TAlias extends null ? TSelection[\"field\"] : TAlias]: AbstractFieldSelection<\n TSelection[\"parent\"],\n TSelection[\"field\"],\n TSelection[\"type\"],\n TSelection[\"args\"],\n TSelection[\"directives\"],\n { union: TNested }\n >;\n};\n\nexport type FieldSelectionFactoryPrimitiveReturn<\n TSelection extends AnyFieldSelection & { type: OutputTypenameSpecifier | OutputScalarSpecifier | OutputEnumSpecifier },\n TAlias extends string | null,\n> = {\n [_ in TAlias extends null ? TSelection[\"field\"] : TAlias]: AbstractFieldSelection<\n TSelection[\"parent\"],\n TSelection[\"field\"],\n TSelection[\"type\"],\n TSelection[\"args\"],\n TSelection[\"directives\"],\n {}\n >;\n};\n\nexport type FieldSelectionFactoryFieldArguments<TFieldSelectionTemplate extends AnyFieldSelection> =\n | TFieldSelectionTemplate[\"args\"]\n | IfEmpty<TFieldSelectionTemplate[\"args\"], void | null>;\n","/**\n * Context passed to the definition factory during evaluation.\n */\nexport type LazyEvaluatorContext = {\n canonicalId: string;\n};\n\n/**\n * Factory function that produces the definition value.\n * Can be sync or async.\n */\nexport type LazyDefinitionFactory<T> = (context: LazyEvaluatorContext | null) => T | Promise<T>;\n\n/**\n * Function that provides dependencies to evaluate before the main definition.\n */\nexport type LazyDependencyProvider<TDep> = () => TDep[];\n\n/**\n * Internal generator that handles the evaluation protocol.\n */\nexport type LazyEvaluatorExecutor<T> = (context: LazyEvaluatorContext | null) => Generator<Promise<void>, T, void>;\n\n/**\n * Creates a lazy evaluator with caching, async support, and dependency ordering.\n *\n * @param define - Factory function that produces the value\n * @param getDeps - Optional function returning dependencies to evaluate first\n * @param createDepGenerator - Function to create evaluation generator for a dependency\n * @returns An executor generator function\n */\nexport const createLazyEvaluator = <T, TDep>(\n define: LazyDefinitionFactory<T>,\n getDeps: LazyDependencyProvider<TDep> | undefined,\n createDepGenerator: (dep: TDep) => Generator<Promise<void>, void, void>,\n): LazyEvaluatorExecutor<T> => {\n let cache: { value: T } | null = null;\n let promise: Promise<void> | null = null;\n\n return function* execute(context: LazyEvaluatorContext | null): Generator<Promise<void>, T, void> {\n if (cache) {\n return cache.value;\n }\n\n if (promise) {\n yield promise;\n // biome-ignore lint/style/noNonNullAssertion: cache is guaranteed to be set after promise resolves\n return cache!.value;\n }\n\n if (getDeps) {\n // Need to evaluate the dependencies before the current element is evaluated.\n //\n // When dependencies is evaluated while the current element is being evaluated,\n // the evaluation method will be synchronous regardless of how the current builder\n // performs. If the dependencies need to be evaluated asynchronously, they throw an error.\n for (const dep of getDeps()) {\n yield* createDepGenerator(dep);\n }\n }\n\n const defined = define(context);\n if (!(defined instanceof Promise)) {\n return (cache = { value: defined }).value;\n }\n\n // Create a promise to resolve the value of the element asynchronously.\n // Yield the promise to make the builder process handle the asynchronous operation if it supports it.\n promise = defined.then((value) => {\n cache = { value };\n promise = null;\n });\n\n yield promise;\n // biome-ignore lint/style/noNonNullAssertion: cache is guaranteed to be set after promise resolves\n return cache!.value;\n };\n};\n\n/**\n * Creates an evaluation generator from an executor.\n * Wraps the executor's generator and discards its return value.\n */\nexport function* createEvaluationGenerator<T>(\n executor: LazyEvaluatorExecutor<T>,\n context: LazyEvaluatorContext | null,\n): Generator<Promise<void>, void, void> {\n yield* executor(context);\n}\n\n/**\n * Executes the evaluator synchronously.\n * Throws if async operation is encountered.\n */\nexport const evaluateSync = <T>(executor: LazyEvaluatorExecutor<T>, context: LazyEvaluatorContext | null): T => {\n const result = executor(context).next();\n\n if (!result.done) {\n throw new Error(\"Async operation is not supported in sync evaluation.\");\n }\n\n return result.value;\n};\n","import {\n createLazyEvaluator,\n type LazyEvaluatorContext,\n type LazyEvaluatorExecutor,\n createEvaluationGenerator as lazyCreateEvaluationGenerator,\n evaluateSync as lazyEvaluateSync,\n} from \"./lazy-evaluator\";\n\nconst GQL_ELEMENT_FACTORY = Symbol(\"GQL_ELEMENT_FACTORY\");\nconst GQL_ELEMENT_CONTEXT = Symbol(\"GQL_ELEMENT_CONTEXT\");\n\nexport type GqlElementContext = LazyEvaluatorContext;\n\nexport type GqlElementDefinitionFactory<T> = (context: GqlElementContext | null) => T | Promise<T>;\n\nexport type GqlElementAttachment<TElement extends object, TName extends string, TValue extends object> = {\n name: TName;\n createValue: (element: TElement) => TValue;\n};\n\nexport abstract class GqlElement<TDefinition extends object, TInfer extends object> {\n declare readonly $infer: TInfer;\n\n private [GQL_ELEMENT_FACTORY]: LazyEvaluatorExecutor<TDefinition>;\n private [GQL_ELEMENT_CONTEXT]: GqlElementContext | null = null;\n\n protected constructor(define: GqlElementDefinitionFactory<TDefinition>, getDeps?: () => GqlElement<any, any>[]) {\n this[GQL_ELEMENT_FACTORY] = createLazyEvaluator(define, getDeps, GqlElement.createEvaluationGenerator);\n\n Object.defineProperty(this, \"$infer\", {\n get() {\n throw new Error(\"This property is only for type meta. Do not access this property directly.\");\n },\n });\n }\n\n public attach<TName extends string, TValue extends object>(attachment: GqlElementAttachment<this, TName, TValue>) {\n let cache: TValue | null = null;\n\n Object.defineProperty(this, attachment.name, {\n get() {\n if (cache) {\n return cache;\n }\n\n GqlElement.evaluateInstantly(this);\n\n return (cache = attachment.createValue(this));\n },\n });\n\n return this as this & { [_ in TName]: TValue };\n }\n\n static setContext<TElement extends GqlElement<any, any>>(element: TElement, context: GqlElementContext): void {\n element[GQL_ELEMENT_CONTEXT] = context;\n }\n\n static createEvaluationGenerator(element: GqlElement<any, any>): Generator<Promise<void>, void, void> {\n return lazyCreateEvaluationGenerator(element[GQL_ELEMENT_FACTORY], element[GQL_ELEMENT_CONTEXT]);\n }\n\n private static evaluateInstantly<TValue extends object>(element: GqlElement<TValue, any>): TValue {\n return lazyEvaluateSync(element[GQL_ELEMENT_FACTORY], element[GQL_ELEMENT_CONTEXT]);\n }\n\n static evaluateSync(element: GqlElement<any, any>): void {\n void GqlElement.evaluateInstantly(element);\n }\n\n static get<TValue extends object>(element: GqlElement<TValue, any>): TValue {\n return GqlElement.evaluateInstantly(element);\n }\n}\n","/** Fragment helper types mirroring the `gql.fragment` API. */\n\nimport type { SwitchIfEmpty } from \"../../utils/empty-object\";\nimport type { AnyAssignableInput, AnyFields, AssignableInput, InferFields } from \"../fragment\";\nimport type { AnyGraphqlSchema } from \"../schema\";\nimport type { InputTypeSpecifiers } from \"../type-foundation\";\nimport { GqlElement } from \"./gql-element\";\n\nexport type AnyFragment = Fragment<string, any, AnyFields, any>;\n\nexport type FragmentInferMeta<TVariables, TOutput extends object> = {\n readonly input: TVariables;\n readonly output: TOutput;\n};\n\ninterface FragmentArtifact<\n TTypeName extends string,\n TVariables extends Partial<AnyAssignableInput> | void,\n TFields extends Partial<AnyFields>,\n> {\n readonly typename: TTypeName;\n readonly embed: (variables: TVariables) => TFields;\n}\n\ndeclare const __FRAGMENT_BRAND__: unique symbol;\nexport class Fragment<\n TTypeName extends string,\n TVariables extends Partial<AnyAssignableInput> | void,\n TFields extends Partial<AnyFields>,\n TOutput extends object,\n >\n extends GqlElement<FragmentArtifact<TTypeName, TVariables, TFields>, FragmentInferMeta<TVariables, TOutput>>\n implements FragmentArtifact<TTypeName, TVariables, TFields>\n{\n private declare readonly [__FRAGMENT_BRAND__]: void;\n\n private constructor(define: () => FragmentArtifact<TTypeName, TVariables, TFields>) {\n super(define);\n }\n\n public get typename() {\n return GqlElement.get(this).typename;\n }\n public get embed() {\n return GqlElement.get(this).embed;\n }\n\n static create<\n TSchema extends AnyGraphqlSchema,\n TTypeName extends keyof TSchema[\"object\"] & string,\n TVariableDefinitions extends InputTypeSpecifiers,\n TFields extends AnyFields,\n >(\n define: () => {\n typename: TTypeName;\n embed: (variables: SwitchIfEmpty<TVariableDefinitions, void, AssignableInput<TSchema, TVariableDefinitions>>) => TFields;\n },\n ) {\n type Fields = TFields & { [key: symbol]: never };\n type Output = InferFields<TSchema, TFields> & { [key: symbol]: never };\n type Variables = SwitchIfEmpty<TVariableDefinitions, void, AssignableInput<TSchema, TVariableDefinitions>>;\n\n return new Fragment<TTypeName, Variables, Fields, Output>(define as () => FragmentArtifact<TTypeName, Variables, Fields>);\n }\n}\n","import type { TypedDocumentNode } from \"@graphql-typed-document-node/core\";\nimport type { AnyFields, InferFields } from \"../fragment\";\nimport type { AnyConstAssignableInput, AnyGraphqlSchema, ConstAssignableInput, OperationType } from \"../schema\";\nimport type { InputTypeSpecifiers } from \"../type-foundation\";\nimport { GqlElement, type GqlElementContext } from \"./gql-element\";\n\nexport type AnyOperation = AnyOperationOf<\"query\"> | AnyOperationOf<\"mutation\"> | AnyOperationOf<\"subscription\">;\nexport type AnyOperationOf<TOperationType extends OperationType> = Operation<\n TOperationType,\n string,\n string[],\n any,\n AnyFields,\n any\n>;\n\nexport type OperationInferMeta<TVariables, TData extends object> = {\n readonly input: TVariables;\n readonly output: TData;\n};\n\ndeclare const __OPERATION_BRAND__: unique symbol;\n\ntype OperationArtifact<\n TOperationType extends OperationType,\n TOperationName extends string,\n TVariableNames extends string[],\n TVariables extends AnyConstAssignableInput,\n TFields extends Partial<AnyFields>,\n TData extends object,\n> = {\n readonly operationType: TOperationType;\n readonly operationName: TOperationName;\n readonly variableNames: TVariableNames;\n readonly documentSource: () => TFields;\n readonly document: TypedDocumentNode<TData, TVariables>;\n readonly metadata?: unknown;\n};\n\nexport class Operation<\n TOperationType extends OperationType,\n TOperationName extends string,\n TVariableNames extends string[],\n TVariables extends AnyConstAssignableInput,\n TFields extends Partial<AnyFields>,\n TData extends object,\n >\n extends GqlElement<\n OperationArtifact<TOperationType, TOperationName, TVariableNames, TVariables, TFields, TData>,\n OperationInferMeta<TVariables, TData>\n >\n implements OperationArtifact<TOperationType, TOperationName, TVariableNames, TVariables, TFields, TData>\n{\n private declare readonly [__OPERATION_BRAND__]: void;\n\n private constructor(\n define: (\n context: GqlElementContext | null,\n ) =>\n | OperationArtifact<TOperationType, TOperationName, TVariableNames, TVariables, TFields, TData>\n | Promise<OperationArtifact<TOperationType, TOperationName, TVariableNames, TVariables, TFields, TData>>,\n ) {\n super(define);\n }\n\n public get operationType() {\n return GqlElement.get(this).operationType;\n }\n public get operationName() {\n return GqlElement.get(this).operationName;\n }\n public get variableNames() {\n return GqlElement.get(this).variableNames;\n }\n public get documentSource() {\n return GqlElement.get(this).documentSource;\n }\n public get document() {\n return GqlElement.get(this).document;\n }\n public get metadata() {\n return GqlElement.get(this).metadata;\n }\n\n static create<\n TSchema extends AnyGraphqlSchema,\n TOperationType extends OperationType,\n TOperationName extends string,\n TVariableDefinitions extends InputTypeSpecifiers,\n TFields extends AnyFields,\n >(\n define: (context: GqlElementContext | null) =>\n | {\n operationType: TOperationType;\n operationName: TOperationName;\n variableNames: (keyof TVariableDefinitions & string)[];\n documentSource: () => TFields;\n document: TypedDocumentNode<InferFields<TSchema, TFields>, ConstAssignableInput<TSchema, TVariableDefinitions>>;\n metadata?: unknown;\n }\n | Promise<{\n operationType: TOperationType;\n operationName: TOperationName;\n variableNames: (keyof TVariableDefinitions & string)[];\n documentSource: () => TFields;\n document: TypedDocumentNode<InferFields<TSchema, TFields>, ConstAssignableInput<TSchema, TVariableDefinitions>>;\n metadata?: unknown;\n }>,\n ) {\n return new Operation(define);\n }\n}\n","type ArgEntries<T extends object> = { [K in keyof T]-?: [value: T[K], key: K] }[keyof T];\ntype Entries<T extends object> = { [K in keyof T]: [key: K, value: T[K]] }[keyof T];\n\nexport function mapValues<TObject extends object, TMappedValue>(\n obj: TObject,\n fn: (...args: ArgEntries<TObject>) => TMappedValue,\n): {\n [K in keyof TObject]: TMappedValue;\n} {\n return Object.fromEntries((Object.entries(obj) as Entries<TObject>[]).map(([key, value]) => [key, fn(value, key)])) as {\n [K in keyof TObject]: TMappedValue;\n };\n}\n","import {\n type AnyFieldSelectionFactory,\n type AnyFieldSelectionFactoryReturn,\n type FieldSelectionFactories,\n type FieldSelectionFactoryObjectReturn,\n type FieldSelectionFactoryPrimitiveReturn,\n type FieldSelectionFactoryUnionReturn,\n mergeFields,\n type NestedObjectFieldsBuilder,\n type NestedUnionFieldsBuilder,\n} from \"../types/element\";\nimport type { AnyFieldSelection, AnyNestedObject, AnyNestedUnion } from \"../types/fragment\";\nimport type { AnyGraphqlSchema, UnionMemberName } from \"../types/schema\";\nimport type {\n OutputEnumSpecifier,\n OutputObjectSpecifier,\n OutputScalarSpecifier,\n OutputTypenameSpecifier,\n OutputUnionSpecifier,\n} from \"../types/type-foundation\";\nimport { mapValues } from \"../utils/map-values\";\nimport { wrapByKey } from \"../utils/wrap-by-key\";\nimport { appendToPath, getCurrentFieldPath, isListType, withFieldPath } from \"./field-path-context\";\n\n// Cache is schema-scoped to avoid cross-schema contamination when multiple schemas share type names\ntype CacheMap = Map<string, Record<string, AnyFieldSelectionFactory>>;\n\nconst cacheMapBySchema = new WeakMap<AnyGraphqlSchema, CacheMap>();\nconst ensureCacheMapBySchema = (schema: AnyGraphqlSchema) => {\n const cachedCacheMap = cacheMapBySchema.get(schema);\n if (cachedCacheMap) {\n return cachedCacheMap;\n }\n\n const cacheMap: CacheMap = new Map();\n cacheMapBySchema.set(schema, cacheMap);\n return cacheMap;\n};\n\nexport const createFieldFactories = <TSchema extends AnyGraphqlSchema, TTypeName extends keyof TSchema[\"object\"] & string>(\n schema: TSchema,\n typeName: TTypeName,\n): FieldSelectionFactories<TSchema, TTypeName> => {\n const cacheMap = ensureCacheMapBySchema(schema);\n const cached = cacheMap.get(typeName);\n if (cached) {\n return cached as unknown as FieldSelectionFactories<TSchema, TTypeName>;\n }\n\n const factories = createFieldFactoriesInner(schema, typeName);\n cacheMap.set(typeName, factories as unknown as Record<string, AnyFieldSelectionFactory>);\n\n return factories;\n};\n\nconst createFieldFactoriesInner = <TSchema extends AnyGraphqlSchema, TTypeName extends keyof TSchema[\"object\"] & string>(\n schema: TSchema,\n typeName: TTypeName,\n): FieldSelectionFactories<TSchema, TTypeName> => {\n const typeDef = schema.object[typeName];\n if (!typeDef) {\n throw new Error(`Type ${typeName} is not defined in schema objects`);\n }\n\n const entries = Object.entries(typeDef.fields).map(([fieldName, type]): [string, AnyFieldSelectionFactory] => {\n const factory: AnyFieldSelectionFactory = <TAlias extends string | null = null>(\n fieldArgs: AnyFieldSelection[\"args\"] | null | void,\n extras?: { alias?: TAlias; directives?: AnyFieldSelection[\"directives\"] },\n ) => {\n const wrap = <T>(value: T) => wrapByKey((extras?.alias ?? fieldName) as TAlias extends null ? string : TAlias, value);\n\n if (type.kind === \"object\") {\n type TSelection = AnyFieldSelection & { type: OutputObjectSpecifier };\n const factoryReturn: AnyFieldSelectionFactoryReturn<TAlias> = (<TNested extends AnyNestedObject[]>(\n nest: NestedObjectFieldsBuilder<TSchema, TSelection[\"type\"][\"name\"], TNested>,\n ) => {\n // Build new path for this field\n const currentPath = getCurrentFieldPath();\n const newPath = appendToPath(currentPath, {\n field: fieldName,\n parentType: typeName,\n isList: isListType(type.modifier),\n });\n\n // Run nested builder with updated path context\n const nestedFields = withFieldPath(newPath, () => mergeFields(nest({ f: createFieldFactories(schema, type.name) })));\n\n return wrap({\n parent: typeName,\n field: fieldName,\n type: type,\n args: fieldArgs ?? {},\n directives: extras?.directives ?? {},\n object: nestedFields,\n union: null,\n } satisfies AnyFieldSelection);\n }) satisfies FieldSelectionFactoryObjectReturn<TSchema, TSelection, TAlias>;\n\n return factoryReturn;\n }\n\n if (type.kind === \"union\") {\n type TSelection = AnyFieldSelection & { type: OutputUnionSpecifier };\n const factoryReturn: AnyFieldSelectionFactoryReturn<TAlias> = (<TNested extends AnyNestedUnion>(\n nest: NestedUnionFieldsBuilder<TSchema, UnionMemberName<TSchema, TSelection[\"type\"]>, TNested>,\n ) => {\n // Build new path for this field\n const currentPath = getCurrentFieldPath();\n const newPath = appendToPath(currentPath, {\n field: fieldName,\n parentType: typeName,\n isList: isListType(type.modifier),\n });\n\n // Run nested builders with updated path context\n const nestedUnion = withFieldPath(newPath, () =>\n mapValues(\n nest as Record<string, NestedObjectFieldsBuilder<TSchema, string, AnyNestedObject[]> | undefined>,\n (builder, memberName) => {\n if (!builder) {\n throw new Error(`Builder is undefined for member name: ${memberName}`);\n }\n return mergeFields(builder({ f: createFieldFactories(schema, memberName) }));\n },\n ),\n ) as TNested;\n\n return wrap({\n parent: typeName,\n field: fieldName,\n type: type,\n args: fieldArgs ?? {},\n directives: extras?.directives ?? {},\n object: null,\n union: nestedUnion,\n } satisfies AnyFieldSelection);\n }) satisfies FieldSelectionFactoryUnionReturn<TSchema, TSelection, TAlias>;\n\n return factoryReturn;\n }\n\n if (type.kind === \"scalar\" || type.kind === \"enum\" || type.kind === \"typename\") {\n type TSelection = AnyFieldSelection & { type: OutputTypenameSpecifier | OutputScalarSpecifier | OutputEnumSpecifier };\n const factoryReturn: AnyFieldSelectionFactoryReturn<TAlias> = wrap({\n parent: typeName,\n field: fieldName,\n type,\n args: fieldArgs ?? {},\n directives: extras?.directives ?? {},\n object: null,\n union: null,\n } satisfies AnyFieldSelection) satisfies FieldSelectionFactoryPrimitiveReturn<TSelection, TAlias>;\n return factoryReturn;\n }\n\n throw new Error(`Unsupported field type: ${type satisfies never}`);\n };\n\n return [fieldName, factory] as const;\n });\n\n const factories: Record<string, AnyFieldSelectionFactory> = Object.fromEntries(entries);\n\n return factories as unknown as FieldSelectionFactories<TSchema, TTypeName>;\n};\n","/**\n * Fragment usage context using shared value container pattern.\n *\n * This module tracks fragment usages during operation building,\n * allowing metadata from embedded fragments to be collected and aggregated.\n * Similar to field-path-context, uses a shared mutable container.\n */\n\nimport type { FieldPath } from \"./field-path-context\";\n\n/**\n * Record of a fragment being embedded in an operation.\n * Stores metadata builder (not fragment reference) since fragment cannot reference itself.\n *\n * @template TFragmentMetadata - The type of metadata produced by the fragment's metadata builder\n */\nexport type FragmentUsageRecord<TFragmentMetadata = unknown> = {\n /** Metadata builder factory from the fragment, if defined */\n readonly metadataBuilder: (() => TFragmentMetadata | Promise<TFragmentMetadata>) | null;\n /** Field path where the fragment was embedded */\n readonly path: FieldPath | null;\n};\n\n/**\n * Shared mutable container for collecting fragment usages.\n * Only synchronous access is supported.\n */\nconst fragmentUsageContext: { current: FragmentUsageRecord[] | null } = {\n current: null,\n};\n\n/**\n * Run a function with fragment usage collection enabled.\n * Returns both the function result and collected fragment usages.\n *\n * @internal\n */\nexport const withFragmentUsageCollection = <T>(fn: () => T): { result: T; usages: FragmentUsageRecord[] } => {\n const previousCollector = fragmentUsageContext.current;\n const usages: FragmentUsageRecord[] = [];\n fragmentUsageContext.current = usages;\n try {\n const result = fn();\n return { result, usages };\n } finally {\n fragmentUsageContext.current = previousCollector;\n }\n};\n\n/**\n * Record a fragment usage. Called when fragment.embed() is invoked.\n * No-op if not in a collection context.\n *\n * @internal\n */\nexport const recordFragmentUsage = (record: FragmentUsageRecord): void => {\n if (fragmentUsageContext.current) {\n fragmentUsageContext.current.push(record);\n }\n};\n","import {\n type AnyAssignableInput,\n type AssigningInput,\n createVarRefFromConstValue,\n createVarRefFromVariable,\n isVarRef,\n} from \"../types/fragment\";\nimport type { AnyGraphqlSchema, InferInputProfile } from \"../types/schema\";\nimport type { AnyVarRef, ConstValue, InputTypeSpecifiers } from \"../types/type-foundation\";\nimport { mapValues } from \"../utils/map-values\";\nimport type { UnionToIntersection } from \"../utils/type-utils\";\n\nexport const mergeVarDefinitions = <TVarDefinitions extends InputTypeSpecifiers[]>(definitions: TVarDefinitions) =>\n Object.assign({}, ...definitions) as MergeVarDefinitions<TVarDefinitions>;\n\nexport type MergeVarDefinitions<TVarDefinitions extends InputTypeSpecifiers[]> = UnionToIntersection<\n TVarDefinitions[number]\n> extends infer TDefinitions\n ? {\n readonly [K in keyof TDefinitions]: TDefinitions[K];\n }\n : never;\n\nexport const createVarAssignments = <TSchema extends AnyGraphqlSchema, TVariableDefinitions extends InputTypeSpecifiers>(\n definitions: TVariableDefinitions,\n providedValues: AnyAssignableInput | void,\n): AssigningInput<TSchema, TVariableDefinitions> => {\n return mapValues(definitions, (_definition, key): AnyVarRef => {\n const varName = key as string;\n if (!providedValues || providedValues[varName] === undefined) {\n return createVarRefFromConstValue<InferInputProfile<TSchema, typeof _definition>>(undefined);\n }\n\n const provided = providedValues[varName];\n if (isVarRef(provided)) {\n return provided;\n }\n\n return createVarRefFromConstValue<InferInputProfile<TSchema, typeof _definition>>(provided as ConstValue);\n }) as AssigningInput<TSchema, TVariableDefinitions>;\n};\n\nexport const createVarRefs = <TSchema extends AnyGraphqlSchema, TVarDefinitions extends InputTypeSpecifiers>(\n definitions: TVarDefinitions,\n) =>\n mapValues(definitions as InputTypeSpecifiers, (_ref, name) =>\n createVarRefFromVariable<InferInputProfile<TSchema, typeof _ref>>(name),\n ) as AssigningInput<TSchema, TVarDefinitions>;\n","import { type FieldsBuilder, Fragment, type MergeFields, mergeFields } from \"../types/element\";\nimport type { AnyFields, AssigningInput } from \"../types/fragment\";\nimport type { AnyMetadataAdapter, DefaultMetadataAdapter, ExtractAdapterTypes, FragmentMetadataBuilder } from \"../types/metadata\";\nimport type { AnyGraphqlSchema } from \"../types/schema\";\nimport type { InputTypeSpecifiers } from \"../types/type-foundation\";\nimport { mapValues } from \"../utils/map-values\";\nimport { getCurrentFieldPath } from \"./field-path-context\";\nimport { createFieldFactories } from \"./fields-builder\";\nimport { recordFragmentUsage } from \"./fragment-usage-context\";\nimport { createVarAssignments, type createVarRefs, type MergeVarDefinitions, mergeVarDefinitions } from \"./input\";\n\nexport const createGqlFragmentComposers = <\n TSchema extends AnyGraphqlSchema,\n TAdapter extends AnyMetadataAdapter = DefaultMetadataAdapter,\n>(\n schema: NoInfer<TSchema>,\n _adapter?: TAdapter,\n) => {\n type TFragmentMetadata = ExtractAdapterTypes<TAdapter>[\"fragmentMetadata\"];\n\n type FragmentBuilder<TTypeName extends keyof TSchema[\"object\"] & string> = <\n TFieldEntries extends AnyFields[],\n TVarDefinitions extends InputTypeSpecifiers[] = [{}],\n >(\n options: {\n variables?: TVarDefinitions;\n metadata?: FragmentMetadataBuilder<\n ReturnType<typeof createVarRefs<TSchema, MergeVarDefinitions<TVarDefinitions>>>,\n TFragmentMetadata\n >;\n },\n builder: FieldsBuilder<TSchema, TTypeName, MergeVarDefinitions<TVarDefinitions>, TFieldEntries>,\n ) => ReturnType<typeof Fragment.create<TSchema, TTypeName, MergeVarDefinitions<TVarDefinitions>, MergeFields<TFieldEntries>>>;\n\n const createFragmentComposer = <TTypeName extends keyof TSchema[\"object\"] & string>(\n typename: TTypeName,\n ): FragmentBuilder<TTypeName> => {\n return <TFieldEntries extends AnyFields[], TVarDefinitions extends InputTypeSpecifiers[] = [{}]>(\n options: {\n variables?: TVarDefinitions;\n metadata?: FragmentMetadataBuilder<AssigningInput<TSchema, MergeVarDefinitions<TVarDefinitions>>, TFragmentMetadata>;\n },\n builder: FieldsBuilder<TSchema, TTypeName, MergeVarDefinitions<TVarDefinitions>, TFieldEntries>,\n ) => {\n const varDefinitions = mergeVarDefinitions((options.variables ?? []) as TVarDefinitions);\n const { metadata } = options;\n\n return Fragment.create<TSchema, TTypeName, MergeVarDefinitions<TVarDefinitions>, MergeFields<TFieldEntries>>(() => ({\n typename,\n embed: (variables) => {\n const f = createFieldFactories(schema, typename);\n const $ = createVarAssignments<TSchema, MergeVarDefinitions<TVarDefinitions>>(varDefinitions, variables);\n\n recordFragmentUsage({\n metadataBuilder: metadata ? () => metadata({ $ }) : null,\n path: getCurrentFieldPath(),\n });\n\n return mergeFields(builder({ f, $ }));\n },\n }));\n };\n };\n\n type FragmentBuildersAll = {\n readonly [TTypeName in keyof TSchema[\"object\"]]: TTypeName extends string ? FragmentBuilder<TTypeName> : never;\n };\n\n // Include operation roots (Query, Mutation, Subscription) for fragment colocation\n // These allow defining reusable fragments on operation root types\n type FragmentBuilders = FragmentBuildersAll;\n\n return mapValues(schema.object, (_, typename) => createFragmentComposer(typename)) as FragmentBuilders;\n};\n","import type { FieldPath } from \"../../composer/field-path-context\";\nimport type { OperationMetadata } from \"./metadata\";\n\n/**\n * Information about a fragment's metadata when embedded in an operation.\n */\nexport type FragmentMetaInfo<TFragmentMetadata> = {\n /** The evaluated metadata from the fragment, if defined */\n readonly metadata: TFragmentMetadata | undefined;\n /** Field path where the fragment was embedded */\n readonly fieldPath: FieldPath | null;\n};\n\n/**\n * Metadata adapter that defines how fragment metadata is aggregated\n * and provides schema-level configuration.\n *\n * This adapter allows complete customization of:\n * - Fragment metadata type (TFragmentMetadata)\n * - How fragment metadata is aggregated (aggregateFragmentMetadata)\n * - Schema-level fixed values available to all operation metadata builders (schemaLevel)\n *\n * Note: Operation metadata type is inferred from the operation's metadata callback return type.\n *\n * @template TFragmentMetadata - The metadata type returned by fragment metadata builders\n * @template TAggregatedFragmentMetadata - The type returned by aggregateFragmentMetadata\n * @template TSchemaLevel - The type of schema-level configuration values\n */\nexport type MetadataAdapter<TFragmentMetadata = unknown, TAggregatedFragmentMetadata = unknown, TSchemaLevel = unknown> = {\n /**\n * Aggregates metadata from all embedded fragments in an operation.\n * Called with the metadata from each embedded fragment.\n * The return type becomes the `fragmentMetadata` parameter in operation metadata builders.\n */\n readonly aggregateFragmentMetadata: (fragments: readonly FragmentMetaInfo<TFragmentMetadata>[]) => TAggregatedFragmentMetadata;\n /**\n * Schema-level fixed values that are passed to all operation metadata builders.\n * Useful for configuration that should be consistent across all operations.\n */\n readonly schemaLevel?: TSchemaLevel;\n};\n\n/**\n * Extracts the type parameters from a MetadataAdapter.\n */\nexport type ExtractAdapterTypes<T> = T extends MetadataAdapter<infer TFragment, infer TAggregated, infer TSchemaLevel>\n ? {\n fragmentMetadata: TFragment;\n aggregatedFragmentMetadata: TAggregated;\n schemaLevel: TSchemaLevel;\n }\n : never;\n\n/**\n * Generic type for any metadata adapter.\n */\nexport type AnyMetadataAdapter = MetadataAdapter<any, any, any>;\n\n/**\n * Unified adapter that combines helpers and metadata configuration.\n *\n * @template THelpers - Custom helper functions accessible in gql composer callbacks\n * @template TFragmentMetadata - The metadata type returned by fragment metadata builders\n * @template TAggregatedFragmentMetadata - The type returned by aggregateFragmentMetadata\n * @template TSchemaLevel - The type of schema-level configuration values\n *\n * @example\n * ```typescript\n * const adapter = defineAdapter({\n * helpers: {\n * auth: {\n * requiresLogin: () => ({ requiresAuth: true }),\n * },\n * },\n * metadata: {\n * aggregateFragmentMetadata: (fragments) => fragments.map((m) => m.metadata),\n * schemaLevel: { apiVersion: \"v2\" },\n * },\n * });\n * ```\n */\nexport type Adapter<\n THelpers extends object = object,\n TFragmentMetadata = unknown,\n TAggregatedFragmentMetadata = unknown,\n TSchemaLevel = unknown,\n> = {\n /** Custom helper functions accessible in gql composer callbacks */\n readonly helpers?: THelpers;\n /** Metadata configuration for fragments and operations */\n readonly metadata?: MetadataAdapter<TFragmentMetadata, TAggregatedFragmentMetadata, TSchemaLevel>;\n};\n\n/**\n * Generic type for any unified adapter.\n */\nexport type AnyAdapter = Adapter<any, any, any, any>;\n\n/**\n * Extracts the type parameters from a unified Adapter.\n */\nexport type ExtractUnifiedAdapterTypes<T> = T extends Adapter<\n infer THelpers,\n infer TFragment,\n infer TAggregated,\n infer TSchemaLevel\n>\n ? {\n helpers: THelpers;\n fragmentMetadata: TFragment;\n aggregatedFragmentMetadata: TAggregated;\n schemaLevel: TSchemaLevel;\n }\n : never;\n\n/**\n * Default adapter that maintains backwards compatibility with the original behavior.\n * Uses OperationMetadata for fragment metadata and aggregates by collecting metadata into a readonly array.\n */\nexport type DefaultMetadataAdapter = MetadataAdapter<OperationMetadata, readonly (OperationMetadata | undefined)[]>;\n\n/**\n * Default unified adapter type.\n */\nexport type DefaultAdapter = Adapter<object, OperationMetadata, readonly (OperationMetadata | undefined)[]>;\n\n/**\n * Creates the default adapter instance.\n * @internal\n */\nexport const createDefaultAdapter = (): DefaultMetadataAdapter => ({\n aggregateFragmentMetadata: (fragments) => fragments.map((m) => m.metadata),\n});\n\n/**\n * The default adapter instance.\n */\nexport const defaultMetadataAdapter: DefaultMetadataAdapter = createDefaultAdapter();\n","import { type FieldsBuilder, type MergeFields, mergeFields, Operation } from \"../types/element\";\nimport type { AnyFields } from \"../types/fragment\";\nimport type {\n AnyMetadataAdapter,\n DefaultMetadataAdapter,\n ExtractAdapterTypes,\n FragmentMetaInfo,\n MetadataBuilder,\n} from \"../types/metadata\";\nimport { defaultMetadataAdapter } from \"../types/metadata\";\nimport type { AnyGraphqlSchema, OperationType } from \"../types/schema\";\nimport type { InputTypeSpecifiers } from \"../types/type-foundation\";\n\nimport { buildDocument } from \"./build-document\";\nimport { createFieldFactories } from \"./fields-builder\";\nimport { withFragmentUsageCollection } from \"./fragment-usage-context\";\nimport { createVarRefs, type MergeVarDefinitions, mergeVarDefinitions } from \"./input\";\n\nexport const createOperationComposerFactory = <\n TSchema extends AnyGraphqlSchema,\n TAdapter extends AnyMetadataAdapter = DefaultMetadataAdapter,\n>(\n schema: NoInfer<TSchema>,\n adapter?: TAdapter,\n) => {\n const resolvedAdapter = adapter ?? (defaultMetadataAdapter as TAdapter);\n\n type TFragmentMetadata = ExtractAdapterTypes<TAdapter>[\"fragmentMetadata\"];\n type TAggregatedFragmentMetadata = ExtractAdapterTypes<TAdapter>[\"aggregatedFragmentMetadata\"];\n type TSchemaLevel = ExtractAdapterTypes<TAdapter>[\"schemaLevel\"];\n\n return <TOperationType extends OperationType>(operationType: TOperationType) => {\n type TTypeName = TSchema[\"operations\"][TOperationType] & keyof TSchema[\"object\"] & string;\n const operationTypeName: TTypeName | null = schema.operations[operationType];\n if (operationTypeName === null) {\n throw new Error(`Operation type ${operationType} is not defined in schema roots`);\n }\n\n return <\n TOperationName extends string,\n TFields extends AnyFields[],\n TVarDefinitions extends InputTypeSpecifiers[] = [{}],\n TOperationMetadata = unknown,\n >(\n options: {\n name: TOperationName;\n variables?: TVarDefinitions;\n metadata?: MetadataBuilder<\n ReturnType<typeof createVarRefs<TSchema, MergeVarDefinitions<TVarDefinitions>>>,\n TOperationMetadata,\n TAggregatedFragmentMetadata,\n TSchemaLevel\n >;\n },\n fieldBuilder: FieldsBuilder<TSchema, TTypeName, MergeVarDefinitions<TVarDefinitions>, TFields>,\n ) => {\n return Operation.create<\n TSchema,\n TOperationType,\n TOperationName,\n MergeVarDefinitions<TVarDefinitions>,\n MergeFields<TFields>\n >(() => {\n const { name: operationName } = options;\n const variables = mergeVarDefinitions((options.variables ?? []) as TVarDefinitions);\n const $ = createVarRefs<TSchema, MergeVarDefinitions<TVarDefinitions>>(variables);\n const f = createFieldFactories(schema, operationTypeName);\n\n // Collect fragment usages during field building\n const { result: fields, usages: fragmentUsages } = withFragmentUsageCollection(() => mergeFields(fieldBuilder({ f, $ })));\n\n const document = buildDocument({\n operationName,\n operationType,\n variables,\n fields,\n });\n\n const createDefinition = (metadata: TOperationMetadata | undefined) => ({\n operationType,\n operationName,\n variableNames: Object.keys(variables) as (keyof MergeVarDefinitions<TVarDefinitions> & string)[],\n documentSource: () => fields,\n document,\n metadata,\n });\n\n // Check if any fragment has a metadata builder\n const hasFragmentMetadata = fragmentUsages.some((u) => u.metadataBuilder);\n\n if (!hasFragmentMetadata && !options.metadata) {\n // No metadata to evaluate\n return createDefinition(undefined);\n }\n\n // Evaluate fragment metadata first (sync or async)\n const fragmentMetadataResults: (TFragmentMetadata | undefined | Promise<TFragmentMetadata>)[] = fragmentUsages.map(\n (usage) => (usage.metadataBuilder ? usage.metadataBuilder() : undefined),\n );\n\n // Check if any fragment metadata is async\n const hasAsyncFragmentMetadata = fragmentMetadataResults.some((r) => r instanceof Promise);\n\n // Helper to aggregate and call operation metadata builder\n const buildOperationMetadata = (\n resolvedFragmentMetadata: (TFragmentMetadata | undefined)[],\n ): TOperationMetadata | undefined | Promise<TOperationMetadata | undefined> => {\n // Build FragmentMetaInfo array for adapter\n const fragmentMetaInfos: FragmentMetaInfo<TFragmentMetadata>[] = fragmentUsages.map((usage, index) => ({\n metadata: resolvedFragmentMetadata[index],\n fieldPath: usage.path,\n }));\n\n // Aggregate using the adapter\n const aggregatedFragmentMetadata = resolvedAdapter.aggregateFragmentMetadata(\n fragmentMetaInfos,\n ) as TAggregatedFragmentMetadata;\n\n // Call operation metadata builder with aggregated fragment metadata and schema-level config\n const schemaLevel = resolvedAdapter.schemaLevel as TSchemaLevel | undefined;\n return options.metadata?.({ $, document, fragmentMetadata: aggregatedFragmentMetadata, schemaLevel });\n };\n\n if (hasAsyncFragmentMetadata) {\n // Handle async fragment metadata\n return Promise.all(fragmentMetadataResults).then(async (resolvedFragmentMetadata) => {\n const operationMetadata = await buildOperationMetadata(resolvedFragmentMetadata);\n return createDefinition(operationMetadata);\n });\n }\n\n // All fragment metadata is sync, evaluate operation metadata\n const syncFragmentMetadata = fragmentMetadataResults as (TFragmentMetadata | undefined)[];\n const operationMetadataResult = buildOperationMetadata(syncFragmentMetadata);\n\n if (operationMetadataResult instanceof Promise) {\n return operationMetadataResult.then(createDefinition);\n }\n\n return createDefinition(operationMetadataResult);\n });\n };\n };\n};\n","import type { AnyConstDirectiveAttachments, AnyGraphqlSchema, ConstAssignableInputValue } from \"../types/schema\";\nimport { type AnyTypeSpecifier, type ModifiedTypeName, parseModifiedTypeName, type TypeModifier } from \"../types/type-foundation\";\nimport { getVarRefInner, getVarRefName, getVarRefValue } from \"../types/type-foundation/var-ref\";\nimport { wrapByKey } from \"../utils/wrap-by-key\";\n\ntype AssignableDefaultValue<\n TSchema extends AnyGraphqlSchema,\n TKind extends \"scalar\" | \"enum\" | \"input\",\n TName extends keyof TSchema[TKind] & string,\n TModifier extends TypeModifier,\n> = ConstAssignableInputValue<\n TSchema,\n {\n scalar: { kind: \"scalar\"; name: TName; modifier: TModifier; directives: {}; defaultValue: null };\n enum: { kind: \"enum\"; name: TName; modifier: TModifier; directives: {}; defaultValue: null };\n input: { kind: \"input\"; name: TName; modifier: TModifier; directives: {}; defaultValue: null };\n }[TKind]\n>;\n\nexport const createVarBuilder = <TSchema extends AnyGraphqlSchema>(schema: TSchema) => {\n const varBuilder = <TVarName extends string>(varName: TVarName) => {\n const createVarSpecifierBuilder = <TKind extends \"scalar\" | \"enum\" | \"input\">(kind: TKind) => {\n type VarSpecifier<\n TTypeName extends keyof TSchema[TKind] & string,\n TModifier extends TypeModifier,\n TDefaultFn extends (() => AssignableDefaultValue<TSchema, TKind, TTypeName, TModifier>) | null,\n TDirectives extends AnyConstDirectiveAttachments,\n > = {\n kind: TKind;\n name: TTypeName;\n modifier: TModifier;\n defaultValue: TDefaultFn extends null\n ? null\n : {\n default: ReturnType<NonNullable<TDefaultFn>>;\n };\n directives: TDirectives;\n };\n\n return <\n const TTypeName extends keyof TSchema[TKind] & string,\n const TModifier extends TypeModifier,\n const TDefaultFn extends (() => AssignableDefaultValue<TSchema, TKind, TTypeName, TModifier>) | null = null,\n const TDirectives extends AnyConstDirectiveAttachments = {},\n >(\n type: ModifiedTypeName<[keyof TSchema[TKind] & string], TTypeName, TModifier>,\n extras?: {\n default?:\n | (TDefaultFn & (() => AssignableDefaultValue<TSchema, TKind, TTypeName, TModifier>))\n | (NoInfer<TDefaultFn> extends null ? () => AssignableDefaultValue<TSchema, TKind, TTypeName, TModifier> : never);\n directives?: TDirectives;\n },\n ) =>\n wrapByKey(varName, {\n kind,\n ...parseModifiedTypeName(type),\n defaultValue: extras?.default ? { default: extras.default() } : null,\n } satisfies AnyTypeSpecifier as VarSpecifier<TTypeName, TModifier, TDefaultFn, TDirectives>);\n };\n\n return {\n scalar: createVarSpecifierBuilder(\"scalar\"),\n enum: createVarSpecifierBuilder(\"enum\"),\n input: createVarSpecifierBuilder(\"input\"),\n\n byField: <\n const TTypeName extends keyof TSchema[\"object\"] & string,\n const TFieldName extends keyof TSchema[\"object\"][TTypeName][\"fields\"] & string,\n const TArgName extends keyof TSchema[\"object\"][TTypeName][\"fields\"][TFieldName][\"arguments\"] & string,\n >(\n typeName: TTypeName,\n fieldName: TFieldName,\n argName: TArgName,\n ) => {\n const argTypeRef = schema.object[typeName]?.fields[fieldName]?.arguments[argName];\n\n if (!argTypeRef) {\n throw new Error(`Argument ${argName} not found in field ${fieldName} of type ${typeName}`);\n }\n\n // TODO: clone\n return { ...argTypeRef } as TSchema[\"object\"][TTypeName][\"fields\"][TFieldName][\"arguments\"][TArgName];\n },\n };\n };\n\n varBuilder.getName = getVarRefName;\n varBuilder.getValue = getVarRefValue;\n varBuilder.getInner = getVarRefInner;\n\n return varBuilder;\n};\n","import type { AnyFragment, AnyOperation } from \"../types/element\";\nimport type { Adapter, AnyAdapter, AnyMetadataAdapter, DefaultAdapter, DefaultMetadataAdapter } from \"../types/metadata\";\nimport type { AnyGraphqlSchema } from \"../types/schema\";\nimport { createColocateHelper } from \"./colocate\";\nimport { createGqlFragmentComposers } from \"./fragment\";\nimport { createOperationComposerFactory } from \"./operation\";\nimport { createVarBuilder } from \"./var-builder\";\n\nexport type GqlElementComposer<TComposers, THelper> = <TResult extends AnyFragment | AnyOperation>(\n composeElement: (composers: TComposers, helper: THelper) => TResult,\n) => TResult;\n\n/**\n * Extracts the helpers type from an adapter.\n */\ntype ExtractHelpers<TAdapter extends AnyAdapter> = TAdapter extends Adapter<infer THelpers, unknown, unknown, unknown>\n ? THelpers\n : object;\n\n/**\n * Extracts the metadata adapter type from an adapter.\n * Handles optional metadata property correctly.\n */\ntype ExtractMetadataAdapter<TAdapter extends AnyAdapter> = TAdapter extends { metadata?: infer M }\n ? NonNullable<M> extends AnyMetadataAdapter\n ? NonNullable<M>\n : DefaultMetadataAdapter\n : DefaultMetadataAdapter;\n\nexport type GqlElementComposerOptions<TAdapter extends AnyAdapter = DefaultAdapter> = {\n adapter?: TAdapter;\n};\n\nexport const createGqlElementComposer = <TSchema extends AnyGraphqlSchema, TAdapter extends AnyAdapter = DefaultAdapter>(\n schema: NoInfer<TSchema>,\n options: GqlElementComposerOptions<NoInfer<TAdapter>> = {} as GqlElementComposerOptions<TAdapter>,\n) => {\n type THelpers = ExtractHelpers<TAdapter>;\n type TMetadataAdapter = ExtractMetadataAdapter<TAdapter>;\n const { adapter } = options;\n const helpers = adapter?.helpers as THelpers | undefined;\n const metadataAdapter = adapter?.metadata as TMetadataAdapter | undefined;\n const fragment = createGqlFragmentComposers<TSchema, TMetadataAdapter>(schema, metadataAdapter);\n const createOperationComposer = createOperationComposerFactory<TSchema, TMetadataAdapter>(schema, metadataAdapter);\n\n // Wrap operation composers in objects with an `operation` method for extensibility\n // This allows adding more factories (e.g., query.subscription, query.fragment) in the future\n const composers = {\n fragment,\n query: { operation: createOperationComposer(\"query\") },\n mutation: { operation: createOperationComposer(\"mutation\") },\n subscription: { operation: createOperationComposer(\"subscription\") },\n };\n\n const helper = {\n $var: createVarBuilder(schema),\n $colocate: createColocateHelper(),\n ...(helpers ?? ({} as THelpers)),\n };\n\n const elementComposer: GqlElementComposer<typeof composers, typeof helper> = (composeElement) =>\n composeElement(composers, helper);\n\n return elementComposer;\n};\n"],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+
2
+ //#region packages/core/src/utils/hidden.ts
3
+ const _dummy = () => {
4
+ throw new Error("DO NOT CALL THIS FUNCTION -- we use function to safely transfer type information");
5
+ };
6
+ const hidden = () => _dummy;
7
+
8
+ //#endregion
9
+ //#region packages/core/src/runtime/fragment.ts
10
+ const createRuntimeFragment = (input) => {
11
+ const fragment = {
12
+ typename: input.prebuild.typename,
13
+ embed: hidden(),
14
+ attach(attachment) {
15
+ const value = attachment.createValue(fragment);
16
+ Object.defineProperty(fragment, attachment.name, { get() {
17
+ return value;
18
+ } });
19
+ return fragment;
20
+ }
21
+ };
22
+ return fragment;
23
+ };
24
+
25
+ //#endregion
26
+ //#region packages/core/src/runtime/runtime-registry.ts
27
+ const operationRegistry = /* @__PURE__ */ new Map();
28
+ const registerOperation = (operation) => {
29
+ operationRegistry.set(operation.operationName, operation);
30
+ };
31
+ const getOperation = (name) => {
32
+ const operation = operationRegistry.get(name);
33
+ if (!operation) throw new Error(`Operation ${name} not found`);
34
+ return operation;
35
+ };
36
+ /**
37
+ * Test-only function to reset the operation registry
38
+ * @internal
39
+ */
40
+ const __resetRuntimeRegistry = () => {
41
+ operationRegistry.clear();
42
+ };
43
+ /**
44
+ * Test-only function to get all registered operations
45
+ * @internal
46
+ */
47
+ const __getRegisteredOperations = () => {
48
+ return operationRegistry;
49
+ };
50
+
51
+ //#endregion
52
+ //#region packages/core/src/runtime/operation.ts
53
+ const createRuntimeOperation = (input) => {
54
+ const operation = {
55
+ operationType: input.prebuild.operationType,
56
+ operationName: input.prebuild.operationName,
57
+ variableNames: input.prebuild.variableNames,
58
+ documentSource: hidden(),
59
+ document: input.prebuild.document,
60
+ metadata: input.prebuild.metadata,
61
+ attach(attachment) {
62
+ const value = attachment.createValue(operation);
63
+ Object.defineProperty(operation, attachment.name, { get() {
64
+ return value;
65
+ } });
66
+ return operation;
67
+ }
68
+ };
69
+ registerOperation(operation);
70
+ return operation;
71
+ };
72
+
73
+ //#endregion
74
+ //#region packages/core/src/runtime/index.ts
75
+ const gqlRuntime = {
76
+ fragment: createRuntimeFragment,
77
+ operation: createRuntimeOperation,
78
+ getOperation
79
+ };
80
+
81
+ //#endregion
82
+ exports.__getRegisteredOperations = __getRegisteredOperations;
83
+ exports.__resetRuntimeRegistry = __resetRuntimeRegistry;
84
+ exports.gqlRuntime = gqlRuntime;
85
+ //# sourceMappingURL=runtime.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.cjs","names":[],"sources":["../src/utils/hidden.ts","../src/runtime/fragment.ts","../src/runtime/runtime-registry.ts","../src/runtime/operation.ts","../src/runtime/index.ts"],"sourcesContent":["const _dummy = () => {\n throw new Error(\"DO NOT CALL THIS FUNCTION -- we use function to safely transfer type information\");\n};\nexport const hidden = <T>(): (() => T) => _dummy;\nexport type Hidden<T> = () => T;\n","import type { AnyFragment, GqlElementAttachment } from \"../types/element\";\nimport { hidden } from \"../utils/hidden\";\nimport type { StripFunctions, StripSymbols } from \"../utils/type-utils\";\n\nexport type RuntimeFragmentInput = {\n prebuild: StripFunctions<AnyFragment>;\n};\n\nexport const createRuntimeFragment = (input: RuntimeFragmentInput): AnyFragment => {\n const fragment = {\n typename: input.prebuild.typename,\n embed: hidden(),\n attach<TName extends string, TValue extends object>(attachment: GqlElementAttachment<typeof fragment, TName, TValue>) {\n const value = attachment.createValue(fragment);\n\n Object.defineProperty(fragment, attachment.name, {\n get() {\n return value;\n },\n });\n\n return fragment as typeof fragment & { [_ in TName]: TValue };\n },\n } satisfies StripSymbols<AnyFragment> as unknown as AnyFragment;\n\n return fragment;\n};\n","import type { AnyOperationOf } from \"../types/element\";\nimport type { OperationType } from \"../types/schema\";\n\nconst operationRegistry = new Map<string, AnyOperationOf<OperationType>>();\n\nexport const registerOperation = (operation: AnyOperationOf<OperationType>) => {\n operationRegistry.set(operation.operationName, operation);\n};\n\nexport const getOperation = (name: string) => {\n const operation = operationRegistry.get(name);\n if (!operation) {\n throw new Error(`Operation ${name} not found`);\n }\n return operation;\n};\n\n/**\n * Test-only function to reset the operation registry\n * @internal\n */\nexport const __resetRuntimeRegistry = () => {\n operationRegistry.clear();\n};\n\n/**\n * Test-only function to get all registered operations\n * @internal\n */\nexport const __getRegisteredOperations = (): ReadonlyMap<string, AnyOperationOf<OperationType>> => {\n return operationRegistry;\n};\n","import type { AnyOperationOf, GqlElementAttachment } from \"../types/element\";\nimport type { OperationType } from \"../types/schema\";\nimport { hidden } from \"../utils/hidden\";\nimport type { StripFunctions, StripSymbols } from \"../utils/type-utils\";\nimport { registerOperation } from \"./runtime-registry\";\n\nexport type RuntimeOperationInput = {\n prebuild: StripFunctions<AnyOperationOf<OperationType>>;\n /**\n * Reserved for future runtime configuration injection.\n * Currently always an empty object, but kept for forward compatibility\n * with potential features like runtime variable injection or context.\n */\n runtime: {};\n};\n\nexport const createRuntimeOperation = (input: RuntimeOperationInput): AnyOperationOf<OperationType> => {\n const operation = {\n operationType: input.prebuild.operationType,\n operationName: input.prebuild.operationName,\n variableNames: input.prebuild.variableNames,\n documentSource: hidden(),\n document: input.prebuild.document,\n metadata: input.prebuild.metadata,\n attach<TName extends string, TValue extends object>(attachment: GqlElementAttachment<typeof operation, TName, TValue>) {\n const value = attachment.createValue(operation);\n\n Object.defineProperty(operation, attachment.name, {\n get() {\n return value;\n },\n });\n\n return operation as typeof operation & { [_ in TName]: TValue };\n },\n } satisfies StripSymbols<AnyOperationOf<OperationType>> as AnyOperationOf<OperationType>;\n\n registerOperation(operation);\n\n return operation;\n};\n","import { createRuntimeFragment } from \"./fragment\";\nimport { createRuntimeOperation } from \"./operation\";\nimport { getOperation } from \"./runtime-registry\";\n\nexport type { RuntimeFragmentInput } from \"./fragment\";\nexport type { RuntimeOperationInput } from \"./operation\";\nexport { __getRegisteredOperations, __resetRuntimeRegistry } from \"./runtime-registry\";\n\nexport const gqlRuntime = {\n fragment: createRuntimeFragment,\n operation: createRuntimeOperation,\n getOperation,\n};\n"],"mappings":";;AAAA,MAAM,eAAe;AACnB,OAAM,IAAI,MAAM,mFAAmF;;AAErG,MAAa,eAA6B;;;;ACK1C,MAAa,yBAAyB,UAA6C;CACjF,MAAM,WAAW;EACf,UAAU,MAAM,SAAS;EACzB,OAAO,QAAQ;EACf,OAAoD,YAAkE;GACpH,MAAM,QAAQ,WAAW,YAAY,SAAS;AAE9C,UAAO,eAAe,UAAU,WAAW,MAAM,EAC/C,MAAM;AACJ,WAAO;MAEV,CAAC;AAEF,UAAO;;EAEV;AAED,QAAO;;;;;ACtBT,MAAM,oCAAoB,IAAI,KAA4C;AAE1E,MAAa,qBAAqB,cAA6C;AAC7E,mBAAkB,IAAI,UAAU,eAAe,UAAU;;AAG3D,MAAa,gBAAgB,SAAiB;CAC5C,MAAM,YAAY,kBAAkB,IAAI,KAAK;AAC7C,KAAI,CAAC,UACH,OAAM,IAAI,MAAM,aAAa,KAAK,YAAY;AAEhD,QAAO;;;;;;AAOT,MAAa,+BAA+B;AAC1C,mBAAkB,OAAO;;;;;;AAO3B,MAAa,kCAAsF;AACjG,QAAO;;;;;ACdT,MAAa,0BAA0B,UAAgE;CACrG,MAAM,YAAY;EAChB,eAAe,MAAM,SAAS;EAC9B,eAAe,MAAM,SAAS;EAC9B,eAAe,MAAM,SAAS;EAC9B,gBAAgB,QAAQ;EACxB,UAAU,MAAM,SAAS;EACzB,UAAU,MAAM,SAAS;EACzB,OAAoD,YAAmE;GACrH,MAAM,QAAQ,WAAW,YAAY,UAAU;AAE/C,UAAO,eAAe,WAAW,WAAW,MAAM,EAChD,MAAM;AACJ,WAAO;MAEV,CAAC;AAEF,UAAO;;EAEV;AAED,mBAAkB,UAAU;AAE5B,QAAO;;;;;AC/BT,MAAa,aAAa;CACxB,UAAU;CACV,WAAW;CACX;CACD"}
@@ -0,0 +1,40 @@
1
+ import { d as OperationRoots, f as OperationType } from "./schema-DRkKucYe.cjs";
2
+ import { $ as StripFunctions, S as AnyFragment, y as AnyOperationOf } from "./index-B-erotAZ.cjs";
3
+
4
+ //#region packages/core/src/runtime/fragment.d.ts
5
+ type RuntimeFragmentInput = {
6
+ prebuild: StripFunctions<AnyFragment>;
7
+ };
8
+ //#endregion
9
+ //#region packages/core/src/runtime/operation.d.ts
10
+ type RuntimeOperationInput = {
11
+ prebuild: StripFunctions<AnyOperationOf<OperationType>>;
12
+ /**
13
+ * Reserved for future runtime configuration injection.
14
+ * Currently always an empty object, but kept for forward compatibility
15
+ * with potential features like runtime variable injection or context.
16
+ */
17
+ runtime: {};
18
+ };
19
+ //#endregion
20
+ //#region packages/core/src/runtime/runtime-registry.d.ts
21
+ /**
22
+ * Test-only function to reset the operation registry
23
+ * @internal
24
+ */
25
+ declare const __resetRuntimeRegistry: () => void;
26
+ /**
27
+ * Test-only function to get all registered operations
28
+ * @internal
29
+ */
30
+ declare const __getRegisteredOperations: () => ReadonlyMap<string, AnyOperationOf<OperationType>>;
31
+ //#endregion
32
+ //#region packages/core/src/runtime/index.d.ts
33
+ declare const gqlRuntime: {
34
+ fragment: (input: RuntimeFragmentInput) => AnyFragment;
35
+ operation: (input: RuntimeOperationInput) => AnyOperationOf<OperationType>;
36
+ getOperation: (name: string) => AnyOperationOf<keyof OperationRoots>;
37
+ };
38
+ //#endregion
39
+ export { type RuntimeFragmentInput, type RuntimeOperationInput, __getRegisteredOperations, __resetRuntimeRegistry, gqlRuntime };
40
+ //# sourceMappingURL=runtime.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.cts","names":[],"sources":["../src/runtime/fragment.ts","../src/runtime/operation.ts","../src/runtime/runtime-registry.ts","../src/runtime/index.ts"],"sourcesContent":[],"mappings":";;;;KAIY,oBAAA;YACA,eAAe;AAD3B,CAAA;;;KCEY,qBAAA;EDFA,QAAA,ECGA,cDHoB,CCGL,cDFA,CCEe,aDF9B,CAAA,CAAA;;;;ACCZ;;EAC2B,OAAA,EAAA,CAAA,CAAA;CAAf;;;ADHZ;;;;ACEY,cCeC,sBDfoB,EAAA,GAAA,GAAA,IAAA;;;;;cCuBpB,iCAAgC,oBAAoB,eAAe;;;cCrBnE;EHJD,QAAA,EAAA,CAAA,KAAA,EGQX,oBHPW,EAAA,cAAc"}