@gqlkit-ts/cli 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (339) hide show
  1. package/dist/auto-type-generator/auto-type-generator.d.ts +26 -4
  2. package/dist/auto-type-generator/auto-type-generator.d.ts.map +1 -1
  3. package/dist/auto-type-generator/auto-type-generator.js +846 -152
  4. package/dist/auto-type-generator/auto-type-generator.js.map +1 -1
  5. package/dist/auto-type-generator/index.d.ts +9 -2
  6. package/dist/auto-type-generator/index.d.ts.map +1 -1
  7. package/dist/auto-type-generator/index.js +3 -0
  8. package/dist/auto-type-generator/index.js.map +1 -1
  9. package/dist/auto-type-generator/inline-enum-collector.d.ts +39 -0
  10. package/dist/auto-type-generator/inline-enum-collector.d.ts.map +1 -0
  11. package/dist/auto-type-generator/inline-enum-collector.js +193 -0
  12. package/dist/auto-type-generator/inline-enum-collector.js.map +1 -0
  13. package/dist/auto-type-generator/inline-object-traverser.d.ts +20 -0
  14. package/dist/auto-type-generator/inline-object-traverser.d.ts.map +1 -0
  15. package/dist/auto-type-generator/inline-object-traverser.js +22 -0
  16. package/dist/auto-type-generator/inline-object-traverser.js.map +1 -0
  17. package/dist/auto-type-generator/inline-union-collector.d.ts +29 -0
  18. package/dist/auto-type-generator/inline-union-collector.d.ts.map +1 -0
  19. package/dist/auto-type-generator/inline-union-collector.js +216 -0
  20. package/dist/auto-type-generator/inline-union-collector.js.map +1 -0
  21. package/dist/auto-type-generator/inline-union-types.d.ts +29 -0
  22. package/dist/auto-type-generator/inline-union-types.d.ts.map +1 -0
  23. package/dist/auto-type-generator/inline-union-types.js +2 -0
  24. package/dist/auto-type-generator/inline-union-types.js.map +1 -0
  25. package/dist/auto-type-generator/inline-union-validator.d.ts +76 -0
  26. package/dist/auto-type-generator/inline-union-validator.d.ts.map +1 -0
  27. package/dist/auto-type-generator/inline-union-validator.js +329 -0
  28. package/dist/auto-type-generator/inline-union-validator.js.map +1 -0
  29. package/dist/auto-type-generator/naming-convention.d.ts +22 -1
  30. package/dist/auto-type-generator/naming-convention.d.ts.map +1 -1
  31. package/dist/auto-type-generator/naming-convention.js +24 -0
  32. package/dist/auto-type-generator/naming-convention.js.map +1 -1
  33. package/dist/auto-type-generator/resolve-type-generator.d.ts +20 -0
  34. package/dist/auto-type-generator/resolve-type-generator.d.ts.map +1 -0
  35. package/dist/auto-type-generator/resolve-type-generator.js +2 -0
  36. package/dist/auto-type-generator/resolve-type-generator.js.map +1 -0
  37. package/dist/auto-type-generator/resolver-field-iterator.d.ts +13 -0
  38. package/dist/auto-type-generator/resolver-field-iterator.d.ts.map +1 -0
  39. package/dist/auto-type-generator/resolver-field-iterator.js +22 -0
  40. package/dist/auto-type-generator/resolver-field-iterator.js.map +1 -0
  41. package/dist/auto-type-generator/typename-extractor.d.ts +26 -0
  42. package/dist/auto-type-generator/typename-extractor.d.ts.map +1 -0
  43. package/dist/auto-type-generator/typename-extractor.js +142 -0
  44. package/dist/auto-type-generator/typename-extractor.js.map +1 -0
  45. package/dist/auto-type-generator/typename-resolve-type-generator.d.ts +35 -0
  46. package/dist/auto-type-generator/typename-resolve-type-generator.d.ts.map +1 -0
  47. package/dist/auto-type-generator/typename-resolve-type-generator.js +177 -0
  48. package/dist/auto-type-generator/typename-resolve-type-generator.js.map +1 -0
  49. package/dist/auto-type-generator/typename-types.d.ts +43 -0
  50. package/dist/auto-type-generator/typename-types.d.ts.map +1 -0
  51. package/dist/auto-type-generator/typename-types.js +37 -0
  52. package/dist/auto-type-generator/typename-types.js.map +1 -0
  53. package/dist/auto-type-generator/typename-validator.d.ts +37 -0
  54. package/dist/auto-type-generator/typename-validator.d.ts.map +1 -0
  55. package/dist/auto-type-generator/typename-validator.js +206 -0
  56. package/dist/auto-type-generator/typename-validator.js.map +1 -0
  57. package/dist/cli.js +2 -0
  58. package/dist/cli.js.map +1 -1
  59. package/dist/commands/docs.d.ts +51 -0
  60. package/dist/commands/docs.d.ts.map +1 -0
  61. package/dist/commands/docs.js +154 -0
  62. package/dist/commands/docs.js.map +1 -0
  63. package/dist/gen-orchestrator/orchestrator.d.ts.map +1 -1
  64. package/dist/gen-orchestrator/orchestrator.js +119 -14
  65. package/dist/gen-orchestrator/orchestrator.js.map +1 -1
  66. package/dist/resolver-extractor/extract-resolvers.d.ts +28 -1
  67. package/dist/resolver-extractor/extract-resolvers.d.ts.map +1 -1
  68. package/dist/resolver-extractor/extractor/define-api-extractor.d.ts +16 -1
  69. package/dist/resolver-extractor/extractor/define-api-extractor.d.ts.map +1 -1
  70. package/dist/resolver-extractor/extractor/define-api-extractor.js +86 -309
  71. package/dist/resolver-extractor/extractor/define-api-extractor.js.map +1 -1
  72. package/dist/resolver-extractor/index.d.ts +0 -1
  73. package/dist/resolver-extractor/index.d.ts.map +1 -1
  74. package/dist/resolver-extractor/validator/abstract-resolver-validator.d.ts +1 -0
  75. package/dist/resolver-extractor/validator/abstract-resolver-validator.d.ts.map +1 -1
  76. package/dist/resolver-extractor/validator/abstract-resolver-validator.js +9 -5
  77. package/dist/resolver-extractor/validator/abstract-resolver-validator.js.map +1 -1
  78. package/dist/schema-generator/emitter/code-emitter.d.ts +10 -2
  79. package/dist/schema-generator/emitter/code-emitter.d.ts.map +1 -1
  80. package/dist/schema-generator/emitter/code-emitter.js +39 -4
  81. package/dist/schema-generator/emitter/code-emitter.js.map +1 -1
  82. package/dist/schema-generator/generate-schema.d.ts +1 -0
  83. package/dist/schema-generator/generate-schema.d.ts.map +1 -1
  84. package/dist/schema-generator/generate-schema.js +90 -4
  85. package/dist/schema-generator/generate-schema.js.map +1 -1
  86. package/dist/schema-generator/integrator/result-integrator.d.ts +34 -2
  87. package/dist/schema-generator/integrator/result-integrator.d.ts.map +1 -1
  88. package/dist/schema-generator/integrator/result-integrator.js +96 -1
  89. package/dist/schema-generator/integrator/result-integrator.js.map +1 -1
  90. package/dist/schema-generator/resolver-collector/resolver-collector.d.ts +2 -0
  91. package/dist/schema-generator/resolver-collector/resolver-collector.d.ts.map +1 -1
  92. package/dist/schema-generator/resolver-collector/resolver-collector.js +22 -0
  93. package/dist/schema-generator/resolver-collector/resolver-collector.js.map +1 -1
  94. package/dist/shared/constants.d.ts +0 -16
  95. package/dist/shared/constants.d.ts.map +1 -1
  96. package/dist/shared/constants.js +0 -19
  97. package/dist/shared/constants.js.map +1 -1
  98. package/dist/shared/directive-detector.d.ts.map +1 -1
  99. package/dist/shared/directive-detector.js +8 -15
  100. package/dist/shared/directive-detector.js.map +1 -1
  101. package/dist/shared/enum-prefix-detector.d.ts +63 -0
  102. package/dist/shared/enum-prefix-detector.d.ts.map +1 -0
  103. package/dist/shared/enum-prefix-detector.js +80 -0
  104. package/dist/shared/enum-prefix-detector.js.map +1 -0
  105. package/dist/shared/file-scanner.d.ts.map +1 -1
  106. package/dist/shared/file-scanner.js +5 -3
  107. package/dist/shared/file-scanner.js.map +1 -1
  108. package/dist/shared/ignore-fields-detector.d.ts +26 -0
  109. package/dist/shared/ignore-fields-detector.d.ts.map +1 -0
  110. package/dist/shared/ignore-fields-detector.js +83 -0
  111. package/dist/shared/ignore-fields-detector.js.map +1 -0
  112. package/dist/shared/ignore-fields-validator.d.ts +29 -0
  113. package/dist/shared/ignore-fields-validator.d.ts.map +1 -0
  114. package/dist/shared/ignore-fields-validator.js +43 -0
  115. package/dist/shared/ignore-fields-validator.js.map +1 -0
  116. package/dist/shared/index.d.ts +3 -1
  117. package/dist/shared/index.d.ts.map +1 -1
  118. package/dist/shared/index.js +1 -3
  119. package/dist/shared/index.js.map +1 -1
  120. package/dist/shared/interface-detector.d.ts +3 -2
  121. package/dist/shared/interface-detector.d.ts.map +1 -1
  122. package/dist/shared/interface-detector.js +54 -11
  123. package/dist/shared/interface-detector.js.map +1 -1
  124. package/dist/shared/path-utils.d.ts +2 -0
  125. package/dist/shared/path-utils.d.ts.map +1 -0
  126. package/dist/shared/path-utils.js +4 -0
  127. package/dist/shared/path-utils.js.map +1 -0
  128. package/dist/shared/source-location.d.ts +5 -0
  129. package/dist/shared/source-location.d.ts.map +1 -1
  130. package/dist/shared/source-location.js +7 -0
  131. package/dist/shared/source-location.js.map +1 -1
  132. package/dist/shared/type-converter.d.ts.map +1 -1
  133. package/dist/shared/type-converter.js +11 -0
  134. package/dist/shared/type-converter.js.map +1 -1
  135. package/dist/shared/typescript-utils.d.ts +34 -7
  136. package/dist/shared/typescript-utils.d.ts.map +1 -1
  137. package/dist/shared/typescript-utils.js +72 -24
  138. package/dist/shared/typescript-utils.js.map +1 -1
  139. package/dist/type-extractor/collector/scalar-collector.d.ts.map +1 -1
  140. package/dist/type-extractor/collector/scalar-collector.js +4 -14
  141. package/dist/type-extractor/collector/scalar-collector.js.map +1 -1
  142. package/dist/type-extractor/converter/graphql-converter.d.ts.map +1 -1
  143. package/dist/type-extractor/converter/graphql-converter.js +57 -4
  144. package/dist/type-extractor/converter/graphql-converter.js.map +1 -1
  145. package/dist/type-extractor/extractor/field-type-resolver.d.ts +28 -0
  146. package/dist/type-extractor/extractor/field-type-resolver.d.ts.map +1 -0
  147. package/dist/type-extractor/extractor/field-type-resolver.js +433 -0
  148. package/dist/type-extractor/extractor/field-type-resolver.js.map +1 -0
  149. package/dist/type-extractor/extractor/type-extractor.d.ts +12 -3
  150. package/dist/type-extractor/extractor/type-extractor.d.ts.map +1 -1
  151. package/dist/type-extractor/extractor/type-extractor.js +260 -229
  152. package/dist/type-extractor/extractor/type-extractor.js.map +1 -1
  153. package/dist/type-extractor/extractor/type-name-collector.d.ts +24 -0
  154. package/dist/type-extractor/extractor/type-name-collector.d.ts.map +1 -0
  155. package/dist/type-extractor/extractor/type-name-collector.js +102 -0
  156. package/dist/type-extractor/extractor/type-name-collector.js.map +1 -0
  157. package/dist/type-extractor/mapper/scalar-base-type-mapper.d.ts +89 -0
  158. package/dist/type-extractor/mapper/scalar-base-type-mapper.d.ts.map +1 -0
  159. package/dist/type-extractor/mapper/scalar-base-type-mapper.js +158 -0
  160. package/dist/type-extractor/mapper/scalar-base-type-mapper.js.map +1 -0
  161. package/dist/type-extractor/types/diagnostics.d.ts +1 -1
  162. package/dist/type-extractor/types/diagnostics.d.ts.map +1 -1
  163. package/dist/type-extractor/types/graphql.d.ts +2 -0
  164. package/dist/type-extractor/types/graphql.d.ts.map +1 -1
  165. package/dist/type-extractor/types/index.d.ts +2 -1
  166. package/dist/type-extractor/types/index.d.ts.map +1 -1
  167. package/dist/type-extractor/types/index.js +1 -1
  168. package/dist/type-extractor/types/index.js.map +1 -1
  169. package/dist/type-extractor/types/ts-type-reference-factory.d.ts +47 -0
  170. package/dist/type-extractor/types/ts-type-reference-factory.d.ts.map +1 -0
  171. package/dist/type-extractor/types/ts-type-reference-factory.js +75 -0
  172. package/dist/type-extractor/types/ts-type-reference-factory.js.map +1 -0
  173. package/dist/type-extractor/types/typescript.d.ts +25 -1
  174. package/dist/type-extractor/types/typescript.d.ts.map +1 -1
  175. package/dist/type-extractor/validator/type-validator.js +1 -1
  176. package/dist/type-extractor/validator/type-validator.js.map +1 -1
  177. package/docs/coding-agents.md +64 -0
  178. package/docs/configuration.md +6 -20
  179. package/docs/getting-started.md +15 -12
  180. package/docs/index.md +36 -21
  181. package/docs/integration/apollo.md +8 -40
  182. package/docs/integration/drizzle.md +187 -0
  183. package/docs/integration/prisma.md +196 -0
  184. package/docs/integration/yoga.md +8 -40
  185. package/docs/schema/abstract-resolvers.md +117 -0
  186. package/docs/schema/directives.md +5 -0
  187. package/docs/schema/documentation.md +5 -0
  188. package/docs/schema/enums.md +307 -0
  189. package/docs/schema/fields.md +66 -0
  190. package/docs/schema/index.md +21 -0
  191. package/docs/schema/inputs.md +117 -15
  192. package/docs/schema/interfaces.md +31 -1
  193. package/docs/schema/objects.md +42 -0
  194. package/docs/schema/queries-mutations.md +138 -22
  195. package/docs/schema/scalars.md +5 -0
  196. package/docs/schema/unions.md +208 -1
  197. package/docs/what-is-gqlkit.md +13 -8
  198. package/package.json +14 -5
  199. package/src/auto-type-generator/auto-type-generator.ts +1670 -0
  200. package/src/auto-type-generator/index.ts +63 -0
  201. package/src/auto-type-generator/inline-enum-collector.ts +338 -0
  202. package/src/auto-type-generator/inline-object-traverser.ts +49 -0
  203. package/src/auto-type-generator/inline-union-collector.ts +402 -0
  204. package/src/auto-type-generator/inline-union-types.ts +33 -0
  205. package/src/auto-type-generator/inline-union-validator.ts +482 -0
  206. package/src/auto-type-generator/name-collision-validator.ts +119 -0
  207. package/src/auto-type-generator/naming-convention.ts +163 -0
  208. package/src/auto-type-generator/resolve-type-generator.ts +21 -0
  209. package/src/auto-type-generator/resolver-field-iterator.ts +39 -0
  210. package/src/auto-type-generator/typename-extractor.ts +230 -0
  211. package/src/auto-type-generator/typename-resolve-type-generator.ts +281 -0
  212. package/src/auto-type-generator/typename-types.ts +66 -0
  213. package/src/auto-type-generator/typename-validator.ts +326 -0
  214. package/src/cli.ts +13 -0
  215. package/src/commands/docs.ts +211 -0
  216. package/src/commands/gen.ts +141 -0
  217. package/src/commands/main.ts +5 -0
  218. package/src/config/define-config.ts +28 -0
  219. package/src/config/index.ts +7 -0
  220. package/src/config/types.ts +144 -0
  221. package/src/config-loader/index.ts +14 -0
  222. package/src/config-loader/loader.ts +143 -0
  223. package/src/config-loader/validator.ts +672 -0
  224. package/src/gen-orchestrator/hook-executor/hook-executor.ts +117 -0
  225. package/src/gen-orchestrator/orchestrator.ts +798 -0
  226. package/src/gen-orchestrator/reporter/diagnostic-reporter.ts +44 -0
  227. package/src/gen-orchestrator/reporter/progress-reporter.ts +61 -0
  228. package/src/gen-orchestrator/writer/file-writer.ts +38 -0
  229. package/src/index.ts +2 -0
  230. package/src/resolver-extractor/extract-resolvers.ts +82 -0
  231. package/src/resolver-extractor/extractor/define-api-extractor.ts +740 -0
  232. package/src/resolver-extractor/index.ts +13 -0
  233. package/src/resolver-extractor/validator/abstract-resolver-validator.ts +259 -0
  234. package/src/schema-generator/builder/ast-builder.ts +706 -0
  235. package/src/schema-generator/emitter/code-emitter.ts +385 -0
  236. package/src/schema-generator/emitter/sdl-emitter.ts +13 -0
  237. package/src/schema-generator/generate-schema.ts +267 -0
  238. package/src/schema-generator/index.ts +19 -0
  239. package/src/schema-generator/integrator/result-integrator.ts +759 -0
  240. package/src/schema-generator/pruner/schema-pruner.ts +112 -0
  241. package/src/schema-generator/resolver-collector/resolver-collector.ts +157 -0
  242. package/src/shared/constants.ts +122 -0
  243. package/src/shared/default-value-detector.ts +172 -0
  244. package/src/shared/diagnostics.ts +35 -0
  245. package/src/shared/directive-definition-extractor.ts +564 -0
  246. package/src/shared/directive-detector.ts +556 -0
  247. package/src/shared/enum-prefix-detector.ts +99 -0
  248. package/src/shared/file-scanner.ts +170 -0
  249. package/src/shared/ignore-fields-detector.ts +109 -0
  250. package/src/shared/ignore-fields-validator.ts +66 -0
  251. package/src/shared/index.ts +34 -0
  252. package/src/shared/inline-object-extractor.ts +102 -0
  253. package/src/shared/inline-object-utils.ts +23 -0
  254. package/src/shared/interface-detector.ts +176 -0
  255. package/src/shared/interface-validator.ts +211 -0
  256. package/src/shared/metadata-detector.ts +443 -0
  257. package/src/shared/path-utils.ts +3 -0
  258. package/src/shared/program-factory.ts +51 -0
  259. package/src/shared/source-location.ts +38 -0
  260. package/src/shared/tsconfig-loader.ts +126 -0
  261. package/src/shared/tsdoc-parser.ts +155 -0
  262. package/src/shared/type-converter.ts +99 -0
  263. package/src/shared/typescript-utils.ts +246 -0
  264. package/src/type-extractor/collector/result-collector.ts +57 -0
  265. package/src/type-extractor/collector/scalar-collector.ts +254 -0
  266. package/src/type-extractor/converter/field-eligibility.ts +112 -0
  267. package/src/type-extractor/converter/graphql-converter.ts +483 -0
  268. package/src/type-extractor/extract-types.ts +1 -0
  269. package/src/type-extractor/extractor/field-type-resolver.ts +614 -0
  270. package/src/type-extractor/extractor/type-extractor.ts +1644 -0
  271. package/src/type-extractor/extractor/type-name-collector.ts +130 -0
  272. package/src/type-extractor/index.ts +20 -0
  273. package/src/type-extractor/mapper/scalar-base-type-mapper.ts +265 -0
  274. package/src/type-extractor/types/diagnostics.ts +109 -0
  275. package/src/type-extractor/types/graphql.ts +55 -0
  276. package/src/type-extractor/types/index.ts +37 -0
  277. package/src/type-extractor/types/ts-type-reference-factory.ts +150 -0
  278. package/src/type-extractor/types/typescript.ts +137 -0
  279. package/src/type-extractor/validator/type-validator.ts +77 -0
  280. package/dist/auto-type-generator/auto-type-generator.test.d.ts +0 -2
  281. package/dist/auto-type-generator/auto-type-generator.test.d.ts.map +0 -1
  282. package/dist/auto-type-generator/auto-type-generator.test.js +0 -613
  283. package/dist/auto-type-generator/auto-type-generator.test.js.map +0 -1
  284. package/dist/auto-type-generator/name-collision-validator.test.d.ts +0 -2
  285. package/dist/auto-type-generator/name-collision-validator.test.d.ts.map +0 -1
  286. package/dist/auto-type-generator/name-collision-validator.test.js +0 -358
  287. package/dist/auto-type-generator/name-collision-validator.test.js.map +0 -1
  288. package/dist/auto-type-generator/naming-convention.test.d.ts +0 -2
  289. package/dist/auto-type-generator/naming-convention.test.d.ts.map +0 -1
  290. package/dist/auto-type-generator/naming-convention.test.js +0 -132
  291. package/dist/auto-type-generator/naming-convention.test.js.map +0 -1
  292. package/dist/commands/gen.test.d.ts +0 -2
  293. package/dist/commands/gen.test.d.ts.map +0 -1
  294. package/dist/commands/gen.test.js +0 -226
  295. package/dist/commands/gen.test.js.map +0 -1
  296. package/dist/config-loader/loader.test.d.ts +0 -2
  297. package/dist/config-loader/loader.test.d.ts.map +0 -1
  298. package/dist/config-loader/loader.test.js +0 -123
  299. package/dist/config-loader/loader.test.js.map +0 -1
  300. package/dist/config-loader/validator.test.d.ts +0 -2
  301. package/dist/config-loader/validator.test.d.ts.map +0 -1
  302. package/dist/config-loader/validator.test.js +0 -846
  303. package/dist/config-loader/validator.test.js.map +0 -1
  304. package/dist/gen-orchestrator/golden.test.d.ts +0 -2
  305. package/dist/gen-orchestrator/golden.test.d.ts.map +0 -1
  306. package/dist/gen-orchestrator/golden.test.js +0 -102
  307. package/dist/gen-orchestrator/golden.test.js.map +0 -1
  308. package/dist/gen-orchestrator/hook-executor/hook-executor.test.d.ts +0 -2
  309. package/dist/gen-orchestrator/hook-executor/hook-executor.test.d.ts.map +0 -1
  310. package/dist/gen-orchestrator/hook-executor/hook-executor.test.js +0 -167
  311. package/dist/gen-orchestrator/hook-executor/hook-executor.test.js.map +0 -1
  312. package/dist/gen-orchestrator/reporter/progress-reporter.test.d.ts +0 -2
  313. package/dist/gen-orchestrator/reporter/progress-reporter.test.d.ts.map +0 -1
  314. package/dist/gen-orchestrator/reporter/progress-reporter.test.js +0 -74
  315. package/dist/gen-orchestrator/reporter/progress-reporter.test.js.map +0 -1
  316. package/dist/resolver-extractor/validator/only-validator.d.ts +0 -61
  317. package/dist/resolver-extractor/validator/only-validator.d.ts.map +0 -1
  318. package/dist/resolver-extractor/validator/only-validator.js +0 -76
  319. package/dist/resolver-extractor/validator/only-validator.js.map +0 -1
  320. package/dist/resolver-extractor/validator/only-validator.test.d.ts +0 -8
  321. package/dist/resolver-extractor/validator/only-validator.test.d.ts.map +0 -1
  322. package/dist/resolver-extractor/validator/only-validator.test.js +0 -352
  323. package/dist/resolver-extractor/validator/only-validator.test.js.map +0 -1
  324. package/dist/schema-generator/builder/ast-builder.test.d.ts +0 -2
  325. package/dist/schema-generator/builder/ast-builder.test.d.ts.map +0 -1
  326. package/dist/schema-generator/builder/ast-builder.test.js +0 -469
  327. package/dist/schema-generator/builder/ast-builder.test.js.map +0 -1
  328. package/dist/shared/file-scanner.test.d.ts +0 -2
  329. package/dist/shared/file-scanner.test.d.ts.map +0 -1
  330. package/dist/shared/file-scanner.test.js +0 -138
  331. package/dist/shared/file-scanner.test.js.map +0 -1
  332. package/dist/shared/interface-validator.test.d.ts +0 -2
  333. package/dist/shared/interface-validator.test.d.ts.map +0 -1
  334. package/dist/shared/interface-validator.test.js +0 -145
  335. package/dist/shared/interface-validator.test.js.map +0 -1
  336. package/dist/type-extractor/types/typescript.test.d.ts +0 -2
  337. package/dist/type-extractor/types/typescript.test.d.ts.map +0 -1
  338. package/dist/type-extractor/types/typescript.test.js +0 -287
  339. package/dist/type-extractor/types/typescript.test.js.map +0 -1
@@ -0,0 +1,187 @@
1
+ ---
2
+ title: Integration with Drizzle ORM
3
+ description: Derive GraphQL types from Drizzle table definitions.
4
+ ---
5
+
6
+ # Drizzle ORM
7
+
8
+ [Drizzle ORM](https://orm.drizzle.team/) is a TypeScript ORM with type-safe schema definitions. gqlkit integrates seamlessly with Drizzle by using `InferSelectModel` and `InferInsertModel` to derive GraphQL types from your table definitions.
9
+
10
+ ## Installation
11
+
12
+ ```sh filename="npm"
13
+ npm install drizzle-orm postgres
14
+ ```
15
+
16
+ ```sh filename="pnpm"
17
+ pnpm add drizzle-orm postgres
18
+ ```
19
+
20
+ ```sh filename="yarn"
21
+ yarn add drizzle-orm postgres
22
+ ```
23
+
24
+ ## Defining Tables
25
+
26
+ Define your database tables with Drizzle:
27
+
28
+ ```typescript
29
+ // src/db/schema.ts
30
+ import { pgEnum, pgTable, text, timestamp, uuid } from "drizzle-orm/pg-core";
31
+
32
+ export const userStatusEnum = pgEnum("user_status", [
33
+ "active",
34
+ "inactive",
35
+ "suspended",
36
+ ]);
37
+
38
+ export const users = pgTable("users", {
39
+ id: uuid().primaryKey().defaultRandom(),
40
+ name: text().notNull(),
41
+ email: text().notNull().unique(),
42
+ status: userStatusEnum().notNull().default("active"),
43
+ createdAt: timestamp().notNull().defaultNow(),
44
+ });
45
+
46
+ export const posts = pgTable("posts", {
47
+ id: uuid().primaryKey().defaultRandom(),
48
+ title: text().notNull(),
49
+ content: text(),
50
+ priority: text({ enum: ["low", "medium", "high"] }).notNull().default("medium"),
51
+ authorId: uuid()
52
+ .notNull()
53
+ .references(() => users.id),
54
+ createdAt: timestamp().notNull().defaultNow(),
55
+ });
56
+ ```
57
+
58
+ Both `pgEnum()` and `text({ enum: [...] })` are supported for defining enum columns. gqlkit automatically generates corresponding GraphQL enum types from these definitions.
59
+
60
+ ## Defining Custom Scalars
61
+
62
+ Define custom scalar types using `GqlScalar` for fields like timestamps:
63
+
64
+ ```typescript
65
+ // src/gqlkit/schema/scalars.ts
66
+ import type { GqlScalar } from "@gqlkit-ts/runtime";
67
+
68
+ export type DateTime = GqlScalar<"DateTime", Date>;
69
+ ```
70
+
71
+ ## Exporting GraphQL Types
72
+
73
+ Use Drizzle's type inference utilities to export GraphQL types from your table definitions:
74
+
75
+ ```typescript
76
+ // src/gqlkit/schema/user.ts
77
+ import type { InferSelectModel } from "drizzle-orm";
78
+ import { users as usersTable } from "../../db/schema.js";
79
+
80
+ // Export as GraphQL object type
81
+ export type User = InferSelectModel<typeof usersTable>;
82
+ ```
83
+
84
+ This generates the following GraphQL schema:
85
+
86
+ ```graphql
87
+ enum UserStatus {
88
+ ACTIVE
89
+ INACTIVE
90
+ SUSPENDED
91
+ }
92
+
93
+ type User {
94
+ id: String!
95
+ name: String!
96
+ email: String!
97
+ status: UserStatus!
98
+ createdAt: DateTime!
99
+ }
100
+ ```
101
+
102
+ ## Defining Resolvers
103
+
104
+ Define resolvers that use the derived types:
105
+
106
+ ```typescript
107
+ // src/gqlkit/schema/user.ts
108
+ import type { NoArgs } from "@gqlkit-ts/runtime";
109
+ import type { InferInsertModel, InferSelectModel } from "drizzle-orm";
110
+ import { eq } from "drizzle-orm";
111
+ import { posts as postsTable, users as usersTable } from "../../db/schema.js";
112
+ import { defineField, defineMutation, defineQuery } from "../gqlkit.js";
113
+ import type { Post } from "./post.js";
114
+
115
+ export type User = InferSelectModel<typeof usersTable>;
116
+
117
+ export const allUsers = defineQuery<NoArgs, User[]>(
118
+ async (_root, _args, ctx) => {
119
+ return ctx.db.select().from(usersTable);
120
+ },
121
+ );
122
+
123
+ export const user = defineQuery<{ id: string }, User | null>(
124
+ async (_root, args, ctx) => {
125
+ const result = await ctx.db
126
+ .select()
127
+ .from(usersTable)
128
+ .where(eq(usersTable.id, args.id));
129
+ return result[0] ?? null;
130
+ },
131
+ );
132
+
133
+ export const createUser = defineMutation<
134
+ { input: Omit<InferInsertModel<typeof usersTable>, "id" | "createdAt"> },
135
+ User
136
+ >(async (_root, args, ctx) => {
137
+ const result = await ctx.db.insert(usersTable).values(args.input).returning();
138
+ return result[0]!;
139
+ });
140
+
141
+ export const posts = defineField<User, NoArgs, Post[]>(
142
+ async (parent, _args, ctx) => {
143
+ return ctx.db
144
+ .select()
145
+ .from(postsTable)
146
+ .where(eq(postsTable.authorId, parent.id));
147
+ },
148
+ );
149
+ ```
150
+
151
+ ## Context with Database
152
+
153
+ Set up the context type to include your database instance. For basic setup, see [Set Up Context and Resolver Factories](../getting-started.md#set-up-context-and-resolver-factories).
154
+
155
+ ```typescript
156
+ // src/db/db.ts
157
+ import { drizzle } from "drizzle-orm/postgres-js";
158
+ import postgres from "postgres";
159
+ import * as schema from "./schema.js";
160
+
161
+ const client = postgres(process.env.DATABASE_URL!);
162
+ export const db = drizzle(client, { schema, casing: "snake_case" });
163
+ export type Database = typeof db;
164
+ ```
165
+
166
+ ```typescript
167
+ // src/gqlkit/context.ts
168
+ import type { Database } from "../db/db.js";
169
+
170
+ export type Context = {
171
+ db: Database;
172
+ };
173
+ ```
174
+
175
+ ## Complete Example
176
+
177
+ See the [examples/with-drizzle](https://github.com/gqlkit/gqlkit/tree/main/examples/with-drizzle) directory for a complete working example with:
178
+
179
+ - PostgreSQL tables with DateTime scalar
180
+ - Enum types using both `pgEnum()` and `text({ enum: [...] })`
181
+ - User and Post types with relationships
182
+ - Query, Mutation, and Field resolvers
183
+
184
+ ## Further Reading
185
+
186
+ - [Drizzle ORM Documentation](https://orm.drizzle.team/docs/overview)
187
+ - [Drizzle with PostgreSQL](https://orm.drizzle.team/docs/get-started/postgresql-new)
@@ -0,0 +1,196 @@
1
+ ---
2
+ title: Integration with Prisma
3
+ description: Derive GraphQL types from Prisma model types.
4
+ ---
5
+
6
+ # Prisma
7
+
8
+ [Prisma](https://www.prisma.io/) is a next-generation ORM for Node.js and TypeScript. gqlkit integrates seamlessly with Prisma by using its generated model types to derive GraphQL types from your schema definitions.
9
+
10
+ ## Installation
11
+
12
+ ```sh filename="npm"
13
+ npm install prisma @prisma/client
14
+ ```
15
+
16
+ ```sh filename="pnpm"
17
+ pnpm add prisma @prisma/client
18
+ ```
19
+
20
+ ```sh filename="yarn"
21
+ yarn add prisma @prisma/client
22
+ ```
23
+
24
+ ## Defining the Schema
25
+
26
+ Define your database schema in `prisma/schema.prisma`:
27
+
28
+ ```prisma
29
+ // prisma/schema.prisma
30
+ generator client {
31
+ provider = "prisma-client"
32
+ output = "../src/__generated__/prisma"
33
+ }
34
+
35
+ datasource db {
36
+ provider = "sqlite"
37
+ }
38
+
39
+ enum UserStatus {
40
+ active
41
+ inactive
42
+ suspended
43
+ }
44
+
45
+ model User {
46
+ id String @id @default(uuid())
47
+ name String
48
+ email String @unique
49
+ status UserStatus @default(active)
50
+ createdAt DateTime @default(now()) @map("created_at")
51
+ posts Post[]
52
+
53
+ @@map("users")
54
+ }
55
+
56
+ enum PostPriority {
57
+ low
58
+ medium
59
+ high
60
+ }
61
+
62
+ model Post {
63
+ id String @id @default(uuid())
64
+ title String
65
+ content String?
66
+ priority PostPriority @default(medium)
67
+ authorId String @map("author_id")
68
+ createdAt DateTime @default(now()) @map("created_at")
69
+ author User @relation(fields: [authorId], references: [id])
70
+
71
+ @@map("posts")
72
+ }
73
+ ```
74
+
75
+ Enum types defined in the Prisma schema are automatically converted to corresponding GraphQL enum types by gqlkit.
76
+
77
+ ## Defining Custom Scalars
78
+
79
+ Define custom scalar types using `GqlScalar` for fields like timestamps:
80
+
81
+ ```typescript
82
+ // src/gqlkit/schema/scalars.ts
83
+ import type { GqlScalar } from "@gqlkit-ts/runtime";
84
+
85
+ export type DateTime = GqlScalar<"DateTime", Date>;
86
+ ```
87
+
88
+ ## Exporting GraphQL Types
89
+
90
+ Use Prisma's generated model types to export GraphQL types from your schema definitions:
91
+
92
+ ```typescript
93
+ // src/gqlkit/schema/user.ts
94
+ import type { Prisma } from "../../__generated__/prisma/client.js";
95
+
96
+ // Export as GraphQL object type
97
+ export type User = Prisma.UserModel;
98
+ ```
99
+
100
+ This generates the following GraphQL schema:
101
+
102
+ ```graphql
103
+ enum UserStatus {
104
+ ACTIVE
105
+ INACTIVE
106
+ SUSPENDED
107
+ }
108
+
109
+ type User {
110
+ id: String!
111
+ name: String!
112
+ email: String!
113
+ status: UserStatus!
114
+ createdAt: DateTime!
115
+ }
116
+ ```
117
+
118
+ ## Defining Resolvers
119
+
120
+ Define resolvers that use the derived types:
121
+
122
+ ```typescript
123
+ // src/gqlkit/schema/user.ts
124
+ import type { NoArgs } from "@gqlkit-ts/runtime";
125
+ import type { Prisma } from "../../__generated__/prisma/client.js";
126
+ import { defineField, defineMutation, defineQuery } from "../gqlkit.js";
127
+ import type { Post } from "./post.js";
128
+
129
+ export type User = Prisma.UserModel;
130
+
131
+ export const allUsers = defineQuery<NoArgs, User[]>(
132
+ async (_root, _args, ctx) => {
133
+ return ctx.db.user.findMany();
134
+ },
135
+ );
136
+
137
+ export const user = defineQuery<{ id: string }, User | null>(
138
+ async (_root, args, ctx) => {
139
+ return ctx.db.user.findUnique({
140
+ where: { id: args.id },
141
+ });
142
+ },
143
+ );
144
+
145
+ export const createUser = defineMutation<
146
+ { input: Omit<Prisma.UserCreateInput, "id" | "createdAt" | "posts"> },
147
+ User
148
+ >(async (_root, args, ctx) => {
149
+ return ctx.db.user.create({
150
+ data: args.input,
151
+ });
152
+ });
153
+
154
+ export const posts = defineField<User, NoArgs, Post[]>(
155
+ async (parent, _args, ctx) => {
156
+ return ctx.db.post.findMany({
157
+ where: { authorId: parent.id },
158
+ });
159
+ },
160
+ );
161
+ ```
162
+
163
+ ## Context with Database
164
+
165
+ Set up the context type to include your Prisma client instance. For basic setup, see [Set Up Context and Resolver Factories](../getting-started.md#set-up-context-and-resolver-factories).
166
+
167
+ ```typescript
168
+ // src/db/db.ts
169
+ import { PrismaClient } from "../__generated__/prisma/client.js";
170
+
171
+ export const prisma = new PrismaClient();
172
+ export type PrismaDatabase = typeof prisma;
173
+ ```
174
+
175
+ ```typescript
176
+ // src/gqlkit/context.ts
177
+ import type { PrismaDatabase } from "../db/db.js";
178
+
179
+ export type Context = {
180
+ db: PrismaDatabase;
181
+ };
182
+ ```
183
+
184
+ ## Complete Example
185
+
186
+ See the [examples/with-prisma](https://github.com/gqlkit/gqlkit/tree/main/examples/with-prisma) directory for a complete working example with:
187
+
188
+ - SQLite database with DateTime scalar
189
+ - Enum types (`UserStatus`, `PostPriority`)
190
+ - User and Post types with relationships
191
+ - Query, Mutation, and Field resolvers
192
+
193
+ ## Further Reading
194
+
195
+ - [Prisma Documentation](https://www.prisma.io/docs)
196
+ - [Prisma Client API Reference](https://www.prisma.io/docs/orm/reference/prisma-client-reference)
@@ -1,3 +1,8 @@
1
+ ---
2
+ title: Integration with graphql-yoga
3
+ description: Use gqlkit with graphql-yoga, a batteries-included GraphQL server.
4
+ ---
5
+
1
6
  # graphql-yoga
2
7
 
3
8
  [graphql-yoga](https://the-guild.dev/graphql/yoga-server) is a batteries-included GraphQL server that works in any JavaScript runtime.
@@ -16,18 +21,9 @@ pnpm add graphql-yoga
16
21
  yarn add graphql-yoga
17
22
  ```
18
23
 
19
- ## Creating the Schema
20
-
21
- First, create an executable schema using `makeExecutableSchema`:
22
-
23
- ```typescript
24
- // src/schema.ts
25
- import { makeExecutableSchema } from "@graphql-tools/schema";
26
- import { typeDefs } from "./gqlkit/__generated__/schema";
27
- import { resolvers } from "./gqlkit/__generated__/resolvers";
24
+ ## Prerequisites
28
25
 
29
- export const schema = makeExecutableSchema({ typeDefs, resolvers });
30
- ```
26
+ Create an executable schema following the [Getting Started guide](../getting-started.md#create-graphql-schema).
31
27
 
32
28
  ## Basic Server
33
29
 
@@ -47,35 +43,7 @@ server.listen(4000, () => {
47
43
 
48
44
  ## With Context
49
45
 
50
- If your resolvers use a context type, provide a context factory:
51
-
52
- ```typescript
53
- // src/gqlkit/context.ts
54
- export type Context = {
55
- currentUser: User | null;
56
- db: Database;
57
- };
58
- ```
59
-
60
- ```typescript
61
- // src/gqlkit/gqlkit.ts
62
- import { createGqlkitApis } from "@gqlkit-ts/runtime";
63
- import type { Context } from "./context";
64
-
65
- export const { defineQuery, defineMutation, defineField } =
66
- createGqlkitApis<Context>();
67
- ```
68
-
69
- ```typescript
70
- // src/gqlkit/schema/query.ts
71
- import { defineQuery } from "../gqlkit";
72
- import type { NoArgs } from "@gqlkit-ts/runtime";
73
- import type { User } from "./user";
74
-
75
- export const me = defineQuery<NoArgs, User | null>(
76
- (_root, _args, ctx) => ctx.currentUser
77
- );
78
- ```
46
+ If your resolvers use a context type, first [set up context and resolver factories](../getting-started.md#set-up-context-and-resolver-factories), then provide a context factory to your server:
79
47
 
80
48
  ```typescript
81
49
  // src/server.ts
@@ -1,3 +1,8 @@
1
+ ---
2
+ title: Resolving Abstract Types
3
+ description: Handle runtime type resolution for GraphQL unions and interfaces.
4
+ ---
5
+
1
6
  # Abstract Type Resolution
2
7
 
3
8
  GraphQL abstract types (unions and interfaces) require runtime type resolution to determine the concrete type of returned values. gqlkit provides `defineResolveType` and `defineIsTypeOf` to handle this.
@@ -11,6 +16,118 @@ When a GraphQL query returns an abstract type, the server needs to determine whi
11
16
  | `resolveType` | Abstract type (union/interface) | Type name string | Single resolver decides the type |
12
17
  | `isTypeOf` | Object type | Boolean | Each type checks if value matches |
13
18
 
19
+ ## Automatic resolveType Generation
20
+
21
+ When Union or Interface member types have `__typename` or `$typeName` fields with string literal values, gqlkit automatically generates the `resolveType` function. No manual definition is needed.
22
+
23
+ ### Basic Example
24
+
25
+ ```typescript
26
+ export interface User {
27
+ __typename: "User";
28
+ id: string;
29
+ name: string;
30
+ }
31
+
32
+ export interface Post {
33
+ __typename: "Post";
34
+ id: string;
35
+ title: string;
36
+ }
37
+
38
+ export type SearchResult = User | Post;
39
+ // resolveType is automatically generated: (obj) => obj.__typename
40
+ ```
41
+
42
+ ### Using `$typeName`
43
+
44
+ If you prefer not to use `__typename` (e.g., to avoid conflicts with GraphQL introspection), you can use `$typeName` instead:
45
+
46
+ ```typescript
47
+ export interface User {
48
+ $typeName: "User";
49
+ id: string;
50
+ name: string;
51
+ }
52
+
53
+ export interface Post {
54
+ $typeName: "Post";
55
+ id: string;
56
+ title: string;
57
+ }
58
+
59
+ export type SearchResult = User | Post;
60
+ // resolveType is automatically generated: (obj) => obj.$typeName
61
+ ```
62
+
63
+ ### Priority Rules
64
+
65
+ When both `__typename` and `$typeName` are present, `__typename` takes priority:
66
+
67
+ ```typescript
68
+ export interface User {
69
+ __typename: "User"; // This value is used
70
+ $typeName: "UserType";
71
+ id: string;
72
+ }
73
+ ```
74
+
75
+ ### Mixed Patterns
76
+
77
+ When some members use `__typename` and others use `$typeName`, gqlkit generates a fallback pattern:
78
+
79
+ ```typescript
80
+ export interface User {
81
+ __typename: "User";
82
+ id: string;
83
+ }
84
+
85
+ export interface Post {
86
+ $typeName: "Post";
87
+ id: string;
88
+ }
89
+
90
+ export type SearchResult = User | Post;
91
+ // resolveType: (obj) => obj.__typename ?? obj.$typeName
92
+ ```
93
+
94
+ ### Requirements
95
+
96
+ For automatic generation, the typename field must be:
97
+
98
+ - Named `__typename` or `$typeName`
99
+ - A **non-optional** field
100
+ - A **non-nullable** type
101
+ - A **string literal** type (not `string`)
102
+
103
+ ```typescript
104
+ // ✅ OK: Valid typename fields
105
+ interface Valid {
106
+ __typename: "TypeA"; // string literal, required
107
+ }
108
+
109
+ // ❌ Error: These will not trigger auto-generation
110
+ interface Invalid1 {
111
+ __typename?: "TypeA"; // optional field
112
+ }
113
+
114
+ interface Invalid2 {
115
+ __typename: "TypeA" | null; // nullable type
116
+ }
117
+
118
+ interface Invalid3 {
119
+ __typename: string; // not a string literal
120
+ }
121
+ ```
122
+
123
+ ### When to Use Manual defineResolveType
124
+
125
+ Use `defineResolveType` manually when:
126
+
127
+ - Your types don't have `__typename` or `$typeName` fields
128
+ - You need custom resolution logic (e.g., checking other properties)
129
+ - You want to override the automatic generation
130
+
14
131
  ## Using resolveType
15
132
 
16
133
  Define a `resolveType` resolver on a union or interface type to determine the concrete type.
@@ -1,3 +1,8 @@
1
+ ---
2
+ title: Defining Custom Directives
3
+ description: Define custom directives using the GqlDirective utility type.
4
+ ---
5
+
1
6
  # Custom Directives
2
7
 
3
8
  Define custom directives using the `GqlDirective` utility type and attach them using `GqlField` or `GqlObject`.
@@ -1,3 +1,8 @@
1
+ ---
2
+ title: Adding Documentation to Schema
3
+ description: gqlkit extracts TSDoc/JSDoc comments and converts them to GraphQL descriptions.
4
+ ---
5
+
1
6
  # Documentation
2
7
 
3
8
  gqlkit extracts TSDoc/JSDoc comments and converts them to GraphQL descriptions.