@gqlkit-ts/cli 0.5.1 → 0.7.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 (212) hide show
  1. package/dist/auto-type-generator/auto-type-generator.d.ts +7 -0
  2. package/dist/auto-type-generator/auto-type-generator.d.ts.map +1 -1
  3. package/dist/auto-type-generator/auto-type-generator.js +379 -56
  4. package/dist/auto-type-generator/auto-type-generator.js.map +1 -1
  5. package/dist/auto-type-generator/discriminator-field-validator.d.ts +26 -0
  6. package/dist/auto-type-generator/discriminator-field-validator.d.ts.map +1 -0
  7. package/dist/auto-type-generator/discriminator-field-validator.js +242 -0
  8. package/dist/auto-type-generator/discriminator-field-validator.js.map +1 -0
  9. package/dist/auto-type-generator/discriminator-naming.d.ts +11 -0
  10. package/dist/auto-type-generator/discriminator-naming.d.ts.map +1 -0
  11. package/dist/auto-type-generator/discriminator-naming.js +15 -0
  12. package/dist/auto-type-generator/discriminator-naming.js.map +1 -0
  13. package/dist/auto-type-generator/discriminator-resolve-type-generator.d.ts +44 -0
  14. package/dist/auto-type-generator/discriminator-resolve-type-generator.d.ts.map +1 -0
  15. package/dist/auto-type-generator/discriminator-resolve-type-generator.js +77 -0
  16. package/dist/auto-type-generator/discriminator-resolve-type-generator.js.map +1 -0
  17. package/dist/auto-type-generator/index.d.ts +3 -0
  18. package/dist/auto-type-generator/index.d.ts.map +1 -1
  19. package/dist/auto-type-generator/index.js +3 -0
  20. package/dist/auto-type-generator/index.js.map +1 -1
  21. package/dist/auto-type-generator/inline-enum-collector.d.ts.map +1 -1
  22. package/dist/auto-type-generator/inline-enum-collector.js +14 -7
  23. package/dist/auto-type-generator/inline-enum-collector.js.map +1 -1
  24. package/dist/auto-type-generator/inline-object-converter.d.ts +12 -0
  25. package/dist/auto-type-generator/inline-object-converter.d.ts.map +1 -0
  26. package/dist/auto-type-generator/inline-object-converter.js +72 -0
  27. package/dist/auto-type-generator/inline-object-converter.js.map +1 -0
  28. package/dist/auto-type-generator/inline-object-traverser.d.ts +2 -1
  29. package/dist/auto-type-generator/inline-object-traverser.d.ts.map +1 -1
  30. package/dist/auto-type-generator/inline-object-traverser.js +22 -4
  31. package/dist/auto-type-generator/inline-object-traverser.js.map +1 -1
  32. package/dist/auto-type-generator/inline-union-collector.d.ts.map +1 -1
  33. package/dist/auto-type-generator/inline-union-collector.js +20 -6
  34. package/dist/auto-type-generator/inline-union-collector.js.map +1 -1
  35. package/dist/auto-type-generator/inline-union-types.d.ts +2 -0
  36. package/dist/auto-type-generator/inline-union-types.d.ts.map +1 -1
  37. package/dist/auto-type-generator/inline-union-validator.js +3 -3
  38. package/dist/auto-type-generator/inline-union-validator.js.map +1 -1
  39. package/dist/auto-type-generator/intersection-flattener.d.ts +44 -0
  40. package/dist/auto-type-generator/intersection-flattener.d.ts.map +1 -0
  41. package/dist/auto-type-generator/intersection-flattener.js +398 -0
  42. package/dist/auto-type-generator/intersection-flattener.js.map +1 -0
  43. package/dist/auto-type-generator/naming-convention.d.ts +23 -2
  44. package/dist/auto-type-generator/naming-convention.d.ts.map +1 -1
  45. package/dist/auto-type-generator/naming-convention.js +145 -1
  46. package/dist/auto-type-generator/naming-convention.js.map +1 -1
  47. package/dist/auto-type-generator/resolver-field-iterator.d.ts +1 -1
  48. package/dist/auto-type-generator/resolver-field-iterator.d.ts.map +1 -1
  49. package/dist/auto-type-generator/resolver-field-iterator.js +3 -0
  50. package/dist/auto-type-generator/resolver-field-iterator.js.map +1 -1
  51. package/dist/auto-type-generator/typename-extractor.d.ts +2 -0
  52. package/dist/auto-type-generator/typename-extractor.d.ts.map +1 -1
  53. package/dist/auto-type-generator/typename-extractor.js +11 -3
  54. package/dist/auto-type-generator/typename-extractor.js.map +1 -1
  55. package/dist/auto-type-generator/typename-resolve-type-generator.d.ts +2 -0
  56. package/dist/auto-type-generator/typename-resolve-type-generator.d.ts.map +1 -1
  57. package/dist/auto-type-generator/typename-resolve-type-generator.js +12 -84
  58. package/dist/auto-type-generator/typename-resolve-type-generator.js.map +1 -1
  59. package/dist/auto-type-generator/typename-types.d.ts +4 -0
  60. package/dist/auto-type-generator/typename-types.d.ts.map +1 -1
  61. package/dist/auto-type-generator/typename-types.js +6 -0
  62. package/dist/auto-type-generator/typename-types.js.map +1 -1
  63. package/dist/auto-type-generator/typename-validator.d.ts.map +1 -1
  64. package/dist/auto-type-generator/typename-validator.js +4 -3
  65. package/dist/auto-type-generator/typename-validator.js.map +1 -1
  66. package/dist/commands/docs.d.ts +1 -0
  67. package/dist/commands/docs.d.ts.map +1 -1
  68. package/dist/commands/gen.d.ts +1 -0
  69. package/dist/commands/gen.d.ts.map +1 -1
  70. package/dist/commands/gen.js +2 -1
  71. package/dist/commands/gen.js.map +1 -1
  72. package/dist/commands/main.d.ts +1 -0
  73. package/dist/commands/main.d.ts.map +1 -1
  74. package/dist/config/types.d.ts +7 -0
  75. package/dist/config/types.d.ts.map +1 -1
  76. package/dist/config-loader/index.d.ts +1 -1
  77. package/dist/config-loader/index.d.ts.map +1 -1
  78. package/dist/config-loader/index.js.map +1 -1
  79. package/dist/config-loader/loader.d.ts +6 -0
  80. package/dist/config-loader/loader.d.ts.map +1 -1
  81. package/dist/config-loader/loader.js +1 -0
  82. package/dist/config-loader/loader.js.map +1 -1
  83. package/dist/config-loader/validator.d.ts.map +1 -1
  84. package/dist/config-loader/validator.js +84 -1
  85. package/dist/config-loader/validator.js.map +1 -1
  86. package/dist/gen-orchestrator/orchestrator.d.ts +2 -1
  87. package/dist/gen-orchestrator/orchestrator.d.ts.map +1 -1
  88. package/dist/gen-orchestrator/orchestrator.js +43 -3
  89. package/dist/gen-orchestrator/orchestrator.js.map +1 -1
  90. package/dist/resolver-extractor/extract-resolvers.d.ts +4 -0
  91. package/dist/resolver-extractor/extract-resolvers.d.ts.map +1 -1
  92. package/dist/resolver-extractor/extractor/define-api-extractor.d.ts +2 -1
  93. package/dist/resolver-extractor/extractor/define-api-extractor.d.ts.map +1 -1
  94. package/dist/resolver-extractor/extractor/define-api-extractor.js +35 -6
  95. package/dist/resolver-extractor/extractor/define-api-extractor.js.map +1 -1
  96. package/dist/resolver-extractor/index.d.ts +1 -1
  97. package/dist/resolver-extractor/index.d.ts.map +1 -1
  98. package/dist/resolver-extractor/validator/abstract-resolver-validator.d.ts +2 -0
  99. package/dist/resolver-extractor/validator/abstract-resolver-validator.d.ts.map +1 -1
  100. package/dist/resolver-extractor/validator/abstract-resolver-validator.js +16 -3
  101. package/dist/resolver-extractor/validator/abstract-resolver-validator.js.map +1 -1
  102. package/dist/schema-generator/emitter/code-emitter.d.ts.map +1 -1
  103. package/dist/schema-generator/emitter/code-emitter.js +24 -4
  104. package/dist/schema-generator/emitter/code-emitter.js.map +1 -1
  105. package/dist/schema-generator/emitter/discriminator-resolve-type-emitter.d.ts +18 -0
  106. package/dist/schema-generator/emitter/discriminator-resolve-type-emitter.d.ts.map +1 -0
  107. package/dist/schema-generator/emitter/discriminator-resolve-type-emitter.js +89 -0
  108. package/dist/schema-generator/emitter/discriminator-resolve-type-emitter.js.map +1 -0
  109. package/dist/schema-generator/generate-schema.d.ts +2 -0
  110. package/dist/schema-generator/generate-schema.d.ts.map +1 -1
  111. package/dist/schema-generator/generate-schema.js +69 -10
  112. package/dist/schema-generator/generate-schema.js.map +1 -1
  113. package/dist/schema-generator/integrator/result-integrator.d.ts +5 -0
  114. package/dist/schema-generator/integrator/result-integrator.d.ts.map +1 -1
  115. package/dist/schema-generator/integrator/result-integrator.js +44 -3
  116. package/dist/schema-generator/integrator/result-integrator.js.map +1 -1
  117. package/dist/schema-generator/resolver-collector/resolver-collector.d.ts +2 -0
  118. package/dist/schema-generator/resolver-collector/resolver-collector.d.ts.map +1 -1
  119. package/dist/schema-generator/resolver-collector/resolver-collector.js +4 -0
  120. package/dist/schema-generator/resolver-collector/resolver-collector.js.map +1 -1
  121. package/dist/shared/constants.d.ts.map +1 -1
  122. package/dist/shared/constants.js +14 -1
  123. package/dist/shared/constants.js.map +1 -1
  124. package/dist/shared/enum-prefix-detector.d.ts.map +1 -1
  125. package/dist/shared/enum-prefix-detector.js +78 -8
  126. package/dist/shared/enum-prefix-detector.js.map +1 -1
  127. package/dist/shared/inline-object-utils.js +1 -1
  128. package/dist/shared/inline-object-utils.js.map +1 -1
  129. package/dist/shared/type-converter.d.ts.map +1 -1
  130. package/dist/shared/type-converter.js +55 -0
  131. package/dist/shared/type-converter.js.map +1 -1
  132. package/dist/type-extractor/converter/graphql-converter.d.ts.map +1 -1
  133. package/dist/type-extractor/converter/graphql-converter.js +11 -1
  134. package/dist/type-extractor/converter/graphql-converter.js.map +1 -1
  135. package/dist/type-extractor/extractor/field-type-resolver.d.ts +18 -0
  136. package/dist/type-extractor/extractor/field-type-resolver.d.ts.map +1 -1
  137. package/dist/type-extractor/extractor/field-type-resolver.js +198 -15
  138. package/dist/type-extractor/extractor/field-type-resolver.js.map +1 -1
  139. package/dist/type-extractor/extractor/type-extractor.d.ts +1 -0
  140. package/dist/type-extractor/extractor/type-extractor.d.ts.map +1 -1
  141. package/dist/type-extractor/extractor/type-extractor.js +100 -9
  142. package/dist/type-extractor/extractor/type-extractor.js.map +1 -1
  143. package/dist/type-extractor/types/diagnostics.d.ts +1 -1
  144. package/dist/type-extractor/types/diagnostics.d.ts.map +1 -1
  145. package/dist/type-extractor/types/index.d.ts +1 -1
  146. package/dist/type-extractor/types/index.d.ts.map +1 -1
  147. package/dist/type-extractor/types/index.js +1 -1
  148. package/dist/type-extractor/types/index.js.map +1 -1
  149. package/dist/type-extractor/types/ts-type-reference-factory.d.ts +7 -1
  150. package/dist/type-extractor/types/ts-type-reference-factory.d.ts.map +1 -1
  151. package/dist/type-extractor/types/ts-type-reference-factory.js +18 -3
  152. package/dist/type-extractor/types/ts-type-reference-factory.js.map +1 -1
  153. package/dist/type-extractor/types/typescript.d.ts +3 -1
  154. package/dist/type-extractor/types/typescript.d.ts.map +1 -1
  155. package/dist/type-extractor/validator/type-validator.d.ts.map +1 -1
  156. package/dist/type-extractor/validator/type-validator.js +6 -1
  157. package/dist/type-extractor/validator/type-validator.js.map +1 -1
  158. package/docs/configuration.md +19 -0
  159. package/docs/getting-started.md +2 -1
  160. package/docs/index.md +2 -0
  161. package/docs/integration/ai-sdk.md +189 -0
  162. package/docs/schema/conventions.md +7 -0
  163. package/docs/schema/fields.md +15 -0
  164. package/docs/schema/queries-mutations.md +21 -2
  165. package/docs/schema/subscriptions.md +173 -0
  166. package/docs/schema/unions.md +117 -0
  167. package/package.json +4 -4
  168. package/src/auto-type-generator/auto-type-generator.ts +588 -62
  169. package/src/auto-type-generator/discriminator-field-validator.ts +368 -0
  170. package/src/auto-type-generator/discriminator-naming.ts +24 -0
  171. package/src/auto-type-generator/discriminator-resolve-type-generator.ts +136 -0
  172. package/src/auto-type-generator/index.ts +17 -0
  173. package/src/auto-type-generator/inline-enum-collector.ts +19 -4
  174. package/src/auto-type-generator/inline-object-converter.ts +100 -0
  175. package/src/auto-type-generator/inline-object-traverser.ts +33 -7
  176. package/src/auto-type-generator/inline-union-collector.ts +26 -4
  177. package/src/auto-type-generator/inline-union-types.ts +2 -0
  178. package/src/auto-type-generator/inline-union-validator.ts +3 -3
  179. package/src/auto-type-generator/intersection-flattener.ts +554 -0
  180. package/src/auto-type-generator/naming-convention.ts +207 -3
  181. package/src/auto-type-generator/resolver-field-iterator.ts +5 -1
  182. package/src/auto-type-generator/typename-extractor.ts +17 -3
  183. package/src/auto-type-generator/typename-resolve-type-generator.ts +19 -108
  184. package/src/auto-type-generator/typename-types.ts +7 -0
  185. package/src/auto-type-generator/typename-validator.ts +4 -3
  186. package/src/commands/gen.ts +9 -2
  187. package/src/config/types.ts +10 -0
  188. package/src/config-loader/index.ts +1 -0
  189. package/src/config-loader/loader.ts +11 -0
  190. package/src/config-loader/validator.ts +100 -1
  191. package/src/gen-orchestrator/orchestrator.ts +50 -3
  192. package/src/resolver-extractor/extract-resolvers.ts +5 -0
  193. package/src/resolver-extractor/extractor/define-api-extractor.ts +47 -7
  194. package/src/resolver-extractor/index.ts +1 -0
  195. package/src/resolver-extractor/validator/abstract-resolver-validator.ts +20 -6
  196. package/src/schema-generator/emitter/code-emitter.ts +43 -5
  197. package/src/schema-generator/emitter/discriminator-resolve-type-emitter.ts +125 -0
  198. package/src/schema-generator/generate-schema.ts +100 -13
  199. package/src/schema-generator/integrator/result-integrator.ts +55 -2
  200. package/src/schema-generator/resolver-collector/resolver-collector.ts +7 -0
  201. package/src/shared/constants.ts +15 -1
  202. package/src/shared/enum-prefix-detector.ts +96 -8
  203. package/src/shared/inline-object-utils.ts +1 -1
  204. package/src/shared/type-converter.ts +63 -0
  205. package/src/type-extractor/converter/graphql-converter.ts +17 -1
  206. package/src/type-extractor/extractor/field-type-resolver.ts +241 -16
  207. package/src/type-extractor/extractor/type-extractor.ts +119 -5
  208. package/src/type-extractor/types/diagnostics.ts +10 -1
  209. package/src/type-extractor/types/index.ts +2 -1
  210. package/src/type-extractor/types/ts-type-reference-factory.ts +24 -3
  211. package/src/type-extractor/types/typescript.ts +6 -2
  212. package/src/type-extractor/validator/type-validator.ts +6 -1
@@ -0,0 +1,100 @@
1
+ import { PRIMITIVE_TYPE_MAP } from "../shared/constants.js";
2
+ import type {
3
+ InlineObjectMember,
4
+ InlineObjectProperty,
5
+ } from "../type-extractor/types/index.js";
6
+ import type {
7
+ AutoGeneratedField,
8
+ AutoGeneratedType,
9
+ } from "./auto-type-generator.js";
10
+
11
+ function primitiveToGraphQLScalar(primitive: string): string {
12
+ return PRIMITIVE_TYPE_MAP[primitive] ?? "String";
13
+ }
14
+
15
+ function convertInlineObjectPropertyToField(
16
+ property: InlineObjectProperty,
17
+ ): AutoGeneratedField {
18
+ const tsType = property.propertyType;
19
+ let typeName: string;
20
+ const nullable = tsType.nullable;
21
+ let list = false;
22
+ let listItemNullable: boolean | null = null;
23
+
24
+ if (tsType.kind === "array" && tsType.elementType) {
25
+ list = true;
26
+ listItemNullable = tsType.elementType.nullable;
27
+ const elementName = tsType.elementType.name ?? "String";
28
+ typeName =
29
+ tsType.elementType.kind === "primitive"
30
+ ? primitiveToGraphQLScalar(elementName)
31
+ : elementName;
32
+ } else if (tsType.kind === "reference" && tsType.name) {
33
+ typeName = tsType.name;
34
+ } else if (tsType.kind === "primitive" && tsType.name) {
35
+ typeName = primitiveToGraphQLScalar(tsType.name);
36
+ } else if (tsType.kind === "scalar" && tsType.scalarInfo) {
37
+ typeName = tsType.scalarInfo.scalarName;
38
+ } else {
39
+ typeName = "String";
40
+ }
41
+
42
+ return {
43
+ name: property.propertyName,
44
+ type: {
45
+ typeName,
46
+ nullable,
47
+ list,
48
+ listItemNullable,
49
+ },
50
+ description: property.description,
51
+ deprecated: property.deprecated,
52
+ directives: null,
53
+ defaultValue: null,
54
+ };
55
+ }
56
+
57
+ interface GenerateObjectTypeFromInlineObjectParams {
58
+ readonly inlineObjectMember: InlineObjectMember;
59
+ readonly typeName: string;
60
+ readonly abstractTypeName: string;
61
+ readonly sourceFile: string;
62
+ readonly skipPropertyNames: ReadonlySet<string>;
63
+ }
64
+
65
+ export function generateObjectTypeFromInlineObject(
66
+ params: GenerateObjectTypeFromInlineObjectParams,
67
+ ): AutoGeneratedType {
68
+ const {
69
+ inlineObjectMember,
70
+ typeName,
71
+ abstractTypeName,
72
+ sourceFile,
73
+ skipPropertyNames,
74
+ } = params;
75
+ const fields: AutoGeneratedField[] = [];
76
+
77
+ for (const property of inlineObjectMember.properties) {
78
+ if (skipPropertyNames.has(property.propertyName)) {
79
+ continue;
80
+ }
81
+ fields.push(convertInlineObjectPropertyToField(property));
82
+ }
83
+
84
+ return {
85
+ name: typeName,
86
+ kind: "Object",
87
+ fields,
88
+ enumValues: null,
89
+ unionMembers: null,
90
+ needsStringEnumMapping: false,
91
+ sourceLocation: { file: sourceFile, line: 1, column: 1 },
92
+ generatedFrom: {
93
+ parentTypeName: abstractTypeName,
94
+ fieldPath: [],
95
+ context: "typeField",
96
+ },
97
+ description: null,
98
+ resolveTypeFieldPattern: null,
99
+ };
100
+ }
@@ -1,4 +1,8 @@
1
- import type { InlineObjectPropertyDef } from "../type-extractor/types/index.js";
1
+ import type {
2
+ InlineObjectPropertyDef,
3
+ TSTypeReference,
4
+ } from "../type-extractor/types/index.js";
5
+ import { appendFieldPath } from "./naming-convention.js";
2
6
 
3
7
  /**
4
8
  * Visitor callback for each property in an inline object hierarchy.
@@ -15,6 +19,24 @@ export interface TraverseInlineObjectPropertiesParams {
15
19
  readonly parentPath: ReadonlyArray<string>;
16
20
  }
17
21
 
22
+ export function getInlineObjectPropertiesFromType(
23
+ tsType: TSTypeReference,
24
+ ): ReadonlyArray<InlineObjectPropertyDef> | null {
25
+ if (tsType.kind === "inlineObject" && tsType.inlineObjectProperties) {
26
+ return tsType.inlineObjectProperties;
27
+ }
28
+
29
+ if (
30
+ tsType.kind === "array" &&
31
+ tsType.elementType?.kind === "inlineObject" &&
32
+ tsType.elementType.inlineObjectProperties
33
+ ) {
34
+ return tsType.elementType.inlineObjectProperties;
35
+ }
36
+
37
+ return null;
38
+ }
39
+
18
40
  /**
19
41
  * Traverses inline object properties recursively, calling the visitor for each property.
20
42
  * Handles nested inlineObject properties automatically.
@@ -27,19 +49,23 @@ export function traverseInlineObjectProperties(
27
49
  visitor: PropertyVisitor,
28
50
  ): void {
29
51
  const { properties, parentPath } = params;
52
+ const siblingFieldNames = new Set(properties.map((prop) => prop.name));
30
53
 
31
54
  for (const prop of properties) {
32
- const propPath = [...parentPath, prop.name];
55
+ const propPath = appendFieldPath({
56
+ parentPath,
57
+ fieldName: prop.name,
58
+ singularize: prop.tsType.kind === "array",
59
+ siblingFieldNames,
60
+ });
33
61
 
34
62
  visitor(prop, propPath);
35
63
 
36
- if (
37
- prop.tsType.kind === "inlineObject" &&
38
- prop.tsType.inlineObjectProperties
39
- ) {
64
+ const nestedProperties = getInlineObjectPropertiesFromType(prop.tsType);
65
+ if (nestedProperties) {
40
66
  traverseInlineObjectProperties(
41
67
  {
42
- properties: prop.tsType.inlineObjectProperties,
68
+ properties: nestedProperties,
43
69
  parentPath: propPath,
44
70
  },
45
71
  visitor,
@@ -7,13 +7,17 @@ import type {
7
7
  SourceLocation,
8
8
  TSTypeReference,
9
9
  } from "../type-extractor/types/index.js";
10
- import { traverseInlineObjectProperties } from "./inline-object-traverser.js";
10
+ import {
11
+ getInlineObjectPropertiesFromType,
12
+ traverseInlineObjectProperties,
13
+ } from "./inline-object-traverser.js";
11
14
  import type {
12
15
  InlineUnionMemberInfo,
13
16
  InlineUnionWithContext,
14
17
  } from "./inline-union-types.js";
15
18
  import {
16
19
  type AutoTypeNameContext,
20
+ appendFieldPath,
17
21
  buildFieldContext,
18
22
  isInputTypeName,
19
23
  } from "./naming-convention.js";
@@ -59,6 +63,9 @@ export function collectInlineUnionsFromTypes(
59
63
 
60
64
  for (const typeInfo of extractedTypes) {
61
65
  const isInput = isInputTypeName(typeInfo.metadata.name);
66
+ const siblingFieldNames = new Set(
67
+ typeInfo.fields.map((field) => field.name),
68
+ );
62
69
 
63
70
  for (const field of typeInfo.fields) {
64
71
  collectInlineUnionsFromField({
@@ -68,6 +75,7 @@ export function collectInlineUnionsFromTypes(
68
75
  isInput,
69
76
  sourceFile: typeInfo.metadata.sourceFile,
70
77
  knownTypeNames,
78
+ siblingFieldNames,
71
79
  results,
72
80
  });
73
81
  }
@@ -82,6 +90,7 @@ interface CollectInlineUnionBaseParams {
82
90
  readonly isInput: boolean;
83
91
  readonly sourceFile: string;
84
92
  readonly knownTypeNames: ReadonlySet<string>;
93
+ readonly siblingFieldNames: ReadonlySet<string>;
85
94
  readonly results: InlineUnionWithContext[];
86
95
  }
87
96
 
@@ -97,10 +106,16 @@ function collectInlineUnionsFromField(params: CollectFromFieldParams): void {
97
106
  isInput,
98
107
  sourceFile,
99
108
  knownTypeNames,
109
+ siblingFieldNames,
100
110
  results,
101
111
  } = params;
102
112
  const tsType = field.tsType;
103
- const fieldPath = [...parentPath, field.name];
113
+ const fieldPath = appendFieldPath({
114
+ parentPath,
115
+ fieldName: field.name,
116
+ singularize: tsType.kind === "array",
117
+ siblingFieldNames,
118
+ });
104
119
 
105
120
  if (tsType.kind === "union" && tsType.members) {
106
121
  const members = tsType.members.map((m) =>
@@ -116,6 +131,7 @@ function collectInlineUnionsFromField(params: CollectFromFieldParams): void {
116
131
  ),
117
132
  nullable: tsType.nullable,
118
133
  isInputContext: isInput,
134
+ unionAliasName: tsType.name,
119
135
  });
120
136
  }
121
137
 
@@ -137,12 +153,14 @@ function collectInlineUnionsFromField(params: CollectFromFieldParams): void {
137
153
  ),
138
154
  nullable: tsType.elementType.nullable,
139
155
  isInputContext: isInput,
156
+ unionAliasName: tsType.elementType.name,
140
157
  });
141
158
  }
142
159
 
143
- if (tsType.kind === "inlineObject" && tsType.inlineObjectProperties) {
160
+ const inlineObjectProperties = getInlineObjectPropertiesFromType(tsType);
161
+ if (inlineObjectProperties) {
144
162
  traverseInlineObjectProperties(
145
- { properties: tsType.inlineObjectProperties, parentPath: fieldPath },
163
+ { properties: inlineObjectProperties, parentPath: fieldPath },
146
164
  (prop, propPath) => {
147
165
  const propTsType = prop.tsType;
148
166
  if (propTsType.kind === "union" && propTsType.members) {
@@ -159,6 +177,7 @@ function collectInlineUnionsFromField(params: CollectFromFieldParams): void {
159
177
  ),
160
178
  nullable: propTsType.nullable,
161
179
  isInputContext: isInput,
180
+ unionAliasName: propTsType.name,
162
181
  });
163
182
  }
164
183
  },
@@ -224,6 +243,7 @@ function collectInlineUnionsFromResolverArgs(
224
243
  sourceLocation: field.sourceLocation,
225
244
  nullable: arg.type.nullable,
226
245
  isInputContext: true,
246
+ unionAliasName: null,
227
247
  });
228
248
  }
229
249
 
@@ -322,6 +342,7 @@ function collectInlineUnionsFromResolverProperties(
322
342
  sourceLocation: prop.sourceLocation ?? sourceLocation,
323
343
  nullable: tsType.nullable,
324
344
  isInputContext: params.contextKind === "resolverArg",
345
+ unionAliasName: tsType.name,
325
346
  });
326
347
  }
327
348
  },
@@ -383,6 +404,7 @@ function collectInlineUnionsFromPayloadReturnType(
383
404
  sourceLocation: field.sourceLocation,
384
405
  nullable: field.type.nullable,
385
406
  isInputContext: false,
407
+ unionAliasName: null,
386
408
  });
387
409
  }
388
410
 
@@ -30,4 +30,6 @@ export interface InlineUnionWithContext {
30
30
  readonly nullable: boolean;
31
31
  /** True if this union is in input context (should become @oneOf Input Object) */
32
32
  readonly isInputContext: boolean;
33
+ /** The TypeScript type alias name for this union (for mapping to auto-generated names) */
34
+ readonly unionAliasName: string | null;
33
35
  }
@@ -90,7 +90,7 @@ function validateUnionMemberType(
90
90
  };
91
91
  }
92
92
 
93
- if (memberType.kind === "literal") {
93
+ if (memberType.kind === "stringLiteral") {
94
94
  return {
95
95
  code: "INLINE_UNION_ENUM_MEMBER",
96
96
  message: `Inline union '${typeName}' contains a literal type '${memberType.name}'. GraphQL unions can only contain object types.`,
@@ -338,7 +338,7 @@ function extractTypenameFromNamedType(
338
338
  if (
339
339
  field.optional ||
340
340
  tsType.nullable ||
341
- tsType.kind !== "literal" ||
341
+ tsType.kind !== "stringLiteral" ||
342
342
  tsType.name === null
343
343
  ) {
344
344
  return null;
@@ -445,7 +445,7 @@ export function validateUnionMemberTypenames(
445
445
  });
446
446
  }
447
447
 
448
- if (typenameType.kind !== "literal" || typenameType.name === null) {
448
+ if (typenameType.kind !== "stringLiteral" || typenameType.name === null) {
449
449
  diagnostics.push({
450
450
  code: "INVALID_TYPENAME_TYPE",
451
451
  message: `Union '${unionTypeName}' member at index ${i} has '${selectedFieldName}' that is not a string literal type. Expected a string literal like '${selectedFieldName}: "TypeName"'.`,