@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,351 @@
1
+ import path from "node:path";
2
+ import { toPosixPath } from "../../shared/index.js";
3
+ import type { CollectedScalarType } from "../../type-extractor/collector/scalar-collector.js";
4
+ import {
5
+ type BuildDocumentOptions,
6
+ buildDocumentNode,
7
+ } from "../builder/ast-builder.js";
8
+ import type {
9
+ IntegratedResult,
10
+ NumericEnumInfo,
11
+ StringEnumMappingInfo,
12
+ } from "../integrator/result-integrator.js";
13
+ import type {
14
+ AbstractTypeResolverInfo,
15
+ ResolverInfo,
16
+ TypeResolvers,
17
+ } from "../resolver-collector/resolver-collector.js";
18
+
19
+ const GENERATED_FILE_HEADER =
20
+ "// This file is auto-generated by gqlkit. DO NOT EDIT.";
21
+
22
+ function formatDocumentNodeAsCode(
23
+ integratedResult: IntegratedResult,
24
+ options?: BuildDocumentOptions,
25
+ ): string {
26
+ const doc = buildDocumentNode(integratedResult, options);
27
+
28
+ return JSON.stringify(doc, null, 2);
29
+ }
30
+
31
+ export function emitTypeDefsCode(
32
+ integratedResult: IntegratedResult,
33
+ options?: BuildDocumentOptions,
34
+ ): string {
35
+ const documentNodeCode = formatDocumentNodeAsCode(integratedResult, options);
36
+
37
+ return `${GENERATED_FILE_HEADER}
38
+
39
+ import type { DocumentNode } from "graphql";
40
+
41
+ export const typeDefs: DocumentNode = ${documentNodeCode} as DocumentNode;
42
+ `;
43
+ }
44
+
45
+ function computeRelativeImportPath(fromDir: string, toFile: string): string {
46
+ const relativePath = toPosixPath(path.relative(fromDir, toFile));
47
+ const withoutExt = relativePath.replace(/\.ts$/, ".js");
48
+ if (!withoutExt.startsWith(".")) {
49
+ return `./${withoutExt}`;
50
+ }
51
+ return withoutExt;
52
+ }
53
+
54
+ interface ScalarTypeImport {
55
+ readonly typeName: string;
56
+ readonly sourceFile: string;
57
+ }
58
+
59
+ function collectScalarTypeImports(
60
+ customScalars: ReadonlyArray<CollectedScalarType>,
61
+ ): ScalarTypeImport[] {
62
+ const imports: ScalarTypeImport[] = [];
63
+ const seen = new Set<string>();
64
+
65
+ for (const scalar of customScalars) {
66
+ if (
67
+ scalar.inputType &&
68
+ scalar.inputType.sourceFile !== "" &&
69
+ !seen.has(scalar.inputType.typeName)
70
+ ) {
71
+ imports.push({
72
+ typeName: scalar.inputType.typeName,
73
+ sourceFile: scalar.inputType.sourceFile,
74
+ });
75
+ seen.add(scalar.inputType.typeName);
76
+ }
77
+
78
+ for (const outputType of scalar.outputTypes) {
79
+ if (outputType.sourceFile !== "" && !seen.has(outputType.typeName)) {
80
+ imports.push({
81
+ typeName: outputType.typeName,
82
+ sourceFile: outputType.sourceFile,
83
+ });
84
+ seen.add(outputType.typeName);
85
+ }
86
+ }
87
+ }
88
+
89
+ return imports;
90
+ }
91
+
92
+ function buildScalarTypeImports(
93
+ scalarTypeImports: ScalarTypeImport[],
94
+ outputDir: string,
95
+ ): string[] {
96
+ const importsByFile = new Map<string, string[]>();
97
+
98
+ for (const imp of scalarTypeImports) {
99
+ const existing = importsByFile.get(imp.sourceFile) ?? [];
100
+ existing.push(imp.typeName);
101
+ importsByFile.set(imp.sourceFile, existing);
102
+ }
103
+
104
+ const imports: string[] = [];
105
+ const sortedFiles = [...importsByFile.keys()].sort();
106
+
107
+ for (const sourceFile of sortedFiles) {
108
+ const typeNames = importsByFile.get(sourceFile) ?? [];
109
+ const importPath = computeRelativeImportPath(outputDir, sourceFile);
110
+ imports.push(
111
+ `import type { ${typeNames.sort().join(", ")} } from "${importPath}";`,
112
+ );
113
+ }
114
+
115
+ return imports;
116
+ }
117
+
118
+ function buildScalarTypeParameter(scalar: CollectedScalarType): string {
119
+ const inputTypeName = scalar.inputType?.typeName ?? "unknown";
120
+ const outputTypeNames = scalar.outputTypes.map((t) => t.typeName);
121
+ const outputTypeUnion =
122
+ outputTypeNames.length > 0 ? outputTypeNames.join(" | ") : "unknown";
123
+ return `GraphQLScalarType<${inputTypeName}, ${outputTypeUnion}>`;
124
+ }
125
+
126
+ function buildScalarsArgumentType(
127
+ customScalars: ReadonlyArray<CollectedScalarType>,
128
+ ): string {
129
+ const entries = customScalars
130
+ .map((scalar) => {
131
+ const typeParam = buildScalarTypeParameter(scalar);
132
+ return ` ${scalar.scalarName}: ${typeParam};`;
133
+ })
134
+ .join("\n");
135
+
136
+ return `{\n scalars: {\n${entries}\n };\n}`;
137
+ }
138
+
139
+ function buildScalarResolverEntries(
140
+ customScalars: ReadonlyArray<CollectedScalarType>,
141
+ ): string[] {
142
+ return customScalars.map(
143
+ (scalar) => ` ${scalar.scalarName}: scalars.${scalar.scalarName},`,
144
+ );
145
+ }
146
+
147
+ function collectResolverImportsByFile(
148
+ resolverInfo: ResolverInfo,
149
+ ): Map<string, Set<string>> {
150
+ const importsByFile = new Map<string, Set<string>>();
151
+
152
+ for (const type of resolverInfo.types) {
153
+ for (const field of type.fields) {
154
+ const existing = importsByFile.get(field.sourceFile) ?? new Set<string>();
155
+ existing.add(field.resolverValueName);
156
+ importsByFile.set(field.sourceFile, existing);
157
+ }
158
+ }
159
+
160
+ for (const abstractResolver of resolverInfo.abstractTypeResolvers) {
161
+ const existing =
162
+ importsByFile.get(abstractResolver.sourceFile) ?? new Set<string>();
163
+ existing.add(abstractResolver.exportName);
164
+ importsByFile.set(abstractResolver.sourceFile, existing);
165
+ }
166
+
167
+ return importsByFile;
168
+ }
169
+
170
+ function buildResolverImports(
171
+ importsByFile: Map<string, Set<string>>,
172
+ outputDir: string,
173
+ ): string[] {
174
+ const imports: string[] = [];
175
+ const sortedFiles = [...importsByFile.keys()].sort();
176
+
177
+ for (const sourceFile of sortedFiles) {
178
+ const valueNames = importsByFile.get(sourceFile) ?? new Set<string>();
179
+ const importPath = computeRelativeImportPath(outputDir, sourceFile);
180
+ const sortedValues = [...valueNames].sort();
181
+
182
+ if (sortedValues.length > 0) {
183
+ imports.push(
184
+ `import { ${sortedValues.join(", ")} } from "${importPath}";`,
185
+ );
186
+ }
187
+ }
188
+
189
+ return imports;
190
+ }
191
+
192
+ function buildAbstractOnlyTypeEntry(
193
+ abstractResolver: AbstractTypeResolverInfo,
194
+ ): string {
195
+ return ` ${abstractResolver.typeName}: {\n ${abstractResolver.resolverKey}: ${abstractResolver.exportName},\n },`;
196
+ }
197
+
198
+ function buildNumericEnumResolver(enumInfo: NumericEnumInfo): string {
199
+ const entries = enumInfo.members
200
+ .map((member) => ` ${member.name}: ${member.numericValue},`)
201
+ .join("\n");
202
+ return ` ${enumInfo.enumName}: {\n${entries}\n },`;
203
+ }
204
+
205
+ function buildNumericEnumResolvers(
206
+ numericEnums: ReadonlyArray<NumericEnumInfo>,
207
+ ): string[] {
208
+ return numericEnums.map(buildNumericEnumResolver);
209
+ }
210
+
211
+ function buildStringEnumResolver(enumInfo: StringEnumMappingInfo): string {
212
+ const entries = enumInfo.members
213
+ .map(
214
+ (member) => ` ${member.graphqlValue}: "${member.typescriptValue}",`,
215
+ )
216
+ .join("\n");
217
+ return ` ${enumInfo.enumName}: {\n${entries}\n },`;
218
+ }
219
+
220
+ function buildStringEnumResolvers(
221
+ stringEnumMappings: ReadonlyArray<StringEnumMappingInfo>,
222
+ ): string[] {
223
+ return stringEnumMappings.map(buildStringEnumResolver);
224
+ }
225
+
226
+ function buildTypeResolverEntry(
227
+ type: TypeResolvers,
228
+ abstractResolverForType: AbstractTypeResolverInfo | null,
229
+ ): string {
230
+ const entries: string[] = [];
231
+
232
+ for (const field of type.fields) {
233
+ if (field.isDirectExport) {
234
+ entries.push(` ${field.fieldName}: ${field.resolverValueName},`);
235
+ } else {
236
+ entries.push(
237
+ ` ${field.fieldName}: ${field.resolverValueName}.${field.fieldName},`,
238
+ );
239
+ }
240
+ }
241
+
242
+ if (abstractResolverForType !== null) {
243
+ entries.push(
244
+ ` ${abstractResolverForType.resolverKey}: ${abstractResolverForType.exportName},`,
245
+ );
246
+ }
247
+
248
+ return ` ${type.typeName}: {\n${entries.join("\n")}\n },`;
249
+ }
250
+
251
+ function buildTypeEntries(
252
+ resolverInfo: ResolverInfo,
253
+ customScalars: ReadonlyArray<CollectedScalarType>,
254
+ ): string[] {
255
+ const typeEntries: string[] = [];
256
+ const hasCustomScalars = customScalars.length > 0;
257
+
258
+ if (hasCustomScalars) {
259
+ typeEntries.push(...buildScalarResolverEntries(customScalars));
260
+ }
261
+
262
+ const typesWithFields = new Map<string, TypeResolvers>();
263
+ for (const type of resolverInfo.types) {
264
+ typesWithFields.set(type.typeName, type);
265
+ }
266
+
267
+ const abstractResolversByType = new Map<string, AbstractTypeResolverInfo>();
268
+ for (const abstractResolver of resolverInfo.abstractTypeResolvers) {
269
+ abstractResolversByType.set(abstractResolver.typeName, abstractResolver);
270
+ }
271
+
272
+ const allTypeNames = new Set<string>([
273
+ ...typesWithFields.keys(),
274
+ ...abstractResolversByType.keys(),
275
+ ]);
276
+ const sortedTypeNames = [...allTypeNames].sort();
277
+
278
+ for (const typeName of sortedTypeNames) {
279
+ const typeWithFields = typesWithFields.get(typeName);
280
+ const abstractResolver = abstractResolversByType.get(typeName) ?? null;
281
+
282
+ if (typeWithFields !== undefined) {
283
+ typeEntries.push(
284
+ buildTypeResolverEntry(typeWithFields, abstractResolver),
285
+ );
286
+ } else if (abstractResolver !== null) {
287
+ typeEntries.push(buildAbstractOnlyTypeEntry(abstractResolver));
288
+ }
289
+ }
290
+
291
+ return typeEntries;
292
+ }
293
+
294
+ interface EmitResolversCodeParams {
295
+ readonly resolverInfo: ResolverInfo;
296
+ readonly outputDir: string;
297
+ readonly customScalars: ReadonlyArray<CollectedScalarType>;
298
+ readonly numericEnums: ReadonlyArray<NumericEnumInfo>;
299
+ readonly stringEnumMappings: ReadonlyArray<StringEnumMappingInfo>;
300
+ }
301
+
302
+ export function emitResolversCode(params: EmitResolversCodeParams): string {
303
+ const {
304
+ resolverInfo,
305
+ outputDir,
306
+ customScalars,
307
+ numericEnums,
308
+ stringEnumMappings,
309
+ } = params;
310
+ const hasCustomScalars = customScalars.length > 0;
311
+ const imports: string[] = [];
312
+
313
+ if (hasCustomScalars) {
314
+ imports.push('import { GraphQLScalarType } from "graphql";');
315
+ }
316
+
317
+ const importsByFile = collectResolverImportsByFile(resolverInfo);
318
+ imports.push(...buildResolverImports(importsByFile, outputDir));
319
+
320
+ if (hasCustomScalars) {
321
+ const scalarTypeImports = collectScalarTypeImports(customScalars);
322
+ const scalarImports = buildScalarTypeImports(scalarTypeImports, outputDir);
323
+ imports.push(...scalarImports);
324
+ }
325
+
326
+ const numericEnumResolverEntries = buildNumericEnumResolvers(numericEnums);
327
+ const stringEnumResolverEntries =
328
+ buildStringEnumResolvers(stringEnumMappings);
329
+ const typeEntries = buildTypeEntries(resolverInfo, customScalars);
330
+
331
+ const allEntries = [
332
+ ...numericEnumResolverEntries,
333
+ ...stringEnumResolverEntries,
334
+ ...typeEntries,
335
+ ];
336
+
337
+ const functionSignature = hasCustomScalars
338
+ ? `export function createResolvers({ scalars }: ${buildScalarsArgumentType(customScalars)})`
339
+ : "export function createResolvers()";
340
+
341
+ const importSection = imports.length > 0 ? `${imports.join("\n")}\n\n` : "";
342
+
343
+ return `${GENERATED_FILE_HEADER}
344
+
345
+ ${importSection}${functionSignature} {
346
+ return {
347
+ ${allEntries.join("\n")}
348
+ };
349
+ }
350
+ `;
351
+ }
@@ -0,0 +1,13 @@
1
+ import { type DocumentNode, print } from "graphql";
2
+
3
+ const GENERATED_FILE_HEADER =
4
+ "# This file is auto-generated by gqlkit. DO NOT EDIT.";
5
+
6
+ /**
7
+ * DocumentNode を SDL 形式の文字列に変換する。
8
+ * graphql パッケージの print() 関数を使用して SDL を生成する。
9
+ */
10
+ export function emitSdlContent(documentNode: DocumentNode): string {
11
+ const sdl = print(documentNode);
12
+ return `${GENERATED_FILE_HEADER}\n\n${sdl}`;
13
+ }
@@ -0,0 +1,170 @@
1
+ import {
2
+ generateAutoTypes,
3
+ validateNameCollisions,
4
+ } from "../auto-type-generator/index.js";
5
+ import type { ExtractResolversResult } from "../resolver-extractor/index.js";
6
+ import type { DirectiveDefinitionInfo } from "../shared/directive-definition-extractor.js";
7
+ import type { CollectedScalarType } from "../type-extractor/collector/scalar-collector.js";
8
+ import { convertToGraphQL } from "../type-extractor/converter/graphql-converter.js";
9
+ import type { ExtractTypesResult } from "../type-extractor/index.js";
10
+ import type {
11
+ Diagnostic,
12
+ ExtractedTypeInfo,
13
+ } from "../type-extractor/types/index.js";
14
+ import { buildDocumentNode } from "./builder/ast-builder.js";
15
+ import { emitResolversCode, emitTypeDefsCode } from "./emitter/code-emitter.js";
16
+ import { emitSdlContent } from "./emitter/sdl-emitter.js";
17
+ import { integrate } from "./integrator/result-integrator.js";
18
+ import { pruneDocumentNode } from "./pruner/schema-pruner.js";
19
+ import { collectResolverInfo } from "./resolver-collector/resolver-collector.js";
20
+
21
+ export interface GenerateSchemaInput {
22
+ readonly typesResult: ExtractTypesResult;
23
+ readonly extractedTypes: ReadonlyArray<ExtractedTypeInfo>;
24
+ readonly resolversResult: ExtractResolversResult;
25
+ readonly outputDir: string;
26
+ readonly customScalarNames: ReadonlyArray<string> | null;
27
+ readonly customScalars: ReadonlyArray<CollectedScalarType> | null;
28
+ readonly directiveDefinitions: ReadonlyArray<DirectiveDefinitionInfo> | null;
29
+ readonly enablePruning: boolean | null;
30
+ readonly sourceRoot: string | null;
31
+ }
32
+
33
+ export interface GenerateSchemaResult {
34
+ readonly typeDefsCode: string;
35
+ readonly sdlContent: string;
36
+ readonly resolversCode: string;
37
+ readonly diagnostics: ReadonlyArray<Diagnostic>;
38
+ readonly hasErrors: boolean;
39
+ readonly prunedTypes: ReadonlyArray<string> | null;
40
+ }
41
+
42
+ export function generateSchema(
43
+ input: GenerateSchemaInput,
44
+ ): GenerateSchemaResult {
45
+ const {
46
+ typesResult,
47
+ extractedTypes,
48
+ resolversResult,
49
+ outputDir,
50
+ customScalarNames,
51
+ customScalars,
52
+ directiveDefinitions,
53
+ enablePruning,
54
+ sourceRoot,
55
+ } = input;
56
+
57
+ const autoTypeResult = generateAutoTypes({
58
+ extractedTypes,
59
+ resolversResult,
60
+ });
61
+
62
+ const autoTypeErrors = autoTypeResult.diagnostics.filter(
63
+ (d) => d.severity === "error",
64
+ );
65
+ if (autoTypeErrors.length > 0) {
66
+ return {
67
+ typeDefsCode: "",
68
+ sdlContent: "",
69
+ resolversCode: "",
70
+ diagnostics: autoTypeResult.diagnostics,
71
+ hasErrors: true,
72
+ prunedTypes: null,
73
+ };
74
+ }
75
+
76
+ const userDefinedTypes = extractedTypes.map((t) => ({
77
+ name: t.metadata.name,
78
+ sourceLocation: t.metadata.sourceLocation,
79
+ }));
80
+
81
+ const collisionResult = validateNameCollisions({
82
+ userDefinedTypes,
83
+ autoGeneratedTypes: autoTypeResult.autoGeneratedTypes,
84
+ sourceRoot,
85
+ });
86
+
87
+ if (collisionResult.hasCollisions) {
88
+ return {
89
+ typeDefsCode: "",
90
+ sdlContent: "",
91
+ resolversCode: "",
92
+ diagnostics: collisionResult.diagnostics,
93
+ hasErrors: true,
94
+ prunedTypes: null,
95
+ };
96
+ }
97
+
98
+ // Re-convert to GraphQL types using updated extracted types
99
+ // This resolves __INLINE_OBJECT__ references to auto-generated type names
100
+ const updatedConversionResult = convertToGraphQL(
101
+ autoTypeResult.updatedExtractedTypes,
102
+ );
103
+ const updatedTypesResult: ExtractTypesResult = {
104
+ types: updatedConversionResult.types,
105
+ diagnostics: {
106
+ errors: [
107
+ ...typesResult.diagnostics.errors,
108
+ ...updatedConversionResult.diagnostics.filter(
109
+ (d) => d.severity === "error",
110
+ ),
111
+ ...autoTypeResult.diagnostics.filter((d) => d.severity === "error"),
112
+ ],
113
+ warnings: [
114
+ ...typesResult.diagnostics.warnings,
115
+ ...updatedConversionResult.diagnostics.filter(
116
+ (d) => d.severity === "warning",
117
+ ),
118
+ ...autoTypeResult.diagnostics.filter((d) => d.severity === "warning"),
119
+ ],
120
+ },
121
+ };
122
+
123
+ const integratedResult = integrate(
124
+ updatedTypesResult,
125
+ autoTypeResult.updatedResolversResult,
126
+ customScalarNames,
127
+ customScalars,
128
+ directiveDefinitions,
129
+ autoTypeResult.autoGeneratedTypes,
130
+ );
131
+
132
+ let documentNode = buildDocumentNode(
133
+ integratedResult,
134
+ sourceRoot !== null ? { sourceRoot } : undefined,
135
+ );
136
+ let prunedTypes: ReadonlyArray<string> | null = null;
137
+
138
+ if (enablePruning) {
139
+ const pruneResult = pruneDocumentNode({
140
+ documentNode,
141
+ customScalarNames,
142
+ });
143
+ documentNode = pruneResult.documentNode;
144
+ prunedTypes = pruneResult.removedTypes;
145
+ }
146
+
147
+ const typeDefsCode = emitTypeDefsCode(
148
+ integratedResult,
149
+ sourceRoot !== null ? { sourceRoot } : undefined,
150
+ );
151
+ const sdlContent = emitSdlContent(documentNode);
152
+
153
+ const resolverInfo = collectResolverInfo(integratedResult);
154
+ const resolversCode = emitResolversCode({
155
+ resolverInfo,
156
+ outputDir,
157
+ customScalars: customScalars ?? [],
158
+ numericEnums: integratedResult.numericEnums,
159
+ stringEnumMappings: integratedResult.stringEnumMappings,
160
+ });
161
+
162
+ return {
163
+ typeDefsCode,
164
+ sdlContent,
165
+ resolversCode,
166
+ diagnostics: integratedResult.diagnostics,
167
+ hasErrors: integratedResult.hasErrors,
168
+ prunedTypes,
169
+ };
170
+ }
@@ -0,0 +1,19 @@
1
+ export {
2
+ type GenerateSchemaInput,
3
+ type GenerateSchemaResult,
4
+ generateSchema,
5
+ } from "./generate-schema.js";
6
+ export type {
7
+ BaseField,
8
+ BaseType,
9
+ CustomScalarInfo,
10
+ ExtensionField,
11
+ IntegratedResult,
12
+ TypeExtension,
13
+ } from "./integrator/result-integrator.js";
14
+ export type {
15
+ AbstractTypeResolverInfo,
16
+ FieldResolver,
17
+ ResolverInfo,
18
+ TypeResolvers,
19
+ } from "./resolver-collector/resolver-collector.js";