@gqlkit-ts/cli 0.0.1 → 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 (362) hide show
  1. package/LICENSE +21 -0
  2. package/dist/auto-type-generator/auto-type-generator.d.ts +62 -0
  3. package/dist/auto-type-generator/auto-type-generator.d.ts.map +1 -0
  4. package/dist/auto-type-generator/auto-type-generator.js +540 -0
  5. package/dist/auto-type-generator/auto-type-generator.js.map +1 -0
  6. package/dist/auto-type-generator/index.d.ts +4 -0
  7. package/dist/auto-type-generator/index.d.ts.map +1 -0
  8. package/dist/auto-type-generator/index.js +3 -0
  9. package/dist/auto-type-generator/index.js.map +1 -0
  10. package/dist/auto-type-generator/inline-enum-collector.d.ts +31 -0
  11. package/dist/auto-type-generator/inline-enum-collector.d.ts.map +1 -0
  12. package/dist/auto-type-generator/inline-enum-collector.js +157 -0
  13. package/dist/auto-type-generator/inline-enum-collector.js.map +1 -0
  14. package/dist/auto-type-generator/name-collision-validator.d.ts +17 -0
  15. package/dist/auto-type-generator/name-collision-validator.d.ts.map +1 -0
  16. package/dist/auto-type-generator/name-collision-validator.js +68 -0
  17. package/dist/auto-type-generator/name-collision-validator.js.map +1 -0
  18. package/dist/auto-type-generator/naming-convention.d.ts +44 -0
  19. package/dist/auto-type-generator/naming-convention.d.ts.map +1 -0
  20. package/dist/auto-type-generator/naming-convention.js +67 -0
  21. package/dist/auto-type-generator/naming-convention.js.map +1 -0
  22. package/dist/cli.d.ts +2 -0
  23. package/dist/cli.d.ts.map +1 -0
  24. package/dist/cli.js +11 -0
  25. package/dist/cli.js.map +1 -0
  26. package/dist/commands/gen.d.ts +32 -0
  27. package/dist/commands/gen.d.ts.map +1 -0
  28. package/dist/commands/gen.js +101 -0
  29. package/dist/commands/gen.js.map +1 -0
  30. package/dist/commands/main.d.ts +12 -0
  31. package/dist/commands/main.d.ts.map +1 -0
  32. package/dist/commands/main.js +5 -0
  33. package/dist/commands/main.js.map +1 -0
  34. package/dist/config/define-config.d.ts +26 -0
  35. package/dist/config/define-config.d.ts.map +1 -0
  36. package/dist/config/define-config.js +27 -0
  37. package/dist/config/define-config.js.map +1 -0
  38. package/dist/config/index.d.ts +3 -0
  39. package/dist/config/index.d.ts.map +1 -0
  40. package/dist/config/index.js +2 -0
  41. package/dist/config/index.js.map +1 -0
  42. package/dist/config/types.d.ts +131 -0
  43. package/dist/config/types.d.ts.map +1 -0
  44. package/dist/config/types.js +2 -0
  45. package/dist/config/types.js.map +1 -0
  46. package/dist/config-loader/index.d.ts +3 -0
  47. package/dist/config-loader/index.d.ts.map +1 -0
  48. package/dist/config-loader/index.js +2 -0
  49. package/dist/config-loader/index.js.map +1 -0
  50. package/dist/config-loader/loader.d.ts +50 -0
  51. package/dist/config-loader/loader.d.ts.map +1 -0
  52. package/dist/config-loader/loader.js +78 -0
  53. package/dist/config-loader/loader.js.map +1 -0
  54. package/dist/config-loader/validator.d.ts +13 -0
  55. package/dist/config-loader/validator.d.ts.map +1 -0
  56. package/dist/config-loader/validator.js +497 -0
  57. package/dist/config-loader/validator.js.map +1 -0
  58. package/dist/gen-orchestrator/hook-executor/hook-executor.d.ts +25 -0
  59. package/dist/gen-orchestrator/hook-executor/hook-executor.d.ts.map +1 -0
  60. package/dist/gen-orchestrator/hook-executor/hook-executor.js +68 -0
  61. package/dist/gen-orchestrator/hook-executor/hook-executor.js.map +1 -0
  62. package/dist/gen-orchestrator/orchestrator.d.ts +30 -0
  63. package/dist/gen-orchestrator/orchestrator.d.ts.map +1 -0
  64. package/dist/gen-orchestrator/orchestrator.js +505 -0
  65. package/dist/gen-orchestrator/orchestrator.js.map +1 -0
  66. package/dist/gen-orchestrator/reporter/diagnostic-reporter.d.ts +9 -0
  67. package/dist/gen-orchestrator/reporter/diagnostic-reporter.d.ts.map +1 -0
  68. package/dist/gen-orchestrator/reporter/diagnostic-reporter.js +32 -0
  69. package/dist/gen-orchestrator/reporter/diagnostic-reporter.js.map +1 -0
  70. package/dist/gen-orchestrator/reporter/progress-reporter.d.ts +19 -0
  71. package/dist/gen-orchestrator/reporter/progress-reporter.d.ts.map +1 -0
  72. package/dist/gen-orchestrator/reporter/progress-reporter.js +38 -0
  73. package/dist/gen-orchestrator/reporter/progress-reporter.js.map +1 -0
  74. package/dist/gen-orchestrator/writer/file-writer.d.ts +13 -0
  75. package/dist/gen-orchestrator/writer/file-writer.d.ts.map +1 -0
  76. package/dist/gen-orchestrator/writer/file-writer.js +22 -0
  77. package/dist/gen-orchestrator/writer/file-writer.js.map +1 -0
  78. package/dist/index.d.ts +3 -0
  79. package/dist/index.d.ts.map +1 -0
  80. package/dist/index.js +2 -0
  81. package/dist/index.js.map +1 -0
  82. package/dist/resolver-extractor/extract-resolvers.d.ts +49 -0
  83. package/dist/resolver-extractor/extract-resolvers.d.ts.map +1 -0
  84. package/dist/resolver-extractor/extract-resolvers.js +2 -0
  85. package/dist/resolver-extractor/extract-resolvers.js.map +1 -0
  86. package/dist/resolver-extractor/extractor/define-api-extractor.d.ts +60 -0
  87. package/dist/resolver-extractor/extractor/define-api-extractor.d.ts.map +1 -0
  88. package/dist/resolver-extractor/extractor/define-api-extractor.js +509 -0
  89. package/dist/resolver-extractor/extractor/define-api-extractor.js.map +1 -0
  90. package/dist/resolver-extractor/index.d.ts +5 -0
  91. package/dist/resolver-extractor/index.d.ts.map +1 -0
  92. package/dist/resolver-extractor/index.js +2 -0
  93. package/dist/resolver-extractor/index.js.map +1 -0
  94. package/dist/resolver-extractor/validator/abstract-resolver-validator.d.ts +25 -0
  95. package/dist/resolver-extractor/validator/abstract-resolver-validator.d.ts.map +1 -0
  96. package/dist/resolver-extractor/validator/abstract-resolver-validator.js +172 -0
  97. package/dist/resolver-extractor/validator/abstract-resolver-validator.js.map +1 -0
  98. package/dist/resolver-extractor/validator/only-validator.d.ts +61 -0
  99. package/dist/resolver-extractor/validator/only-validator.d.ts.map +1 -0
  100. package/dist/resolver-extractor/validator/only-validator.js +76 -0
  101. package/dist/resolver-extractor/validator/only-validator.js.map +1 -0
  102. package/dist/schema-generator/builder/ast-builder.d.ts +7 -0
  103. package/dist/schema-generator/builder/ast-builder.d.ts.map +1 -0
  104. package/dist/schema-generator/builder/ast-builder.js +417 -0
  105. package/dist/schema-generator/builder/ast-builder.js.map +1 -0
  106. package/dist/schema-generator/emitter/code-emitter.d.ts +15 -0
  107. package/dist/schema-generator/emitter/code-emitter.d.ts.map +1 -0
  108. package/dist/schema-generator/emitter/code-emitter.js +216 -0
  109. package/dist/schema-generator/emitter/code-emitter.js.map +1 -0
  110. package/dist/schema-generator/emitter/sdl-emitter.d.ts +7 -0
  111. package/dist/schema-generator/emitter/sdl-emitter.d.ts.map +1 -0
  112. package/dist/schema-generator/emitter/sdl-emitter.js +11 -0
  113. package/dist/schema-generator/emitter/sdl-emitter.js.map +1 -0
  114. package/dist/schema-generator/generate-schema.d.ts +26 -0
  115. package/dist/schema-generator/generate-schema.d.ts.map +1 -0
  116. package/dist/schema-generator/generate-schema.js +93 -0
  117. package/dist/schema-generator/generate-schema.js.map +1 -0
  118. package/dist/schema-generator/index.d.ts +4 -0
  119. package/dist/schema-generator/index.d.ts.map +1 -0
  120. package/dist/schema-generator/index.js +2 -0
  121. package/dist/schema-generator/index.js.map +1 -0
  122. package/dist/schema-generator/integrator/result-integrator.d.ts +113 -0
  123. package/dist/schema-generator/integrator/result-integrator.d.ts.map +1 -0
  124. package/dist/schema-generator/integrator/result-integrator.js +438 -0
  125. package/dist/schema-generator/integrator/result-integrator.js.map +1 -0
  126. package/dist/schema-generator/pruner/schema-pruner.d.ts +16 -0
  127. package/dist/schema-generator/pruner/schema-pruner.d.ts.map +1 -0
  128. package/dist/schema-generator/pruner/schema-pruner.js +66 -0
  129. package/dist/schema-generator/pruner/schema-pruner.js.map +1 -0
  130. package/dist/schema-generator/resolver-collector/resolver-collector.d.ts +24 -0
  131. package/dist/schema-generator/resolver-collector/resolver-collector.d.ts.map +1 -0
  132. package/dist/schema-generator/resolver-collector/resolver-collector.js +61 -0
  133. package/dist/schema-generator/resolver-collector/resolver-collector.js.map +1 -0
  134. package/dist/shared/constants.d.ts +54 -0
  135. package/dist/shared/constants.d.ts.map +1 -0
  136. package/dist/shared/constants.js +109 -0
  137. package/dist/shared/constants.js.map +1 -0
  138. package/dist/shared/default-value-detector.d.ts +40 -0
  139. package/dist/shared/default-value-detector.d.ts.map +1 -0
  140. package/dist/shared/default-value-detector.js +124 -0
  141. package/dist/shared/default-value-detector.js.map +1 -0
  142. package/dist/shared/diagnostics.d.ts +4 -0
  143. package/dist/shared/diagnostics.d.ts.map +1 -0
  144. package/dist/shared/diagnostics.js +25 -0
  145. package/dist/shared/diagnostics.js.map +1 -0
  146. package/dist/shared/directive-definition-extractor.d.ts +64 -0
  147. package/dist/shared/directive-definition-extractor.d.ts.map +1 -0
  148. package/dist/shared/directive-definition-extractor.js +399 -0
  149. package/dist/shared/directive-definition-extractor.js.map +1 -0
  150. package/dist/shared/directive-detector.d.ts +102 -0
  151. package/dist/shared/directive-detector.d.ts.map +1 -0
  152. package/dist/shared/directive-detector.js +415 -0
  153. package/dist/shared/directive-detector.js.map +1 -0
  154. package/dist/shared/file-scanner.d.ts +25 -0
  155. package/dist/shared/file-scanner.d.ts.map +1 -0
  156. package/dist/shared/file-scanner.js +101 -0
  157. package/dist/shared/file-scanner.js.map +1 -0
  158. package/dist/shared/index.d.ts +10 -0
  159. package/dist/shared/index.d.ts.map +1 -0
  160. package/dist/shared/index.js +6 -0
  161. package/dist/shared/index.js.map +1 -0
  162. package/dist/shared/inline-object-extractor.d.ts +13 -0
  163. package/dist/shared/inline-object-extractor.d.ts.map +1 -0
  164. package/dist/shared/inline-object-extractor.js +65 -0
  165. package/dist/shared/inline-object-extractor.js.map +1 -0
  166. package/dist/shared/inline-object-utils.d.ts +7 -0
  167. package/dist/shared/inline-object-utils.d.ts.map +1 -0
  168. package/dist/shared/inline-object-utils.js +23 -0
  169. package/dist/shared/inline-object-utils.js.map +1 -0
  170. package/dist/shared/interface-detector.d.ts +23 -0
  171. package/dist/shared/interface-detector.d.ts.map +1 -0
  172. package/dist/shared/interface-detector.js +133 -0
  173. package/dist/shared/interface-detector.js.map +1 -0
  174. package/dist/shared/interface-validator.d.ts +9 -0
  175. package/dist/shared/interface-validator.d.ts.map +1 -0
  176. package/dist/shared/interface-validator.js +152 -0
  177. package/dist/shared/interface-validator.js.map +1 -0
  178. package/dist/shared/metadata-detector.d.ts +65 -0
  179. package/dist/shared/metadata-detector.d.ts.map +1 -0
  180. package/dist/shared/metadata-detector.js +333 -0
  181. package/dist/shared/metadata-detector.js.map +1 -0
  182. package/dist/shared/path-utils.d.ts +2 -0
  183. package/dist/shared/path-utils.d.ts.map +1 -0
  184. package/dist/shared/path-utils.js +4 -0
  185. package/dist/shared/path-utils.js.map +1 -0
  186. package/dist/shared/program-factory.d.ts +14 -0
  187. package/dist/shared/program-factory.d.ts.map +1 -0
  188. package/dist/shared/program-factory.js +29 -0
  189. package/dist/shared/program-factory.js.map +1 -0
  190. package/dist/shared/source-location.d.ts +11 -0
  191. package/dist/shared/source-location.d.ts.map +1 -0
  192. package/dist/shared/source-location.js +15 -0
  193. package/dist/shared/source-location.js.map +1 -0
  194. package/dist/shared/tsconfig-loader.d.ts +13 -0
  195. package/dist/shared/tsconfig-loader.d.ts.map +1 -0
  196. package/dist/shared/tsconfig-loader.js +90 -0
  197. package/dist/shared/tsconfig-loader.js.map +1 -0
  198. package/dist/shared/tsdoc-parser.d.ts +12 -0
  199. package/dist/shared/tsdoc-parser.d.ts.map +1 -0
  200. package/dist/shared/tsdoc-parser.js +101 -0
  201. package/dist/shared/tsdoc-parser.js.map +1 -0
  202. package/dist/shared/type-converter.d.ts +3 -0
  203. package/dist/shared/type-converter.d.ts.map +1 -0
  204. package/dist/shared/type-converter.js +83 -0
  205. package/dist/shared/type-converter.js.map +1 -0
  206. package/dist/shared/typescript-utils.d.ts +82 -0
  207. package/dist/shared/typescript-utils.d.ts.map +1 -0
  208. package/dist/shared/typescript-utils.js +197 -0
  209. package/dist/shared/typescript-utils.js.map +1 -0
  210. package/dist/type-extractor/collector/result-collector.d.ts +7 -0
  211. package/dist/type-extractor/collector/result-collector.d.ts.map +1 -0
  212. package/dist/type-extractor/collector/result-collector.js +35 -0
  213. package/dist/type-extractor/collector/result-collector.js.map +1 -0
  214. package/dist/type-extractor/collector/scalar-collector.d.ts +108 -0
  215. package/dist/type-extractor/collector/scalar-collector.d.ts.map +1 -0
  216. package/dist/type-extractor/collector/scalar-collector.js +123 -0
  217. package/dist/type-extractor/collector/scalar-collector.js.map +1 -0
  218. package/dist/type-extractor/converter/field-eligibility.d.ts +34 -0
  219. package/dist/type-extractor/converter/field-eligibility.d.ts.map +1 -0
  220. package/dist/type-extractor/converter/field-eligibility.js +89 -0
  221. package/dist/type-extractor/converter/field-eligibility.js.map +1 -0
  222. package/dist/type-extractor/converter/graphql-converter.d.ts +7 -0
  223. package/dist/type-extractor/converter/graphql-converter.d.ts.map +1 -0
  224. package/dist/type-extractor/converter/graphql-converter.js +338 -0
  225. package/dist/type-extractor/converter/graphql-converter.js.map +1 -0
  226. package/dist/type-extractor/extract-types.d.ts +2 -0
  227. package/dist/type-extractor/extract-types.d.ts.map +1 -0
  228. package/dist/type-extractor/extract-types.js +2 -0
  229. package/dist/type-extractor/extract-types.js.map +1 -0
  230. package/dist/type-extractor/extractor/field-type-resolver.d.ts +28 -0
  231. package/dist/type-extractor/extractor/field-type-resolver.d.ts.map +1 -0
  232. package/dist/type-extractor/extractor/field-type-resolver.js +394 -0
  233. package/dist/type-extractor/extractor/field-type-resolver.js.map +1 -0
  234. package/dist/type-extractor/extractor/type-extractor.d.ts +36 -0
  235. package/dist/type-extractor/extractor/type-extractor.d.ts.map +1 -0
  236. package/dist/type-extractor/extractor/type-extractor.js +1082 -0
  237. package/dist/type-extractor/extractor/type-extractor.js.map +1 -0
  238. package/dist/type-extractor/extractor/type-name-collector.d.ts +24 -0
  239. package/dist/type-extractor/extractor/type-name-collector.d.ts.map +1 -0
  240. package/dist/type-extractor/extractor/type-name-collector.js +102 -0
  241. package/dist/type-extractor/extractor/type-name-collector.js.map +1 -0
  242. package/dist/type-extractor/index.d.ts +4 -0
  243. package/dist/type-extractor/index.d.ts.map +1 -0
  244. package/dist/type-extractor/index.js +2 -0
  245. package/dist/type-extractor/index.js.map +1 -0
  246. package/dist/type-extractor/mapper/scalar-base-type-mapper.d.ts +89 -0
  247. package/dist/type-extractor/mapper/scalar-base-type-mapper.d.ts.map +1 -0
  248. package/dist/type-extractor/mapper/scalar-base-type-mapper.js +158 -0
  249. package/dist/type-extractor/mapper/scalar-base-type-mapper.js.map +1 -0
  250. package/dist/type-extractor/types/diagnostics.d.ts +17 -0
  251. package/dist/type-extractor/types/diagnostics.d.ts.map +1 -0
  252. package/dist/type-extractor/types/diagnostics.js +2 -0
  253. package/dist/type-extractor/types/diagnostics.js.map +1 -0
  254. package/dist/type-extractor/types/graphql.d.ts +42 -0
  255. package/dist/type-extractor/types/graphql.d.ts.map +1 -0
  256. package/dist/type-extractor/types/graphql.js +2 -0
  257. package/dist/type-extractor/types/graphql.js.map +1 -0
  258. package/dist/type-extractor/types/index.d.ts +6 -0
  259. package/dist/type-extractor/types/index.d.ts.map +1 -0
  260. package/dist/type-extractor/types/index.js +2 -0
  261. package/dist/type-extractor/types/index.js.map +1 -0
  262. package/dist/type-extractor/types/ts-type-reference-factory.d.ts +39 -0
  263. package/dist/type-extractor/types/ts-type-reference-factory.d.ts.map +1 -0
  264. package/dist/type-extractor/types/ts-type-reference-factory.js +69 -0
  265. package/dist/type-extractor/types/ts-type-reference-factory.js.map +1 -0
  266. package/dist/type-extractor/types/typescript.d.ts +106 -0
  267. package/dist/type-extractor/types/typescript.d.ts.map +1 -0
  268. package/dist/type-extractor/types/typescript.js +2 -0
  269. package/dist/type-extractor/types/typescript.js.map +1 -0
  270. package/dist/type-extractor/validator/type-validator.d.ts +11 -0
  271. package/dist/type-extractor/validator/type-validator.d.ts.map +1 -0
  272. package/dist/type-extractor/validator/type-validator.js +53 -0
  273. package/dist/type-extractor/validator/type-validator.js.map +1 -0
  274. package/docs/configuration.md +163 -0
  275. package/docs/getting-started.md +117 -0
  276. package/docs/index.md +33 -0
  277. package/docs/integration/apollo.md +109 -0
  278. package/docs/integration/drizzle.md +191 -0
  279. package/docs/integration/yoga.md +108 -0
  280. package/docs/schema/abstract-resolvers.md +146 -0
  281. package/docs/schema/directives.md +196 -0
  282. package/docs/schema/documentation.md +176 -0
  283. package/docs/schema/enums.md +370 -0
  284. package/docs/schema/fields.md +186 -0
  285. package/docs/schema/index.md +38 -0
  286. package/docs/schema/inputs.md +279 -0
  287. package/docs/schema/interfaces.md +178 -0
  288. package/docs/schema/objects.md +188 -0
  289. package/docs/schema/queries-mutations.md +207 -0
  290. package/docs/schema/scalars.md +194 -0
  291. package/docs/schema/unions.md +90 -0
  292. package/docs/what-is-gqlkit.md +22 -0
  293. package/package.json +66 -7
  294. package/src/auto-type-generator/auto-type-generator.ts +925 -0
  295. package/src/auto-type-generator/index.ts +21 -0
  296. package/src/auto-type-generator/inline-enum-collector.ts +290 -0
  297. package/src/auto-type-generator/name-collision-validator.ts +119 -0
  298. package/src/auto-type-generator/naming-convention.ts +126 -0
  299. package/src/cli.ts +11 -0
  300. package/src/commands/gen.ts +141 -0
  301. package/src/commands/main.ts +5 -0
  302. package/src/config/define-config.ts +28 -0
  303. package/src/config/index.ts +7 -0
  304. package/src/config/types.ts +144 -0
  305. package/src/config-loader/index.ts +14 -0
  306. package/src/config-loader/loader.ts +143 -0
  307. package/src/config-loader/validator.ts +672 -0
  308. package/src/gen-orchestrator/hook-executor/hook-executor.ts +117 -0
  309. package/src/gen-orchestrator/orchestrator.ts +784 -0
  310. package/src/gen-orchestrator/reporter/diagnostic-reporter.ts +44 -0
  311. package/src/gen-orchestrator/reporter/progress-reporter.ts +61 -0
  312. package/src/gen-orchestrator/writer/file-writer.ts +38 -0
  313. package/src/index.ts +2 -0
  314. package/src/resolver-extractor/extract-resolvers.ts +63 -0
  315. package/src/resolver-extractor/extractor/define-api-extractor.ts +806 -0
  316. package/src/resolver-extractor/index.ts +19 -0
  317. package/src/resolver-extractor/validator/abstract-resolver-validator.ts +251 -0
  318. package/src/resolver-extractor/validator/only-validator.ts +158 -0
  319. package/src/schema-generator/builder/ast-builder.ts +706 -0
  320. package/src/schema-generator/emitter/code-emitter.ts +351 -0
  321. package/src/schema-generator/emitter/sdl-emitter.ts +13 -0
  322. package/src/schema-generator/generate-schema.ts +170 -0
  323. package/src/schema-generator/index.ts +19 -0
  324. package/src/schema-generator/integrator/result-integrator.ts +690 -0
  325. package/src/schema-generator/pruner/schema-pruner.ts +112 -0
  326. package/src/schema-generator/resolver-collector/resolver-collector.ts +123 -0
  327. package/src/shared/constants.ts +122 -0
  328. package/src/shared/default-value-detector.ts +172 -0
  329. package/src/shared/diagnostics.ts +35 -0
  330. package/src/shared/directive-definition-extractor.ts +564 -0
  331. package/src/shared/directive-detector.ts +556 -0
  332. package/src/shared/file-scanner.ts +170 -0
  333. package/src/shared/index.ts +32 -0
  334. package/src/shared/inline-object-extractor.ts +102 -0
  335. package/src/shared/inline-object-utils.ts +23 -0
  336. package/src/shared/interface-detector.ts +176 -0
  337. package/src/shared/interface-validator.ts +211 -0
  338. package/src/shared/metadata-detector.ts +443 -0
  339. package/src/shared/path-utils.ts +3 -0
  340. package/src/shared/program-factory.ts +51 -0
  341. package/src/shared/source-location.ts +27 -0
  342. package/src/shared/tsconfig-loader.ts +126 -0
  343. package/src/shared/tsdoc-parser.ts +155 -0
  344. package/src/shared/type-converter.ts +99 -0
  345. package/src/shared/typescript-utils.ts +246 -0
  346. package/src/type-extractor/collector/result-collector.ts +57 -0
  347. package/src/type-extractor/collector/scalar-collector.ts +254 -0
  348. package/src/type-extractor/converter/field-eligibility.ts +112 -0
  349. package/src/type-extractor/converter/graphql-converter.ts +459 -0
  350. package/src/type-extractor/extract-types.ts +1 -0
  351. package/src/type-extractor/extractor/field-type-resolver.ts +569 -0
  352. package/src/type-extractor/extractor/type-extractor.ts +1567 -0
  353. package/src/type-extractor/extractor/type-name-collector.ts +130 -0
  354. package/src/type-extractor/index.ts +20 -0
  355. package/src/type-extractor/mapper/scalar-base-type-mapper.ts +265 -0
  356. package/src/type-extractor/types/diagnostics.ts +99 -0
  357. package/src/type-extractor/types/graphql.ts +55 -0
  358. package/src/type-extractor/types/index.ts +37 -0
  359. package/src/type-extractor/types/ts-type-reference-factory.ts +137 -0
  360. package/src/type-extractor/types/typescript.ts +133 -0
  361. package/src/type-extractor/validator/type-validator.ts +77 -0
  362. package/README.md +0 -45
@@ -0,0 +1,370 @@
1
+ # Enum Types
2
+
3
+ gqlkit converts TypeScript string literal unions and enums to GraphQL enum types.
4
+
5
+ ## String Literal Unions
6
+
7
+ String literal unions are automatically converted to GraphQL enum types:
8
+
9
+ ```typescript
10
+ /**
11
+ * User account status
12
+ */
13
+ export type UserStatus = "ACTIVE" | "INACTIVE" | "PENDING";
14
+ ```
15
+
16
+ Generates:
17
+
18
+ ```graphql
19
+ """User account status"""
20
+ enum UserStatus {
21
+ ACTIVE
22
+ INACTIVE
23
+ PENDING
24
+ }
25
+ ```
26
+
27
+ ## TypeScript Enums
28
+
29
+ TypeScript string enums are also supported:
30
+
31
+ ```typescript
32
+ export enum UserStatus {
33
+ Active = "ACTIVE",
34
+ Inactive = "INACTIVE",
35
+ Pending = "PENDING",
36
+ }
37
+ ```
38
+
39
+ Generates:
40
+
41
+ ```graphql
42
+ enum UserStatus {
43
+ ACTIVE
44
+ INACTIVE
45
+ PENDING
46
+ }
47
+ ```
48
+
49
+ ## Deprecating Enum Values
50
+
51
+ Use the `@deprecated` JSDoc tag to mark enum values as deprecated:
52
+
53
+ ```typescript
54
+ export enum UserStatus {
55
+ Active = "ACTIVE",
56
+ /**
57
+ * @deprecated Use `Inactive` instead
58
+ */
59
+ Pending = "PENDING",
60
+ Inactive = "INACTIVE",
61
+ }
62
+ ```
63
+
64
+ For string literal unions, use a separate type with JSDoc:
65
+
66
+ ```typescript
67
+ /**
68
+ * User account status
69
+ */
70
+ export type UserStatus =
71
+ | "ACTIVE"
72
+ | /** @deprecated Use INACTIVE instead */ "PENDING"
73
+ | "INACTIVE";
74
+ ```
75
+
76
+ Generates:
77
+
78
+ ```graphql
79
+ enum UserStatus {
80
+ ACTIVE
81
+ PENDING @deprecated(reason: "Use INACTIVE instead")
82
+ INACTIVE
83
+ }
84
+ ```
85
+
86
+ ## Using Enums in Types
87
+
88
+ ```typescript
89
+ export type User = {
90
+ id: string;
91
+ name: string;
92
+ status: UserStatus;
93
+ };
94
+
95
+ export type UpdateUserInput = {
96
+ status: UserStatus | null;
97
+ };
98
+ ```
99
+
100
+ Generates:
101
+
102
+ ```graphql
103
+ type User {
104
+ id: String!
105
+ name: String!
106
+ status: UserStatus!
107
+ }
108
+
109
+ input UpdateUserInput {
110
+ status: UserStatus
111
+ }
112
+ ```
113
+
114
+ ## Inline Enums
115
+
116
+ When you define a string literal union or reference a TypeScript enum **inline** (without exporting it from the schema directory), gqlkit automatically generates a GraphQL enum type. This follows the same pattern as [inline objects](./objects.md#inline-objects).
117
+
118
+ ### Inline String Literal Unions
119
+
120
+ String literal unions used directly in field or argument types generate enum types automatically:
121
+
122
+ ```typescript
123
+ export type User = {
124
+ id: string;
125
+ name: string;
126
+ /** Current account status */
127
+ status: "active" | "inactive" | "pendingReview";
128
+ };
129
+ ```
130
+
131
+ Generates:
132
+
133
+ ```graphql
134
+ type User {
135
+ id: String!
136
+ name: String!
137
+ """Current account status"""
138
+ status: UserStatus!
139
+ }
140
+
141
+ enum UserStatus {
142
+ ACTIVE
143
+ INACTIVE
144
+ PENDING_REVIEW
145
+ }
146
+ ```
147
+
148
+ The generated enum type name follows the convention `{ParentTypeName}{PascalCaseFieldName}`.
149
+
150
+ ### External TypeScript Enums
151
+
152
+ TypeScript enums defined outside the schema directory are also automatically converted:
153
+
154
+ ```typescript
155
+ // src/types/order.ts (outside schema directory)
156
+ /**
157
+ * Order status in the system
158
+ */
159
+ export enum OrderStatus {
160
+ /** Order is pending payment */
161
+ Pending = "pending",
162
+ /** Order is being processed */
163
+ Processing = "processing",
164
+ /** Order has been shipped */
165
+ Shipped = "shipped",
166
+ }
167
+
168
+ // src/gqlkit/schema/order.ts
169
+ import { OrderStatus } from "../../types/order.js";
170
+
171
+ export type Order = {
172
+ id: string;
173
+ status: OrderStatus;
174
+ };
175
+ ```
176
+
177
+ Generates:
178
+
179
+ ```graphql
180
+ type Order {
181
+ id: String!
182
+ status: OrderStatus!
183
+ }
184
+
185
+ """Order status in the system"""
186
+ enum OrderStatus {
187
+ """Order is pending payment"""
188
+ PENDING
189
+ """Order is being processed"""
190
+ PROCESSING
191
+ """Order has been shipped"""
192
+ SHIPPED
193
+ }
194
+ ```
195
+
196
+ TSDoc comments on the enum and its values are preserved as GraphQL descriptions. The `@deprecated` tag is also supported.
197
+
198
+ When the same external TypeScript enum is referenced in multiple places, gqlkit generates a single GraphQL enum type and reuses it across all references.
199
+
200
+ ### Inline Enum Naming Convention
201
+
202
+ The naming convention for auto-generated enum types matches [inline objects](./objects.md#inline-objects):
203
+
204
+ | Context | Naming Pattern | Example |
205
+ |---------|----------------|---------|
206
+ | Object field | `{ParentTypeName}{PascalCaseFieldName}` | `User.status` → `UserStatus` |
207
+ | Input field | `{ParentTypeNameWithoutInputSuffix}{PascalCaseFieldName}Input` | `CreateUserInput.role` → `CreateUserRoleInput` |
208
+ | Query/Mutation argument | `{PascalCaseFieldName}{PascalCaseArgName}Input` | `searchUsers(status: ...)` → `SearchUsersStatusInput` |
209
+ | Field resolver argument | `{ParentTypeName}{PascalCaseFieldName}{PascalCaseArgName}Input` | `User.posts(filter: ...)` → `UserPostsFilterInput` |
210
+
211
+ ### Nullable Inline Enums
212
+
213
+ Nullable inline enums are supported:
214
+
215
+ ```typescript
216
+ export type User = {
217
+ id: string;
218
+ status: "active" | "inactive" | null;
219
+ };
220
+ ```
221
+
222
+ Generates:
223
+
224
+ ```graphql
225
+ type User {
226
+ id: String!
227
+ status: UserStatus
228
+ }
229
+
230
+ enum UserStatus {
231
+ ACTIVE
232
+ INACTIVE
233
+ }
234
+ ```
235
+
236
+ ### Arrays of Inline Enums
237
+
238
+ Inline enums in array types are also supported:
239
+
240
+ ```typescript
241
+ export type User = {
242
+ id: string;
243
+ roles: ("admin" | "editor" | "viewer")[];
244
+ };
245
+ ```
246
+
247
+ Generates:
248
+
249
+ ```graphql
250
+ type User {
251
+ id: String!
252
+ roles: [UserRoles!]!
253
+ }
254
+
255
+ enum UserRoles {
256
+ ADMIN
257
+ EDITOR
258
+ VIEWER
259
+ }
260
+ ```
261
+
262
+ ### When Enums Are NOT Auto-Generated
263
+
264
+ If you export a type from the schema directory, it is treated as an explicit type declaration and not auto-generated:
265
+
266
+ ```typescript
267
+ // Exported from schema - used as-is, not auto-generated
268
+ export type UserStatus = "active" | "inactive" | "pending";
269
+
270
+ export type User = {
271
+ id: string;
272
+ status: UserStatus; // References the exported type
273
+ };
274
+ ```
275
+
276
+ ## Automatic Case Conversion
277
+
278
+ gqlkit automatically converts enum values to `SCREAMING_SNAKE_CASE` format, which is the GraphQL convention:
279
+
280
+ ```typescript
281
+ export type UserStatus = "active" | "inProgress" | "pending_review" | "on-hold";
282
+ ```
283
+
284
+ Generates:
285
+
286
+ ```graphql
287
+ enum UserStatus {
288
+ ACTIVE
289
+ IN_PROGRESS
290
+ PENDING_REVIEW
291
+ ON_HOLD
292
+ }
293
+ ```
294
+
295
+ When conversion changes the original value, gqlkit generates resolver mappings to translate between GraphQL and TypeScript values:
296
+
297
+ ```typescript
298
+ // Generated resolvers.ts
299
+ export function createResolvers() {
300
+ return {
301
+ UserStatus: {
302
+ ACTIVE: "active",
303
+ IN_PROGRESS: "inProgress",
304
+ PENDING_REVIEW: "pending_review",
305
+ ON_HOLD: "on-hold",
306
+ },
307
+ };
308
+ }
309
+ ```
310
+
311
+ If values are already in `SCREAMING_SNAKE_CASE`, no resolver mapping is generated.
312
+
313
+ ### Duplicate Value Detection
314
+
315
+ If multiple TypeScript values convert to the same GraphQL enum value, gqlkit reports a `DUPLICATE_ENUM_VALUE_AFTER_CONVERSION` error:
316
+
317
+ ```typescript
318
+ // Error: 'activeUser' and 'active_user' both convert to ACTIVE_USER
319
+ export type Status = "activeUser" | "active_user" | "pending";
320
+ ```
321
+
322
+ ## Invalid Enum Values
323
+
324
+ Enum values that are not valid GraphQL identifiers are automatically skipped with a warning. gqlkit converts enum values to `SCREAMING_SNAKE_CASE`, and the converted name must:
325
+
326
+ - Match the pattern `/^[_A-Za-z][_0-9A-Za-z]*$/`
327
+ - Not start with `__` (reserved for GraphQL introspection)
328
+
329
+ ### String Literal Unions
330
+
331
+ ```typescript
332
+ export type Status =
333
+ | "active" // ✅ Converts to ACTIVE
334
+ | "inProgress" // ✅ Converts to IN_PROGRESS
335
+ | "0pending" // ⚠️ Skipped: converts to 0PENDING (starts with number)
336
+ | "__internal"; // ⚠️ Skipped: converts to __INTERNAL (starts with __)
337
+ ```
338
+
339
+ Generates:
340
+
341
+ ```graphql
342
+ enum Status {
343
+ ACTIVE
344
+ IN_PROGRESS
345
+ }
346
+ ```
347
+
348
+ ### TypeScript Enums
349
+
350
+ ```typescript
351
+ export enum Priority {
352
+ HIGH = "HIGH", // ✅ Valid
353
+ MEDIUM = "MEDIUM", // ✅ Valid
354
+ LOW = "LOW", // ✅ Valid
355
+ "0INVALID" = "0INVALID", // ⚠️ Skipped: starts with number
356
+ __RESERVED = "__RESERVED", // ⚠️ Skipped: starts with __
357
+ }
358
+ ```
359
+
360
+ Generates:
361
+
362
+ ```graphql
363
+ enum Priority {
364
+ HIGH
365
+ MEDIUM
366
+ LOW
367
+ }
368
+ ```
369
+
370
+ When enum values are skipped, gqlkit outputs a warning with the original name, converted name, and location.
@@ -0,0 +1,186 @@
1
+ # Field Resolvers
2
+
3
+ Add computed fields to object types using `defineField`. Define them alongside the type.
4
+
5
+ ## Basic Usage
6
+
7
+ ```typescript
8
+ // src/gqlkit/schema/user.ts
9
+ import { defineField } from "../gqlkit";
10
+ import type { IDString, NoArgs } from "@gqlkit-ts/runtime";
11
+ import type { Post } from "./post.js";
12
+
13
+ export type User = {
14
+ id: IDString;
15
+ name: string;
16
+ };
17
+
18
+ /** Get posts authored by this user */
19
+ export const posts = defineField<User, NoArgs, Post[]>(
20
+ (parent) => findPostsByAuthor(parent.id)
21
+ );
22
+
23
+ /** Get user's post count */
24
+ export const postCount = defineField<User, NoArgs, number>(
25
+ (parent) => countPostsByAuthor(parent.id)
26
+ );
27
+ ```
28
+
29
+ Generates:
30
+
31
+ ```graphql
32
+ type User {
33
+ id: ID!
34
+ name: String!
35
+ """Get posts authored by this user"""
36
+ posts: [Post!]!
37
+ """Get user's post count"""
38
+ postCount: Float!
39
+ }
40
+ ```
41
+
42
+ ## Resolver Function Signature
43
+
44
+ Field resolvers receive four arguments:
45
+
46
+ ```typescript
47
+ (parent, args, ctx, info) => ReturnType
48
+ ```
49
+
50
+ | Argument | Description |
51
+ |----------|-------------|
52
+ | `parent` | The parent object (typed via the first type parameter) |
53
+ | `args` | The arguments passed to the field |
54
+ | `ctx` | The context object (typed via `gqlkit.ts`) |
55
+ | `info` | GraphQL resolve info |
56
+
57
+ ## Type Parameters
58
+
59
+ `defineField<TParent, TArgs, TResult>`:
60
+
61
+ | Parameter | Description |
62
+ |-----------|-------------|
63
+ | `TParent` | The parent object type this field is defined on |
64
+ | `TArgs` | The arguments type (use `NoArgs` if no arguments) |
65
+ | `TResult` | The return type of the field |
66
+
67
+ ## Fields with Arguments
68
+
69
+ ```typescript
70
+ export const posts = defineField<
71
+ User,
72
+ { limit: number; offset: number },
73
+ Post[]
74
+ >((parent, args) => {
75
+ return findPostsByAuthor(parent.id, args.limit, args.offset);
76
+ });
77
+ ```
78
+
79
+ Generates:
80
+
81
+ ```graphql
82
+ type User {
83
+ posts(limit: Float!, offset: Float!): [Post!]!
84
+ }
85
+ ```
86
+
87
+ ## Inline Object Arguments
88
+
89
+ Field resolver arguments can use inline object literals. gqlkit automatically generates Input Object types with the naming convention `{ParentTypeName}{PascalCaseFieldName}{PascalCaseArgName}Input`:
90
+
91
+ ```typescript
92
+ import { defineField } from "../gqlkit";
93
+
94
+ export const posts = defineField<
95
+ User,
96
+ {
97
+ /** Filter options */
98
+ filter: {
99
+ titlePattern: string | null;
100
+ status: PostStatus | null;
101
+ } | null;
102
+ },
103
+ Post[]
104
+ >((parent, args) => []);
105
+ ```
106
+
107
+ Generates:
108
+
109
+ ```graphql
110
+ type User {
111
+ posts(
112
+ """Filter options"""
113
+ filter: UserPostsFilterInput
114
+ ): [Post!]!
115
+ }
116
+
117
+ input UserPostsFilterInput {
118
+ titlePattern: String
119
+ status: PostStatus
120
+ }
121
+ ```
122
+
123
+ Inline string literal unions and external TypeScript enums in arguments are also automatically converted to GraphQL enum types. See [Inline Enums](./enums.md#inline-enums) for details.
124
+
125
+ ## Default Values in Arguments
126
+
127
+ Default values in Input Objects are applied to resolver arguments:
128
+
129
+ ```typescript
130
+ import { defineQuery } from "../gqlkit";
131
+ import type { GqlField, Int } from "@gqlkit-ts/runtime";
132
+
133
+ export type PaginationInput = {
134
+ limit: GqlField<Int, { defaultValue: 10 }>;
135
+ offset: GqlField<Int, { defaultValue: 0 }>;
136
+ };
137
+
138
+ export type User = {
139
+ id: string;
140
+ name: string;
141
+ };
142
+
143
+ export const users = defineQuery<PaginationInput, User[]>(() => []);
144
+ ```
145
+
146
+ Generates:
147
+
148
+ ```graphql
149
+ type Query {
150
+ users(limit: Int! = 10, offset: Int! = 0): [User!]!
151
+ }
152
+ ```
153
+
154
+ ## Interface Field Resolvers
155
+
156
+ Add computed fields to interface types using `defineField`:
157
+
158
+ ```typescript
159
+ import { defineField } from "../gqlkit";
160
+ import type { NoArgs } from "@gqlkit-ts/runtime";
161
+ import type { Node } from "./node.js";
162
+
163
+ /** Get the typename of a Node */
164
+ export const __typename = defineField<Node, NoArgs, string>(
165
+ (parent) => parent.constructor.name
166
+ );
167
+ ```
168
+
169
+ ## Attaching Directives
170
+
171
+ Add a fourth type parameter to attach directives to field resolvers:
172
+
173
+ ```typescript
174
+ import { defineField } from "../gqlkit";
175
+ import type { NoArgs } from "@gqlkit-ts/runtime";
176
+ import { type AuthDirective } from "./directives.js";
177
+
178
+ export const email = defineField<
179
+ User,
180
+ NoArgs,
181
+ string,
182
+ [AuthDirective<{ role: ["ADMIN"] }>]
183
+ >((parent) => parent.email);
184
+ ```
185
+
186
+ See [Directives](./directives.md) for more details on defining and using custom directives.
@@ -0,0 +1,38 @@
1
+ # Schema Definition
2
+
3
+ gqlkit generates GraphQL schema from your TypeScript types. All exported types from `src/gqlkit/schema/` are automatically scanned and converted to GraphQL types.
4
+
5
+ ## Type Mapping
6
+
7
+ gqlkit maps TypeScript types to GraphQL types as follows:
8
+
9
+ | TypeScript | GraphQL |
10
+ |------------|---------|
11
+ | `string` | `String!` |
12
+ | `number` | `Float!` |
13
+ | `boolean` | `Boolean!` |
14
+ | `IDString`, `IDNumber` | `ID!` |
15
+ | `Int` (branded) | `Int!` |
16
+ | `Float` (branded) | `Float!` |
17
+ | `T \| null` | `T` (nullable) |
18
+ | `T[]` | `[T!]!` |
19
+ | String literal union | Enum type |
20
+ | TypeScript `enum` | Enum type |
21
+ | Union of object types | Union type |
22
+ | `*Input` suffix types | Input Object type |
23
+ | Union with `*Input` suffix | `@oneOf` input object |
24
+ | `GqlInterface<T>` | Interface type |
25
+ | `GqlScalar<Name, Base>` | Custom scalar |
26
+
27
+ ## Project Layout
28
+
29
+ Default project layout:
30
+
31
+ ```
32
+ src/
33
+ gqlkit/
34
+ schema/ # Types and resolvers co-located
35
+ __generated__/ # Generated files (auto-created)
36
+ ```
37
+
38
+ All TypeScript files (`.ts`, `.cts`, `.mts`) under `src/gqlkit/schema/` are scanned for types and resolvers.