@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,279 @@
1
+ # Input Types
2
+
3
+ TypeScript types with `Input` suffix are treated as GraphQL input types.
4
+
5
+ ## Basic Usage
6
+
7
+ ```typescript
8
+ /** Input for creating a new user */
9
+ export interface CreateUserInput {
10
+ name: string;
11
+ email: string | null;
12
+ }
13
+ ```
14
+
15
+ Generates:
16
+
17
+ ```graphql
18
+ """Input for creating a new user"""
19
+ input CreateUserInput {
20
+ name: String!
21
+ email: String
22
+ }
23
+ ```
24
+
25
+ ## Inline Objects
26
+
27
+ Input types can use inline object literals for nested structures. gqlkit automatically generates Input Object types with the naming convention `{ParentTypeNameWithoutInputSuffix}{PascalCaseFieldName}Input`:
28
+
29
+ ```typescript
30
+ import type { GqlField, Int } from "@gqlkit-ts/runtime";
31
+
32
+ export type CreateUserInput = {
33
+ name: string;
34
+ /** Profile information */
35
+ profile: {
36
+ bio: string | null;
37
+ /** User's age with default value */
38
+ age: GqlField<Int | null, { defaultValue: 18 }>;
39
+ };
40
+ };
41
+ ```
42
+
43
+ Generates:
44
+
45
+ ```graphql
46
+ input CreateUserInput {
47
+ name: String!
48
+ """Profile information"""
49
+ profile: CreateUserProfileInput!
50
+ }
51
+
52
+ input CreateUserProfileInput {
53
+ """User's age with default value"""
54
+ age: Int = 18
55
+ bio: String
56
+ }
57
+ ```
58
+
59
+ Nested inline objects generate types with concatenated names (e.g., `UserProfileInput.address` → `UserProfileAddressInput`).
60
+
61
+ Similarly, inline string literal unions and external TypeScript enums are automatically converted to GraphQL enum types. See [Inline Enums](./enums.md#inline-enums) for details.
62
+
63
+ ## @oneOf Input Objects
64
+
65
+ Union types with `Input` suffix using inline object literals generate `@oneOf` input objects. Each union member must be an inline object literal with exactly one property. Property values can be scalar types, enum types, or references to Input Object types:
66
+
67
+ ```typescript
68
+ /**
69
+ * Specifies how to identify a product.
70
+ * Exactly one field must be provided.
71
+ */
72
+ export type ProductInput =
73
+ | { id: string }
74
+ | { name: string }
75
+ | { location: LocationInput };
76
+ ```
77
+
78
+ Generates:
79
+
80
+ ```graphql
81
+ """
82
+ Specifies how to identify a product.
83
+ Exactly one field must be provided.
84
+ """
85
+ input ProductInput @oneOf {
86
+ id: String
87
+ location: LocationInput
88
+ name: String
89
+ }
90
+ ```
91
+
92
+ Each property becomes a nullable field in the generated input type. The `@oneOf` directive ensures exactly one field is provided at runtime.
93
+
94
+ ## Default Values
95
+
96
+ Specify default values for Input Object fields using `GqlField` with the `defaultValue` option.
97
+
98
+ ### Basic Default Values
99
+
100
+ ```typescript
101
+ import { type GqlField, type Int } from "@gqlkit-ts/runtime";
102
+
103
+ export type PaginationInput = {
104
+ limit: GqlField<Int, { defaultValue: 10 }>;
105
+ offset: GqlField<Int, { defaultValue: 0 }>;
106
+ includeArchived: GqlField<boolean, { defaultValue: false }>;
107
+ };
108
+
109
+ export type SearchInput = {
110
+ query: string;
111
+ caseSensitive: GqlField<boolean, { defaultValue: true }>;
112
+ maxResults: GqlField<Int | null, { defaultValue: null }>;
113
+ };
114
+
115
+ export type GreetingInput = {
116
+ name: GqlField<string, { defaultValue: "World" }>;
117
+ prefix: GqlField<string, { defaultValue: "Hello" }>;
118
+ };
119
+ ```
120
+
121
+ Generates:
122
+
123
+ ```graphql
124
+ input PaginationInput {
125
+ limit: Int! = 10
126
+ offset: Int! = 0
127
+ includeArchived: Boolean! = false
128
+ }
129
+
130
+ input SearchInput {
131
+ query: String!
132
+ caseSensitive: Boolean! = true
133
+ maxResults: Int = null
134
+ }
135
+
136
+ input GreetingInput {
137
+ name: String! = "World"
138
+ prefix: String! = "Hello"
139
+ }
140
+ ```
141
+
142
+ ### Complex Default Values
143
+
144
+ Default values support arrays, objects, and enum values:
145
+
146
+ ```typescript
147
+ export type Status = "ACTIVE" | "INACTIVE" | "PENDING";
148
+
149
+ export type Priority = "LOW" | "MEDIUM" | "HIGH";
150
+
151
+ export type NestedConfig = {
152
+ enabled: boolean;
153
+ value: Int;
154
+ };
155
+
156
+ export type FilterInput = {
157
+ status: GqlField<Status, { defaultValue: "ACTIVE" }>;
158
+ priorities: GqlField<Priority[], { defaultValue: ["MEDIUM", "HIGH"] }>;
159
+ tags: GqlField<string[], { defaultValue: ["default"] }>;
160
+ };
161
+
162
+ export type SettingsInput = {
163
+ config: GqlField<NestedConfig, { defaultValue: { enabled: true; value: 100 } }>;
164
+ limits: GqlField<Int[], { defaultValue: [10, 20, 30] }>;
165
+ };
166
+ ```
167
+
168
+ Generates:
169
+
170
+ ```graphql
171
+ input FilterInput {
172
+ status: Status! = ACTIVE
173
+ priorities: [Priority!]! = [MEDIUM, HIGH]
174
+ tags: [String!]! = ["default"]
175
+ }
176
+
177
+ input SettingsInput {
178
+ config: NestedConfig! = {enabled: true, value: 100}
179
+ limits: [Int!]! = [10, 20, 30]
180
+ }
181
+ ```
182
+
183
+ ### Default Values with Directives
184
+
185
+ You can combine `defaultValue` with `directives`:
186
+
187
+ ```typescript
188
+ import { type GqlField, type GqlDirective, type Int } from "@gqlkit-ts/runtime";
189
+
190
+ export type LengthDirective<TArgs extends { min: number; max: number }> =
191
+ GqlDirective<"length", TArgs, "INPUT_FIELD_DEFINITION" | "ARGUMENT_DEFINITION">;
192
+
193
+ export type RangeDirective<TArgs extends { min: number; max: number }> =
194
+ GqlDirective<"range", TArgs, "INPUT_FIELD_DEFINITION" | "ARGUMENT_DEFINITION">;
195
+
196
+ export type CreateUserInput = {
197
+ name: GqlField<string, {
198
+ defaultValue: "Anonymous";
199
+ directives: [LengthDirective<{ min: 1; max: 100 }>];
200
+ }>;
201
+ age: GqlField<Int, {
202
+ defaultValue: 18;
203
+ directives: [RangeDirective<{ min: 0; max: 150 }>];
204
+ }>;
205
+ email: GqlField<string | null, {
206
+ defaultValue: null;
207
+ directives: [LengthDirective<{ min: 5; max: 255 }>];
208
+ }>;
209
+ };
210
+ ```
211
+
212
+ Generates:
213
+
214
+ ```graphql
215
+ input CreateUserInput {
216
+ name: String! = "Anonymous" @length(min: 1, max: 100)
217
+ age: Int! = 18 @range(min: 0, max: 150)
218
+ email: String = null @length(min: 5, max: 255)
219
+ }
220
+ ```
221
+
222
+ ### Supported Default Value Types
223
+
224
+ | Value type | Example | GraphQL output |
225
+ |------------|---------|----------------|
226
+ | String | `"hello"` | `"hello"` |
227
+ | Number (Int) | `10` | `10` |
228
+ | Number (Float) | `3.14` | `3.14` |
229
+ | Boolean | `true`, `false` | `true`, `false` |
230
+ | Null | `null` | `null` |
231
+ | Array | `[1, 2, 3]` | `[1, 2, 3]` |
232
+ | Object | `{ key: "value" }` | `{key: "value"}` |
233
+ | Enum | `"ACTIVE"` (when field type is enum) | `ACTIVE` |
234
+
235
+ ### Literal Types Required
236
+
237
+ Default values must be specified as TypeScript literal types. Non-literal types will cause a warning:
238
+
239
+ ```typescript
240
+ // ✅ OK: Literal types
241
+ export type GoodInput = {
242
+ limit: GqlField<Int, { defaultValue: 10 }>;
243
+ name: GqlField<string, { defaultValue: "default" }>;
244
+ };
245
+
246
+ // ❌ Error: Non-literal types
247
+ export type BadInput = {
248
+ limit: GqlField<Int, { defaultValue: number }>; // Warning: must be literal
249
+ name: GqlField<string, { defaultValue: string }>; // Warning: must be literal
250
+ };
251
+ ```
252
+
253
+ ## Invalid Field Names
254
+
255
+ Input field names that are not valid GraphQL identifiers are automatically skipped with a warning. Valid GraphQL names must:
256
+
257
+ - Match the pattern `/^[_A-Za-z][_0-9A-Za-z]*$/`
258
+ - Not start with `__` (reserved for GraphQL introspection)
259
+
260
+ ```typescript
261
+ export type CreateUserInput = {
262
+ name: string; // ✅ Valid
263
+ _metadata: string; // ✅ Valid (single underscore is OK)
264
+ "123abc": string; // ⚠️ Skipped: starts with a number
265
+ __private: string; // ⚠️ Skipped: starts with __
266
+ "hyphen-field": string; // ⚠️ Skipped: contains hyphen
267
+ };
268
+ ```
269
+
270
+ Generates (invalid fields are skipped):
271
+
272
+ ```graphql
273
+ input CreateUserInput {
274
+ name: String!
275
+ _metadata: String!
276
+ }
277
+ ```
278
+
279
+ When fields are skipped, gqlkit outputs a warning with the field name and location.
@@ -0,0 +1,178 @@
1
+ # Interface Types
2
+
3
+ Define GraphQL interface types using the `GqlInterface` utility type.
4
+
5
+ ## Basic Usage
6
+
7
+ ```typescript
8
+ // src/gqlkit/schema/node.ts
9
+ import { type GqlInterface, type IDString } from "@gqlkit-ts/runtime";
10
+ import type { DateTime } from "./scalars.js";
11
+
12
+ /**
13
+ * Node interface - represents any entity with a unique identifier.
14
+ */
15
+ export type Node = GqlInterface<{
16
+ /** Global unique identifier */
17
+ id: IDString;
18
+ }>;
19
+
20
+ /**
21
+ * Timestamped interface - entities that track creation time.
22
+ */
23
+ export type Timestamped = GqlInterface<{
24
+ createdAt: DateTime;
25
+ }>;
26
+ ```
27
+
28
+ Generates:
29
+
30
+ ```graphql
31
+ """Node interface - represents any entity with a unique identifier."""
32
+ interface Node {
33
+ """Global unique identifier"""
34
+ id: ID!
35
+ }
36
+
37
+ """Timestamped interface - entities that track creation time."""
38
+ interface Timestamped {
39
+ createdAt: DateTime!
40
+ }
41
+ ```
42
+
43
+ ## GqlInterface Type Parameters
44
+
45
+ `GqlInterface<T, Meta?>`:
46
+
47
+ | Parameter | Description |
48
+ |-----------|-------------|
49
+ | `T` | The interface fields definition |
50
+ | `Meta` | Optional: `{ implements: [...] }` for interface inheritance |
51
+
52
+ ## Interface Inheritance
53
+
54
+ Interfaces can extend other interfaces:
55
+
56
+ ```typescript
57
+ /**
58
+ * Entity interface - combines Node and Timestamped.
59
+ */
60
+ export type Entity = GqlInterface<
61
+ {
62
+ id: IDString;
63
+ createdAt: DateTime;
64
+ },
65
+ { implements: [Node, Timestamped] }
66
+ >;
67
+ ```
68
+
69
+ Generates:
70
+
71
+ ```graphql
72
+ """Entity interface - combines Node and Timestamped."""
73
+ interface Entity implements Node & Timestamped {
74
+ id: ID!
75
+ createdAt: DateTime!
76
+ }
77
+ ```
78
+
79
+ ## Implementing Interfaces
80
+
81
+ Use `GqlObject` with the `implements` option to declare that a type implements interfaces:
82
+
83
+ ```typescript
84
+ import { type GqlObject, type IDString } from "@gqlkit-ts/runtime";
85
+ import type { Node, Timestamped } from "./node.js";
86
+ import type { DateTime } from "./scalars.js";
87
+
88
+ /**
89
+ * A user in the system.
90
+ */
91
+ export type User = GqlObject<
92
+ {
93
+ id: IDString;
94
+ name: string;
95
+ email: string | null;
96
+ createdAt: DateTime;
97
+ },
98
+ { implements: [Node, Timestamped] }
99
+ >;
100
+ ```
101
+
102
+ Generates:
103
+
104
+ ```graphql
105
+ """A user in the system."""
106
+ type User implements Node & Timestamped {
107
+ id: ID!
108
+ name: String!
109
+ email: String
110
+ createdAt: DateTime!
111
+ }
112
+ ```
113
+
114
+ ## Combining with Directives
115
+
116
+ You can combine `implements` with `directives`:
117
+
118
+ ```typescript
119
+ import { type GqlObject, type IDString } from "@gqlkit-ts/runtime";
120
+ import type { Node, Timestamped } from "./node.js";
121
+ import type { DateTime } from "./scalars.js";
122
+ import type { CacheDirective } from "./directives.js";
123
+
124
+ export type Post = GqlObject<
125
+ {
126
+ id: IDString;
127
+ title: string;
128
+ createdAt: DateTime;
129
+ },
130
+ {
131
+ implements: [Node, Timestamped],
132
+ directives: [CacheDirective<{ maxAge: 60 }>]
133
+ }
134
+ >;
135
+ ```
136
+
137
+ Generates:
138
+
139
+ ```graphql
140
+ type Post @cache(maxAge: 60) implements Node & Timestamped {
141
+ id: ID!
142
+ title: String!
143
+ createdAt: DateTime!
144
+ }
145
+ ```
146
+
147
+ ## Interface Field Resolvers
148
+
149
+ Add computed fields to interface types using `defineField`:
150
+
151
+ ```typescript
152
+ import { defineField } from "../gqlkit";
153
+ import type { NoArgs } from "@gqlkit-ts/runtime";
154
+ import type { Node } from "./node.js";
155
+
156
+ /** Get the typename of a Node */
157
+ export const __typename = defineField<Node, NoArgs, string>(
158
+ (parent) => parent.constructor.name
159
+ );
160
+ ```
161
+
162
+ See [Object Types](./objects.md) for more details on implementing interfaces.
163
+
164
+ ## Runtime Type Resolution
165
+
166
+ When GraphQL executes a query that returns an interface type, it needs to determine the concrete type at runtime. You can use either `defineResolveType` on the interface or `defineIsTypeOf` on each implementing type.
167
+
168
+ ```typescript
169
+ import { defineResolveType } from "../gqlkit";
170
+
171
+ export const nodeResolveType = defineResolveType<Node>((value) => {
172
+ if ("name" in value) return "User";
173
+ if ("title" in value) return "Post";
174
+ throw new Error("Unknown Node type");
175
+ });
176
+ ```
177
+
178
+ See [Abstract Type Resolution](./abstract-resolvers.md) for complete documentation.
@@ -0,0 +1,188 @@
1
+ # Object Types
2
+
3
+ Plain TypeScript type exports become GraphQL Object types.
4
+
5
+ ## Basic Usage
6
+
7
+ Export a TypeScript type or interface:
8
+
9
+ ```typescript
10
+ // src/gqlkit/schema/user.ts
11
+ import { defineQuery, defineField } from "../gqlkit";
12
+ import type { IDString, Int, NoArgs } from "@gqlkit-ts/runtime";
13
+
14
+ /**
15
+ * A user in the system
16
+ */
17
+ export type User = {
18
+ /** Unique identifier */
19
+ id: IDString;
20
+ /** Display name */
21
+ name: string;
22
+ /** Age in years */
23
+ age: Int;
24
+ /** Email address (null if not verified) */
25
+ email: string | null;
26
+ };
27
+
28
+ export const me = defineQuery<NoArgs, User | null>((_root, _args, ctx) => {
29
+ return findUserById(ctx.currentUserId);
30
+ });
31
+
32
+ /** Get user's profile URL */
33
+ export const profileUrl = defineField<User, NoArgs, string>((parent) => {
34
+ return `https://example.com/users/${parent.id}`;
35
+ });
36
+ ```
37
+
38
+ ## Nullability
39
+
40
+ Use union with `null` to make fields nullable:
41
+
42
+ ```typescript
43
+ export type User = {
44
+ email: string | null; // nullable
45
+ name: string; // non-null
46
+ };
47
+ ```
48
+
49
+ Generates:
50
+
51
+ ```graphql
52
+ type User {
53
+ email: String
54
+ name: String!
55
+ }
56
+ ```
57
+
58
+ ## Arrays
59
+
60
+ Arrays are automatically converted to GraphQL lists:
61
+
62
+ ```typescript
63
+ export type User = {
64
+ tags: string[]; // [String!]!
65
+ posts: Post[] | null; // [Post!]
66
+ };
67
+ ```
68
+
69
+ ## Inline Objects
70
+
71
+ Object type fields can use inline object literals for nested structures. gqlkit automatically generates Object types with the naming convention `{ParentTypeName}{PascalCaseFieldName}`:
72
+
73
+ ```typescript
74
+ export type User = {
75
+ id: string;
76
+ name: string;
77
+ /** User's profile information */
78
+ profile: {
79
+ /** User's biography */
80
+ bio: string;
81
+ age: number;
82
+ };
83
+ };
84
+ ```
85
+
86
+ Generates:
87
+
88
+ ```graphql
89
+ type User {
90
+ id: String!
91
+ name: String!
92
+ """User's profile information"""
93
+ profile: UserProfile!
94
+ }
95
+
96
+ type UserProfile {
97
+ """User's biography"""
98
+ bio: String!
99
+ age: Float!
100
+ }
101
+ ```
102
+
103
+ Nested inline objects generate types with concatenated names (e.g., `User.profile.address` → `UserProfileAddress`).
104
+
105
+ Similarly, inline string literal unions and external TypeScript enums are automatically converted to GraphQL enum types. See [Inline Enums](./enums.md#inline-enums) for details.
106
+
107
+ ## Implementing Interfaces
108
+
109
+ Use `GqlObject` with the `implements` option to declare that a type implements interfaces:
110
+
111
+ ```typescript
112
+ import { type GqlObject, type IDString } from "@gqlkit-ts/runtime";
113
+ import type { Node, Timestamped } from "./node.js";
114
+ import type { DateTime } from "./scalars.js";
115
+
116
+ /**
117
+ * A user in the system.
118
+ */
119
+ export type User = GqlObject<
120
+ {
121
+ id: IDString;
122
+ name: string;
123
+ email: string | null;
124
+ createdAt: DateTime;
125
+ },
126
+ { implements: [Node, Timestamped] }
127
+ >;
128
+ ```
129
+
130
+ Generates:
131
+
132
+ ```graphql
133
+ """A user in the system."""
134
+ type User implements Node & Timestamped {
135
+ id: ID!
136
+ name: String!
137
+ email: String
138
+ createdAt: DateTime!
139
+ }
140
+ ```
141
+
142
+ You can combine `implements` with `directives`:
143
+
144
+ ```typescript
145
+ export type Post = GqlObject<
146
+ {
147
+ id: IDString;
148
+ title: string;
149
+ createdAt: DateTime;
150
+ },
151
+ {
152
+ implements: [Node, Timestamped],
153
+ directives: [CacheDirective<{ maxAge: 60 }>]
154
+ }
155
+ >;
156
+ ```
157
+
158
+ See [Interfaces](./interfaces.md) for more details on defining interface types.
159
+
160
+ ## Invalid Field Names
161
+
162
+ Field names that are not valid GraphQL identifiers are automatically skipped with a warning. Valid GraphQL names must:
163
+
164
+ - Match the pattern `/^[_A-Za-z][_0-9A-Za-z]*$/`
165
+ - Not start with `__` (reserved for GraphQL introspection)
166
+
167
+ ```typescript
168
+ export type User = {
169
+ id: string; // ✅ Valid
170
+ userName: string; // ✅ Valid
171
+ _internal: string; // ✅ Valid (single underscore is OK)
172
+ "0invalid": string; // ⚠️ Skipped: starts with a number
173
+ __reserved: string; // ⚠️ Skipped: starts with __
174
+ "field-name": string; // ⚠️ Skipped: contains hyphen
175
+ };
176
+ ```
177
+
178
+ Generates (invalid fields are skipped):
179
+
180
+ ```graphql
181
+ type User {
182
+ id: String!
183
+ userName: String!
184
+ _internal: String!
185
+ }
186
+ ```
187
+
188
+ When fields are skipped, gqlkit outputs a warning with the field name and location.