@ptdgrp/typedgql 1.0.0-beta.10
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/LICENSE +45 -0
- package/README.md +121 -0
- package/README.zh-CN.md +113 -0
- package/dist/index.cjs +911 -0
- package/dist/index.d.cts +299 -0
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.mts +299 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +896 -0
- package/dist/index.mjs.map +1 -0
- package/dist/node.cjs +6 -0
- package/dist/node.d.cts +41 -0
- package/dist/node.d.cts.map +1 -0
- package/dist/node.d.mts +41 -0
- package/dist/node.d.mts.map +1 -0
- package/dist/node.mjs +3 -0
- package/dist/options-CaWo97vV.d.cts +99 -0
- package/dist/options-CaWo97vV.d.cts.map +1 -0
- package/dist/options-D2L-tv7C.d.mts +99 -0
- package/dist/options-D2L-tv7C.d.mts.map +1 -0
- package/dist/schema-loader-D4z1rOMz.mjs +1913 -0
- package/dist/schema-loader-D4z1rOMz.mjs.map +1 -0
- package/dist/schema-loader-dDSoNpTn.cjs +1929 -0
- package/dist/vite.cjs +148 -0
- package/dist/vite.d.cts +61 -0
- package/dist/vite.d.cts.map +1 -0
- package/dist/vite.d.mts +61 -0
- package/dist/vite.d.mts.map +1 -0
- package/dist/vite.mjs +148 -0
- package/dist/vite.mjs.map +1 -0
- package/package.json +87 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../src/runtime/types.ts","../src/runtime/schema.ts","../src/runtime/parameter.ts","../src/runtime/text-builder.ts","../src/runtime/selection.ts","../src/runtime/field-options.ts","../src/runtime/enum-metadata.ts","../src/runtime/proxy.ts","../src/runtime/cyrb53.ts"],"sourcesContent":["import type { SchemaType } from \"./schema\";\nimport type { FieldOptionsValue } from \"./field-options\";\nimport type { ParameterRef } from \"./parameter\";\n\nexport const __phantom: unique symbol = Symbol(\"__phantom\");\nexport const __runtime: unique symbol = Symbol(\"__selection_runtime\");\n\n// ─── Core Selection Interface ──────────────────────────────────────────\n\nexport interface Selection<\n E extends string,\n T extends object,\n TVariables extends object,\n> {\n toString(): string;\n toFragmentString(): string;\n toJSON(): string;\n\n readonly [__phantom]: readonly [E, T, TVariables];\n}\n\nexport interface SelectionRuntime<E extends string = string> {\n readonly schemaType: SchemaType<E>;\n readonly operationName?: string;\n readonly fieldMap: ReadonlyMap<string, FieldSelection>;\n readonly directiveMap: ReadonlyMap<string, DirectiveArgs>;\n readonly variableTypeMap: ReadonlyMap<string, string>;\n\n findField(fieldKey: string): FieldSelection | undefined;\n findFieldsByName(fieldName: string): readonly FieldSelection[];\n findFieldByName(fieldName: string): FieldSelection | undefined;\n}\n\nexport type ExecutableSelection<\n E extends string,\n T extends object,\n TVariables extends object,\n> = Selection<E, T, TVariables> & {\n readonly [__runtime]: SelectionRuntime<E>;\n};\n\nexport function runtimeOf<\n E extends string,\n T extends object,\n TVariables extends object,\n>(selection: Selection<E, T, TVariables>): SelectionRuntime<E> {\n return (selection as ExecutableSelection<E, T, TVariables>)[__runtime];\n}\n\n// ─── Utility Types ────────────────────────────────────────────────────\n\nexport type ShapeOf<F> =\n F extends Selection<string, infer M, object> ? M : never;\n\nexport type VariablesOf<T> =\n T extends Selection<string, object, infer TVariables> ? TVariables : never;\n\nexport type Expand<T> =\n T extends ReadonlyArray<infer U>\n ? ReadonlyArray<Expand<U>>\n : T extends Array<infer U>\n ? Array<Expand<U>>\n : T extends object\n ? { [K in keyof T]: Expand<T[K]> }\n : T;\n\nexport type ValueOrThunk<T> = T | (() => T);\nexport interface FieldSelection {\n readonly name: string;\n readonly argGraphQLTypes?: ReadonlyMap<string, string>;\n readonly args?: object;\n readonly fieldOptionsValue?: FieldOptionsValue;\n readonly plural: boolean;\n readonly childSelections?: ReadonlyArray<\n ExecutableSelection<string, object, object>\n >;\n}\n\n// ─── Directives & Fragments ──────────────────────────────────────────\n\nexport type DirectiveArgs =\n | { readonly [key: string]: ParameterRef<string> | StringValue | any }\n | undefined;\n\nexport class StringValue {\n constructor(\n readonly value: any,\n readonly quotationMarks: boolean = true,\n ) {}\n}\n\nexport const __fragment_spread = Symbol(\"__fragment_spread\");\n\nexport abstract class FragmentSpread<\n TFragmentName extends string,\n E extends string,\n T extends object,\n TVariables extends object,\n> {\n readonly [__fragment_spread] = true;\n\n protected constructor(\n readonly name: TFragmentName,\n readonly selection: ExecutableSelection<E, T, TVariables>,\n ) {}\n}\n\nexport class FragmentRef<\n TFragmentName extends string,\n E extends string,\n T extends object,\n TVariables extends object,\n> extends FragmentSpread<TFragmentName, E, T, TVariables> {\n constructor(\n name: TFragmentName,\n selection: ExecutableSelection<E, T, TVariables>,\n ) {\n super(name, selection);\n }\n}\n","// ─── Type Categories ──────────────────────────────────────────────────\n\n/**\n * Runtime-level classification for GraphQL composite types.\n *\n * - OBJECT:\n * Represents identity-bearing types (typically with an id-like field) that are\n * treated as independently addressable nodes in selection/proxy logic.\n * - EMBEDDED:\n * Represents value-like types without independent identity; they are selected\n * as nested structures and are not treated as standalone entity nodes.\n */\nexport type SchemaTypeCategory = \"OBJECT\" | \"EMBEDDED\";\n\n/**\n * Runtime-level classification for fields in a schema type.\n *\n * - ID:\n * Identity field of an OBJECT-like node (used for entity identity semantics).\n * - SCALAR:\n * Leaf/value field with no nested selection.\n * - REFERENCE:\n * Single-valued association to another composite type (requires child selection).\n * - LIST:\n * Multi-valued association to another composite type (requires child selection).\n */\nexport type SchemaFieldCategory = \"ID\" | \"SCALAR\" | \"REFERENCE\" | \"LIST\";\n\n// ─── Schema Type & Field (plain readonly interfaces) ─────────────────\n\n/**\n * Normalized runtime representation of one GraphQL composite type.\n */\nexport interface SchemaType<E extends string = string> {\n /** GraphQL type name. */\n readonly name: E;\n /** Coarse runtime category used by selection/proxy behavior. */\n readonly category: SchemaTypeCategory;\n /** Directly implemented interfaces / declared super types. */\n readonly interfaces: readonly SchemaType[];\n /** Fields declared on this type itself (excluding inherited fields). */\n readonly ownFields: ReadonlyMap<string, SchemaField>;\n /** Effective fields (own fields plus inherited/interface fields). */\n readonly fields: ReadonlyMap<string, SchemaField>;\n}\n\n/**\n * Normalized runtime representation of one field on a schema type.\n */\nexport interface SchemaField {\n /** Field name as exposed by GraphQL. */\n readonly name: string;\n /** Coarse runtime field category. */\n readonly category: SchemaFieldCategory;\n /** GraphQL argument type map keyed by argument name (SDL form, e.g. `ID!`). */\n readonly argGraphQLTypeMap: ReadonlyMap<string, string>;\n /** Target GraphQL type name when this field points to another composite type. */\n readonly targetTypeName?: string;\n /** Whether this field is multi-valued. */\n readonly isPlural: boolean;\n /** Whether this field is an association/reference field. */\n readonly isAssociation: boolean;\n /** Whether runtime treats this field as function-like (args or association). */\n readonly isFunction: boolean;\n /** Whether this field may be omitted in generated runtime builders. */\n readonly isUndefinable: boolean;\n}\n\nconst SCHEMA_TYPE_REGISTRY = new Map<string, SchemaType>();\nconst SCHEMA_TYPE_FACTORY_REGISTRY = new Map<string, () => SchemaType>();\nconst SCHEMA_TYPE_RESOLVING = new Set<string>();\n\nexport const resolveRegisteredSchemaType = (\n typeName: string,\n): SchemaType | undefined => {\n const registered = SCHEMA_TYPE_REGISTRY.get(typeName);\n if (registered) {\n return registered;\n }\n\n const factory = SCHEMA_TYPE_FACTORY_REGISTRY.get(typeName);\n if (!factory) {\n return undefined;\n }\n if (SCHEMA_TYPE_RESOLVING.has(typeName)) {\n throw new Error(\n `Circular schema factory resolution detected for \"${typeName}\"`,\n );\n }\n\n SCHEMA_TYPE_RESOLVING.add(typeName);\n try {\n const created = factory();\n registerSchemaType(created);\n } finally {\n SCHEMA_TYPE_RESOLVING.delete(typeName);\n }\n\n return SCHEMA_TYPE_REGISTRY.get(typeName);\n};\n\nexport const registerSchemaTypeFactory = (\n typeName: string,\n factory: () => SchemaType,\n) => {\n if (!SCHEMA_TYPE_FACTORY_REGISTRY.has(typeName)) {\n SCHEMA_TYPE_FACTORY_REGISTRY.set(typeName, factory);\n }\n};\n\n// ─── Field Descriptor (input to factory) ──────────────────────────────\n\ntype FieldDescriptor =\n | string\n | {\n readonly name: string;\n readonly category: SchemaFieldCategory;\n readonly undefinable?: boolean;\n readonly argGraphQLTypeMap?: { readonly [key: string]: string };\n readonly targetTypeName?: string;\n };\n\n// ─── Factory ────────────────────────────────────────────────────────\n\nexport const createSchemaType = <E extends string>(\n name: E,\n category: SchemaTypeCategory,\n superTypes: readonly SchemaType[],\n declaredFields: readonly FieldDescriptor[],\n): SchemaType<E> => {\n const declaredFieldMap = new Map<string, SchemaField>();\n\n for (const desc of declaredFields) {\n if (typeof desc === \"string\") {\n declaredFieldMap.set(desc, buildField(desc, \"SCALAR\", new Map()));\n } else {\n const argMap = new Map<string, string>();\n if (desc.argGraphQLTypeMap) {\n for (const k in desc.argGraphQLTypeMap) {\n argMap.set(k, desc.argGraphQLTypeMap[k]!);\n }\n }\n declaredFieldMap.set(\n desc.name,\n buildField(\n desc.name,\n desc.category,\n argMap,\n desc.targetTypeName,\n desc.undefinable,\n ),\n );\n }\n }\n\n // Lazily compute merged fields (own + inherited)\n let _fields: ReadonlyMap<string, SchemaField> | undefined;\n\n const result: SchemaType<E> = {\n name,\n category,\n interfaces: superTypes,\n ownFields: declaredFieldMap,\n get fields(): ReadonlyMap<string, SchemaField> {\n if (!_fields) {\n _fields =\n superTypes.length === 0 ? declaredFieldMap : collectFields(result);\n }\n return _fields;\n },\n };\n\n registerSchemaType(result);\n return result;\n};\n\n// ─── Internal helpers ─────────────────────────────────────────────────\n\nconst buildField = (\n name: string,\n category: SchemaFieldCategory,\n argGraphQLTypeMap: ReadonlyMap<string, string>,\n targetTypeName?: string,\n undefinable?: boolean,\n): SchemaField => {\n const isPlural = category === \"LIST\";\n const isAssociation = category === \"REFERENCE\" || isPlural;\n\n return {\n name,\n category,\n argGraphQLTypeMap,\n targetTypeName,\n isPlural,\n isAssociation,\n isFunction:\n argGraphQLTypeMap.size !== 0 ||\n isAssociation ||\n targetTypeName !== undefined,\n isUndefinable: undefinable ?? false,\n };\n};\n\nconst collectFields = (type: SchemaType): ReadonlyMap<string, SchemaField> => {\n const result = new Map<string, SchemaField>();\n _collect(type, result);\n return result;\n};\n\nconst _collect = (type: SchemaType, out: Map<string, SchemaField>) => {\n for (const [name, field] of type.ownFields) {\n out.set(name, field);\n }\n for (const superType of type.interfaces) {\n _collect(superType, out);\n }\n};\n\nconst registerSchemaType = (type: SchemaType) => {\n const existing = SCHEMA_TYPE_REGISTRY.get(type.name);\n if (!existing) {\n SCHEMA_TYPE_REGISTRY.set(type.name, type);\n return;\n }\n\n if (existing.ownFields.size < type.ownFields.size) {\n SCHEMA_TYPE_REGISTRY.set(type.name, type);\n }\n};\n","/**\n * @author ChenTao\n *\n * 1. If object is used by field arguments, don't specify the graphqlTypeName\n * 2. If object is used by directive arguments, graphqlTypeName is required\n */\nexport const __marker: unique symbol = Symbol(\"__parameter_ref_marker\");\n\nexport class ParameterRef<TName extends string> {\n readonly [__marker] = true;\n\n private constructor(\n readonly name: TName,\n readonly graphqlTypeName?: string,\n ) {\n if (name.startsWith(\"$\")) {\n throw new Error(\"parameter name cannot start with '$'\");\n }\n }\n\n static of<TName extends string>(\n name: TName,\n graphqlTypeName?: string,\n ): ParameterRef<TName> {\n return new ParameterRef<TName>(name, graphqlTypeName);\n }\n}\n\nexport type AcceptableVariables<T extends object> = {\n [K in keyof T]: T[K] | ParameterRef<string>;\n};\n\nexport type UnresolvedVariables<T, TVariables> = ReversedType<\n UnresolvedNames<UnresolvedRefs<T>>,\n TVariables\n>;\n\ntype UnresolvedRefs<TVariables> = Pick<\n TVariables,\n {\n [K in keyof TVariables]: TVariables[K] extends ParameterRef<string>\n ? K\n : never;\n }[keyof TVariables]\n>;\n\ntype UnresolvedNames<TUnresolvedVariableRefs> = {\n [K in keyof TUnresolvedVariableRefs]: ParameterRefName<\n TUnresolvedVariableRefs[K]\n >;\n};\n\ntype ReversedType<T extends Record<keyof T, keyof any>, TStandard> = {\n [P in T[keyof T]]: {\n [K in keyof T]: T[K] extends P\n ? K extends keyof TStandard\n ? TStandard[K]\n : never\n : never;\n }[keyof T];\n};\n\ntype ParameterRefName<T> =\n T extends ParameterRef<infer TRefName> ? TRefName : never;\n","export type ScopeType = \"block\" | \"arguments\" | \"array\";\n\nexport interface ScopeOptions {\n readonly type: ScopeType;\n readonly multiLines?: boolean;\n readonly separator?: string;\n readonly prefix?: string;\n readonly suffix?: string;\n}\n\nconst SCOPE_BRACKETS: Record<ScopeType, [open: string, close: string]> = {\n block: [\"{\", \"}\"],\n arguments: [\"(\", \")\"],\n array: [\"[\", \"]\"],\n};\n\nconst DEFAULT_SEPARATORS: Partial<Record<ScopeType, string>> = {\n arguments: \", \",\n array: \", \",\n};\n\ninterface ScopeState {\n readonly type: ScopeType;\n readonly multiLines: boolean;\n readonly separator: string | undefined;\n dirty: boolean;\n}\n\nexport class TextBuilder {\n private result = \"\";\n private atNewLine = false;\n private readonly scopes: ScopeState[] = [];\n\n constructor(private readonly indent: string = \"\\t\") {}\n\n text(value: string): this {\n const scope = this.scopes.at(-1);\n if (value && scope && !scope.dirty) {\n if (scope.multiLines) this.lineBreak();\n scope.dirty = true;\n }\n let remaining = value;\n while (remaining) {\n this.flushIndent();\n const newlineIdx = remaining.indexOf(\"\\n\");\n if (newlineIdx !== -1) {\n this.result += remaining.substring(0, newlineIdx);\n this.lineBreak();\n remaining = remaining.substring(newlineIdx + 1);\n } else {\n this.result += remaining;\n remaining = \"\";\n }\n }\n return this;\n }\n\n scope(options: ScopeOptions, action: () => void): this {\n const { type, multiLines = false, separator, prefix, suffix } = options;\n const [open, close] = SCOPE_BRACKETS[type];\n\n if (prefix) this.text(prefix);\n this.text(open);\n\n this.scopes.push({\n type,\n multiLines,\n separator: separator ?? DEFAULT_SEPARATORS[type],\n dirty: false,\n });\n\n try {\n action();\n } finally {\n this.scopes.pop();\n if (multiLines && !this.atNewLine) this.lineBreak();\n this.text(close);\n if (suffix) this.text(suffix);\n }\n\n return this;\n }\n\n separator(value?: string): this {\n const scope = this.scopes.at(-1);\n if (!scope) throw new Error(\"No existing scope\");\n if (scope.dirty) {\n const sep = value || scope.separator;\n if (sep) this.text(sep);\n if (scope.multiLines) this.lineBreak();\n }\n return this;\n }\n\n toString(): string {\n return this.result;\n }\n\n private flushIndent(): void {\n if (this.atNewLine) {\n this.result += this.indent.repeat(this.scopes.length);\n this.atNewLine = false;\n }\n }\n\n private lineBreak(): void {\n this.result += \"\\n\";\n this.atNewLine = true;\n }\n}\n","import type { EnumInputMetadata, EnumInputMetaType } from \"./enum-metadata\";\nimport type { SchemaType } from \"./schema\";\nimport type { FieldOptionsValue } from \"./field-options\";\nimport { __phantom, __runtime, runtimeOf } from \"./types\";\nimport type {\n Selection,\n ExecutableSelection,\n SelectionRuntime,\n FieldSelection,\n DirectiveArgs,\n} from \"./types\";\nimport { StringValue } from \"./types\";\nimport { ParameterRef, __marker } from \"./parameter\";\nimport { TextBuilder } from \"./text-builder\";\n\n// ─── SelectionImpl ─────────────────────────────────────────────────────\n// Immutable linked-list node. Each field/directive operation returns a new\n// node pointing back to its predecessor via `prev`. The linked list is\n// walked lazily to build `fieldMap` / `directiveMap` / query text.\n\nexport class SelectionImpl<\n E extends string,\n T extends object,\n TVariables extends object,\n> implements Selection<E, T, TVariables> {\n declare readonly [__phantom]: readonly [E, T, TVariables];\n readonly [__runtime]: SelectionRuntime<E> = this;\n\n private _fieldMap?: ReadonlyMap<string, FieldSelection>;\n private _directiveMap?: ReadonlyMap<string, DirectiveArgs>;\n private _result?: SerializedResult;\n\n constructor(\n private readonly _ctx:\n | SelectionImpl<string, object, object>\n | readonly [SchemaType<E>, EnumInputMetadata, string[] | undefined],\n private readonly _negative: boolean,\n private readonly _field: string,\n private readonly _args?: { [key: string]: any },\n private readonly _child?: SelectionImpl<string, object, object>,\n private readonly _fieldOptionsValue?: FieldOptionsValue,\n private readonly _directive?: string,\n private readonly _directiveArgs?: DirectiveArgs,\n private readonly _operationName?: string,\n ) {}\n\n // ── Last field accessor (for $alias) ──\n\n get lastField(): string {\n return this._field;\n }\n\n // ── Schema metadata ──\n\n private get _schemaType(): SchemaType<E> {\n return Array.isArray(this._ctx)\n ? (this._ctx[0] as SchemaType<E>)\n : ((this._ctx as SelectionImpl<string, object, object>)\n ._schemaType as SchemaType<E>);\n }\n\n private get _enumInputMetadata(): EnumInputMetadata {\n return Array.isArray(this._ctx)\n ? (this._ctx[1] as EnumInputMetadata)\n : (this._ctx as SelectionImpl<string, object, object>)._enumInputMetadata;\n }\n\n private get _unionItemTypes(): string[] | undefined {\n return Array.isArray(this._ctx)\n ? this._ctx.length > 2 && this._ctx[2]?.length\n ? this._ctx[2]\n : undefined\n : (this._ctx as SelectionImpl<string, object, object>)._unionItemTypes;\n }\n\n private get _prev(): SelectionImpl<string, object, object> | undefined {\n return Array.isArray(this._ctx)\n ? undefined\n : (this._ctx as SelectionImpl<string, object, object>);\n }\n\n get schemaType(): SchemaType<E> {\n return this._schemaType;\n }\n\n get operationName(): string | undefined {\n if (this._operationName !== undefined) {\n return this._operationName;\n }\n return this._prev?.operationName;\n }\n\n // ── Builders (return new immutable nodes) ──\n\n addField<F extends SelectionImpl<string, object, object>>(\n field: string,\n args?: { [key: string]: any },\n child?: SelectionImpl<string, object, object>,\n optionsValue?: FieldOptionsValue,\n ): F {\n return new SelectionImpl(\n this,\n false,\n field,\n args,\n child,\n optionsValue,\n ) as unknown as F;\n }\n\n removeField<F extends SelectionImpl<string, object, object>>(\n field: string,\n ): F {\n if (field === \"__typename\") throw new Error(\"__typename cannot be removed\");\n return new SelectionImpl(this, true, field) as unknown as F;\n }\n\n addEmbeddable<F extends SelectionImpl<string, object, object>>(\n child: SelectionImpl<string, object, object>,\n fragmentName?: string,\n ): F {\n let fieldName: string;\n if (fragmentName !== undefined) {\n if (fragmentName.length === 0)\n throw new Error(\"fragmentName cannot be ''\");\n if (fragmentName.startsWith(\"on \"))\n throw new Error(\"fragmentName cannot start with 'on '\");\n fieldName = `... ${fragmentName}`;\n } else if (\n child._schemaType.name === this._schemaType.name ||\n child._unionItemTypes !== undefined\n ) {\n fieldName = \"...\";\n } else {\n fieldName = `... on ${child._schemaType.name}`;\n }\n return new SelectionImpl(\n this,\n false,\n fieldName,\n undefined,\n child,\n ) as unknown as F;\n }\n\n addDirective<F extends SelectionImpl<string, object, object>>(\n directive: string,\n directiveArgs?: DirectiveArgs,\n ): F {\n return new SelectionImpl(\n this,\n false,\n \"\",\n undefined,\n undefined,\n undefined,\n directive,\n directiveArgs,\n ) as unknown as F;\n }\n\n withOperationName<F extends SelectionImpl<string, object, object>>(\n operationName?: string,\n ): F {\n if (operationName === undefined) {\n return this as unknown as F;\n }\n if (operationName.trim().length === 0) {\n throw new Error(\"operationName cannot be empty\");\n }\n return new SelectionImpl(\n this,\n false,\n \"\",\n undefined,\n undefined,\n undefined,\n undefined,\n undefined,\n operationName,\n ) as unknown as F;\n }\n\n // ── Computed maps (lazy, cached) ──\n\n get fieldMap(): ReadonlyMap<string, FieldSelection> {\n return (this._fieldMap ??= this._buildFieldMap());\n }\n\n get directiveMap(): ReadonlyMap<string, DirectiveArgs> {\n return (this._directiveMap ??= this._buildDirectiveMap());\n }\n\n get variableTypeMap(): ReadonlyMap<string, string> {\n return this._serialize().variableTypeMap;\n }\n\n // ── Lookup helpers ──\n\n findField(fieldKey: string): FieldSelection | undefined {\n const field = this.fieldMap.get(fieldKey);\n if (field) return field;\n for (const [, f] of this.fieldMap) {\n if (f.name.startsWith(\"...\") && f.childSelections) {\n for (const child of f.childSelections) {\n const deeper = runtimeOf(child).findField(fieldKey);\n if (deeper) return deeper;\n }\n }\n }\n return undefined;\n }\n\n findFieldsByName(fieldName: string): readonly FieldSelection[] {\n const out: FieldSelection[] = [];\n this._collectFieldsByName(fieldName, out);\n return out;\n }\n\n findFieldByName(fieldName: string): FieldSelection | undefined {\n const fields = this.findFieldsByName(fieldName);\n if (fields.length > 1) {\n throw new Error(\n `Too many fields named \"${fieldName}\" in selection of type \"${this._schemaType.name}\"`,\n );\n }\n return fields[0];\n }\n\n // ── Serialization ──\n\n toString(): string {\n return this._serialize().text;\n }\n\n toFragmentString(): string {\n return this._serialize().fragmentText;\n }\n\n toJSON(): string {\n return JSON.stringify(this._serialize());\n }\n\n // ═══════════════════════════════════════════════════════════════════\n // Private implementation\n // ═══════════════════════════════════════════════════════════════════\n\n private _buildFieldMap(): ReadonlyMap<string, FieldSelection> {\n // Collect all nodes in chain order\n const nodes: SelectionImpl<string, object, object>[] = [];\n for (\n let n: SelectionImpl<string, object, object> | undefined = this;\n n;\n n = n._prev\n ) {\n if (n._field !== \"\") nodes.push(n);\n }\n\n const map = new Map<string, FieldSelection>();\n // Process oldest → newest so later operations can override earlier ones\n // (for example alias rewrites and field removals).\n for (let i = nodes.length - 1; i >= 0; --i) {\n const n = nodes[i]!;\n const key = n._fieldOptionsValue?.alias ?? n._field;\n\n if (n._field.startsWith(\"...\")) {\n let children = map.get(key)?.childSelections as\n | SelectionImpl<string, object, object>[]\n | undefined;\n if (!children) {\n children = [];\n map.set(key, {\n name: n._field,\n plural: false,\n childSelections: children,\n });\n }\n children.push(n._child!);\n } else if (n._negative) {\n map.delete(key);\n } else {\n map.set(key, {\n name: n._field,\n argGraphQLTypes: n._schemaType.fields.get(n._field)\n ?.argGraphQLTypeMap,\n args: n._args,\n fieldOptionsValue: n._fieldOptionsValue,\n plural: n._schemaType.fields.get(n._field)?.isPlural ?? false,\n childSelections: n._child ? [n._child] : undefined,\n });\n }\n }\n return map;\n }\n\n private _buildDirectiveMap(): ReadonlyMap<string, DirectiveArgs> {\n const map = new Map<string, DirectiveArgs>();\n for (\n let n: SelectionImpl<string, object, object> | undefined = this;\n n;\n n = n._prev\n ) {\n if (n._directive !== undefined && !map.has(n._directive)) {\n map.set(n._directive, n._directiveArgs);\n }\n }\n return map;\n }\n\n private _collectFieldsByName(fieldName: string, out: FieldSelection[]) {\n for (const field of this.fieldMap.values()) {\n if (field.name === fieldName) {\n out.push(field);\n } else if (field.name.startsWith(\"...\") && field.childSelections) {\n for (const child of field.childSelections) {\n out.push(...runtimeOf(child).findFieldsByName(fieldName));\n }\n }\n }\n }\n\n // ── Query serialization ─────────────────────────────────────────\n\n private _serialize(): SerializedResult {\n return (this._result ??= serialize(this));\n }\n}\n\nexport const withOperationName = <S extends Selection<string, object, object>>(\n selection: S,\n operationName?: string,\n): S =>\n (\n selection as unknown as SelectionImpl<string, object, object>\n ).withOperationName(operationName) as unknown as S;\n\n// ═══════════════════════════════════════════════════════════════════════\n// Serialization (extracted from old ResultContext)\n// ═══════════════════════════════════════════════════════════════════════\n\ninterface SerializedResult {\n readonly text: string;\n readonly fragmentText: string;\n readonly variableTypeMap: ReadonlyMap<string, string>;\n}\n\nconst serialize = (\n root: SelectionImpl<string, object, object>,\n): SerializedResult => {\n const writer = new TextBuilder();\n const fragmentWriter = new TextBuilder();\n let ctx = new SerializeContext(writer);\n\n ctx.acceptDirectives(root.directiveMap);\n writer.scope({ type: \"block\", multiLines: true, suffix: \"\\n\" }, () => {\n ctx.acceptSelection(root);\n });\n\n const renderedFragments = new Set<string>();\n while (true) {\n const fragmentMap = ctx.namedFragmentMap;\n if (fragmentMap.size === 0) break;\n ctx = new SerializeContext(fragmentWriter, ctx);\n for (const [name, fragment] of fragmentMap) {\n if (renderedFragments.add(name)) {\n const runtime = runtimeOf(fragment);\n fragmentWriter.text(`fragment ${name} on ${runtime.schemaType.name} `);\n ctx.acceptDirectives(runtime.directiveMap);\n fragmentWriter.scope(\n { type: \"block\", multiLines: true, suffix: \"\\n\" },\n () => {\n ctx.acceptSelection(fragment);\n },\n );\n }\n }\n }\n\n return {\n text: writer.toString(),\n fragmentText: fragmentWriter.toString(),\n variableTypeMap: ctx.variableTypeMap,\n };\n};\n\nclass SerializeContext {\n readonly namedFragmentMap = new Map<\n string,\n ExecutableSelection<string, object, object>\n >();\n private readonly fragmentNameCounter = new Map<string, number>();\n private readonly fragmentRuntimeNameMap = new WeakMap<\n ExecutableSelection<string, object, object>,\n Map<string, string>\n >();\n readonly variableTypeMap: Map<string, string>;\n\n constructor(\n private readonly writer: TextBuilder,\n prev?: SerializeContext,\n ) {\n this.variableTypeMap = prev?.variableTypeMap ?? new Map();\n }\n\n acceptSelection(sel: Selection<string, object, object>) {\n const t = this.writer.text.bind(this.writer);\n const runtime = runtimeOf(sel);\n for (const field of runtime.fieldMap.values()) {\n const name = field.name;\n const children = field.childSelections;\n const isNamedSpread =\n name.startsWith(\"... \") && !name.startsWith(\"... on \");\n\n if (isNamedSpread && children?.length) {\n const baseName = name.substring(\"...\".length).trim();\n for (const c of children) {\n const runtimeName = this.resolveFragmentRuntimeName(baseName, c);\n t(`... ${runtimeName}\\n`);\n }\n continue;\n }\n\n if (name !== \"...\") {\n const alias = field.fieldOptionsValue?.alias;\n if (alias && alias !== name) t(`${alias}: `);\n t(name);\n if (field.argGraphQLTypes) {\n const meta = (sel as any)._enumInputMetadata as EnumInputMetadata;\n this.acceptArgs(field.args, field.argGraphQLTypes, meta);\n }\n this.acceptDirectives(field.fieldOptionsValue?.directives);\n }\n if (children?.length) {\n if (name === \"...\") {\n // Inline spread: flatten children directly into current selection.\n for (const c of children) this.acceptSelection(c);\n } else {\n t(\" \");\n this.writer.scope({ type: \"block\", multiLines: true }, () => {\n for (const c of children) this.acceptSelection(c);\n });\n }\n }\n t(\"\\n\");\n }\n }\n\n private resolveFragmentRuntimeName(\n baseName: string,\n selection: ExecutableSelection<string, object, object>,\n ): string {\n const existingByName = this.namedFragmentMap.get(baseName);\n if (existingByName === selection) {\n return baseName;\n }\n\n let byBaseName = this.fragmentRuntimeNameMap.get(selection);\n if (!byBaseName) {\n byBaseName = new Map<string, string>();\n this.fragmentRuntimeNameMap.set(selection, byBaseName);\n }\n const existing = byBaseName.get(baseName);\n if (existing) {\n return existing;\n }\n\n let runtimeName = baseName;\n const occupied = this.namedFragmentMap.get(runtimeName);\n if (occupied && occupied !== selection) {\n const next = this.fragmentNameCounter.get(baseName) ?? 1;\n let idx = next;\n while (this.namedFragmentMap.has(`${baseName}_${idx}`)) {\n idx += 1;\n }\n this.fragmentNameCounter.set(baseName, idx + 1);\n runtimeName = `${baseName}_${idx}`;\n }\n\n this.namedFragmentMap.set(runtimeName, selection);\n byBaseName.set(baseName, runtimeName);\n return runtimeName;\n }\n\n acceptDirectives(directives?: ReadonlyMap<string, DirectiveArgs>) {\n if (!directives) return;\n for (const [directive, args] of directives) {\n this.writer.text(`\\n@${directive}`);\n this.acceptArgs(args);\n }\n }\n\n private acceptArgs(\n args?: object,\n argGraphQLTypeMap?: ReadonlyMap<string, string>,\n enumInputMetadata?: EnumInputMetadata,\n ) {\n if (!args) return;\n const t = this.writer.text.bind(this.writer);\n\n let hasField: boolean;\n if (argGraphQLTypeMap) {\n hasField = false;\n for (const argName in args) {\n if (argGraphQLTypeMap.get(argName) !== undefined) {\n hasField = true;\n break;\n } else console.warn(`Unexpected argument: ${argName}`);\n }\n } else {\n hasField = Object.keys(args).length !== 0;\n }\n\n if (hasField) {\n this.writer.scope(\n { type: \"arguments\", multiLines: isMultilineJSON(args) },\n () => {\n for (const argName in args) {\n this.writer.separator();\n const arg = (args as any)[argName];\n\n if (argGraphQLTypeMap) {\n const typeName = argGraphQLTypeMap.get(argName);\n if (typeName !== undefined) {\n if (arg?.[__marker]) {\n const ref = arg as ParameterRef<string>;\n this.registerVariableType(\n ref,\n typeName,\n false,\n \"field argument\",\n );\n t(`${argName}: $${ref.name}`);\n } else {\n t(`${argName}: `);\n this.acceptLiteral(\n arg,\n SerializeContext.enumMetaType(enumInputMetadata, typeName),\n typeName,\n );\n }\n } else {\n throw new Error(`Unknown argument '${argName}'`);\n }\n } else {\n if (arg?.[__marker]) {\n const ref = arg as ParameterRef<string>;\n if (!ref.graphqlTypeName) {\n throw new Error(\n `Directive argument '${ref.name}' requires graphqlTypeName`,\n );\n }\n this.registerVariableType(\n ref,\n ref.graphqlTypeName,\n false,\n \"directive argument\",\n );\n t(`${argName}: $${ref.name}`);\n } else {\n t(`${argName}: `);\n this.acceptLiteral(arg, undefined, undefined);\n }\n }\n }\n },\n );\n }\n }\n\n private acceptLiteral(\n value: any,\n metaType: EnumInputMetaType | undefined,\n graphqlTypeName: string | undefined,\n ) {\n const t = this.writer.text.bind(this.writer);\n\n if (value == null) {\n t(\"null\");\n return;\n }\n if (typeof value === \"number\") {\n t(value.toString());\n return;\n }\n if (typeof value === \"string\") {\n t(metaType ? value : JSON.stringify(value));\n return;\n }\n if (typeof value === \"boolean\") {\n t(value ? \"true\" : \"false\");\n return;\n }\n if (value?.[__marker]) {\n const ref = value as ParameterRef<string>;\n if (!graphqlTypeName && !ref.graphqlTypeName) {\n throw new Error(\n `Argument '${ref.name}' nested type cannot be inferred; provide graphqlTypeName`,\n );\n }\n this.registerVariableType(ref, graphqlTypeName, true, \"nested argument\");\n t(`$${ref.name}`);\n return;\n }\n if (value instanceof StringValue) {\n t(value.quotationMarks ? JSON.stringify(value.value) : value.value);\n return;\n }\n\n if (Array.isArray(value) || value instanceof Set) {\n const elementGraphQLTypeName =\n SerializeContext.elementTypeName(graphqlTypeName);\n this.writer.scope({ type: \"array\" }, () => {\n for (const e of value) {\n this.writer.separator(\", \");\n this.acceptLiteral(e, metaType, elementGraphQLTypeName);\n }\n });\n } else if (value instanceof Map) {\n this.writer.scope({ type: \"block\" }, () => {\n for (const [k, v] of value) {\n this.writer.separator(\", \");\n this.writer.text(k);\n t(\": \");\n this.acceptLiteral(\n v,\n metaType?.fields?.get(k),\n metaType?.fieldGraphQLTypeMap?.get(k),\n );\n }\n });\n } else if (typeof value === \"object\") {\n this.writer.scope({ type: \"block\" }, () => {\n for (const k in value) {\n this.writer.separator(\", \");\n this.writer.text(k);\n t(\": \");\n this.acceptLiteral(\n value[k],\n metaType?.fields?.get(k),\n metaType?.fieldGraphQLTypeMap?.get(k),\n );\n }\n });\n }\n }\n\n private registerVariableType(\n ref: ParameterRef<string>,\n expectedTypeName: string | undefined,\n allowImplicitFromRef = false,\n context = \"argument\",\n ) {\n const typeName =\n expectedTypeName ??\n (allowImplicitFromRef ? ref.graphqlTypeName : undefined);\n if (!typeName) {\n throw new Error(\n `Directive argument '${ref.name}' requires graphqlTypeName`,\n );\n }\n if (ref.graphqlTypeName && ref.graphqlTypeName !== typeName) {\n throw new Error(\n `Argument '${ref.name}' type conflict: '${typeName}' vs ParameterRef '${ref.graphqlTypeName}' (${context})`,\n );\n }\n const existing = this.variableTypeMap.get(ref.name);\n if (existing && existing !== typeName) {\n throw new Error(\n `Argument '${ref.name}' type conflict: '${existing}' vs '${typeName}' (${context})`,\n );\n }\n this.variableTypeMap.set(ref.name, typeName);\n }\n\n private static enumMetaType(\n meta: EnumInputMetadata | undefined,\n typeName: string | undefined,\n ): EnumInputMetaType | undefined {\n if (!meta || !typeName) return undefined;\n return meta.get(typeName.split(/\\[|\\]|!/).join(\"\"));\n }\n\n private static elementTypeName(\n typeName: string | undefined,\n ): string | undefined {\n if (!typeName) return undefined;\n let normalized = typeName.trim();\n // Strip non-null marker before list extraction to get element type.\n if (normalized.endsWith(\"!\")) {\n normalized = normalized.slice(0, -1).trim();\n }\n if (normalized.startsWith(\"[\") && normalized.endsWith(\"]\")) {\n return normalized.slice(1, -1).trim();\n }\n return normalized;\n }\n}\n\nconst isMultilineJSON = (obj: unknown): boolean => {\n let size = 0;\n if (Array.isArray(obj)) {\n for (const v of obj) {\n if (typeof v === \"object\" && !v?.[__marker]) return true;\n if (++size > 2) return true;\n }\n } else if (typeof obj === \"object\" && obj !== null) {\n for (const k of Reflect.ownKeys(obj)) {\n const v = (obj as Record<string | symbol, unknown>)[k];\n if (typeof v === \"object\" && !(v as Record<symbol, unknown>)?.[__marker])\n return true;\n if (++size > 2) return true;\n }\n }\n return false;\n};\n","/**\n * 为 selection 中的字段提供参数(args)、别名(alias)和指令(directive)配置。\n * 通过链式调用构建,每次调用返回一个新的不可变节点。\n */\n\nimport { DirectiveArgs } from \"./types\";\nimport { UnresolvedVariables } from \"./parameter\";\n\nexport interface FieldOptionsValue {\n readonly alias?: string;\n readonly directives: ReadonlyMap<string, DirectiveArgs>;\n}\n\nexport class FieldOptions<\n TAlias extends string,\n TDirectives extends { readonly [key: string]: DirectiveArgs },\n TDirectiveVariables extends object,\n> {\n private _value?: FieldOptionsValue;\n\n constructor(\n private readonly _prev?: FieldOptions<string, any, any>,\n private readonly _alias?: string,\n private readonly _directive?: string,\n private readonly _directiveArgs?: object,\n ) {}\n\n alias<XAlias extends string>(\n alias: XAlias,\n ): FieldOptions<XAlias, TDirectives, TDirectiveVariables> {\n return new FieldOptions<XAlias, TDirectives, TDirectiveVariables>(\n this,\n alias,\n );\n }\n\n directive<XDirective extends string, XArgs extends DirectiveArgs = {}>(\n directive: XDirective,\n args?: XArgs,\n ): FieldOptions<\n TAlias,\n TDirectives & { readonly [key in XDirective]: XArgs },\n TDirectiveVariables & UnresolvedVariables<XArgs, Record<keyof XArgs, any>>\n > {\n if (directive.startsWith(\"@\")) {\n throw new Error(\n \"directive name should not start with '@', it will be prepended automatically\",\n );\n }\n return new FieldOptions<\n TAlias,\n TDirectives & { readonly [key in XDirective]: XArgs },\n TDirectiveVariables & UnresolvedVariables<XArgs, XArgs>\n >(this, undefined, directive, args);\n }\n\n get value(): FieldOptionsValue {\n return (this._value ??= this._buildValue());\n }\n\n private _buildValue(): FieldOptionsValue {\n let alias: string | undefined;\n const directives = new Map<string, DirectiveArgs>();\n\n for (\n let node: FieldOptions<string, any, any> | undefined = this;\n node;\n node = node._prev\n ) {\n if (node._alias !== undefined && alias === undefined) {\n alias = node._alias;\n }\n if (node._directive !== undefined && !directives.has(node._directive)) {\n const args = node._directiveArgs;\n directives.set(\n node._directive,\n args && Object.keys(args).length !== 0 ? args : undefined,\n );\n }\n }\n\n return { alias, directives };\n }\n}\n\nexport const createFieldOptions = <TAlias extends string>(): FieldOptions<\n TAlias,\n {},\n {}\n> => {\n return new FieldOptions<TAlias, {}, {}>();\n};\n","/**\n * 枚举/输入类型元数据\n *\n * 用于 GraphQL query 序列化时区分 enum 和 input object 类型:\n * - enum 值直接输出(不加引号):`status: ACTIVE`\n * - input object 递归展开字段:`input: { name: \"foo\" }`\n * - 普通字符串加引号输出:`name: \"foo\"`\n */\n\n/** 枚举/输入类型元数据表,按类型名索引 */\nexport type EnumInputMetadata = ReadonlyMap<string, EnumInputMetaType>;\n\n/** 单个枚举或输入类型的元信息 */\nexport interface EnumInputMetaType {\n /** 区分枚举还是输入类型 */\n readonly type: \"ENUM\" | \"INPUT\";\n /** GraphQL 类型名 */\n readonly name: string;\n /** INPUT 类型的字段映射(ENUM 没有字段,为 undefined) */\n readonly fields?: ReadonlyMap<string, EnumInputMetaType | undefined>;\n /** INPUT 字段的 GraphQL 类型名(保留 []/!) */\n readonly fieldGraphQLTypeMap?: ReadonlyMap<string, string>;\n}\n\n/** 构建器输入:输入类型的字段描述 */\nexport interface RawField {\n readonly name: string;\n readonly typeName: string;\n readonly graphqlTypeName?: string;\n readonly isLeaf?: boolean;\n}\n\n/**\n * 元数据构建器\n *\n * codegen 生成的代码会调用此构建器来注册 schema 中的 enum/input 类型:\n * ```ts\n * const builder = new EnumInputMetadataBuilder();\n * builder.add(\"Status\"); // enum\n * builder.add(\"CreateInput\", [{name: \"status\", typeName: \"Status\"}]); // input\n * export const ENUM_INPUT_METADATA = builder.build();\n * ```\n */\nexport class EnumInputMetadataBuilder {\n private typeMap = new Map<string, ReadonlyArray<RawField> | undefined>();\n private static readonly BUILTIN_SCALARS = new Set([\n \"ID\",\n \"String\",\n \"Int\",\n \"Float\",\n \"Boolean\",\n ]);\n\n /** 注册一个枚举/输入类型。无 fields 参数表示 ENUM,有则表示 INPUT */\n add(name: string, fields?: ReadonlyArray<RawField>): this {\n this.typeMap.set(name, fields);\n return this;\n }\n\n /** 构建不可变的元数据表 */\n build(): EnumInputMetadata {\n const result = new Map<string, EnumInputMetaType>();\n const resolve = (name: string): EnumInputMetaType => {\n const existing = result.get(name);\n if (existing) return existing;\n\n if (!this.typeMap.has(name)) {\n throw new Error(`Unknown enum/input type: '${name}'`);\n }\n\n const rawFields = this.typeMap.get(name);\n let fields: Map<string, EnumInputMetaType | undefined> | undefined;\n let fieldGraphQLTypeMap: Map<string, string> | undefined;\n if (rawFields) {\n fields = new Map();\n fieldGraphQLTypeMap = new Map();\n for (const {\n name: fieldName,\n typeName,\n graphqlTypeName,\n isLeaf,\n } of rawFields) {\n let resolved: EnumInputMetaType | undefined;\n const treatAsLeaf =\n isLeaf || EnumInputMetadataBuilder.BUILTIN_SCALARS.has(typeName);\n if (!treatAsLeaf) {\n if (!this.typeMap.has(typeName)) {\n throw new Error(`Unknown enum/input type: '${typeName}'`);\n }\n resolved = resolve(typeName);\n }\n fields.set(fieldName, resolved);\n if (graphqlTypeName) {\n fieldGraphQLTypeMap.set(fieldName, graphqlTypeName);\n }\n }\n }\n\n const metaType: EnumInputMetaType = {\n type: rawFields === undefined ? \"ENUM\" : \"INPUT\",\n name,\n fields,\n fieldGraphQLTypeMap,\n };\n result.set(name, metaType);\n return metaType;\n };\n\n for (const name of this.typeMap.keys()) {\n resolve(name);\n }\n return result;\n }\n}\n","import { SelectionImpl } from \"./selection\";\nimport { __fragment_spread } from \"./types\";\nimport { runtimeOf } from \"./types\";\nimport type {\n Selection,\n ExecutableSelection,\n DirectiveArgs,\n FragmentSpread,\n ValueOrThunk,\n} from \"./types\";\nimport {\n SchemaType,\n createSchemaType,\n resolveRegisteredSchemaType,\n} from \"./schema\";\nimport { createFieldOptions, FieldOptionsValue } from \"./field-options\";\nimport { ParameterRef } from \"./parameter\";\nimport { EnumInputMetadata, EnumInputMetadataBuilder } from \"./enum-metadata\";\n\nexport { createSchemaType };\n\n// ─── Public factory ───────────────────────────────────────────────────\n\nexport const createSelection = <\n E extends string,\n F extends Selection<E, object, object>,\n>(\n schemaType: SchemaType<E>,\n enumInputMetadata: EnumInputMetadata,\n unionEntityTypes: string[] | undefined,\n): F => {\n return new Proxy(\n new SelectionImpl(\n [schemaType, enumInputMetadata, unionEntityTypes],\n false,\n \"\",\n ),\n proxyHandler(schemaType),\n ) as unknown as F;\n};\n\n// ─── Property access proxy handler ────────────────────────────────────\n\nconst BUILT_DIRECTIVES = new Set([\n \"$omit\",\n \"$alias\",\n \"$directive\",\n \"$include\",\n \"$skip\",\n \"$on\",\n \"$use\",\n]);\n\nconst resolveValueOrThunk = <T>(value: ValueOrThunk<T>): T => {\n return typeof value === \"function\" ? (value as () => T)() : value;\n};\n\nconst createChildSelectionProxy = (\n schemaType: SchemaType,\n enumInputMetadata: EnumInputMetadata,\n) => {\n return new Proxy(\n new SelectionImpl([schemaType, enumInputMetadata, undefined], false, \"\"),\n proxyHandler(schemaType),\n );\n};\n\nconst buildRequiredArgs = (\n argTypeMap: ReadonlyMap<string, string>,\n): { [key: string]: unknown } | undefined => {\n if (!argTypeMap.size) return undefined;\n const requiredArgNames = Array.from(argTypeMap.entries())\n .filter(([, type]) => type.endsWith(\"!\"))\n .map(([name]) => name);\n if (!requiredArgNames.length) return undefined;\n\n const args: { [key: string]: unknown } = {};\n for (const name of requiredArgNames) {\n args[name] = ParameterRef.of(name);\n }\n return args;\n};\n\nconst resolveAssociationTarget = (\n fieldName: string,\n fieldTargetTypeName: string | undefined,\n ownerTypeName: string,\n): SchemaType => {\n if (!fieldTargetTypeName) {\n throw new Error(`Field \"${fieldName}\" has no target type`);\n }\n const targetSchemaType = resolveRegisteredSchemaType(fieldTargetTypeName);\n if (!targetSchemaType) {\n throw new Error(\n `Cannot resolve schema type \"${fieldTargetTypeName}\" for field \"${fieldName}\" on \"${ownerTypeName}\"`,\n );\n }\n return targetSchemaType;\n};\n\nconst parseAssociationArgs = (argArray: unknown[]) => {\n let args: { [key: string]: unknown } | undefined;\n let childSelectionFactory: ((f: unknown) => unknown) | undefined;\n let childSelection: SelectionImpl<string, object, object> | undefined;\n\n for (const arg of argArray) {\n if (arg instanceof SelectionImpl) {\n childSelection = arg;\n } else if (typeof arg === \"function\") {\n childSelectionFactory = arg as typeof childSelectionFactory;\n } else {\n args = arg as typeof args;\n }\n }\n return { args, childSelectionFactory, childSelection };\n};\n\nconst parseMethodArgs = (argArray: unknown[]) => {\n let args: { [key: string]: unknown } | undefined;\n let child: SelectionImpl<string, object, object> | undefined;\n let optionsValue: FieldOptionsValue | undefined;\n\n for (const arg of argArray) {\n if (arg instanceof SelectionImpl) {\n child = arg;\n } else if (typeof arg === \"function\") {\n optionsValue = arg(createFieldOptions()).value;\n } else {\n args = arg as typeof args;\n }\n }\n return { args, child, optionsValue };\n};\n\nconst findLastFieldSelection = (\n selection: SelectionImpl<string, object, object>,\n lastField: string,\n) => {\n const byKey = selection.fieldMap.get(lastField);\n if (byKey) return byKey;\n // `lastField` can refer to a field removed earlier in the chain.\n const byName = selection.findFieldsByName(lastField);\n return byName.length ? byName[0] : undefined;\n};\n\nconst rewriteLastFieldWithOptions = (\n selection: SelectionImpl<string, object, object>,\n lastField: string,\n optionsValue: FieldOptionsValue,\n) => {\n const existing = findLastFieldSelection(selection, lastField);\n let current = selection.removeField(lastField);\n current = current.addField(\n lastField,\n existing?.args as { [key: string]: unknown } | undefined,\n existing?.childSelections?.[0] as\n | SelectionImpl<string, object, object>\n | undefined,\n optionsValue,\n );\n return current;\n};\n\nconst mergeLastFieldDirective = (\n selection: SelectionImpl<string, object, object>,\n lastField: string,\n directiveName: string,\n directiveArgs: DirectiveArgs,\n) => {\n const existing = findLastFieldSelection(selection, lastField);\n const directives = new Map<string, DirectiveArgs>(\n existing?.fieldOptionsValue?.directives ?? [],\n );\n directives.set(directiveName, directiveArgs);\n const optionsValue: FieldOptionsValue = {\n alias: existing?.fieldOptionsValue?.alias,\n directives,\n };\n return rewriteLastFieldWithOptions(selection, lastField, optionsValue);\n};\n\nconst proxyHandler = (\n schemaType: SchemaType,\n): ProxyHandler<SelectionImpl<string, object, object>> => {\n const handler: ProxyHandler<SelectionImpl<string, object, object>> = {\n get: (\n target: SelectionImpl<string, object, object>,\n p: string | symbol,\n _receiver: unknown,\n ): unknown => {\n if (p === \"schemaType\") return schemaType;\n\n if (typeof p === \"string\") {\n // Built-in $-prefixed methods\n if (BUILT_DIRECTIVES.has(p)) {\n return new Proxy(DUMMY, methodHandler(target, handler, p));\n }\n // Known field\n else if (schemaType.fields.has(p)) {\n const field = schemaType.fields.get(p)!;\n\n // Association fields → callback pattern\n if (field.isAssociation || field.targetTypeName !== undefined) {\n return (...argArray: unknown[]) => {\n const targetSchemaType = resolveAssociationTarget(\n p,\n field.targetTypeName,\n schemaType.name,\n );\n let { args, childSelectionFactory, childSelection } =\n parseAssociationArgs(argArray);\n\n if (childSelectionFactory) {\n childSelection = childSelectionFactory(\n createChildSelectionProxy(\n targetSchemaType,\n (target as any)._enumInputMetadata,\n ),\n ) as typeof childSelection;\n }\n if (!childSelection) {\n throw new Error(`Field \"${p}\" requires a child selection`);\n }\n\n if (!args) {\n args = buildRequiredArgs(field.argGraphQLTypeMap);\n }\n\n return new Proxy(\n target.addField(p, args, childSelection),\n handler,\n );\n };\n }\n\n // Scalar with args → method\n if (field.isFunction) {\n return new Proxy(DUMMY, methodHandler(target, handler, p));\n }\n\n // Plain scalar → property access\n return new Proxy(target.addField(p), handler);\n }\n }\n return Reflect.get(target, p, target);\n },\n };\n return handler;\n};\n\n// ─── Method call proxy handler ────────────────────────────────────────\n\nconst methodHandler = (\n targetSelection: SelectionImpl<string, object, object>,\n handler: ProxyHandler<SelectionImpl<string, object, object>>,\n field: string,\n): ProxyHandler<Function> => {\n return {\n apply: (_1: Function, _2: unknown, argArray: unknown[]): unknown => {\n // $on(...) – inline fragment embedding\n if (field === \"$on\") {\n let childSelection: ExecutableSelection<string, object, object>;\n\n if (\n typeof argArray[0] === \"string\" &&\n typeof argArray[1] === \"function\"\n ) {\n const targetTypeName = argArray[0] as string;\n const builder = argArray[1] as (\n it: unknown,\n ) => ExecutableSelection<string, object, object>;\n const targetSchemaType = resolveRegisteredSchemaType(targetTypeName);\n if (!targetSchemaType) {\n throw new Error(\n `Cannot resolve schema type \"${targetTypeName}\" for $on`,\n );\n }\n childSelection = builder(\n createChildSelectionProxy(\n targetSchemaType,\n (targetSelection as any)._enumInputMetadata,\n ),\n );\n } else if (typeof argArray[0] === \"function\") {\n const builder = argArray[0] as (\n it: unknown,\n ) => ExecutableSelection<string, object, object>;\n const targetSchemaType = targetSelection.schemaType;\n childSelection = builder(\n createChildSelectionProxy(\n targetSchemaType,\n (targetSelection as any)._enumInputMetadata,\n ),\n );\n } else {\n throw new Error(\n \"$on requires a builder or (typeName, builder) arguments\",\n );\n }\n\n let parent: SelectionImpl<string, object, object> = targetSelection;\n if (\n targetSelection.schemaType.name !==\n runtimeOf(childSelection).schemaType.name\n ) {\n parent = targetSelection.addField(\"__typename\");\n }\n return new Proxy(\n parent.addEmbeddable(\n childSelection as SelectionImpl<string, object, object>,\n undefined,\n ),\n handler,\n );\n }\n\n // $use(fragment) – named fragment spread\n if (field === \"$use\") {\n const fragment = resolveValueOrThunk(\n argArray[0] as ValueOrThunk<\n FragmentSpread<string, string, object, object>\n >,\n );\n if (!fragment || !fragment[__fragment_spread]) {\n throw new Error(\"$use requires a fragment created by fragment$\");\n }\n const childSelection = fragment.selection as ExecutableSelection<\n string,\n object,\n object\n >;\n\n let parent: SelectionImpl<string, object, object> = targetSelection;\n if (\n targetSelection.schemaType.name !==\n runtimeOf(childSelection).schemaType.name\n ) {\n parent = targetSelection.addField(\"__typename\");\n }\n return new Proxy(\n parent.addEmbeddable(\n childSelection as SelectionImpl<string, object, object>,\n fragment.name,\n ),\n handler,\n );\n }\n\n // $omit(...fieldNames) – remove multiple fields\n if (field === \"$omit\") {\n let current: SelectionImpl<string, object, object> = targetSelection;\n for (const fieldName of argArray) {\n if (typeof fieldName === \"string\") {\n current = current.removeField(fieldName);\n }\n }\n return new Proxy(current, handler);\n }\n\n // $alias(alias) – rename the last selected field\n if (field === \"$alias\") {\n const alias = argArray[0] as string;\n const lastField = targetSelection.lastField;\n if (!lastField)\n throw new Error(\"$alias requires a preceding field selection\");\n const existing = findLastFieldSelection(targetSelection, lastField);\n const optionsValue: FieldOptionsValue = {\n alias,\n directives: new Map(existing?.fieldOptionsValue?.directives ?? []),\n };\n const current = rewriteLastFieldWithOptions(\n targetSelection,\n lastField,\n optionsValue,\n );\n return new Proxy(current, handler);\n }\n\n // $directive(directiveName, args?) – field-level if there is a last field, otherwise selection-level\n if (field === \"$directive\") {\n const lastField = targetSelection.lastField;\n if (!lastField) {\n return new Proxy(\n targetSelection.addDirective(\n argArray[0] as string,\n argArray[1] as DirectiveArgs,\n ),\n handler,\n );\n }\n const current = mergeLastFieldDirective(\n targetSelection,\n lastField,\n argArray[0] as string,\n argArray[1] as DirectiveArgs,\n );\n return new Proxy(current, handler);\n }\n\n // $include(condition) / $skip(condition)\n if (field === \"$include\" || field === \"$skip\") {\n const directiveName = field === \"$include\" ? \"include\" : \"skip\";\n const directiveArgs = { if: argArray[0] } as DirectiveArgs;\n const lastField = targetSelection.lastField;\n if (!lastField) {\n return new Proxy(\n targetSelection.addDirective(directiveName, directiveArgs),\n handler,\n );\n }\n const current = mergeLastFieldDirective(\n targetSelection,\n lastField,\n directiveName,\n directiveArgs,\n );\n return new Proxy(current, handler);\n }\n\n // Regular field method call\n let { args, child, optionsValue } = parseMethodArgs(argArray);\n\n // Auto-parameterize unset args\n if (!args) {\n const argMap =\n targetSelection.schemaType.ownFields.get(field)?.argGraphQLTypeMap;\n args = argMap ? buildRequiredArgs(argMap) : undefined;\n }\n\n return new Proxy(\n targetSelection.addField(field, args, child, optionsValue),\n handler,\n );\n },\n };\n};\n\n// ─── Sentinel ─────────────────────────────────────────────────────────\n\nconst DUMMY = () => {};\n\nexport const SELECTION_TARGET = new SelectionImpl(\n [\n createSchemaType(\"Any\", \"OBJECT\", [], []),\n new EnumInputMetadataBuilder().build(),\n undefined,\n ],\n false,\n \"\",\n);\n","export const cyrb53 = (str: string, seed: number = 0): string => {\n let h1 = 0xdeadbeef ^ seed;\n let h2 = 0x41c6ce57 ^ seed;\n for (let i = 0; i < str.length; i++) {\n const ch = str.charCodeAt(i);\n h1 = Math.imul(h1 ^ ch, 2654435761);\n h2 = Math.imul(h2 ^ ch, 1597334677);\n }\n h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507);\n h1 ^= Math.imul(h2 ^ (h2 >>> 13), 3266489909);\n h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507);\n h2 ^= Math.imul(h1 ^ (h1 >>> 13), 3266489909);\n return (4294967296 * (2097151 & h2) + (h1 >>> 0)).toString(36);\n};\n"],"mappings":"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"}
|
package/dist/node.cjs
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
+
const require_schema_loader = require('./schema-loader-dDSoNpTn.cjs');
|
|
3
|
+
|
|
4
|
+
exports.Generator = require_schema_loader.Generator;
|
|
5
|
+
exports.loadLocalSchema = require_schema_loader.loadLocalSchema;
|
|
6
|
+
exports.loadRemoteSchema = require_schema_loader.loadRemoteSchema;
|
package/dist/node.d.cts
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { t as CodegenOptions } from "./options-CaWo97vV.cjs";
|
|
2
|
+
import { GraphQLSchema } from "graphql";
|
|
3
|
+
|
|
4
|
+
//#region src/codegen/generator.d.ts
|
|
5
|
+
declare class Generator {
|
|
6
|
+
protected options: CodegenOptions;
|
|
7
|
+
constructor(options: CodegenOptions);
|
|
8
|
+
/** Resolved output directory (uses default if not configured) */
|
|
9
|
+
private get targetDir();
|
|
10
|
+
generate(): Promise<void>;
|
|
11
|
+
private createSelectionWriter;
|
|
12
|
+
private additionalExportedTypeNamesForSelection;
|
|
13
|
+
private generateSelectionTypes;
|
|
14
|
+
private generateInputTypes;
|
|
15
|
+
private generateEnumTypes;
|
|
16
|
+
private generateTypeHierarchy;
|
|
17
|
+
private generateEnumInputMetadata;
|
|
18
|
+
private writeSimpleIndex;
|
|
19
|
+
private generateAsyncRuntime;
|
|
20
|
+
private writeIndex;
|
|
21
|
+
/**
|
|
22
|
+
* Creates node_modules/@ptdgrp/typedgql/index.ts
|
|
23
|
+
* so users can import generated types and the root gateway via `import { G } from '@ptdgrp/typedgql'`.
|
|
24
|
+
* Also patches package.json exports for ESM/type resolution to point to the generated entry.
|
|
25
|
+
*/
|
|
26
|
+
private writePackageEntrypoint;
|
|
27
|
+
private patchPackageJsonForGeneratedEntrypoint;
|
|
28
|
+
private writePackageIndexCode;
|
|
29
|
+
private hasGeneratedEnums;
|
|
30
|
+
private hasGeneratedInputs;
|
|
31
|
+
private validateSchema;
|
|
32
|
+
}
|
|
33
|
+
//#endregion
|
|
34
|
+
//#region src/codegen/schema-loader.d.ts
|
|
35
|
+
declare function loadRemoteSchema(endpoint: string, headers?: {
|
|
36
|
+
[key: string]: string;
|
|
37
|
+
}): Promise<GraphQLSchema>;
|
|
38
|
+
declare function loadLocalSchema(location: string): Promise<GraphQLSchema>;
|
|
39
|
+
//#endregion
|
|
40
|
+
export { type CodegenOptions, Generator, loadLocalSchema, loadRemoteSchema };
|
|
41
|
+
//# sourceMappingURL=node.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.d.cts","names":[],"sources":["../src/codegen/generator.ts","../src/codegen/schema-loader.ts"],"mappings":";;;;cAsDa,SAAA;EAAA,UACW,OAAA,EAAS,cAAA;cAAT,OAAA,EAAS,cAAA;EADX;EAAA,YAIR,SAAA,CAAA;EAIN,QAAA,CAAA,GAAQ,OAAA;EAAA,QA8IN,qBAAA;EAAA,QASA,uCAAA;EAAA,QAOM,sBAAA;EAAA,QAmEA,kBAAA;EAAA,QAUA,iBAAA;EAAA,QAaA,qBAAA;EAAA,QAcA,yBAAA;EAAA,QAMA,gBAAA;EAAA,QAeA,oBAAA;EAAA,QAMA,UAAA;EAjSR;;;;;EAAA,QA6XQ,sBAAA;EAAA,QAaA,sCAAA;EAAA,QAuCN,qBAAA;EAAA,QA2EA,iBAAA;EAAA,QAeA,kBAAA;EAAA,QAiBA,cAAA;AAAA;;;iBCtlBY,gBAAA,CACpB,QAAA,UACA,OAAA;EAAA,CAAa,GAAA;AAAA,IACZ,OAAA,CAAQ,aAAA;AAAA,iBAuBW,eAAA,CACpB,QAAA,WACC,OAAA,CAAQ,aAAA"}
|
package/dist/node.d.mts
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { t as CodegenOptions } from "./options-D2L-tv7C.mjs";
|
|
2
|
+
import { GraphQLSchema } from "graphql";
|
|
3
|
+
|
|
4
|
+
//#region src/codegen/generator.d.ts
|
|
5
|
+
declare class Generator {
|
|
6
|
+
protected options: CodegenOptions;
|
|
7
|
+
constructor(options: CodegenOptions);
|
|
8
|
+
/** Resolved output directory (uses default if not configured) */
|
|
9
|
+
private get targetDir();
|
|
10
|
+
generate(): Promise<void>;
|
|
11
|
+
private createSelectionWriter;
|
|
12
|
+
private additionalExportedTypeNamesForSelection;
|
|
13
|
+
private generateSelectionTypes;
|
|
14
|
+
private generateInputTypes;
|
|
15
|
+
private generateEnumTypes;
|
|
16
|
+
private generateTypeHierarchy;
|
|
17
|
+
private generateEnumInputMetadata;
|
|
18
|
+
private writeSimpleIndex;
|
|
19
|
+
private generateAsyncRuntime;
|
|
20
|
+
private writeIndex;
|
|
21
|
+
/**
|
|
22
|
+
* Creates node_modules/@ptdgrp/typedgql/index.ts
|
|
23
|
+
* so users can import generated types and the root gateway via `import { G } from '@ptdgrp/typedgql'`.
|
|
24
|
+
* Also patches package.json exports for ESM/type resolution to point to the generated entry.
|
|
25
|
+
*/
|
|
26
|
+
private writePackageEntrypoint;
|
|
27
|
+
private patchPackageJsonForGeneratedEntrypoint;
|
|
28
|
+
private writePackageIndexCode;
|
|
29
|
+
private hasGeneratedEnums;
|
|
30
|
+
private hasGeneratedInputs;
|
|
31
|
+
private validateSchema;
|
|
32
|
+
}
|
|
33
|
+
//#endregion
|
|
34
|
+
//#region src/codegen/schema-loader.d.ts
|
|
35
|
+
declare function loadRemoteSchema(endpoint: string, headers?: {
|
|
36
|
+
[key: string]: string;
|
|
37
|
+
}): Promise<GraphQLSchema>;
|
|
38
|
+
declare function loadLocalSchema(location: string): Promise<GraphQLSchema>;
|
|
39
|
+
//#endregion
|
|
40
|
+
export { type CodegenOptions, Generator, loadLocalSchema, loadRemoteSchema };
|
|
41
|
+
//# sourceMappingURL=node.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.d.mts","names":[],"sources":["../src/codegen/generator.ts","../src/codegen/schema-loader.ts"],"mappings":";;;;cAsDa,SAAA;EAAA,UACW,OAAA,EAAS,cAAA;cAAT,OAAA,EAAS,cAAA;EADX;EAAA,YAIR,SAAA,CAAA;EAIN,QAAA,CAAA,GAAQ,OAAA;EAAA,QA8IN,qBAAA;EAAA,QASA,uCAAA;EAAA,QAOM,sBAAA;EAAA,QAmEA,kBAAA;EAAA,QAUA,iBAAA;EAAA,QAaA,qBAAA;EAAA,QAcA,yBAAA;EAAA,QAMA,gBAAA;EAAA,QAeA,oBAAA;EAAA,QAMA,UAAA;EAjSR;;;;;EAAA,QA6XQ,sBAAA;EAAA,QAaA,sCAAA;EAAA,QAuCN,qBAAA;EAAA,QA2EA,iBAAA;EAAA,QAeA,kBAAA;EAAA,QAiBA,cAAA;AAAA;;;iBCtlBY,gBAAA,CACpB,QAAA,UACA,OAAA;EAAA,CAAa,GAAA;AAAA,IACZ,OAAA,CAAQ,aAAA;AAAA,iBAuBW,eAAA,CACpB,QAAA,WACC,OAAA,CAAQ,aAAA"}
|
package/dist/node.mjs
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { GraphQLSchema } from "graphql";
|
|
2
|
+
|
|
3
|
+
//#region src/codegen/options.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Code generation options for typedgql.
|
|
6
|
+
*
|
|
7
|
+
* This interface is public API: each option controls how generated TypeScript
|
|
8
|
+
* files are emitted from a GraphQL schema.
|
|
9
|
+
*/
|
|
10
|
+
interface CodegenOptions {
|
|
11
|
+
/**
|
|
12
|
+
* Async schema loader used by codegen.
|
|
13
|
+
*
|
|
14
|
+
* Return a fully built `GraphQLSchema` from local SDL, remote introspection,
|
|
15
|
+
* or any custom source.
|
|
16
|
+
*/
|
|
17
|
+
readonly schemaLoader: () => Promise<GraphQLSchema>;
|
|
18
|
+
/**
|
|
19
|
+
* Output directory for generated files.
|
|
20
|
+
*
|
|
21
|
+
* If omitted, generator default path is used by caller.
|
|
22
|
+
*/
|
|
23
|
+
readonly targetDir?: string;
|
|
24
|
+
/**
|
|
25
|
+
* Indentation string used in generated files.
|
|
26
|
+
*
|
|
27
|
+
* @default " " (4 spaces)
|
|
28
|
+
*/
|
|
29
|
+
readonly indent?: string;
|
|
30
|
+
/**
|
|
31
|
+
* Whether generated object fields are writable.
|
|
32
|
+
*
|
|
33
|
+
* - `false` => emit `readonly` object properties in generated types.
|
|
34
|
+
* - `true` => emit mutable object properties.
|
|
35
|
+
*/
|
|
36
|
+
readonly objectEditable?: boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Whether generated array types are mutable.
|
|
39
|
+
*
|
|
40
|
+
* - `false` => emit `ReadonlyArray<T>`.
|
|
41
|
+
* - `true` => emit `Array<T>`.
|
|
42
|
+
*/
|
|
43
|
+
readonly arrayEditable?: boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Suffix used for generated selection interface names.
|
|
46
|
+
*
|
|
47
|
+
* Example: with suffix `"Selection"`, type `User` becomes `UserSelection`.
|
|
48
|
+
*
|
|
49
|
+
* @default "Selection"
|
|
50
|
+
*/
|
|
51
|
+
readonly selectionSuffix?: string;
|
|
52
|
+
/**
|
|
53
|
+
* GraphQL type names to exclude from selection generation.
|
|
54
|
+
*/
|
|
55
|
+
readonly excludedTypes?: ReadonlyArray<string>;
|
|
56
|
+
/**
|
|
57
|
+
* Scalar type mapping for generated TypeScript types.
|
|
58
|
+
*
|
|
59
|
+
* - String form: directly uses the provided TS type name.
|
|
60
|
+
* - Object form: uses `typeName` and emits an import from `importSource`.
|
|
61
|
+
*
|
|
62
|
+
* Example:
|
|
63
|
+
* `DateTime: { typeName: "DateTimeISO", importSource: "types/scalars" }`
|
|
64
|
+
*/
|
|
65
|
+
readonly scalarTypeMap?: {
|
|
66
|
+
readonly [key: string]: string | {
|
|
67
|
+
readonly typeName: string;
|
|
68
|
+
readonly importSource: string;
|
|
69
|
+
};
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* Override ID field name per GraphQL object/interface type.
|
|
73
|
+
*
|
|
74
|
+
* Key is GraphQL type name, value is field name treated as the ID field.
|
|
75
|
+
*/
|
|
76
|
+
readonly idFieldMap?: {
|
|
77
|
+
readonly [key: string]: string;
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* Exclude fields from default selection (`$$`) per type.
|
|
81
|
+
*
|
|
82
|
+
* Key is GraphQL type name, value is list of field names to skip.
|
|
83
|
+
*/
|
|
84
|
+
readonly defaultSelectionExcludeMap?: {
|
|
85
|
+
readonly [key: string]: string[];
|
|
86
|
+
};
|
|
87
|
+
/**
|
|
88
|
+
* Enum output strategy.
|
|
89
|
+
*
|
|
90
|
+
* - `false` / `undefined`: default enum writer behavior
|
|
91
|
+
* - `"string"`: generate string enum style
|
|
92
|
+
* - `"number"`: generate numeric enum style
|
|
93
|
+
* - `true`: enable enum generation with default mode
|
|
94
|
+
*/
|
|
95
|
+
readonly tsEnum?: boolean | "string" | "number";
|
|
96
|
+
}
|
|
97
|
+
//#endregion
|
|
98
|
+
export { CodegenOptions as t };
|
|
99
|
+
//# sourceMappingURL=options-CaWo97vV.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options-CaWo97vV.d.cts","names":[],"sources":["../src/codegen/options.ts"],"mappings":";;;;;AAQA;;;;UAAiB,cAAA;EA6CU;;;;;;EAAA,SAtChB,YAAA,QAAoB,OAAA,CAAQ,aAAA;EAY5B;;;;;EAAA,SANA,SAAA;EA0CA;;;;;EAAA,SApCA,MAAA;EAoDA;;;;;;EAAA,SA7CA,cAAA;;;;;;;WAOA,aAAA;;;;;;;;WAQA,eAAA;;;;WAIA,aAAA,GAAgB,aAAA;;;;;;;;;;WAUhB,aAAA;IAAA,UACG,GAAA;MAAA,SAEK,QAAA;MAAA,SAA2B,YAAA;IAAA;EAAA;;;;;;WAOnC,UAAA;IAAA,UAAyB,GAAA;EAAA;;;;;;WAMzB,0BAAA;IAAA,UAAyC,GAAA;EAAA;;;;;;;;;WASzC,MAAA;AAAA"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { GraphQLSchema } from "graphql";
|
|
2
|
+
|
|
3
|
+
//#region src/codegen/options.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Code generation options for typedgql.
|
|
6
|
+
*
|
|
7
|
+
* This interface is public API: each option controls how generated TypeScript
|
|
8
|
+
* files are emitted from a GraphQL schema.
|
|
9
|
+
*/
|
|
10
|
+
interface CodegenOptions {
|
|
11
|
+
/**
|
|
12
|
+
* Async schema loader used by codegen.
|
|
13
|
+
*
|
|
14
|
+
* Return a fully built `GraphQLSchema` from local SDL, remote introspection,
|
|
15
|
+
* or any custom source.
|
|
16
|
+
*/
|
|
17
|
+
readonly schemaLoader: () => Promise<GraphQLSchema>;
|
|
18
|
+
/**
|
|
19
|
+
* Output directory for generated files.
|
|
20
|
+
*
|
|
21
|
+
* If omitted, generator default path is used by caller.
|
|
22
|
+
*/
|
|
23
|
+
readonly targetDir?: string;
|
|
24
|
+
/**
|
|
25
|
+
* Indentation string used in generated files.
|
|
26
|
+
*
|
|
27
|
+
* @default " " (4 spaces)
|
|
28
|
+
*/
|
|
29
|
+
readonly indent?: string;
|
|
30
|
+
/**
|
|
31
|
+
* Whether generated object fields are writable.
|
|
32
|
+
*
|
|
33
|
+
* - `false` => emit `readonly` object properties in generated types.
|
|
34
|
+
* - `true` => emit mutable object properties.
|
|
35
|
+
*/
|
|
36
|
+
readonly objectEditable?: boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Whether generated array types are mutable.
|
|
39
|
+
*
|
|
40
|
+
* - `false` => emit `ReadonlyArray<T>`.
|
|
41
|
+
* - `true` => emit `Array<T>`.
|
|
42
|
+
*/
|
|
43
|
+
readonly arrayEditable?: boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Suffix used for generated selection interface names.
|
|
46
|
+
*
|
|
47
|
+
* Example: with suffix `"Selection"`, type `User` becomes `UserSelection`.
|
|
48
|
+
*
|
|
49
|
+
* @default "Selection"
|
|
50
|
+
*/
|
|
51
|
+
readonly selectionSuffix?: string;
|
|
52
|
+
/**
|
|
53
|
+
* GraphQL type names to exclude from selection generation.
|
|
54
|
+
*/
|
|
55
|
+
readonly excludedTypes?: ReadonlyArray<string>;
|
|
56
|
+
/**
|
|
57
|
+
* Scalar type mapping for generated TypeScript types.
|
|
58
|
+
*
|
|
59
|
+
* - String form: directly uses the provided TS type name.
|
|
60
|
+
* - Object form: uses `typeName` and emits an import from `importSource`.
|
|
61
|
+
*
|
|
62
|
+
* Example:
|
|
63
|
+
* `DateTime: { typeName: "DateTimeISO", importSource: "types/scalars" }`
|
|
64
|
+
*/
|
|
65
|
+
readonly scalarTypeMap?: {
|
|
66
|
+
readonly [key: string]: string | {
|
|
67
|
+
readonly typeName: string;
|
|
68
|
+
readonly importSource: string;
|
|
69
|
+
};
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* Override ID field name per GraphQL object/interface type.
|
|
73
|
+
*
|
|
74
|
+
* Key is GraphQL type name, value is field name treated as the ID field.
|
|
75
|
+
*/
|
|
76
|
+
readonly idFieldMap?: {
|
|
77
|
+
readonly [key: string]: string;
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* Exclude fields from default selection (`$$`) per type.
|
|
81
|
+
*
|
|
82
|
+
* Key is GraphQL type name, value is list of field names to skip.
|
|
83
|
+
*/
|
|
84
|
+
readonly defaultSelectionExcludeMap?: {
|
|
85
|
+
readonly [key: string]: string[];
|
|
86
|
+
};
|
|
87
|
+
/**
|
|
88
|
+
* Enum output strategy.
|
|
89
|
+
*
|
|
90
|
+
* - `false` / `undefined`: default enum writer behavior
|
|
91
|
+
* - `"string"`: generate string enum style
|
|
92
|
+
* - `"number"`: generate numeric enum style
|
|
93
|
+
* - `true`: enable enum generation with default mode
|
|
94
|
+
*/
|
|
95
|
+
readonly tsEnum?: boolean | "string" | "number";
|
|
96
|
+
}
|
|
97
|
+
//#endregion
|
|
98
|
+
export { CodegenOptions as t };
|
|
99
|
+
//# sourceMappingURL=options-D2L-tv7C.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options-D2L-tv7C.d.mts","names":[],"sources":["../src/codegen/options.ts"],"mappings":";;;;;AAQA;;;;UAAiB,cAAA;EA6CU;;;;;;EAAA,SAtChB,YAAA,QAAoB,OAAA,CAAQ,aAAA;EAY5B;;;;;EAAA,SANA,SAAA;EA0CA;;;;;EAAA,SApCA,MAAA;EAoDA;;;;;;EAAA,SA7CA,cAAA;;;;;;;WAOA,aAAA;;;;;;;;WAQA,eAAA;;;;WAIA,aAAA,GAAgB,aAAA;;;;;;;;;;WAUhB,aAAA;IAAA,UACG,GAAA;MAAA,SAEK,QAAA;MAAA,SAA2B,YAAA;IAAA;EAAA;;;;;;WAOnC,UAAA;IAAA,UAAyB,GAAA;EAAA;;;;;;WAMzB,0BAAA;IAAA,UAAyC,GAAA;EAAA;;;;;;;;;WASzC,MAAA;AAAA"}
|