@gqlkit-ts/cli 0.1.0 → 0.2.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 (234) hide show
  1. package/dist/auto-type-generator/auto-type-generator.d.ts +19 -3
  2. package/dist/auto-type-generator/auto-type-generator.d.ts.map +1 -1
  3. package/dist/auto-type-generator/auto-type-generator.js +236 -49
  4. package/dist/auto-type-generator/auto-type-generator.js.map +1 -1
  5. package/dist/auto-type-generator/index.d.ts +1 -1
  6. package/dist/auto-type-generator/index.d.ts.map +1 -1
  7. package/dist/auto-type-generator/index.js.map +1 -1
  8. package/dist/auto-type-generator/inline-enum-collector.d.ts +31 -0
  9. package/dist/auto-type-generator/inline-enum-collector.d.ts.map +1 -0
  10. package/dist/auto-type-generator/inline-enum-collector.js +157 -0
  11. package/dist/auto-type-generator/inline-enum-collector.js.map +1 -0
  12. package/dist/auto-type-generator/naming-convention.d.ts +4 -0
  13. package/dist/auto-type-generator/naming-convention.d.ts.map +1 -1
  14. package/dist/auto-type-generator/naming-convention.js +8 -0
  15. package/dist/auto-type-generator/naming-convention.js.map +1 -1
  16. package/dist/gen-orchestrator/orchestrator.d.ts.map +1 -1
  17. package/dist/gen-orchestrator/orchestrator.js +106 -8
  18. package/dist/gen-orchestrator/orchestrator.js.map +1 -1
  19. package/dist/resolver-extractor/extract-resolvers.d.ts +10 -1
  20. package/dist/resolver-extractor/extract-resolvers.d.ts.map +1 -1
  21. package/dist/resolver-extractor/extractor/define-api-extractor.d.ts +11 -1
  22. package/dist/resolver-extractor/extractor/define-api-extractor.d.ts.map +1 -1
  23. package/dist/resolver-extractor/extractor/define-api-extractor.js +88 -264
  24. package/dist/resolver-extractor/extractor/define-api-extractor.js.map +1 -1
  25. package/dist/schema-generator/emitter/code-emitter.d.ts +10 -2
  26. package/dist/schema-generator/emitter/code-emitter.d.ts.map +1 -1
  27. package/dist/schema-generator/emitter/code-emitter.js +19 -4
  28. package/dist/schema-generator/emitter/code-emitter.js.map +1 -1
  29. package/dist/schema-generator/generate-schema.d.ts.map +1 -1
  30. package/dist/schema-generator/generate-schema.js +18 -1
  31. package/dist/schema-generator/generate-schema.js.map +1 -1
  32. package/dist/schema-generator/integrator/result-integrator.d.ts +20 -0
  33. package/dist/schema-generator/integrator/result-integrator.d.ts.map +1 -1
  34. package/dist/schema-generator/integrator/result-integrator.js +42 -0
  35. package/dist/schema-generator/integrator/result-integrator.js.map +1 -1
  36. package/dist/shared/constants.d.ts +0 -16
  37. package/dist/shared/constants.d.ts.map +1 -1
  38. package/dist/shared/constants.js +0 -19
  39. package/dist/shared/constants.js.map +1 -1
  40. package/dist/shared/directive-detector.d.ts.map +1 -1
  41. package/dist/shared/directive-detector.js +8 -15
  42. package/dist/shared/directive-detector.js.map +1 -1
  43. package/dist/shared/file-scanner.d.ts.map +1 -1
  44. package/dist/shared/file-scanner.js +5 -3
  45. package/dist/shared/file-scanner.js.map +1 -1
  46. package/dist/shared/index.d.ts +1 -1
  47. package/dist/shared/index.d.ts.map +1 -1
  48. package/dist/shared/index.js +1 -3
  49. package/dist/shared/index.js.map +1 -1
  50. package/dist/shared/interface-detector.d.ts +3 -2
  51. package/dist/shared/interface-detector.d.ts.map +1 -1
  52. package/dist/shared/interface-detector.js +54 -11
  53. package/dist/shared/interface-detector.js.map +1 -1
  54. package/dist/shared/path-utils.d.ts +2 -0
  55. package/dist/shared/path-utils.d.ts.map +1 -0
  56. package/dist/shared/path-utils.js +4 -0
  57. package/dist/shared/path-utils.js.map +1 -0
  58. package/dist/shared/type-converter.d.ts.map +1 -1
  59. package/dist/shared/type-converter.js +11 -0
  60. package/dist/shared/type-converter.js.map +1 -1
  61. package/dist/shared/typescript-utils.d.ts +34 -7
  62. package/dist/shared/typescript-utils.d.ts.map +1 -1
  63. package/dist/shared/typescript-utils.js +72 -24
  64. package/dist/shared/typescript-utils.js.map +1 -1
  65. package/dist/type-extractor/collector/scalar-collector.d.ts.map +1 -1
  66. package/dist/type-extractor/collector/scalar-collector.js +4 -14
  67. package/dist/type-extractor/collector/scalar-collector.js.map +1 -1
  68. package/dist/type-extractor/converter/graphql-converter.d.ts.map +1 -1
  69. package/dist/type-extractor/converter/graphql-converter.js +42 -3
  70. package/dist/type-extractor/converter/graphql-converter.js.map +1 -1
  71. package/dist/type-extractor/extractor/field-type-resolver.d.ts +28 -0
  72. package/dist/type-extractor/extractor/field-type-resolver.d.ts.map +1 -0
  73. package/dist/type-extractor/extractor/field-type-resolver.js +394 -0
  74. package/dist/type-extractor/extractor/field-type-resolver.js.map +1 -0
  75. package/dist/type-extractor/extractor/type-extractor.d.ts +12 -3
  76. package/dist/type-extractor/extractor/type-extractor.d.ts.map +1 -1
  77. package/dist/type-extractor/extractor/type-extractor.js +176 -210
  78. package/dist/type-extractor/extractor/type-extractor.js.map +1 -1
  79. package/dist/type-extractor/extractor/type-name-collector.d.ts +24 -0
  80. package/dist/type-extractor/extractor/type-name-collector.d.ts.map +1 -0
  81. package/dist/type-extractor/extractor/type-name-collector.js +102 -0
  82. package/dist/type-extractor/extractor/type-name-collector.js.map +1 -0
  83. package/dist/type-extractor/mapper/scalar-base-type-mapper.d.ts +89 -0
  84. package/dist/type-extractor/mapper/scalar-base-type-mapper.d.ts.map +1 -0
  85. package/dist/type-extractor/mapper/scalar-base-type-mapper.js +158 -0
  86. package/dist/type-extractor/mapper/scalar-base-type-mapper.js.map +1 -0
  87. package/dist/type-extractor/types/diagnostics.d.ts +1 -1
  88. package/dist/type-extractor/types/diagnostics.d.ts.map +1 -1
  89. package/dist/type-extractor/types/graphql.d.ts +2 -0
  90. package/dist/type-extractor/types/graphql.d.ts.map +1 -1
  91. package/dist/type-extractor/types/index.d.ts +2 -1
  92. package/dist/type-extractor/types/index.d.ts.map +1 -1
  93. package/dist/type-extractor/types/index.js +1 -1
  94. package/dist/type-extractor/types/index.js.map +1 -1
  95. package/dist/type-extractor/types/ts-type-reference-factory.d.ts +39 -0
  96. package/dist/type-extractor/types/ts-type-reference-factory.d.ts.map +1 -0
  97. package/dist/type-extractor/types/ts-type-reference-factory.js +69 -0
  98. package/dist/type-extractor/types/ts-type-reference-factory.js.map +1 -0
  99. package/dist/type-extractor/types/typescript.d.ts +21 -1
  100. package/dist/type-extractor/types/typescript.d.ts.map +1 -1
  101. package/dist/type-extractor/validator/type-validator.js +1 -1
  102. package/dist/type-extractor/validator/type-validator.js.map +1 -1
  103. package/docs/index.md +1 -0
  104. package/docs/integration/drizzle.md +191 -0
  105. package/docs/schema/enums.md +208 -0
  106. package/docs/schema/fields.md +2 -0
  107. package/docs/schema/inputs.md +2 -0
  108. package/docs/schema/objects.md +2 -0
  109. package/docs/schema/queries-mutations.md +2 -0
  110. package/package.json +10 -3
  111. package/src/auto-type-generator/auto-type-generator.ts +925 -0
  112. package/src/auto-type-generator/index.ts +21 -0
  113. package/src/auto-type-generator/inline-enum-collector.ts +290 -0
  114. package/src/auto-type-generator/name-collision-validator.ts +119 -0
  115. package/src/auto-type-generator/naming-convention.ts +126 -0
  116. package/src/cli.ts +11 -0
  117. package/src/commands/gen.ts +141 -0
  118. package/src/commands/main.ts +5 -0
  119. package/src/config/define-config.ts +28 -0
  120. package/src/config/index.ts +7 -0
  121. package/src/config/types.ts +144 -0
  122. package/src/config-loader/index.ts +14 -0
  123. package/src/config-loader/loader.ts +143 -0
  124. package/src/config-loader/validator.ts +672 -0
  125. package/src/gen-orchestrator/hook-executor/hook-executor.ts +117 -0
  126. package/src/gen-orchestrator/orchestrator.ts +784 -0
  127. package/src/gen-orchestrator/reporter/diagnostic-reporter.ts +44 -0
  128. package/src/gen-orchestrator/reporter/progress-reporter.ts +61 -0
  129. package/src/gen-orchestrator/writer/file-writer.ts +38 -0
  130. package/src/index.ts +2 -0
  131. package/src/resolver-extractor/extract-resolvers.ts +63 -0
  132. package/src/resolver-extractor/extractor/define-api-extractor.ts +806 -0
  133. package/src/resolver-extractor/index.ts +19 -0
  134. package/src/resolver-extractor/validator/abstract-resolver-validator.ts +251 -0
  135. package/src/resolver-extractor/validator/only-validator.ts +158 -0
  136. package/src/schema-generator/builder/ast-builder.ts +706 -0
  137. package/src/schema-generator/emitter/code-emitter.ts +351 -0
  138. package/src/schema-generator/emitter/sdl-emitter.ts +13 -0
  139. package/src/schema-generator/generate-schema.ts +170 -0
  140. package/src/schema-generator/index.ts +19 -0
  141. package/src/schema-generator/integrator/result-integrator.ts +690 -0
  142. package/src/schema-generator/pruner/schema-pruner.ts +112 -0
  143. package/src/schema-generator/resolver-collector/resolver-collector.ts +123 -0
  144. package/src/shared/constants.ts +122 -0
  145. package/src/shared/default-value-detector.ts +172 -0
  146. package/src/shared/diagnostics.ts +35 -0
  147. package/src/shared/directive-definition-extractor.ts +564 -0
  148. package/src/shared/directive-detector.ts +556 -0
  149. package/src/shared/file-scanner.ts +170 -0
  150. package/src/shared/index.ts +32 -0
  151. package/src/shared/inline-object-extractor.ts +102 -0
  152. package/src/shared/inline-object-utils.ts +23 -0
  153. package/src/shared/interface-detector.ts +176 -0
  154. package/src/shared/interface-validator.ts +211 -0
  155. package/src/shared/metadata-detector.ts +443 -0
  156. package/src/shared/path-utils.ts +3 -0
  157. package/src/shared/program-factory.ts +51 -0
  158. package/src/shared/source-location.ts +27 -0
  159. package/src/shared/tsconfig-loader.ts +126 -0
  160. package/src/shared/tsdoc-parser.ts +155 -0
  161. package/src/shared/type-converter.ts +99 -0
  162. package/src/shared/typescript-utils.ts +246 -0
  163. package/src/type-extractor/collector/result-collector.ts +57 -0
  164. package/src/type-extractor/collector/scalar-collector.ts +254 -0
  165. package/src/type-extractor/converter/field-eligibility.ts +112 -0
  166. package/src/type-extractor/converter/graphql-converter.ts +459 -0
  167. package/src/type-extractor/extract-types.ts +1 -0
  168. package/src/type-extractor/extractor/field-type-resolver.ts +569 -0
  169. package/src/type-extractor/extractor/type-extractor.ts +1567 -0
  170. package/src/type-extractor/extractor/type-name-collector.ts +130 -0
  171. package/src/type-extractor/index.ts +20 -0
  172. package/src/type-extractor/mapper/scalar-base-type-mapper.ts +265 -0
  173. package/src/type-extractor/types/diagnostics.ts +99 -0
  174. package/src/type-extractor/types/graphql.ts +55 -0
  175. package/src/type-extractor/types/index.ts +37 -0
  176. package/src/type-extractor/types/ts-type-reference-factory.ts +137 -0
  177. package/src/type-extractor/types/typescript.ts +133 -0
  178. package/src/type-extractor/validator/type-validator.ts +77 -0
  179. package/dist/auto-type-generator/auto-type-generator.test.d.ts +0 -2
  180. package/dist/auto-type-generator/auto-type-generator.test.d.ts.map +0 -1
  181. package/dist/auto-type-generator/auto-type-generator.test.js +0 -613
  182. package/dist/auto-type-generator/auto-type-generator.test.js.map +0 -1
  183. package/dist/auto-type-generator/name-collision-validator.test.d.ts +0 -2
  184. package/dist/auto-type-generator/name-collision-validator.test.d.ts.map +0 -1
  185. package/dist/auto-type-generator/name-collision-validator.test.js +0 -358
  186. package/dist/auto-type-generator/name-collision-validator.test.js.map +0 -1
  187. package/dist/auto-type-generator/naming-convention.test.d.ts +0 -2
  188. package/dist/auto-type-generator/naming-convention.test.d.ts.map +0 -1
  189. package/dist/auto-type-generator/naming-convention.test.js +0 -132
  190. package/dist/auto-type-generator/naming-convention.test.js.map +0 -1
  191. package/dist/commands/gen.test.d.ts +0 -2
  192. package/dist/commands/gen.test.d.ts.map +0 -1
  193. package/dist/commands/gen.test.js +0 -226
  194. package/dist/commands/gen.test.js.map +0 -1
  195. package/dist/config-loader/loader.test.d.ts +0 -2
  196. package/dist/config-loader/loader.test.d.ts.map +0 -1
  197. package/dist/config-loader/loader.test.js +0 -123
  198. package/dist/config-loader/loader.test.js.map +0 -1
  199. package/dist/config-loader/validator.test.d.ts +0 -2
  200. package/dist/config-loader/validator.test.d.ts.map +0 -1
  201. package/dist/config-loader/validator.test.js +0 -846
  202. package/dist/config-loader/validator.test.js.map +0 -1
  203. package/dist/gen-orchestrator/golden.test.d.ts +0 -2
  204. package/dist/gen-orchestrator/golden.test.d.ts.map +0 -1
  205. package/dist/gen-orchestrator/golden.test.js +0 -102
  206. package/dist/gen-orchestrator/golden.test.js.map +0 -1
  207. package/dist/gen-orchestrator/hook-executor/hook-executor.test.d.ts +0 -2
  208. package/dist/gen-orchestrator/hook-executor/hook-executor.test.d.ts.map +0 -1
  209. package/dist/gen-orchestrator/hook-executor/hook-executor.test.js +0 -167
  210. package/dist/gen-orchestrator/hook-executor/hook-executor.test.js.map +0 -1
  211. package/dist/gen-orchestrator/reporter/progress-reporter.test.d.ts +0 -2
  212. package/dist/gen-orchestrator/reporter/progress-reporter.test.d.ts.map +0 -1
  213. package/dist/gen-orchestrator/reporter/progress-reporter.test.js +0 -74
  214. package/dist/gen-orchestrator/reporter/progress-reporter.test.js.map +0 -1
  215. package/dist/resolver-extractor/validator/only-validator.test.d.ts +0 -8
  216. package/dist/resolver-extractor/validator/only-validator.test.d.ts.map +0 -1
  217. package/dist/resolver-extractor/validator/only-validator.test.js +0 -352
  218. package/dist/resolver-extractor/validator/only-validator.test.js.map +0 -1
  219. package/dist/schema-generator/builder/ast-builder.test.d.ts +0 -2
  220. package/dist/schema-generator/builder/ast-builder.test.d.ts.map +0 -1
  221. package/dist/schema-generator/builder/ast-builder.test.js +0 -469
  222. package/dist/schema-generator/builder/ast-builder.test.js.map +0 -1
  223. package/dist/shared/file-scanner.test.d.ts +0 -2
  224. package/dist/shared/file-scanner.test.d.ts.map +0 -1
  225. package/dist/shared/file-scanner.test.js +0 -138
  226. package/dist/shared/file-scanner.test.js.map +0 -1
  227. package/dist/shared/interface-validator.test.d.ts +0 -2
  228. package/dist/shared/interface-validator.test.d.ts.map +0 -1
  229. package/dist/shared/interface-validator.test.js +0 -145
  230. package/dist/shared/interface-validator.test.js.map +0 -1
  231. package/dist/type-extractor/types/typescript.test.d.ts +0 -2
  232. package/dist/type-extractor/types/typescript.test.d.ts.map +0 -1
  233. package/dist/type-extractor/types/typescript.test.js +0 -287
  234. package/dist/type-extractor/types/typescript.test.js.map +0 -1
@@ -0,0 +1,137 @@
1
+ import type ts from "typescript";
2
+ import type {
3
+ InlineEnumMemberInfo,
4
+ InlineObjectPropertyDef,
5
+ ScalarTypeInfo,
6
+ TSTypeReference,
7
+ } from "./typescript.js";
8
+
9
+ interface CreateTSTypeReferenceParams {
10
+ readonly kind: TSTypeReference["kind"];
11
+ readonly overrides: Partial<TSTypeReference>;
12
+ }
13
+
14
+ function createTSTypeReference(
15
+ params: CreateTSTypeReferenceParams,
16
+ ): TSTypeReference {
17
+ return {
18
+ kind: params.kind,
19
+ name: null,
20
+ elementType: null,
21
+ members: null,
22
+ nullable: false,
23
+ scalarInfo: null,
24
+ inlineObjectProperties: null,
25
+ inlineEnumMembers: null,
26
+ externalEnumSymbol: null,
27
+ externalEnumDescription: null,
28
+ externalEnumDeprecated: null,
29
+ ...params.overrides,
30
+ };
31
+ }
32
+
33
+ interface CreateReferenceTypeParams {
34
+ readonly name: string;
35
+ readonly nullable: boolean;
36
+ }
37
+
38
+ export function createReferenceType(
39
+ params: CreateReferenceTypeParams,
40
+ ): TSTypeReference {
41
+ return createTSTypeReference({
42
+ kind: "reference",
43
+ overrides: { name: params.name, nullable: params.nullable },
44
+ });
45
+ }
46
+
47
+ interface CreatePrimitiveTypeParams {
48
+ readonly name: string;
49
+ readonly nullable: boolean;
50
+ }
51
+
52
+ export function createPrimitiveType(
53
+ params: CreatePrimitiveTypeParams,
54
+ ): TSTypeReference {
55
+ return createTSTypeReference({
56
+ kind: "primitive",
57
+ overrides: { name: params.name, nullable: params.nullable },
58
+ });
59
+ }
60
+
61
+ export function createArrayType(elementType: TSTypeReference): TSTypeReference {
62
+ return createTSTypeReference({ kind: "array", overrides: { elementType } });
63
+ }
64
+
65
+ interface CreateUnionTypeParams {
66
+ readonly members: ReadonlyArray<TSTypeReference>;
67
+ readonly nullable: boolean;
68
+ }
69
+
70
+ export function createUnionType(
71
+ params: CreateUnionTypeParams,
72
+ ): TSTypeReference {
73
+ return createTSTypeReference({
74
+ kind: "union",
75
+ overrides: { members: params.members, nullable: params.nullable },
76
+ });
77
+ }
78
+
79
+ export function createInlineObjectType(
80
+ properties: ReadonlyArray<InlineObjectPropertyDef>,
81
+ ): TSTypeReference {
82
+ return createTSTypeReference({
83
+ kind: "inlineObject",
84
+ overrides: { inlineObjectProperties: properties },
85
+ });
86
+ }
87
+
88
+ interface CreateScalarTypeParams {
89
+ readonly name: string;
90
+ readonly scalarInfo: ScalarTypeInfo;
91
+ readonly nullable: boolean;
92
+ }
93
+
94
+ export function createScalarType(
95
+ params: CreateScalarTypeParams,
96
+ ): TSTypeReference {
97
+ return createTSTypeReference({
98
+ kind: "scalar",
99
+ overrides: {
100
+ name: params.name,
101
+ scalarInfo: params.scalarInfo,
102
+ nullable: params.nullable,
103
+ },
104
+ });
105
+ }
106
+
107
+ export function createLiteralType(name: string): TSTypeReference {
108
+ return createTSTypeReference({ kind: "literal", overrides: { name } });
109
+ }
110
+
111
+ interface CreateInlineEnumTypeParams {
112
+ readonly members: ReadonlyArray<InlineEnumMemberInfo>;
113
+ readonly nullable: boolean;
114
+ /** External TypeScript enum symbol for deduplication (null for string literal unions) */
115
+ readonly externalEnumSymbol: ts.Symbol | null;
116
+ /** TSDoc description from the external enum type itself (null for string literal unions) */
117
+ readonly externalEnumDescription: string | null;
118
+ /** @deprecated tag from the external enum type itself (null for string literal unions) */
119
+ readonly externalEnumDeprecated:
120
+ | import("../../shared/tsdoc-parser.js").DeprecationInfo
121
+ | null;
122
+ }
123
+
124
+ export function createInlineEnumType(
125
+ params: CreateInlineEnumTypeParams,
126
+ ): TSTypeReference {
127
+ return createTSTypeReference({
128
+ kind: "inlineEnum",
129
+ overrides: {
130
+ inlineEnumMembers: params.members,
131
+ nullable: params.nullable,
132
+ externalEnumSymbol: params.externalEnumSymbol,
133
+ externalEnumDescription: params.externalEnumDescription,
134
+ externalEnumDeprecated: params.externalEnumDeprecated,
135
+ },
136
+ });
137
+ }
@@ -0,0 +1,133 @@
1
+ import type ts from "typescript";
2
+ import type {
3
+ DirectiveArgumentValue,
4
+ DirectiveInfo,
5
+ } from "../../shared/directive-detector.js";
6
+ import type { DeprecationInfo } from "../../shared/tsdoc-parser.js";
7
+ import type { SourceLocation } from "./diagnostics.js";
8
+
9
+ export type TypeKind =
10
+ | "object"
11
+ | "interface"
12
+ | "union"
13
+ | "enum"
14
+ | "graphqlInterface";
15
+
16
+ /**
17
+ * Information about a detected scalar type.
18
+ */
19
+ export interface ScalarTypeInfo {
20
+ /** The GraphQL scalar type name (ID, Int, Float, String, Boolean, or custom scalar name) */
21
+ readonly scalarName: string;
22
+ /** The TypeScript type name (e.g., "IDString", "Int", "DateTime") */
23
+ readonly typeName: string;
24
+ /** The underlying TypeScript primitive type (undefined for custom scalars) */
25
+ readonly baseType: "string" | "number" | undefined;
26
+ /** Whether this is a custom scalar */
27
+ readonly isCustom: boolean;
28
+ /** Usage constraint: "input" for input-only, "output" for output-only, null for both */
29
+ readonly only: "input" | "output" | null;
30
+ }
31
+
32
+ export interface TypeMetadata {
33
+ readonly name: string;
34
+ readonly kind: TypeKind;
35
+ readonly sourceFile: string;
36
+ readonly sourceLocation: SourceLocation;
37
+ readonly exportKind: "named" | "default";
38
+ readonly description: string | null;
39
+ readonly deprecated: DeprecationInfo | null;
40
+ readonly directives: ReadonlyArray<DirectiveInfo> | null;
41
+ }
42
+
43
+ export type TSTypeReferenceKind =
44
+ | "primitive"
45
+ | "reference"
46
+ | "array"
47
+ | "union"
48
+ | "literal"
49
+ | "scalar"
50
+ | "inlineObject"
51
+ | "inlineEnum";
52
+
53
+ /**
54
+ * Information about an inline enum member (string literal union value).
55
+ */
56
+ export interface InlineEnumMemberInfo {
57
+ /** Original value from TypeScript (e.g., "pendingReview") */
58
+ readonly value: string;
59
+ /** Description from TSDoc (if available) */
60
+ readonly description: string | null;
61
+ /** Deprecation info from @deprecated tag */
62
+ readonly deprecated: DeprecationInfo | null;
63
+ }
64
+
65
+ export interface TSTypeReference {
66
+ readonly kind: TSTypeReferenceKind;
67
+ readonly name: string | null;
68
+ readonly elementType: TSTypeReference | null;
69
+ readonly members: ReadonlyArray<TSTypeReference> | null;
70
+ readonly nullable: boolean;
71
+ readonly scalarInfo: ScalarTypeInfo | null;
72
+ readonly inlineObjectProperties: ReadonlyArray<InlineObjectPropertyDef> | null;
73
+ /** Inline enum members when kind is "inlineEnum" */
74
+ readonly inlineEnumMembers: ReadonlyArray<InlineEnumMemberInfo> | null;
75
+ /** External TypeScript enum symbol for deduplication (Requirement 5.2) */
76
+ readonly externalEnumSymbol: ts.Symbol | null;
77
+ /** TSDoc description from the external enum type itself (Requirement 6.1) */
78
+ readonly externalEnumDescription: string | null;
79
+ /** @deprecated tag from the external enum type itself (Requirement 6.3) */
80
+ readonly externalEnumDeprecated: DeprecationInfo | null;
81
+ }
82
+
83
+ export interface InlineObjectPropertyDef {
84
+ readonly name: string;
85
+ readonly tsType: TSTypeReference;
86
+ readonly optional: boolean;
87
+ readonly description: string | null;
88
+ readonly deprecated: DeprecationInfo | null;
89
+ readonly directives: ReadonlyArray<DirectiveInfo> | null;
90
+ readonly defaultValue: DirectiveArgumentValue | null;
91
+ readonly sourceLocation: SourceLocation | null;
92
+ }
93
+
94
+ export interface FieldDefinition {
95
+ readonly name: string;
96
+ readonly tsType: TSTypeReference;
97
+ readonly optional: boolean;
98
+ readonly description: string | null;
99
+ readonly deprecated: DeprecationInfo | null;
100
+ readonly directives: ReadonlyArray<DirectiveInfo> | null;
101
+ readonly defaultValue: DirectiveArgumentValue | null;
102
+ readonly sourceLocation: SourceLocation | null;
103
+ }
104
+
105
+ export interface EnumMemberInfo {
106
+ readonly name: string;
107
+ readonly value: string;
108
+ /** Numeric value for numeric enums, null for string enums */
109
+ readonly numericValue: number | null;
110
+ readonly description: string | null;
111
+ readonly deprecated: DeprecationInfo | null;
112
+ readonly sourceLocation: SourceLocation | null;
113
+ }
114
+
115
+ export interface InlineObjectProperty {
116
+ readonly propertyName: string;
117
+ readonly propertyType: TSTypeReference;
118
+ readonly description: string | null;
119
+ readonly deprecated: DeprecationInfo | null;
120
+ }
121
+
122
+ export interface InlineObjectMember {
123
+ readonly properties: ReadonlyArray<InlineObjectProperty>;
124
+ }
125
+
126
+ export interface ExtractedTypeInfo {
127
+ readonly metadata: TypeMetadata;
128
+ readonly fields: ReadonlyArray<FieldDefinition>;
129
+ readonly unionMembers: ReadonlyArray<string> | null;
130
+ readonly inlineObjectMembers: ReadonlyArray<InlineObjectMember> | null;
131
+ readonly enumMembers: ReadonlyArray<EnumMemberInfo> | null;
132
+ readonly implementedInterfaces: ReadonlyArray<string> | null;
133
+ }
@@ -0,0 +1,77 @@
1
+ import { BUILT_IN_SCALARS } from "../../shared/constants.js";
2
+ import type { Diagnostic, GraphQLTypeInfo } from "../types/index.js";
3
+
4
+ export interface ValidationResult {
5
+ readonly valid: boolean;
6
+ readonly diagnostics: ReadonlyArray<Diagnostic>;
7
+ }
8
+
9
+ export interface ValidateTypesOptions {
10
+ readonly types: ReadonlyArray<GraphQLTypeInfo>;
11
+ readonly customScalarNames: ReadonlyArray<string> | null;
12
+ }
13
+ const PLACEHOLDER_TYPES = new Set(["__INLINE_OBJECT__", "__INLINE_ENUM__"]);
14
+
15
+ function isOptionsObject(
16
+ arg: ReadonlyArray<GraphQLTypeInfo> | ValidateTypesOptions,
17
+ ): arg is ValidateTypesOptions {
18
+ return !Array.isArray(arg) && "types" in arg;
19
+ }
20
+
21
+ export function validateTypes(
22
+ typesOrOptions: ReadonlyArray<GraphQLTypeInfo> | ValidateTypesOptions,
23
+ ): ValidationResult {
24
+ const types = isOptionsObject(typesOrOptions)
25
+ ? typesOrOptions.types
26
+ : typesOrOptions;
27
+ const customScalarNames = isOptionsObject(typesOrOptions)
28
+ ? typesOrOptions.customScalarNames
29
+ : undefined;
30
+
31
+ const diagnostics: Diagnostic[] = [];
32
+
33
+ const typeNames = new Set(types.map((t) => t.name));
34
+ const knownScalars = new Set([
35
+ ...BUILT_IN_SCALARS,
36
+ ...(customScalarNames ?? []),
37
+ ]);
38
+
39
+ for (const type of types) {
40
+ if (type.kind === "Object" && type.fields) {
41
+ for (const field of type.fields) {
42
+ const typeName = field.type.typeName;
43
+
44
+ if (
45
+ !typeNames.has(typeName) &&
46
+ !knownScalars.has(typeName) &&
47
+ !PLACEHOLDER_TYPES.has(typeName)
48
+ ) {
49
+ diagnostics.push({
50
+ code: "UNRESOLVED_REFERENCE",
51
+ message: `Field '${field.name}' references unresolved type '${typeName}'`,
52
+ severity: "error",
53
+ location: { file: type.sourceFile, line: 1, column: 1 },
54
+ });
55
+ }
56
+ }
57
+ }
58
+
59
+ if (type.kind === "Union" && type.unionMembers) {
60
+ for (const member of type.unionMembers) {
61
+ if (!typeNames.has(member) && !knownScalars.has(member)) {
62
+ diagnostics.push({
63
+ code: "UNRESOLVED_REFERENCE",
64
+ message: `Union '${type.name}' references unresolved type '${member}'`,
65
+ severity: "error",
66
+ location: { file: type.sourceFile, line: 1, column: 1 },
67
+ });
68
+ }
69
+ }
70
+ }
71
+ }
72
+
73
+ return {
74
+ valid: diagnostics.length === 0,
75
+ diagnostics,
76
+ };
77
+ }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=auto-type-generator.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auto-type-generator.test.d.ts","sourceRoot":"","sources":["../../src/auto-type-generator/auto-type-generator.test.ts"],"names":[],"mappings":""}