@gqlkit-ts/cli 0.1.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 (339) hide show
  1. package/dist/auto-type-generator/auto-type-generator.d.ts +26 -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 +846 -152
  4. package/dist/auto-type-generator/auto-type-generator.js.map +1 -1
  5. package/dist/auto-type-generator/index.d.ts +9 -2
  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 +39 -0
  10. package/dist/auto-type-generator/inline-enum-collector.d.ts.map +1 -0
  11. package/dist/auto-type-generator/inline-enum-collector.js +193 -0
  12. package/dist/auto-type-generator/inline-enum-collector.js.map +1 -0
  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 +22 -1
  30. package/dist/auto-type-generator/naming-convention.d.ts.map +1 -1
  31. package/dist/auto-type-generator/naming-convention.js +24 -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 +119 -14
  65. package/dist/gen-orchestrator/orchestrator.js.map +1 -1
  66. package/dist/resolver-extractor/extract-resolvers.d.ts +28 -1
  67. package/dist/resolver-extractor/extract-resolvers.d.ts.map +1 -1
  68. package/dist/resolver-extractor/extractor/define-api-extractor.d.ts +16 -1
  69. package/dist/resolver-extractor/extractor/define-api-extractor.d.ts.map +1 -1
  70. package/dist/resolver-extractor/extractor/define-api-extractor.js +86 -309
  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 +10 -2
  79. package/dist/schema-generator/emitter/code-emitter.d.ts.map +1 -1
  80. package/dist/schema-generator/emitter/code-emitter.js +39 -4
  81. package/dist/schema-generator/emitter/code-emitter.js.map +1 -1
  82. package/dist/schema-generator/generate-schema.d.ts +1 -0
  83. package/dist/schema-generator/generate-schema.d.ts.map +1 -1
  84. package/dist/schema-generator/generate-schema.js +90 -4
  85. package/dist/schema-generator/generate-schema.js.map +1 -1
  86. package/dist/schema-generator/integrator/result-integrator.d.ts +34 -2
  87. package/dist/schema-generator/integrator/result-integrator.d.ts.map +1 -1
  88. package/dist/schema-generator/integrator/result-integrator.js +96 -1
  89. package/dist/schema-generator/integrator/result-integrator.js.map +1 -1
  90. package/dist/schema-generator/resolver-collector/resolver-collector.d.ts +2 -0
  91. package/dist/schema-generator/resolver-collector/resolver-collector.d.ts.map +1 -1
  92. package/dist/schema-generator/resolver-collector/resolver-collector.js +22 -0
  93. package/dist/schema-generator/resolver-collector/resolver-collector.js.map +1 -1
  94. package/dist/shared/constants.d.ts +0 -16
  95. package/dist/shared/constants.d.ts.map +1 -1
  96. package/dist/shared/constants.js +0 -19
  97. package/dist/shared/constants.js.map +1 -1
  98. package/dist/shared/directive-detector.d.ts.map +1 -1
  99. package/dist/shared/directive-detector.js +8 -15
  100. package/dist/shared/directive-detector.js.map +1 -1
  101. package/dist/shared/enum-prefix-detector.d.ts +63 -0
  102. package/dist/shared/enum-prefix-detector.d.ts.map +1 -0
  103. package/dist/shared/enum-prefix-detector.js +80 -0
  104. package/dist/shared/enum-prefix-detector.js.map +1 -0
  105. package/dist/shared/file-scanner.d.ts.map +1 -1
  106. package/dist/shared/file-scanner.js +5 -3
  107. package/dist/shared/file-scanner.js.map +1 -1
  108. package/dist/shared/ignore-fields-detector.d.ts +26 -0
  109. package/dist/shared/ignore-fields-detector.d.ts.map +1 -0
  110. package/dist/shared/ignore-fields-detector.js +83 -0
  111. package/dist/shared/ignore-fields-detector.js.map +1 -0
  112. package/dist/shared/ignore-fields-validator.d.ts +29 -0
  113. package/dist/shared/ignore-fields-validator.d.ts.map +1 -0
  114. package/dist/shared/ignore-fields-validator.js +43 -0
  115. package/dist/shared/ignore-fields-validator.js.map +1 -0
  116. package/dist/shared/index.d.ts +3 -1
  117. package/dist/shared/index.d.ts.map +1 -1
  118. package/dist/shared/index.js +1 -3
  119. package/dist/shared/index.js.map +1 -1
  120. package/dist/shared/interface-detector.d.ts +3 -2
  121. package/dist/shared/interface-detector.d.ts.map +1 -1
  122. package/dist/shared/interface-detector.js +54 -11
  123. package/dist/shared/interface-detector.js.map +1 -1
  124. package/dist/shared/path-utils.d.ts +2 -0
  125. package/dist/shared/path-utils.d.ts.map +1 -0
  126. package/dist/shared/path-utils.js +4 -0
  127. package/dist/shared/path-utils.js.map +1 -0
  128. package/dist/shared/source-location.d.ts +5 -0
  129. package/dist/shared/source-location.d.ts.map +1 -1
  130. package/dist/shared/source-location.js +7 -0
  131. package/dist/shared/source-location.js.map +1 -1
  132. package/dist/shared/type-converter.d.ts.map +1 -1
  133. package/dist/shared/type-converter.js +11 -0
  134. package/dist/shared/type-converter.js.map +1 -1
  135. package/dist/shared/typescript-utils.d.ts +34 -7
  136. package/dist/shared/typescript-utils.d.ts.map +1 -1
  137. package/dist/shared/typescript-utils.js +72 -24
  138. package/dist/shared/typescript-utils.js.map +1 -1
  139. package/dist/type-extractor/collector/scalar-collector.d.ts.map +1 -1
  140. package/dist/type-extractor/collector/scalar-collector.js +4 -14
  141. package/dist/type-extractor/collector/scalar-collector.js.map +1 -1
  142. package/dist/type-extractor/converter/graphql-converter.d.ts.map +1 -1
  143. package/dist/type-extractor/converter/graphql-converter.js +57 -4
  144. package/dist/type-extractor/converter/graphql-converter.js.map +1 -1
  145. package/dist/type-extractor/extractor/field-type-resolver.d.ts +28 -0
  146. package/dist/type-extractor/extractor/field-type-resolver.d.ts.map +1 -0
  147. package/dist/type-extractor/extractor/field-type-resolver.js +433 -0
  148. package/dist/type-extractor/extractor/field-type-resolver.js.map +1 -0
  149. package/dist/type-extractor/extractor/type-extractor.d.ts +12 -3
  150. package/dist/type-extractor/extractor/type-extractor.d.ts.map +1 -1
  151. package/dist/type-extractor/extractor/type-extractor.js +260 -229
  152. package/dist/type-extractor/extractor/type-extractor.js.map +1 -1
  153. package/dist/type-extractor/extractor/type-name-collector.d.ts +24 -0
  154. package/dist/type-extractor/extractor/type-name-collector.d.ts.map +1 -0
  155. package/dist/type-extractor/extractor/type-name-collector.js +102 -0
  156. package/dist/type-extractor/extractor/type-name-collector.js.map +1 -0
  157. package/dist/type-extractor/mapper/scalar-base-type-mapper.d.ts +89 -0
  158. package/dist/type-extractor/mapper/scalar-base-type-mapper.d.ts.map +1 -0
  159. package/dist/type-extractor/mapper/scalar-base-type-mapper.js +158 -0
  160. package/dist/type-extractor/mapper/scalar-base-type-mapper.js.map +1 -0
  161. package/dist/type-extractor/types/diagnostics.d.ts +1 -1
  162. package/dist/type-extractor/types/diagnostics.d.ts.map +1 -1
  163. package/dist/type-extractor/types/graphql.d.ts +2 -0
  164. package/dist/type-extractor/types/graphql.d.ts.map +1 -1
  165. package/dist/type-extractor/types/index.d.ts +2 -1
  166. package/dist/type-extractor/types/index.d.ts.map +1 -1
  167. package/dist/type-extractor/types/index.js +1 -1
  168. package/dist/type-extractor/types/index.js.map +1 -1
  169. package/dist/type-extractor/types/ts-type-reference-factory.d.ts +47 -0
  170. package/dist/type-extractor/types/ts-type-reference-factory.d.ts.map +1 -0
  171. package/dist/type-extractor/types/ts-type-reference-factory.js +75 -0
  172. package/dist/type-extractor/types/ts-type-reference-factory.js.map +1 -0
  173. package/dist/type-extractor/types/typescript.d.ts +25 -1
  174. package/dist/type-extractor/types/typescript.d.ts.map +1 -1
  175. package/dist/type-extractor/validator/type-validator.js +1 -1
  176. package/dist/type-extractor/validator/type-validator.js.map +1 -1
  177. package/docs/coding-agents.md +64 -0
  178. package/docs/configuration.md +6 -20
  179. package/docs/getting-started.md +15 -12
  180. package/docs/index.md +36 -21
  181. package/docs/integration/apollo.md +8 -40
  182. package/docs/integration/drizzle.md +187 -0
  183. package/docs/integration/prisma.md +196 -0
  184. package/docs/integration/yoga.md +8 -40
  185. package/docs/schema/abstract-resolvers.md +117 -0
  186. package/docs/schema/directives.md +5 -0
  187. package/docs/schema/documentation.md +5 -0
  188. package/docs/schema/enums.md +307 -0
  189. package/docs/schema/fields.md +66 -0
  190. package/docs/schema/index.md +21 -0
  191. package/docs/schema/inputs.md +117 -15
  192. package/docs/schema/interfaces.md +31 -1
  193. package/docs/schema/objects.md +42 -0
  194. package/docs/schema/queries-mutations.md +138 -22
  195. package/docs/schema/scalars.md +5 -0
  196. package/docs/schema/unions.md +208 -1
  197. package/docs/what-is-gqlkit.md +13 -8
  198. package/package.json +14 -5
  199. package/src/auto-type-generator/auto-type-generator.ts +1670 -0
  200. package/src/auto-type-generator/index.ts +63 -0
  201. package/src/auto-type-generator/inline-enum-collector.ts +338 -0
  202. package/src/auto-type-generator/inline-object-traverser.ts +49 -0
  203. package/src/auto-type-generator/inline-union-collector.ts +402 -0
  204. package/src/auto-type-generator/inline-union-types.ts +33 -0
  205. package/src/auto-type-generator/inline-union-validator.ts +482 -0
  206. package/src/auto-type-generator/name-collision-validator.ts +119 -0
  207. package/src/auto-type-generator/naming-convention.ts +163 -0
  208. package/src/auto-type-generator/resolve-type-generator.ts +21 -0
  209. package/src/auto-type-generator/resolver-field-iterator.ts +39 -0
  210. package/src/auto-type-generator/typename-extractor.ts +230 -0
  211. package/src/auto-type-generator/typename-resolve-type-generator.ts +281 -0
  212. package/src/auto-type-generator/typename-types.ts +66 -0
  213. package/src/auto-type-generator/typename-validator.ts +326 -0
  214. package/src/cli.ts +13 -0
  215. package/src/commands/docs.ts +211 -0
  216. package/src/commands/gen.ts +141 -0
  217. package/src/commands/main.ts +5 -0
  218. package/src/config/define-config.ts +28 -0
  219. package/src/config/index.ts +7 -0
  220. package/src/config/types.ts +144 -0
  221. package/src/config-loader/index.ts +14 -0
  222. package/src/config-loader/loader.ts +143 -0
  223. package/src/config-loader/validator.ts +672 -0
  224. package/src/gen-orchestrator/hook-executor/hook-executor.ts +117 -0
  225. package/src/gen-orchestrator/orchestrator.ts +798 -0
  226. package/src/gen-orchestrator/reporter/diagnostic-reporter.ts +44 -0
  227. package/src/gen-orchestrator/reporter/progress-reporter.ts +61 -0
  228. package/src/gen-orchestrator/writer/file-writer.ts +38 -0
  229. package/src/index.ts +2 -0
  230. package/src/resolver-extractor/extract-resolvers.ts +82 -0
  231. package/src/resolver-extractor/extractor/define-api-extractor.ts +740 -0
  232. package/src/resolver-extractor/index.ts +13 -0
  233. package/src/resolver-extractor/validator/abstract-resolver-validator.ts +259 -0
  234. package/src/schema-generator/builder/ast-builder.ts +706 -0
  235. package/src/schema-generator/emitter/code-emitter.ts +385 -0
  236. package/src/schema-generator/emitter/sdl-emitter.ts +13 -0
  237. package/src/schema-generator/generate-schema.ts +267 -0
  238. package/src/schema-generator/index.ts +19 -0
  239. package/src/schema-generator/integrator/result-integrator.ts +759 -0
  240. package/src/schema-generator/pruner/schema-pruner.ts +112 -0
  241. package/src/schema-generator/resolver-collector/resolver-collector.ts +157 -0
  242. package/src/shared/constants.ts +122 -0
  243. package/src/shared/default-value-detector.ts +172 -0
  244. package/src/shared/diagnostics.ts +35 -0
  245. package/src/shared/directive-definition-extractor.ts +564 -0
  246. package/src/shared/directive-detector.ts +556 -0
  247. package/src/shared/enum-prefix-detector.ts +99 -0
  248. package/src/shared/file-scanner.ts +170 -0
  249. package/src/shared/ignore-fields-detector.ts +109 -0
  250. package/src/shared/ignore-fields-validator.ts +66 -0
  251. package/src/shared/index.ts +34 -0
  252. package/src/shared/inline-object-extractor.ts +102 -0
  253. package/src/shared/inline-object-utils.ts +23 -0
  254. package/src/shared/interface-detector.ts +176 -0
  255. package/src/shared/interface-validator.ts +211 -0
  256. package/src/shared/metadata-detector.ts +443 -0
  257. package/src/shared/path-utils.ts +3 -0
  258. package/src/shared/program-factory.ts +51 -0
  259. package/src/shared/source-location.ts +38 -0
  260. package/src/shared/tsconfig-loader.ts +126 -0
  261. package/src/shared/tsdoc-parser.ts +155 -0
  262. package/src/shared/type-converter.ts +99 -0
  263. package/src/shared/typescript-utils.ts +246 -0
  264. package/src/type-extractor/collector/result-collector.ts +57 -0
  265. package/src/type-extractor/collector/scalar-collector.ts +254 -0
  266. package/src/type-extractor/converter/field-eligibility.ts +112 -0
  267. package/src/type-extractor/converter/graphql-converter.ts +483 -0
  268. package/src/type-extractor/extract-types.ts +1 -0
  269. package/src/type-extractor/extractor/field-type-resolver.ts +614 -0
  270. package/src/type-extractor/extractor/type-extractor.ts +1644 -0
  271. package/src/type-extractor/extractor/type-name-collector.ts +130 -0
  272. package/src/type-extractor/index.ts +20 -0
  273. package/src/type-extractor/mapper/scalar-base-type-mapper.ts +265 -0
  274. package/src/type-extractor/types/diagnostics.ts +109 -0
  275. package/src/type-extractor/types/graphql.ts +55 -0
  276. package/src/type-extractor/types/index.ts +37 -0
  277. package/src/type-extractor/types/ts-type-reference-factory.ts +150 -0
  278. package/src/type-extractor/types/typescript.ts +137 -0
  279. package/src/type-extractor/validator/type-validator.ts +77 -0
  280. package/dist/auto-type-generator/auto-type-generator.test.d.ts +0 -2
  281. package/dist/auto-type-generator/auto-type-generator.test.d.ts.map +0 -1
  282. package/dist/auto-type-generator/auto-type-generator.test.js +0 -613
  283. package/dist/auto-type-generator/auto-type-generator.test.js.map +0 -1
  284. package/dist/auto-type-generator/name-collision-validator.test.d.ts +0 -2
  285. package/dist/auto-type-generator/name-collision-validator.test.d.ts.map +0 -1
  286. package/dist/auto-type-generator/name-collision-validator.test.js +0 -358
  287. package/dist/auto-type-generator/name-collision-validator.test.js.map +0 -1
  288. package/dist/auto-type-generator/naming-convention.test.d.ts +0 -2
  289. package/dist/auto-type-generator/naming-convention.test.d.ts.map +0 -1
  290. package/dist/auto-type-generator/naming-convention.test.js +0 -132
  291. package/dist/auto-type-generator/naming-convention.test.js.map +0 -1
  292. package/dist/commands/gen.test.d.ts +0 -2
  293. package/dist/commands/gen.test.d.ts.map +0 -1
  294. package/dist/commands/gen.test.js +0 -226
  295. package/dist/commands/gen.test.js.map +0 -1
  296. package/dist/config-loader/loader.test.d.ts +0 -2
  297. package/dist/config-loader/loader.test.d.ts.map +0 -1
  298. package/dist/config-loader/loader.test.js +0 -123
  299. package/dist/config-loader/loader.test.js.map +0 -1
  300. package/dist/config-loader/validator.test.d.ts +0 -2
  301. package/dist/config-loader/validator.test.d.ts.map +0 -1
  302. package/dist/config-loader/validator.test.js +0 -846
  303. package/dist/config-loader/validator.test.js.map +0 -1
  304. package/dist/gen-orchestrator/golden.test.d.ts +0 -2
  305. package/dist/gen-orchestrator/golden.test.d.ts.map +0 -1
  306. package/dist/gen-orchestrator/golden.test.js +0 -102
  307. package/dist/gen-orchestrator/golden.test.js.map +0 -1
  308. package/dist/gen-orchestrator/hook-executor/hook-executor.test.d.ts +0 -2
  309. package/dist/gen-orchestrator/hook-executor/hook-executor.test.d.ts.map +0 -1
  310. package/dist/gen-orchestrator/hook-executor/hook-executor.test.js +0 -167
  311. package/dist/gen-orchestrator/hook-executor/hook-executor.test.js.map +0 -1
  312. package/dist/gen-orchestrator/reporter/progress-reporter.test.d.ts +0 -2
  313. package/dist/gen-orchestrator/reporter/progress-reporter.test.d.ts.map +0 -1
  314. package/dist/gen-orchestrator/reporter/progress-reporter.test.js +0 -74
  315. package/dist/gen-orchestrator/reporter/progress-reporter.test.js.map +0 -1
  316. package/dist/resolver-extractor/validator/only-validator.d.ts +0 -61
  317. package/dist/resolver-extractor/validator/only-validator.d.ts.map +0 -1
  318. package/dist/resolver-extractor/validator/only-validator.js +0 -76
  319. package/dist/resolver-extractor/validator/only-validator.js.map +0 -1
  320. package/dist/resolver-extractor/validator/only-validator.test.d.ts +0 -8
  321. package/dist/resolver-extractor/validator/only-validator.test.d.ts.map +0 -1
  322. package/dist/resolver-extractor/validator/only-validator.test.js +0 -352
  323. package/dist/resolver-extractor/validator/only-validator.test.js.map +0 -1
  324. package/dist/schema-generator/builder/ast-builder.test.d.ts +0 -2
  325. package/dist/schema-generator/builder/ast-builder.test.d.ts.map +0 -1
  326. package/dist/schema-generator/builder/ast-builder.test.js +0 -469
  327. package/dist/schema-generator/builder/ast-builder.test.js.map +0 -1
  328. package/dist/shared/file-scanner.test.d.ts +0 -2
  329. package/dist/shared/file-scanner.test.d.ts.map +0 -1
  330. package/dist/shared/file-scanner.test.js +0 -138
  331. package/dist/shared/file-scanner.test.js.map +0 -1
  332. package/dist/shared/interface-validator.test.d.ts +0 -2
  333. package/dist/shared/interface-validator.test.d.ts.map +0 -1
  334. package/dist/shared/interface-validator.test.js +0 -145
  335. package/dist/shared/interface-validator.test.js.map +0 -1
  336. package/dist/type-extractor/types/typescript.test.d.ts +0 -2
  337. package/dist/type-extractor/types/typescript.test.d.ts.map +0 -1
  338. package/dist/type-extractor/types/typescript.test.js +0 -287
  339. package/dist/type-extractor/types/typescript.test.js.map +0 -1
@@ -0,0 +1,57 @@
1
+ import { deduplicateDiagnostics } from "../../shared/index.js";
2
+ import type {
3
+ Diagnostic,
4
+ Diagnostics,
5
+ FieldInfo,
6
+ GraphQLTypeInfo,
7
+ } from "../types/index.js";
8
+
9
+ export interface ExtractTypesResult {
10
+ readonly types: ReadonlyArray<GraphQLTypeInfo>;
11
+ readonly diagnostics: Diagnostics;
12
+ }
13
+
14
+ function sortFields(fields: ReadonlyArray<FieldInfo>): FieldInfo[] {
15
+ return [...fields].sort((a, b) => a.name.localeCompare(b.name));
16
+ }
17
+
18
+ function sortUnionMembers(members: ReadonlyArray<string>): string[] {
19
+ return [...members].sort((a, b) => a.localeCompare(b));
20
+ }
21
+
22
+ function sortType(type: GraphQLTypeInfo): GraphQLTypeInfo {
23
+ if (type.kind === "Object" && type.fields) {
24
+ return {
25
+ ...type,
26
+ fields: sortFields(type.fields),
27
+ };
28
+ }
29
+
30
+ if (type.kind === "Union" && type.unionMembers) {
31
+ return {
32
+ ...type,
33
+ unionMembers: sortUnionMembers(type.unionMembers),
34
+ };
35
+ }
36
+
37
+ return type;
38
+ }
39
+
40
+ export function collectResults(
41
+ types: ReadonlyArray<GraphQLTypeInfo>,
42
+ diagnostics: ReadonlyArray<Diagnostic>,
43
+ ): ExtractTypesResult {
44
+ const sortedTypes = [...types]
45
+ .sort((a, b) => a.name.localeCompare(b.name))
46
+ .map(sortType);
47
+
48
+ const uniqueDiagnostics = deduplicateDiagnostics(diagnostics);
49
+
50
+ const errors = uniqueDiagnostics.filter((d) => d.severity === "error");
51
+ const warnings = uniqueDiagnostics.filter((d) => d.severity === "warning");
52
+
53
+ return {
54
+ types: sortedTypes,
55
+ diagnostics: { errors, warnings },
56
+ };
57
+ }
@@ -0,0 +1,254 @@
1
+ /**
2
+ * ScalarCollector collects scalar definitions from types and config,
3
+ * validates input/output type constraints, and builds type parameters.
4
+ */
5
+ import { isBuiltInScalar } from "../../shared/constants.js";
6
+
7
+ /**
8
+ * Information about a detected scalar type from metadata detection.
9
+ */
10
+ export interface ScalarMetadataInfo {
11
+ /** The GraphQL scalar name */
12
+ readonly scalarName: string;
13
+ /** The TypeScript type name */
14
+ readonly typeName: string;
15
+ /** Usage constraint: "input", "output", or null for both */
16
+ readonly only: "input" | "output" | null;
17
+ /** Source file path */
18
+ readonly sourceFile: string;
19
+ /** Line number in source file */
20
+ readonly line: number;
21
+ /** TSDoc description if available */
22
+ readonly description: string | null;
23
+ }
24
+
25
+ /**
26
+ * Configuration scalar mapping information.
27
+ */
28
+ export interface ConfigScalarMapping extends ScalarMetadataInfo {
29
+ /** Whether this mapping comes from config file */
30
+ readonly fromConfig: boolean;
31
+ }
32
+
33
+ /**
34
+ * Reference to a scalar type.
35
+ */
36
+ export interface ScalarTypeRef {
37
+ /** TypeScript type name */
38
+ readonly typeName: string;
39
+ /** Source file path */
40
+ readonly sourceFile: string;
41
+ /** Line number in source file */
42
+ readonly line: number;
43
+ }
44
+
45
+ /**
46
+ * Description source information.
47
+ */
48
+ export interface DescriptionSource {
49
+ /** Description text */
50
+ readonly text: string;
51
+ /** Source file path */
52
+ readonly sourceFile: string;
53
+ /** Line number in source file */
54
+ readonly line: number;
55
+ /** Whether this description comes from config */
56
+ readonly fromConfig: boolean;
57
+ }
58
+
59
+ /**
60
+ * Collected scalar type with input/output type information.
61
+ */
62
+ export interface CollectedScalarType {
63
+ /** GraphQL scalar name */
64
+ readonly scalarName: string;
65
+ /** Input type reference (exactly one required) */
66
+ readonly inputType: ScalarTypeRef | null;
67
+ /** Output type references (one or more required, union built from these) */
68
+ readonly outputTypes: ReadonlyArray<ScalarTypeRef>;
69
+ /** Description sources */
70
+ readonly descriptions: ReadonlyArray<DescriptionSource>;
71
+ /** Whether this is a custom scalar (not built-in) */
72
+ readonly isCustom: boolean;
73
+ }
74
+
75
+ /**
76
+ * Diagnostic error information.
77
+ */
78
+ export interface ScalarCollectorDiagnostic {
79
+ readonly code:
80
+ | "MULTIPLE_INPUT_TYPES"
81
+ | "MISSING_INPUT_TYPE"
82
+ | "MISSING_OUTPUT_TYPE";
83
+ readonly message: string;
84
+ readonly severity: "error";
85
+ }
86
+
87
+ /**
88
+ * Result type for scalar collection.
89
+ */
90
+ export type CollectScalarsResult =
91
+ | { success: true; data: ReadonlyArray<CollectedScalarType> }
92
+ | { success: false; errors: ReadonlyArray<ScalarCollectorDiagnostic> };
93
+
94
+ interface ScalarGroup {
95
+ inputTypes: ScalarTypeRef[];
96
+ outputTypes: ScalarTypeRef[];
97
+ descriptions: DescriptionSource[];
98
+ }
99
+
100
+ function createTypeRef(info: ScalarMetadataInfo): ScalarTypeRef {
101
+ return {
102
+ typeName: info.typeName,
103
+ sourceFile: info.sourceFile,
104
+ line: info.line,
105
+ };
106
+ }
107
+
108
+ function createDescriptionSource(
109
+ info: ScalarMetadataInfo,
110
+ fromConfig: boolean,
111
+ ): DescriptionSource | null {
112
+ if (!info.description) return null;
113
+ return {
114
+ text: info.description,
115
+ sourceFile: info.sourceFile,
116
+ line: info.line,
117
+ fromConfig,
118
+ };
119
+ }
120
+
121
+ function sortDescriptions(
122
+ descriptions: DescriptionSource[],
123
+ ): DescriptionSource[] {
124
+ return [...descriptions].sort((a, b) => {
125
+ const fileCompare = a.sourceFile.localeCompare(b.sourceFile);
126
+ if (fileCompare !== 0) return fileCompare;
127
+ return a.line - b.line;
128
+ });
129
+ }
130
+
131
+ /**
132
+ * Merges multiple descriptions into a single string with blank line separators.
133
+ * Descriptions are expected to be pre-sorted by file path alphabetically
134
+ * and by line number within the same file.
135
+ *
136
+ * @param descriptions - Array of description sources to merge
137
+ * @returns Merged description string, or null if no descriptions available
138
+ */
139
+ export function mergeDescriptions(
140
+ descriptions: ReadonlyArray<DescriptionSource>,
141
+ ): string | null {
142
+ if (descriptions.length === 0) {
143
+ return null;
144
+ }
145
+ return descriptions.map((d) => d.text).join("\n\n");
146
+ }
147
+
148
+ function formatTypeLocation(
149
+ ref: ScalarTypeRef,
150
+ sourceRoot: string | null,
151
+ ): string {
152
+ const filePath =
153
+ sourceRoot !== null
154
+ ? ref.sourceFile.replace(sourceRoot, "").replace(/^[/\\]/, "")
155
+ : ref.sourceFile;
156
+ return `${filePath.replace(/\\/g, "/")}:${ref.line}`;
157
+ }
158
+
159
+ /**
160
+ * Options for scalar collection.
161
+ */
162
+ export interface CollectScalarsOptions {
163
+ /** Root path for normalizing source file paths in error messages */
164
+ readonly sourceRoot?: string | null;
165
+ }
166
+
167
+ /**
168
+ * Collects scalar definitions from types and config,
169
+ * validates constraints, and builds type parameters.
170
+ *
171
+ * @param scalarInfos - Scalar metadata from source files
172
+ * @param configScalars - Scalar mappings from config file
173
+ * @param options - Collection options
174
+ * @returns Result with collected scalars or diagnostics
175
+ */
176
+ export function collectScalars(
177
+ scalarInfos: ReadonlyArray<ScalarMetadataInfo>,
178
+ configScalars: ReadonlyArray<ConfigScalarMapping>,
179
+ options: CollectScalarsOptions = {},
180
+ ): CollectScalarsResult {
181
+ const sourceRoot = options.sourceRoot ?? null;
182
+ const scalarGroups = new Map<string, ScalarGroup>();
183
+
184
+ const processInfo = (info: ScalarMetadataInfo, fromConfig: boolean): void => {
185
+ if (isBuiltInScalar(info.scalarName)) {
186
+ return;
187
+ }
188
+
189
+ let group = scalarGroups.get(info.scalarName);
190
+ if (!group) {
191
+ group = { inputTypes: [], outputTypes: [], descriptions: [] };
192
+ scalarGroups.set(info.scalarName, group);
193
+ }
194
+
195
+ const typeRef = createTypeRef(info);
196
+
197
+ if (info.only === null || info.only === "input") {
198
+ group.inputTypes.push(typeRef);
199
+ }
200
+ if (info.only === null || info.only === "output") {
201
+ group.outputTypes.push(typeRef);
202
+ }
203
+
204
+ const descSource = createDescriptionSource(info, fromConfig);
205
+ if (descSource) {
206
+ group.descriptions.push(descSource);
207
+ }
208
+ };
209
+
210
+ for (const info of scalarInfos) {
211
+ processInfo(info, false);
212
+ }
213
+ for (const info of configScalars) {
214
+ processInfo(info, info.fromConfig);
215
+ }
216
+
217
+ const diagnostics: ScalarCollectorDiagnostic[] = [];
218
+ const collectedScalars: CollectedScalarType[] = [];
219
+
220
+ for (const [scalarName, group] of scalarGroups) {
221
+ if (group.inputTypes.length > 1) {
222
+ const typeLocations = group.inputTypes
223
+ .map((t) => `'${t.typeName}' at ${formatTypeLocation(t, sourceRoot)}`)
224
+ .join(", ");
225
+ diagnostics.push({
226
+ code: "MULTIPLE_INPUT_TYPES",
227
+ message: `Custom scalar '${scalarName}' has multiple input types: ${typeLocations}. Only one input type is allowed per scalar.`,
228
+ severity: "error",
229
+ });
230
+ continue;
231
+ }
232
+
233
+ // Allow input-only scalars (no output type required) and output-only scalars (no input type required)
234
+ // These are valid for context-specific scalar usage patterns (Requirements 3.1, 3.2, 3.3)
235
+ if (group.inputTypes.length === 0 && group.outputTypes.length === 0) {
236
+ // Both missing - this shouldn't happen but guard against it
237
+ continue;
238
+ }
239
+
240
+ collectedScalars.push({
241
+ scalarName,
242
+ inputType: group.inputTypes[0] ?? null,
243
+ outputTypes: group.outputTypes,
244
+ descriptions: sortDescriptions(group.descriptions),
245
+ isCustom: true,
246
+ });
247
+ }
248
+
249
+ if (diagnostics.length > 0) {
250
+ return { success: false, errors: diagnostics };
251
+ }
252
+
253
+ return { success: true, data: collectedScalars };
254
+ }
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Field and enum value eligibility checks for GraphQL schema generation.
3
+ *
4
+ * These functions determine whether a field or enum value can be included
5
+ * in the generated GraphQL schema based on naming conventions and other rules.
6
+ */
7
+
8
+ const GRAPHQL_NAME_PATTERN = /^[_A-Za-z][_0-9A-Za-z]*$/;
9
+
10
+ export type SkipReason =
11
+ | { readonly code: "INVALID_NAME"; readonly message: string }
12
+ | { readonly code: "RESERVED_NAME"; readonly message: string };
13
+
14
+ export type EligibilityResult =
15
+ | { readonly eligible: true; readonly skipReason: null }
16
+ | { readonly eligible: false; readonly skipReason: SkipReason };
17
+
18
+ function isValidGraphQLName(name: string): boolean {
19
+ if (name.length === 0) return false;
20
+ return GRAPHQL_NAME_PATTERN.test(name);
21
+ }
22
+
23
+ function isReservedName(name: string): boolean {
24
+ return name.startsWith("__");
25
+ }
26
+
27
+ /**
28
+ * Check if a field name is eligible to be included as a GraphQL object field.
29
+ */
30
+ export function isEligibleAsObjectField(fieldName: string): EligibilityResult {
31
+ if (isReservedName(fieldName)) {
32
+ return {
33
+ eligible: false,
34
+ skipReason: {
35
+ code: "RESERVED_NAME",
36
+ message: `Field '${fieldName}' starts with '__' which is reserved for GraphQL introspection`,
37
+ },
38
+ };
39
+ }
40
+
41
+ if (!isValidGraphQLName(fieldName)) {
42
+ return {
43
+ eligible: false,
44
+ skipReason: {
45
+ code: "INVALID_NAME",
46
+ message: `Field '${fieldName}' is not a valid GraphQL identifier (must match /^[_A-Za-z][_0-9A-Za-z]*$/)`,
47
+ },
48
+ };
49
+ }
50
+
51
+ return { eligible: true, skipReason: null };
52
+ }
53
+
54
+ /**
55
+ * Check if a field name is eligible to be included as a GraphQL input object field.
56
+ */
57
+ export function isEligibleAsInputObjectField(
58
+ fieldName: string,
59
+ ): EligibilityResult {
60
+ if (isReservedName(fieldName)) {
61
+ return {
62
+ eligible: false,
63
+ skipReason: {
64
+ code: "RESERVED_NAME",
65
+ message: `Input field '${fieldName}' starts with '__' which is reserved for GraphQL introspection`,
66
+ },
67
+ };
68
+ }
69
+
70
+ if (!isValidGraphQLName(fieldName)) {
71
+ return {
72
+ eligible: false,
73
+ skipReason: {
74
+ code: "INVALID_NAME",
75
+ message: `Input field '${fieldName}' is not a valid GraphQL identifier (must match /^[_A-Za-z][_0-9A-Za-z]*$/)`,
76
+ },
77
+ };
78
+ }
79
+
80
+ return { eligible: true, skipReason: null };
81
+ }
82
+
83
+ /**
84
+ * Check if an enum value name is eligible to be included as a GraphQL enum value.
85
+ * Note: The name should be the converted (SCREAMING_SNAKE_CASE) name, not the original.
86
+ */
87
+ export function isEligibleAsEnumValue(
88
+ convertedName: string,
89
+ originalName: string,
90
+ ): EligibilityResult {
91
+ if (isReservedName(convertedName)) {
92
+ return {
93
+ eligible: false,
94
+ skipReason: {
95
+ code: "RESERVED_NAME",
96
+ message: `Enum member '${originalName}' converts to '${convertedName}' which starts with '__' (reserved for GraphQL introspection)`,
97
+ },
98
+ };
99
+ }
100
+
101
+ if (!isValidGraphQLName(convertedName)) {
102
+ return {
103
+ eligible: false,
104
+ skipReason: {
105
+ code: "INVALID_NAME",
106
+ message: `Enum member '${originalName}' converts to '${convertedName}' which is not a valid GraphQL identifier`,
107
+ },
108
+ };
109
+ }
110
+
111
+ return { eligible: true, skipReason: null };
112
+ }