@ptdgrp/typedgql 1.0.0-beta.10 → 1.0.0-beta.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/node.cjs +1 -1
- package/dist/node.d.cts.map +1 -1
- package/dist/node.d.mts.map +1 -1
- package/dist/node.mjs +1 -1
- package/dist/{schema-loader-dDSoNpTn.cjs → schema-loader-BJpVvW9r.cjs} +24 -40
- package/dist/{schema-loader-D4z1rOMz.mjs → schema-loader-SRJcLQVA.mjs} +25 -41
- package/dist/schema-loader-SRJcLQVA.mjs.map +1 -0
- package/dist/vite.cjs +1 -1
- package/dist/vite.mjs +1 -1
- package/package.json +1 -1
- package/dist/schema-loader-D4z1rOMz.mjs.map +0 -1
package/dist/node.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
-
const require_schema_loader = require('./schema-loader-
|
|
2
|
+
const require_schema_loader = require('./schema-loader-BJpVvW9r.cjs');
|
|
3
3
|
|
|
4
4
|
exports.Generator = require_schema_loader.Generator;
|
|
5
5
|
exports.loadLocalSchema = require_schema_loader.loadLocalSchema;
|
package/dist/node.d.cts.map
CHANGED
|
@@ -1 +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,
|
|
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,QAsXQ,sBAAA;EAAA,QAaA,sCAAA;EAAA,QAuCN,qBAAA;EAAA,QA2EA,iBAAA;EAAA,QAeA,kBAAA;EAAA,QAiBA,cAAA;AAAA;;;iBC/kBY,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.map
CHANGED
|
@@ -1 +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,
|
|
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,QAsXQ,sBAAA;EAAA,QAaA,sCAAA;EAAA,QAuCN,qBAAA;EAAA,QA2EA,iBAAA;EAAA,QAeA,kBAAA;EAAA,QAiBA,cAAA;AAAA;;;iBC/kBY,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
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { n as loadRemoteSchema, r as Generator, t as loadLocalSchema } from "./schema-loader-
|
|
1
|
+
import { n as loadRemoteSchema, r as Generator, t as loadLocalSchema } from "./schema-loader-SRJcLQVA.mjs";
|
|
2
2
|
|
|
3
3
|
export { Generator, loadLocalSchema, loadRemoteSchema };
|
|
@@ -559,26 +559,23 @@ var SelectionWriter = class extends Writer {
|
|
|
559
559
|
for (const field of Object.values(this.fieldMap)) this.importFieldTypes(field);
|
|
560
560
|
const importedConcreteSelectionNames = /* @__PURE__ */ new Set();
|
|
561
561
|
const importedConcreteSelectionModules = /* @__PURE__ */ new Set();
|
|
562
|
-
const ensureConcreteSelectionTypeImported = (type) => {
|
|
563
|
-
if (type === this.modelType) return;
|
|
564
|
-
const selectionTypeName = this.selectionTypeNameForType(type);
|
|
565
|
-
const selectionModule = `./${toKebabCase(selectionTypeName)}`;
|
|
566
|
-
if (!importedConcreteSelectionNames.has(selectionTypeName)) {
|
|
567
|
-
importedConcreteSelectionNames.add(selectionTypeName);
|
|
568
|
-
imports.useType(selectionModule, selectionTypeName);
|
|
569
|
-
}
|
|
570
|
-
if (!importedConcreteSelectionModules.has(selectionModule)) {
|
|
571
|
-
importedConcreteSelectionModules.add(selectionModule);
|
|
572
|
-
imports.useSideEffect(selectionModule);
|
|
573
|
-
}
|
|
574
|
-
};
|
|
575
562
|
for (const field of Object.values(this.fieldMap)) {
|
|
576
563
|
const targetType = targetTypeOf(field.type);
|
|
577
564
|
if (targetType === void 0 || targetType === this.modelType) continue;
|
|
578
|
-
|
|
565
|
+
const selectionTypeName = this.selectionTypeNameForType(targetType);
|
|
566
|
+
const selectionModule = `./${toKebabCase(selectionTypeName)}`;
|
|
567
|
+
if (importedConcreteSelectionNames.has(selectionTypeName)) {
|
|
568
|
+
if (!importedConcreteSelectionModules.has(selectionModule)) {
|
|
569
|
+
importedConcreteSelectionModules.add(selectionModule);
|
|
570
|
+
imports.useSideEffect(selectionModule);
|
|
571
|
+
}
|
|
572
|
+
continue;
|
|
573
|
+
}
|
|
574
|
+
importedConcreteSelectionNames.add(selectionTypeName);
|
|
575
|
+
imports.useType(selectionModule, selectionTypeName);
|
|
576
|
+
importedConcreteSelectionModules.add(selectionModule);
|
|
577
|
+
imports.useSideEffect(selectionModule);
|
|
579
578
|
}
|
|
580
|
-
const downcasts = this.ctx.typeHierarchy.downcastTypeMap.get(this.modelType);
|
|
581
|
-
if (downcasts) for (const downcast of downcasts) ensureConcreteSelectionTypeImported(downcast);
|
|
582
579
|
const upcastTypes = this.ctx.typeHierarchy.upcastTypeMap.get(this.modelType);
|
|
583
580
|
if (upcastTypes !== void 0) for (const upcastType of upcastTypes) {
|
|
584
581
|
const selectionTypeName = `${upcastType.name}${this.options.selectionSuffix ?? "Selection"}`;
|
|
@@ -634,16 +631,15 @@ var SelectionWriter = class extends Writer {
|
|
|
634
631
|
if (isOperationRootTypeName(this.modelType.name)) return;
|
|
635
632
|
const t = this.text.bind(this);
|
|
636
633
|
const modelName = this.modelType.name;
|
|
637
|
-
const
|
|
634
|
+
const selectionSuperType = this.superSelectionTypeName(this.modelType);
|
|
638
635
|
const fragmentTypeName = `ImplementationType<'${modelName}'>`;
|
|
639
|
-
const inlineSelectionFor = (xName, data, vars) => this.fragmentSelectionTypeForModel(xName, data, vars);
|
|
640
636
|
const resultDataType = `XName extends '${modelName}' ?\nT & X :\nWithTypeName<T, ${fragmentTypeName}> & (WithTypeName<X, ImplementationType<XName>> | {__typename: Exclude<${fragmentTypeName}, ImplementationType<XName>>})`;
|
|
641
637
|
t("\n$on<X extends object, XVariables extends object>");
|
|
642
638
|
this.scope({
|
|
643
639
|
type: "parameters",
|
|
644
640
|
multiLines: true
|
|
645
641
|
}, () => {
|
|
646
|
-
t(`builder: (it: ${
|
|
642
|
+
t(`builder: (it: ${selectionSuperType}<'${modelName}', {}, {}>) => ${selectionSuperType}<'${modelName}', X, XVariables>`);
|
|
647
643
|
});
|
|
648
644
|
t(`: ${this.selectionTypeName}`);
|
|
649
645
|
this.scope({
|
|
@@ -662,7 +658,7 @@ var SelectionWriter = class extends Writer {
|
|
|
662
658
|
}, () => {
|
|
663
659
|
t("typeName: XName");
|
|
664
660
|
this.separator(", ");
|
|
665
|
-
t(`builder: (it: ${
|
|
661
|
+
t(`builder: (it: ${selectionSuperType}<XName, {}, {}>) => ${selectionSuperType}<XName, X, XVariables>`);
|
|
666
662
|
});
|
|
667
663
|
t(`: ${this.selectionTypeName}`);
|
|
668
664
|
this.scope({
|
|
@@ -692,16 +688,6 @@ var SelectionWriter = class extends Writer {
|
|
|
692
688
|
});
|
|
693
689
|
t(";\n");
|
|
694
690
|
}
|
|
695
|
-
fragmentSelectionTypeForModel(xNameRef, dataType, variableType) {
|
|
696
|
-
const branches = [];
|
|
697
|
-
const selectionTypeByName = /* @__PURE__ */ new Map();
|
|
698
|
-
selectionTypeByName.set(this.modelType.name, this.selectionTypeName);
|
|
699
|
-
const downcasts = this.ctx.typeHierarchy.downcastTypeMap.get(this.modelType);
|
|
700
|
-
if (downcasts) for (const t of downcasts) selectionTypeByName.set(t.name, this.selectionTypeNameForType(t));
|
|
701
|
-
for (const [typeName, selectionTypeName] of selectionTypeByName) branches.push(`${xNameRef} extends '${typeName}' ? ${selectionTypeName}<${dataType}, ${variableType}> :`);
|
|
702
|
-
branches.push("never");
|
|
703
|
-
return branches.join("\n");
|
|
704
|
-
}
|
|
705
691
|
writeDirectiveBuiltins() {
|
|
706
692
|
const t = this.text.bind(this);
|
|
707
693
|
t("\n\n$directive(name: string, args?: DirectiveArgs): ");
|
|
@@ -1732,7 +1718,7 @@ var Generator = class {
|
|
|
1732
1718
|
async writeIndex(schema, ctx) {
|
|
1733
1719
|
const stream = createStream((0, path.join)(this.targetDir, "index.ts"));
|
|
1734
1720
|
const selectionSuffix = this.options.selectionSuffix ?? "Selection";
|
|
1735
|
-
stream.write(`import type { Selection
|
|
1721
|
+
stream.write(`import type { Selection } from "../dist/index.mjs";\n`);
|
|
1736
1722
|
stream.write(`import { FragmentRef, createSelection, resolveRegisteredSchemaType } from "../dist/index.mjs";\n`);
|
|
1737
1723
|
for (const type of ctx.selectionTypes) {
|
|
1738
1724
|
const selectionTypeName = `${type.name}${selectionSuffix}`;
|
|
@@ -1743,33 +1729,31 @@ var Generator = class {
|
|
|
1743
1729
|
stream.write(`export { setGraphQLExecutor, setGraphQLSubscriber, execute, subscribe } from "./client-runtime";\n`);
|
|
1744
1730
|
stream.write("export type { ImplementationType } from './type-hierarchy';\n");
|
|
1745
1731
|
stream.write("export { upcastTypes, downcastTypes } from './type-hierarchy';\n");
|
|
1732
|
+
const fragmentTypeNames = ctx.selectionTypes.length === 0 ? "never" : ctx.selectionTypes.map((t) => `'${t.name}'`).join(" | ");
|
|
1733
|
+
stream.write(`export type FragmentTypeName = ${fragmentTypeNames};\n`);
|
|
1746
1734
|
stream.write(`export interface FragmentSelectionMap<T extends object = {}, TVariables extends object = {}> {\n`);
|
|
1747
1735
|
for (const type of ctx.selectionTypes) {
|
|
1748
1736
|
const selectionTypeName = `${type.name}${selectionSuffix}`;
|
|
1749
1737
|
stream.write(` '${type.name}': ${selectionTypeName}<T, TVariables>;\n`);
|
|
1750
1738
|
}
|
|
1751
1739
|
stream.write("}\n");
|
|
1752
|
-
stream.write(`export type FragmentTypeName = keyof FragmentSelectionMap;\n`);
|
|
1753
1740
|
stream.write(`export type FragmentSelectionFor<E extends FragmentTypeName, T extends object = {}, TVariables extends object = {}> = FragmentSelectionMap<T, TVariables>[E];\n`);
|
|
1754
|
-
stream.write(`\nexport function fragment$<
|
|
1741
|
+
stream.write(`\nexport function fragment$<E extends FragmentTypeName, T extends object, TVariables extends object>(\n`);
|
|
1755
1742
|
stream.write(` typeName: E,\n`);
|
|
1756
|
-
stream.write(` builder: (it: FragmentSelectionFor<E, {}, {}>) =>
|
|
1743
|
+
stream.write(` builder: (it: FragmentSelectionFor<E, {}, {}>) => FragmentSelectionFor<E, T, TVariables>,\n`);
|
|
1757
1744
|
stream.write(` fragmentName?: string,\n`);
|
|
1758
|
-
stream.write(`): FragmentRef<string, E,
|
|
1745
|
+
stream.write(`): FragmentRef<string, E, T, TVariables> {\n`);
|
|
1759
1746
|
stream.write(` const schemaType = resolveRegisteredSchemaType(typeName);\n`);
|
|
1760
1747
|
stream.write(` if (!schemaType) {\n`);
|
|
1761
1748
|
stream.write(` throw new Error(\`Cannot resolve schema type \"\${typeName}\" for fragment$\`);\n`);
|
|
1762
1749
|
stream.write(` }\n`);
|
|
1763
1750
|
stream.write(` const base = createSelection<E, Selection<E, {}, {}>>(\n`);
|
|
1764
|
-
stream.write(` schemaType as
|
|
1751
|
+
stream.write(` schemaType as any,\n`);
|
|
1765
1752
|
stream.write(` ENUM_INPUT_METADATA,\n`);
|
|
1766
1753
|
stream.write(` undefined,\n`);
|
|
1767
1754
|
stream.write(` );\n`);
|
|
1768
1755
|
stream.write(` const selection = builder(base as unknown as FragmentSelectionFor<E, {}, {}>);\n`);
|
|
1769
|
-
stream.write(` return new FragmentRef(
|
|
1770
|
-
stream.write(` fragmentName ?? \`\${typeName}Fragment\`,\n`);
|
|
1771
|
-
stream.write(` selection as unknown as ExecutableSelection<E, ShapeOf<S>, VariablesOf<S>>,\n`);
|
|
1772
|
-
stream.write(` );\n`);
|
|
1756
|
+
stream.write(` return new FragmentRef(fragmentName ?? \`\${typeName}Fragment\`, selection as any);\n`);
|
|
1773
1757
|
stream.write(`}\n`);
|
|
1774
1758
|
await endStream(stream);
|
|
1775
1759
|
}
|
|
@@ -559,26 +559,23 @@ var SelectionWriter = class extends Writer {
|
|
|
559
559
|
for (const field of Object.values(this.fieldMap)) this.importFieldTypes(field);
|
|
560
560
|
const importedConcreteSelectionNames = /* @__PURE__ */ new Set();
|
|
561
561
|
const importedConcreteSelectionModules = /* @__PURE__ */ new Set();
|
|
562
|
-
const ensureConcreteSelectionTypeImported = (type) => {
|
|
563
|
-
if (type === this.modelType) return;
|
|
564
|
-
const selectionTypeName = this.selectionTypeNameForType(type);
|
|
565
|
-
const selectionModule = `./${toKebabCase(selectionTypeName)}`;
|
|
566
|
-
if (!importedConcreteSelectionNames.has(selectionTypeName)) {
|
|
567
|
-
importedConcreteSelectionNames.add(selectionTypeName);
|
|
568
|
-
imports.useType(selectionModule, selectionTypeName);
|
|
569
|
-
}
|
|
570
|
-
if (!importedConcreteSelectionModules.has(selectionModule)) {
|
|
571
|
-
importedConcreteSelectionModules.add(selectionModule);
|
|
572
|
-
imports.useSideEffect(selectionModule);
|
|
573
|
-
}
|
|
574
|
-
};
|
|
575
562
|
for (const field of Object.values(this.fieldMap)) {
|
|
576
563
|
const targetType = targetTypeOf(field.type);
|
|
577
564
|
if (targetType === void 0 || targetType === this.modelType) continue;
|
|
578
|
-
|
|
565
|
+
const selectionTypeName = this.selectionTypeNameForType(targetType);
|
|
566
|
+
const selectionModule = `./${toKebabCase(selectionTypeName)}`;
|
|
567
|
+
if (importedConcreteSelectionNames.has(selectionTypeName)) {
|
|
568
|
+
if (!importedConcreteSelectionModules.has(selectionModule)) {
|
|
569
|
+
importedConcreteSelectionModules.add(selectionModule);
|
|
570
|
+
imports.useSideEffect(selectionModule);
|
|
571
|
+
}
|
|
572
|
+
continue;
|
|
573
|
+
}
|
|
574
|
+
importedConcreteSelectionNames.add(selectionTypeName);
|
|
575
|
+
imports.useType(selectionModule, selectionTypeName);
|
|
576
|
+
importedConcreteSelectionModules.add(selectionModule);
|
|
577
|
+
imports.useSideEffect(selectionModule);
|
|
579
578
|
}
|
|
580
|
-
const downcasts = this.ctx.typeHierarchy.downcastTypeMap.get(this.modelType);
|
|
581
|
-
if (downcasts) for (const downcast of downcasts) ensureConcreteSelectionTypeImported(downcast);
|
|
582
579
|
const upcastTypes = this.ctx.typeHierarchy.upcastTypeMap.get(this.modelType);
|
|
583
580
|
if (upcastTypes !== void 0) for (const upcastType of upcastTypes) {
|
|
584
581
|
const selectionTypeName = `${upcastType.name}${this.options.selectionSuffix ?? "Selection"}`;
|
|
@@ -634,16 +631,15 @@ var SelectionWriter = class extends Writer {
|
|
|
634
631
|
if (isOperationRootTypeName(this.modelType.name)) return;
|
|
635
632
|
const t = this.text.bind(this);
|
|
636
633
|
const modelName = this.modelType.name;
|
|
637
|
-
const
|
|
634
|
+
const selectionSuperType = this.superSelectionTypeName(this.modelType);
|
|
638
635
|
const fragmentTypeName = `ImplementationType<'${modelName}'>`;
|
|
639
|
-
const inlineSelectionFor = (xName, data, vars) => this.fragmentSelectionTypeForModel(xName, data, vars);
|
|
640
636
|
const resultDataType = `XName extends '${modelName}' ?\nT & X :\nWithTypeName<T, ${fragmentTypeName}> & (WithTypeName<X, ImplementationType<XName>> | {__typename: Exclude<${fragmentTypeName}, ImplementationType<XName>>})`;
|
|
641
637
|
t("\n$on<X extends object, XVariables extends object>");
|
|
642
638
|
this.scope({
|
|
643
639
|
type: "parameters",
|
|
644
640
|
multiLines: true
|
|
645
641
|
}, () => {
|
|
646
|
-
t(`builder: (it: ${
|
|
642
|
+
t(`builder: (it: ${selectionSuperType}<'${modelName}', {}, {}>) => ${selectionSuperType}<'${modelName}', X, XVariables>`);
|
|
647
643
|
});
|
|
648
644
|
t(`: ${this.selectionTypeName}`);
|
|
649
645
|
this.scope({
|
|
@@ -662,7 +658,7 @@ var SelectionWriter = class extends Writer {
|
|
|
662
658
|
}, () => {
|
|
663
659
|
t("typeName: XName");
|
|
664
660
|
this.separator(", ");
|
|
665
|
-
t(`builder: (it: ${
|
|
661
|
+
t(`builder: (it: ${selectionSuperType}<XName, {}, {}>) => ${selectionSuperType}<XName, X, XVariables>`);
|
|
666
662
|
});
|
|
667
663
|
t(`: ${this.selectionTypeName}`);
|
|
668
664
|
this.scope({
|
|
@@ -692,16 +688,6 @@ var SelectionWriter = class extends Writer {
|
|
|
692
688
|
});
|
|
693
689
|
t(";\n");
|
|
694
690
|
}
|
|
695
|
-
fragmentSelectionTypeForModel(xNameRef, dataType, variableType) {
|
|
696
|
-
const branches = [];
|
|
697
|
-
const selectionTypeByName = /* @__PURE__ */ new Map();
|
|
698
|
-
selectionTypeByName.set(this.modelType.name, this.selectionTypeName);
|
|
699
|
-
const downcasts = this.ctx.typeHierarchy.downcastTypeMap.get(this.modelType);
|
|
700
|
-
if (downcasts) for (const t of downcasts) selectionTypeByName.set(t.name, this.selectionTypeNameForType(t));
|
|
701
|
-
for (const [typeName, selectionTypeName] of selectionTypeByName) branches.push(`${xNameRef} extends '${typeName}' ? ${selectionTypeName}<${dataType}, ${variableType}> :`);
|
|
702
|
-
branches.push("never");
|
|
703
|
-
return branches.join("\n");
|
|
704
|
-
}
|
|
705
691
|
writeDirectiveBuiltins() {
|
|
706
692
|
const t = this.text.bind(this);
|
|
707
693
|
t("\n\n$directive(name: string, args?: DirectiveArgs): ");
|
|
@@ -1732,7 +1718,7 @@ var Generator = class {
|
|
|
1732
1718
|
async writeIndex(schema, ctx) {
|
|
1733
1719
|
const stream = createStream(join(this.targetDir, "index.ts"));
|
|
1734
1720
|
const selectionSuffix = this.options.selectionSuffix ?? "Selection";
|
|
1735
|
-
stream.write(`import type { Selection
|
|
1721
|
+
stream.write(`import type { Selection } from "../dist/index.mjs";\n`);
|
|
1736
1722
|
stream.write(`import { FragmentRef, createSelection, resolveRegisteredSchemaType } from "../dist/index.mjs";\n`);
|
|
1737
1723
|
for (const type of ctx.selectionTypes) {
|
|
1738
1724
|
const selectionTypeName = `${type.name}${selectionSuffix}`;
|
|
@@ -1743,33 +1729,31 @@ var Generator = class {
|
|
|
1743
1729
|
stream.write(`export { setGraphQLExecutor, setGraphQLSubscriber, execute, subscribe } from "./client-runtime";\n`);
|
|
1744
1730
|
stream.write("export type { ImplementationType } from './type-hierarchy';\n");
|
|
1745
1731
|
stream.write("export { upcastTypes, downcastTypes } from './type-hierarchy';\n");
|
|
1732
|
+
const fragmentTypeNames = ctx.selectionTypes.length === 0 ? "never" : ctx.selectionTypes.map((t) => `'${t.name}'`).join(" | ");
|
|
1733
|
+
stream.write(`export type FragmentTypeName = ${fragmentTypeNames};\n`);
|
|
1746
1734
|
stream.write(`export interface FragmentSelectionMap<T extends object = {}, TVariables extends object = {}> {\n`);
|
|
1747
1735
|
for (const type of ctx.selectionTypes) {
|
|
1748
1736
|
const selectionTypeName = `${type.name}${selectionSuffix}`;
|
|
1749
1737
|
stream.write(` '${type.name}': ${selectionTypeName}<T, TVariables>;\n`);
|
|
1750
1738
|
}
|
|
1751
1739
|
stream.write("}\n");
|
|
1752
|
-
stream.write(`export type FragmentTypeName = keyof FragmentSelectionMap;\n`);
|
|
1753
1740
|
stream.write(`export type FragmentSelectionFor<E extends FragmentTypeName, T extends object = {}, TVariables extends object = {}> = FragmentSelectionMap<T, TVariables>[E];\n`);
|
|
1754
|
-
stream.write(`\nexport function fragment$<
|
|
1741
|
+
stream.write(`\nexport function fragment$<E extends FragmentTypeName, T extends object, TVariables extends object>(\n`);
|
|
1755
1742
|
stream.write(` typeName: E,\n`);
|
|
1756
|
-
stream.write(` builder: (it: FragmentSelectionFor<E, {}, {}>) =>
|
|
1743
|
+
stream.write(` builder: (it: FragmentSelectionFor<E, {}, {}>) => FragmentSelectionFor<E, T, TVariables>,\n`);
|
|
1757
1744
|
stream.write(` fragmentName?: string,\n`);
|
|
1758
|
-
stream.write(`): FragmentRef<string, E,
|
|
1745
|
+
stream.write(`): FragmentRef<string, E, T, TVariables> {\n`);
|
|
1759
1746
|
stream.write(` const schemaType = resolveRegisteredSchemaType(typeName);\n`);
|
|
1760
1747
|
stream.write(` if (!schemaType) {\n`);
|
|
1761
1748
|
stream.write(` throw new Error(\`Cannot resolve schema type \"\${typeName}\" for fragment$\`);\n`);
|
|
1762
1749
|
stream.write(` }\n`);
|
|
1763
1750
|
stream.write(` const base = createSelection<E, Selection<E, {}, {}>>(\n`);
|
|
1764
|
-
stream.write(` schemaType as
|
|
1751
|
+
stream.write(` schemaType as any,\n`);
|
|
1765
1752
|
stream.write(` ENUM_INPUT_METADATA,\n`);
|
|
1766
1753
|
stream.write(` undefined,\n`);
|
|
1767
1754
|
stream.write(` );\n`);
|
|
1768
1755
|
stream.write(` const selection = builder(base as unknown as FragmentSelectionFor<E, {}, {}>);\n`);
|
|
1769
|
-
stream.write(` return new FragmentRef(
|
|
1770
|
-
stream.write(` fragmentName ?? \`\${typeName}Fragment\`,\n`);
|
|
1771
|
-
stream.write(` selection as unknown as ExecutableSelection<E, ShapeOf<S>, VariablesOf<S>>,\n`);
|
|
1772
|
-
stream.write(` );\n`);
|
|
1756
|
+
stream.write(` return new FragmentRef(fragmentName ?? \`\${typeName}Fragment\`, selection as any);\n`);
|
|
1773
1757
|
stream.write(`}\n`);
|
|
1774
1758
|
await endStream(stream);
|
|
1775
1759
|
}
|
|
@@ -1910,4 +1894,4 @@ async function loadLocalSchema(location) {
|
|
|
1910
1894
|
|
|
1911
1895
|
//#endregion
|
|
1912
1896
|
export { loadRemoteSchema as n, Generator as r, loadLocalSchema as t };
|
|
1913
|
-
//# sourceMappingURL=schema-loader-
|
|
1897
|
+
//# sourceMappingURL=schema-loader-SRJcLQVA.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-loader-SRJcLQVA.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 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 const selectionTypeName = this.selectionTypeNameForType(targetType);\n const selectionModule = `./${toKebabCase(selectionTypeName)}`;\n if (importedConcreteSelectionNames.has(selectionTypeName)) {\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 continue;\n }\n importedConcreteSelectionNames.add(selectionTypeName);\n imports.useType(selectionModule, selectionTypeName);\n importedConcreteSelectionModules.add(selectionModule);\n // Import both the type and the module itself:\n // - `import type` is for TS signatures\n // - side-effect import ensures registration code runs at module init time\n imports.useSideEffect(selectionModule);\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 selectionSuperType = this.superSelectionTypeName(this.modelType);\n const fragmentTypeName = `ImplementationType<'${modelName}'>`;\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: ${selectionSuperType}<'${modelName}', {}, {}>) => ${selectionSuperType}<'${modelName}', 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(\n `builder: (it: ${selectionSuperType}<XName, {}, {}>) => ${selectionSuperType}<XName, X, XVariables>`,\n );\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 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<any, any>\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<any>[] = [];\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(`import type { Selection } from \"../dist/index.mjs\";\\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 const fragmentTypeNames =\n ctx.selectionTypes.length === 0\n ? \"never\"\n : ctx.selectionTypes.map((t) => `'${t.name}'`).join(\" | \");\n stream.write(\n `export type FragmentTypeName = ${fragmentTypeNames};\\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 FragmentSelectionFor<E extends FragmentTypeName, T extends object = {}, TVariables extends object = {}> = FragmentSelectionMap<T, TVariables>[E];\\n`,\n );\n stream.write(\n `\\nexport function fragment$<E extends FragmentTypeName, T extends object, TVariables extends object>(\\n`,\n );\n stream.write(` typeName: E,\\n`);\n stream.write(\n ` builder: (it: FragmentSelectionFor<E, {}, {}>) => FragmentSelectionFor<E, T, TVariables>,\\n`,\n );\n stream.write(` fragmentName?: string,\\n`);\n stream.write(`): FragmentRef<string, E, T, TVariables> {\\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 any,\\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(fragmentName ?? \\`\\${typeName}Fragment\\`, selection as any);\\n`,\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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"}
|
package/dist/vite.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
-
const require_schema_loader = require('./schema-loader-
|
|
2
|
+
const require_schema_loader = require('./schema-loader-BJpVvW9r.cjs');
|
|
3
3
|
let node_fs_promises = require("node:fs/promises");
|
|
4
4
|
let node_crypto = require("node:crypto");
|
|
5
5
|
let node_path = require("node:path");
|
package/dist/vite.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as loadRemoteSchema, r as Generator, t as loadLocalSchema } from "./schema-loader-
|
|
1
|
+
import { n as loadRemoteSchema, r as Generator, t as loadLocalSchema } from "./schema-loader-SRJcLQVA.mjs";
|
|
2
2
|
import { readFile, realpath } from "node:fs/promises";
|
|
3
3
|
import { createHash } from "node:crypto";
|
|
4
4
|
import { resolve } from "node:path";
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
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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"}
|