@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,163 @@
1
+ /**
2
+ * Context for generating auto type names based on different scenarios.
3
+ */
4
+ export type AutoTypeNameContext =
5
+ | ObjectFieldContext
6
+ | InputFieldContext
7
+ | ResolverArgContext
8
+ | ResolverPayloadContext;
9
+
10
+ /**
11
+ * Context for Object type field inline objects.
12
+ * Generated name: {ParentTypeName}{PascalCaseFieldPath}
13
+ */
14
+ export interface ObjectFieldContext {
15
+ readonly kind: "objectField";
16
+ readonly parentTypeName: string;
17
+ readonly fieldPath: ReadonlyArray<string>;
18
+ }
19
+
20
+ /**
21
+ * Context for Input type field inline objects.
22
+ * Generated name: {ParentTypeNameWithoutInputSuffix}{PascalCaseFieldPath}Input
23
+ */
24
+ export interface InputFieldContext {
25
+ readonly kind: "inputField";
26
+ readonly parentTypeName: string;
27
+ readonly fieldPath: ReadonlyArray<string>;
28
+ }
29
+
30
+ /**
31
+ * Context for resolver argument inline objects.
32
+ * Query/Mutation: {PascalCaseFieldName}{PascalCaseArgName}{NestedPath}Input
33
+ * Field resolver: {ParentTypeName}{PascalCaseFieldName}{PascalCaseArgName}{NestedPath}Input
34
+ */
35
+ export interface ResolverArgContext {
36
+ readonly kind: "resolverArg";
37
+ readonly resolverType: "query" | "mutation" | "field";
38
+ readonly fieldName: string;
39
+ readonly argName: string;
40
+ readonly parentTypeName: string | null;
41
+ readonly fieldPath: ReadonlyArray<string>;
42
+ }
43
+
44
+ /**
45
+ * Context for resolver payload inline types.
46
+ * Query/Mutation: {PascalCaseFieldName}Payload
47
+ * Field resolver: {ParentTypeName}{PascalCaseFieldName}Payload
48
+ * Nested: {PayloadTypeName}{PascalCaseFieldPath} (no Input suffix)
49
+ */
50
+ export interface ResolverPayloadContext {
51
+ readonly kind: "resolverPayload";
52
+ readonly resolverType: "query" | "mutation" | "field";
53
+ readonly fieldName: string;
54
+ readonly parentTypeName: string | null;
55
+ readonly fieldPath: ReadonlyArray<string>;
56
+ }
57
+
58
+ /**
59
+ * Convert a string to PascalCase.
60
+ * Handles camelCase, snake_case, and kebab-case inputs.
61
+ */
62
+ function toPascalCase(str: string): string {
63
+ if (str.length === 0) return str;
64
+
65
+ return str
66
+ .split(/[-_\s]+/)
67
+ .map((part) =>
68
+ part
69
+ .split(/(?=[A-Z])/)
70
+ .map(
71
+ (segment) =>
72
+ segment.charAt(0).toUpperCase() + segment.slice(1).toLowerCase(),
73
+ )
74
+ .join(""),
75
+ )
76
+ .join("");
77
+ }
78
+
79
+ /**
80
+ * Remove Input suffix from type name if present.
81
+ */
82
+ function removeInputSuffix(typeName: string): string {
83
+ if (typeName.endsWith("Input")) {
84
+ return typeName.slice(0, -5);
85
+ }
86
+ return typeName;
87
+ }
88
+
89
+ /**
90
+ * Check if a type name follows the Input type naming convention.
91
+ */
92
+ export function isInputTypeName(name: string): boolean {
93
+ return name.endsWith("Input");
94
+ }
95
+
96
+ /**
97
+ * Build a field context (object or input) based on the parent type name.
98
+ */
99
+ export function buildFieldContext(
100
+ parentTypeName: string,
101
+ fieldPath: ReadonlyArray<string>,
102
+ isInput: boolean,
103
+ ): ObjectFieldContext | InputFieldContext {
104
+ return isInput
105
+ ? { kind: "inputField", parentTypeName, fieldPath }
106
+ : { kind: "objectField", parentTypeName, fieldPath };
107
+ }
108
+
109
+ /**
110
+ * Generate auto type name based on context.
111
+ */
112
+ export function generateAutoTypeName(context: AutoTypeNameContext): string {
113
+ switch (context.kind) {
114
+ case "objectField":
115
+ return generateObjectFieldTypeName(context);
116
+ case "inputField":
117
+ return generateInputFieldTypeName(context);
118
+ case "resolverArg":
119
+ return generateResolverArgTypeName(context);
120
+ case "resolverPayload":
121
+ return generateResolverPayloadTypeName(context);
122
+ }
123
+ }
124
+
125
+ function generateObjectFieldTypeName(context: ObjectFieldContext): string {
126
+ const pathParts = context.fieldPath.map(toPascalCase).join("");
127
+ return `${context.parentTypeName}${pathParts}`;
128
+ }
129
+
130
+ function generateInputFieldTypeName(context: InputFieldContext): string {
131
+ const baseName = removeInputSuffix(context.parentTypeName);
132
+ const pathParts = context.fieldPath.map(toPascalCase).join("");
133
+ return `${baseName}${pathParts}Input`;
134
+ }
135
+
136
+ function generateResolverArgTypeName(context: ResolverArgContext): string {
137
+ const fieldNamePascal = toPascalCase(context.fieldName);
138
+ // Avoid "InputInput" duplication when argName is "input"
139
+ const argNamePascal =
140
+ context.argName.toLowerCase() === "input"
141
+ ? ""
142
+ : toPascalCase(context.argName);
143
+ const pathParts = context.fieldPath.map(toPascalCase).join("");
144
+
145
+ if (context.resolverType === "field" && context.parentTypeName) {
146
+ return `${context.parentTypeName}${fieldNamePascal}${argNamePascal}${pathParts}Input`;
147
+ }
148
+
149
+ return `${fieldNamePascal}${argNamePascal}${pathParts}Input`;
150
+ }
151
+
152
+ function generateResolverPayloadTypeName(
153
+ context: ResolverPayloadContext,
154
+ ): string {
155
+ const fieldNamePascal = toPascalCase(context.fieldName);
156
+ const pathParts = context.fieldPath.map(toPascalCase).join("");
157
+
158
+ if (context.resolverType === "field" && context.parentTypeName) {
159
+ return `${context.parentTypeName}${fieldNamePascal}Payload${pathParts}`;
160
+ }
161
+
162
+ return `${fieldNamePascal}Payload${pathParts}`;
163
+ }
@@ -0,0 +1,21 @@
1
+ import type { TypenameFieldNameSet } from "./typename-types.js";
2
+
3
+ /**
4
+ * Pattern describing which typename fields are used for resolving types.
5
+ * - Single field: Set contains one field name (e.g., {"__typename"} or {"$typeName"})
6
+ * - Mixed: Set contains multiple field names (e.g., {"__typename", "$typeName"})
7
+ */
8
+ export interface ResolveTypeFieldPattern {
9
+ readonly usedFieldNames: TypenameFieldNameSet;
10
+ }
11
+
12
+ /**
13
+ * Information about an auto-generated __resolveType function for a Union type.
14
+ * The generated function returns `obj.__typename` to resolve the concrete type.
15
+ */
16
+ export interface AutoGeneratedResolveType {
17
+ /** The name of the Union type */
18
+ readonly unionTypeName: string;
19
+ /** The field pattern used to resolve the type name */
20
+ readonly fieldPattern: ResolveTypeFieldPattern;
21
+ }
@@ -0,0 +1,39 @@
1
+ import type {
2
+ ExtractResolversResult,
3
+ GraphQLFieldDefinition,
4
+ } from "../resolver-extractor/index.js";
5
+
6
+ export type ResolverType = "query" | "mutation" | "field";
7
+
8
+ export interface ResolverFieldInfo {
9
+ readonly field: GraphQLFieldDefinition;
10
+ readonly resolverType: ResolverType;
11
+ readonly parentTypeName: string | null;
12
+ }
13
+
14
+ /**
15
+ * Iterates over all resolver fields (query, mutation, field extensions) in a consistent manner.
16
+ * This eliminates the repeated iteration pattern across multiple collector functions.
17
+ */
18
+ export function forEachResolverField(
19
+ resolversResult: ExtractResolversResult,
20
+ visitor: (info: ResolverFieldInfo) => void,
21
+ ): void {
22
+ for (const field of resolversResult.queryFields.fields) {
23
+ visitor({ field, resolverType: "query", parentTypeName: null });
24
+ }
25
+
26
+ for (const field of resolversResult.mutationFields.fields) {
27
+ visitor({ field, resolverType: "mutation", parentTypeName: null });
28
+ }
29
+
30
+ for (const ext of resolversResult.typeExtensions) {
31
+ for (const field of ext.fields) {
32
+ visitor({
33
+ field,
34
+ resolverType: "field",
35
+ parentTypeName: ext.targetTypeName,
36
+ });
37
+ }
38
+ }
39
+ }
@@ -0,0 +1,230 @@
1
+ import type {
2
+ ExtractedTypeInfo,
3
+ FieldDefinition,
4
+ InlineObjectProperty,
5
+ } from "../type-extractor/types/index.js";
6
+ import {
7
+ findTypenameProperty,
8
+ type TypenameFieldInfo,
9
+ } from "./typename-types.js";
10
+
11
+ export type { TypenameFieldInfo } from "./typename-types.js";
12
+
13
+ export interface MemberTypenameInfo {
14
+ readonly memberTypeName: string | null;
15
+ readonly memberIndex: number;
16
+ readonly typenameInfo: TypenameFieldInfo | null;
17
+ readonly isInlineObject: boolean;
18
+ }
19
+
20
+ export interface TypenameExtractionResult {
21
+ readonly abstractTypeName: string;
22
+ readonly abstractTypeKind: "union" | "interface";
23
+ readonly members: ReadonlyArray<MemberTypenameInfo>;
24
+ readonly allMembersHaveTypename: boolean;
25
+ readonly hasInlineObjects: boolean;
26
+ }
27
+
28
+ export interface ExtractTypenamesParams {
29
+ readonly abstractType: ExtractedTypeInfo;
30
+ readonly typeMap: ReadonlyMap<string, ExtractedTypeInfo>;
31
+ }
32
+
33
+ function extractTypenameFromFields(
34
+ fields: ReadonlyArray<FieldDefinition>,
35
+ ): TypenameFieldInfo | null {
36
+ const found = findTypenameProperty(fields, (f) => f.name);
37
+ if (!found) {
38
+ return null;
39
+ }
40
+
41
+ const { property: field, fieldName } = found;
42
+
43
+ if (field.optional) {
44
+ return null;
45
+ }
46
+
47
+ const { tsType } = field;
48
+ if (tsType.nullable || tsType.kind !== "literal" || tsType.name === null) {
49
+ return null;
50
+ }
51
+
52
+ return { typeName: tsType.name, fieldName };
53
+ }
54
+
55
+ function extractTypenameFromInlineObjectProperties(
56
+ properties: ReadonlyArray<InlineObjectProperty>,
57
+ ): TypenameFieldInfo | null {
58
+ const found = findTypenameProperty(properties, (p) => p.propertyName);
59
+ if (!found) {
60
+ return null;
61
+ }
62
+
63
+ const { property, fieldName } = found;
64
+ const { propertyType: tsType } = property;
65
+
66
+ if (tsType.nullable || tsType.kind !== "literal" || tsType.name === null) {
67
+ return null;
68
+ }
69
+
70
+ return { typeName: tsType.name, fieldName };
71
+ }
72
+
73
+ function extractUnionMemberTypenames(
74
+ params: ExtractTypenamesParams,
75
+ ): TypenameExtractionResult {
76
+ const { abstractType, typeMap } = params;
77
+ const members: MemberTypenameInfo[] = [];
78
+ let allMembersHaveTypename = true;
79
+
80
+ const unionMembers = abstractType.unionMembers ?? [];
81
+ const inlineObjectMembers = abstractType.inlineObjectMembers ?? [];
82
+ const hasInlineObjects = inlineObjectMembers.length > 0;
83
+
84
+ let memberIndex = 0;
85
+
86
+ for (const memberName of unionMembers) {
87
+ const memberType = typeMap.get(memberName);
88
+
89
+ if (!memberType) {
90
+ members.push({
91
+ memberTypeName: memberName,
92
+ memberIndex,
93
+ typenameInfo: null,
94
+ isInlineObject: false,
95
+ });
96
+ allMembersHaveTypename = false;
97
+ memberIndex++;
98
+ continue;
99
+ }
100
+
101
+ const typenameInfo = extractTypenameFromFields(memberType.fields);
102
+
103
+ if (typenameInfo === null) {
104
+ allMembersHaveTypename = false;
105
+ }
106
+
107
+ members.push({
108
+ memberTypeName: memberName,
109
+ memberIndex,
110
+ typenameInfo,
111
+ isInlineObject: false,
112
+ });
113
+ memberIndex++;
114
+ }
115
+
116
+ for (const inlineObjectMember of inlineObjectMembers) {
117
+ const typenameInfo = extractTypenameFromInlineObjectProperties(
118
+ inlineObjectMember.properties,
119
+ );
120
+
121
+ if (typenameInfo === null) {
122
+ allMembersHaveTypename = false;
123
+ }
124
+
125
+ members.push({
126
+ memberTypeName: null,
127
+ memberIndex,
128
+ typenameInfo,
129
+ isInlineObject: true,
130
+ });
131
+ memberIndex++;
132
+ }
133
+
134
+ return {
135
+ abstractTypeName: abstractType.metadata.name,
136
+ abstractTypeKind: "union",
137
+ members,
138
+ allMembersHaveTypename,
139
+ hasInlineObjects,
140
+ };
141
+ }
142
+
143
+ function extractInterfaceImplementerTypenames(
144
+ params: ExtractTypenamesParams,
145
+ implementers: ReadonlyArray<ExtractedTypeInfo>,
146
+ ): TypenameExtractionResult {
147
+ const { abstractType } = params;
148
+ const members: MemberTypenameInfo[] = [];
149
+ let allMembersHaveTypename = true;
150
+ const hasInlineObjects = false;
151
+
152
+ for (let i = 0; i < implementers.length; i++) {
153
+ const implementer = implementers[i]!;
154
+ const typenameInfo = extractTypenameFromFields(implementer.fields);
155
+
156
+ if (typenameInfo === null) {
157
+ allMembersHaveTypename = false;
158
+ }
159
+
160
+ members.push({
161
+ memberTypeName: implementer.metadata.name,
162
+ memberIndex: i,
163
+ typenameInfo,
164
+ isInlineObject: false,
165
+ });
166
+ }
167
+
168
+ return {
169
+ abstractTypeName: abstractType.metadata.name,
170
+ abstractTypeKind: "interface",
171
+ members,
172
+ allMembersHaveTypename,
173
+ hasInlineObjects,
174
+ };
175
+ }
176
+
177
+ function extractTypenames(
178
+ params: ExtractTypenamesParams,
179
+ ): TypenameExtractionResult | null {
180
+ const { abstractType, typeMap } = params;
181
+
182
+ if (abstractType.metadata.kind === "union") {
183
+ return extractUnionMemberTypenames(params);
184
+ }
185
+
186
+ if (abstractType.metadata.kind === "graphqlInterface") {
187
+ const implementers: ExtractedTypeInfo[] = [];
188
+ for (const typeInfo of typeMap.values()) {
189
+ if (
190
+ typeInfo.implementedInterfaces?.includes(abstractType.metadata.name)
191
+ ) {
192
+ implementers.push(typeInfo);
193
+ }
194
+ }
195
+
196
+ if (implementers.length === 0) {
197
+ return null;
198
+ }
199
+
200
+ return extractInterfaceImplementerTypenames(params, implementers);
201
+ }
202
+
203
+ return null;
204
+ }
205
+
206
+ export interface CollectTypenameExtractionsParams {
207
+ readonly extractedTypes: ReadonlyArray<ExtractedTypeInfo>;
208
+ readonly typeMap: ReadonlyMap<string, ExtractedTypeInfo>;
209
+ }
210
+
211
+ export function collectTypenameExtractions(
212
+ params: CollectTypenameExtractionsParams,
213
+ ): ReadonlyArray<TypenameExtractionResult> {
214
+ const { extractedTypes, typeMap } = params;
215
+ const results: TypenameExtractionResult[] = [];
216
+
217
+ for (const typeInfo of extractedTypes) {
218
+ if (
219
+ typeInfo.metadata.kind === "union" ||
220
+ typeInfo.metadata.kind === "graphqlInterface"
221
+ ) {
222
+ const result = extractTypenames({ abstractType: typeInfo, typeMap });
223
+ if (result !== null) {
224
+ results.push(result);
225
+ }
226
+ }
227
+ }
228
+
229
+ return results;
230
+ }