@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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-loader-D4z1rOMz.mjs","names":["COMMENT","ASYNC_CODE"],"sources":["../src/codegen/utils.ts","../src/codegen/writer.ts","../src/codegen/imports.ts","../src/codegen/writers/selection.ts","../src/codegen/writers/enum.ts","../src/codegen/writers/input.ts","../src/codegen/writers/types.ts","../src/codegen/type-hierarchy-graph.ts","../src/codegen/writers/enum-input-metadata.ts","../src/codegen/generator.ts","../src/codegen/schema-loader.ts"],"sourcesContent":["import {\n GraphQLInterfaceType,\n GraphQLList,\n GraphQLNonNull,\n GraphQLObjectType,\n GraphQLType,\n GraphQLUnionType,\n} from \"graphql\";\nimport { CodegenOptions } from \"./options\";\n\n/**\n * Unwrap NonNull/List wrappers and return the underlying composite type,\n * or `undefined` if the base type is a scalar/enum/input.\n */\nexport function targetTypeOf(\n type: GraphQLType,\n): GraphQLObjectType | GraphQLInterfaceType | GraphQLUnionType | undefined {\n if (type instanceof GraphQLNonNull) {\n return targetTypeOf(type.ofType);\n }\n if (type instanceof GraphQLList) {\n return targetTypeOf(type.ofType);\n }\n if (\n type instanceof GraphQLObjectType ||\n type instanceof GraphQLInterfaceType ||\n type instanceof GraphQLUnionType\n ) {\n return type;\n }\n return undefined;\n}\n\n/**\n * Lower-case the first character of a name for use as a variable/instance prefix.\n * e.g. \"QuerySelection\" → \"querySelection\"\n */\nexport function instancePrefix(name: string): string {\n return name.substring(0, 1).toLowerCase() + name.substring(1);\n}\n\n/**\n * Check whether a type name is in the user's exclusion list.\n */\nexport function isExcludedTypeName(\n options: CodegenOptions,\n typeName: string | undefined,\n) {\n if (typeName == undefined) {\n return false;\n }\n const list = options.excludedTypes;\n return list !== undefined && list.findIndex((v) => v == typeName) !== -1;\n}\n\n/**\n * Convert a PascalCase or camelCase name to kebab-case.\n * e.g. \"TaskSelection\" → \"task-selection\", \"EnumInputMetadata\" → \"enum-input-metadata\"\n */\nexport function toKebabCase(name: string): string {\n return name\n .replace(/([A-Z]+)([A-Z][a-z])/g, \"$1-$2\")\n .replace(/([a-z\\d])([A-Z])/g, \"$1-$2\")\n .toLowerCase();\n}\n","import { WriteStream } from \"fs\";\nimport {\n GraphQLEnumType,\n GraphQLField,\n GraphQLInputObjectType,\n GraphQLInterfaceType,\n GraphQLList,\n GraphQLNamedType,\n GraphQLNonNull,\n GraphQLObjectType,\n GraphQLScalarType,\n GraphQLType,\n GraphQLUnionType,\n} from \"graphql\";\nimport { CodegenOptions } from \"./options\";\n\nexport type ScopeType = \"blank\" | \"block\" | \"parameters\" | \"array\" | \"generic\";\n\nexport type ImportingBehavior = \"self\" | \"same_dir\" | \"other_dir\";\n\nexport interface ScopeArgs {\n readonly type: ScopeType;\n readonly multiLines?: boolean;\n readonly prefix?: string;\n readonly suffix?: string;\n}\n\n// ─── Lookup tables ───────────────────────────────────────────────────\n\nconst SCOPE_BRACKETS: Record<\n ScopeType,\n readonly [open: string, close: string]\n> = {\n blank: [\"\", \"\"],\n block: [\"{\", \"}\"],\n parameters: [\"(\", \")\"],\n array: [\"[\", \"]\"],\n generic: [\"<\", \">\"],\n};\n\nconst SCALAR_MAP: Record<string, \"string\" | \"number\" | \"boolean\"> = {\n Boolean: \"boolean\",\n Byte: \"number\",\n Short: \"number\",\n Int: \"number\",\n Long: \"number\",\n Float: \"number\",\n Double: \"number\",\n BigInteger: \"number\",\n BigDecimal: \"number\",\n String: \"string\",\n Date: \"string\",\n DateTime: \"string\",\n LocalDate: \"string\",\n LocalDateTime: \"string\",\n ID: \"string\",\n UUID: \"string\",\n};\n\n// ─── Scope state ─────────────────────────────────────────────────────\n\ninterface ScopeState {\n readonly type: ScopeType;\n readonly multiLines: boolean;\n dirty: boolean;\n}\n\nconst GLOBAL_SCOPE: ScopeState = {\n type: \"blank\",\n multiLines: true,\n dirty: true,\n};\n\n// ─── Writer ──────────────────────────────────────────────────────────\n\nexport abstract class Writer {\n protected readonly indent: string;\n\n private readonly scopes: ScopeState[] = [];\n private needIndent = false;\n private readonly importStatements = new Set<string>();\n private readonly importedTypes = new Set<GraphQLNamedType>();\n private readonly importedScalarTypes = new Map<string, Set<string>>();\n private importFinalized = false;\n\n constructor(\n private readonly stream: WriteStream,\n protected readonly options: CodegenOptions,\n ) {\n this.indent = options.indent ?? \" \";\n }\n\n /**\n * Two-phase render lifecycle:\n * 1) collect imports\n * 2) flush imports and emit body\n */\n write(): void {\n this.prepareImports();\n this.importFinalized = true;\n\n for (const stmt of Array.from(this.importStatements).sort()) {\n this.stream.write(stmt);\n this.stream.write(\"\\n\");\n }\n\n this.writeNamedTypeImports();\n this.writeMappedScalarImports();\n\n if (this.hasAnyImports) {\n this.stream.write(\"\\n\");\n }\n\n this.writeCode();\n }\n\n /**\n * Hook for subclasses to register all imports before body generation.\n */\n protected prepareImports(): void {}\n\n protected abstract writeCode(): void;\n\n // ── Import helpers ──\n\n protected importFieldTypes(field: GraphQLField<unknown, unknown>): void {\n this.importType(field.type);\n for (const arg of field.args) {\n this.importType(arg.type);\n }\n }\n\n /**\n * Registers type imports by recursively unwrapping list/non-null wrappers.\n */\n protected importType(type: GraphQLType): void {\n if (this.importFinalized) {\n throw new Error(\"Cannot import after write phase has started\");\n }\n const namedType = unwrapType(type);\n if (\n namedType instanceof GraphQLInputObjectType ||\n namedType instanceof GraphQLEnumType\n ) {\n this.importedTypes.add(namedType);\n return;\n }\n if (namedType instanceof GraphQLScalarType && this.options.scalarTypeMap) {\n const mapped = this.options.scalarTypeMap[namedType.name];\n if (typeof mapped !== \"object\") return;\n const set =\n this.importedScalarTypes.get(mapped.importSource) ?? new Set();\n set.add(mapped.typeName);\n this.importedScalarTypes.set(mapped.importSource, set);\n }\n }\n\n protected importStatement(statement: string): void {\n if (this.importFinalized) {\n throw new Error(\"Cannot import after write phase has started\");\n }\n let stmt = statement.trimEnd();\n if (stmt.endsWith(\"\\n\")) stmt = stmt.slice(0, -1);\n if (!stmt.endsWith(\";\")) stmt += \";\";\n this.importStatements.add(stmt);\n }\n\n protected importingBehavior(_type: GraphQLNamedType): ImportingBehavior {\n return \"other_dir\";\n }\n\n // ── Scope management ──\n\n protected enter(type: ScopeType, multiLines = false, prefix?: string): void {\n if (prefix) this.text(prefix);\n const [open] = SCOPE_BRACKETS[type];\n if (open) this.text(open);\n if (multiLines) this.text(\"\\n\");\n this.scopes.push({ type, multiLines, dirty: false });\n }\n\n protected leave(suffix?: string): void {\n const scope = this.scopes.pop();\n if (!scope) throw new Error(\"No scope to leave\");\n if (scope.multiLines && !this.needIndent) this.text(\"\\n\");\n const [, close] = SCOPE_BRACKETS[scope.type];\n if (close) this.text(close);\n if (suffix) this.text(suffix);\n }\n\n protected scope(args: ScopeArgs, action: () => void): void {\n this.enter(args.type, args.multiLines === true, args.prefix);\n action();\n this.leave(args.suffix);\n }\n\n protected separator(value?: string): void {\n const scope = this.currentScope;\n if (scope.dirty) {\n if (value) {\n this.text(value);\n } else if (scope.type === \"parameters\" || scope.type === \"generic\") {\n this.text(\", \");\n }\n if (scope.multiLines) this.text(\"\\n\");\n }\n }\n\n // ── Text output ──\n\n protected text(value: string): void {\n const lines = value.split(\"\\n\");\n lines.forEach((line, idx) => {\n if (line) {\n if (this.needIndent) {\n this.flushIndent();\n this.needIndent = false;\n }\n this.stream.write(line);\n this.currentScope.dirty = true;\n }\n if (idx < lines.length - 1) {\n this.stream.write(\"\\n\");\n this.needIndent = true;\n }\n });\n }\n\n protected str(value: string): void {\n this.text(`'${value}'`);\n }\n\n // ── Type references ──\n\n protected variableDecl(\n name: string,\n type: GraphQLType,\n overrideObjectTypeName?: string,\n ): void {\n this.text(name);\n if (!(type instanceof GraphQLNonNull)) this.text(\"?\");\n this.text(\": \");\n this.typeRef(type, overrideObjectTypeName);\n }\n\n /**\n * Renders a GraphQL type as TypeScript type syntax.\n */\n protected typeRef(\n type: GraphQLType,\n objectRender?:\n | string\n | ((\n type: GraphQLObjectType | GraphQLInterfaceType,\n field: GraphQLField<any, any>,\n ) => boolean),\n ): void {\n if (type instanceof GraphQLNonNull) {\n this.typeRef(type.ofType, objectRender);\n return;\n }\n if (type instanceof GraphQLList) {\n const arrayType = this.options.arrayEditable ? \"Array\" : \"ReadonlyArray\";\n this.typeApplication(arrayType, () => {\n this.typeRef(type.ofType, objectRender);\n if (!(type.ofType instanceof GraphQLNonNull)) this.text(\" | undefined\");\n });\n return;\n }\n if (type instanceof GraphQLScalarType) {\n const mapped =\n this.options.scalarTypeMap?.[type.name] ?? SCALAR_MAP[type.name];\n if (!mapped) throw new Error(`Unknown scalar type ${type.name}`);\n this.text(typeof mapped === \"string\" ? mapped : mapped.typeName);\n return;\n }\n if (\n type instanceof GraphQLEnumType ||\n type instanceof GraphQLInputObjectType\n ) {\n this.text(type.name);\n return;\n }\n if (\n type instanceof GraphQLObjectType ||\n type instanceof GraphQLInterfaceType ||\n type instanceof GraphQLUnionType\n ) {\n this.writeObjectLikeTypeRef(type, objectRender);\n return;\n }\n const neverType: never = type;\n throw new Error(\n `Unsupported GraphQL type ${(neverType as GraphQLType).toString()}`,\n );\n }\n\n /**\n * Renders a GraphQL type in SDL notation, e.g. `[User!]!`.\n */\n protected gqlTypeRef(type: GraphQLType): void {\n if (type instanceof GraphQLNonNull) {\n this.gqlTypeRef(type.ofType);\n this.text(\"!\");\n return;\n }\n if (type instanceof GraphQLList) {\n this.text(\"[\");\n this.gqlTypeRef(type.ofType);\n this.text(\"]\");\n return;\n }\n if (type instanceof GraphQLUnionType) {\n this.writeUnion(type.getTypes().map((itemType) => itemType.name));\n return;\n }\n this.text((type as GraphQLNamedType).name);\n }\n\n protected isUnderGlobalDir(): boolean {\n return false;\n }\n\n // ── Private ──\n\n private writeNamedTypeImports(): void {\n const sortedTypes = Array.from(this.importedTypes).sort((a, b) =>\n a.name.localeCompare(b.name),\n );\n for (const importedType of sortedTypes) {\n const behavior = this.importingBehavior(importedType);\n if (behavior === \"self\") continue;\n const from = this.resolveTypeImportPath(importedType, behavior);\n this.stream.write(`import type {${importedType.name}} from '${from}';\\n`);\n }\n }\n\n private writeMappedScalarImports(): void {\n if (this.importedScalarTypes.size === 0) return;\n const sourcePrefix = this.isUnderGlobalDir() ? \"../\" : \"../../\";\n const sortedEntries = Array.from(this.importedScalarTypes.entries()).sort(\n (a, b) => a[0].localeCompare(b[0]),\n );\n for (const [importSource, typeNames] of sortedEntries) {\n this.stream.write(\n `import type { ${Array.from(typeNames).sort().join(\", \")} } from '${sourcePrefix}${importSource}';\\n`,\n );\n }\n }\n\n protected typeApplication(typeName: string, renderTypeArg: () => void): void {\n this.text(`${typeName}<`);\n renderTypeArg();\n this.text(\">\");\n }\n\n private resolveTypeImportPath(\n importedType: GraphQLNamedType,\n behavior: Exclude<ImportingBehavior, \"self\">,\n ): string {\n if (behavior === \"same_dir\") return \".\";\n const subDir = this.typeSubDir(importedType);\n return this.isUnderGlobalDir() ? `./${subDir}` : `../${subDir}`;\n }\n\n private typeSubDir(\n importedType: GraphQLNamedType,\n ): \"inputs\" | \"enums\" | \"selections\" {\n if (importedType instanceof GraphQLInputObjectType) return \"inputs\";\n if (importedType instanceof GraphQLEnumType) return \"enums\";\n return \"selections\";\n }\n\n private writeObjectLikeTypeRef(\n type: GraphQLObjectType | GraphQLInterfaceType | GraphQLUnionType,\n objectRender?:\n | string\n | ((\n type: GraphQLObjectType | GraphQLInterfaceType,\n field: GraphQLField<any, any>,\n ) => boolean),\n ): void {\n if (typeof objectRender === \"string\") {\n this.text(objectRender);\n return;\n }\n if (type instanceof GraphQLUnionType) {\n this.writeUnion(type.getTypes().map((itemType) => itemType.name));\n return;\n }\n if (typeof objectRender !== \"function\") {\n this.text(type.name);\n return;\n }\n this.scope({ type: \"block\", multiLines: true }, () => {\n for (const [fieldName, field] of Object.entries(type.getFields())) {\n if (!objectRender(type, field)) continue;\n this.separator(\", \");\n this.text(\"readonly \");\n this.text(fieldName);\n this.text(\": \");\n this.typeRef(field.type, objectRender);\n }\n });\n }\n\n private get hasAnyImports(): boolean {\n return (\n this.importStatements.size !== 0 ||\n this.importedTypes.size !== 0 ||\n this.importedScalarTypes.size !== 0\n );\n }\n\n private writeUnion(members: readonly string[]): void {\n this.enter(\"blank\");\n for (const member of members) {\n this.separator(\" | \");\n this.text(member);\n }\n this.leave();\n }\n\n private flushIndent(): void {\n for (const scope of this.scopes) {\n if (scope.multiLines) this.stream.write(this.indent);\n }\n }\n\n private get currentScope(): ScopeState {\n return this.scopes.at(-1) ?? GLOBAL_SCOPE;\n }\n}\n\nfunction unwrapType(type: GraphQLType): GraphQLNamedType {\n if (type instanceof GraphQLNonNull || type instanceof GraphQLList) {\n return unwrapType(type.ofType);\n }\n return type as GraphQLNamedType;\n}\n","export type JSImportKind = \"type\" | \"value\";\n\nexport interface JSImportSpec {\n readonly source: string;\n readonly kind: JSImportKind;\n}\n\nexport type JSImportSourceMap<TSymbol extends string = string> = Readonly<\n Record<TSymbol, JSImportSpec>\n>;\n\n/**\n * Shared import collector for codegen writers.\n *\n * Responsibilities:\n * - normalize imports by source\n * - deduplicate symbols\n * - keep emitted import statements stable (sorted)\n */\nexport class JSImportCollector<TSymbol extends string = string> {\n private readonly typeBySource = new Map<string, Set<string>>();\n private readonly valueBySource = new Map<string, Set<string>>();\n private readonly sideEffects = new Set<string>();\n\n constructor(\n private readonly sink: (stmt: string) => void,\n private readonly sourceMap: JSImportSourceMap<TSymbol>,\n ) {}\n\n useMapped(symbol: TSymbol): void {\n const spec = this.sourceMap[symbol];\n if (spec.kind === \"type\") {\n this.useType(spec.source, symbol);\n } else {\n this.useValue(spec.source, symbol);\n }\n }\n\n useType(source: string, symbol: string): void {\n this.collect(this.typeBySource, source, symbol);\n }\n\n useValue(source: string, symbol: string): void {\n this.collect(this.valueBySource, source, symbol);\n }\n\n useSideEffect(source: string): void {\n this.sideEffects.add(source);\n }\n\n emit(): void {\n for (const [source, symbols] of this.sorted(this.typeBySource)) {\n this.sink(\n `import type { ${Array.from(symbols).sort().join(\", \")} } from '${source}';`,\n );\n }\n for (const [source, symbols] of this.sorted(this.valueBySource)) {\n this.sink(\n `import { ${Array.from(symbols).sort().join(\", \")} } from '${source}';`,\n );\n }\n for (const source of Array.from(this.sideEffects).sort()) {\n this.sink(`import '${source}';`);\n }\n }\n\n private collect(\n map: Map<string, Set<string>>,\n source: string,\n symbol: string,\n ): void {\n const set = map.get(source) ?? new Set<string>();\n set.add(symbol);\n map.set(source, set);\n }\n\n private sorted(\n map: Map<string, Set<string>>,\n ): Array<[source: string, symbols: Set<string>]> {\n return Array.from(map.entries()).sort((a, b) => a[0].localeCompare(b[0]));\n }\n}\n\nconst RUNTIME_ENTRY_SOURCE = \"../../dist/index.mjs\";\nconst TYPE_HIERARCHY_SOURCE = \"../type-hierarchy\";\nconst ENUM_INPUT_METADATA_SOURCE = \"../enum-input-metadata\";\n\nexport const CODEGEN_IMPORT_SOURCE_MAP = {\n AcceptableVariables: { source: RUNTIME_ENTRY_SOURCE, kind: \"type\" },\n UnresolvedVariables: { source: RUNTIME_ENTRY_SOURCE, kind: \"type\" },\n DirectiveArgs: { source: RUNTIME_ENTRY_SOURCE, kind: \"type\" },\n Selection: { source: RUNTIME_ENTRY_SOURCE, kind: \"type\" },\n ValueOrThunk: { source: RUNTIME_ENTRY_SOURCE, kind: \"type\" },\n FragmentSpread: { source: RUNTIME_ENTRY_SOURCE, kind: \"type\" },\n createSelection: { source: RUNTIME_ENTRY_SOURCE, kind: \"value\" },\n withOperationName: { source: RUNTIME_ENTRY_SOURCE, kind: \"value\" },\n createSchemaType: { source: RUNTIME_ENTRY_SOURCE, kind: \"value\" },\n registerSchemaTypeFactory: { source: RUNTIME_ENTRY_SOURCE, kind: \"value\" },\n resolveRegisteredSchemaType: { source: RUNTIME_ENTRY_SOURCE, kind: \"value\" },\n ENUM_INPUT_METADATA: { source: ENUM_INPUT_METADATA_SOURCE, kind: \"value\" },\n WithTypeName: { source: TYPE_HIERARCHY_SOURCE, kind: \"type\" },\n ImplementationType: { source: TYPE_HIERARCHY_SOURCE, kind: \"type\" },\n EnumInputMetadataBuilder: {\n source: \"../dist/index.mjs\",\n kind: \"value\",\n },\n} as const satisfies JSImportSourceMap;\n\nexport type CodegenImportSymbol = keyof typeof CODEGEN_IMPORT_SOURCE_MAP;\n\nexport type SelectionImportSymbol = Extract<\n CodegenImportSymbol,\n | \"AcceptableVariables\"\n | \"UnresolvedVariables\"\n | \"DirectiveArgs\"\n | \"Selection\"\n | \"ValueOrThunk\"\n | \"FragmentSpread\"\n | \"createSelection\"\n | \"withOperationName\"\n | \"createSchemaType\"\n | \"registerSchemaTypeFactory\"\n | \"resolveRegisteredSchemaType\"\n | \"ENUM_INPUT_METADATA\"\n | \"WithTypeName\"\n | \"ImplementationType\"\n>;\n\nexport type EnumInputMetadataWriterImportSymbol = Extract<\n CodegenImportSymbol,\n \"EnumInputMetadataBuilder\"\n>;\n","import { WriteStream } from \"fs\";\nimport {\n GraphQLArgument,\n GraphQLField,\n GraphQLFieldMap,\n GraphQLInterfaceType,\n GraphQLList,\n GraphQLNamedType,\n GraphQLNonNull,\n GraphQLObjectType,\n GraphQLType,\n GraphQLUnionType,\n} from \"graphql\";\nimport {\n targetTypeOf,\n instancePrefix,\n isExcludedTypeName,\n toKebabCase,\n} from \"../utils\";\nimport { CodegenOptions } from \"../options\";\nimport { ImportingBehavior, Writer } from \"../writer\";\nimport { SelectionContext } from \"../selection-context\";\nimport {\n CODEGEN_IMPORT_SOURCE_MAP,\n JSImportCollector,\n SelectionImportSymbol,\n} from \"../imports\";\n\ntype FieldCategory = \"SCALAR\" | \"LIST\" | \"REFERENCE\" | \"ID\";\n\nexport class SelectionWriter extends Writer {\n protected readonly selectionTypeName: string;\n\n protected readonly defaultSelectionProps: string[];\n\n readonly emptySelectionName: string | undefined;\n\n readonly defaultSelectionName: string | undefined;\n\n readonly fieldMap: GraphQLFieldMap<any, any>;\n\n protected fieldArgsMap: Map<string, GraphQLArgument[]>;\n\n protected fieldCategoryMap: Map<string, FieldCategory>;\n\n protected hasArgs: boolean;\n\n private _declaredFieldNames?: ReadonlySet<string>;\n\n constructor(\n protected modelType:\n | GraphQLObjectType\n | GraphQLInterfaceType\n | GraphQLUnionType,\n protected ctx: SelectionContext,\n stream: WriteStream,\n options: CodegenOptions,\n ) {\n super(stream, options);\n\n this.selectionTypeName = `${this.modelType.name}${options.selectionSuffix ?? \"Selection\"}`;\n\n this.fieldMap = this.resolveFieldMap(modelType, options);\n const analysis = this.analyzeFields(this.fieldMap, modelType, options);\n this.defaultSelectionProps = analysis.defaultSelectionProps;\n this.fieldArgsMap = analysis.fieldArgsMap;\n this.fieldCategoryMap = analysis.fieldCategoryMap;\n this.hasArgs = analysis.hasArgs;\n\n if (isOperationRootTypeName(this.modelType.name)) {\n const prefix = instancePrefix(this.modelType.name);\n this.emptySelectionName = `${prefix}$`;\n this.defaultSelectionName =\n this.defaultSelectionProps.length !== 0 ? `${prefix}$$` : undefined;\n } else {\n this.emptySelectionName = undefined;\n this.defaultSelectionName = undefined;\n }\n }\n\n private resolveFieldMap(\n modelType: GraphQLObjectType | GraphQLInterfaceType | GraphQLUnionType,\n options: CodegenOptions,\n ): GraphQLFieldMap<any, any> {\n if (modelType instanceof GraphQLUnionType) {\n return this.sharedUnionFields(modelType);\n }\n if (options.excludedTypes === undefined) {\n return modelType.getFields();\n }\n const filteredFieldMap: GraphQLFieldMap<any, any> = {};\n for (const [fieldName, field] of Object.entries(modelType.getFields())) {\n const targetTypeName = targetTypeOf(field.type)?.name;\n if (!isExcludedTypeName(options, targetTypeName)) {\n filteredFieldMap[fieldName] = field;\n }\n }\n return filteredFieldMap;\n }\n\n private sharedUnionFields(\n unionType: GraphQLUnionType,\n ): GraphQLFieldMap<any, any> {\n const memberTypes = unionType.getTypes();\n const memberCount = memberTypes.length;\n if (memberCount === 0) return {};\n\n const fieldCounts = new Map<string, number>();\n for (const type of memberTypes) {\n for (const fieldName of Object.keys(type.getFields())) {\n fieldCounts.set(fieldName, (fieldCounts.get(fieldName) ?? 0) + 1);\n }\n }\n\n const shared: GraphQLFieldMap<any, any> = {};\n for (const [fieldName, field] of Object.entries(\n memberTypes[0]!.getFields(),\n )) {\n if (fieldCounts.get(fieldName) === memberCount) {\n shared[fieldName] = field;\n }\n }\n return shared;\n }\n\n private analyzeFields(\n fieldMap: GraphQLFieldMap<any, any>,\n modelType: GraphQLObjectType | GraphQLInterfaceType | GraphQLUnionType,\n options: CodegenOptions,\n ): {\n defaultSelectionProps: string[];\n fieldArgsMap: Map<string, GraphQLArgument[]>;\n fieldCategoryMap: Map<string, FieldCategory>;\n hasArgs: boolean;\n } {\n const defaultSelectionProps: string[] = [];\n const fieldArgsMap = new Map<string, GraphQLArgument[]>();\n const fieldCategoryMap = new Map<string, FieldCategory>();\n let hasArgs = false;\n\n for (const [fieldName, field] of Object.entries(fieldMap)) {\n if (this.isDefaultSelectionField(fieldName, field, modelType, options)) {\n defaultSelectionProps.push(fieldName);\n }\n if (field.args.length !== 0) {\n hasArgs = true;\n fieldArgsMap.set(fieldName, [...field.args]);\n }\n\n const category = this.fieldCategory(field);\n if (category !== undefined) {\n fieldCategoryMap.set(fieldName, category);\n }\n }\n\n return { defaultSelectionProps, fieldArgsMap, fieldCategoryMap, hasArgs };\n }\n\n private isDefaultSelectionField(\n fieldName: string,\n field: GraphQLField<unknown, unknown>,\n modelType: GraphQLObjectType | GraphQLInterfaceType | GraphQLUnionType,\n options: CodegenOptions,\n ): boolean {\n if (isOperationRootTypeName(this.modelType.name)) return false;\n if (targetTypeOf(field.type) !== undefined) return false;\n if (field.args.length !== 0) return false;\n if (field.deprecationReason) return false;\n\n const excludes = options.defaultSelectionExcludeMap?.[modelType.name];\n return !excludes?.includes(fieldName);\n }\n\n private fieldCategory(\n field: GraphQLField<unknown, unknown>,\n ): FieldCategory | undefined {\n const fieldCoreType =\n field.type instanceof GraphQLNonNull ? field.type.ofType : field.type;\n if (this.ctx.embeddedTypes.has(fieldCoreType)) return \"SCALAR\";\n\n if (fieldCoreType instanceof GraphQLList) {\n const elementType =\n fieldCoreType.ofType instanceof GraphQLNonNull\n ? fieldCoreType.ofType.ofType\n : fieldCoreType.ofType;\n if (\n elementType instanceof GraphQLObjectType ||\n elementType instanceof GraphQLInterfaceType ||\n elementType instanceof GraphQLUnionType\n ) {\n return \"LIST\";\n }\n return undefined;\n }\n\n if (\n fieldCoreType instanceof GraphQLObjectType ||\n fieldCoreType instanceof GraphQLInterfaceType ||\n fieldCoreType instanceof GraphQLUnionType\n ) {\n return \"REFERENCE\";\n }\n if (this.ctx.idFieldMap.get(this.modelType) === field) return \"ID\";\n return \"SCALAR\";\n }\n\n protected prepareImports() {\n const imports = new JSImportCollector<SelectionImportSymbol>(\n (stmt) => this.importStatement(stmt),\n CODEGEN_IMPORT_SOURCE_MAP,\n );\n\n imports.useMapped(\"DirectiveArgs\");\n imports.useMapped(\"Selection\");\n if (this.hasArgs) {\n imports.useMapped(\"AcceptableVariables\");\n imports.useMapped(\"UnresolvedVariables\");\n }\n\n imports.useMapped(\"createSchemaType\");\n imports.useMapped(\"registerSchemaTypeFactory\");\n const superTypesForResolve = this.ctx.typeHierarchy.upcastTypeMap.get(\n this.modelType,\n );\n if (\n isOperationRootTypeName(this.modelType.name) ||\n superTypesForResolve?.size\n ) {\n imports.useMapped(\"resolveRegisteredSchemaType\");\n }\n if (isOperationRootTypeName(this.modelType.name)) {\n imports.useMapped(\"createSelection\");\n imports.useMapped(\"ENUM_INPUT_METADATA\");\n imports.useMapped(\"withOperationName\");\n }\n if (!isOperationRootTypeName(this.modelType.name)) {\n imports.useMapped(\"WithTypeName\");\n imports.useMapped(\"ImplementationType\");\n imports.useMapped(\"ValueOrThunk\");\n imports.useMapped(\"FragmentSpread\");\n }\n for (const field of Object.values(this.fieldMap)) {\n this.importFieldTypes(field);\n }\n\n const importedConcreteSelectionNames = new Set<string>();\n const importedConcreteSelectionModules = new Set<string>();\n const ensureConcreteSelectionTypeImported = (\n type: GraphQLObjectType | GraphQLInterfaceType | GraphQLUnionType,\n ) => {\n if (type === this.modelType) return;\n const selectionTypeName = this.selectionTypeNameForType(type);\n const selectionModule = `./${toKebabCase(selectionTypeName)}`;\n if (!importedConcreteSelectionNames.has(selectionTypeName)) {\n importedConcreteSelectionNames.add(selectionTypeName);\n imports.useType(selectionModule, selectionTypeName);\n }\n if (!importedConcreteSelectionModules.has(selectionModule)) {\n importedConcreteSelectionModules.add(selectionModule);\n // Keep module side effects so each generated selection file can register its schema factory.\n imports.useSideEffect(selectionModule);\n }\n };\n\n for (const field of Object.values(this.fieldMap)) {\n const targetType = targetTypeOf(field.type);\n if (targetType === undefined || targetType === this.modelType) {\n continue;\n }\n ensureConcreteSelectionTypeImported(targetType);\n }\n\n const downcasts = this.ctx.typeHierarchy.downcastTypeMap.get(this.modelType);\n if (downcasts) {\n for (const downcast of downcasts) {\n ensureConcreteSelectionTypeImported(downcast);\n }\n }\n\n const upcastTypes = this.ctx.typeHierarchy.upcastTypeMap.get(\n this.modelType,\n );\n if (upcastTypes !== undefined) {\n for (const upcastType of upcastTypes) {\n const selectionTypeName = `${upcastType.name}${this.options.selectionSuffix ?? \"Selection\"}`;\n const importedNames = this.importedNamesForSuperType(upcastType);\n if (importedNames.length === 0) continue;\n const importSource = `./${toKebabCase(selectionTypeName)}`;\n for (const importedName of importedNames) {\n imports.useValue(importSource, importedName);\n }\n }\n }\n\n imports.emit();\n }\n\n protected importedNamesForSuperType(\n superType: GraphQLObjectType | GraphQLInterfaceType | GraphQLUnionType,\n ): string[] {\n if (isOperationRootTypeName(superType.name)) {\n return [`${instancePrefix(superType.name)}$`];\n }\n return [];\n }\n\n protected importingBehavior(type: GraphQLNamedType): ImportingBehavior {\n if (type === this.modelType) {\n return \"self\";\n }\n if (\n type instanceof GraphQLObjectType ||\n type instanceof GraphQLInterfaceType\n ) {\n return \"same_dir\";\n }\n return \"other_dir\";\n }\n\n protected writeCode() {\n this.text(COMMENT);\n this.writeSelectionInterface();\n this.writeInstances();\n this.writeArgsInterface();\n }\n\n // Interface emission is split into header/body helpers to keep writeCode readable.\n private writeSelectionInterface() {\n this.writeSelectionInterfaceHeader();\n this.scope({ type: \"block\", multiLines: true, suffix: \"\\n\" }, () => {\n this.writeSelectionInterfaceBody();\n });\n }\n\n private writeSelectionInterfaceHeader() {\n const superSelection = this.superSelectionTypeName(this.modelType);\n this.text(\n `export interface ${this.selectionTypeName}<T extends object = {}, TVariables extends object = {}, TLastField extends string = never> extends ${superSelection}<'${this.modelType.name}', T, TVariables> `,\n );\n }\n\n private writeSelectionInterfaceBody() {\n // Built-ins first: fragment/directive helpers affect the shape of all field chains.\n this.writeFragmentMethods();\n this.writeDirectiveBuiltins();\n this.write$omit();\n this.write$alias();\n this.writeTypeName();\n\n const fields = Object.values(this.fieldMap);\n for (const field of fields) {\n this.text(\"\\n\");\n this.writePositiveProp(field);\n }\n }\n\n protected writeFragmentMethods() {\n if (isOperationRootTypeName(this.modelType.name)) return;\n\n const t = this.text.bind(this);\n const modelName = this.modelType.name;\n const selfSelectionType = this.selectionTypeName;\n const fragmentTypeName = `ImplementationType<'${modelName}'>`;\n const inlineSelectionFor = (xName: string, data: string, vars: string) =>\n this.fragmentSelectionTypeForModel(xName, data, vars);\n const resultDataType = `XName extends '${modelName}' ?\\nT & X :\\nWithTypeName<T, ${fragmentTypeName}> & (WithTypeName<X, ImplementationType<XName>> | {__typename: Exclude<${fragmentTypeName}, ImplementationType<XName>>})`;\n\n t(\"\\n$on<X extends object, XVariables extends object>\");\n this.scope({ type: \"parameters\", multiLines: true }, () => {\n t(\n `builder: (it: ${selfSelectionType}<{}, {}>) => ${selfSelectionType}<X, XVariables>`,\n );\n });\n t(`: ${this.selectionTypeName}`);\n this.scope({ type: \"generic\", multiLines: true }, () => {\n t(\"T & X\");\n this.separator(\", \");\n t(\"TVariables & XVariables\");\n });\n t(\";\\n\");\n\n t(\n `\\n$on<XName extends ${fragmentTypeName}, X extends object, XVariables extends object>`,\n );\n this.scope({ type: \"parameters\", multiLines: true }, () => {\n t(\"typeName: XName\");\n this.separator(\", \");\n t(`builder: (it: ${inlineSelectionFor(\"XName\", \"{}\", \"{}\")}) => ${inlineSelectionFor(\"XName\", \"X\", \"XVariables\")}`);\n });\n t(`: ${this.selectionTypeName}`);\n this.scope({ type: \"generic\", multiLines: true }, () => {\n t(resultDataType);\n this.separator(\", \");\n t(\"TVariables & XVariables\");\n });\n t(\";\\n\");\n\n t(\n `\\n$use<XName extends ${fragmentTypeName}, X extends object, XVariables extends object>`,\n );\n this.scope({ type: \"parameters\", multiLines: true }, () => {\n t(\"fragment: ValueOrThunk<FragmentSpread<string, XName, X, XVariables>>\");\n });\n t(`: ${this.selectionTypeName}`);\n this.scope({ type: \"generic\", multiLines: true }, () => {\n t(resultDataType);\n this.separator(\", \");\n t(\"TVariables & XVariables\");\n });\n t(\";\\n\");\n }\n\n private fragmentSelectionTypeForModel(\n xNameRef: string,\n dataType: string,\n variableType: string,\n ): string {\n const branches: string[] = [];\n const selectionTypeByName = new Map<string, string>();\n selectionTypeByName.set(this.modelType.name, this.selectionTypeName);\n\n const downcasts = this.ctx.typeHierarchy.downcastTypeMap.get(this.modelType);\n if (downcasts) {\n for (const t of downcasts) {\n selectionTypeByName.set(t.name, this.selectionTypeNameForType(t));\n }\n }\n\n for (const [typeName, selectionTypeName] of selectionTypeByName) {\n branches.push(\n `${xNameRef} extends '${typeName}' ? ${selectionTypeName}<${dataType}, ${variableType}> :`,\n );\n }\n branches.push(\"never\");\n return branches.join(\"\\n\");\n }\n\n private writeDirectiveBuiltins() {\n const t = this.text.bind(this);\n\n t(\"\\n\\n$directive(name: string, args?: DirectiveArgs): \");\n this.writeFieldAwareSelectionReturnType();\n t(\";\\n\");\n\n t(\"\\n$include(condition: unknown): \");\n this.writeFieldAwareSelectionReturnType();\n t(\";\\n\");\n\n t(\"\\n$skip(condition: unknown): \");\n this.writeFieldAwareSelectionReturnType();\n t(\";\\n\");\n }\n\n private writeFieldAwareSelectionReturnType() {\n const t = this.text.bind(this);\n t(this.selectionTypeName);\n this.scope({ type: \"generic\", multiLines: true }, () => {\n t(\n \"TLastField extends keyof T ? Omit<T, TLastField> & {readonly [key in TLastField]?: T[key]} : T\",\n );\n this.separator(\", \");\n t(\"TVariables\");\n this.separator(\", \");\n t(\"TLastField\");\n });\n }\n\n private writeTypeName() {\n if (!isOperationRootTypeName(this.modelType.name)) {\n const t = this.text.bind(this);\n t(\"\\n\\n\");\n t(\"readonly __typename: \");\n t(this.selectionTypeName);\n t(\"<T & {__typename: ImplementationType<'\");\n t(this.modelType.name);\n t(\"'>}, TVariables>;\\n\");\n }\n }\n\n private writePositiveProp(field: GraphQLField<unknown, unknown>) {\n const targetType = targetTypeOf(field.type);\n if (targetType !== undefined) {\n // Association field: generate callback-style method signature\n this.writeAssociationProp(field, targetType);\n } else {\n // Scalar field: generate readonly property accessor + args overload\n this.writePositivePropImpl(field, \"SIMPLEST\");\n this.writePositivePropImpl(field, \"WITH_ARGS\");\n }\n }\n\n private writeAssociationProp(\n field: GraphQLField<unknown, unknown>,\n targetType: GraphQLObjectType | GraphQLInterfaceType | GraphQLUnionType,\n ) {\n if (field.args.length === 0) {\n this.writeAssociationPropImpl(field, targetType, false);\n return;\n }\n\n this.writeAssociationPropImpl(field, targetType, true);\n this.writeAssociationPropImpl(field, targetType, false);\n }\n\n private writeAssociationPropImpl(\n field: GraphQLField<unknown, unknown>,\n targetType: GraphQLObjectType | GraphQLInterfaceType | GraphQLUnionType,\n withArgs: boolean,\n ) {\n const t = this.text.bind(this);\n const nonNull = field.type instanceof GraphQLNonNull;\n const isPlural =\n field.type instanceof GraphQLNonNull\n ? field.type.ofType instanceof GraphQLList\n : field.type instanceof GraphQLList;\n const childSelectionType = this.selectionTypeNameForType(targetType);\n\n t(\"\\n\");\n this.writeFieldDocComment(field);\n\n t(field.name);\n this.scope({ type: \"generic\", multiLines: true }, () => {\n if (withArgs) {\n t(\n `XArgs extends AcceptableVariables<${this.modelType.name}Args['${field.name}']>`,\n );\n this.separator(\", \");\n }\n t(\"X extends object\");\n this.separator(\", \");\n t(\"XVariables extends object\");\n });\n this.scope({ type: \"parameters\", multiLines: true }, () => {\n if (withArgs) {\n t(\"args: XArgs\");\n this.separator(\", \");\n }\n t(\"selection: \");\n this.scope({ type: \"parameters\", multiLines: false }, () => {\n t(`selection: ${childSelectionType}<{}, {}>`);\n });\n t(` => ${childSelectionType}<X, XVariables>`);\n });\n t(`: ${this.selectionTypeName}`);\n this.scope({ type: \"generic\", multiLines: true, suffix: \";\\n\" }, () => {\n t(\"T & {\");\n if (!this.options.objectEditable) {\n t(\"readonly \");\n }\n t(`\"${field.name}\"`);\n if (!nonNull) {\n t(\"?\");\n }\n t(\": \");\n if (isPlural) {\n t(\"ReadonlyArray<X>\");\n } else {\n t(\"X\");\n }\n t(\"}\");\n this.separator(\", \");\n t(\"TVariables & XVariables\");\n if (withArgs) {\n t(\n ` & UnresolvedVariables<XArgs, ${this.modelType.name}Args['${field.name}']>`,\n );\n } else if (field.args.length !== 0) {\n t(` & ${this.modelType.name}Args[\"${field.name}\"]`);\n }\n this.separator(\", \");\n t(`\"${field.name}\"`);\n });\n }\n\n private write$omit() {\n // Collect scalar field names (no args, not associations)\n const omittableFields: string[] = [];\n for (const [fieldName, field] of Object.entries(this.fieldMap)) {\n if (field.args.length === 0 && targetTypeOf(field.type) === undefined) {\n omittableFields.push(fieldName);\n }\n }\n if (omittableFields.length === 0) return;\n\n const t = this.text.bind(this);\n t(\"\\n\\n$omit<XOmit extends \");\n t(omittableFields.map((f) => `\"${f}\"`).join(\" | \"));\n t(\">\");\n this.scope({ type: \"parameters\", multiLines: false }, () => {\n t(\"...fields: XOmit[]\");\n });\n t(\": \");\n t(this.selectionTypeName);\n t(\"<Omit<T, XOmit>, TVariables>;\\n\");\n }\n\n private write$alias() {\n const scalarFields = this.getScalarFieldNames();\n if (scalarFields.length === 0) return;\n\n const t = this.text.bind(this);\n t(\"\\n$alias<XAlias extends string>\");\n t(\"(\");\n t(\"alias: XAlias\");\n t(\"): \");\n t(this.selectionTypeName);\n t(\n \"<TLastField extends keyof T ? Omit<T, TLastField> & {readonly [key in XAlias]: T[TLastField]} : T, TVariables>;\\n\",\n );\n }\n\n private getScalarFieldNames(): string[] {\n const fields: string[] = [];\n for (const [fieldName, field] of Object.entries(this.fieldMap)) {\n if (field.args.length === 0 && targetTypeOf(field.type) === undefined) {\n fields.push(fieldName);\n }\n }\n return fields;\n }\n\n private writePositivePropImpl(\n field: GraphQLField<unknown, unknown>,\n mode: \"SIMPLEST\" | \"WITH_ARGS\",\n ) {\n const withArgs = mode === \"WITH_ARGS\";\n if (withArgs && field.args.length === 0) {\n return;\n }\n const targetType = targetTypeOf(field.type);\n const renderAsField = field.args.length === 0 && targetType === undefined;\n const nonNull = field.type instanceof GraphQLNonNull;\n const t = this.text.bind(this);\n\n t(\"\\n\");\n this.writeFieldDocComment(field);\n if (renderAsField) {\n t(\"readonly \");\n t(field.name);\n } else {\n t(field.name);\n if (withArgs || targetType !== undefined) {\n this.scope({ type: \"generic\", multiLines: true }, () => {\n if (withArgs) {\n this.separator(\", \");\n t(\n `XArgs extends AcceptableVariables<${this.modelType.name}Args['${field.name}']>`,\n );\n }\n if (targetType !== undefined) {\n this.separator(\", \");\n t(\"X extends object\");\n this.separator(\", \");\n t(\"XVariables extends object\");\n }\n });\n }\n this.scope({ type: \"parameters\", multiLines: true }, () => {\n if (withArgs) {\n this.separator(\", \");\n t(\"args: XArgs\");\n }\n if (targetType !== undefined) {\n this.separator(\", \");\n t(\"child: \");\n t(this.superSelectionTypeName(targetType));\n t(\"<'\");\n t(targetType.name);\n t(\"', X, XVariables>\");\n }\n });\n }\n\n t(\": \");\n t(this.selectionTypeName);\n this.scope(\n { type: \"generic\", multiLines: !renderAsField, suffix: \";\\n\" },\n () => {\n t(\"T & \");\n this.writePositivePropChangedDataType(field, false, !nonNull);\n\n this.separator(\", \");\n t(\"TVariables\");\n if (targetType !== undefined) {\n t(\" & XVariables\");\n }\n if (field.args.length !== 0) {\n if (withArgs) {\n t(\n ` & UnresolvedVariables<XArgs, ${this.modelType.name}Args['${field.name}']>`,\n );\n } else {\n t(` & ${this.modelType.name}Args[\"${field.name}\"]`);\n }\n }\n this.separator(\", \");\n t(`\"${field.name}\"`);\n },\n );\n }\n\n private writePositivePropChangedDataType(\n field: GraphQLField<unknown, unknown>,\n withOptions: boolean,\n nullable: boolean,\n ) {\n const t = this.text.bind(this);\n t(\"{\");\n if (!this.options.objectEditable) {\n t(\"readonly \");\n }\n if (withOptions) {\n t(`[key in XAlias]`);\n } else {\n t(`\"${field.name}\"`);\n }\n if (nullable) {\n t(\"?\");\n }\n t(\": \");\n this.typeRef(\n field.type,\n targetTypeOf(field.type) !== undefined ? \"X\" : undefined,\n );\n t(\"}\");\n }\n\n private writeFieldDocComment(field: GraphQLField<unknown, unknown>) {\n const description = field.description?.trim();\n const deprecationReason = field.deprecationReason?.trim();\n if (!description && !deprecationReason) {\n return;\n }\n\n const t = this.text.bind(this);\n t(\"/**\\n\");\n if (description) {\n for (const line of this.escapeJsDoc(description).split(\"\\n\")) {\n t(\" * \");\n t(line);\n t(\"\\n\");\n }\n }\n if (deprecationReason) {\n t(\" * @deprecated \");\n t(this.escapeJsDoc(deprecationReason));\n t(\"\\n\");\n }\n t(\" */\\n\");\n }\n\n private escapeJsDoc(value: string): string {\n return value.replaceAll(\"*/\", \"*\\\\/\");\n }\n\n private writeInstances() {\n const t = this.text.bind(this);\n t(\"\\nregisterSchemaTypeFactory(\");\n this.str(this.modelType.name);\n t(\", () => \");\n this.writeSchemaTypeForModelType();\n t(\");\\n\");\n\n const emptySelectionName = this.emptySelectionName;\n if (!emptySelectionName) {\n return;\n }\n\n const itemTypes =\n this.modelType instanceof GraphQLUnionType\n ? this.modelType.getTypes()\n : [];\n\n t(\"\\nexport function \");\n t(emptySelectionName);\n t(\"<T extends object = {}, TVariables extends object = {}>(\");\n t(`builder: (it: ${this.selectionTypeName}<{}, {}>) => ${this.selectionTypeName}<T, TVariables>`);\n t(\", operationName?: string\");\n t(\"): \");\n t(this.selectionTypeName);\n t(\"<T, TVariables> \");\n this.scope({ type: \"block\", multiLines: true, suffix: \"\\n\" }, () => {\n t(\"const selection = builder(\");\n this.scope({ type: \"blank\", multiLines: true }, () => {\n t(\"createSelection\");\n this.scope({ type: \"parameters\", multiLines: true }, () => {\n t(`resolveRegisteredSchemaType(\"${this.modelType.name}\")!`);\n this.separator(\", \");\n this.text(\"ENUM_INPUT_METADATA\");\n this.separator(\", \");\n if (itemTypes.length === 0) {\n t(\"undefined\");\n } else {\n this.scope(\n { type: \"array\", multiLines: itemTypes.length >= 2 },\n () => {\n for (const itemType of itemTypes) {\n this.separator(\", \");\n this.str(itemType.name);\n }\n },\n );\n }\n });\n });\n t(\");\\n\");\n t(\"return withOperationName(selection, operationName);\\n\");\n });\n\n if (this.defaultSelectionName !== undefined) {\n t(\"\\nexport const \");\n t(this.defaultSelectionName);\n t(\" = \");\n this.enter(\"blank\", true);\n t(emptySelectionName);\n this.enter(\"blank\", true);\n for (const propName of this.defaultSelectionProps) {\n t(\".\");\n t(propName);\n t(\"\\n\");\n }\n this.leave();\n this.leave(\";\\n\");\n }\n }\n\n private writeSchemaTypeForModelType() {\n const t = this.text.bind(this);\n t(\"createSchemaType\");\n this.scope({ type: \"parameters\", multiLines: true }, () => {\n t(`\"${this.modelType.name}\"`);\n this.separator(\", \");\n t(this.schemaTypeCategory(this.modelType));\n this.separator(\", \");\n this.scope({ type: \"array\" }, () => {\n const upcastTypes = this.ctx.typeHierarchy.upcastTypeMap.get(\n this.modelType,\n );\n if (upcastTypes !== undefined) {\n for (const upcastType of upcastTypes) {\n this.separator(\", \");\n t(`resolveRegisteredSchemaType(\"${upcastType.name}\")!`);\n }\n }\n });\n this.separator(\", \");\n this.scope({ type: \"array\", multiLines: true }, () => {\n for (const fieldName of this.declaredFieldNames) {\n this.separator(\", \");\n this.writeSchemaFieldDescriptor(this.fieldMap[fieldName]!);\n }\n });\n });\n }\n\n private writeSchemaFieldDescriptor(field: GraphQLField<unknown, unknown>) {\n const t = this.text.bind(this);\n const args = this.fieldArgsMap.get(field.name);\n const category = this.fieldCategoryMap.get(field.name);\n const targetType = targetTypeOf(field.type);\n if (\n args === undefined &&\n (category === undefined || category === \"SCALAR\") &&\n field.type instanceof GraphQLNonNull &&\n targetType === undefined\n ) {\n t(`\"${field.name}\"`);\n return;\n }\n\n this.scope({ type: \"block\", multiLines: true }, () => {\n t(`category: \"${category ?? \"SCALAR\"}\"`);\n this.separator(\", \");\n t(`name: \"${field.name}\"`);\n if (args !== undefined) {\n this.separator(\", \");\n t(\"argGraphQLTypeMap: \");\n this.scope({ type: \"block\", multiLines: args.length > 1 }, () => {\n for (const arg of args) {\n this.separator(\", \");\n t(arg.name);\n t(\": '\");\n this.gqlTypeRef(arg.type);\n t(\"'\");\n }\n });\n }\n if (targetType !== undefined) {\n this.separator(\", \");\n t(`targetTypeName: \"${targetType.name}\"`);\n }\n if (!(field.type instanceof GraphQLNonNull)) {\n this.separator(\", \");\n t(\"undefinable: true\");\n }\n });\n }\n\n private schemaTypeCategory(\n type: GraphQLObjectType | GraphQLInterfaceType | GraphQLUnionType,\n ): '\"EMBEDDED\"' | '\"OBJECT\"' {\n if (this.ctx.embeddedTypes.has(type)) {\n return '\"EMBEDDED\"';\n }\n return '\"OBJECT\"';\n }\n\n private writeArgsInterface() {\n if (!this.hasArgs) {\n return;\n }\n\n const t = this.text.bind(this);\n t(`\\nexport interface ${this.modelType.name}Args `);\n this.scope({ type: \"block\", multiLines: true, suffix: \"\\n\" }, () => {\n for (const field of Object.values(this.fieldMap)) {\n if (field.args.length !== 0) {\n this.separator(\", \");\n t(`\\nreadonly ${field.name}: `);\n this.scope({ type: \"block\", multiLines: true }, () => {\n for (const arg of field.args) {\n this.separator(\", \");\n t(\"readonly \");\n t(arg.name);\n if (!(arg.type instanceof GraphQLNonNull)) {\n t(\"?\");\n }\n t(\": \");\n this.typeRef(arg.type);\n }\n });\n }\n }\n });\n }\n\n protected get declaredFieldNames(): ReadonlySet<string> {\n let set = this._declaredFieldNames;\n if (set === undefined) {\n this._declaredFieldNames = set = this.getDeclaredFieldNames();\n }\n return set;\n }\n\n private getDeclaredFieldNames(): ReadonlySet<string> {\n const fields = new Set<string>();\n if (\n this.modelType instanceof GraphQLObjectType ||\n this.modelType instanceof GraphQLInterfaceType\n ) {\n for (const field of Object.values(this.fieldMap)) {\n fields.add(field.name);\n }\n this.removeSuperFieldNames(\n fields,\n this.ctx.typeHierarchy.upcastTypeMap.get(this.modelType),\n );\n } else if (this.modelType instanceof GraphQLUnionType) {\n for (const fieldName of Object.keys(this.fieldMap)) {\n fields.add(fieldName);\n }\n }\n return fields;\n }\n\n private removeSuperFieldNames(\n fields: Set<string>,\n superTypes?: Set<\n GraphQLObjectType | GraphQLInterfaceType | GraphQLUnionType\n >,\n ) {\n if (superTypes !== undefined) {\n for (const superType of superTypes) {\n if (\n superType instanceof GraphQLObjectType ||\n superType instanceof GraphQLInterfaceType\n ) {\n const superFieldMap = superType.getFields();\n for (const superFieldName in superFieldMap) {\n fields.delete(superFieldName);\n }\n }\n this.removeSuperFieldNames(\n fields,\n this.ctx.typeHierarchy.upcastTypeMap.get(superType),\n );\n }\n }\n }\n\n private superSelectionTypeName(\n _graphQLType: GraphQLObjectType | GraphQLInterfaceType | GraphQLUnionType,\n ): string {\n return \"Selection\";\n }\n\n private selectionTypeNameForType(\n graphQLType: GraphQLObjectType | GraphQLInterfaceType | GraphQLUnionType,\n ): string {\n return `${graphQLType.name}${this.options.selectionSuffix ?? \"Selection\"}`;\n }\n}\n\nconst isOperationRootTypeName = (name: string): boolean => {\n return name === \"Query\" || name === \"Mutation\" || name === \"Subscription\";\n};\n\nconst COMMENT = `/*\n * Any instance of this interface is immutable,\n * all the properties and functions can only be used to create new instances,\n * they cannot modify the current instance.\n * \n * So any instance of this interface is reuseable.\n */\n`;\n","import { WriteStream } from \"fs\";\nimport { GraphQLEnumType } from \"graphql\";\nimport { CodegenOptions } from \"../options\";\nimport { Writer } from \"../writer\";\n\nexport class EnumWriter extends Writer {\n constructor(\n private readonly enumType: GraphQLEnumType,\n stream: WriteStream,\n options: CodegenOptions,\n ) {\n super(stream, options);\n }\n\n protected writeCode() {\n const t = this.text.bind(this);\n const values = this.enumType.getValues();\n\n if (\n this.options.tsEnum === true ||\n this.options.tsEnum === \"number\" ||\n this.options.tsEnum === \"string\"\n ) {\n t(\"export enum \");\n t(this.enumType.name);\n this.scope(\n {\n type: \"block\",\n prefix: \" \",\n suffix: \"\\n\",\n multiLines: values.length > 3,\n },\n () => {\n for (const value of values) {\n this.separator(\", \");\n if (this.options.tsEnum === \"string\") {\n t(value.name);\n t(\" = \");\n t(\"'\");\n t(value.name);\n t(\"'\");\n } else {\n t(value.name);\n }\n }\n },\n );\n } else {\n t(\"export type \");\n t(this.enumType.name);\n t(\" = \");\n\n this.scope(\n {\n type: \"blank\",\n suffix: \";\\n\",\n multiLines: values.length > 3,\n },\n () => {\n for (const value of values) {\n this.separator(\" | \");\n t(\"'\");\n t(value.name);\n t(\"'\");\n }\n },\n );\n }\n }\n}\n","import { WriteStream } from \"fs\";\nimport {\n GraphQLInputField,\n GraphQLInputObjectType,\n GraphQLNamedType,\n GraphQLNonNull,\n} from \"graphql\";\nimport { CodegenOptions } from \"../options\";\nimport { ImportingBehavior, Writer } from \"../writer\";\n\nexport class InputWriter extends Writer {\n constructor(\n private readonly inputType: GraphQLInputObjectType,\n stream: WriteStream,\n options: CodegenOptions,\n ) {\n super(stream, options);\n }\n\n protected prepareImports() {\n for (const field of Object.values(this.inputType.getFields())) {\n this.importType(field.type);\n }\n }\n\n protected importingBehavior(type: GraphQLNamedType): ImportingBehavior {\n if (type === this.inputType) {\n return \"self\";\n }\n if (type instanceof GraphQLInputObjectType) {\n return \"same_dir\";\n }\n return \"other_dir\";\n }\n\n protected writeCode() {\n this.text(COMMENT);\n this.text(\"export type \");\n this.text(this.inputType.name);\n this.text(\" = \");\n const fieldMap = this.inputType.getFields();\n if (this.inputType.isOneOf) {\n this.writeOneOfType(fieldMap);\n return;\n }\n\n this.enter(\"block\", true);\n for (const field of Object.values(fieldMap)) {\n this.writeRegularField(field);\n }\n this.leave(\"\\n\");\n }\n\n private writeOneOfType(fieldMap: Record<string, GraphQLInputField>) {\n const fieldNames = Object.keys(fieldMap) as string[];\n if (fieldNames.length === 0) {\n this.text(\"{}\\n\");\n return;\n }\n\n fieldNames.forEach((selectedFieldName, idx) => {\n const selectedField = fieldMap[selectedFieldName]!;\n if (idx > 0) this.text(\" | \");\n this.enter(\"block\", true);\n for (const fieldName of fieldNames) {\n if (!this.options.objectEditable) this.text(\"readonly \");\n const field = fieldMap[fieldName]!;\n this.text(field.name);\n if (fieldName === selectedFieldName) {\n this.text(\": Exclude<\");\n this.typeRef(selectedField.type);\n this.text(\", undefined>;\\n\");\n } else {\n this.text(\"?: never;\\n\");\n }\n }\n this.leave();\n });\n this.text(\"\\n\");\n }\n\n private writeRegularField(field: GraphQLInputField): void {\n if (!this.options.objectEditable) this.text(\"readonly \");\n this.text(field.name);\n if (!(field.type instanceof GraphQLNonNull)) this.text(\"?\");\n this.text(\": \");\n this.typeRef(field.type);\n this.text(\";\\n\");\n }\n}\n\nconst COMMENT = `/*\n * This input type is not interface, because interfaces \n * do not satisfy the constraint 'SerializableParam' of recoil\n */\n`;\n","/**\n * Generates shared TypeScript types used across all selections:\n * - `ImplementationType<T>`: recursive type mapping for type hierarchies\n * - `upcastTypes()` / `downcastTypes()`: runtime cast helpers\n * - `WithTypeName<T>`: utility type for __typename augmentation\n */\n\nimport { WriteStream } from \"fs\";\nimport { GraphQLSchema, GraphQLUnionType } from \"graphql\";\nimport { CodegenOptions } from \"../options\";\nimport { TypeHierarchyGraph } from \"../type-hierarchy-graph\";\nimport { isExcludedTypeName } from \"../utils\";\nimport { Writer } from \"../writer\";\n\nexport class TypeHierarchyWriter extends Writer {\n constructor(\n _schema: GraphQLSchema,\n private readonly typeHierarchy: TypeHierarchyGraph,\n stream: WriteStream,\n options: CodegenOptions,\n ) {\n super(stream, options);\n }\n\n protected writeCode() {\n this.writeImplementationType();\n this.writeCastMethod(\"up\");\n this.writeCastMethod(\"down\");\n this.writeWithTypeNameType();\n }\n\n private writeWithTypeNameType() {\n this.text(WITH_TYPE_NAME_DECLARATION);\n this.text(\"\\n\");\n }\n\n private writeImplementationType() {\n const t = this.text.bind(this);\n const entries = [...this.typeHierarchy.downcastTypeMap.entries()];\n\n t(IMPLEMENTATION_TYPE_COMMENT);\n t(\"export type ImplementationType<T> = \");\n this.enter(\"blank\", true);\n for (const [type, castTypes] of entries) {\n if (isExcludedTypeName(this.options, type.name)) continue;\n t(`T extends '${type.name}' ? `);\n this.enter(\"blank\");\n if (!(type instanceof GraphQLUnionType)) {\n t(`'${type.name}'`);\n }\n for (const castType of castTypes) {\n if (isExcludedTypeName(this.options, castType.name)) continue;\n this.separator(\" | \");\n t(`ImplementationType<'${castType.name}'>`);\n }\n this.leave();\n t(\" :\\n\");\n }\n t(\"T\\n\");\n this.leave();\n t(\";\");\n }\n\n private writeCastMethod(prefix: \"up\" | \"down\") {\n const t = this.text.bind(this);\n const castTypeMap =\n prefix === \"up\"\n ? this.typeHierarchy.upcastTypeMap\n : this.typeHierarchy.downcastTypeMap;\n const entries = [...castTypeMap.entries()];\n\n t(prefix === \"up\" ? UPCAST_FUNC_COMMENT : DOWNCAST_FUNC_COMMENT);\n\n t(`\\nexport function ${prefix}castTypes(typeName: string): string[] `);\n this.scope({ type: \"block\", multiLines: true, suffix: \"\\n\" }, () => {\n t(\"const typeNames: string[] = [];\\n\");\n t(`${prefix}castTypes0(typeName, typeNames);\\n`);\n t(\"return typeNames;\\n\");\n });\n\n t(`\\nfunction ${prefix}castTypes0(typeName: string, output: string[]) `);\n this.scope({ type: \"block\", multiLines: true, suffix: \"\\n\" }, () => {\n t(\"switch (typeName)\");\n this.scope({ type: \"block\", multiLines: true, suffix: \"\\n\" }, () => {\n for (const [type, castTypes] of entries) {\n if (isExcludedTypeName(this.options, type.name)) continue;\n t(`case '${type.name}':`);\n this.scope({ type: \"blank\", multiLines: true }, () => {\n if (!(type instanceof GraphQLUnionType)) {\n t(`output.push('${type.name}');\\n`);\n }\n for (const castType of castTypes) {\n if (isExcludedTypeName(this.options, castType.name)) continue;\n t(`${prefix}castTypes0('${castType.name}', output);\\n`);\n }\n t(\"break;\\n\");\n });\n }\n t(\"default:\");\n this.scope({ type: \"blank\", multiLines: true }, () => {\n t(`output.push(typeName);\\n`);\n t(\"break;\\n\");\n });\n });\n });\n }\n}\n\nconst IMPLEMENTATION_TYPE_COMMENT = `\n/**\n * This 'ImplementationType' is used for type hierarchy resolution.\n */\n`;\n\nconst UPCAST_FUNC_COMMENT = `\n/**\n * This 'upcastTypes' resolves parent types in the type hierarchy.\n */\n`;\n\nconst DOWNCAST_FUNC_COMMENT = `\n/**\n * This 'downcastTypes' resolves child types in the type hierarchy.\n */\n`;\n\nconst WITH_TYPE_NAME_DECLARATION = `\nexport type WithTypeName<T, TypeName extends string> =\n T extends {readonly __typename: string} ?\n T :\n T & {readonly __typename: TypeName};\n;\n`;\n","import {\n GraphQLInterfaceType,\n GraphQLObjectType,\n GraphQLSchema,\n GraphQLUnionType,\n} from \"graphql\";\n\ntype CompositeType =\n | GraphQLObjectType\n | GraphQLInterfaceType\n | GraphQLUnionType;\n\n// ─── Helpers ─────────────────────────────────────────────────────────\n\n/** Get-or-create a Set in a Map, then add a value to it. */\nfunction addToSetMap<K, V>(map: Map<K, Set<V>>, key: K, value: V): void {\n let set = map.get(key);\n if (!set) {\n set = new Set();\n map.set(key, set);\n }\n set.add(value);\n}\n\n/**\n * Remove transitive (indirect) entries from the downcast map so that\n * each parent only lists its *direct* children.\n *\n * For example given A → B → C, the entry for A should only contain B,\n * not C (because C is reachable through B).\n */\nfunction pruneTransitive(\n map: ReadonlyMap<CompositeType, Set<CompositeType>>,\n): void {\n for (const [, children] of map) {\n removeReachable(children, children, map);\n }\n}\n\nfunction removeReachable(\n target: Set<CompositeType>,\n current: ReadonlySet<CompositeType>,\n map: ReadonlyMap<CompositeType, Set<CompositeType>>,\n): void {\n for (const type of current) {\n // Don't delete from the initial set on the first call (target === current)\n if (target !== current) target.delete(type);\n const deeper = map.get(type);\n if (deeper) removeReachable(target, deeper, map);\n }\n}\n\n/** Invert a parent→children map into a child→parents map. */\nfunction invertMap(\n map: ReadonlyMap<CompositeType, Set<CompositeType>>,\n): Map<CompositeType, Set<CompositeType>> {\n const inverted = new Map<CompositeType, Set<CompositeType>>();\n for (const [parent, children] of map) {\n for (const child of children) {\n addToSetMap(inverted, child, parent);\n }\n }\n return inverted;\n}\n\n// ─── TypeHierarchyGraph ──────────────────────────────────────────────\n\nexport class TypeHierarchyGraph {\n /** parent → direct children (interface → implementors, union → members) */\n readonly downcastTypeMap: ReadonlyMap<CompositeType, Set<CompositeType>>;\n /** child → direct parents */\n readonly upcastTypeMap: ReadonlyMap<CompositeType, Set<CompositeType>>;\n\n constructor(schema: GraphQLSchema) {\n const downcast = new Map<CompositeType, Set<CompositeType>>();\n const typeMap = schema.getTypeMap();\n\n for (const typeName in typeMap) {\n if (typeName.startsWith(\"__\")) continue;\n const type = typeMap[typeName]!;\n\n if (\n type instanceof GraphQLObjectType ||\n type instanceof GraphQLInterfaceType\n ) {\n for (const iface of type.getInterfaces()) {\n addToSetMap(downcast, iface, type);\n }\n }\n if (type instanceof GraphQLUnionType) {\n for (const member of type.getTypes()) {\n addToSetMap(downcast, type, member);\n }\n }\n }\n\n pruneTransitive(downcast);\n this.downcastTypeMap = downcast;\n this.upcastTypeMap = invertMap(downcast);\n }\n\n /** Walk ancestor types recursively, calling `callback` for each. */\n visitUpcastTypesRecursively(\n type: CompositeType,\n callback: (ancestor: CompositeType) => void,\n ): void {\n const parents = this.upcastTypeMap.get(type);\n if (!parents) return;\n for (const parent of parents) {\n callback(parent);\n this.visitUpcastTypesRecursively(parent, callback);\n }\n }\n}\n","import { WriteStream } from \"fs\";\nimport {\n GraphQLEnumType,\n GraphQLInputField,\n GraphQLInputObjectType,\n GraphQLInputType,\n GraphQLList,\n GraphQLNonNull,\n GraphQLScalarType,\n GraphQLSchema,\n} from \"graphql\";\nimport { CodegenOptions } from \"../options\";\nimport { Writer } from \"../writer\";\nimport {\n CODEGEN_IMPORT_SOURCE_MAP,\n EnumInputMetadataWriterImportSymbol,\n JSImportCollector,\n} from \"../imports\";\n\nexport class EnumInputMetadataWriter extends Writer {\n constructor(\n private readonly schema: GraphQLSchema,\n stream: WriteStream,\n options: CodegenOptions,\n ) {\n super(stream, options);\n }\n\n protected prepareImports() {\n const imports = new JSImportCollector<EnumInputMetadataWriterImportSymbol>(\n (stmt) => this.importStatement(stmt),\n CODEGEN_IMPORT_SOURCE_MAP,\n );\n imports.useMapped(\"EnumInputMetadataBuilder\");\n imports.emit();\n }\n\n protected writeCode() {\n const processedTypeNames = new Set<string>();\n const enumInputMetaTypeMap = new Map<string, ReadonlyArray<GraphQLInputField> | undefined>();\n for (const type of Object.values(this.schema.getTypeMap())) {\n if (\n !(type instanceof GraphQLEnumType) &&\n !(type instanceof GraphQLInputObjectType)\n ) {\n continue;\n }\n this.collectEnumMetaTypes(type, processedTypeNames, enumInputMetaTypeMap);\n }\n\n this.text(\"const builder = new EnumInputMetadataBuilder();\\n\");\n for (const [typeName, fields] of enumInputMetaTypeMap) {\n this.text(`\\nbuilder.add(\"${typeName}\"`);\n if (fields !== undefined) {\n this.text(\", \");\n this.scope({ type: \"array\", multiLines: true }, () => {\n for (const field of fields) {\n this.separator(\", \");\n this.scope({ type: \"block\" }, () => {\n this.text(`name: \"${field.name}\", typeName: \"${EnumInputMetadataWriter.inputTypeName(field.type)}\", graphqlTypeName: \"${EnumInputMetadataWriter.graphqlTypeName(field.type)}\"`);\n if (EnumInputMetadataWriter.isLeafInputType(field.type)) {\n this.text(\", isLeaf: true\");\n }\n });\n }\n });\n }\n this.text(\");\\n\");\n }\n this.text(\"\\nexport const ENUM_INPUT_METADATA = builder.build();\\n\");\n }\n\n private collectEnumMetaTypes(\n type: GraphQLInputType,\n processedTypeNames: Set<string>,\n outMap: Map<string, ReadonlyArray<GraphQLInputField> | undefined>,\n ): boolean {\n if (type instanceof GraphQLScalarType) {\n return false;\n }\n if (type instanceof GraphQLList || type instanceof GraphQLNonNull) {\n return this.collectEnumMetaTypes(type.ofType, processedTypeNames, outMap);\n }\n\n if (type.name.startsWith(\"__\")) {\n return false;\n }\n\n if (outMap.has(type.name)) {\n return true;\n }\n\n if (processedTypeNames.has(type.name)) {\n return false;\n }\n\n if (type instanceof GraphQLEnumType) {\n outMap.set(type.name, undefined);\n return true;\n }\n\n processedTypeNames.add(type.name);\n const fieldMap = type.getFields();\n const fields: GraphQLInputField[] = [];\n for (const field of Object.values(fieldMap)) {\n this.collectEnumMetaTypes(field.type, processedTypeNames, outMap);\n fields.push(field);\n }\n outMap.set(type.name, fields);\n return true;\n }\n\n private static inputTypeName(type: GraphQLInputType): string {\n if (type instanceof GraphQLList) {\n return EnumInputMetadataWriter.inputTypeName(type.ofType);\n }\n if (type instanceof GraphQLNonNull) {\n return EnumInputMetadataWriter.inputTypeName(type.ofType);\n }\n return (\n type as GraphQLEnumType | GraphQLInputObjectType | GraphQLScalarType\n ).name;\n }\n\n private static graphqlTypeName(type: GraphQLInputType): string {\n if (type instanceof GraphQLList) {\n return `[${EnumInputMetadataWriter.graphqlTypeName(type.ofType)}]`;\n }\n if (type instanceof GraphQLNonNull) {\n return `${EnumInputMetadataWriter.graphqlTypeName(type.ofType)}!`;\n }\n return (\n type as GraphQLEnumType | GraphQLInputObjectType | GraphQLScalarType\n ).name;\n }\n\n private static isLeafInputType(type: GraphQLInputType): boolean {\n if (type instanceof GraphQLList || type instanceof GraphQLNonNull) {\n return EnumInputMetadataWriter.isLeafInputType(type.ofType);\n }\n return type instanceof GraphQLScalarType;\n }\n}\n","import {\n GraphQLEnumType,\n GraphQLField,\n GraphQLInputObjectType,\n GraphQLInterfaceType,\n GraphQLNamedType,\n GraphQLNonNull,\n GraphQLObjectType,\n GraphQLSchema,\n GraphQLType,\n GraphQLUnionType,\n} from \"graphql\";\nimport type { CodegenOptions } from \"./options\";\nimport { mkdir, readFile, rm, writeFile } from \"fs/promises\";\nimport { createWriteStream, WriteStream } from \"fs\";\nimport { join, resolve } from \"path\";\nimport { SelectionWriter } from \"./writers/selection\";\nimport { EnumWriter } from \"./writers/enum\";\nimport { InputWriter } from \"./writers/input\";\nimport { TypeHierarchyWriter } from \"./writers/types\";\nimport { TypeHierarchyGraph } from \"./type-hierarchy-graph\";\nimport { SelectionContext } from \"./selection-context\";\nimport { EnumInputMetadataWriter } from \"./writers/enum-input-metadata\";\nimport { isExcludedTypeName, targetTypeOf, toKebabCase } from \"./utils\";\nimport ASYNC_CODE from \"./templates/async-runtime.template?raw\";\n\n/** Default output directory: node_modules/@ptdgrp/typedgql/__generated */\nconst DEFAULT_TARGET_DIR = resolve(\n process.cwd(),\n \"node_modules/@ptdgrp/typedgql/__generated\",\n);\n\n/** Parent package dir: node_modules/@ptdgrp/typedgql */\nconst PACKAGE_DIR = resolve(process.cwd(), \"node_modules/@ptdgrp/typedgql\");\n\n/** Field names reserved by the runtime SelectionNode implementation. */\nconst RESERVED_FIELDS = new Set([\n \"constructor\",\n \"addField\",\n \"removeField\",\n \"addEmbeddable\",\n \"addDirective\",\n \"fieldMap\",\n \"directiveMap\",\n \"findField\",\n \"findFieldsByName\",\n \"findFieldByName\",\n \"schemaType\",\n \"variableTypeMap\",\n \"toString\",\n \"toJSON\",\n \"toFragmentString\",\n]);\n\nexport class Generator {\n constructor(protected options: CodegenOptions) {}\n\n /** Resolved output directory (uses default if not configured) */\n private get targetDir(): string {\n return this.options.targetDir ?? DEFAULT_TARGET_DIR;\n }\n\n async generate() {\n const schema = await this.options.schemaLoader();\n this.validateSchema(schema);\n\n await rm(this.targetDir, { recursive: true, force: true });\n await mkdir(this.targetDir, { recursive: true });\n\n const typeHierarchy = new TypeHierarchyGraph(schema);\n const selectionTypes: Array<\n GraphQLObjectType | GraphQLInterfaceType | GraphQLUnionType\n > = [];\n const inputTypes: GraphQLInputObjectType[] = [];\n const enumTypes: GraphQLEnumType[] = [];\n\n const typeMap = schema.getTypeMap();\n for (const typeName in typeMap) {\n if (typeName.startsWith(\"__\")) continue;\n\n const type = typeMap[typeName]!;\n if (isExcludedTypeName(this.options, type.name)) continue;\n\n if (\n type instanceof GraphQLObjectType ||\n type instanceof GraphQLInterfaceType ||\n type instanceof GraphQLUnionType\n ) {\n selectionTypes.push(type);\n } else if (type instanceof GraphQLInputObjectType) {\n inputTypes.push(type);\n } else if (type instanceof GraphQLEnumType) {\n enumTypes.push(type);\n }\n }\n\n const configuredIdFieldMap = this.options.idFieldMap ?? {};\n const entityTypes = new Set<GraphQLType>();\n const embeddedTypes = new Set<GraphQLType>();\n const idFieldMap = new Map<\n GraphQLObjectType | GraphQLInterfaceType | GraphQLUnionType,\n GraphQLField<unknown, unknown>\n >();\n const triggerableTypes = new Set<GraphQLType>();\n const typesWithParameterizedField = new Set<\n GraphQLObjectType | GraphQLInterfaceType\n >();\n\n for (const selectionType of selectionTypes) {\n if (\n !(selectionType instanceof GraphQLObjectType) &&\n !(selectionType instanceof GraphQLInterfaceType)\n )\n continue;\n\n const fieldMap = selectionType.getFields();\n\n if (selectionType.name === \"Query\") {\n if (Object.keys(fieldMap).length !== 0) {\n triggerableTypes.add(selectionType);\n }\n } else {\n let idFieldName = configuredIdFieldMap[selectionType.name];\n if (idFieldName === undefined) {\n let configuredUpcastType:\n | GraphQLObjectType\n | GraphQLInterfaceType\n | GraphQLUnionType\n | undefined = undefined;\n typeHierarchy.visitUpcastTypesRecursively(\n selectionType,\n (upcastType) => {\n const newIdFieldName = configuredIdFieldMap[upcastType.name];\n if (idFieldName === undefined) {\n configuredUpcastType = upcastType;\n idFieldName = newIdFieldName;\n } else if (idFieldName !== newIdFieldName) {\n throw new Error(\n `Conflict id property configuration: ${configuredUpcastType!.name}.${idFieldName} and ${selectionType.name}.${newIdFieldName}`,\n );\n }\n },\n );\n }\n const idField = fieldMap[idFieldName ?? \"id\"];\n if (idField != null) {\n idFieldMap.set(selectionType, idField);\n entityTypes.add(selectionType);\n if (Object.keys(fieldMap).length !== 1) {\n triggerableTypes.add(selectionType);\n }\n } else {\n embeddedTypes.add(selectionType);\n }\n }\n\n for (const fieldName in fieldMap) {\n if (fieldMap[fieldName]!.args.length !== 0) {\n typesWithParameterizedField.add(selectionType);\n break;\n }\n }\n }\n\n const ctx: SelectionContext = {\n schema,\n typeHierarchy,\n selectionTypes,\n entityTypes,\n embeddedTypes,\n triggerableTypes,\n idFieldMap,\n typesWithParameterizedField,\n };\n\n const promises: Promise<void>[] = [];\n\n if (selectionTypes.length !== 0) {\n await mkdir(join(this.targetDir, \"selections\"), { recursive: true });\n promises.push(this.generateSelectionTypes(ctx));\n }\n if (inputTypes.length !== 0) {\n await mkdir(join(this.targetDir, \"inputs\"), { recursive: true });\n promises.push(this.generateInputTypes(inputTypes));\n }\n if (enumTypes.length !== 0) {\n await mkdir(join(this.targetDir, \"enums\"), { recursive: true });\n promises.push(this.generateEnumTypes(enumTypes));\n }\n\n promises.push(this.generateTypeHierarchy(schema, typeHierarchy));\n promises.push(this.generateEnumInputMetadata(schema));\n promises.push(this.generateAsyncRuntime());\n promises.push(this.writeIndex(schema, ctx));\n\n await Promise.all(promises);\n\n // Post-generation: create package.json and index.ts in node_modules/@ptdgrp/typedgql/\n // only when using the default Prisma-style output path\n if (this.options.targetDir === undefined) {\n await this.writePackageEntrypoint(schema, ctx);\n }\n }\n\n private createSelectionWriter(\n modelType: GraphQLObjectType | GraphQLInterfaceType | GraphQLUnionType,\n ctx: SelectionContext,\n stream: WriteStream,\n options: CodegenOptions,\n ): SelectionWriter {\n return new SelectionWriter(modelType, ctx, stream, options);\n }\n\n private additionalExportedTypeNamesForSelection(\n _modelType: GraphQLObjectType | GraphQLInterfaceType | GraphQLUnionType,\n _ctx: SelectionContext,\n ): ReadonlyArray<string> {\n return [];\n }\n\n private async generateSelectionTypes(ctx: SelectionContext) {\n const dir = join(this.targetDir, \"selections\");\n const emptySelectionNameMap = new Map<GraphQLType, string | undefined>();\n const defaultSelectionNameMap = new Map<GraphQLType, string>();\n const suffix = this.options?.selectionSuffix ?? \"Selection\";\n\n const promises = ctx.selectionTypes.map(async (type) => {\n const selectionTypeName = `${type.name}${suffix}`;\n const stream = createStream(\n join(dir, `${toKebabCase(selectionTypeName)}.ts`),\n );\n const writer = this.createSelectionWriter(\n type,\n ctx,\n stream,\n this.options,\n );\n emptySelectionNameMap.set(type, writer.emptySelectionName);\n if (writer.defaultSelectionName !== undefined) {\n defaultSelectionNameMap.set(type, writer.defaultSelectionName);\n }\n writer.write();\n await endStream(stream);\n });\n\n await Promise.all([\n ...promises,\n (async () => {\n const stream = createStream(join(dir, \"index.ts\"));\n for (const type of ctx.selectionTypes) {\n const selectionTypeName = `${type.name}${suffix}`;\n const selectionFileName = toKebabCase(selectionTypeName);\n const typeExports = [\n selectionTypeName,\n (type instanceof GraphQLObjectType ||\n type instanceof GraphQLInterfaceType) &&\n ctx.typesWithParameterizedField.has(type)\n ? `${type.name}Args`\n : undefined,\n ...this.additionalExportedTypeNamesForSelection(type, ctx),\n ]\n .filter(Boolean)\n .join(\", \");\n\n stream.write(\n `export type {${typeExports}} from './${selectionFileName}';\\n`,\n );\n\n const defaultSelectionName = defaultSelectionNameMap.get(type);\n const valueExports = [\n emptySelectionNameMap.get(type),\n defaultSelectionName,\n ]\n .filter(Boolean)\n .join(\", \");\n\n if (valueExports.length !== 0) {\n stream.write(\n `export {${valueExports}} from './${selectionFileName}';\\n`,\n );\n }\n }\n await stream.end();\n })(),\n ]);\n }\n\n private async generateInputTypes(inputTypes: GraphQLInputObjectType[]) {\n const dir = join(this.targetDir, \"inputs\");\n const promises = inputTypes.map(async (type) => {\n const stream = createStream(join(dir, `${toKebabCase(type.name)}.ts`));\n new InputWriter(type, stream, this.options).write();\n await stream.end();\n });\n await Promise.all([...promises, this.writeSimpleIndex(dir, inputTypes)]);\n }\n\n private async generateEnumTypes(enumTypes: GraphQLEnumType[]) {\n const dir = join(this.targetDir, \"enums\");\n const promises = enumTypes.map(async (type) => {\n const stream = createStream(join(dir, `${toKebabCase(type.name)}.ts`));\n new EnumWriter(type, stream, this.options).write();\n await stream.end();\n });\n await Promise.all([\n ...promises,\n this.writeSimpleIndex(dir, enumTypes, true),\n ]);\n }\n\n private async generateTypeHierarchy(\n schema: GraphQLSchema,\n typeHierarchy: TypeHierarchyGraph,\n ) {\n const stream = createStream(join(this.targetDir, \"type-hierarchy.ts\"));\n new TypeHierarchyWriter(\n schema,\n typeHierarchy,\n stream,\n this.options,\n ).write();\n await endStream(stream);\n }\n\n private async generateEnumInputMetadata(schema: GraphQLSchema) {\n const stream = createStream(join(this.targetDir, \"enum-input-metadata.ts\"));\n new EnumInputMetadataWriter(schema, stream, this.options).write();\n await endStream(stream);\n }\n\n private async writeSimpleIndex(\n dir: string,\n types: GraphQLNamedType[],\n typeOnly = true,\n ) {\n const stream = createStream(join(dir, \"index.ts\"));\n const keyword = typeOnly ? \"export type\" : \"export\";\n for (const type of types) {\n stream.write(\n `${keyword} {${type.name}} from './${toKebabCase(type.name)}';\\n`,\n );\n }\n await stream.end();\n }\n\n private async generateAsyncRuntime() {\n const stream = createStream(join(this.targetDir, \"client-runtime.ts\"));\n stream.write(ASYNC_CODE);\n await endStream(stream);\n }\n\n private async writeIndex(schema: GraphQLSchema, ctx: SelectionContext) {\n const stream = createStream(join(this.targetDir, \"index.ts\"));\n const selectionSuffix = this.options.selectionSuffix ?? \"Selection\";\n stream.write(\n `import type { Selection, ExecutableSelection, SchemaType, ShapeOf, VariablesOf } from \"../dist/index.mjs\";\\n`,\n );\n stream.write(\n `import { FragmentRef, createSelection, resolveRegisteredSchemaType } from \"../dist/index.mjs\";\\n`,\n );\n for (const type of ctx.selectionTypes) {\n const selectionTypeName = `${type.name}${selectionSuffix}`;\n stream.write(\n `import type { ${selectionTypeName} } from \"./selections/${toKebabCase(selectionTypeName)}\";\\n`,\n );\n }\n stream.write(\n `import { ENUM_INPUT_METADATA } from \"./enum-input-metadata\";\\n\\n`,\n );\n stream.write(\n `export type { GraphQLExecutor, GraphQLSubscriber, Simplify } from \"./client-runtime\";\\n`,\n );\n stream.write(\n `export { setGraphQLExecutor, setGraphQLSubscriber, execute, subscribe } from \"./client-runtime\";\\n`,\n );\n stream.write(\n \"export type { ImplementationType } from './type-hierarchy';\\n\",\n );\n stream.write(\n \"export { upcastTypes, downcastTypes } from './type-hierarchy';\\n\",\n );\n stream.write(\n `export interface FragmentSelectionMap<T extends object = {}, TVariables extends object = {}> {\\n`,\n );\n for (const type of ctx.selectionTypes) {\n const selectionTypeName = `${type.name}${selectionSuffix}`;\n stream.write(\n ` '${type.name}': ${selectionTypeName}<T, TVariables>;\\n`,\n );\n }\n stream.write(\"}\\n\");\n stream.write(\n `export type FragmentTypeName = keyof FragmentSelectionMap;\\n`,\n );\n stream.write(\n `export type FragmentSelectionFor<E extends FragmentTypeName, T extends object = {}, TVariables extends object = {}> = FragmentSelectionMap<T, TVariables>[E];\\n`,\n );\n stream.write(\n `\\nexport function fragment$<const E extends FragmentTypeName, S extends FragmentSelectionFor<E, object, object>>(\\n`,\n );\n stream.write(` typeName: E,\\n`);\n stream.write(\n ` builder: (it: FragmentSelectionFor<E, {}, {}>) => S,\\n`,\n );\n stream.write(` fragmentName?: string,\\n`);\n stream.write(\n `): FragmentRef<string, E, ShapeOf<S>, VariablesOf<S>> {\\n`,\n );\n stream.write(\n ` const schemaType = resolveRegisteredSchemaType(typeName);\\n`,\n );\n stream.write(` if (!schemaType) {\\n`);\n stream.write(\n ` throw new Error(\\`Cannot resolve schema type \\\"\\${typeName}\\\" for fragment$\\`);\\n`,\n );\n stream.write(` }\\n`);\n stream.write(` const base = createSelection<E, Selection<E, {}, {}>>(\\n`);\n stream.write(` schemaType as SchemaType<E>,\\n`);\n stream.write(` ENUM_INPUT_METADATA,\\n`);\n stream.write(` undefined,\\n`);\n stream.write(` );\\n`);\n stream.write(\n ` const selection = builder(base as unknown as FragmentSelectionFor<E, {}, {}>);\\n`,\n );\n stream.write(\n ` return new FragmentRef(\\n`,\n );\n stream.write(\n ` fragmentName ?? \\`\\${typeName}Fragment\\`,\\n`,\n );\n stream.write(\n ` selection as unknown as ExecutableSelection<E, ShapeOf<S>, VariablesOf<S>>,\\n`,\n );\n stream.write(` );\\n`);\n stream.write(`}\\n`);\n await endStream(stream);\n }\n\n /**\n * Creates node_modules/@ptdgrp/typedgql/index.ts\n * so users can import generated types and the root gateway via `import { G } from '@ptdgrp/typedgql'`.\n * Also patches package.json exports for ESM/type resolution to point to the generated entry.\n */\n private async writePackageEntrypoint(\n schema: GraphQLSchema,\n ctx: SelectionContext,\n ) {\n await mkdir(PACKAGE_DIR, { recursive: true });\n\n const indexStream = createStream(join(PACKAGE_DIR, \"index.ts\"));\n this.writePackageIndexCode(indexStream, schema, ctx);\n await endStream(indexStream);\n\n await this.patchPackageJsonForGeneratedEntrypoint();\n }\n\n private async patchPackageJsonForGeneratedEntrypoint() {\n const packageJsonPath = join(PACKAGE_DIR, \"package.json\");\n const raw = await readFile(packageJsonPath, \"utf8\");\n const pkg = JSON.parse(raw) as {\n types?: string;\n exports?: Record<string, unknown>;\n };\n\n const exportsMap =\n typeof pkg.exports === \"object\" && pkg.exports !== null\n ? (pkg.exports as Record<string, unknown>)\n : {};\n const rootExportRaw = exportsMap[\".\"];\n const rootExport =\n typeof rootExportRaw === \"object\" && rootExportRaw !== null\n ? (rootExportRaw as Record<string, unknown>)\n : {};\n\n const importExportRaw = rootExport.import;\n const importExport =\n typeof importExportRaw === \"object\" && importExportRaw !== null\n ? (importExportRaw as Record<string, unknown>)\n : {};\n\n // ESM consumers and TypeScript should resolve to generated entrypoint.\n importExport.types = \"./index.ts\";\n importExport.default = \"./index.ts\";\n rootExport.import = importExport;\n exportsMap[\".\"] = rootExport;\n pkg.exports = exportsMap;\n pkg.types = \"./index.ts\";\n\n await writeFile(\n packageJsonPath,\n `${JSON.stringify(pkg, null, 2)}\\n`,\n \"utf8\",\n );\n }\n\n private writePackageIndexCode(\n stream: WriteStream,\n schema: GraphQLSchema,\n _ctx: SelectionContext,\n ) {\n const typeMap = schema.getTypeMap();\n const queryType = typeMap[\"Query\"];\n const mutationType = typeMap[\"Mutation\"];\n const subscriptionType = typeMap[\"Subscription\"];\n\n // Re-export everything from the generated __generated/index.ts\n // (includes execute, setGraphQLExecutor, ImplementationType, upcastTypes, etc.)\n stream.write(`export * from './__generated/index';\\n`);\n stream.write(\n `export type { Selection, ExecutableSelection, ShapeOf, VariablesOf, Expand, FieldSelection, DirectiveArgs, EnumInputMetadata, EnumInputMetaType, AcceptableVariables, UnresolvedVariables, ValueOrThunk, SchemaType, SchemaField, SchemaTypeCategory, SchemaFieldCategory, FieldOptions } from './dist/index.mjs';\\n`,\n );\n stream.write(\n `export { FragmentSpread, FragmentRef, StringValue, runtimeOf, createSchemaType, resolveRegisteredSchemaType, registerSchemaTypeFactory, SelectionNode, createSelection, ParameterRef, EnumInputMetadataBuilder, TextBuilder, cyrb53 } from './dist/index.mjs';\\n`,\n );\n stream.write(`import { fragment$ } from './__generated/index';\\n`);\n\n // Import root operation selections for building the gateway object.\n if (queryType instanceof GraphQLObjectType) {\n stream.write(\n `import { query$ } from './__generated/selections/${toKebabCase(\"QuerySelection\")}';\\n`,\n );\n }\n if (mutationType instanceof GraphQLObjectType) {\n stream.write(\n `import { mutation$ } from './__generated/selections/${toKebabCase(\"MutationSelection\")}';\\n`,\n );\n }\n if (subscriptionType instanceof GraphQLObjectType) {\n stream.write(\n `import { subscription$ } from './__generated/selections/${toKebabCase(\"SubscriptionSelection\")}';\\n`,\n );\n }\n stream.write(\"\\n\");\n\n // Re-export root operation selections for direct imports:\n // import { query$, mutation$, subscription$ } from '@ptdgrp/typedgql'\n if (queryType instanceof GraphQLObjectType) {\n stream.write(\"export { query$ };\\n\");\n }\n if (mutationType instanceof GraphQLObjectType) {\n stream.write(\"export { mutation$ };\\n\");\n }\n if (subscriptionType instanceof GraphQLObjectType) {\n stream.write(\"export { subscription$ };\\n\");\n }\n stream.write(\"\\n\");\n\n stream.write(\"export const G = {\\n\");\n if (queryType instanceof GraphQLObjectType) {\n stream.write(\" query: query$,\\n\");\n }\n if (mutationType instanceof GraphQLObjectType) {\n stream.write(\" mutation: mutation$,\\n\");\n }\n if (subscriptionType instanceof GraphQLObjectType) {\n stream.write(\" subscription: subscription$,\\n\");\n }\n stream.write(\" fragment: fragment$,\\n\");\n stream.write(\"} as const;\\n\");\n\n if (this.hasGeneratedEnums(schema)) {\n stream.write(`export * from './__generated/enums';\\n`);\n }\n if (this.hasGeneratedInputs(schema)) {\n stream.write(`export * from './__generated/inputs';\\n`);\n }\n stream.write(`export type * from './__generated/selections';\\n`);\n stream.write(`export type * from './__generated/type-hierarchy';\\n`);\n }\n\n private hasGeneratedEnums(schema: GraphQLSchema): boolean {\n const typeMap = schema.getTypeMap();\n for (const typeName in typeMap) {\n if (typeName.startsWith(\"__\")) continue;\n const type = typeMap[typeName]!;\n if (\n type instanceof GraphQLEnumType &&\n !isExcludedTypeName(this.options, type.name)\n ) {\n return true;\n }\n }\n return false;\n }\n\n private hasGeneratedInputs(schema: GraphQLSchema): boolean {\n const typeMap = schema.getTypeMap();\n for (const typeName in typeMap) {\n if (typeName.startsWith(\"__\")) continue;\n const type = typeMap[typeName]!;\n if (\n type instanceof GraphQLInputObjectType &&\n !isExcludedTypeName(this.options, type.name)\n ) {\n return true;\n }\n }\n return false;\n }\n\n // ── Schema validation ──\n\n private validateSchema(schema: GraphQLSchema): void {\n const typeMap = schema.getTypeMap();\n\n // Check for reserved field names\n for (const typeName in typeMap) {\n const type = typeMap[typeName]!;\n if (\n type instanceof GraphQLObjectType ||\n type instanceof GraphQLInterfaceType\n ) {\n for (const fieldName in type.getFields()) {\n if (RESERVED_FIELDS.has(fieldName)) {\n throw new Error(\n `Illegal field '${fieldName}' of type '${typeName}', ` +\n \"it's name is protected by '@ptdgrp/typedgql', please change the server-side app\",\n );\n }\n }\n }\n }\n\n // Validate idFieldMap\n const { idFieldMap } = this.options;\n if (idFieldMap) {\n for (const typeName in idFieldMap) {\n const type = typeMap[typeName];\n if (\n !(type instanceof GraphQLObjectType) &&\n !(type instanceof GraphQLInterfaceType)\n ) {\n throw new Error(\n `config.idFieldMap contains an illegal key '${typeName}', ` +\n \"that is neither a graphql object type nor graphql interface type\",\n );\n }\n const idField = type.getFields()[idFieldMap[typeName]!];\n if (!idField) {\n throw new Error(\n `config.idFieldMap['${typeName}'] is illegal, ` +\n `there is no field named '${idFieldMap[typeName]}' in the type '${typeName}'`,\n );\n }\n if (targetTypeOf(idField.type) !== undefined) {\n throw new Error(\n `config.idFieldMap['${typeName}'] is illegal, ` +\n `the field '${idFieldMap[typeName]}' of the type '${typeName}' is not scalar`,\n );\n }\n }\n }\n\n // Validate defaultSelectionExcludeMap\n const { defaultSelectionExcludeMap: excludeMap } = this.options;\n if (excludeMap) {\n for (const typeName in excludeMap) {\n const type = typeMap[typeName];\n if (\n !(type instanceof GraphQLObjectType) &&\n !(type instanceof GraphQLInterfaceType)\n ) {\n throw new Error(\n `config.defaultSelectionExcludeMap contains an illegal key '${typeName}' ` +\n \"that is neither a graphql object type nor graphql interface type\",\n );\n }\n const fieldMap = type.getFields();\n const fieldNames = excludeMap[typeName]!;\n if (!Array.isArray(fieldNames)) {\n throw new Error(\n `config.defaultSelectionExcludeMap['${typeName}'] is not array`,\n );\n }\n for (let i = 0; i < fieldNames.length; i++) {\n const fieldName = fieldNames[i]!;\n if (fieldMap[fieldName] === undefined) {\n throw new Error(\n `config.defaultSelectionExcludeMap['${typeName}'][${i}] is illegal, ` +\n `its value '${fieldName}' is not a field of graphql type '${typeName}'`,\n );\n }\n }\n }\n }\n }\n}\n\n// ─── Utilities ───────────────────────────────────────────────────────\n\nexport function createStream(path: string): WriteStream {\n return createWriteStream(path);\n}\n\nexport function endStream(stream: WriteStream): Promise<void> {\n return new Promise((resolve, reject) => {\n stream.end(() => resolve());\n stream.on(\"error\", reject);\n });\n}\n","import { readFile } from \"fs/promises\";\nimport { GraphQLSchema } from \"graphql\";\nimport { buildSchema, getIntrospectionQuery, buildClientSchema } from \"graphql\";\n\nexport async function loadRemoteSchema(\n endpoint: string,\n headers?: { [key: string]: string },\n): Promise<GraphQLSchema> {\n const body = JSON.stringify({\n query: getIntrospectionQuery({ oneOf: true }),\n });\n const response = await fetch(endpoint, {\n method: \"POST\",\n body,\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n ...headers,\n },\n });\n const { data, errors } = (await response.json()) as {\n data: Parameters<typeof buildClientSchema>[0];\n errors?: unknown;\n };\n if (errors !== undefined) {\n throw new Error(JSON.stringify(errors));\n }\n return buildClientSchema(data);\n}\n\nexport async function loadLocalSchema(\n location: string,\n): Promise<GraphQLSchema> {\n const sdl = await readFile(location, { encoding: \"utf8\" });\n return buildSchema(sdl);\n}\n"],"mappings":"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"}