@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,685 @@
1
+ import ts from "typescript";
2
+ import { isInternalTypeSymbol, METADATA_PROPERTIES, RUNTIME_TYPE_NAMES, } from "../../shared/constants.js";
3
+ import { detectDefaultValueMetadata } from "../../shared/default-value-detector.js";
4
+ import { extractDirectivesFromType, hasDirectiveMetadata, unwrapDirectiveType, } from "../../shared/directive-detector.js";
5
+ import { extractInlineObjectProperties } from "../../shared/inline-object-extractor.js";
6
+ import { isInlineObjectType } from "../../shared/inline-object-utils.js";
7
+ import { detectScalarMetadata, getActualMetadataType, } from "../../shared/metadata-detector.js";
8
+ import { getSourceLocationFromNode } from "../../shared/source-location.js";
9
+ import { extractTsDocFromSymbol, extractTsDocInfo, } from "../../shared/tsdoc-parser.js";
10
+ import { extractPropertySymbols, getNonNullableTypes, hasUndefinedInType, isBuiltinUtilityType, isExported, isNullableUnion, shouldTreatIntersectionAsInline, } from "../../shared/typescript-utils.js";
11
+ const RESOLVER_METADATA_PROPERTY = METADATA_PROPERTIES.RESOLVER;
12
+ const ABSTRACT_RESOLVER_METADATA_PROPERTY = METADATA_PROPERTIES.ABSTRACT_RESOLVER;
13
+ /**
14
+ * Detects abstract resolver kind and target type from metadata embedded in the type.
15
+ * Returns null if no abstract resolver metadata is found.
16
+ */
17
+ function detectAbstractResolverFromMetadataType(callExpr, checker) {
18
+ const returnType = checker.getTypeAtLocation(callExpr);
19
+ const metadataProp = returnType.getProperty(ABSTRACT_RESOLVER_METADATA_PROPERTY);
20
+ if (!metadataProp) {
21
+ return null;
22
+ }
23
+ const metadataType = checker.getTypeOfSymbol(metadataProp);
24
+ const actualType = getActualMetadataType(metadataType);
25
+ if (!actualType) {
26
+ return null;
27
+ }
28
+ const kindProp = actualType.getProperty("kind");
29
+ if (!kindProp) {
30
+ return null;
31
+ }
32
+ const kindType = checker.getTypeOfSymbol(kindProp);
33
+ if (!kindType.isStringLiteral()) {
34
+ return null;
35
+ }
36
+ const kind = kindType.value;
37
+ if (kind !== "resolveType" && kind !== "isTypeOf") {
38
+ return null;
39
+ }
40
+ const targetTypeProp = actualType.getProperty("targetType");
41
+ if (!targetTypeProp) {
42
+ return null;
43
+ }
44
+ const targetType = checker.getTypeOfSymbol(targetTypeProp);
45
+ const targetTypeName = extractTypeNameFromType(targetType, checker);
46
+ if (!targetTypeName) {
47
+ return null;
48
+ }
49
+ return { kind, targetTypeName };
50
+ }
51
+ /**
52
+ * Extracts a type name from a TypeScript type.
53
+ * Handles internal type symbols (like __type) by falling back to typeToString.
54
+ * Returns null for unresolvable types (any, unknown).
55
+ */
56
+ function extractTypeNameFromType(type, checker) {
57
+ if (type.flags & ts.TypeFlags.Any) {
58
+ return null;
59
+ }
60
+ if (type.aliasSymbol) {
61
+ const aliasName = type.aliasSymbol.getName();
62
+ if (!isInternalTypeSymbol(aliasName)) {
63
+ return aliasName;
64
+ }
65
+ }
66
+ const symbol = type.getSymbol();
67
+ if (symbol) {
68
+ const symbolName = symbol.getName();
69
+ if (!isInternalTypeSymbol(symbolName)) {
70
+ return symbolName;
71
+ }
72
+ }
73
+ const typeString = checker.typeToString(type);
74
+ if (typeString && typeString !== "unknown" && typeString !== "any") {
75
+ return typeString;
76
+ }
77
+ return null;
78
+ }
79
+ /**
80
+ * Detects resolver type from metadata embedded in the type.
81
+ * Follows the same pattern as scalar metadata detection.
82
+ */
83
+ function detectResolverFromMetadataType(callExpr, checker) {
84
+ const returnType = checker.getTypeAtLocation(callExpr);
85
+ const metadataProp = returnType.getProperty(RESOLVER_METADATA_PROPERTY);
86
+ if (!metadataProp) {
87
+ return undefined;
88
+ }
89
+ const metadataType = checker.getTypeOfSymbol(metadataProp);
90
+ const actualType = getActualMetadataType(metadataType);
91
+ if (!actualType) {
92
+ return undefined;
93
+ }
94
+ const kindProp = actualType.getProperty("kind");
95
+ if (!kindProp) {
96
+ return undefined;
97
+ }
98
+ const kindType = checker.getTypeOfSymbol(kindProp);
99
+ if (kindType.isStringLiteral()) {
100
+ const kind = kindType.value;
101
+ if (kind === "query" || kind === "mutation" || kind === "field") {
102
+ return kind;
103
+ }
104
+ }
105
+ return undefined;
106
+ }
107
+ function convertTsTypeToReference(type, checker, typeNode) {
108
+ const metadataResult = detectScalarMetadata(type, checker);
109
+ // Skip scalar detection if it's an array of scalars (e.g., Int[])
110
+ // Array types should be handled by the array handling logic below
111
+ if (metadataResult.scalarName &&
112
+ !metadataResult.isPrimitive &&
113
+ !metadataResult.isList) {
114
+ return {
115
+ kind: "scalar",
116
+ name: metadataResult.scalarName,
117
+ elementType: null,
118
+ members: null,
119
+ nullable: metadataResult.nullable,
120
+ scalarInfo: {
121
+ scalarName: metadataResult.scalarName,
122
+ typeName: metadataResult.scalarName,
123
+ baseType: undefined,
124
+ isCustom: true,
125
+ only: metadataResult.only,
126
+ },
127
+ inlineObjectProperties: null,
128
+ };
129
+ }
130
+ const typeString = checker.typeToString(type);
131
+ if (type.isUnion()) {
132
+ const aliasSymbol = type.aliasSymbol;
133
+ if (aliasSymbol) {
134
+ const name = aliasSymbol.getName();
135
+ return {
136
+ kind: "reference",
137
+ name,
138
+ elementType: null,
139
+ members: null,
140
+ nullable: false,
141
+ scalarInfo: null,
142
+ inlineObjectProperties: null,
143
+ };
144
+ }
145
+ const nullable = isNullableUnion(type);
146
+ const nonNullTypes = getNonNullableTypes(type);
147
+ if (nonNullTypes.length === 1 && nonNullTypes[0]) {
148
+ const innerType = convertTsTypeToReference(nonNullTypes[0], checker);
149
+ return { ...innerType, nullable };
150
+ }
151
+ if (nonNullTypes.length > 1) {
152
+ // Check if this is a boolean literal union (true | false)
153
+ const isBooleanLiteralUnion = nonNullTypes.every((t) => t.flags & ts.TypeFlags.BooleanLiteral);
154
+ if (isBooleanLiteralUnion) {
155
+ return {
156
+ kind: "primitive",
157
+ name: "boolean",
158
+ elementType: null,
159
+ members: null,
160
+ nullable,
161
+ scalarInfo: null,
162
+ inlineObjectProperties: null,
163
+ };
164
+ }
165
+ return {
166
+ kind: "union",
167
+ name: null,
168
+ elementType: null,
169
+ members: nonNullTypes.map((t) => convertTsTypeToReference(t, checker)),
170
+ nullable,
171
+ scalarInfo: null,
172
+ inlineObjectProperties: null,
173
+ };
174
+ }
175
+ }
176
+ if (checker.isArrayType(type)) {
177
+ const typeArgs = checker.getTypeArguments(type);
178
+ const elementType = typeArgs[0];
179
+ if (elementType) {
180
+ let elementTypeNode;
181
+ if (typeNode && ts.isArrayTypeNode(typeNode)) {
182
+ elementTypeNode = typeNode.elementType;
183
+ }
184
+ return {
185
+ kind: "array",
186
+ name: null,
187
+ elementType: convertTsTypeToReference(elementType, checker, elementTypeNode),
188
+ members: null,
189
+ nullable: false,
190
+ scalarInfo: null,
191
+ inlineObjectProperties: null,
192
+ };
193
+ }
194
+ }
195
+ if (isInlineObjectType(type)) {
196
+ const inlineProperties = extractInlineObjectProperties(type, checker, convertTsTypeToReference);
197
+ return {
198
+ kind: "inlineObject",
199
+ name: null,
200
+ elementType: null,
201
+ members: null,
202
+ nullable: false,
203
+ scalarInfo: null,
204
+ inlineObjectProperties: inlineProperties,
205
+ };
206
+ }
207
+ // Handle intersection types that should be treated as inline objects
208
+ // This includes intersections with anonymous/utility members OR intersections of
209
+ // named object types (interfaces) that need to be merged
210
+ // BUT only if the type itself is not a named type alias (like User = GqlObject<...>)
211
+ if (type.isIntersection() && !type.aliasSymbol) {
212
+ if (shouldTreatIntersectionAsInline(type, { checkBuiltinUtilityTypes: true })) {
213
+ const inlineProperties = extractInlineObjectProperties(type, checker, convertTsTypeToReference);
214
+ return {
215
+ kind: "inlineObject",
216
+ name: null,
217
+ elementType: null,
218
+ members: null,
219
+ nullable: false,
220
+ scalarInfo: null,
221
+ inlineObjectProperties: inlineProperties,
222
+ };
223
+ }
224
+ }
225
+ // Check if this is a utility type like Omit, Pick, etc.
226
+ // Utility types have aliasSymbol but their apparent type has resolved properties
227
+ if (type.flags & ts.TypeFlags.Object && isBuiltinUtilityType(type)) {
228
+ const inlineProperties = extractInlineObjectProperties(type, checker, convertTsTypeToReference);
229
+ return {
230
+ kind: "inlineObject",
231
+ name: null,
232
+ elementType: null,
233
+ members: null,
234
+ nullable: false,
235
+ scalarInfo: null,
236
+ inlineObjectProperties: inlineProperties,
237
+ };
238
+ }
239
+ const symbol = type.getSymbol();
240
+ if (symbol) {
241
+ const symbolName = symbol.getName();
242
+ if (!isInternalTypeSymbol(symbolName)) {
243
+ let name = symbolName;
244
+ if (typeNode && ts.isTypeReferenceNode(typeNode)) {
245
+ const typeName = typeNode.typeName;
246
+ if (ts.isIdentifier(typeName)) {
247
+ name = typeName.text;
248
+ }
249
+ else if (ts.isQualifiedName(typeName)) {
250
+ name = typeName.right.text;
251
+ }
252
+ }
253
+ return {
254
+ kind: "reference",
255
+ name,
256
+ elementType: null,
257
+ members: null,
258
+ nullable: false,
259
+ scalarInfo: null,
260
+ inlineObjectProperties: null,
261
+ };
262
+ }
263
+ }
264
+ if (type.flags & ts.TypeFlags.String) {
265
+ return {
266
+ kind: "primitive",
267
+ name: "string",
268
+ elementType: null,
269
+ members: null,
270
+ nullable: false,
271
+ scalarInfo: null,
272
+ inlineObjectProperties: null,
273
+ };
274
+ }
275
+ if (type.flags & ts.TypeFlags.Number) {
276
+ return {
277
+ kind: "primitive",
278
+ name: "number",
279
+ elementType: null,
280
+ members: null,
281
+ nullable: false,
282
+ scalarInfo: null,
283
+ inlineObjectProperties: null,
284
+ };
285
+ }
286
+ if (type.flags & ts.TypeFlags.Boolean) {
287
+ return {
288
+ kind: "primitive",
289
+ name: "boolean",
290
+ elementType: null,
291
+ members: null,
292
+ nullable: false,
293
+ scalarInfo: null,
294
+ inlineObjectProperties: null,
295
+ };
296
+ }
297
+ return {
298
+ kind: "reference",
299
+ name: typeString,
300
+ elementType: null,
301
+ members: null,
302
+ nullable: false,
303
+ scalarInfo: null,
304
+ inlineObjectProperties: null,
305
+ };
306
+ }
307
+ function getTypeNameFromNode(typeNode) {
308
+ if (ts.isTypeReferenceNode(typeNode)) {
309
+ const typeName = typeNode.typeName;
310
+ if (ts.isIdentifier(typeName)) {
311
+ return typeName.text;
312
+ }
313
+ if (ts.isQualifiedName(typeName)) {
314
+ return typeName.right.text;
315
+ }
316
+ }
317
+ return undefined;
318
+ }
319
+ function isInlineTypeLiteralDeclaration(declaration) {
320
+ if (!ts.isPropertySignature(declaration)) {
321
+ return false;
322
+ }
323
+ const parent = declaration.parent;
324
+ if (!ts.isTypeLiteralNode(parent)) {
325
+ return false;
326
+ }
327
+ const grandparent = parent.parent;
328
+ if (ts.isTypeAliasDeclaration(grandparent)) {
329
+ return false;
330
+ }
331
+ if (ts.isInterfaceDeclaration(grandparent)) {
332
+ return false;
333
+ }
334
+ return true;
335
+ }
336
+ function extractTSDocFromPropertyWithPriority(prop, checker) {
337
+ const declarations = prop.getDeclarations();
338
+ if (!declarations || declarations.length === 0) {
339
+ return { description: null, deprecated: null };
340
+ }
341
+ const inlineDeclaration = declarations.find(isInlineTypeLiteralDeclaration);
342
+ if (inlineDeclaration) {
343
+ const inlineSymbol = checker.getSymbolAtLocation(inlineDeclaration.name);
344
+ if (inlineSymbol) {
345
+ return extractTsDocFromSymbol(inlineSymbol, checker);
346
+ }
347
+ }
348
+ return extractTsDocFromSymbol(prop, checker);
349
+ }
350
+ /**
351
+ * Checks if a type should be unwrapped as a GqlField type.
352
+ * This handles cases where TypeScript represents the type differently
353
+ * when accessed through type references vs. direct declarations.
354
+ */
355
+ function shouldUnwrapAsGqlField(type, checker) {
356
+ // First check using the standard method
357
+ if (hasDirectiveMetadata(type)) {
358
+ return true;
359
+ }
360
+ // Fallback: check if the type string contains GqlField
361
+ // This handles cases where TypeScript represents the type differently
362
+ const typeString = checker.typeToString(type);
363
+ if (typeString.startsWith(`${RUNTIME_TYPE_NAMES.GQL_FIELD}<`) ||
364
+ typeString === RUNTIME_TYPE_NAMES.GQL_FIELD) {
365
+ return true;
366
+ }
367
+ return false;
368
+ }
369
+ /**
370
+ * Checks if a type is the NoArgs type (Record<string, never>).
371
+ * This is a special type that represents "no arguments".
372
+ */
373
+ function isNoArgsType(type, checker) {
374
+ if (type.aliasSymbol?.getName() === "NoArgs") {
375
+ return true;
376
+ }
377
+ if (type.aliasSymbol?.getName() === "Record") {
378
+ return true;
379
+ }
380
+ const typeStr = checker.typeToString(type);
381
+ if (typeStr === "Record<string, never>") {
382
+ return true;
383
+ }
384
+ return false;
385
+ }
386
+ /**
387
+ * Checks if a type has only index signatures with no named properties.
388
+ * Types like `{ [key: string]: number }` return true.
389
+ * Does NOT return true for NoArgs type.
390
+ */
391
+ function hasOnlyIndexSignatures(type, checker) {
392
+ if (isNoArgsType(type, checker)) {
393
+ return false;
394
+ }
395
+ const targetType = checker.getApparentType(type);
396
+ const indexInfos = checker.getIndexInfosOfType(targetType);
397
+ const hasIndexSignatures = indexInfos.length > 0;
398
+ if (!hasIndexSignatures) {
399
+ return false;
400
+ }
401
+ const properties = targetType
402
+ .getProperties()
403
+ .filter((p) => !p.getName().startsWith(" $"));
404
+ if (properties.length > 0) {
405
+ return false;
406
+ }
407
+ return true;
408
+ }
409
+ /**
410
+ * Gets the type name for error messages.
411
+ */
412
+ function getTypeNameForDiagnostic(type, checker) {
413
+ if (type.aliasSymbol) {
414
+ return type.aliasSymbol.getName();
415
+ }
416
+ if (type.symbol) {
417
+ return type.symbol.getName();
418
+ }
419
+ return checker.typeToString(type);
420
+ }
421
+ function extractArgsFromType(argsType, checker) {
422
+ const args = [];
423
+ const properties = extractPropertySymbols(argsType, checker);
424
+ for (const prop of properties) {
425
+ const propType = checker.getTypeOfSymbol(prop);
426
+ const optional = hasUndefinedInType(propType);
427
+ const tsdocInfo = extractTSDocFromPropertyWithPriority(prop, checker);
428
+ let defaultValue = null;
429
+ let actualPropType = propType;
430
+ if (shouldUnwrapAsGqlField(propType, checker)) {
431
+ const defaultValueResult = detectDefaultValueMetadata(propType, checker);
432
+ if (defaultValueResult.defaultValue) {
433
+ defaultValue = defaultValueResult.defaultValue;
434
+ }
435
+ actualPropType = unwrapDirectiveType(propType, checker);
436
+ }
437
+ args.push({
438
+ name: prop.getName(),
439
+ tsType: convertTsTypeToReference(actualPropType, checker),
440
+ optional,
441
+ description: tsdocInfo.description,
442
+ deprecated: tsdocInfo.deprecated,
443
+ defaultValue,
444
+ });
445
+ }
446
+ return args;
447
+ }
448
+ function extractDirectivesFromTypeNode(typeNode, checker) {
449
+ if (!typeNode) {
450
+ return null;
451
+ }
452
+ const type = checker.getTypeFromTypeNode(typeNode);
453
+ const directiveResult = extractDirectivesFromType(type, checker);
454
+ if (directiveResult.directives.length > 0) {
455
+ return directiveResult.directives;
456
+ }
457
+ return null;
458
+ }
459
+ /**
460
+ * Validates an args type and returns diagnostics for problematic types.
461
+ */
462
+ function validateArgsType(argsType, argsTypeNode, checker) {
463
+ const diagnostics = [];
464
+ if (hasOnlyIndexSignatures(argsType, checker)) {
465
+ const typeName = getTypeNameForDiagnostic(argsType, checker);
466
+ diagnostics.push({
467
+ code: "INDEX_SIGNATURE_ONLY",
468
+ message: `Type '${typeName}' contains only index signatures and cannot be represented as a GraphQL type. Use a concrete object type instead.`,
469
+ severity: "error",
470
+ location: getSourceLocationFromNode(argsTypeNode),
471
+ });
472
+ }
473
+ return diagnostics;
474
+ }
475
+ /**
476
+ * Checks if the extracted args are empty and the original type was not NoArgs.
477
+ * This indicates the type resolved to an empty object.
478
+ * Does not emit warnings for types that only have index signatures (they get INDEX_SIGNATURE_ONLY error instead).
479
+ */
480
+ function checkEmptyArgsType(argsType, argsTypeNode, args, checker) {
481
+ if (isNoArgsType(argsType, checker)) {
482
+ return null;
483
+ }
484
+ if (hasOnlyIndexSignatures(argsType, checker)) {
485
+ return null;
486
+ }
487
+ if (args !== null && args.length === 0) {
488
+ const typeName = getTypeNameForDiagnostic(argsType, checker);
489
+ return {
490
+ code: "EMPTY_TYPE_PROPERTIES",
491
+ message: `Type '${typeName}' has no properties. Consider adding properties or using a different type.`,
492
+ severity: "warning",
493
+ location: getSourceLocationFromNode(argsTypeNode),
494
+ };
495
+ }
496
+ return null;
497
+ }
498
+ function extractTypeArgumentsFromCall(node, checker, resolverType) {
499
+ const typeArgs = node.typeArguments;
500
+ if (!typeArgs) {
501
+ return null;
502
+ }
503
+ if (resolverType === "field") {
504
+ if (typeArgs.length < 3) {
505
+ return null;
506
+ }
507
+ const parentTypeNode = typeArgs[0];
508
+ const argsTypeNode = typeArgs[1];
509
+ const returnTypeNode = typeArgs[2];
510
+ const directiveTypeNode = typeArgs[3];
511
+ if (!parentTypeNode || !argsTypeNode || !returnTypeNode) {
512
+ return null;
513
+ }
514
+ const argsType = checker.getTypeFromTypeNode(argsTypeNode);
515
+ const returnType = checker.getTypeFromTypeNode(returnTypeNode);
516
+ const parentTypeName = getTypeNameFromNode(parentTypeNode);
517
+ const argsTypeRef = convertTsTypeToReference(argsType, checker);
518
+ const isNoArgs = argsTypeRef.kind === "reference" && argsTypeRef.name === "Record";
519
+ const diagnostics = [];
520
+ if (!isNoArgs) {
521
+ diagnostics.push(...validateArgsType(argsType, argsTypeNode, checker));
522
+ }
523
+ const args = isNoArgs ? null : extractArgsFromType(argsType, checker);
524
+ if (!isNoArgs) {
525
+ const emptyDiagnostic = checkEmptyArgsType(argsType, argsTypeNode, args, checker);
526
+ if (emptyDiagnostic) {
527
+ diagnostics.push(emptyDiagnostic);
528
+ }
529
+ }
530
+ const directives = extractDirectivesFromTypeNode(directiveTypeNode, checker);
531
+ return {
532
+ parentTypeName: parentTypeName ?? null,
533
+ argsType: isNoArgs ? null : argsTypeRef,
534
+ args: args && args.length > 0 ? args : null,
535
+ returnType: convertTsTypeToReference(returnType, checker, returnTypeNode),
536
+ directives,
537
+ diagnostics,
538
+ };
539
+ }
540
+ if (typeArgs.length < 2) {
541
+ return null;
542
+ }
543
+ const argsTypeNode = typeArgs[0];
544
+ const returnTypeNode = typeArgs[1];
545
+ const directiveTypeNode = typeArgs[2];
546
+ if (!argsTypeNode || !returnTypeNode) {
547
+ return null;
548
+ }
549
+ const argsType = checker.getTypeFromTypeNode(argsTypeNode);
550
+ const returnType = checker.getTypeFromTypeNode(returnTypeNode);
551
+ const argsTypeRef = convertTsTypeToReference(argsType, checker);
552
+ const isNoArgs = argsTypeRef.kind === "reference" && argsTypeRef.name === "Record";
553
+ const diagnostics = [];
554
+ if (!isNoArgs) {
555
+ diagnostics.push(...validateArgsType(argsType, argsTypeNode, checker));
556
+ }
557
+ const args = isNoArgs ? null : extractArgsFromType(argsType, checker);
558
+ if (!isNoArgs) {
559
+ const emptyDiagnostic = checkEmptyArgsType(argsType, argsTypeNode, args, checker);
560
+ if (emptyDiagnostic) {
561
+ diagnostics.push(emptyDiagnostic);
562
+ }
563
+ }
564
+ const directives = extractDirectivesFromTypeNode(directiveTypeNode, checker);
565
+ return {
566
+ parentTypeName: null,
567
+ argsType: isNoArgs ? null : argsTypeRef,
568
+ args: args && args.length > 0 ? args : null,
569
+ returnType: convertTsTypeToReference(returnType, checker, returnTypeNode),
570
+ directives,
571
+ diagnostics,
572
+ };
573
+ }
574
+ function extractExportedInputTypes(sourceFile, checker) {
575
+ const exportedTypes = [];
576
+ ts.forEachChild(sourceFile, (node) => {
577
+ if (ts.isTypeAliasDeclaration(node) && isExported(node)) {
578
+ const name = node.name.getText(sourceFile);
579
+ const type = checker.getTypeAtLocation(node.name);
580
+ const tsType = convertTsTypeToReference(type, checker);
581
+ exportedTypes.push({
582
+ name,
583
+ tsType,
584
+ sourceFile: sourceFile.fileName,
585
+ });
586
+ }
587
+ });
588
+ return exportedTypes;
589
+ }
590
+ export function extractDefineApiResolvers(program, files) {
591
+ const checker = program.getTypeChecker();
592
+ const resolvers = [];
593
+ const abstractTypeResolvers = [];
594
+ const diagnostics = [];
595
+ for (const filePath of files) {
596
+ const sourceFile = program.getSourceFile(filePath);
597
+ if (!sourceFile) {
598
+ continue;
599
+ }
600
+ const exportedInputTypes = extractExportedInputTypes(sourceFile, checker);
601
+ ts.forEachChild(sourceFile, (node) => {
602
+ if (!ts.isVariableStatement(node)) {
603
+ return;
604
+ }
605
+ if (!isExported(node)) {
606
+ return;
607
+ }
608
+ for (const declaration of node.declarationList.declarations) {
609
+ if (!ts.isIdentifier(declaration.name)) {
610
+ continue;
611
+ }
612
+ const fieldName = declaration.name.getText(sourceFile);
613
+ const initializer = declaration.initializer;
614
+ if (!initializer) {
615
+ continue;
616
+ }
617
+ if (!ts.isCallExpression(initializer)) {
618
+ if (ts.isConditionalExpression(initializer) ||
619
+ ts.isBinaryExpression(initializer)) {
620
+ const hasDefineCall = initializer
621
+ .getText(sourceFile)
622
+ .match(/define(Query|Mutation|Field)/);
623
+ if (hasDefineCall) {
624
+ diagnostics.push({
625
+ code: "INVALID_DEFINE_CALL",
626
+ message: `Complex expressions with define* functions are not supported. Use a simple 'export const ${fieldName} = defineXxx(...)' pattern.`,
627
+ severity: "error",
628
+ location: getSourceLocationFromNode(declaration.name),
629
+ });
630
+ }
631
+ }
632
+ continue;
633
+ }
634
+ const abstractResolverInfo = detectAbstractResolverFromMetadataType(initializer, checker);
635
+ if (abstractResolverInfo) {
636
+ const sourceLocation = getSourceLocationFromNode(declaration.name);
637
+ if (sourceLocation) {
638
+ abstractTypeResolvers.push({
639
+ kind: abstractResolverInfo.kind,
640
+ targetTypeName: abstractResolverInfo.targetTypeName,
641
+ exportName: fieldName,
642
+ sourceFile: filePath,
643
+ sourceLocation,
644
+ });
645
+ }
646
+ continue;
647
+ }
648
+ const resolverType = detectResolverFromMetadataType(initializer, checker);
649
+ if (!resolverType) {
650
+ continue;
651
+ }
652
+ const funcName = ts.isIdentifier(initializer.expression)
653
+ ? initializer.expression.text
654
+ : undefined;
655
+ const typeInfo = extractTypeArgumentsFromCall(initializer, checker, resolverType);
656
+ if (!typeInfo) {
657
+ diagnostics.push({
658
+ code: "INVALID_DEFINE_CALL",
659
+ message: `Failed to extract type arguments from ${funcName ?? "define*"} call for '${fieldName}'`,
660
+ severity: "error",
661
+ location: getSourceLocationFromNode(declaration.name),
662
+ });
663
+ continue;
664
+ }
665
+ diagnostics.push(...typeInfo.diagnostics);
666
+ const tsdocInfo = extractTsDocInfo(node, checker);
667
+ resolvers.push({
668
+ fieldName,
669
+ resolverType,
670
+ parentTypeName: typeInfo.parentTypeName,
671
+ argsType: typeInfo.argsType,
672
+ args: typeInfo.args,
673
+ returnType: typeInfo.returnType,
674
+ sourceFile: filePath,
675
+ exportedInputTypes,
676
+ description: tsdocInfo.description,
677
+ deprecated: tsdocInfo.deprecated,
678
+ directives: typeInfo.directives,
679
+ });
680
+ }
681
+ });
682
+ }
683
+ return { resolvers, abstractTypeResolvers, diagnostics };
684
+ }
685
+ //# sourceMappingURL=define-api-extractor.js.map