@soda-gql/core 0.4.0 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -0
- package/dist/adapter.d.cts +2 -2
- package/dist/adapter.d.ts +2 -2
- package/dist/{index-CVmfSjJv.d.ts → index-C-evbm4T.d.ts} +21 -12
- package/dist/index-C-evbm4T.d.ts.map +1 -0
- package/dist/{index-eFR-ZKOA.d.cts → index-IYiti5xq.d.cts} +21 -12
- package/dist/index-IYiti5xq.d.cts.map +1 -0
- package/dist/index.cjs +44 -23
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -4
- package/dist/index.d.ts +4 -4
- package/dist/index.js +44 -23
- package/dist/index.js.map +1 -1
- package/dist/runtime.d.cts +2 -2
- package/dist/runtime.d.ts +2 -2
- package/dist/{schema-5Vfg289u.d.cts → schema-D88zIxYO.d.cts} +3 -2
- package/dist/{schema-5Vfg289u.d.cts.map → schema-D88zIxYO.d.cts.map} +1 -1
- package/dist/{schema-DnlCvCK4.d.ts → schema-DgHZfIVa.d.ts} +3 -2
- package/dist/{schema-DnlCvCK4.d.ts.map → schema-DgHZfIVa.d.ts.map} +1 -1
- package/dist/{schema-builder-cy5uLVP1.d.cts → schema-builder-DWYlI1oI.d.cts} +2 -2
- package/dist/{schema-builder-cy5uLVP1.d.cts.map → schema-builder-DWYlI1oI.d.cts.map} +1 -1
- package/dist/{schema-builder-D_K9ESSn.d.ts → schema-builder-XjFwbmSc.d.ts} +2 -2
- package/dist/{schema-builder-D_K9ESSn.d.ts.map → schema-builder-XjFwbmSc.d.ts.map} +1 -1
- package/package.json +1 -1
- package/dist/index-CVmfSjJv.d.ts.map +0 -1
- package/dist/index-eFR-ZKOA.d.cts.map +0 -1
package/dist/index.js
CHANGED
|
@@ -58,32 +58,41 @@ const getVarRefValue = (varRef) => {
|
|
|
58
58
|
if (hasVarRefInside(inner.value)) throw new Error("Cannot get const value: nested-value contains VarRef");
|
|
59
59
|
return inner.value;
|
|
60
60
|
};
|
|
61
|
-
const
|
|
62
|
-
const
|
|
63
|
-
const inner =
|
|
61
|
+
const SelectableProxyInnerRegistry = /* @__PURE__ */ new WeakMap();
|
|
62
|
+
const getSelectableProxyInner = (proxy) => {
|
|
63
|
+
const inner = SelectableProxyInnerRegistry.get(proxy);
|
|
64
64
|
if (!inner) throw new Error(`Proxy inner not found`);
|
|
65
65
|
return inner;
|
|
66
66
|
};
|
|
67
|
-
const
|
|
67
|
+
const createSelectableProxy = (current) => {
|
|
68
68
|
const proxy = new Proxy(Object.create(null), { get(_, property) {
|
|
69
69
|
if (typeof property === "symbol") throw new Error(`Prohibited property access: ${String(property)}`);
|
|
70
|
-
|
|
71
|
-
if (
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
70
|
+
const nextSegments = [...current.segments, property];
|
|
71
|
+
if (current.varInner.type === "virtual") return createSelectableProxy({
|
|
72
|
+
varInner: current.varInner,
|
|
73
|
+
segments: nextSegments
|
|
74
|
+
});
|
|
75
|
+
if (current.varInner.type === "variable") return createSelectableProxy({
|
|
76
|
+
varInner: {
|
|
77
|
+
type: "virtual",
|
|
78
|
+
varName: current.varInner.name,
|
|
79
|
+
varSegments: nextSegments
|
|
80
|
+
},
|
|
81
|
+
segments: nextSegments
|
|
82
|
+
});
|
|
83
|
+
if (typeof current.varInner.value === "object" && current.varInner.value !== null) {
|
|
84
|
+
const value = current.varInner.value[property];
|
|
85
|
+
return createSelectableProxy({
|
|
86
|
+
varInner: isVarRef(value) ? getVarRefInner(value) : {
|
|
75
87
|
type: "nested-value",
|
|
76
88
|
value
|
|
77
89
|
},
|
|
78
|
-
segments:
|
|
90
|
+
segments: nextSegments
|
|
79
91
|
});
|
|
80
92
|
}
|
|
81
93
|
throw new Error(`Cannot access children of primitive value at path [${current.segments.join(".")}]`);
|
|
82
94
|
} });
|
|
83
|
-
|
|
84
|
-
inner: current.inner,
|
|
85
|
-
segments: current.segments
|
|
86
|
-
});
|
|
95
|
+
SelectableProxyInnerRegistry.set(proxy, current);
|
|
87
96
|
return proxy;
|
|
88
97
|
};
|
|
89
98
|
/**
|
|
@@ -101,12 +110,13 @@ const createProxy = (current) => {
|
|
|
101
110
|
* getNameAt(ref, p => p.user.age); // returns the variable name
|
|
102
111
|
*/
|
|
103
112
|
const getNameAt = (varRef, selector) => {
|
|
104
|
-
const inner =
|
|
105
|
-
|
|
113
|
+
const inner = getSelectableProxyInner(selector(createSelectableProxy({
|
|
114
|
+
varInner: VarRef.getInner(varRef),
|
|
106
115
|
segments: []
|
|
107
116
|
})));
|
|
108
|
-
if (inner.
|
|
109
|
-
|
|
117
|
+
if (inner.varInner.type === "virtual") throw new Error(`Value at path [${inner.segments.join(".")}] is inside a variable`);
|
|
118
|
+
if (inner.varInner.type !== "variable") throw new Error(`Value at path [${inner.segments.join(".")}] is not a variable`);
|
|
119
|
+
return inner.varInner.name;
|
|
110
120
|
};
|
|
111
121
|
/**
|
|
112
122
|
* Get the const value from a nested-value VarRef at a specific path.
|
|
@@ -123,13 +133,23 @@ const getNameAt = (varRef, selector) => {
|
|
|
123
133
|
* getValueAt(ref, p => p.user.name); // returns "Alice"
|
|
124
134
|
*/
|
|
125
135
|
const getValueAt = (varRef, selector) => {
|
|
126
|
-
const inner =
|
|
127
|
-
|
|
136
|
+
const inner = getSelectableProxyInner(selector(createSelectableProxy({
|
|
137
|
+
varInner: VarRef.getInner(varRef),
|
|
138
|
+
segments: []
|
|
139
|
+
})));
|
|
140
|
+
if (inner.varInner.type === "virtual") throw new Error(`Value at path [${inner.segments.join(".")}] is inside a variable`);
|
|
141
|
+
if (inner.varInner.type !== "nested-value") throw new Error(`Value at path [${inner.segments.join(".")}] is not a nested-value`);
|
|
142
|
+
if (hasVarRefInside(inner.varInner.value)) throw new Error(`Value at path [${inner.segments.join(".")}] contains nested VarRef`);
|
|
143
|
+
return inner.varInner.value;
|
|
144
|
+
};
|
|
145
|
+
const getVariablePath = (varRef, selector) => {
|
|
146
|
+
const inner = getSelectableProxyInner(selector(createSelectableProxy({
|
|
147
|
+
varInner: VarRef.getInner(varRef),
|
|
128
148
|
segments: []
|
|
129
149
|
})));
|
|
130
|
-
if (inner.
|
|
131
|
-
if (
|
|
132
|
-
|
|
150
|
+
if (inner.varInner.type === "virtual") return [`$${inner.varInner.varName}`, ...inner.segments.slice(inner.varInner.varSegments.length)];
|
|
151
|
+
if (inner.varInner.type === "variable") return [`$${inner.varInner.name}`];
|
|
152
|
+
throw new Error(`Value at path [${inner.segments.join(".")}] is not a variable or inside a variable`);
|
|
133
153
|
};
|
|
134
154
|
|
|
135
155
|
//#endregion
|
|
@@ -897,6 +917,7 @@ const createVarBuilder = (inputTypeMethods) => {
|
|
|
897
917
|
varBuilder.getInner = getVarRefInner;
|
|
898
918
|
varBuilder.getNameAt = getNameAt;
|
|
899
919
|
varBuilder.getValueAt = getValueAt;
|
|
920
|
+
varBuilder.getVariablePath = getVariablePath;
|
|
900
921
|
return varBuilder;
|
|
901
922
|
};
|
|
902
923
|
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["inner: VarRefInner","proxy: T","value","field","curr: Readonly<{ modifier: string; type: TypeNode }>","fieldPathContext: { current: FieldPath | null }","newSegment: FieldPathSegment","cacheMap: CacheMap","factory: AnyFieldSelectionFactory","factoryReturn: AnyFieldSelectionFactoryReturn<TAlias>","cache: { value: T } | null","promise: Promise<void> | null","define","define","cache: TValue | null","lazyCreateEvaluationGenerator","lazyEvaluateSync","define","define","fragmentUsageContext: { current: FragmentUsageRecord[] | null }","usages: FragmentUsageRecord[]","defaultMetadataAdapter: DefaultMetadataAdapter","operationTypeName: TTypeName | null","fragmentMetadataResults: (TFragmentMetadata | undefined | Promise<TFragmentMetadata>)[]","fragmentMetaInfos: FragmentMetaInfo<TFragmentMetadata>[]","elementComposer: GqlElementComposer<typeof context>"],"sources":["../src/types/type-foundation/var-ref.ts","../src/composer/build-document.ts","../src/composer/colocate.ts","../src/composer/field-path-context.ts","../src/utils/map-values.ts","../src/composer/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/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.WithMeta;\n readonly signature: unknown;\n}\n\n/**\n * A nested value that can contain:\n * - Primitive ConstValue (string, number, boolean, null, undefined)\n * - VarRef at any nesting level\n * - Objects with NestedValue fields\n * - Arrays of NestedValue\n */\nexport type NestedValue =\n | string\n | number\n | boolean\n | null\n | undefined\n | { readonly [key: string]: NestedValueElement }\n | readonly NestedValueElement[];\n\ntype NestedValueElement =\n | string\n | number\n | boolean\n | null\n | undefined\n | AnyVarRef\n | { readonly [key: string]: NestedValueElement }\n | readonly NestedValueElement[];\n\nexport type VarRefInner =\n | {\n type: \"variable\";\n name: string;\n }\n | {\n type: \"nested-value\";\n value: NestedValue;\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\n/**\n * Recursively checks if a NestedValue contains any VarRef.\n * Used by getVarRefValue to determine if it's safe to return as ConstValue.\n */\nexport const hasVarRefInside = (value: NestedValueElement): boolean => {\n if (isVarRef(value)) {\n return true;\n }\n\n if (Array.isArray(value)) {\n return value.some(hasVarRefInside);\n }\n\n if (typeof value === \"object\" && value !== null) {\n return Object.values(value).some(hasVarRefInside);\n }\n\n return false;\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 createVarRefFromNestedValue = <TProfile extends TypeProfile.WithMeta>(value: NestedValue) => {\n return new VarRef<TypeProfile.AssigningVarRefMeta<TProfile>>({ type: \"nested-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 nested-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 nested-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 nested-value,\n * or if the nested-value contains any VarRef inside.\n */\nexport const getVarRefValue = (varRef: AnyVarRef): ConstValue => {\n const inner = VarRef.getInner(varRef);\n if (inner.type !== \"nested-value\") {\n throw new Error(\"Expected nested-value, got variable reference\");\n }\n if (hasVarRefInside(inner.value)) {\n throw new Error(\"Cannot get const value: nested-value contains VarRef\");\n }\n return inner.value as ConstValue;\n};\n\n// ============================================================================\n// Path Types and Utilities\n// ============================================================================\n\n/**\n * Path segment types for navigating nested values.\n */\nexport type PathSegment = string;\n\n/**\n * Proxy type that records property accesses.\n */\nexport type SelectableProxy<T> = T;\n\n/**\n * Type-safe path builder function.\n * Used with getNameAt and getValueAt helpers.\n */\nexport type Selector<T, U> = (proxy: T) => U;\n\ntype ProxyInner = {\n readonly inner: VarRefInner;\n readonly segments: readonly PathSegment[];\n};\n\nconst ProxyInnerRegistry = new WeakMap<any, ProxyInner>();\nconst getProxyInner = (proxy: any): ProxyInner => {\n const inner = ProxyInnerRegistry.get(proxy);\n if (!inner) {\n throw new Error(`Proxy inner not found`);\n }\n return inner;\n};\n\nconst createProxy = <T>(current: ProxyInner): T => {\n const proxy: T = new Proxy(Object.create(null), {\n get(_, property) {\n if (typeof property === \"symbol\") {\n throw new Error(`Prohibited property access: ${String(property)}`);\n }\n\n if (current.inner.type === \"variable\") {\n throw new Error(`Cannot access children of variable at path [${current.segments.join(\".\")}]`);\n }\n\n if (typeof current.inner.value === \"object\" && current.inner.value !== null) {\n const value = (current.inner.value as { [key: string]: NestedValueElement })[property];\n return createProxy({\n inner: isVarRef(value) ? getVarRefInner(value) : { type: \"nested-value\", value },\n segments: [...current.segments, property],\n });\n }\n\n throw new Error(`Cannot access children of primitive value at path [${current.segments.join(\".\")}]`);\n },\n });\n\n ProxyInnerRegistry.set(proxy, { inner: current.inner, segments: current.segments });\n\n return proxy;\n};\n\n/**\n * Get the variable name from a VarRef at a specific path.\n *\n * @param varRef - The VarRef containing a nested-value\n * @param selector - Path builder function, e.g., p => p.user.age\n * @returns The variable name at the specified path\n * @throws If path doesn't lead to a VarRef with type \"variable\"\n *\n * @example\n * const ref = createVarRefFromNestedValue({\n * user: { age: someVariableRef }\n * });\n * getNameAt(ref, p => p.user.age); // returns the variable name\n */\nexport const getNameAt = <T extends AnyVarRefMeta, U>(\n varRef: VarRef<T>,\n selector: (proxy: TypeProfile.Type<T[\"profile\"]>) => U,\n): string => {\n const proxy = createProxy<TypeProfile.Type<T[\"profile\"]>>({ inner: VarRef.getInner(varRef), segments: [] });\n const selected = selector(proxy);\n const inner = getProxyInner(selected);\n\n if (inner.inner.type !== \"variable\") {\n throw new Error(`Value at path [${inner.segments.join(\".\")}] is not a variable`);\n }\n\n return inner.inner.name;\n};\n\n/**\n * Get the const value from a nested-value VarRef at a specific path.\n *\n * @param varRef - The VarRef containing a nested-value\n * @param pathFn - Path builder function, e.g., p => p.user.name\n * @returns The const value at the specified path\n * @throws If path leads to a VarRef or if value contains VarRef inside\n *\n * @example\n * const ref = createVarRefFromNestedValue({\n * user: { name: \"Alice\", age: someVariableRef }\n * });\n * getValueAt(ref, p => p.user.name); // returns \"Alice\"\n */\nexport const getValueAt = <T extends AnyVarRefMeta, U>(\n varRef: VarRef<T>,\n selector: (proxy: SelectableProxy<TypeProfile.Type<T[\"profile\"]>>) => U,\n): U => {\n const proxy = createProxy<TypeProfile.Type<T[\"profile\"]>>({ inner: VarRef.getInner(varRef), segments: [] });\n const selected = selector(proxy);\n const inner = getProxyInner(selected);\n\n if (inner.inner.type !== \"nested-value\") {\n throw new Error(`Value at path [${inner.segments.join(\".\")}] is not a nested-value`);\n }\n\n if (hasVarRefInside(inner.inner.value)) {\n throw new Error(`Value at path [${inner.segments.join(\".\")}] contains nested VarRef`);\n }\n\n return inner.inner.value as U;\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 === \"nested-value\") {\n // Recursively process the nested value\n // This handles VarRefs inside the nested structure\n return buildArgumentValue(inner.value as AnyAssignableInputValue);\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({\n * name: \"GetData\",\n * fields: ({ $ }) => $colocate({\n * userCard: userCardFragment.spread({ userId: $.userId }),\n * posts: postsFragment.spread({ 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 spread:\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","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 type {\n AnyFieldSelectionFactory,\n AnyFieldSelectionFactoryReturn,\n FieldSelectionFactories,\n FieldSelectionFactoryObjectReturn,\n FieldSelectionFactoryPrimitiveReturn,\n FieldSelectionFactoryUnionReturn,\n NestedObjectFieldsBuilder,\n 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, () => 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 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 * 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 spread: (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 spread() {\n return GqlElement.get(this).spread;\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 spread: (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","/**\n * Fragment usage context using shared value container pattern.\n *\n * This module tracks fragment usages during operation building,\n * allowing metadata from spread 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 spread 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 spread */\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.spread() 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 createVarRefFromNestedValue,\n createVarRefFromVariable,\n isVarRef,\n} from \"../types/fragment\";\nimport type { AnyGraphqlSchema, InferInputProfile } from \"../types/schema\";\nimport type { AnyVarRef, InputTypeSpecifiers, NestedValue } from \"../types/type-foundation\";\nimport { mapValues } from \"../utils/map-values\";\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 createVarRefFromNestedValue<InferInputProfile<TSchema, typeof _definition>>(undefined);\n }\n\n const provided = providedValues[varName];\n if (isVarRef(provided)) {\n return provided;\n }\n\n return createVarRefFromNestedValue<InferInputProfile<TSchema, typeof _definition>>(provided as NestedValue);\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 } 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 } 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 TFields extends AnyFields,\n TVarDefinitions extends InputTypeSpecifiers = {},\n >(options: {\n variables?: TVarDefinitions;\n metadata?: FragmentMetadataBuilder<ReturnType<typeof createVarRefs<TSchema, TVarDefinitions>>, TFragmentMetadata>;\n fields: FieldsBuilder<TSchema, TTypeName, TVarDefinitions, TFields>;\n }) => ReturnType<typeof Fragment.create<TSchema, TTypeName, TVarDefinitions, TFields>>;\n\n const createFragmentComposer = <TTypeName extends keyof TSchema[\"object\"] & string>(\n typename: TTypeName,\n ): FragmentBuilder<TTypeName> => {\n return <TFields extends AnyFields, TVarDefinitions extends InputTypeSpecifiers = {}>(options: {\n variables?: TVarDefinitions;\n metadata?: FragmentMetadataBuilder<AssigningInput<TSchema, TVarDefinitions>, TFragmentMetadata>;\n fields: FieldsBuilder<TSchema, TTypeName, TVarDefinitions, TFields>;\n }) => {\n const varDefinitions = (options.variables ?? {}) as TVarDefinitions;\n const { metadata, fields } = options;\n\n return Fragment.create<TSchema, TTypeName, TVarDefinitions, TFields>(() => ({\n typename,\n spread: (variables) => {\n const f = createFieldFactories(schema, typename);\n const $ = createVarAssignments<TSchema, TVarDefinitions>(varDefinitions, variables);\n\n recordFragmentUsage({\n metadataBuilder: metadata ? () => metadata({ $ }) : null,\n path: getCurrentFieldPath(),\n });\n\n return fields({ 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 spread 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 spread */\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 spread fragments in an operation.\n * Called with the metadata from each spread 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, 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 } 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 >(options: {\n name: TOperationName;\n variables?: TVarDefinitions;\n metadata?: MetadataBuilder<\n ReturnType<typeof createVarRefs<TSchema, TVarDefinitions>>,\n TOperationMetadata,\n TAggregatedFragmentMetadata,\n TSchemaLevel\n >;\n fields: FieldsBuilder<TSchema, TTypeName, TVarDefinitions, TFields>;\n }) => {\n return Operation.create<TSchema, TOperationType, TOperationName, TVarDefinitions, TFields>(() => {\n const { name: operationName } = options;\n const variables = (options.variables ?? {}) as TVarDefinitions;\n const $ = createVarRefs<TSchema, TVarDefinitions>(variables);\n const f = createFieldFactories(schema, operationTypeName);\n\n // Collect fragment usages during field building\n const { result: fields, usages: fragmentUsages } = withFragmentUsageCollection(() => options.fields({ f, $ }));\n\n const document = buildDocument<TSchema, TFields, TVarDefinitions>({\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 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 {\n AllInputTypeNames,\n AnyConstDirectiveAttachments,\n AnyGraphqlSchema,\n ConstAssignableInputValue,\n InferInputKind,\n} from \"../types/schema\";\nimport type { InputTypeKind, TypeModifier } from \"../types/type-foundation\";\nimport { getNameAt, getValueAt, getVarRefInner, getVarRefName, getVarRefValue } from \"../types/type-foundation/var-ref\";\nimport { wrapByKey } from \"../utils/wrap-by-key\";\n\n/**\n * Type for the default value function for a variable.\n */\ntype AssignableDefaultValue<\n TSchema extends AnyGraphqlSchema,\n TKind extends InputTypeKind,\n TName extends 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\n/**\n * Variable specifier type.\n */\nexport type VarSpecifier<\n TKind extends InputTypeKind,\n TTypeName extends string,\n TModifier extends TypeModifier,\n TDefaultFn extends (() => unknown) | 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/**\n * Creates a variable method for a specific input type.\n * This is used by codegen to generate type-specific variable methods.\n *\n * @deprecated Use createVarMethodFactory instead for proper type inference with nested input objects.\n */\nexport const createVarMethod = <TKind extends InputTypeKind, TTypeName extends string>(kind: TKind, typeName: TTypeName) => {\n return <\n TSchema extends AnyGraphqlSchema,\n const TModifier extends TypeModifier,\n const TDefaultFn extends (() => AssignableDefaultValue<TSchema, TKind, TTypeName, TModifier>) | null = null,\n const TDirectives extends AnyConstDirectiveAttachments = {},\n >(\n modifier: TModifier,\n extras?: {\n default?: TDefaultFn & (() => AssignableDefaultValue<TSchema, TKind, TTypeName, TModifier>);\n directives?: TDirectives;\n },\n ): VarSpecifier<TKind, TTypeName, TModifier, TDefaultFn, TDirectives> =>\n ({\n kind,\n name: typeName,\n modifier,\n defaultValue: extras?.default ? { default: extras.default() } : null,\n directives: extras?.directives ?? {},\n }) as VarSpecifier<TKind, TTypeName, TModifier, TDefaultFn, TDirectives>;\n};\n\n/**\n * Creates a factory function for generating schema-scoped variable methods.\n * This ensures proper type inference for nested input objects by binding the schema type upfront.\n *\n * @example\n * ```typescript\n * const createMethod = createVarMethodFactory<typeof schema>();\n * const inputTypeMethods = {\n * Boolean: createMethod(\"scalar\", \"Boolean\"),\n * user_bool_exp: createMethod(\"input\", \"user_bool_exp\"),\n * } satisfies InputTypeMethods<typeof schema>;\n * ```\n */\nexport const createVarMethodFactory = <TSchema extends AnyGraphqlSchema>() => {\n return <TKind extends InputTypeKind, TTypeName extends AllInputTypeNames<TSchema>>(\n kind: TKind,\n typeName: TTypeName,\n ): InputTypeMethod<TSchema, TKind, TTypeName> => {\n return ((modifier, extras) => ({\n kind,\n name: typeName,\n modifier,\n defaultValue: extras?.default ? { default: extras.default() } : null,\n directives: extras?.directives ?? {},\n })) as InputTypeMethod<TSchema, TKind, TTypeName>;\n };\n};\n\n/**\n * Type for a single input type method.\n */\nexport type InputTypeMethod<TSchema extends AnyGraphqlSchema, TKind extends InputTypeKind, TTypeName extends string> = <\n const TModifier extends TypeModifier,\n const TDefaultFn extends (() => AssignableDefaultValue<TSchema, TKind, TTypeName, TModifier>) | null = null,\n const TDirectives extends AnyConstDirectiveAttachments = {},\n>(\n modifier: TModifier,\n extras?: {\n default?: TDefaultFn & (() => AssignableDefaultValue<TSchema, TKind, TTypeName, TModifier>);\n directives?: TDirectives;\n },\n) => VarSpecifier<TKind, TTypeName, TModifier, TDefaultFn, TDirectives>;\n\n/**\n * Type for all input type methods in a schema.\n */\nexport type InputTypeMethods<TSchema extends AnyGraphqlSchema> = {\n [TName in AllInputTypeNames<TSchema>]: InputTypeMethod<TSchema, InferInputKind<TSchema, TName>, TName>;\n};\n\n/**\n * Type for a wrapped variable method that includes the variable name in the result.\n */\ntype WrappedVarMethod<\n TVarName extends string,\n TSchema extends AnyGraphqlSchema,\n TKind extends InputTypeKind,\n TTypeName extends string,\n> = <\n const TModifier extends TypeModifier,\n const TDefaultFn extends (() => AssignableDefaultValue<TSchema, TKind, TTypeName, TModifier>) | null = null,\n const TDirectives extends AnyConstDirectiveAttachments = {},\n>(\n modifier: TModifier,\n extras?: {\n default?: TDefaultFn & (() => AssignableDefaultValue<TSchema, TKind, TTypeName, TModifier>);\n directives?: TDirectives;\n },\n) => { [K in TVarName]: VarSpecifier<TKind, TTypeName, TModifier, TDefaultFn, TDirectives> };\n\n/**\n * Type for the variable builder methods for a specific variable name.\n */\nexport type VarBuilderMethods<TVarName extends string, TSchema extends AnyGraphqlSchema> = {\n [TName in AllInputTypeNames<TSchema>]: WrappedVarMethod<TVarName, TSchema, InferInputKind<TSchema, TName>, TName>;\n};\n\n/**\n * Type for the variable builder function.\n */\nexport type VarBuilder<TSchema extends AnyGraphqlSchema> = {\n <TVarName extends string>(varName: TVarName): VarBuilderMethods<TVarName, TSchema>;\n getName: typeof getVarRefName;\n getValue: typeof getVarRefValue;\n getInner: typeof getVarRefInner;\n getNameAt: typeof getNameAt;\n getValueAt: typeof getValueAt;\n};\n\n/**\n * Generic input type method that can be called with any modifier.\n */\ntype AnyInputTypeMethod = (\n modifier: TypeModifier,\n extras?: { default?: () => unknown; directives?: AnyConstDirectiveAttachments },\n) => unknown;\n\n/**\n * Creates a variable builder that uses injected input type methods.\n */\nexport const createVarBuilder = <TSchema extends AnyGraphqlSchema>(\n inputTypeMethods: InputTypeMethods<TSchema>,\n): VarBuilder<TSchema> => {\n const varBuilder = <TVarName extends string>(varName: TVarName): VarBuilderMethods<TVarName, TSchema> => {\n const wrappedMethods = {} as VarBuilderMethods<TVarName, TSchema>;\n\n for (const [typeName, method] of Object.entries(inputTypeMethods) as [string, AnyInputTypeMethod][]) {\n Object.defineProperty(wrappedMethods, typeName, {\n value: ((modifier, extras) => wrapByKey(varName, method(modifier, extras))) satisfies AnyInputTypeMethod,\n writable: false,\n configurable: true,\n });\n }\n\n return wrappedMethods;\n };\n\n varBuilder.getName = getVarRefName;\n varBuilder.getValue = getVarRefValue;\n varBuilder.getInner = getVarRefInner;\n varBuilder.getNameAt = getNameAt;\n varBuilder.getValueAt = getValueAt;\n\n return varBuilder as VarBuilder<TSchema>;\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, type InputTypeMethods } from \"./var-builder\";\n\nexport type GqlElementComposer<TContext> = <TResult extends AnyFragment | AnyOperation>(\n composeElement: (context: TContext) => 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<TSchema extends AnyGraphqlSchema, TAdapter extends AnyAdapter = DefaultAdapter> = {\n adapter?: TAdapter;\n inputTypeMethods: InputTypeMethods<TSchema>;\n};\n\nexport const createGqlElementComposer = <TSchema extends AnyGraphqlSchema, TAdapter extends AnyAdapter = DefaultAdapter>(\n schema: NoInfer<TSchema>,\n options: GqlElementComposerOptions<NoInfer<TSchema>, NoInfer<TAdapter>>,\n) => {\n type THelpers = ExtractHelpers<TAdapter>;\n type TMetadataAdapter = ExtractMetadataAdapter<TAdapter>;\n const { adapter, inputTypeMethods } = 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 context = {\n fragment,\n query: { operation: createOperationComposer(\"query\") },\n mutation: { operation: createOperationComposer(\"mutation\") },\n subscription: { operation: createOperationComposer(\"subscription\") },\n $var: createVarBuilder<TSchema>(inputTypeMethods),\n $colocate: createColocateHelper(),\n ...(helpers ?? ({} as THelpers)),\n };\n\n const elementComposer: GqlElementComposer<typeof context> = (composeElement) => composeElement(context);\n\n return elementComposer;\n};\n"],"mappings":";;;;AA+CA,IAAa,SAAb,MAAiD;CAG/C,YAAY,AAAiBA,OAAoB;EAApB;;CAE7B,OAAO,SAAS,QAAgC;AAC9C,SAAO,OAAO;;;AAIlB,MAAa,YAAY,UAAuC;AAC9D,QAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,iBAAiB;;;;;;AAOzE,MAAa,mBAAmB,UAAuC;AACrE,KAAI,SAAS,MAAM,CACjB,QAAO;AAGT,KAAI,MAAM,QAAQ,MAAM,CACtB,QAAO,MAAM,KAAK,gBAAgB;AAGpC,KAAI,OAAO,UAAU,YAAY,UAAU,KACzC,QAAO,OAAO,OAAO,MAAM,CAAC,KAAK,gBAAgB;AAGnD,QAAO;;AAGT,MAAa,4BAAmE,SAAiB;AAC/F,QAAO,IAAI,OAAkD;EAAE,MAAM;EAAY;EAAM,CAAC;;AAG1F,MAAa,+BAAsE,UAAuB;AACxG,QAAO,IAAI,OAAkD;EAAE,MAAM;EAAgB;EAAO,CAAC;;AAG/F,MAAa,kBAAkB,WAAmC;AAChE,QAAO,OAAO,SAAS,OAAO;;;;;;AAOhC,MAAa,iBAAiB,WAA8B;CAC1D,MAAM,QAAQ,OAAO,SAAS,OAAO;AACrC,KAAI,MAAM,SAAS,WACjB,OAAM,IAAI,MAAM,gDAAgD;AAElE,QAAO,MAAM;;;;;;;AAQf,MAAa,kBAAkB,WAAkC;CAC/D,MAAM,QAAQ,OAAO,SAAS,OAAO;AACrC,KAAI,MAAM,SAAS,eACjB,OAAM,IAAI,MAAM,gDAAgD;AAElE,KAAI,gBAAgB,MAAM,MAAM,CAC9B,OAAM,IAAI,MAAM,uDAAuD;AAEzE,QAAO,MAAM;;AA4Bf,MAAM,qCAAqB,IAAI,SAA0B;AACzD,MAAM,iBAAiB,UAA2B;CAChD,MAAM,QAAQ,mBAAmB,IAAI,MAAM;AAC3C,KAAI,CAAC,MACH,OAAM,IAAI,MAAM,wBAAwB;AAE1C,QAAO;;AAGT,MAAM,eAAkB,YAA2B;CACjD,MAAMC,QAAW,IAAI,MAAM,OAAO,OAAO,KAAK,EAAE,EAC9C,IAAI,GAAG,UAAU;AACf,MAAI,OAAO,aAAa,SACtB,OAAM,IAAI,MAAM,+BAA+B,OAAO,SAAS,GAAG;AAGpE,MAAI,QAAQ,MAAM,SAAS,WACzB,OAAM,IAAI,MAAM,+CAA+C,QAAQ,SAAS,KAAK,IAAI,CAAC,GAAG;AAG/F,MAAI,OAAO,QAAQ,MAAM,UAAU,YAAY,QAAQ,MAAM,UAAU,MAAM;GAC3E,MAAM,QAAS,QAAQ,MAAM,MAAgD;AAC7E,UAAO,YAAY;IACjB,OAAO,SAAS,MAAM,GAAG,eAAe,MAAM,GAAG;KAAE,MAAM;KAAgB;KAAO;IAChF,UAAU,CAAC,GAAG,QAAQ,UAAU,SAAS;IAC1C,CAAC;;AAGJ,QAAM,IAAI,MAAM,sDAAsD,QAAQ,SAAS,KAAK,IAAI,CAAC,GAAG;IAEvG,CAAC;AAEF,oBAAmB,IAAI,OAAO;EAAE,OAAO,QAAQ;EAAO,UAAU,QAAQ;EAAU,CAAC;AAEnF,QAAO;;;;;;;;;;;;;;;;AAiBT,MAAa,aACX,QACA,aACW;CAGX,MAAM,QAAQ,cADG,SADH,YAA4C;EAAE,OAAO,OAAO,SAAS,OAAO;EAAE,UAAU,EAAE;EAAE,CAAC,CAC3E,CACK;AAErC,KAAI,MAAM,MAAM,SAAS,WACvB,OAAM,IAAI,MAAM,kBAAkB,MAAM,SAAS,KAAK,IAAI,CAAC,qBAAqB;AAGlF,QAAO,MAAM,MAAM;;;;;;;;;;;;;;;;AAiBrB,MAAa,cACX,QACA,aACM;CAGN,MAAM,QAAQ,cADG,SADH,YAA4C;EAAE,OAAO,OAAO,SAAS,OAAO;EAAE,UAAU,EAAE;EAAE,CAAC,CAC3E,CACK;AAErC,KAAI,MAAM,MAAM,SAAS,eACvB,OAAM,IAAI,MAAM,kBAAkB,MAAM,SAAS,KAAK,IAAI,CAAC,yBAAyB;AAGtF,KAAI,gBAAgB,MAAM,MAAM,MAAM,CACpC,OAAM,IAAI,MAAM,kBAAkB,MAAM,SAAS,KAAK,IAAI,CAAC,0BAA0B;AAGvF,QAAO,MAAM,MAAM;;;;;ACvNrB,MAAa,sBAAsB,UAAqD;AACtF,KAAI,UAAU,OACZ,QAAO;AAGT,KAAI,UAAU,KACZ,QAAO,EACL,MAAM,KAAK,MACZ;AAGH,KAAI,iBAAiB,QAAQ;EAC3B,MAAM,QAAQ,OAAO,SAAS,MAAM;AACpC,MAAI,MAAM,SAAS,WACjB,QAAO;GACL,MAAM,KAAK;GACX,MAAM;IAAE,MAAM,KAAK;IAAM,OAAO,MAAM;IAAM;GAC7C;AAGH,MAAI,MAAM,SAAS,eAGjB,QAAO,mBAAmB,MAAM,MAAiC;AAGnE,QAAM,IAAI,MAAM,yBAAyB,QAAwB;;AAGnE,KAAI,MAAM,QAAQ,MAAM,CACtB,QAAO;EACL,MAAM,KAAK;EACX,QAAQ,MAAM,KAAK,SAAS,mBAAmB,KAAK,CAAC,CAAC,QAAQ,SAAS,SAAS,KAAK;EACtF;AAGH,KAAI,OAAO,UAAU,SACnB,QAAO;EACL,MAAM,KAAK;EACX,QAAQ,OAAO,QAAQ,MAAM,CAC1B,KAAK,CAAC,KAAKC,aAAmC;GAC7C,MAAM,YAAY,mBAAmBA,QAAM;AAC3C,UAAO,YACH;IACE,MAAM,KAAK;IACX,MAAM;KAAE,MAAM,KAAK;KAAM,OAAO;KAAK;IACrC,OAAO;IACR,GACD;IACJ,CACD,QAAQ,SAAS,SAAS,KAAK;EACnC;AAGH,KAAI,OAAO,UAAU,SACnB,QAAO;EACL,MAAM,KAAK;EACX;EACD;AAGH,KAAI,OAAO,UAAU,SAGnB,QAAO;EACL,MAFc,CAAC,OAAO,UAAU,MAAM,IAAI,MAAM,UAAU,CAAC,SAAS,IAAI,GAExD,KAAK,QAAQ,KAAK;EAClC,OAAO,MAAM,UAAU;EACxB;AAGH,KAAI,OAAO,UAAU,UACnB,QAAO;EACL,MAAM,KAAK;EACX;EACD;AAGH,OAAM,IAAI,MAAM,uBAAuB,OAAQ,QAAyB;;AAG1E,MAAM,kBAAkB,SACtB,OAAO,QAAQ,QAAQ,EAAE,CAAC,CACvB,KAAK,CAAC,MAAM,WAAgC;CAC3C,MAAM,YAAY,mBAAmB,MAAM;AAC3C,QAAO,YACH;EACE,MAAM,KAAK;EACX,MAAM;GAAE,MAAM,KAAK;GAAM,OAAO;GAAM;EACtC,OAAO;EACR,GACD;EACJ,CACD,QAAQ,SAAS,SAAS,KAAK;AAEpC,MAAM,uBAAuB,UAC3B,OAAO,QAAQ,MAAM,CAClB,KAAK,CAAC,UAAU,YAAuC;AACtD,QAAO,SACH;EACE,MAAM,KAAK;EACX,eAAe;GACb,MAAM,KAAK;GACX,MAAM;IAAE,MAAM,KAAK;IAAM,OAAO;IAAU;GAC3C;EACD,cAAc;GACZ,MAAM,KAAK;GACX,YAAY,WAAW,OAAO;GAC/B;EACF,GACD;EACJ,CACD,QAAQ,SAAS,SAAS,KAAK;AAEpC,MAAM,cAAc,UAClB,OAAO,QAAQ,MAAM,CAAC,KACnB,CAAC,OAAO,EAAE,MAAM,gBAAO,QAAQ,cAAyB;CACvD,MAAM,KAAK;CACX,MAAM;EAAE,MAAM,KAAK;EAAM,OAAOC;EAAO;CACvC,OAAO,UAAUA,UAAQ;EAAE,MAAM,KAAK;EAAM,OAAO;EAAO,GAAG;CAC7D,WAAW,eAAe,KAAK;CAC/B,cAAc,SACV;EACE,MAAM,KAAK;EACX,YAAY,WAAW,OAAO;EAC/B,GACD,QACE;EACE,MAAM,KAAK;EACX,YAAY,oBAAoB,MAAM;EACvC,GACD;CACP,EACF;AAEH,MAAa,uBAAuB,UAA6C;AAC/E,KAAI,UAAU,OACZ,QAAO;AAGT,KAAI,UAAU,KACZ,QAAO,EAAE,MAAM,KAAK,MAAM;AAG5B,KAAI,OAAO,UAAU,SACnB,QAAO;EAAE,MAAM,KAAK;EAAQ;EAAO;AAGrC,KAAI,OAAO,UAAU,UACnB,QAAO;EAAE,MAAM,KAAK;EAAS;EAAO;AAGtC,KAAI,OAAO,UAAU,SAGnB,QAAO;EAAE,MADO,CAAC,OAAO,UAAU,MAAM,IAAI,MAAM,UAAU,CAAC,SAAS,IAAI,GACjD,KAAK,QAAQ,KAAK;EAAK,OAAO,MAAM,UAAU;EAAE;AAG3E,KAAI,MAAM,QAAQ,MAAM,CACtB,QAAO;EACL,MAAM,KAAK;EACX,QAAQ,MAAM,KAAK,SAAS,oBAAoB,KAAK,CAAC,CAAC,QAAQ,SAAS,SAAS,KAAK;EACvF;AAGH,KAAI,OAAO,UAAU,SACnB,QAAO;EACL,MAAM,KAAK;EACX,QAAQ,OAAO,QAAQ,MAAM,CAC1B,KAAK,CAAC,KAAKD,aAAwC;GAClD,MAAM,YAAY,oBAAoBA,QAAM;AAC5C,UAAO,YACH;IACE,MAAM,KAAK;IACX,MAAM;KAAE,MAAM,KAAK;KAAM,OAAO;KAAK;IACrC,OAAO;IACR,GACD;IACJ,CACD,QAAQ,SAAS,SAAS,KAAK;EACnC;AAGH,OAAM,IAAI,MAAM,uBAAuB,OAAQ,QAAyB;;AAG1E,MAAa,yBAAyB,UAAwB,cAA6C;CACzG,MAAM,WAAW,WAAW;AAE5B,KAAI,aAAa,IACf,QAAO;AAGT,KAAI,aAAa,IACf,QAAO;EAAE,MAAM,KAAK;EAAe,MAAM;EAAU;AAMrD,KAAI,CADyB,oBACH,KAAK,SAAS,CACtC,OAAM,IAAI,MAAM,qBAAqB,WAAW;CAKlD,IAAIE,OAAuD;EACzD;EACA,MAAM;EACP;AAED,QAAO,KAAK,SAAS,SAAS,GAAG;AAE/B,MAAI,KAAK,SAAS,WAAW,IAAI,EAAE;AAEjC,UAAO;IACL,UAAU,KAAK,SAAS,MAAM,EAAE;IAChC,MAAM,KAAK;IACZ;AACD;;AAGF,MAAI,KAAK,SAAS,WAAW,IAAI,EAAE;AAEjC,UAAO;IACL,UAAU,KAAK,SAAS,MAAM,EAAE;IAChC,MAAM,KAAK,KAAK,SAAS,KAAK,gBAAgB,KAAK,OAAO;KAAE,MAAM,KAAK;KAAe,MAAM,KAAK;KAAM;IACxG;AACD;;AAIF,MAAI,KAAK,SAAS,WAAW,MAAM,EAAE;AAEnC,UAAO;IACL,UAAU,KAAK,SAAS,MAAM,EAAE;IAChC,MAAM;KAAE,MAAM,KAAK;KAAW,MAAM,KAAK;KAAM;IAChD;AACD;;AAGF,MAAI,KAAK,SAAS,WAAW,MAAM,EAAE;AAEnC,UAAO;IACL,UAAU,KAAK,SAAS,MAAM,EAAE;IAChC,MAAM;KACJ,MAAM,KAAK;KACX,MAAM;MAAE,MAAM,KAAK;MAAW,MAAM,KAAK;MAAM;KAChD;IACF;AACD;;AAGF,QAAM,IAAI,MAAM,qBAAqB,KAAK,WAAW;;AAGvD,QAAO,KAAK;;AAGd,MAAM,kBAAkB,cAA6D;AACnF,QAAO,OAAO,QAAQ,UAAU,CAAC,KAC9B,CAAC,MAAM,UAAkC;EACxC,MAAM,KAAK;EACX,UAAU;GAAE,MAAM,KAAK;GAAU,MAAM;IAAE,MAAM,KAAK;IAAM,OAAO;IAAM;GAAE;EACzE,cAAe,IAAI,gBAAgB,oBAAoB,IAAI,aAAa,QAAQ,IAAK;EACrF,MAAM,sBAAsB,IAAI,iBAAiB;GAC/C,MAAM,KAAK;GACX,MAAM;IAAE,MAAM,KAAK;IAAM,OAAO,IAAI;IAAM;GAC3C,EAAE;EACJ,EACF;;AAGH,MAAa,0BAA0B,cAAgD;AACrF,SAAQ,WAAR;EACE,KAAK,QACH,QAAO,kBAAkB;EAC3B,KAAK,WACH,QAAO,kBAAkB;EAC3B,KAAK,eACH,QAAO,kBAAkB;EAC3B,QACE,OAAM,IAAI,MAAM,2BAA2B,YAAY;;;AAK7D,MAAa,iBAIX,YAKsG;CACtG,MAAM,EAAE,eAAe,eAAe,WAAW,WAAW;AAC5D,QAAO;EACL,MAAM,KAAK;EACX,aAAa,CACX;GACE,MAAM,KAAK;GACX,WAAW,uBAAuB,cAAc;GAChD,MAAM;IAAE,MAAM,KAAK;IAAM,OAAO;IAAe;GAC/C,qBAAqB,eAAe,UAAU;GAE9C,cAAc;IACZ,MAAM,KAAK;IACX,YAAY,WAAW,OAAO;IAC/B;GACF,CACF;EACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjSH,MAAa,6BAA6B;;;;;;;CAOxC,MAAM,aAAgD,YACpD,OAAO,YACL,OAAO,QAAQ,QAAQ,CAAC,SAAS,CAAC,OAAO,YACvC,OAAO,QAAQ,OAAO,CAAC,KAAK,CAAC,KAAK,WAAW,CAAC,GAAG,MAAM,GAAG,OAAO,MAAM,CAAU,CAClF,CACF;AAEH,QAAO;;;;;;;;;AC9BT,MAAMC,mBAAkD,EACtD,SAAS,MACV;;;;;;;;;;;;;;AAeD,MAAa,4BAA8C,iBAAiB;;;;;;;AAQ5E,MAAa,iBAAoB,MAAiB,OAAmB;CACnE,MAAM,eAAe,iBAAiB;AACtC,kBAAiB,UAAU;AAC3B,KAAI;AACF,SAAO,IAAI;WACH;AACR,mBAAiB,UAAU;;;;;;;;AAS/B,MAAa,gBACX,QACA,YACc;CACd,MAAM,aAAa,QAAQ,SAAS,OAAO;CAC3C,MAAMC,aAA+B;EACnC,OAAO,QAAQ;EACf,QAAQ,QAAQ;EAChB,QAAQ,QAAQ;EACjB;AAED,KAAI,CAAC,OACH,QAAO;EACL,MAAM,KAAK,QAAQ,QAAQ;EAC3B,UAAU,CAAC,WAAW;EACvB;AAGH,QAAO;EACL,MAAM,GAAG,OAAO,KAAK,GAAG,QAAQ,QAAQ;EACxC,UAAU,CAAC,GAAG,OAAO,UAAU,WAAW;EAC3C;;;;;;;;AASH,MAAa,cAAc,eAAgC;AACzD,QAAO,WAAW,SAAS,KAAK;;;;;ACtGlC,SAAgB,UACd,KACA,IAGA;AACA,QAAO,OAAO,YAAa,OAAO,QAAQ,IAAI,CAAwB,KAAK,CAAC,KAAK,WAAW,CAAC,KAAK,GAAG,OAAO,IAAI,CAAC,CAAC,CAAC;;;;;ACiBrH,MAAM,mCAAmB,IAAI,SAAqC;AAClE,MAAM,0BAA0B,WAA6B;CAC3D,MAAM,iBAAiB,iBAAiB,IAAI,OAAO;AACnD,KAAI,eACF,QAAO;CAGT,MAAMC,2BAAqB,IAAI,KAAK;AACpC,kBAAiB,IAAI,QAAQ,SAAS;AACtC,QAAO;;AAGT,MAAa,wBACX,QACA,aACgD;CAChD,MAAM,WAAW,uBAAuB,OAAO;CAC/C,MAAM,SAAS,SAAS,IAAI,SAAS;AACrC,KAAI,OACF,QAAO;CAGT,MAAM,YAAY,0BAA0B,QAAQ,SAAS;AAC7D,UAAS,IAAI,UAAU,UAAiE;AAExF,QAAO;;AAGT,MAAM,6BACJ,QACA,aACgD;CAChD,MAAM,UAAU,OAAO,OAAO;AAC9B,KAAI,CAAC,QACH,OAAM,IAAI,MAAM,QAAQ,SAAS,mCAAmC;CAGtE,MAAM,UAAU,OAAO,QAAQ,QAAQ,OAAO,CAAC,KAAK,CAAC,WAAW,UAA8C;EAC5G,MAAMC,WACJ,WACA,WACG;GACH,MAAM,QAAW,UAAa,UAAW,QAAQ,SAAS,WAAqD,MAAM;AAErH,OAAI,KAAK,SAAS,UAAU;IAE1B,MAAMC,kBACJ,SACG;KAUH,MAAM,eAAe,cAPL,aADI,qBAAqB,EACC;MACxC,OAAO;MACP,YAAY;MACZ,QAAQ,WAAW,KAAK,SAAS;MAClC,CAAC,QAGgD,KAAK,EAAE,GAAG,qBAAqB,QAAQ,KAAK,KAAK,EAAE,CAAC,CAAC;AAEvG,YAAO,KAAK;MACV,QAAQ;MACR,OAAO;MACD;MACN,MAAM,aAAa,EAAE;MACrB,YAAY,QAAQ,cAAc,EAAE;MACpC,QAAQ;MACR,OAAO;MACR,CAA6B;;AAGhC,WAAO;;AAGT,OAAI,KAAK,SAAS,SAAS;IAEzB,MAAMA,kBACJ,SACG;KAUH,MAAM,cAAc,cAPJ,aADI,qBAAqB,EACC;MACxC,OAAO;MACP,YAAY;MACZ,QAAQ,WAAW,KAAK,SAAS;MAClC,CAAC,QAIA,UACE,OACC,SAAS,eAAe;AACvB,UAAI,CAAC,QACH,OAAM,IAAI,MAAM,yCAAyC,aAAa;AAExE,aAAO,QAAQ,EAAE,GAAG,qBAAqB,QAAQ,WAAW,EAAE,CAAC;OAElE,CACF;AAED,YAAO,KAAK;MACV,QAAQ;MACR,OAAO;MACD;MACN,MAAM,aAAa,EAAE;MACrB,YAAY,QAAQ,cAAc,EAAE;MACpC,QAAQ;MACR,OAAO;MACR,CAA6B;;AAGhC,WAAO;;AAGT,OAAI,KAAK,SAAS,YAAY,KAAK,SAAS,UAAU,KAAK,SAAS,WAWlE,QAT8D,KAAK;IACjE,QAAQ;IACR,OAAO;IACP;IACA,MAAM,aAAa,EAAE;IACrB,YAAY,QAAQ,cAAc,EAAE;IACpC,QAAQ;IACR,OAAO;IACR,CAA6B;AAIhC,SAAM,IAAI,MAAM,2BAA2B,OAAuB;;AAGpE,SAAO,CAAC,WAAW,QAAQ;GAC3B;AAIF,QAF4D,OAAO,YAAY,QAAQ;;;;;;;;;;;;;ACjIzF,MAAa,uBACX,UACA,SACA,uBAC6B;CAC7B,IAAIC,QAA6B;CACjC,IAAIC,UAAgC;AAEpC,QAAO,UAAU,QAAQ,SAAyE;AAChG,MAAI,MACF,QAAO,MAAM;AAGf,MAAI,SAAS;AACX,SAAM;AAEN,UAAO,MAAO;;AAGhB,MAAI,QAMF,MAAK,MAAM,OAAO,SAAS,CACzB,QAAO,mBAAmB,IAAI;EAIlC,MAAM,UAAUC,SAAO,QAAQ;AAC/B,MAAI,EAAE,mBAAmB,SACvB,SAAQ,QAAQ,EAAE,OAAO,SAAS,EAAE;AAKtC,YAAU,QAAQ,MAAM,UAAU;AAChC,WAAQ,EAAE,OAAO;AACjB,aAAU;IACV;AAEF,QAAM;AAEN,SAAO,MAAO;;;;;;;AAQlB,UAAiB,0BACf,UACA,SACsC;AACtC,QAAO,SAAS,QAAQ;;;;;;AAO1B,MAAa,gBAAmB,UAAoC,YAA4C;CAC9G,MAAM,SAAS,SAAS,QAAQ,CAAC,MAAM;AAEvC,KAAI,CAAC,OAAO,KACV,OAAM,IAAI,MAAM,uDAAuD;AAGzE,QAAO,OAAO;;;;;AC7FhB,MAAM,sBAAsB,OAAO,sBAAsB;AACzD,MAAM,sBAAsB,OAAO,sBAAsB;AAWzD,IAAsB,aAAtB,MAAsB,WAA8D;CAGlF,CAAS;CACT,CAAS,uBAAiD;CAE1D,AAAU,YAAY,UAAkD,SAAwC;AAC9G,OAAK,uBAAuB,oBAAoBC,UAAQ,SAAS,WAAW,0BAA0B;AAEtG,SAAO,eAAe,MAAM,UAAU,EACpC,MAAM;AACJ,SAAM,IAAI,MAAM,6EAA6E;KAEhG,CAAC;;CAGJ,AAAO,OAAoD,YAAuD;EAChH,IAAIC,QAAuB;AAE3B,SAAO,eAAe,MAAM,WAAW,MAAM,EAC3C,MAAM;AACJ,OAAI,MACF,QAAO;AAGT,cAAW,kBAAkB,KAAK;AAElC,UAAQ,QAAQ,WAAW,YAAY,KAAK;KAE/C,CAAC;AAEF,SAAO;;CAGT,OAAO,WAAkD,SAAmB,SAAkC;AAC5G,UAAQ,uBAAuB;;CAGjC,OAAO,0BAA0B,SAAqE;AACpG,SAAOC,0BAA8B,QAAQ,sBAAsB,QAAQ,qBAAqB;;CAGlG,OAAe,kBAAyC,SAA0C;AAChG,SAAOC,aAAiB,QAAQ,sBAAsB,QAAQ,qBAAqB;;CAGrF,OAAO,aAAa,SAAqC;AACvD,EAAK,WAAW,kBAAkB,QAAQ;;CAG5C,OAAO,IAA2B,SAA0C;AAC1E,SAAO,WAAW,kBAAkB,QAAQ;;;;;;AC9ChD,IAAa,WAAb,MAAa,iBAMH,WAEV;CAGE,AAAQ,YAAY,UAAgE;AAClF,QAAMC,SAAO;;CAGf,IAAW,WAAW;AACpB,SAAO,WAAW,IAAI,KAAK,CAAC;;CAE9B,IAAW,SAAS;AAClB,SAAO,WAAW,IAAI,KAAK,CAAC;;CAG9B,OAAO,OAML,UAIA;AAKA,SAAO,IAAI,SAA+CA,SAA+D;;;;;;ACvB7H,IAAa,YAAb,MAAa,kBAQH,WAKV;CAGE,AAAQ,YACN,UAKA;AACA,QAAMC,SAAO;;CAGf,IAAW,gBAAgB;AACzB,SAAO,WAAW,IAAI,KAAK,CAAC;;CAE9B,IAAW,gBAAgB;AACzB,SAAO,WAAW,IAAI,KAAK,CAAC;;CAE9B,IAAW,gBAAgB;AACzB,SAAO,WAAW,IAAI,KAAK,CAAC;;CAE9B,IAAW,iBAAiB;AAC1B,SAAO,WAAW,IAAI,KAAK,CAAC;;CAE9B,IAAW,WAAW;AACpB,SAAO,WAAW,IAAI,KAAK,CAAC;;CAE9B,IAAW,WAAW;AACpB,SAAO,WAAW,IAAI,KAAK,CAAC;;CAG9B,OAAO,OAOL,UAiBA;AACA,SAAO,IAAI,UAAUA,SAAO;;;;;;;;;;AClFhC,MAAMC,uBAAkE,EACtE,SAAS,MACV;;;;;;;AAQD,MAAa,+BAAkC,OAA8D;CAC3G,MAAM,oBAAoB,qBAAqB;CAC/C,MAAMC,SAAgC,EAAE;AACxC,sBAAqB,UAAU;AAC/B,KAAI;AAEF,SAAO;GAAE,QADM,IAAI;GACF;GAAQ;WACjB;AACR,uBAAqB,UAAU;;;;;;;;;AAUnC,MAAa,uBAAuB,WAAsC;AACxE,KAAI,qBAAqB,QACvB,sBAAqB,QAAQ,KAAK,OAAO;;;;;AC9C7C,MAAa,wBACX,aACA,mBACkD;AAClD,QAAO,UAAU,cAAc,aAAa,QAAmB;EAC7D,MAAM,UAAU;AAChB,MAAI,CAAC,kBAAkB,eAAe,aAAa,OACjD,QAAO,4BAA4E,OAAU;EAG/F,MAAM,WAAW,eAAe;AAChC,MAAI,SAAS,SAAS,CACpB,QAAO;AAGT,SAAO,4BAA4E,SAAwB;GAC3G;;AAGJ,MAAa,iBACX,gBAEA,UAAU,cAAqC,MAAM,SACnD,yBAAkE,KAAK,CACxE;;;;ACxBH,MAAa,8BAIX,QACA,aACG;CAYH,MAAM,0BACJ,aAC+B;AAC/B,UAAqF,YAI/E;GACJ,MAAM,iBAAkB,QAAQ,aAAa,EAAE;GAC/C,MAAM,EAAE,UAAU,WAAW;AAE7B,UAAO,SAAS,cAA4D;IAC1E;IACA,SAAS,cAAc;KACrB,MAAM,IAAI,qBAAqB,QAAQ,SAAS;KAChD,MAAM,IAAI,qBAA+C,gBAAgB,UAAU;AAEnF,yBAAoB;MAClB,iBAAiB,iBAAiB,SAAS,EAAE,GAAG,CAAC,GAAG;MACpD,MAAM,qBAAqB;MAC5B,CAAC;AAEF,YAAO,OAAO;MAAE;MAAG;MAAG,CAAC;;IAE1B,EAAE;;;AAYP,QAAO,UAAU,OAAO,SAAS,GAAG,aAAa,uBAAuB,SAAS,CAAC;;;;;;;;;ACiEpF,MAAa,8BAAsD,EACjE,4BAA4B,cAAc,UAAU,KAAK,MAAM,EAAE,SAAS,EAC3E;;;;AAKD,MAAaC,yBAAiD,sBAAsB;;;;ACvHpF,MAAa,kCAIX,QACA,YACG;CACH,MAAM,kBAAkB,WAAY;AAMpC,SAA8C,kBAAkC;EAE9E,MAAMC,oBAAsC,OAAO,WAAW;AAC9D,MAAI,sBAAsB,KACxB,OAAM,IAAI,MAAM,kBAAkB,cAAc,iCAAiC;AAGnF,UAKE,YAUI;AACJ,UAAO,UAAU,aAAgF;IAC/F,MAAM,EAAE,MAAM,kBAAkB;IAChC,MAAM,YAAa,QAAQ,aAAa,EAAE;IAC1C,MAAM,IAAI,cAAwC,UAAU;IAC5D,MAAM,IAAI,qBAAqB,QAAQ,kBAAkB;IAGzD,MAAM,EAAE,QAAQ,QAAQ,QAAQ,mBAAmB,kCAAkC,QAAQ,OAAO;KAAE;KAAG;KAAG,CAAC,CAAC;IAE9G,MAAM,WAAW,cAAiD;KAChE;KACA;KACA;KACA;KACD,CAAC;IAEF,MAAM,oBAAoB,cAA8C;KACtE;KACA;KACA,eAAe,OAAO,KAAK,UAAU;KACrC,sBAAsB;KACtB;KACA;KACD;AAKD,QAAI,CAFwB,eAAe,MAAM,MAAM,EAAE,gBAAgB,IAE7C,CAAC,QAAQ,SAEnC,QAAO,iBAAiB,OAAU;IAIpC,MAAMC,0BAA0F,eAAe,KAC5G,UAAW,MAAM,kBAAkB,MAAM,iBAAiB,GAAG,OAC/D;IAGD,MAAM,2BAA2B,wBAAwB,MAAM,MAAM,aAAa,QAAQ;IAG1F,MAAM,0BACJ,6BAC6E;KAE7E,MAAMC,oBAA2D,eAAe,KAAK,OAAO,WAAW;MACrG,UAAU,yBAAyB;MACnC,WAAW,MAAM;MAClB,EAAE;KAGH,MAAM,6BAA6B,gBAAgB,0BACjD,kBACD;KAGD,MAAM,cAAc,gBAAgB;AACpC,YAAO,QAAQ,WAAW;MAAE;MAAG;MAAU,kBAAkB;MAA4B;MAAa,CAAC;;AAGvG,QAAI,yBAEF,QAAO,QAAQ,IAAI,wBAAwB,CAAC,KAAK,OAAO,6BAA6B;AAEnF,YAAO,iBADmB,MAAM,uBAAuB,yBAAyB,CACtC;MAC1C;IAKJ,MAAM,0BAA0B,uBADH,wBAC+C;AAE5E,QAAI,mCAAmC,QACrC,QAAO,wBAAwB,KAAK,iBAAiB;AAGvD,WAAO,iBAAiB,wBAAwB;KAChD;;;;;;;;;;;;;AC7ER,MAAa,mBAA0E,MAAa,aAAwB;AAC1H,SAME,UACA,YAKC;EACC;EACA,MAAM;EACN;EACA,cAAc,QAAQ,UAAU,EAAE,SAAS,OAAO,SAAS,EAAE,GAAG;EAChE,YAAY,QAAQ,cAAc,EAAE;EACrC;;;;;;;;;;;;;;;AAgBL,MAAa,+BAAiE;AAC5E,SACE,MACA,aAC+C;AAC/C,WAAS,UAAU,YAAY;GAC7B;GACA,MAAM;GACN;GACA,cAAc,QAAQ,UAAU,EAAE,SAAS,OAAO,SAAS,EAAE,GAAG;GAChE,YAAY,QAAQ,cAAc,EAAE;GACrC;;;;;;AA4EL,MAAa,oBACX,qBACwB;CACxB,MAAM,cAAuC,YAA4D;EACvG,MAAM,iBAAiB,EAAE;AAEzB,OAAK,MAAM,CAAC,UAAU,WAAW,OAAO,QAAQ,iBAAiB,CAC/D,QAAO,eAAe,gBAAgB,UAAU;GAC9C,SAAS,UAAU,WAAW,UAAU,SAAS,OAAO,UAAU,OAAO,CAAC;GAC1E,UAAU;GACV,cAAc;GACf,CAAC;AAGJ,SAAO;;AAGT,YAAW,UAAU;AACrB,YAAW,WAAW;AACtB,YAAW,WAAW;AACtB,YAAW,YAAY;AACvB,YAAW,aAAa;AAExB,QAAO;;;;;ACtKT,MAAa,4BACX,QACA,YACG;CAGH,MAAM,EAAE,SAAS,qBAAqB;CACtC,MAAM,UAAU,SAAS;CACzB,MAAM,kBAAkB,SAAS;CACjC,MAAM,WAAW,2BAAsD,QAAQ,gBAAgB;CAC/F,MAAM,0BAA0B,+BAA0D,QAAQ,gBAAgB;CAIlH,MAAM,UAAU;EACd;EACA,OAAO,EAAE,WAAW,wBAAwB,QAAQ,EAAE;EACtD,UAAU,EAAE,WAAW,wBAAwB,WAAW,EAAE;EAC5D,cAAc,EAAE,WAAW,wBAAwB,eAAe,EAAE;EACpE,MAAM,iBAA0B,iBAAiB;EACjD,WAAW,sBAAsB;EACjC,GAAI,WAAY,EAAE;EACnB;CAED,MAAMC,mBAAuD,mBAAmB,eAAe,QAAQ;AAEvG,QAAO"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["inner: VarRefInner","proxy: T","value","field","curr: Readonly<{ modifier: string; type: TypeNode }>","fieldPathContext: { current: FieldPath | null }","newSegment: FieldPathSegment","cacheMap: CacheMap","factory: AnyFieldSelectionFactory","factoryReturn: AnyFieldSelectionFactoryReturn<TAlias>","cache: { value: T } | null","promise: Promise<void> | null","define","define","cache: TValue | null","lazyCreateEvaluationGenerator","lazyEvaluateSync","define","define","fragmentUsageContext: { current: FragmentUsageRecord[] | null }","usages: FragmentUsageRecord[]","defaultMetadataAdapter: DefaultMetadataAdapter","operationTypeName: TTypeName | null","fragmentMetadataResults: (TFragmentMetadata | undefined | Promise<TFragmentMetadata>)[]","fragmentMetaInfos: FragmentMetaInfo<TFragmentMetadata>[]","elementComposer: GqlElementComposer<typeof context>"],"sources":["../src/types/type-foundation/var-ref.ts","../src/composer/build-document.ts","../src/composer/colocate.ts","../src/composer/field-path-context.ts","../src/utils/map-values.ts","../src/composer/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/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.WithMeta;\n readonly signature: unknown;\n}\n\n/**\n * A nested value that can contain:\n * - Primitive ConstValue (string, number, boolean, null, undefined)\n * - VarRef at any nesting level\n * - Objects with NestedValue fields\n * - Arrays of NestedValue\n */\nexport type NestedValue =\n | string\n | number\n | boolean\n | null\n | undefined\n | { readonly [key: string]: NestedValueElement }\n | readonly NestedValueElement[];\n\ntype NestedValueElement =\n | string\n | number\n | boolean\n | null\n | undefined\n | AnyVarRef\n | { readonly [key: string]: NestedValueElement }\n | readonly NestedValueElement[];\n\nexport type VarRefInner =\n | {\n type: \"variable\";\n name: string;\n }\n | {\n type: \"nested-value\";\n value: NestedValue;\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\n/**\n * Recursively checks if a NestedValue contains any VarRef.\n * Used by getVarRefValue to determine if it's safe to return as ConstValue.\n */\nexport const hasVarRefInside = (value: NestedValueElement): boolean => {\n if (isVarRef(value)) {\n return true;\n }\n\n if (Array.isArray(value)) {\n return value.some(hasVarRefInside);\n }\n\n if (typeof value === \"object\" && value !== null) {\n return Object.values(value).some(hasVarRefInside);\n }\n\n return false;\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 createVarRefFromNestedValue = <TProfile extends TypeProfile.WithMeta>(value: NestedValue) => {\n return new VarRef<TypeProfile.AssigningVarRefMeta<TProfile>>({ type: \"nested-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 nested-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 nested-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 nested-value,\n * or if the nested-value contains any VarRef inside.\n */\nexport const getVarRefValue = (varRef: AnyVarRef): ConstValue => {\n const inner = VarRef.getInner(varRef);\n if (inner.type !== \"nested-value\") {\n throw new Error(\"Expected nested-value, got variable reference\");\n }\n if (hasVarRefInside(inner.value)) {\n throw new Error(\"Cannot get const value: nested-value contains VarRef\");\n }\n return inner.value as ConstValue;\n};\n\n// ============================================================================\n// Path Types and Utilities\n// ============================================================================\n\n/**\n * Path segment types for navigating nested values.\n */\nexport type PathSegment = string;\n\n/**\n * Proxy type that records property accesses.\n */\nexport type SelectableProxy<T> = T;\n\n/**\n * Type-safe path builder function.\n * Used with getNameAt and getValueAt helpers.\n */\nexport type Selector<T, U> = (proxy: T) => U;\n\ntype ProxyInner = {\n readonly varInner: VarRefInner | { type: \"virtual\"; varName: string; varSegments: readonly PathSegment[] };\n readonly segments: readonly PathSegment[];\n};\n\nconst SelectableProxyInnerRegistry = new WeakMap<any, ProxyInner>();\nconst getSelectableProxyInner = (proxy: any): ProxyInner => {\n const inner = SelectableProxyInnerRegistry.get(proxy);\n if (!inner) {\n throw new Error(`Proxy inner not found`);\n }\n return inner;\n};\n\nconst createSelectableProxy = <T>(current: ProxyInner): T => {\n const proxy: T = new Proxy(Object.create(null), {\n get(_, property) {\n if (typeof property === \"symbol\") {\n throw new Error(`Prohibited property access: ${String(property)}`);\n }\n const nextSegments = [...current.segments, property];\n\n if (current.varInner.type === \"virtual\") {\n return createSelectableProxy({\n varInner: current.varInner,\n segments: nextSegments,\n });\n }\n\n if (current.varInner.type === \"variable\") {\n return createSelectableProxy({\n varInner: { type: \"virtual\", varName: current.varInner.name, varSegments: nextSegments },\n segments: nextSegments,\n });\n }\n\n if (typeof current.varInner.value === \"object\" && current.varInner.value !== null) {\n const value = (current.varInner.value as { [key: string]: NestedValueElement })[property];\n return createSelectableProxy({\n varInner: isVarRef(value) ? getVarRefInner(value) : { type: \"nested-value\", value },\n segments: nextSegments,\n });\n }\n\n throw new Error(`Cannot access children of primitive value at path [${current.segments.join(\".\")}]`);\n },\n });\n\n SelectableProxyInnerRegistry.set(proxy, current);\n\n return proxy;\n};\n\n/**\n * Get the variable name from a VarRef at a specific path.\n *\n * @param varRef - The VarRef containing a nested-value\n * @param selector - Path builder function, e.g., p => p.user.age\n * @returns The variable name at the specified path\n * @throws If path doesn't lead to a VarRef with type \"variable\"\n *\n * @example\n * const ref = createVarRefFromNestedValue({\n * user: { age: someVariableRef }\n * });\n * getNameAt(ref, p => p.user.age); // returns the variable name\n */\nexport const getNameAt = <T extends AnyVarRefMeta, U>(\n varRef: VarRef<T>,\n selector: (proxy: TypeProfile.Type<T[\"profile\"]>) => U,\n): string => {\n const proxy = createSelectableProxy<TypeProfile.Type<T[\"profile\"]>>({ varInner: VarRef.getInner(varRef), segments: [] });\n const selected = selector(proxy);\n const inner = getSelectableProxyInner(selected);\n\n if (inner.varInner.type === \"virtual\") {\n throw new Error(`Value at path [${inner.segments.join(\".\")}] is inside a variable`);\n }\n\n if (inner.varInner.type !== \"variable\") {\n throw new Error(`Value at path [${inner.segments.join(\".\")}] is not a variable`);\n }\n\n return inner.varInner.name;\n};\n\n/**\n * Get the const value from a nested-value VarRef at a specific path.\n *\n * @param varRef - The VarRef containing a nested-value\n * @param pathFn - Path builder function, e.g., p => p.user.name\n * @returns The const value at the specified path\n * @throws If path leads to a VarRef or if value contains VarRef inside\n *\n * @example\n * const ref = createVarRefFromNestedValue({\n * user: { name: \"Alice\", age: someVariableRef }\n * });\n * getValueAt(ref, p => p.user.name); // returns \"Alice\"\n */\nexport const getValueAt = <T extends AnyVarRefMeta, U>(\n varRef: VarRef<T>,\n selector: (proxy: SelectableProxy<TypeProfile.Type<T[\"profile\"]>>) => U,\n): U => {\n const proxy = createSelectableProxy<TypeProfile.Type<T[\"profile\"]>>({ varInner: VarRef.getInner(varRef), segments: [] });\n const selected = selector(proxy);\n const inner = getSelectableProxyInner(selected);\n\n if (inner.varInner.type === \"virtual\") {\n throw new Error(`Value at path [${inner.segments.join(\".\")}] is inside a variable`);\n }\n\n if (inner.varInner.type !== \"nested-value\") {\n throw new Error(`Value at path [${inner.segments.join(\".\")}] is not a nested-value`);\n }\n\n if (hasVarRefInside(inner.varInner.value)) {\n throw new Error(`Value at path [${inner.segments.join(\".\")}] contains nested VarRef`);\n }\n\n return inner.varInner.value as U;\n};\n\nexport const getVariablePath = <T extends AnyVarRefMeta, U>(\n varRef: VarRef<T>,\n selector: (proxy: SelectableProxy<TypeProfile.Type<T[\"profile\"]>>) => U,\n): readonly PathSegment[] => {\n const proxy = createSelectableProxy<TypeProfile.Type<T[\"profile\"]>>({ varInner: VarRef.getInner(varRef), segments: [] });\n const selected = selector(proxy);\n const inner = getSelectableProxyInner(selected);\n\n if (inner.varInner.type === \"virtual\") {\n return [`$${inner.varInner.varName}`, ...inner.segments.slice(inner.varInner.varSegments.length)];\n }\n\n if (inner.varInner.type === \"variable\") {\n return [`$${inner.varInner.name}`];\n }\n\n throw new Error(`Value at path [${inner.segments.join(\".\")}] is not a variable or inside a variable`);\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 === \"nested-value\") {\n // Recursively process the nested value\n // This handles VarRefs inside the nested structure\n return buildArgumentValue(inner.value as AnyAssignableInputValue);\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({\n * name: \"GetData\",\n * fields: ({ $ }) => $colocate({\n * userCard: userCardFragment.spread({ userId: $.userId }),\n * posts: postsFragment.spread({ 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 spread:\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","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 type {\n AnyFieldSelectionFactory,\n AnyFieldSelectionFactoryReturn,\n FieldSelectionFactories,\n FieldSelectionFactoryObjectReturn,\n FieldSelectionFactoryPrimitiveReturn,\n FieldSelectionFactoryUnionReturn,\n NestedObjectFieldsBuilder,\n 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, () => 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 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 * 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 { OptionalArg } 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 spread: (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 spread() {\n return GqlElement.get(this).spread;\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 spread: (variables: OptionalArg<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 = OptionalArg<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","/**\n * Fragment usage context using shared value container pattern.\n *\n * This module tracks fragment usages during operation building,\n * allowing metadata from spread 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 spread 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 spread */\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.spread() 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 createVarRefFromNestedValue,\n createVarRefFromVariable,\n isVarRef,\n} from \"../types/fragment\";\nimport type { AnyGraphqlSchema, InferInputProfile } from \"../types/schema\";\nimport type { AnyVarRef, InputTypeSpecifiers, NestedValue } from \"../types/type-foundation\";\nimport { mapValues } from \"../utils/map-values\";\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 createVarRefFromNestedValue<InferInputProfile<TSchema, typeof _definition>>(undefined);\n }\n\n const provided = providedValues[varName];\n if (isVarRef(provided)) {\n return provided;\n }\n\n return createVarRefFromNestedValue<InferInputProfile<TSchema, typeof _definition>>(provided as NestedValue);\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 } 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 } 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 TFields extends AnyFields,\n TVarDefinitions extends InputTypeSpecifiers = {},\n >(options: {\n variables?: TVarDefinitions;\n metadata?: FragmentMetadataBuilder<ReturnType<typeof createVarRefs<TSchema, TVarDefinitions>>, TFragmentMetadata>;\n fields: FieldsBuilder<TSchema, TTypeName, TVarDefinitions, TFields>;\n }) => ReturnType<typeof Fragment.create<TSchema, TTypeName, TVarDefinitions, TFields>>;\n\n const createFragmentComposer = <TTypeName extends keyof TSchema[\"object\"] & string>(\n typename: TTypeName,\n ): FragmentBuilder<TTypeName> => {\n return <TFields extends AnyFields, TVarDefinitions extends InputTypeSpecifiers = {}>(options: {\n variables?: TVarDefinitions;\n metadata?: FragmentMetadataBuilder<AssigningInput<TSchema, TVarDefinitions>, TFragmentMetadata>;\n fields: FieldsBuilder<TSchema, TTypeName, TVarDefinitions, TFields>;\n }) => {\n const varDefinitions = (options.variables ?? {}) as TVarDefinitions;\n const { metadata, fields } = options;\n\n return Fragment.create<TSchema, TTypeName, TVarDefinitions, TFields>(() => ({\n typename,\n spread: (variables) => {\n const f = createFieldFactories(schema, typename);\n const $ = createVarAssignments<TSchema, TVarDefinitions>(varDefinitions, variables);\n\n recordFragmentUsage({\n metadataBuilder: metadata ? () => metadata({ $ }) : null,\n path: getCurrentFieldPath(),\n });\n\n return fields({ 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 spread 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 spread */\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 spread fragments in an operation.\n * Called with the metadata from each spread 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, 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 } 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 >(options: {\n name: TOperationName;\n variables?: TVarDefinitions;\n metadata?: MetadataBuilder<\n ReturnType<typeof createVarRefs<TSchema, TVarDefinitions>>,\n TOperationMetadata,\n TAggregatedFragmentMetadata,\n TSchemaLevel\n >;\n fields: FieldsBuilder<TSchema, TTypeName, TVarDefinitions, TFields>;\n }) => {\n return Operation.create<TSchema, TOperationType, TOperationName, TVarDefinitions, TFields>(() => {\n const { name: operationName } = options;\n const variables = (options.variables ?? {}) as TVarDefinitions;\n const $ = createVarRefs<TSchema, TVarDefinitions>(variables);\n const f = createFieldFactories(schema, operationTypeName);\n\n // Collect fragment usages during field building\n const { result: fields, usages: fragmentUsages } = withFragmentUsageCollection(() => options.fields({ f, $ }));\n\n const document = buildDocument<TSchema, TFields, TVarDefinitions>({\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 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 {\n AllInputTypeNames,\n AnyConstDirectiveAttachments,\n AnyGraphqlSchema,\n ConstAssignableInputValue,\n InferInputKind,\n} from \"../types/schema\";\nimport type { InputTypeKind, TypeModifier } from \"../types/type-foundation\";\nimport {\n getNameAt,\n getValueAt,\n getVariablePath,\n getVarRefInner,\n getVarRefName,\n getVarRefValue,\n} from \"../types/type-foundation/var-ref\";\nimport { wrapByKey } from \"../utils/wrap-by-key\";\n\n/**\n * Type for the default value function for a variable.\n */\ntype AssignableDefaultValue<\n TSchema extends AnyGraphqlSchema,\n TKind extends InputTypeKind,\n TName extends 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\n/**\n * Variable specifier type.\n */\nexport type VarSpecifier<\n TKind extends InputTypeKind,\n TTypeName extends string,\n TModifier extends TypeModifier,\n TDefaultFn extends (() => unknown) | 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/**\n * Creates a variable method for a specific input type.\n * This is used by codegen to generate type-specific variable methods.\n *\n * @deprecated Use createVarMethodFactory instead for proper type inference with nested input objects.\n */\nexport const createVarMethod = <TKind extends InputTypeKind, TTypeName extends string>(kind: TKind, typeName: TTypeName) => {\n return <\n TSchema extends AnyGraphqlSchema,\n const TModifier extends TypeModifier,\n const TDefaultFn extends (() => AssignableDefaultValue<TSchema, TKind, TTypeName, TModifier>) | null = null,\n const TDirectives extends AnyConstDirectiveAttachments = {},\n >(\n modifier: TModifier,\n extras?: {\n default?: TDefaultFn & (() => AssignableDefaultValue<TSchema, TKind, TTypeName, TModifier>);\n directives?: TDirectives;\n },\n ): VarSpecifier<TKind, TTypeName, TModifier, TDefaultFn, TDirectives> =>\n ({\n kind,\n name: typeName,\n modifier,\n defaultValue: extras?.default ? { default: extras.default() } : null,\n directives: extras?.directives ?? {},\n }) as VarSpecifier<TKind, TTypeName, TModifier, TDefaultFn, TDirectives>;\n};\n\n/**\n * Creates a factory function for generating schema-scoped variable methods.\n * This ensures proper type inference for nested input objects by binding the schema type upfront.\n *\n * @example\n * ```typescript\n * const createMethod = createVarMethodFactory<typeof schema>();\n * const inputTypeMethods = {\n * Boolean: createMethod(\"scalar\", \"Boolean\"),\n * user_bool_exp: createMethod(\"input\", \"user_bool_exp\"),\n * } satisfies InputTypeMethods<typeof schema>;\n * ```\n */\nexport const createVarMethodFactory = <TSchema extends AnyGraphqlSchema>() => {\n return <TKind extends InputTypeKind, TTypeName extends AllInputTypeNames<TSchema>>(\n kind: TKind,\n typeName: TTypeName,\n ): InputTypeMethod<TSchema, TKind, TTypeName> => {\n return ((modifier, extras) => ({\n kind,\n name: typeName,\n modifier,\n defaultValue: extras?.default ? { default: extras.default() } : null,\n directives: extras?.directives ?? {},\n })) as InputTypeMethod<TSchema, TKind, TTypeName>;\n };\n};\n\n/**\n * Type for a single input type method.\n */\nexport type InputTypeMethod<TSchema extends AnyGraphqlSchema, TKind extends InputTypeKind, TTypeName extends string> = <\n const TModifier extends TypeModifier,\n const TDefaultFn extends (() => AssignableDefaultValue<TSchema, TKind, TTypeName, TModifier>) | null = null,\n const TDirectives extends AnyConstDirectiveAttachments = {},\n>(\n modifier: TModifier,\n extras?: {\n default?: TDefaultFn & (() => AssignableDefaultValue<TSchema, TKind, TTypeName, TModifier>);\n directives?: TDirectives;\n },\n) => VarSpecifier<TKind, TTypeName, TModifier, TDefaultFn, TDirectives>;\n\n/**\n * Type for all input type methods in a schema.\n */\nexport type InputTypeMethods<TSchema extends AnyGraphqlSchema> = {\n [TName in AllInputTypeNames<TSchema>]: InputTypeMethod<TSchema, InferInputKind<TSchema, TName>, TName>;\n};\n\n/**\n * Type for a wrapped variable method that includes the variable name in the result.\n */\ntype WrappedVarMethod<\n TVarName extends string,\n TSchema extends AnyGraphqlSchema,\n TKind extends InputTypeKind,\n TTypeName extends string,\n> = <\n const TModifier extends TypeModifier,\n const TDefaultFn extends (() => AssignableDefaultValue<TSchema, TKind, TTypeName, TModifier>) | null = null,\n const TDirectives extends AnyConstDirectiveAttachments = {},\n>(\n modifier: TModifier,\n extras?: {\n default?: TDefaultFn & (() => AssignableDefaultValue<TSchema, TKind, TTypeName, TModifier>);\n directives?: TDirectives;\n },\n) => { [K in TVarName]: VarSpecifier<TKind, TTypeName, TModifier, TDefaultFn, TDirectives> };\n\n/**\n * Type for the variable builder methods for a specific variable name.\n */\nexport type VarBuilderMethods<TVarName extends string, TSchema extends AnyGraphqlSchema> = {\n [TName in AllInputTypeNames<TSchema>]: WrappedVarMethod<TVarName, TSchema, InferInputKind<TSchema, TName>, TName>;\n};\n\n/**\n * Type for the variable builder function.\n */\nexport type VarBuilder<TSchema extends AnyGraphqlSchema> = {\n <TVarName extends string>(varName: TVarName): VarBuilderMethods<TVarName, TSchema>;\n getName: typeof getVarRefName;\n getValue: typeof getVarRefValue;\n getInner: typeof getVarRefInner;\n getNameAt: typeof getNameAt;\n getValueAt: typeof getValueAt;\n getVariablePath: typeof getVariablePath;\n};\n\n/**\n * Generic input type method that can be called with any modifier.\n */\ntype AnyInputTypeMethod = (\n modifier: TypeModifier,\n extras?: { default?: () => unknown; directives?: AnyConstDirectiveAttachments },\n) => unknown;\n\n/**\n * Creates a variable builder that uses injected input type methods.\n */\nexport const createVarBuilder = <TSchema extends AnyGraphqlSchema>(\n inputTypeMethods: InputTypeMethods<TSchema>,\n): VarBuilder<TSchema> => {\n const varBuilder = <TVarName extends string>(varName: TVarName): VarBuilderMethods<TVarName, TSchema> => {\n const wrappedMethods = {} as VarBuilderMethods<TVarName, TSchema>;\n\n for (const [typeName, method] of Object.entries(inputTypeMethods) as [string, AnyInputTypeMethod][]) {\n Object.defineProperty(wrappedMethods, typeName, {\n value: ((modifier, extras) => wrapByKey(varName, method(modifier, extras))) satisfies AnyInputTypeMethod,\n writable: false,\n configurable: true,\n });\n }\n\n return wrappedMethods;\n };\n\n varBuilder.getName = getVarRefName;\n varBuilder.getValue = getVarRefValue;\n varBuilder.getInner = getVarRefInner;\n varBuilder.getNameAt = getNameAt;\n varBuilder.getValueAt = getValueAt;\n varBuilder.getVariablePath = getVariablePath;\n\n return varBuilder as VarBuilder<TSchema>;\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, type InputTypeMethods } from \"./var-builder\";\n\nexport type GqlElementComposer<TContext> = <TResult extends AnyFragment | AnyOperation>(\n composeElement: (context: TContext) => 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<TSchema extends AnyGraphqlSchema, TAdapter extends AnyAdapter = DefaultAdapter> = {\n adapter?: TAdapter;\n inputTypeMethods: InputTypeMethods<TSchema>;\n};\n\nexport const createGqlElementComposer = <TSchema extends AnyGraphqlSchema, TAdapter extends AnyAdapter = DefaultAdapter>(\n schema: NoInfer<TSchema>,\n options: GqlElementComposerOptions<NoInfer<TSchema>, NoInfer<TAdapter>>,\n) => {\n type THelpers = ExtractHelpers<TAdapter>;\n type TMetadataAdapter = ExtractMetadataAdapter<TAdapter>;\n const { adapter, inputTypeMethods } = 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 context = {\n fragment,\n query: { operation: createOperationComposer(\"query\") },\n mutation: { operation: createOperationComposer(\"mutation\") },\n subscription: { operation: createOperationComposer(\"subscription\") },\n $var: createVarBuilder<TSchema>(inputTypeMethods),\n $colocate: createColocateHelper(),\n ...(helpers ?? ({} as THelpers)),\n };\n\n const elementComposer: GqlElementComposer<typeof context> = (composeElement) => composeElement(context);\n\n return elementComposer;\n};\n"],"mappings":"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"}
|
package/dist/runtime.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { m as OperationType, p as OperationRoots } from "./schema-
|
|
2
|
-
import { D as AnyFragment,
|
|
1
|
+
import { m as OperationType, p as OperationRoots } from "./schema-D88zIxYO.cjs";
|
|
2
|
+
import { D as AnyFragment, rt as StripFunctions, w as AnyOperationOf } from "./index-IYiti5xq.cjs";
|
|
3
3
|
|
|
4
4
|
//#region packages/core/src/runtime/fragment.d.ts
|
|
5
5
|
type RuntimeFragmentInput = {
|
package/dist/runtime.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { m as OperationType, p as OperationRoots } from "./schema-
|
|
2
|
-
import { D as AnyFragment,
|
|
1
|
+
import { m as OperationType, p as OperationRoots } from "./schema-DgHZfIVa.js";
|
|
2
|
+
import { D as AnyFragment, rt as StripFunctions, w as AnyOperationOf } from "./index-C-evbm4T.js";
|
|
3
3
|
|
|
4
4
|
//#region packages/core/src/runtime/fragment.d.ts
|
|
5
5
|
type RuntimeFragmentInput = {
|
|
@@ -259,6 +259,7 @@ declare const getNameAt: <T extends AnyVarRefMeta, U>(varRef: VarRef<T>, selecto
|
|
|
259
259
|
* getValueAt(ref, p => p.user.name); // returns "Alice"
|
|
260
260
|
*/
|
|
261
261
|
declare const getValueAt: <T extends AnyVarRefMeta, U>(varRef: VarRef<T>, selector: (proxy: SelectableProxy<TypeProfile.Type<T["profile"]>>) => U) => U;
|
|
262
|
+
declare const getVariablePath: <T extends AnyVarRefMeta, U>(varRef: VarRef<T>, selector: (proxy: SelectableProxy<TypeProfile.Type<T["profile"]>>) => U) => readonly PathSegment[];
|
|
262
263
|
//#endregion
|
|
263
264
|
//#region packages/core/src/types/metadata/metadata.d.ts
|
|
264
265
|
/**
|
|
@@ -578,5 +579,5 @@ type AllInputTypeNames<TSchema extends AnyGraphqlSchema> = (keyof TSchema["scala
|
|
|
578
579
|
*/
|
|
579
580
|
type InferInputKind<TSchema extends AnyGraphqlSchema, TName extends AllInputTypeNames<TSchema>> = TName extends keyof TSchema["scalar"] ? "scalar" : TName extends keyof TSchema["enum"] ? "enum" : TName extends keyof TSchema["input"] ? "input" : never;
|
|
580
581
|
//#endregion
|
|
581
|
-
export { MetadataBuilderTools as $, OutputInferrableTypeSpecifier as A,
|
|
582
|
-
//# sourceMappingURL=schema-
|
|
582
|
+
export { MetadataBuilderTools as $, OutputInferrableTypeSpecifier as A, FieldPathSegment as At, AnyMetadataAdapter as B, InputInferrableTypeSpecifier as C, TypeProfile as Ct, InputTypeSpecifier as D, ConstValue as Dt, InputTypeKind as E, ValidTypeModifier as Et, OutputTypeSpecifiers as F, FragmentMetaInfo as G, DefaultMetadataAdapter as H, OutputTypenameSpecifier as I, defaultMetadataAdapter as J, MetadataAdapter as K, OutputUnionSpecifier as L, OutputScalarSpecifier as M, getCurrentFieldPath as Mt, OutputTypeKind as N, isListType as Nt, InputTypeSpecifiers as O, ConstValues as Ot, OutputTypeSpecifier as P, withFieldPath as Pt, MetadataBuilder as Q, Adapter as R, InputEnumSpecifier as S, PrimitiveTypeProfile as St, InputScalarSpecifier as T, TypeModifier as Tt, ExtractAdapterTypes as U, DefaultAdapter as V, ExtractUnifiedAdapterTypes as W, FragmentMetadataBuilder as X, ExtractMetadata as Y, FragmentMetadataBuilderTools as Z, UnionDefinition as _, hasVarRefInside as _t, EnumDefinition as a, SelectableProxy as at, AnyDefaultValue as b, GetConstAssignableType as bt, InferOutputProfile as c, VarRefInner as ct, ObjectDefinition as d, getNameAt as dt, OperationMetadata as et, ObjectFieldRecord as f, getValueAt as ft, ScalarDefinition as g, getVariablePath as gt, PickTypeSpecifierByFieldName as h, getVarRefValue as ht, AnyTypeName as i, PathSegment as it, OutputObjectSpecifier as j, appendToPath as jt, OutputEnumSpecifier as k, FieldPath as kt, InputDefinition as l, createVarRefFromNestedValue as lt, OperationType as m, getVarRefName as mt, AnyFieldName as n, AnyVarRefMeta as nt, InferInputKind as o, Selector as ot, OperationRoots as p, getVarRefInner as pt, createDefaultAdapter as q, AnyGraphqlSchema as r, NestedValue as rt, InferInputProfile as s, VarRef as st, AllInputTypeNames as t, AnyVarRef as tt, InputFieldRecord as u, createVarRefFromVariable as ut, UnionMemberName as v, isVarRef as vt, InputInputObjectSpecifier as w, ApplyTypeModifier as wt, AnyTypeSpecifier as x, GetModifiedType as xt, UnionTypeRecord as y, GetAssigningType as yt, AnyAdapter as z };
|
|
583
|
+
//# sourceMappingURL=schema-D88zIxYO.d.cts.map
|