@gqlkit-ts/cli 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (190) hide show
  1. package/dist/auto-type-generator/auto-type-generator.d.ts +10 -4
  2. package/dist/auto-type-generator/auto-type-generator.d.ts.map +1 -1
  3. package/dist/auto-type-generator/auto-type-generator.js +640 -133
  4. package/dist/auto-type-generator/auto-type-generator.js.map +1 -1
  5. package/dist/auto-type-generator/index.d.ts +8 -1
  6. package/dist/auto-type-generator/index.d.ts.map +1 -1
  7. package/dist/auto-type-generator/index.js +3 -0
  8. package/dist/auto-type-generator/index.js.map +1 -1
  9. package/dist/auto-type-generator/inline-enum-collector.d.ts +13 -5
  10. package/dist/auto-type-generator/inline-enum-collector.d.ts.map +1 -1
  11. package/dist/auto-type-generator/inline-enum-collector.js +107 -71
  12. package/dist/auto-type-generator/inline-enum-collector.js.map +1 -1
  13. package/dist/auto-type-generator/inline-object-traverser.d.ts +20 -0
  14. package/dist/auto-type-generator/inline-object-traverser.d.ts.map +1 -0
  15. package/dist/auto-type-generator/inline-object-traverser.js +22 -0
  16. package/dist/auto-type-generator/inline-object-traverser.js.map +1 -0
  17. package/dist/auto-type-generator/inline-union-collector.d.ts +29 -0
  18. package/dist/auto-type-generator/inline-union-collector.d.ts.map +1 -0
  19. package/dist/auto-type-generator/inline-union-collector.js +216 -0
  20. package/dist/auto-type-generator/inline-union-collector.js.map +1 -0
  21. package/dist/auto-type-generator/inline-union-types.d.ts +29 -0
  22. package/dist/auto-type-generator/inline-union-types.d.ts.map +1 -0
  23. package/dist/auto-type-generator/inline-union-types.js +2 -0
  24. package/dist/auto-type-generator/inline-union-types.js.map +1 -0
  25. package/dist/auto-type-generator/inline-union-validator.d.ts +76 -0
  26. package/dist/auto-type-generator/inline-union-validator.d.ts.map +1 -0
  27. package/dist/auto-type-generator/inline-union-validator.js +329 -0
  28. package/dist/auto-type-generator/inline-union-validator.js.map +1 -0
  29. package/dist/auto-type-generator/naming-convention.d.ts +18 -1
  30. package/dist/auto-type-generator/naming-convention.d.ts.map +1 -1
  31. package/dist/auto-type-generator/naming-convention.js +16 -0
  32. package/dist/auto-type-generator/naming-convention.js.map +1 -1
  33. package/dist/auto-type-generator/resolve-type-generator.d.ts +20 -0
  34. package/dist/auto-type-generator/resolve-type-generator.d.ts.map +1 -0
  35. package/dist/auto-type-generator/resolve-type-generator.js +2 -0
  36. package/dist/auto-type-generator/resolve-type-generator.js.map +1 -0
  37. package/dist/auto-type-generator/resolver-field-iterator.d.ts +13 -0
  38. package/dist/auto-type-generator/resolver-field-iterator.d.ts.map +1 -0
  39. package/dist/auto-type-generator/resolver-field-iterator.js +22 -0
  40. package/dist/auto-type-generator/resolver-field-iterator.js.map +1 -0
  41. package/dist/auto-type-generator/typename-extractor.d.ts +26 -0
  42. package/dist/auto-type-generator/typename-extractor.d.ts.map +1 -0
  43. package/dist/auto-type-generator/typename-extractor.js +142 -0
  44. package/dist/auto-type-generator/typename-extractor.js.map +1 -0
  45. package/dist/auto-type-generator/typename-resolve-type-generator.d.ts +35 -0
  46. package/dist/auto-type-generator/typename-resolve-type-generator.d.ts.map +1 -0
  47. package/dist/auto-type-generator/typename-resolve-type-generator.js +177 -0
  48. package/dist/auto-type-generator/typename-resolve-type-generator.js.map +1 -0
  49. package/dist/auto-type-generator/typename-types.d.ts +43 -0
  50. package/dist/auto-type-generator/typename-types.d.ts.map +1 -0
  51. package/dist/auto-type-generator/typename-types.js +37 -0
  52. package/dist/auto-type-generator/typename-types.js.map +1 -0
  53. package/dist/auto-type-generator/typename-validator.d.ts +37 -0
  54. package/dist/auto-type-generator/typename-validator.d.ts.map +1 -0
  55. package/dist/auto-type-generator/typename-validator.js +206 -0
  56. package/dist/auto-type-generator/typename-validator.js.map +1 -0
  57. package/dist/cli.js +2 -0
  58. package/dist/cli.js.map +1 -1
  59. package/dist/commands/docs.d.ts +51 -0
  60. package/dist/commands/docs.d.ts.map +1 -0
  61. package/dist/commands/docs.js +154 -0
  62. package/dist/commands/docs.js.map +1 -0
  63. package/dist/gen-orchestrator/orchestrator.d.ts.map +1 -1
  64. package/dist/gen-orchestrator/orchestrator.js +13 -6
  65. package/dist/gen-orchestrator/orchestrator.js.map +1 -1
  66. package/dist/resolver-extractor/extract-resolvers.d.ts +19 -1
  67. package/dist/resolver-extractor/extract-resolvers.d.ts.map +1 -1
  68. package/dist/resolver-extractor/extractor/define-api-extractor.d.ts +5 -0
  69. package/dist/resolver-extractor/extractor/define-api-extractor.d.ts.map +1 -1
  70. package/dist/resolver-extractor/extractor/define-api-extractor.js +14 -61
  71. package/dist/resolver-extractor/extractor/define-api-extractor.js.map +1 -1
  72. package/dist/resolver-extractor/index.d.ts +0 -1
  73. package/dist/resolver-extractor/index.d.ts.map +1 -1
  74. package/dist/resolver-extractor/validator/abstract-resolver-validator.d.ts +1 -0
  75. package/dist/resolver-extractor/validator/abstract-resolver-validator.d.ts.map +1 -1
  76. package/dist/resolver-extractor/validator/abstract-resolver-validator.js +9 -5
  77. package/dist/resolver-extractor/validator/abstract-resolver-validator.js.map +1 -1
  78. package/dist/schema-generator/emitter/code-emitter.d.ts.map +1 -1
  79. package/dist/schema-generator/emitter/code-emitter.js +20 -0
  80. package/dist/schema-generator/emitter/code-emitter.js.map +1 -1
  81. package/dist/schema-generator/generate-schema.d.ts +1 -0
  82. package/dist/schema-generator/generate-schema.d.ts.map +1 -1
  83. package/dist/schema-generator/generate-schema.js +72 -3
  84. package/dist/schema-generator/generate-schema.js.map +1 -1
  85. package/dist/schema-generator/integrator/result-integrator.d.ts +14 -2
  86. package/dist/schema-generator/integrator/result-integrator.d.ts.map +1 -1
  87. package/dist/schema-generator/integrator/result-integrator.js +54 -1
  88. package/dist/schema-generator/integrator/result-integrator.js.map +1 -1
  89. package/dist/schema-generator/resolver-collector/resolver-collector.d.ts +2 -0
  90. package/dist/schema-generator/resolver-collector/resolver-collector.d.ts.map +1 -1
  91. package/dist/schema-generator/resolver-collector/resolver-collector.js +22 -0
  92. package/dist/schema-generator/resolver-collector/resolver-collector.js.map +1 -1
  93. package/dist/shared/enum-prefix-detector.d.ts +63 -0
  94. package/dist/shared/enum-prefix-detector.d.ts.map +1 -0
  95. package/dist/shared/enum-prefix-detector.js +80 -0
  96. package/dist/shared/enum-prefix-detector.js.map +1 -0
  97. package/dist/shared/ignore-fields-detector.d.ts +26 -0
  98. package/dist/shared/ignore-fields-detector.d.ts.map +1 -0
  99. package/dist/shared/ignore-fields-detector.js +83 -0
  100. package/dist/shared/ignore-fields-detector.js.map +1 -0
  101. package/dist/shared/ignore-fields-validator.d.ts +29 -0
  102. package/dist/shared/ignore-fields-validator.d.ts.map +1 -0
  103. package/dist/shared/ignore-fields-validator.js +43 -0
  104. package/dist/shared/ignore-fields-validator.js.map +1 -0
  105. package/dist/shared/index.d.ts +2 -0
  106. package/dist/shared/index.d.ts.map +1 -1
  107. package/dist/shared/index.js.map +1 -1
  108. package/dist/shared/source-location.d.ts +5 -0
  109. package/dist/shared/source-location.d.ts.map +1 -1
  110. package/dist/shared/source-location.js +7 -0
  111. package/dist/shared/source-location.js.map +1 -1
  112. package/dist/type-extractor/converter/graphql-converter.d.ts.map +1 -1
  113. package/dist/type-extractor/converter/graphql-converter.js +21 -7
  114. package/dist/type-extractor/converter/graphql-converter.js.map +1 -1
  115. package/dist/type-extractor/extractor/field-type-resolver.js +42 -3
  116. package/dist/type-extractor/extractor/field-type-resolver.js.map +1 -1
  117. package/dist/type-extractor/extractor/type-extractor.d.ts.map +1 -1
  118. package/dist/type-extractor/extractor/type-extractor.js +88 -23
  119. package/dist/type-extractor/extractor/type-extractor.js.map +1 -1
  120. package/dist/type-extractor/types/diagnostics.d.ts +1 -1
  121. package/dist/type-extractor/types/diagnostics.d.ts.map +1 -1
  122. package/dist/type-extractor/types/ts-type-reference-factory.d.ts +10 -2
  123. package/dist/type-extractor/types/ts-type-reference-factory.d.ts.map +1 -1
  124. package/dist/type-extractor/types/ts-type-reference-factory.js +8 -2
  125. package/dist/type-extractor/types/ts-type-reference-factory.js.map +1 -1
  126. package/dist/type-extractor/types/typescript.d.ts +4 -0
  127. package/dist/type-extractor/types/typescript.d.ts.map +1 -1
  128. package/docs/coding-agents.md +64 -0
  129. package/docs/configuration.md +6 -20
  130. package/docs/getting-started.md +15 -12
  131. package/docs/index.md +36 -22
  132. package/docs/integration/apollo.md +8 -40
  133. package/docs/integration/drizzle.md +6 -10
  134. package/docs/integration/prisma.md +196 -0
  135. package/docs/integration/yoga.md +8 -40
  136. package/docs/schema/abstract-resolvers.md +117 -0
  137. package/docs/schema/directives.md +5 -0
  138. package/docs/schema/documentation.md +5 -0
  139. package/docs/schema/enums.md +99 -0
  140. package/docs/schema/fields.md +64 -0
  141. package/docs/schema/index.md +21 -0
  142. package/docs/schema/inputs.md +115 -15
  143. package/docs/schema/interfaces.md +31 -1
  144. package/docs/schema/objects.md +40 -0
  145. package/docs/schema/queries-mutations.md +136 -22
  146. package/docs/schema/scalars.md +5 -0
  147. package/docs/schema/unions.md +208 -1
  148. package/docs/what-is-gqlkit.md +13 -8
  149. package/package.json +6 -4
  150. package/src/auto-type-generator/auto-type-generator.ts +946 -201
  151. package/src/auto-type-generator/index.ts +42 -0
  152. package/src/auto-type-generator/inline-enum-collector.ts +187 -139
  153. package/src/auto-type-generator/inline-object-traverser.ts +49 -0
  154. package/src/auto-type-generator/inline-union-collector.ts +402 -0
  155. package/src/auto-type-generator/inline-union-types.ts +33 -0
  156. package/src/auto-type-generator/inline-union-validator.ts +482 -0
  157. package/src/auto-type-generator/naming-convention.ts +38 -1
  158. package/src/auto-type-generator/resolve-type-generator.ts +21 -0
  159. package/src/auto-type-generator/resolver-field-iterator.ts +39 -0
  160. package/src/auto-type-generator/typename-extractor.ts +230 -0
  161. package/src/auto-type-generator/typename-resolve-type-generator.ts +281 -0
  162. package/src/auto-type-generator/typename-types.ts +66 -0
  163. package/src/auto-type-generator/typename-validator.ts +326 -0
  164. package/src/cli.ts +2 -0
  165. package/src/commands/docs.ts +211 -0
  166. package/src/gen-orchestrator/orchestrator.ts +20 -6
  167. package/src/resolver-extractor/extract-resolvers.ts +19 -0
  168. package/src/resolver-extractor/extractor/define-api-extractor.ts +23 -89
  169. package/src/resolver-extractor/index.ts +0 -6
  170. package/src/resolver-extractor/validator/abstract-resolver-validator.ts +16 -8
  171. package/src/schema-generator/emitter/code-emitter.ts +34 -0
  172. package/src/schema-generator/generate-schema.ts +99 -2
  173. package/src/schema-generator/integrator/result-integrator.ts +70 -1
  174. package/src/schema-generator/resolver-collector/resolver-collector.ts +34 -0
  175. package/src/shared/enum-prefix-detector.ts +99 -0
  176. package/src/shared/ignore-fields-detector.ts +109 -0
  177. package/src/shared/ignore-fields-validator.ts +66 -0
  178. package/src/shared/index.ts +2 -0
  179. package/src/shared/source-location.ts +11 -0
  180. package/src/type-extractor/converter/graphql-converter.ts +31 -7
  181. package/src/type-extractor/extractor/field-type-resolver.ts +48 -3
  182. package/src/type-extractor/extractor/type-extractor.ts +103 -26
  183. package/src/type-extractor/types/diagnostics.ts +12 -2
  184. package/src/type-extractor/types/ts-type-reference-factory.ts +18 -5
  185. package/src/type-extractor/types/typescript.ts +4 -0
  186. package/dist/resolver-extractor/validator/only-validator.d.ts +0 -61
  187. package/dist/resolver-extractor/validator/only-validator.d.ts.map +0 -1
  188. package/dist/resolver-extractor/validator/only-validator.js +0 -76
  189. package/dist/resolver-extractor/validator/only-validator.js.map +0 -1
  190. package/src/resolver-extractor/validator/only-validator.ts +0 -158
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typename-types.d.ts","sourceRoot":"","sources":["../../src/auto-type-generator/typename-types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,sCAAuC,CAAC;AAEzE;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEtE;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,WAAW,CAAC,iBAAiB,CAAC,CAAC;AAElE;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,aAAa,CAAC,iBAAiB,CAAC,GAC3C,oBAAoB,CAEtB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;CACvC;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EACpC,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC,EAC5B,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,GACxB;IAAE,QAAQ,EAAE,CAAC,CAAC;IAAC,SAAS,EAAE,iBAAiB,CAAA;CAAE,GAAG,IAAI,CActD"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Common types for typename-related functionality.
3
+ * These types are shared across typename-extractor, typename-validator,
4
+ * typename-resolve-type-generator, and inline-union-validator.
5
+ */
6
+ /**
7
+ * All recognized field names for type discrimination.
8
+ * - "__typename" is the standard GraphQL introspection field
9
+ * - "$typeName" is a gqlkit-specific alternative that won't appear in the schema
10
+ *
11
+ * To add a new typename field:
12
+ * 1. Add the field name to this array
13
+ * 2. Update findTypenameProperty priority if needed
14
+ */
15
+ export const TYPENAME_FIELD_NAMES = ["__typename", "$typeName"];
16
+ /**
17
+ * Create a TypenameFieldNameSet from field names.
18
+ */
19
+ export function createFieldNameSet(fieldNames) {
20
+ return new Set(fieldNames);
21
+ }
22
+ /**
23
+ * Find __typename or $typeName property from a list of properties.
24
+ * __typename takes priority over $typeName.
25
+ */
26
+ export function findTypenameProperty(properties, getName) {
27
+ const typenameProperty = properties.find((p) => getName(p) === "__typename");
28
+ if (typenameProperty) {
29
+ return { property: typenameProperty, fieldName: "__typename" };
30
+ }
31
+ const dollarTypenameProperty = properties.find((p) => getName(p) === "$typeName");
32
+ if (dollarTypenameProperty) {
33
+ return { property: dollarTypenameProperty, fieldName: "$typeName" };
34
+ }
35
+ return null;
36
+ }
37
+ //# sourceMappingURL=typename-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typename-types.js","sourceRoot":"","sources":["../../src/auto-type-generator/typename-types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,YAAY,EAAE,WAAW,CAAU,CAAC;AAYzE;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAChC,UAA4C;IAE5C,OAAO,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;AAC7B,CAAC;AAUD;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,UAA4B,EAC5B,OAAyB;IAEzB,MAAM,gBAAgB,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC;IAC7E,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;IACjE,CAAC;IAED,MAAM,sBAAsB,GAAG,UAAU,CAAC,IAAI,CAC5C,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,WAAW,CAClC,CAAC;IACF,IAAI,sBAAsB,EAAE,CAAC;QAC3B,OAAO,EAAE,QAAQ,EAAE,sBAAsB,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;IACtE,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,37 @@
1
+ import type { Diagnostic, ExtractedTypeInfo, InlineObjectMember, SourceLocation } from "../type-extractor/types/index.js";
2
+ import type { TypenameExtractionResult } from "./typename-extractor.js";
3
+ export interface ValidateTypenamesParams {
4
+ readonly extractionResult: TypenameExtractionResult;
5
+ readonly sourceLocation: SourceLocation;
6
+ readonly inlineObjectMembers: ReadonlyArray<InlineObjectMember> | null;
7
+ }
8
+ export interface ValidateTypenamesResult {
9
+ readonly valid: boolean;
10
+ readonly diagnostics: ReadonlyArray<Diagnostic>;
11
+ }
12
+ export interface ValidateSchemaTypenamesParams {
13
+ readonly objectTypes: ReadonlyArray<ExtractedTypeInfo>;
14
+ readonly typeMap: ReadonlyMap<string, ExtractedTypeInfo>;
15
+ }
16
+ export interface ValidateSchemaTypenamesResult {
17
+ readonly valid: boolean;
18
+ readonly diagnostics: ReadonlyArray<Diagnostic>;
19
+ }
20
+ /**
21
+ * Validates typename fields within an abstract type.
22
+ * Reports errors for:
23
+ * - DUPLICATE_TYPENAME_VALUE: Multiple members have the same typename value
24
+ * - MISSING_TYPENAME_PROPERTY: Inline objects without typename (when union has inline objects)
25
+ * - INVALID_TYPENAME_TYPE: Typename is not a string literal type
26
+ * - NULLABLE_TYPENAME_PROPERTY: Typename is nullable
27
+ */
28
+ export declare function validateTypenames(params: ValidateTypenamesParams): ValidateTypenamesResult;
29
+ /**
30
+ * Validates that there are no duplicate typename values across the entire schema.
31
+ * Reports DUPLICATE_TYPENAME_VALUE error when:
32
+ * - Different object types have the same __typename value (Requirement 4.7)
33
+ * - Different object types have the same $typeName value (Requirement 4.8)
34
+ * - An object's __typename equals another object's $typeName (Requirement 4.9)
35
+ */
36
+ export declare function validateSchemaTypenames(params: ValidateSchemaTypenamesParams): ValidateSchemaTypenamesResult;
37
+ //# sourceMappingURL=typename-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typename-validator.d.ts","sourceRoot":"","sources":["../../src/auto-type-generator/typename-validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACf,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAMxE,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,gBAAgB,EAAE,wBAAwB,CAAC;IACpD,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IACxC,QAAQ,CAAC,mBAAmB,EAAE,aAAa,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAAC;CACxE;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;CACjD;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAC;IACvD,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;CAC1D;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;CACjD;AA8GD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,uBAAuB,GAC9B,uBAAuB,CAkEzB;AAqCD;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,6BAA6B,GACpC,6BAA6B,CA8D/B"}
@@ -0,0 +1,206 @@
1
+ import { findTypenameProperty, } from "./typename-types.js";
2
+ function getAbstractTypeLabel(kind) {
3
+ return kind === "union" ? "Union" : "Interface";
4
+ }
5
+ function getMemberLabel(kind) {
6
+ return kind === "union" ? "members" : "implementers";
7
+ }
8
+ function analyzeInlineObjectTypename(inlineObjectMember) {
9
+ const found = findTypenameProperty(inlineObjectMember.properties, (p) => p.propertyName);
10
+ if (!found) {
11
+ return {
12
+ exists: false,
13
+ fieldName: null,
14
+ isStringLiteral: false,
15
+ isNullable: false,
16
+ };
17
+ }
18
+ const { property, fieldName } = found;
19
+ const { propertyType: tsType } = property;
20
+ return {
21
+ exists: true,
22
+ fieldName,
23
+ isStringLiteral: tsType.kind === "literal" && tsType.name !== null,
24
+ isNullable: tsType.nullable,
25
+ };
26
+ }
27
+ function validateInlineObjectsTypenames(extractionResult, inlineObjectMembers, sourceLocation) {
28
+ if (!extractionResult.hasInlineObjects) {
29
+ return [];
30
+ }
31
+ if (extractionResult.abstractTypeName.endsWith("Input")) {
32
+ return [];
33
+ }
34
+ const diagnostics = [];
35
+ const abstractTypeName = extractionResult.abstractTypeName;
36
+ const abstractTypeLabel = getAbstractTypeLabel(extractionResult.abstractTypeKind);
37
+ const namedMemberCount = extractionResult.members.filter((m) => !m.isInlineObject).length;
38
+ for (const member of extractionResult.members) {
39
+ if (member.isInlineObject) {
40
+ const inlineIndex = member.memberIndex - namedMemberCount;
41
+ const inlineObjectMember = inlineObjectMembers[inlineIndex];
42
+ if (inlineObjectMember) {
43
+ const analysis = analyzeInlineObjectTypename(inlineObjectMember);
44
+ if (!analysis.exists) {
45
+ diagnostics.push({
46
+ code: "MISSING_TYPENAME_PROPERTY",
47
+ message: `${abstractTypeLabel} '${abstractTypeName}' member at index ${member.memberIndex} is missing '__typename' or '$typeName' property. When a union contains inline objects, all members must have a typename property.`,
48
+ severity: "error",
49
+ location: sourceLocation,
50
+ });
51
+ }
52
+ else if (!analysis.isStringLiteral) {
53
+ diagnostics.push({
54
+ code: "INVALID_TYPENAME_TYPE",
55
+ message: `${abstractTypeLabel} '${abstractTypeName}' member at index ${member.memberIndex} has '${analysis.fieldName}' that is not a string literal type. Expected a string literal like '__typename: "TypeName"'.`,
56
+ severity: "error",
57
+ location: sourceLocation,
58
+ });
59
+ }
60
+ else if (analysis.isNullable) {
61
+ diagnostics.push({
62
+ code: "NULLABLE_TYPENAME_PROPERTY",
63
+ message: `${abstractTypeLabel} '${abstractTypeName}' member at index ${member.memberIndex} has nullable '${analysis.fieldName}' property. The typename property must not be nullable.`,
64
+ severity: "error",
65
+ location: sourceLocation,
66
+ });
67
+ }
68
+ }
69
+ }
70
+ }
71
+ return diagnostics;
72
+ }
73
+ /**
74
+ * Validates typename fields within an abstract type.
75
+ * Reports errors for:
76
+ * - DUPLICATE_TYPENAME_VALUE: Multiple members have the same typename value
77
+ * - MISSING_TYPENAME_PROPERTY: Inline objects without typename (when union has inline objects)
78
+ * - INVALID_TYPENAME_TYPE: Typename is not a string literal type
79
+ * - NULLABLE_TYPENAME_PROPERTY: Typename is nullable
80
+ */
81
+ export function validateTypenames(params) {
82
+ const { extractionResult, sourceLocation, inlineObjectMembers } = params;
83
+ const diagnostics = [];
84
+ if (inlineObjectMembers) {
85
+ const inlineValidationDiagnostics = validateInlineObjectsTypenames(extractionResult, inlineObjectMembers, sourceLocation);
86
+ diagnostics.push(...inlineValidationDiagnostics);
87
+ }
88
+ const typenameValueToMembers = new Map();
89
+ for (const member of extractionResult.members) {
90
+ if (member.typenameInfo === null) {
91
+ continue;
92
+ }
93
+ const { typeName, fieldName } = member.typenameInfo;
94
+ const memberTypeName = member.memberTypeName ?? `member${member.memberIndex}`;
95
+ const existing = typenameValueToMembers.get(typeName) ?? [];
96
+ existing.push({ memberTypeName, fieldName });
97
+ typenameValueToMembers.set(typeName, existing);
98
+ }
99
+ const abstractTypeLabel = getAbstractTypeLabel(extractionResult.abstractTypeKind);
100
+ const memberLabel = getMemberLabel(extractionResult.abstractTypeKind);
101
+ for (const [typenameValue, members] of typenameValueToMembers) {
102
+ if (members.length > 1) {
103
+ const allSameFieldName = members.every((m) => m.fieldName === members[0].fieldName);
104
+ let message;
105
+ if (allSameFieldName) {
106
+ const memberNames = members
107
+ .map((m) => `'${m.memberTypeName}'`)
108
+ .join(" and ");
109
+ message = `Duplicate typename value '${typenameValue}' in ${abstractTypeLabel} '${extractionResult.abstractTypeName}': used by ${memberLabel} ${memberNames}.`;
110
+ }
111
+ else {
112
+ const memberDescriptions = members
113
+ .map((m) => `member '${m.memberTypeName}' (${m.fieldName})`)
114
+ .join(" and ");
115
+ message = `Duplicate typename value '${typenameValue}' in ${abstractTypeLabel} '${extractionResult.abstractTypeName}': ${memberDescriptions} have the same value.`;
116
+ }
117
+ diagnostics.push({
118
+ code: "DUPLICATE_TYPENAME_VALUE",
119
+ message,
120
+ severity: "error",
121
+ location: sourceLocation,
122
+ });
123
+ }
124
+ }
125
+ return {
126
+ valid: diagnostics.length === 0,
127
+ diagnostics,
128
+ };
129
+ }
130
+ function extractTypenameFromObjectType(typeInfo) {
131
+ const found = findTypenameProperty(typeInfo.fields, (f) => f.name);
132
+ if (!found) {
133
+ return null;
134
+ }
135
+ const { property: field, fieldName } = found;
136
+ const { tsType } = field;
137
+ if (field.optional ||
138
+ tsType.nullable ||
139
+ tsType.kind !== "literal" ||
140
+ tsType.name === null) {
141
+ return null;
142
+ }
143
+ return {
144
+ typeName: typeInfo.metadata.name,
145
+ typenameValue: tsType.name,
146
+ fieldName,
147
+ sourceLocation: typeInfo.metadata.sourceLocation,
148
+ };
149
+ }
150
+ /**
151
+ * Validates that there are no duplicate typename values across the entire schema.
152
+ * Reports DUPLICATE_TYPENAME_VALUE error when:
153
+ * - Different object types have the same __typename value (Requirement 4.7)
154
+ * - Different object types have the same $typeName value (Requirement 4.8)
155
+ * - An object's __typename equals another object's $typeName (Requirement 4.9)
156
+ */
157
+ export function validateSchemaTypenames(params) {
158
+ const { objectTypes } = params;
159
+ const diagnostics = [];
160
+ const typenameValueToTypes = new Map();
161
+ for (const typeInfo of objectTypes) {
162
+ if (typeInfo.metadata.kind !== "object" &&
163
+ typeInfo.metadata.kind !== "interface" &&
164
+ typeInfo.metadata.kind !== "graphqlInterface") {
165
+ continue;
166
+ }
167
+ const typenameInfo = extractTypenameFromObjectType(typeInfo);
168
+ if (typenameInfo === null) {
169
+ continue;
170
+ }
171
+ const existing = typenameValueToTypes.get(typenameInfo.typenameValue) ?? [];
172
+ existing.push(typenameInfo);
173
+ typenameValueToTypes.set(typenameInfo.typenameValue, existing);
174
+ }
175
+ for (const [typenameValue, types] of typenameValueToTypes) {
176
+ if (types.length > 1) {
177
+ const allSameFieldName = types.every((t) => t.fieldName === types[0].fieldName);
178
+ const sortedTypes = [...types].sort((a, b) => a.typeName.localeCompare(b.typeName));
179
+ let message;
180
+ if (allSameFieldName) {
181
+ const typeNames = sortedTypes
182
+ .map((t) => `'${t.typeName}'`)
183
+ .join(" and ");
184
+ message = `Duplicate typename value '${typenameValue}' in schema: types ${typeNames} have the same ${sortedTypes[0].fieldName} value.`;
185
+ }
186
+ else {
187
+ const typeDescriptions = sortedTypes
188
+ .map((t) => `'${t.typeName}' (${t.fieldName})`)
189
+ .join(" and ");
190
+ message = `Duplicate typename value '${typenameValue}' in schema: types ${typeDescriptions} have the same value.`;
191
+ }
192
+ const firstType = sortedTypes[1];
193
+ diagnostics.push({
194
+ code: "DUPLICATE_TYPENAME_VALUE",
195
+ message,
196
+ severity: "error",
197
+ location: firstType.sourceLocation,
198
+ });
199
+ }
200
+ }
201
+ return {
202
+ valid: diagnostics.length === 0,
203
+ diagnostics,
204
+ };
205
+ }
206
+ //# sourceMappingURL=typename-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typename-validator.js","sourceRoot":"","sources":["../../src/auto-type-generator/typename-validator.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -1,10 +1,12 @@
1
1
  import { cli } from "gunshi";
2
+ import { docsCommand } from "./commands/docs.js";
2
3
  import { genCommand } from "./commands/gen.js";
3
4
  import { mainCommand } from "./commands/main.js";
4
5
  await cli(process.argv.slice(2), mainCommand, {
5
6
  name: "gqlkit",
6
7
  version: "0.0.0",
7
8
  subCommands: {
9
+ docs: docsCommand,
8
10
  gen: genCommand,
9
11
  },
10
12
  });
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE;IAC5C,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,OAAO;IAChB,WAAW,EAAE;QACX,GAAG,EAAE,UAAU;KAChB;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE;IAC5C,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,OAAO;IAChB,WAAW,EAAE;QACX,IAAI,EAAE,WAAW;QACjB,GAAG,EAAE,UAAU;KAChB;CACF,CAAC,CAAC"}
@@ -0,0 +1,51 @@
1
+ export interface RunDocsCommandOptions {
2
+ readonly output: string;
3
+ readonly claude: boolean;
4
+ readonly codex: boolean;
5
+ }
6
+ export interface RunDocsCommandResult {
7
+ readonly exitCode: number;
8
+ readonly filesWritten: string[];
9
+ }
10
+ export declare function runDocsCommand(options: RunDocsCommandOptions): Promise<RunDocsCommandResult>;
11
+ export declare const docsCommand: {
12
+ name: string;
13
+ args: {
14
+ output: {
15
+ type: "string";
16
+ description: string;
17
+ };
18
+ claude: {
19
+ type: "boolean";
20
+ description: string;
21
+ };
22
+ codex: {
23
+ type: "boolean";
24
+ description: string;
25
+ };
26
+ };
27
+ run: (ctx: Readonly<import("gunshi").CommandContext<{
28
+ args: {
29
+ output: {
30
+ type: "string";
31
+ description: string;
32
+ };
33
+ claude: {
34
+ type: "boolean";
35
+ description: string;
36
+ };
37
+ codex: {
38
+ type: "boolean";
39
+ description: string;
40
+ };
41
+ };
42
+ extensions: {};
43
+ }>>) => Promise<void>;
44
+ description?: string;
45
+ examples?: string | import("gunshi").CommandExamplesFetcher<import("gunshi").DefaultGunshiParams>;
46
+ toKebab?: boolean;
47
+ internal?: boolean;
48
+ entry?: boolean;
49
+ rendering?: import("gunshi").RenderingOptions<import("gunshi").DefaultGunshiParams>;
50
+ };
51
+ //# sourceMappingURL=docs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../../src/commands/docs.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC;CACjC;AAsHD,wBAAsB,cAAc,CAClC,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,oBAAoB,CAAC,CA0C/B;AAED,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BtB,CAAC"}
@@ -0,0 +1,154 @@
1
+ import { access, mkdir, readFile, symlink, writeFile } from "node:fs/promises";
2
+ import { dirname, join, relative } from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { define } from "gunshi";
5
+ const __dirname = dirname(fileURLToPath(import.meta.url));
6
+ const CLI_DOCS_DIR = join(__dirname, "../../docs");
7
+ const SKILL_NAME = "gqlkit-guide";
8
+ async function exists(path) {
9
+ try {
10
+ await access(path);
11
+ return true;
12
+ }
13
+ catch {
14
+ return false;
15
+ }
16
+ }
17
+ async function detectClaudeEnvironment(dir) {
18
+ const claudeMdExists = await exists(join(dir, "CLAUDE.md"));
19
+ const claudeDirExists = await exists(join(dir, ".claude"));
20
+ return claudeMdExists || claudeDirExists;
21
+ }
22
+ async function detectCodexEnvironment(dir) {
23
+ const agentsMdExists = await exists(join(dir, "AGENTS.md"));
24
+ const codexDirExists = await exists(join(dir, ".codex"));
25
+ return agentsMdExists || codexDirExists;
26
+ }
27
+ function generateSkillMd() {
28
+ return `---
29
+ name: ${SKILL_NAME}
30
+ description: Use when the user asks about "gqlkit", "gqlkit usage", "gqlkit schema definition", "gqlkit configuration", "gqlkit resolvers", "GraphQL code generation with gqlkit", or needs guidance on gqlkit conventions, type definitions, or integration with GraphQL servers or ORMs.
31
+ ---
32
+
33
+ # gqlkit Guide
34
+
35
+ gqlkit generates GraphQL schema and resolver maps from TypeScript types and functions.
36
+
37
+ ## How it works
38
+
39
+ 1. Write TypeScript types in \`src/gqlkit/schema/\` → become GraphQL types
40
+ 2. Write resolver functions using \`defineQuery\`, \`defineMutation\`, \`defineField\` → become GraphQL resolvers
41
+ 3. Run \`gqlkit gen\` → outputs \`typeDefs\` and \`resolvers\` to \`src/gqlkit/__generated__/\`
42
+
43
+ ## Design principles
44
+
45
+ - **Implement first**: Write types and resolvers, generate schema when ready. No edit-regenerate-implement loops.
46
+ - **Just types and functions**: Plain TypeScript with a thin API. No decorators, no complex generics.
47
+ - **Type-safe**: TypeScript types become GraphQL types. Resolver signatures checked at compile time.
48
+
49
+ ## How to Use This Skill
50
+
51
+ Read [references/index.md](references/index.md) first. It contains the complete documentation index with all available topics.
52
+
53
+ Navigate to specific documentation files based on user needs as indicated in the index.
54
+ `;
55
+ }
56
+ function generateRules() {
57
+ return `## gqlkit
58
+
59
+ When working with GraphQL schema, types, or resolvers using gqlkit, use the \`${SKILL_NAME}\` skill.
60
+ `;
61
+ }
62
+ async function createSymlinkIfNotExists(linkPath, target) {
63
+ try {
64
+ await symlink(target, linkPath, "dir");
65
+ }
66
+ catch (error) {
67
+ if (error.code !== "EEXIST") {
68
+ throw error;
69
+ }
70
+ }
71
+ }
72
+ async function appendOrCreateFile(filePath, content) {
73
+ try {
74
+ const existing = await readFile(filePath, "utf-8");
75
+ if (!existing.includes("## gqlkit")) {
76
+ await writeFile(filePath, `${existing}\n${content}`);
77
+ }
78
+ }
79
+ catch (error) {
80
+ if (error.code === "ENOENT") {
81
+ await writeFile(filePath, content);
82
+ }
83
+ else {
84
+ throw error;
85
+ }
86
+ }
87
+ }
88
+ async function generateToolFiles(outputDir, config, filesWritten) {
89
+ const skillDir = join(outputDir, `${config.configDir}/skills/${SKILL_NAME}`);
90
+ await mkdir(skillDir, { recursive: true });
91
+ const skillMdPath = join(skillDir, "SKILL.md");
92
+ await writeFile(skillMdPath, generateSkillMd());
93
+ filesWritten.push(skillMdPath);
94
+ const referencesPath = join(skillDir, "references");
95
+ const relativePath = relative(skillDir, CLI_DOCS_DIR);
96
+ await createSymlinkIfNotExists(referencesPath, relativePath);
97
+ filesWritten.push(referencesPath);
98
+ const rulesPath = join(outputDir, config.rulesFile);
99
+ await appendOrCreateFile(rulesPath, generateRules());
100
+ filesWritten.push(rulesPath);
101
+ }
102
+ export async function runDocsCommand(options) {
103
+ if (!(await exists(CLI_DOCS_DIR))) {
104
+ console.error(`Documentation directory not found: ${CLI_DOCS_DIR}\nRun "pnpm build" to generate documentation files.`);
105
+ return { exitCode: 1, filesWritten: [] };
106
+ }
107
+ const filesWritten = [];
108
+ const autoDetect = !options.claude && !options.codex;
109
+ const generateClaude = options.claude ||
110
+ (autoDetect && (await detectClaudeEnvironment(options.output)));
111
+ const generateCodex = options.codex ||
112
+ (autoDetect && (await detectCodexEnvironment(options.output)));
113
+ if (!generateClaude && !generateCodex) {
114
+ console.log("No AI tool environment detected. Use --claude or --codex to generate explicitly.");
115
+ return { exitCode: 0, filesWritten: [] };
116
+ }
117
+ if (generateClaude) {
118
+ await generateToolFiles(options.output, { configDir: ".claude", rulesFile: "CLAUDE.md" }, filesWritten);
119
+ }
120
+ if (generateCodex) {
121
+ await generateToolFiles(options.output, { configDir: ".codex", rulesFile: "AGENTS.md" }, filesWritten);
122
+ }
123
+ return { exitCode: 0, filesWritten };
124
+ }
125
+ export const docsCommand = define({
126
+ name: "docs",
127
+ args: {
128
+ output: {
129
+ type: "string",
130
+ description: "Output directory for generated files",
131
+ },
132
+ claude: {
133
+ type: "boolean",
134
+ description: `Generate Claude Code files (.claude/skills/${SKILL_NAME}/, CLAUDE.md)`,
135
+ },
136
+ codex: {
137
+ type: "boolean",
138
+ description: `Generate Codex files (.codex/skills/${SKILL_NAME}/, AGENTS.md)`,
139
+ },
140
+ },
141
+ run: async (ctx) => {
142
+ const output = ctx.values.output ?? process.cwd();
143
+ const claude = ctx.values.claude ?? false;
144
+ const codex = ctx.values.codex ?? false;
145
+ const result = await runDocsCommand({ output, claude, codex });
146
+ for (const file of result.filesWritten) {
147
+ console.log(`Generated: ${file}`);
148
+ }
149
+ if (result.exitCode !== 0) {
150
+ process.exitCode = result.exitCode;
151
+ }
152
+ },
153
+ });
154
+ //# sourceMappingURL=docs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs.js","sourceRoot":"","sources":["../../src/commands/docs.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/gen-orchestrator/orchestrator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,2BAA2B,CAAC;AAqCnC,OAAO,KAAK,EACV,UAAU,EAGX,MAAM,4BAA4B,CAAC;AAQpC,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,iBAAiB,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAClD,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC,qBAAqB,CAAC,GAAG,IAAI,CAAC;IACpE,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;IAC7C,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;CACjD;AAsoBD,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,gBAAgB,CAAC,CAqC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CAC9C;AAED,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,gBAAgB,CAAC,CAY3B"}
1
+ {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/gen-orchestrator/orchestrator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,2BAA2B,CAAC;AAqCnC,OAAO,KAAK,EACV,UAAU,EAGX,MAAM,4BAA4B,CAAC;AAQpC,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,iBAAiB,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAClD,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC,qBAAqB,CAAC,GAAG,IAAI,CAAC;IACpE,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;IAC7C,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;CACjD;AAopBD,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,gBAAgB,CAAC,CAqC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CAC9C;AAED,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,gBAAgB,CAAC,CAY3B"}
@@ -118,6 +118,7 @@ function convertArgsToInputValues(args) {
118
118
  externalEnumSymbol: arg.tsType.externalEnumSymbol ?? null,
119
119
  externalEnumDescription: arg.tsType.externalEnumDescription ?? null,
120
120
  externalEnumDeprecated: arg.tsType.externalEnumDeprecated ?? null,
121
+ inlineUnionMembers: arg.tsType.kind === "union" ? (arg.tsType.members ?? null) : null,
121
122
  }));
122
123
  }
123
124
  function convertDefineApiToFields(resolvers) {
@@ -125,19 +126,24 @@ function convertDefineApiToFields(resolvers) {
125
126
  const mutationFields = [];
126
127
  const typeExtensionMap = new Map();
127
128
  for (const resolver of resolvers) {
129
+ const returnType = resolver.returnType;
128
130
  const fieldDef = {
129
131
  name: resolver.fieldName,
130
- type: convertTsTypeToGraphQLType(resolver.returnType),
132
+ type: convertTsTypeToGraphQLType(returnType),
131
133
  args: resolver.args ? convertArgsToInputValues(resolver.args) : null,
132
- sourceLocation: {
133
- file: resolver.sourceFile,
134
- line: 1,
135
- column: 1,
136
- },
134
+ sourceLocation: resolver.sourceLocation,
137
135
  resolverExportName: resolver.fieldName,
138
136
  description: resolver.description,
139
137
  deprecated: resolver.deprecated,
140
138
  directives: resolver.directives,
139
+ returnTypeInlineObjectProperties: returnType.inlineObjectProperties ?? null,
140
+ returnTypeInlineObjectDescription: returnType.inlineObjectDescription ?? null,
141
+ returnTypeInlineObjectDeprecated: returnType.inlineObjectDeprecated ?? null,
142
+ returnTypeInlineEnumMembers: returnType.inlineEnumMembers ?? null,
143
+ returnTypeInlineUnionMembers: returnType.kind === "union" ? (returnType.members ?? null) : null,
144
+ returnTypeExternalEnumSymbol: returnType.externalEnumSymbol ?? null,
145
+ returnTypeExternalEnumDescription: returnType.externalEnumDescription ?? null,
146
+ returnTypeExternalEnumDeprecated: returnType.externalEnumDeprecated ?? null,
141
147
  };
142
148
  if (resolver.resolverType === "query") {
143
149
  queryFields.push(fieldDef);
@@ -426,6 +432,7 @@ function generateSchemaStep(ctx) {
426
432
  : null,
427
433
  enablePruning: null,
428
434
  sourceRoot: ctx.config.cwd,
435
+ knownTypeNames: ctx.knownTypeNames,
429
436
  });
430
437
  const newDiagnostics = [...ctx.diagnostics, ...schemaResult.diagnostics];
431
438
  if (schemaResult.hasErrors) {