@gqlkit-ts/cli 0.0.1 → 0.1.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 (325) hide show
  1. package/LICENSE +21 -0
  2. package/dist/auto-type-generator/auto-type-generator.d.ts +46 -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 +353 -0
  5. package/dist/auto-type-generator/auto-type-generator.js.map +1 -0
  6. package/dist/auto-type-generator/auto-type-generator.test.d.ts +2 -0
  7. package/dist/auto-type-generator/auto-type-generator.test.d.ts.map +1 -0
  8. package/dist/auto-type-generator/auto-type-generator.test.js +613 -0
  9. package/dist/auto-type-generator/auto-type-generator.test.js.map +1 -0
  10. package/dist/auto-type-generator/index.d.ts +4 -0
  11. package/dist/auto-type-generator/index.d.ts.map +1 -0
  12. package/dist/auto-type-generator/index.js +3 -0
  13. package/dist/auto-type-generator/index.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/name-collision-validator.test.d.ts +2 -0
  19. package/dist/auto-type-generator/name-collision-validator.test.d.ts.map +1 -0
  20. package/dist/auto-type-generator/name-collision-validator.test.js +358 -0
  21. package/dist/auto-type-generator/name-collision-validator.test.js.map +1 -0
  22. package/dist/auto-type-generator/naming-convention.d.ts +40 -0
  23. package/dist/auto-type-generator/naming-convention.d.ts.map +1 -0
  24. package/dist/auto-type-generator/naming-convention.js +59 -0
  25. package/dist/auto-type-generator/naming-convention.js.map +1 -0
  26. package/dist/auto-type-generator/naming-convention.test.d.ts +2 -0
  27. package/dist/auto-type-generator/naming-convention.test.d.ts.map +1 -0
  28. package/dist/auto-type-generator/naming-convention.test.js +132 -0
  29. package/dist/auto-type-generator/naming-convention.test.js.map +1 -0
  30. package/dist/cli.d.ts +2 -0
  31. package/dist/cli.d.ts.map +1 -0
  32. package/dist/cli.js +11 -0
  33. package/dist/cli.js.map +1 -0
  34. package/dist/commands/gen.d.ts +32 -0
  35. package/dist/commands/gen.d.ts.map +1 -0
  36. package/dist/commands/gen.js +101 -0
  37. package/dist/commands/gen.js.map +1 -0
  38. package/dist/commands/gen.test.d.ts +2 -0
  39. package/dist/commands/gen.test.d.ts.map +1 -0
  40. package/dist/commands/gen.test.js +226 -0
  41. package/dist/commands/gen.test.js.map +1 -0
  42. package/dist/commands/main.d.ts +12 -0
  43. package/dist/commands/main.d.ts.map +1 -0
  44. package/dist/commands/main.js +5 -0
  45. package/dist/commands/main.js.map +1 -0
  46. package/dist/config/define-config.d.ts +26 -0
  47. package/dist/config/define-config.d.ts.map +1 -0
  48. package/dist/config/define-config.js +27 -0
  49. package/dist/config/define-config.js.map +1 -0
  50. package/dist/config/index.d.ts +3 -0
  51. package/dist/config/index.d.ts.map +1 -0
  52. package/dist/config/index.js +2 -0
  53. package/dist/config/index.js.map +1 -0
  54. package/dist/config/types.d.ts +131 -0
  55. package/dist/config/types.d.ts.map +1 -0
  56. package/dist/config/types.js +2 -0
  57. package/dist/config/types.js.map +1 -0
  58. package/dist/config-loader/index.d.ts +3 -0
  59. package/dist/config-loader/index.d.ts.map +1 -0
  60. package/dist/config-loader/index.js +2 -0
  61. package/dist/config-loader/index.js.map +1 -0
  62. package/dist/config-loader/loader.d.ts +50 -0
  63. package/dist/config-loader/loader.d.ts.map +1 -0
  64. package/dist/config-loader/loader.js +78 -0
  65. package/dist/config-loader/loader.js.map +1 -0
  66. package/dist/config-loader/loader.test.d.ts +2 -0
  67. package/dist/config-loader/loader.test.d.ts.map +1 -0
  68. package/dist/config-loader/loader.test.js +123 -0
  69. package/dist/config-loader/loader.test.js.map +1 -0
  70. package/dist/config-loader/validator.d.ts +13 -0
  71. package/dist/config-loader/validator.d.ts.map +1 -0
  72. package/dist/config-loader/validator.js +497 -0
  73. package/dist/config-loader/validator.js.map +1 -0
  74. package/dist/config-loader/validator.test.d.ts +2 -0
  75. package/dist/config-loader/validator.test.d.ts.map +1 -0
  76. package/dist/config-loader/validator.test.js +846 -0
  77. package/dist/config-loader/validator.test.js.map +1 -0
  78. package/dist/gen-orchestrator/golden.test.d.ts +2 -0
  79. package/dist/gen-orchestrator/golden.test.d.ts.map +1 -0
  80. package/dist/gen-orchestrator/golden.test.js +102 -0
  81. package/dist/gen-orchestrator/golden.test.js.map +1 -0
  82. package/dist/gen-orchestrator/hook-executor/hook-executor.d.ts +25 -0
  83. package/dist/gen-orchestrator/hook-executor/hook-executor.d.ts.map +1 -0
  84. package/dist/gen-orchestrator/hook-executor/hook-executor.js +68 -0
  85. package/dist/gen-orchestrator/hook-executor/hook-executor.js.map +1 -0
  86. package/dist/gen-orchestrator/hook-executor/hook-executor.test.d.ts +2 -0
  87. package/dist/gen-orchestrator/hook-executor/hook-executor.test.d.ts.map +1 -0
  88. package/dist/gen-orchestrator/hook-executor/hook-executor.test.js +167 -0
  89. package/dist/gen-orchestrator/hook-executor/hook-executor.test.js.map +1 -0
  90. package/dist/gen-orchestrator/orchestrator.d.ts +30 -0
  91. package/dist/gen-orchestrator/orchestrator.d.ts.map +1 -0
  92. package/dist/gen-orchestrator/orchestrator.js +407 -0
  93. package/dist/gen-orchestrator/orchestrator.js.map +1 -0
  94. package/dist/gen-orchestrator/reporter/diagnostic-reporter.d.ts +9 -0
  95. package/dist/gen-orchestrator/reporter/diagnostic-reporter.d.ts.map +1 -0
  96. package/dist/gen-orchestrator/reporter/diagnostic-reporter.js +32 -0
  97. package/dist/gen-orchestrator/reporter/diagnostic-reporter.js.map +1 -0
  98. package/dist/gen-orchestrator/reporter/progress-reporter.d.ts +19 -0
  99. package/dist/gen-orchestrator/reporter/progress-reporter.d.ts.map +1 -0
  100. package/dist/gen-orchestrator/reporter/progress-reporter.js +38 -0
  101. package/dist/gen-orchestrator/reporter/progress-reporter.js.map +1 -0
  102. package/dist/gen-orchestrator/reporter/progress-reporter.test.d.ts +2 -0
  103. package/dist/gen-orchestrator/reporter/progress-reporter.test.d.ts.map +1 -0
  104. package/dist/gen-orchestrator/reporter/progress-reporter.test.js +74 -0
  105. package/dist/gen-orchestrator/reporter/progress-reporter.test.js.map +1 -0
  106. package/dist/gen-orchestrator/writer/file-writer.d.ts +13 -0
  107. package/dist/gen-orchestrator/writer/file-writer.d.ts.map +1 -0
  108. package/dist/gen-orchestrator/writer/file-writer.js +22 -0
  109. package/dist/gen-orchestrator/writer/file-writer.js.map +1 -0
  110. package/dist/index.d.ts +3 -0
  111. package/dist/index.d.ts.map +1 -0
  112. package/dist/index.js +2 -0
  113. package/dist/index.js.map +1 -0
  114. package/dist/resolver-extractor/extract-resolvers.d.ts +40 -0
  115. package/dist/resolver-extractor/extract-resolvers.d.ts.map +1 -0
  116. package/dist/resolver-extractor/extract-resolvers.js +2 -0
  117. package/dist/resolver-extractor/extract-resolvers.js.map +1 -0
  118. package/dist/resolver-extractor/extractor/define-api-extractor.d.ts +50 -0
  119. package/dist/resolver-extractor/extractor/define-api-extractor.d.ts.map +1 -0
  120. package/dist/resolver-extractor/extractor/define-api-extractor.js +685 -0
  121. package/dist/resolver-extractor/extractor/define-api-extractor.js.map +1 -0
  122. package/dist/resolver-extractor/index.d.ts +5 -0
  123. package/dist/resolver-extractor/index.d.ts.map +1 -0
  124. package/dist/resolver-extractor/index.js +2 -0
  125. package/dist/resolver-extractor/index.js.map +1 -0
  126. package/dist/resolver-extractor/validator/abstract-resolver-validator.d.ts +25 -0
  127. package/dist/resolver-extractor/validator/abstract-resolver-validator.d.ts.map +1 -0
  128. package/dist/resolver-extractor/validator/abstract-resolver-validator.js +172 -0
  129. package/dist/resolver-extractor/validator/abstract-resolver-validator.js.map +1 -0
  130. package/dist/resolver-extractor/validator/only-validator.d.ts +61 -0
  131. package/dist/resolver-extractor/validator/only-validator.d.ts.map +1 -0
  132. package/dist/resolver-extractor/validator/only-validator.js +76 -0
  133. package/dist/resolver-extractor/validator/only-validator.js.map +1 -0
  134. package/dist/resolver-extractor/validator/only-validator.test.d.ts +8 -0
  135. package/dist/resolver-extractor/validator/only-validator.test.d.ts.map +1 -0
  136. package/dist/resolver-extractor/validator/only-validator.test.js +352 -0
  137. package/dist/resolver-extractor/validator/only-validator.test.js.map +1 -0
  138. package/dist/schema-generator/builder/ast-builder.d.ts +7 -0
  139. package/dist/schema-generator/builder/ast-builder.d.ts.map +1 -0
  140. package/dist/schema-generator/builder/ast-builder.js +417 -0
  141. package/dist/schema-generator/builder/ast-builder.js.map +1 -0
  142. package/dist/schema-generator/builder/ast-builder.test.d.ts +2 -0
  143. package/dist/schema-generator/builder/ast-builder.test.d.ts.map +1 -0
  144. package/dist/schema-generator/builder/ast-builder.test.js +469 -0
  145. package/dist/schema-generator/builder/ast-builder.test.js.map +1 -0
  146. package/dist/schema-generator/emitter/code-emitter.d.ts +7 -0
  147. package/dist/schema-generator/emitter/code-emitter.d.ts.map +1 -0
  148. package/dist/schema-generator/emitter/code-emitter.js +201 -0
  149. package/dist/schema-generator/emitter/code-emitter.js.map +1 -0
  150. package/dist/schema-generator/emitter/sdl-emitter.d.ts +7 -0
  151. package/dist/schema-generator/emitter/sdl-emitter.d.ts.map +1 -0
  152. package/dist/schema-generator/emitter/sdl-emitter.js +11 -0
  153. package/dist/schema-generator/emitter/sdl-emitter.js.map +1 -0
  154. package/dist/schema-generator/generate-schema.d.ts +26 -0
  155. package/dist/schema-generator/generate-schema.d.ts.map +1 -0
  156. package/dist/schema-generator/generate-schema.js +76 -0
  157. package/dist/schema-generator/generate-schema.js.map +1 -0
  158. package/dist/schema-generator/index.d.ts +4 -0
  159. package/dist/schema-generator/index.d.ts.map +1 -0
  160. package/dist/schema-generator/index.js +2 -0
  161. package/dist/schema-generator/index.js.map +1 -0
  162. package/dist/schema-generator/integrator/result-integrator.d.ts +93 -0
  163. package/dist/schema-generator/integrator/result-integrator.d.ts.map +1 -0
  164. package/dist/schema-generator/integrator/result-integrator.js +396 -0
  165. package/dist/schema-generator/integrator/result-integrator.js.map +1 -0
  166. package/dist/schema-generator/pruner/schema-pruner.d.ts +16 -0
  167. package/dist/schema-generator/pruner/schema-pruner.d.ts.map +1 -0
  168. package/dist/schema-generator/pruner/schema-pruner.js +66 -0
  169. package/dist/schema-generator/pruner/schema-pruner.js.map +1 -0
  170. package/dist/schema-generator/resolver-collector/resolver-collector.d.ts +24 -0
  171. package/dist/schema-generator/resolver-collector/resolver-collector.d.ts.map +1 -0
  172. package/dist/schema-generator/resolver-collector/resolver-collector.js +61 -0
  173. package/dist/schema-generator/resolver-collector/resolver-collector.js.map +1 -0
  174. package/dist/shared/constants.d.ts +70 -0
  175. package/dist/shared/constants.d.ts.map +1 -0
  176. package/dist/shared/constants.js +128 -0
  177. package/dist/shared/constants.js.map +1 -0
  178. package/dist/shared/default-value-detector.d.ts +40 -0
  179. package/dist/shared/default-value-detector.d.ts.map +1 -0
  180. package/dist/shared/default-value-detector.js +124 -0
  181. package/dist/shared/default-value-detector.js.map +1 -0
  182. package/dist/shared/diagnostics.d.ts +4 -0
  183. package/dist/shared/diagnostics.d.ts.map +1 -0
  184. package/dist/shared/diagnostics.js +25 -0
  185. package/dist/shared/diagnostics.js.map +1 -0
  186. package/dist/shared/directive-definition-extractor.d.ts +64 -0
  187. package/dist/shared/directive-definition-extractor.d.ts.map +1 -0
  188. package/dist/shared/directive-definition-extractor.js +399 -0
  189. package/dist/shared/directive-definition-extractor.js.map +1 -0
  190. package/dist/shared/directive-detector.d.ts +102 -0
  191. package/dist/shared/directive-detector.d.ts.map +1 -0
  192. package/dist/shared/directive-detector.js +422 -0
  193. package/dist/shared/directive-detector.js.map +1 -0
  194. package/dist/shared/file-scanner.d.ts +25 -0
  195. package/dist/shared/file-scanner.d.ts.map +1 -0
  196. package/dist/shared/file-scanner.js +99 -0
  197. package/dist/shared/file-scanner.js.map +1 -0
  198. package/dist/shared/file-scanner.test.d.ts +2 -0
  199. package/dist/shared/file-scanner.test.d.ts.map +1 -0
  200. package/dist/shared/file-scanner.test.js +138 -0
  201. package/dist/shared/file-scanner.test.js.map +1 -0
  202. package/dist/shared/index.d.ts +10 -0
  203. package/dist/shared/index.d.ts.map +1 -0
  204. package/dist/shared/index.js +8 -0
  205. package/dist/shared/index.js.map +1 -0
  206. package/dist/shared/inline-object-extractor.d.ts +13 -0
  207. package/dist/shared/inline-object-extractor.d.ts.map +1 -0
  208. package/dist/shared/inline-object-extractor.js +65 -0
  209. package/dist/shared/inline-object-extractor.js.map +1 -0
  210. package/dist/shared/inline-object-utils.d.ts +7 -0
  211. package/dist/shared/inline-object-utils.d.ts.map +1 -0
  212. package/dist/shared/inline-object-utils.js +23 -0
  213. package/dist/shared/inline-object-utils.js.map +1 -0
  214. package/dist/shared/interface-detector.d.ts +22 -0
  215. package/dist/shared/interface-detector.d.ts.map +1 -0
  216. package/dist/shared/interface-detector.js +90 -0
  217. package/dist/shared/interface-detector.js.map +1 -0
  218. package/dist/shared/interface-validator.d.ts +9 -0
  219. package/dist/shared/interface-validator.d.ts.map +1 -0
  220. package/dist/shared/interface-validator.js +152 -0
  221. package/dist/shared/interface-validator.js.map +1 -0
  222. package/dist/shared/interface-validator.test.d.ts +2 -0
  223. package/dist/shared/interface-validator.test.d.ts.map +1 -0
  224. package/dist/shared/interface-validator.test.js +145 -0
  225. package/dist/shared/interface-validator.test.js.map +1 -0
  226. package/dist/shared/metadata-detector.d.ts +65 -0
  227. package/dist/shared/metadata-detector.d.ts.map +1 -0
  228. package/dist/shared/metadata-detector.js +333 -0
  229. package/dist/shared/metadata-detector.js.map +1 -0
  230. package/dist/shared/program-factory.d.ts +14 -0
  231. package/dist/shared/program-factory.d.ts.map +1 -0
  232. package/dist/shared/program-factory.js +29 -0
  233. package/dist/shared/program-factory.js.map +1 -0
  234. package/dist/shared/source-location.d.ts +11 -0
  235. package/dist/shared/source-location.d.ts.map +1 -0
  236. package/dist/shared/source-location.js +15 -0
  237. package/dist/shared/source-location.js.map +1 -0
  238. package/dist/shared/tsconfig-loader.d.ts +13 -0
  239. package/dist/shared/tsconfig-loader.d.ts.map +1 -0
  240. package/dist/shared/tsconfig-loader.js +90 -0
  241. package/dist/shared/tsconfig-loader.js.map +1 -0
  242. package/dist/shared/tsdoc-parser.d.ts +12 -0
  243. package/dist/shared/tsdoc-parser.d.ts.map +1 -0
  244. package/dist/shared/tsdoc-parser.js +101 -0
  245. package/dist/shared/tsdoc-parser.js.map +1 -0
  246. package/dist/shared/type-converter.d.ts +3 -0
  247. package/dist/shared/type-converter.d.ts.map +1 -0
  248. package/dist/shared/type-converter.js +72 -0
  249. package/dist/shared/type-converter.js.map +1 -0
  250. package/dist/shared/typescript-utils.d.ts +55 -0
  251. package/dist/shared/typescript-utils.d.ts.map +1 -0
  252. package/dist/shared/typescript-utils.js +149 -0
  253. package/dist/shared/typescript-utils.js.map +1 -0
  254. package/dist/type-extractor/collector/result-collector.d.ts +7 -0
  255. package/dist/type-extractor/collector/result-collector.d.ts.map +1 -0
  256. package/dist/type-extractor/collector/result-collector.js +35 -0
  257. package/dist/type-extractor/collector/result-collector.js.map +1 -0
  258. package/dist/type-extractor/collector/scalar-collector.d.ts +108 -0
  259. package/dist/type-extractor/collector/scalar-collector.d.ts.map +1 -0
  260. package/dist/type-extractor/collector/scalar-collector.js +133 -0
  261. package/dist/type-extractor/collector/scalar-collector.js.map +1 -0
  262. package/dist/type-extractor/converter/field-eligibility.d.ts +34 -0
  263. package/dist/type-extractor/converter/field-eligibility.d.ts.map +1 -0
  264. package/dist/type-extractor/converter/field-eligibility.js +89 -0
  265. package/dist/type-extractor/converter/field-eligibility.js.map +1 -0
  266. package/dist/type-extractor/converter/graphql-converter.d.ts +7 -0
  267. package/dist/type-extractor/converter/graphql-converter.d.ts.map +1 -0
  268. package/dist/type-extractor/converter/graphql-converter.js +299 -0
  269. package/dist/type-extractor/converter/graphql-converter.js.map +1 -0
  270. package/dist/type-extractor/extract-types.d.ts +2 -0
  271. package/dist/type-extractor/extract-types.d.ts.map +1 -0
  272. package/dist/type-extractor/extract-types.js +2 -0
  273. package/dist/type-extractor/extract-types.js.map +1 -0
  274. package/dist/type-extractor/extractor/type-extractor.d.ts +27 -0
  275. package/dist/type-extractor/extractor/type-extractor.d.ts.map +1 -0
  276. package/dist/type-extractor/extractor/type-extractor.js +1116 -0
  277. package/dist/type-extractor/extractor/type-extractor.js.map +1 -0
  278. package/dist/type-extractor/index.d.ts +4 -0
  279. package/dist/type-extractor/index.d.ts.map +1 -0
  280. package/dist/type-extractor/index.js +2 -0
  281. package/dist/type-extractor/index.js.map +1 -0
  282. package/dist/type-extractor/types/diagnostics.d.ts +17 -0
  283. package/dist/type-extractor/types/diagnostics.d.ts.map +1 -0
  284. package/dist/type-extractor/types/diagnostics.js +2 -0
  285. package/dist/type-extractor/types/diagnostics.js.map +1 -0
  286. package/dist/type-extractor/types/graphql.d.ts +40 -0
  287. package/dist/type-extractor/types/graphql.d.ts.map +1 -0
  288. package/dist/type-extractor/types/graphql.js +2 -0
  289. package/dist/type-extractor/types/graphql.js.map +1 -0
  290. package/dist/type-extractor/types/index.d.ts +5 -0
  291. package/dist/type-extractor/types/index.d.ts.map +1 -0
  292. package/dist/type-extractor/types/index.js +2 -0
  293. package/dist/type-extractor/types/index.js.map +1 -0
  294. package/dist/type-extractor/types/typescript.d.ts +86 -0
  295. package/dist/type-extractor/types/typescript.d.ts.map +1 -0
  296. package/dist/type-extractor/types/typescript.js +2 -0
  297. package/dist/type-extractor/types/typescript.js.map +1 -0
  298. package/dist/type-extractor/types/typescript.test.d.ts +2 -0
  299. package/dist/type-extractor/types/typescript.test.d.ts.map +1 -0
  300. package/dist/type-extractor/types/typescript.test.js +287 -0
  301. package/dist/type-extractor/types/typescript.test.js.map +1 -0
  302. package/dist/type-extractor/validator/type-validator.d.ts +11 -0
  303. package/dist/type-extractor/validator/type-validator.d.ts.map +1 -0
  304. package/dist/type-extractor/validator/type-validator.js +53 -0
  305. package/dist/type-extractor/validator/type-validator.js.map +1 -0
  306. package/docs/configuration.md +163 -0
  307. package/docs/getting-started.md +117 -0
  308. package/docs/index.md +32 -0
  309. package/docs/integration/apollo.md +109 -0
  310. package/docs/integration/yoga.md +108 -0
  311. package/docs/schema/abstract-resolvers.md +146 -0
  312. package/docs/schema/directives.md +196 -0
  313. package/docs/schema/documentation.md +176 -0
  314. package/docs/schema/enums.md +162 -0
  315. package/docs/schema/fields.md +184 -0
  316. package/docs/schema/index.md +38 -0
  317. package/docs/schema/inputs.md +277 -0
  318. package/docs/schema/interfaces.md +178 -0
  319. package/docs/schema/objects.md +186 -0
  320. package/docs/schema/queries-mutations.md +205 -0
  321. package/docs/schema/scalars.md +194 -0
  322. package/docs/schema/unions.md +90 -0
  323. package/docs/what-is-gqlkit.md +22 -0
  324. package/package.json +59 -7
  325. package/README.md +0 -45
@@ -0,0 +1,399 @@
1
+ /**
2
+ * Directive definition extractor.
3
+ *
4
+ * This module provides functions to extract directive definitions from
5
+ * TypeScript type aliases that use the Directive<Name, Args, Location> type.
6
+ */
7
+ import ts from "typescript";
8
+ import { METADATA_PROPERTIES } from "./constants.js";
9
+ import { getActualMetadataType } from "./metadata-detector.js";
10
+ import { getNonNullableTypes, isNullableUnion, isNullOrUndefined, } from "./typescript-utils.js";
11
+ const DIRECTIVE_NAME_PROPERTY = METADATA_PROPERTIES.DIRECTIVE_NAME;
12
+ const DIRECTIVE_ARGS_PROPERTY = METADATA_PROPERTIES.DIRECTIVE_ARGS;
13
+ const DIRECTIVE_LOCATION_PROPERTY = METADATA_PROPERTIES.DIRECTIVE_LOCATION;
14
+ /**
15
+ * Checks if a type is a Directive type (has $directiveName, $directiveArgs, $directiveLocation properties).
16
+ */
17
+ function isDirectiveType(type) {
18
+ const nameProp = type.getProperty(DIRECTIVE_NAME_PROPERTY);
19
+ const argsProp = type.getProperty(DIRECTIVE_ARGS_PROPERTY);
20
+ return nameProp !== undefined && argsProp !== undefined;
21
+ }
22
+ /**
23
+ * Extracts the directive name from a Directive type.
24
+ */
25
+ function extractDirectiveName(type, checker) {
26
+ const nameProp = type.getProperty(DIRECTIVE_NAME_PROPERTY);
27
+ if (!nameProp) {
28
+ return null;
29
+ }
30
+ const rawNameType = checker.getTypeOfSymbol(nameProp);
31
+ const nameType = getActualMetadataType(rawNameType);
32
+ if (!nameType || !nameType.isStringLiteral()) {
33
+ return null;
34
+ }
35
+ return nameType.value;
36
+ }
37
+ /**
38
+ * Extracts directive locations from a Directive type.
39
+ */
40
+ function extractDirectiveLocations(type, checker) {
41
+ const locationProp = type.getProperty(DIRECTIVE_LOCATION_PROPERTY);
42
+ if (!locationProp) {
43
+ return ["FIELD_DEFINITION"];
44
+ }
45
+ const rawLocationType = checker.getTypeOfSymbol(locationProp);
46
+ const locations = [];
47
+ // Handle tuple types like ["FIELD_DEFINITION", "OBJECT"]
48
+ if (checker.isTupleType(rawLocationType)) {
49
+ const typeArgs = checker.getTypeArguments(rawLocationType);
50
+ for (const arg of typeArgs) {
51
+ if (arg.flags & ts.TypeFlags.Undefined) {
52
+ continue;
53
+ }
54
+ if (arg.isStringLiteral()) {
55
+ const value = arg.value;
56
+ if (isValidLocation(value)) {
57
+ locations.push(value);
58
+ }
59
+ }
60
+ }
61
+ if (locations.length > 0) {
62
+ return locations;
63
+ }
64
+ }
65
+ // Handle array types
66
+ if (checker.isArrayType(rawLocationType)) {
67
+ const typeArgs = checker.getTypeArguments(rawLocationType);
68
+ if (typeArgs.length > 0 && typeArgs[0]) {
69
+ const elemType = typeArgs[0];
70
+ if (elemType.isUnion()) {
71
+ for (const member of elemType.types) {
72
+ if (member.flags & ts.TypeFlags.Undefined) {
73
+ continue;
74
+ }
75
+ if (member.isStringLiteral()) {
76
+ const value = member.value;
77
+ if (isValidLocation(value)) {
78
+ locations.push(value);
79
+ }
80
+ }
81
+ }
82
+ if (locations.length > 0) {
83
+ return locations;
84
+ }
85
+ }
86
+ }
87
+ }
88
+ // Handle union types like "OBJECT" | "FIELD_DEFINITION" | undefined
89
+ if (rawLocationType.isUnion()) {
90
+ for (const member of rawLocationType.types) {
91
+ if (member.flags & ts.TypeFlags.Undefined) {
92
+ continue;
93
+ }
94
+ if (member.isStringLiteral()) {
95
+ const value = member.value;
96
+ if (isValidLocation(value)) {
97
+ locations.push(value);
98
+ }
99
+ }
100
+ }
101
+ }
102
+ else if (rawLocationType.isStringLiteral()) {
103
+ const value = rawLocationType.value;
104
+ if (isValidLocation(value)) {
105
+ locations.push(value);
106
+ }
107
+ }
108
+ else {
109
+ // Try to unwrap optional type (T | undefined where T is a single type)
110
+ const locationType = getActualMetadataType(rawLocationType);
111
+ if (locationType?.isStringLiteral()) {
112
+ const value = locationType.value;
113
+ if (isValidLocation(value)) {
114
+ locations.push(value);
115
+ }
116
+ }
117
+ }
118
+ return locations.length > 0 ? locations : ["FIELD_DEFINITION"];
119
+ }
120
+ const VALID_LOCATIONS = new Set([
121
+ "SCHEMA",
122
+ "SCALAR",
123
+ "OBJECT",
124
+ "FIELD_DEFINITION",
125
+ "ARGUMENT_DEFINITION",
126
+ "INTERFACE",
127
+ "UNION",
128
+ "ENUM",
129
+ "ENUM_VALUE",
130
+ "INPUT_OBJECT",
131
+ "INPUT_FIELD_DEFINITION",
132
+ ]);
133
+ function isValidLocation(value) {
134
+ return VALID_LOCATIONS.has(value);
135
+ }
136
+ /**
137
+ * Converts a TypeScript type to a GraphQL field type.
138
+ */
139
+ function convertToGraphQLType(type, checker) {
140
+ // Handle type parameters by getting their constraint
141
+ if (type.flags & ts.TypeFlags.TypeParameter) {
142
+ const constraint = checker.getBaseConstraintOfType(type);
143
+ if (constraint) {
144
+ return convertToGraphQLType(constraint, checker);
145
+ }
146
+ }
147
+ // Check for type alias (e.g., Role = "USER" | "ADMIN")
148
+ if (type.aliasSymbol) {
149
+ const aliasName = type.aliasSymbol.getName();
150
+ if (aliasName && aliasName !== "__type") {
151
+ return {
152
+ typeName: aliasName,
153
+ nullable: false,
154
+ list: false,
155
+ listItemNullable: null,
156
+ };
157
+ }
158
+ }
159
+ if (type.flags & ts.TypeFlags.String ||
160
+ type.flags & ts.TypeFlags.StringLiteral) {
161
+ return {
162
+ typeName: "String",
163
+ nullable: false,
164
+ list: false,
165
+ listItemNullable: null,
166
+ };
167
+ }
168
+ if (type.flags & ts.TypeFlags.Number ||
169
+ type.flags & ts.TypeFlags.NumberLiteral) {
170
+ return {
171
+ typeName: "Float",
172
+ nullable: false,
173
+ list: false,
174
+ listItemNullable: null,
175
+ };
176
+ }
177
+ if (type.flags & ts.TypeFlags.Boolean ||
178
+ type.flags & ts.TypeFlags.BooleanLiteral) {
179
+ return {
180
+ typeName: "Boolean",
181
+ nullable: false,
182
+ list: false,
183
+ listItemNullable: null,
184
+ };
185
+ }
186
+ if (type.isUnion()) {
187
+ const nonNullTypes = getNonNullableTypes(type);
188
+ const nullable = isNullableUnion(type);
189
+ if (nonNullTypes.length === 1 && nonNullTypes[0]) {
190
+ const innerType = convertToGraphQLType(nonNullTypes[0], checker);
191
+ if (innerType) {
192
+ return { ...innerType, nullable };
193
+ }
194
+ }
195
+ if (nonNullTypes.length > 0 &&
196
+ nonNullTypes.every((t) => t.isStringLiteral())) {
197
+ return {
198
+ typeName: "String",
199
+ nullable,
200
+ list: false,
201
+ listItemNullable: null,
202
+ };
203
+ }
204
+ }
205
+ if (checker.isArrayType(type) || checker.isTupleType(type)) {
206
+ const typeArgs = checker.getTypeArguments(type);
207
+ if (typeArgs.length > 0 && typeArgs[0]) {
208
+ let elementType = typeArgs[0];
209
+ if (checker.isTupleType(type) && typeArgs.length > 1) {
210
+ const nonNullTypes = typeArgs.filter((t) => !isNullOrUndefined(t));
211
+ if (nonNullTypes.length > 0 && nonNullTypes[0]) {
212
+ elementType = nonNullTypes[0];
213
+ }
214
+ }
215
+ // Check if element type is a type alias (e.g., Role = "USER" | "ADMIN")
216
+ if (elementType.aliasSymbol) {
217
+ const aliasName = elementType.aliasSymbol.getName();
218
+ if (aliasName && aliasName !== "__type") {
219
+ return {
220
+ typeName: aliasName,
221
+ nullable: false,
222
+ list: true,
223
+ listItemNullable: false,
224
+ };
225
+ }
226
+ }
227
+ if (elementType.isUnion()) {
228
+ const nonNullMembers = getNonNullableTypes(elementType);
229
+ if (nonNullMembers.length > 0 &&
230
+ nonNullMembers.every((t) => t.isStringLiteral())) {
231
+ return {
232
+ typeName: "String",
233
+ nullable: false,
234
+ list: true,
235
+ listItemNullable: false,
236
+ };
237
+ }
238
+ const hasNull = isNullableUnion(elementType);
239
+ if (nonNullMembers.length === 1 && nonNullMembers[0]) {
240
+ const innerType = convertToGraphQLType(nonNullMembers[0], checker);
241
+ if (innerType && !innerType.list) {
242
+ return {
243
+ typeName: innerType.typeName,
244
+ nullable: false,
245
+ list: true,
246
+ listItemNullable: hasNull,
247
+ };
248
+ }
249
+ }
250
+ }
251
+ const innerType = convertToGraphQLType(elementType, checker);
252
+ if (innerType && !innerType.list) {
253
+ return {
254
+ typeName: innerType.typeName,
255
+ nullable: false,
256
+ list: true,
257
+ listItemNullable: innerType.nullable,
258
+ };
259
+ }
260
+ }
261
+ return {
262
+ typeName: "String",
263
+ nullable: false,
264
+ list: true,
265
+ listItemNullable: false,
266
+ };
267
+ }
268
+ if (type.symbol) {
269
+ const symbolName = type.symbol.getName();
270
+ if (symbolName !== "__type" && symbolName !== "") {
271
+ return {
272
+ typeName: symbolName,
273
+ nullable: false,
274
+ list: false,
275
+ listItemNullable: null,
276
+ };
277
+ }
278
+ }
279
+ return null;
280
+ }
281
+ /**
282
+ * Extracts directive argument definitions from a Directive type.
283
+ */
284
+ function extractDirectiveArgs(type, checker, sourceFile, line) {
285
+ const argsProp = type.getProperty(DIRECTIVE_ARGS_PROPERTY);
286
+ if (!argsProp) {
287
+ return { args: [], errors: [] };
288
+ }
289
+ const rawArgsType = checker.getTypeOfSymbol(argsProp);
290
+ let argsType = getActualMetadataType(rawArgsType);
291
+ if (!argsType) {
292
+ return { args: [], errors: [] };
293
+ }
294
+ // If argsType is a type parameter, get its constraint
295
+ if (argsType.flags & ts.TypeFlags.TypeParameter) {
296
+ const constraint = checker.getBaseConstraintOfType(argsType);
297
+ if (constraint) {
298
+ argsType = constraint;
299
+ }
300
+ }
301
+ const args = [];
302
+ const errors = [];
303
+ const properties = argsType.getProperties();
304
+ for (const prop of properties) {
305
+ const propName = prop.getName();
306
+ const propType = checker.getTypeOfSymbol(prop);
307
+ const graphqlType = convertToGraphQLType(propType, checker);
308
+ if (graphqlType) {
309
+ args.push({
310
+ name: propName,
311
+ type: graphqlType,
312
+ description: null,
313
+ });
314
+ }
315
+ else {
316
+ errors.push({
317
+ code: "UNRESOLVABLE_ARG_TYPE",
318
+ message: `Cannot resolve argument type for '${propName}'`,
319
+ sourceFile,
320
+ line,
321
+ });
322
+ }
323
+ }
324
+ return { args, errors };
325
+ }
326
+ /**
327
+ * Extracts directive definitions from a TypeScript program.
328
+ *
329
+ * This function analyzes exported type aliases to find those that use
330
+ * the Directive<Name, Args, Location> type and extracts directive definitions.
331
+ *
332
+ * @param program - The TypeScript program
333
+ * @param sourceFiles - The source files to analyze
334
+ * @returns Extraction result with definitions and errors
335
+ */
336
+ export function extractDirectiveDefinitions(program, sourceFiles) {
337
+ const checker = program.getTypeChecker();
338
+ const definitions = [];
339
+ const errors = [];
340
+ for (const filePath of sourceFiles) {
341
+ const sourceFile = program.getSourceFile(filePath);
342
+ if (!sourceFile) {
343
+ continue;
344
+ }
345
+ ts.forEachChild(sourceFile, (node) => {
346
+ if (!ts.isTypeAliasDeclaration(node)) {
347
+ return;
348
+ }
349
+ const modifiers = ts.getCombinedModifierFlags(node);
350
+ const isExported = (modifiers & ts.ModifierFlags.Export) !== 0;
351
+ if (!isExported) {
352
+ return;
353
+ }
354
+ const symbol = checker.getSymbolAtLocation(node.name);
355
+ if (!symbol) {
356
+ return;
357
+ }
358
+ const type = checker.getDeclaredTypeOfSymbol(symbol);
359
+ if (!isDirectiveType(type)) {
360
+ return;
361
+ }
362
+ const directiveName = extractDirectiveName(type, checker);
363
+ if (!directiveName) {
364
+ return;
365
+ }
366
+ const typeAliasName = node.name.getText(sourceFile);
367
+ const { line } = sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile));
368
+ const locations = extractDirectiveLocations(type, checker);
369
+ const argsResult = extractDirectiveArgs(type, checker, filePath, line + 1);
370
+ const description = extractDescription(node, checker);
371
+ definitions.push({
372
+ name: directiveName,
373
+ typeAliasName,
374
+ args: argsResult.args,
375
+ locations,
376
+ sourceFile: filePath,
377
+ line: line + 1,
378
+ description,
379
+ });
380
+ errors.push(...argsResult.errors);
381
+ });
382
+ }
383
+ return { definitions, errors };
384
+ }
385
+ /**
386
+ * Extracts description from TSDoc comments.
387
+ */
388
+ function extractDescription(node, checker) {
389
+ const symbol = checker.getSymbolAtLocation(node.name);
390
+ if (!symbol) {
391
+ return null;
392
+ }
393
+ const documentation = symbol.getDocumentationComment(checker);
394
+ if (documentation.length === 0) {
395
+ return null;
396
+ }
397
+ return documentation.map((d) => d.text).join("\n");
398
+ }
399
+ //# sourceMappingURL=directive-definition-extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"directive-definition-extractor.js","sourceRoot":"","sources":["../../src/shared/directive-definition-extractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Directive metadata detector.
3
+ *
4
+ * This module provides functions to detect directive metadata embedded
5
+ * in TypeScript intersection types using the $gqlkitFieldMeta or $gqlkitTypeMeta properties.
6
+ */
7
+ import ts from "typescript";
8
+ /**
9
+ * Represents a single directive argument value.
10
+ */
11
+ export type DirectiveArgumentValue = {
12
+ readonly kind: "string";
13
+ readonly value: string;
14
+ } | {
15
+ readonly kind: "number";
16
+ readonly value: number;
17
+ } | {
18
+ readonly kind: "boolean";
19
+ readonly value: boolean;
20
+ } | {
21
+ readonly kind: "null";
22
+ readonly value: null;
23
+ } | {
24
+ readonly kind: "enum";
25
+ readonly value: string;
26
+ } | {
27
+ readonly kind: "list";
28
+ readonly values: ReadonlyArray<DirectiveArgumentValue>;
29
+ } | {
30
+ readonly kind: "object";
31
+ readonly fields: ReadonlyArray<DirectiveArgument>;
32
+ };
33
+ /**
34
+ * Represents a directive argument (name-value pair).
35
+ */
36
+ export interface DirectiveArgument {
37
+ readonly name: string;
38
+ readonly value: DirectiveArgumentValue;
39
+ }
40
+ /**
41
+ * Represents a detected directive with its name and arguments.
42
+ */
43
+ export interface DirectiveInfo {
44
+ readonly name: string;
45
+ readonly args: ReadonlyArray<DirectiveArgument>;
46
+ }
47
+ /**
48
+ * Error codes for directive detection.
49
+ */
50
+ export type DirectiveDetectionErrorCode = "EMPTY_DIRECTIVE_NAME" | "UNRESOLVABLE_ARGUMENT";
51
+ /**
52
+ * Error information for directive detection.
53
+ */
54
+ export interface DirectiveDetectionError {
55
+ readonly code: DirectiveDetectionErrorCode;
56
+ readonly message: string;
57
+ }
58
+ /**
59
+ * Result of directive detection.
60
+ */
61
+ export interface DirectiveDetectionResult {
62
+ readonly directives: ReadonlyArray<DirectiveInfo>;
63
+ readonly errors: ReadonlyArray<DirectiveDetectionError>;
64
+ }
65
+ /**
66
+ * Resolves a directive argument value from a TypeScript type.
67
+ */
68
+ export declare function resolveArgumentValue(type: ts.Type, checker: ts.TypeChecker): DirectiveArgumentValue | null;
69
+ /**
70
+ * Detects directive metadata from a TypeScript type.
71
+ *
72
+ * This function analyzes TypeScript types to detect directive metadata:
73
+ * - Intersection types with " $gqlkitFieldMeta" or " $gqlkitTypeMeta" property indicate directives
74
+ * - Each directive has a name and optional arguments
75
+ * - Arguments are resolved from TypeScript literal types
76
+ *
77
+ * @param type - The TypeScript type to analyze
78
+ * @param checker - The TypeScript type checker
79
+ * @returns Detection result with directives and any errors
80
+ */
81
+ export declare function detectDirectiveMetadata(type: ts.Type, checker: ts.TypeChecker): DirectiveDetectionResult;
82
+ /**
83
+ * Extracts directives from a tuple or array type.
84
+ * Use this to extract directives from a type like [AuthDirective, CacheDirective].
85
+ */
86
+ export declare function extractDirectivesFromType(directivesType: ts.Type, checker: ts.TypeChecker): DirectiveDetectionResult;
87
+ /**
88
+ * Checks if a type is wrapped with GqlField or GqlObject.
89
+ */
90
+ export declare function hasDirectiveMetadata(type: ts.Type): boolean;
91
+ /**
92
+ * Unwraps a GqlField or GqlObject type and returns the base type.
93
+ * For GqlField<T, Meta> which is T & { " $gqlkitFieldMeta"?: ...; " $gqlkitOriginalType"?: T },
94
+ * this extracts and returns T from the $gqlkitOriginalType property.
95
+ *
96
+ * The $gqlkitOriginalType property preserves nullability information that would otherwise
97
+ * be lost due to TypeScript's union type normalization.
98
+ *
99
+ * If the type is not wrapped with GqlField or GqlObject, returns the original type.
100
+ */
101
+ export declare function unwrapDirectiveType(type: ts.Type, checker: ts.TypeChecker): ts.Type;
102
+ //# sourceMappingURL=directive-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"directive-detector.d.ts","sourceRoot":"","sources":["../../src/shared/directive-detector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,YAAY,CAAC;AAoB5B;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAC9B;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GACrD;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAA;CAAE,GAC/C;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACjD;IACE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,sBAAsB,CAAC,CAAC;CACxD,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAC;CACnD,CAAC;AAEN;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,sBAAsB,CAAC;CACxC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAC;CACjD;AAED;;GAEG;AACH,MAAM,MAAM,2BAA2B,GACnC,sBAAsB,GACtB,uBAAuB,CAAC;AAE5B;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EAAE,2BAA2B,CAAC;IAC3C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;IAClD,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,uBAAuB,CAAC,CAAC;CACzD;AASD;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,EAAE,CAAC,IAAI,EACb,OAAO,EAAE,EAAE,CAAC,WAAW,GACtB,sBAAsB,GAAG,IAAI,CA+F/B;AAwFD;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,EAAE,CAAC,IAAI,EACb,OAAO,EAAE,EAAE,CAAC,WAAW,GACtB,wBAAwB,CA+B1B;AA4BD;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,cAAc,EAAE,EAAE,CAAC,IAAI,EACvB,OAAO,EAAE,EAAE,CAAC,WAAW,GACtB,wBAAwB,CA8C1B;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,OAAO,CAgD3D;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,EAAE,CAAC,IAAI,EACb,OAAO,EAAE,EAAE,CAAC,WAAW,GACtB,EAAE,CAAC,IAAI,CA4FT"}