@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,422 @@
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
+ import { METADATA_PROPERTIES, RUNTIME_TYPE_NAMES } from "./constants.js";
9
+ import { getActualMetadataType } from "./metadata-detector.js";
10
+ const FIELD_META_PROPERTY = METADATA_PROPERTIES.FIELD_META;
11
+ const TYPE_META_PROPERTY = METADATA_PROPERTIES.TYPE_META;
12
+ const DIRECTIVE_NAME_PROPERTY = METADATA_PROPERTIES.DIRECTIVE_NAME;
13
+ const DIRECTIVE_ARGS_PROPERTY = METADATA_PROPERTIES.DIRECTIVE_ARGS;
14
+ const ORIGINAL_TYPE_PROPERTY = METADATA_PROPERTIES.ORIGINAL_TYPE;
15
+ /**
16
+ * Gets the metadata property from a type, checking both field and type meta properties.
17
+ */
18
+ function getMetaProperty(type) {
19
+ return (type.getProperty(FIELD_META_PROPERTY) ??
20
+ type.getProperty(TYPE_META_PROPERTY));
21
+ }
22
+ function createEmptyResult() {
23
+ return {
24
+ directives: [],
25
+ errors: [],
26
+ };
27
+ }
28
+ /**
29
+ * Resolves a directive argument value from a TypeScript type.
30
+ */
31
+ export function resolveArgumentValue(type, checker) {
32
+ if (type.flags & ts.TypeFlags.Null) {
33
+ return { kind: "null", value: null };
34
+ }
35
+ if (type.isStringLiteral()) {
36
+ // Check enum pattern: starts with uppercase and contains only uppercase letters, digits, and underscores
37
+ if (/^[A-Z][A-Z0-9_]*$/.test(type.value)) {
38
+ return { kind: "enum", value: type.value };
39
+ }
40
+ return { kind: "string", value: type.value };
41
+ }
42
+ if (type.isNumberLiteral()) {
43
+ return { kind: "number", value: type.value };
44
+ }
45
+ if (type.flags & ts.TypeFlags.BooleanLiteral) {
46
+ const intrinsicName = type
47
+ .intrinsicName;
48
+ if (intrinsicName === "true") {
49
+ return { kind: "boolean", value: true };
50
+ }
51
+ if (intrinsicName === "false") {
52
+ return { kind: "boolean", value: false };
53
+ }
54
+ }
55
+ if (checker.isTupleType(type)) {
56
+ const typeArgs = checker.getTypeArguments(type);
57
+ const values = [];
58
+ for (const arg of typeArgs) {
59
+ const resolved = resolveArgumentValue(arg, checker);
60
+ if (resolved) {
61
+ values.push(resolved);
62
+ }
63
+ }
64
+ return { kind: "list", values };
65
+ }
66
+ if (checker.isArrayType(type)) {
67
+ const typeArgs = checker.getTypeArguments(type);
68
+ if (typeArgs.length > 0 && typeArgs[0]) {
69
+ const elemType = typeArgs[0];
70
+ if (elemType.isUnion()) {
71
+ const values = [];
72
+ for (const member of elemType.types) {
73
+ const resolved = resolveArgumentValue(member, checker);
74
+ if (resolved) {
75
+ values.push(resolved);
76
+ }
77
+ }
78
+ return { kind: "list", values };
79
+ }
80
+ }
81
+ }
82
+ const properties = type.getProperties();
83
+ if (properties.length > 0) {
84
+ const isMetadataProperty = properties.some((p) => p.getName().startsWith(" $") ||
85
+ p.getName() === DIRECTIVE_NAME_PROPERTY ||
86
+ p.getName() === DIRECTIVE_ARGS_PROPERTY);
87
+ if (!isMetadataProperty) {
88
+ const fields = [];
89
+ for (const prop of properties) {
90
+ const propType = checker.getTypeOfSymbol(prop);
91
+ const resolved = resolveArgumentValue(propType, checker);
92
+ if (resolved) {
93
+ fields.push({ name: prop.getName(), value: resolved });
94
+ }
95
+ }
96
+ if (fields.length > 0) {
97
+ return { kind: "object", fields };
98
+ }
99
+ }
100
+ }
101
+ const symbol = type.getSymbol();
102
+ if (symbol) {
103
+ const name = symbol.getName();
104
+ if (name !== "__type" &&
105
+ name !== "Array" &&
106
+ !name.includes("<") &&
107
+ /^[A-Z][A-Z0-9_]*$/.test(name)) {
108
+ return { kind: "enum", value: name };
109
+ }
110
+ }
111
+ return null;
112
+ }
113
+ /**
114
+ * Extracts directive arguments from a type.
115
+ */
116
+ function extractDirectiveArgs(argsType, checker, directiveName) {
117
+ const args = [];
118
+ const errors = [];
119
+ const properties = argsType.getProperties();
120
+ for (const prop of properties) {
121
+ const propName = prop.getName();
122
+ const propType = checker.getTypeOfSymbol(prop);
123
+ const resolved = resolveArgumentValue(propType, checker);
124
+ if (resolved) {
125
+ args.push({ name: propName, value: resolved });
126
+ }
127
+ else {
128
+ errors.push({
129
+ code: "UNRESOLVABLE_ARGUMENT",
130
+ message: `Cannot resolve argument '${propName}' for directive '@${directiveName}'`,
131
+ });
132
+ }
133
+ }
134
+ return { args, errors };
135
+ }
136
+ /**
137
+ * Extracts a single directive from a type.
138
+ */
139
+ function extractDirectiveFromType(type, checker) {
140
+ const nameProp = type.getProperty(DIRECTIVE_NAME_PROPERTY);
141
+ if (!nameProp) {
142
+ return { directive: null, errors: [] };
143
+ }
144
+ const rawNameType = checker.getTypeOfSymbol(nameProp);
145
+ const nameType = getActualMetadataType(rawNameType);
146
+ if (!nameType || !nameType.isStringLiteral()) {
147
+ return { directive: null, errors: [] };
148
+ }
149
+ const directiveName = nameType.value;
150
+ if (directiveName === "") {
151
+ return {
152
+ directive: null,
153
+ errors: [
154
+ {
155
+ code: "EMPTY_DIRECTIVE_NAME",
156
+ message: "Directive name cannot be empty",
157
+ },
158
+ ],
159
+ };
160
+ }
161
+ const argsProp = type.getProperty(DIRECTIVE_ARGS_PROPERTY);
162
+ let args = [];
163
+ let argErrors = [];
164
+ if (argsProp) {
165
+ const rawArgsType = checker.getTypeOfSymbol(argsProp);
166
+ const argsType = getActualMetadataType(rawArgsType);
167
+ if (argsType) {
168
+ const argsResult = extractDirectiveArgs(argsType, checker, directiveName);
169
+ args = argsResult.args;
170
+ argErrors = argsResult.errors;
171
+ }
172
+ }
173
+ return {
174
+ directive: { name: directiveName, args },
175
+ errors: argErrors,
176
+ };
177
+ }
178
+ /**
179
+ * Detects directive metadata from a TypeScript type.
180
+ *
181
+ * This function analyzes TypeScript types to detect directive metadata:
182
+ * - Intersection types with " $gqlkitFieldMeta" or " $gqlkitTypeMeta" property indicate directives
183
+ * - Each directive has a name and optional arguments
184
+ * - Arguments are resolved from TypeScript literal types
185
+ *
186
+ * @param type - The TypeScript type to analyze
187
+ * @param checker - The TypeScript type checker
188
+ * @returns Detection result with directives and any errors
189
+ */
190
+ export function detectDirectiveMetadata(type, checker) {
191
+ const metaProp = getMetaProperty(type);
192
+ if (!metaProp) {
193
+ if (type.isIntersection()) {
194
+ for (const member of type.types) {
195
+ const memberProp = getMetaProperty(member);
196
+ if (memberProp) {
197
+ return detectDirectiveMetadataFromProperty(memberProp, checker);
198
+ }
199
+ }
200
+ }
201
+ // Handle union types: (T & Directive) | null
202
+ if (type.isUnion()) {
203
+ for (const member of type.types) {
204
+ // Skip null/undefined members
205
+ if (member.flags & ts.TypeFlags.Null ||
206
+ member.flags & ts.TypeFlags.Undefined) {
207
+ continue;
208
+ }
209
+ const result = detectDirectiveMetadata(member, checker);
210
+ if (result.directives.length > 0) {
211
+ return result;
212
+ }
213
+ }
214
+ }
215
+ return createEmptyResult();
216
+ }
217
+ return detectDirectiveMetadataFromProperty(metaProp, checker);
218
+ }
219
+ function detectDirectiveMetadataFromProperty(directivesProp, checker) {
220
+ const rawDirectivesType = checker.getTypeOfSymbol(directivesProp);
221
+ const directivesType = getActualMetadataType(rawDirectivesType);
222
+ if (!directivesType) {
223
+ return createEmptyResult();
224
+ }
225
+ // New structure: { directives: Ds }
226
+ // Check if the type has a "directives" property
227
+ const directivesArrayProp = directivesType.getProperty("directives");
228
+ if (directivesArrayProp) {
229
+ const rawDirectivesArrayType = checker.getTypeOfSymbol(directivesArrayProp);
230
+ const directivesArrayType = getActualMetadataType(rawDirectivesArrayType);
231
+ if (directivesArrayType) {
232
+ return extractDirectivesFromType(directivesArrayType, checker);
233
+ }
234
+ }
235
+ // Fallback: Old structure - direct array/tuple form (for backward compatibility)
236
+ return extractDirectivesFromType(directivesType, checker);
237
+ }
238
+ /**
239
+ * Extracts directives from a tuple or array type.
240
+ * Use this to extract directives from a type like [AuthDirective, CacheDirective].
241
+ */
242
+ export function extractDirectivesFromType(directivesType, checker) {
243
+ const directives = [];
244
+ const errors = [];
245
+ if (checker.isTupleType(directivesType)) {
246
+ const typeArgs = checker.getTypeArguments(directivesType);
247
+ for (const arg of typeArgs) {
248
+ const result = extractDirectiveFromType(arg, checker);
249
+ if (result.directive) {
250
+ directives.push(result.directive);
251
+ }
252
+ errors.push(...result.errors);
253
+ }
254
+ }
255
+ else if (checker.isArrayType(directivesType)) {
256
+ const typeArgs = checker.getTypeArguments(directivesType);
257
+ if (typeArgs.length > 0 && typeArgs[0]) {
258
+ const elemType = typeArgs[0];
259
+ if (elemType.isUnion()) {
260
+ for (const member of elemType.types) {
261
+ const result = extractDirectiveFromType(member, checker);
262
+ if (result.directive) {
263
+ directives.push(result.directive);
264
+ }
265
+ errors.push(...result.errors);
266
+ }
267
+ }
268
+ else {
269
+ const result = extractDirectiveFromType(elemType, checker);
270
+ if (result.directive) {
271
+ directives.push(result.directive);
272
+ }
273
+ errors.push(...result.errors);
274
+ }
275
+ }
276
+ }
277
+ else {
278
+ const result = extractDirectiveFromType(directivesType, checker);
279
+ if (result.directive) {
280
+ directives.push(result.directive);
281
+ }
282
+ errors.push(...result.errors);
283
+ }
284
+ return { directives, errors };
285
+ }
286
+ /**
287
+ * Checks if a type is wrapped with GqlField or GqlObject.
288
+ */
289
+ export function hasDirectiveMetadata(type) {
290
+ const metaProp = getMetaProperty(type);
291
+ if (metaProp) {
292
+ return true;
293
+ }
294
+ // Also check for the original type property (GqlField marker)
295
+ const originalTypeProp = type.getProperty(ORIGINAL_TYPE_PROPERTY);
296
+ if (originalTypeProp) {
297
+ return true;
298
+ }
299
+ if (type.isIntersection()) {
300
+ for (const member of type.types) {
301
+ const prop = getMetaProperty(member);
302
+ if (prop) {
303
+ return true;
304
+ }
305
+ // Also check for original type property in intersection members
306
+ const origProp = member.getProperty(ORIGINAL_TYPE_PROPERTY);
307
+ if (origProp) {
308
+ return true;
309
+ }
310
+ }
311
+ }
312
+ // Handle union types: (T & Meta) | null is normalized by TypeScript
313
+ // to (T & Meta) | null, so we need to check each member recursively
314
+ if (type.isUnion()) {
315
+ for (const member of type.types) {
316
+ if (hasDirectiveMetadata(member)) {
317
+ return true;
318
+ }
319
+ }
320
+ }
321
+ // Check for GqlField/GqlObject type alias by examining the alias symbol
322
+ if (type.aliasSymbol) {
323
+ const aliasName = type.aliasSymbol.getName();
324
+ if (aliasName === RUNTIME_TYPE_NAMES.GQL_FIELD ||
325
+ aliasName === RUNTIME_TYPE_NAMES.GQL_OBJECT) {
326
+ return true;
327
+ }
328
+ }
329
+ return false;
330
+ }
331
+ /**
332
+ * Unwraps a GqlField or GqlObject type and returns the base type.
333
+ * For GqlField<T, Meta> which is T & { " $gqlkitFieldMeta"?: ...; " $gqlkitOriginalType"?: T },
334
+ * this extracts and returns T from the $gqlkitOriginalType property.
335
+ *
336
+ * The $gqlkitOriginalType property preserves nullability information that would otherwise
337
+ * be lost due to TypeScript's union type normalization.
338
+ *
339
+ * If the type is not wrapped with GqlField or GqlObject, returns the original type.
340
+ */
341
+ export function unwrapDirectiveType(type, checker) {
342
+ // 1. Check aliasTypeArguments first (most reliable)
343
+ // Get T directly from GqlField<T, Meta> or GqlObject<T, Meta>
344
+ // This works when the type alias hasn't been expanded by TypeScript
345
+ if (type.aliasTypeArguments && type.aliasTypeArguments.length > 0) {
346
+ const aliasSymbolName = type.aliasSymbol?.getName() ?? "";
347
+ if (aliasSymbolName === RUNTIME_TYPE_NAMES.GQL_FIELD ||
348
+ aliasSymbolName === RUNTIME_TYPE_NAMES.GQL_OBJECT) {
349
+ return type.aliasTypeArguments[0];
350
+ }
351
+ }
352
+ // 2. Check intersection members' aliasTypeArguments
353
+ // When TypeScript expands the type alias to an intersection,
354
+ // one of the intersection members might still have aliasTypeArguments
355
+ if (type.isIntersection()) {
356
+ for (const member of type.types) {
357
+ if (member.aliasTypeArguments && member.aliasTypeArguments.length > 0) {
358
+ const memberAliasSymbolName = member.aliasSymbol?.getName() ?? "";
359
+ if (memberAliasSymbolName === RUNTIME_TYPE_NAMES.GQL_FIELD ||
360
+ memberAliasSymbolName === RUNTIME_TYPE_NAMES.GQL_OBJECT) {
361
+ return member.aliasTypeArguments[0];
362
+ }
363
+ }
364
+ }
365
+ }
366
+ // 3. Fall back to $gqlkitOriginalType property
367
+ // This property preserves the original type information including array types.
368
+ // The type's symbol name may be __type (internal TypeScript symbol), but that's
369
+ // handled by the caller using checker.typeToString() for correct type name resolution.
370
+ const originalTypeProp = type.getProperty(ORIGINAL_TYPE_PROPERTY);
371
+ if (originalTypeProp) {
372
+ const rawOriginalType = checker.getTypeOfSymbol(originalTypeProp);
373
+ const originalType = getActualMetadataType(rawOriginalType);
374
+ if (originalType) {
375
+ return originalType;
376
+ }
377
+ }
378
+ // Check intersection members for $gqlkitOriginalType
379
+ if (type.isIntersection()) {
380
+ for (const member of type.types) {
381
+ const originalProp = member.getProperty(ORIGINAL_TYPE_PROPERTY);
382
+ if (originalProp) {
383
+ const rawOriginalType = checker.getTypeOfSymbol(originalProp);
384
+ const originalType = getActualMetadataType(rawOriginalType);
385
+ if (originalType) {
386
+ return originalType;
387
+ }
388
+ }
389
+ }
390
+ // Fallback: filter out metadata members
391
+ const nonDirectiveMembers = [];
392
+ for (const member of type.types) {
393
+ const metaProp = getMetaProperty(member);
394
+ const originalTypeProp = member.getProperty(ORIGINAL_TYPE_PROPERTY);
395
+ if (!metaProp && !originalTypeProp) {
396
+ nonDirectiveMembers.push(member);
397
+ }
398
+ }
399
+ if (nonDirectiveMembers.length === 1 && nonDirectiveMembers[0]) {
400
+ return nonDirectiveMembers[0];
401
+ }
402
+ }
403
+ // Handle union types: (T & Meta) | null
404
+ // We extract the base type from the non-null member and return it.
405
+ // Nullability is handled separately in the type-extractor.
406
+ if (type.isUnion()) {
407
+ for (const member of type.types) {
408
+ // Skip null/undefined members
409
+ if (member.flags & ts.TypeFlags.Null ||
410
+ member.flags & ts.TypeFlags.Undefined) {
411
+ continue;
412
+ }
413
+ // Recursively unwrap if this member has metadata
414
+ const unwrapped = unwrapDirectiveType(member, checker);
415
+ if (unwrapped !== member) {
416
+ return unwrapped;
417
+ }
418
+ }
419
+ }
420
+ return type;
421
+ }
422
+ //# sourceMappingURL=directive-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"directive-detector.js","sourceRoot":"","sources":["../../src/shared/directive-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { Diagnostic } from "../type-extractor/types/index.js";
2
+ export interface ScanResult {
3
+ readonly files: ReadonlyArray<string>;
4
+ readonly errors: ReadonlyArray<Diagnostic>;
5
+ }
6
+ export interface ScanOptions {
7
+ /**
8
+ * Glob patterns to exclude files.
9
+ * Patterns are matched against file paths relative to the scan directory.
10
+ */
11
+ readonly excludeGlobs?: ReadonlyArray<string>;
12
+ /**
13
+ * File paths to exclude (for generated files).
14
+ * Each path is individually excluded from scanning.
15
+ */
16
+ readonly excludePaths?: ReadonlyArray<string>;
17
+ /**
18
+ * Simple suffix patterns to exclude (existing behavior).
19
+ * @deprecated Use excludeGlobs instead
20
+ */
21
+ readonly excludePatterns?: ReadonlyArray<string>;
22
+ }
23
+ export declare function isTypeScriptSourceFile(fileName: string): boolean;
24
+ export declare function scanDirectory(directory: string, options?: ScanOptions): Promise<ScanResult>;
25
+ //# sourceMappingURL=file-scanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-scanner.d.ts","sourceRoot":"","sources":["../../src/shared/file-scanner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAEnE,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,WAAW;IAC1B;;;OAGG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAE9C;;;OAGG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAE9C;;;OAGG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CAClD;AAKD,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAKhE;AA6ED,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,UAAU,CAAC,CAgDrB"}
@@ -0,0 +1,99 @@
1
+ import { readdir, stat } from "node:fs/promises";
2
+ import { join, matchesGlob, relative, resolve } from "node:path";
3
+ const TS_SOURCE_EXTENSIONS = [".ts", ".cts", ".mts"];
4
+ const TS_DEFINITION_SUFFIXES = [".d.ts", ".d.cts", ".d.mts"];
5
+ export function isTypeScriptSourceFile(fileName) {
6
+ if (TS_DEFINITION_SUFFIXES.some((suffix) => fileName.endsWith(suffix))) {
7
+ return false;
8
+ }
9
+ return TS_SOURCE_EXTENSIONS.some((ext) => fileName.endsWith(ext));
10
+ }
11
+ function matchesSuffixPattern(fileName, pattern) {
12
+ return fileName.endsWith(pattern);
13
+ }
14
+ function shouldExcludeBySuffix(fileName, excludePatterns) {
15
+ return excludePatterns.some((pattern) => matchesSuffixPattern(fileName, pattern));
16
+ }
17
+ function shouldExcludeByGlobs(filePath, rootDir, excludeGlobs) {
18
+ if (excludeGlobs.length === 0) {
19
+ return false;
20
+ }
21
+ const relativePath = relative(rootDir, filePath);
22
+ return excludeGlobs.some((pattern) => matchesGlob(relativePath, pattern));
23
+ }
24
+ function shouldExcludeByPaths(filePath, excludePaths) {
25
+ return excludePaths.some((excludePath) => filePath === excludePath);
26
+ }
27
+ async function collectFiles(directory, files, context) {
28
+ const entries = await readdir(directory, { withFileTypes: true });
29
+ for (const entry of entries) {
30
+ const fullPath = join(directory, entry.name);
31
+ if (entry.isDirectory()) {
32
+ if (entry.name === "node_modules") {
33
+ continue;
34
+ }
35
+ await collectFiles(fullPath, files, context);
36
+ }
37
+ else if (entry.isFile()) {
38
+ if (!isTypeScriptSourceFile(entry.name)) {
39
+ continue;
40
+ }
41
+ if (shouldExcludeBySuffix(entry.name, context.excludePatterns)) {
42
+ continue;
43
+ }
44
+ if (shouldExcludeByGlobs(fullPath, context.rootDir, context.excludeGlobs)) {
45
+ continue;
46
+ }
47
+ if (shouldExcludeByPaths(fullPath, context.excludePaths)) {
48
+ continue;
49
+ }
50
+ files.push(fullPath);
51
+ }
52
+ }
53
+ }
54
+ export async function scanDirectory(directory, options = {}) {
55
+ const absolutePath = resolve(directory);
56
+ try {
57
+ const stats = await stat(absolutePath);
58
+ if (!stats.isDirectory()) {
59
+ return {
60
+ files: [],
61
+ errors: [
62
+ {
63
+ code: "DIRECTORY_NOT_FOUND",
64
+ message: `Path is not a directory: ${absolutePath}`,
65
+ severity: "error",
66
+ location: null,
67
+ },
68
+ ],
69
+ };
70
+ }
71
+ }
72
+ catch {
73
+ return {
74
+ files: [],
75
+ errors: [
76
+ {
77
+ code: "DIRECTORY_NOT_FOUND",
78
+ message: `Directory not found: ${absolutePath}`,
79
+ severity: "error",
80
+ location: null,
81
+ },
82
+ ],
83
+ };
84
+ }
85
+ const context = {
86
+ rootDir: absolutePath,
87
+ excludePatterns: options.excludePatterns ?? [],
88
+ excludeGlobs: options.excludeGlobs ?? [],
89
+ excludePaths: options.excludePaths ?? [],
90
+ };
91
+ const files = [];
92
+ await collectFiles(absolutePath, files, context);
93
+ files.sort();
94
+ return {
95
+ files,
96
+ errors: [],
97
+ };
98
+ }
99
+ //# sourceMappingURL=file-scanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-scanner.js","sourceRoot":"","sources":["../../src/shared/file-scanner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=file-scanner.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-scanner.test.d.ts","sourceRoot":"","sources":["../../src/shared/file-scanner.test.ts"],"names":[],"mappings":""}