@gqlkit-ts/cli 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (339) hide show
  1. package/dist/auto-type-generator/auto-type-generator.d.ts +26 -4
  2. package/dist/auto-type-generator/auto-type-generator.d.ts.map +1 -1
  3. package/dist/auto-type-generator/auto-type-generator.js +846 -152
  4. package/dist/auto-type-generator/auto-type-generator.js.map +1 -1
  5. package/dist/auto-type-generator/index.d.ts +9 -2
  6. package/dist/auto-type-generator/index.d.ts.map +1 -1
  7. package/dist/auto-type-generator/index.js +3 -0
  8. package/dist/auto-type-generator/index.js.map +1 -1
  9. package/dist/auto-type-generator/inline-enum-collector.d.ts +39 -0
  10. package/dist/auto-type-generator/inline-enum-collector.d.ts.map +1 -0
  11. package/dist/auto-type-generator/inline-enum-collector.js +193 -0
  12. package/dist/auto-type-generator/inline-enum-collector.js.map +1 -0
  13. package/dist/auto-type-generator/inline-object-traverser.d.ts +20 -0
  14. package/dist/auto-type-generator/inline-object-traverser.d.ts.map +1 -0
  15. package/dist/auto-type-generator/inline-object-traverser.js +22 -0
  16. package/dist/auto-type-generator/inline-object-traverser.js.map +1 -0
  17. package/dist/auto-type-generator/inline-union-collector.d.ts +29 -0
  18. package/dist/auto-type-generator/inline-union-collector.d.ts.map +1 -0
  19. package/dist/auto-type-generator/inline-union-collector.js +216 -0
  20. package/dist/auto-type-generator/inline-union-collector.js.map +1 -0
  21. package/dist/auto-type-generator/inline-union-types.d.ts +29 -0
  22. package/dist/auto-type-generator/inline-union-types.d.ts.map +1 -0
  23. package/dist/auto-type-generator/inline-union-types.js +2 -0
  24. package/dist/auto-type-generator/inline-union-types.js.map +1 -0
  25. package/dist/auto-type-generator/inline-union-validator.d.ts +76 -0
  26. package/dist/auto-type-generator/inline-union-validator.d.ts.map +1 -0
  27. package/dist/auto-type-generator/inline-union-validator.js +329 -0
  28. package/dist/auto-type-generator/inline-union-validator.js.map +1 -0
  29. package/dist/auto-type-generator/naming-convention.d.ts +22 -1
  30. package/dist/auto-type-generator/naming-convention.d.ts.map +1 -1
  31. package/dist/auto-type-generator/naming-convention.js +24 -0
  32. package/dist/auto-type-generator/naming-convention.js.map +1 -1
  33. package/dist/auto-type-generator/resolve-type-generator.d.ts +20 -0
  34. package/dist/auto-type-generator/resolve-type-generator.d.ts.map +1 -0
  35. package/dist/auto-type-generator/resolve-type-generator.js +2 -0
  36. package/dist/auto-type-generator/resolve-type-generator.js.map +1 -0
  37. package/dist/auto-type-generator/resolver-field-iterator.d.ts +13 -0
  38. package/dist/auto-type-generator/resolver-field-iterator.d.ts.map +1 -0
  39. package/dist/auto-type-generator/resolver-field-iterator.js +22 -0
  40. package/dist/auto-type-generator/resolver-field-iterator.js.map +1 -0
  41. package/dist/auto-type-generator/typename-extractor.d.ts +26 -0
  42. package/dist/auto-type-generator/typename-extractor.d.ts.map +1 -0
  43. package/dist/auto-type-generator/typename-extractor.js +142 -0
  44. package/dist/auto-type-generator/typename-extractor.js.map +1 -0
  45. package/dist/auto-type-generator/typename-resolve-type-generator.d.ts +35 -0
  46. package/dist/auto-type-generator/typename-resolve-type-generator.d.ts.map +1 -0
  47. package/dist/auto-type-generator/typename-resolve-type-generator.js +177 -0
  48. package/dist/auto-type-generator/typename-resolve-type-generator.js.map +1 -0
  49. package/dist/auto-type-generator/typename-types.d.ts +43 -0
  50. package/dist/auto-type-generator/typename-types.d.ts.map +1 -0
  51. package/dist/auto-type-generator/typename-types.js +37 -0
  52. package/dist/auto-type-generator/typename-types.js.map +1 -0
  53. package/dist/auto-type-generator/typename-validator.d.ts +37 -0
  54. package/dist/auto-type-generator/typename-validator.d.ts.map +1 -0
  55. package/dist/auto-type-generator/typename-validator.js +206 -0
  56. package/dist/auto-type-generator/typename-validator.js.map +1 -0
  57. package/dist/cli.js +2 -0
  58. package/dist/cli.js.map +1 -1
  59. package/dist/commands/docs.d.ts +51 -0
  60. package/dist/commands/docs.d.ts.map +1 -0
  61. package/dist/commands/docs.js +154 -0
  62. package/dist/commands/docs.js.map +1 -0
  63. package/dist/gen-orchestrator/orchestrator.d.ts.map +1 -1
  64. package/dist/gen-orchestrator/orchestrator.js +119 -14
  65. package/dist/gen-orchestrator/orchestrator.js.map +1 -1
  66. package/dist/resolver-extractor/extract-resolvers.d.ts +28 -1
  67. package/dist/resolver-extractor/extract-resolvers.d.ts.map +1 -1
  68. package/dist/resolver-extractor/extractor/define-api-extractor.d.ts +16 -1
  69. package/dist/resolver-extractor/extractor/define-api-extractor.d.ts.map +1 -1
  70. package/dist/resolver-extractor/extractor/define-api-extractor.js +86 -309
  71. package/dist/resolver-extractor/extractor/define-api-extractor.js.map +1 -1
  72. package/dist/resolver-extractor/index.d.ts +0 -1
  73. package/dist/resolver-extractor/index.d.ts.map +1 -1
  74. package/dist/resolver-extractor/validator/abstract-resolver-validator.d.ts +1 -0
  75. package/dist/resolver-extractor/validator/abstract-resolver-validator.d.ts.map +1 -1
  76. package/dist/resolver-extractor/validator/abstract-resolver-validator.js +9 -5
  77. package/dist/resolver-extractor/validator/abstract-resolver-validator.js.map +1 -1
  78. package/dist/schema-generator/emitter/code-emitter.d.ts +10 -2
  79. package/dist/schema-generator/emitter/code-emitter.d.ts.map +1 -1
  80. package/dist/schema-generator/emitter/code-emitter.js +39 -4
  81. package/dist/schema-generator/emitter/code-emitter.js.map +1 -1
  82. package/dist/schema-generator/generate-schema.d.ts +1 -0
  83. package/dist/schema-generator/generate-schema.d.ts.map +1 -1
  84. package/dist/schema-generator/generate-schema.js +90 -4
  85. package/dist/schema-generator/generate-schema.js.map +1 -1
  86. package/dist/schema-generator/integrator/result-integrator.d.ts +34 -2
  87. package/dist/schema-generator/integrator/result-integrator.d.ts.map +1 -1
  88. package/dist/schema-generator/integrator/result-integrator.js +96 -1
  89. package/dist/schema-generator/integrator/result-integrator.js.map +1 -1
  90. package/dist/schema-generator/resolver-collector/resolver-collector.d.ts +2 -0
  91. package/dist/schema-generator/resolver-collector/resolver-collector.d.ts.map +1 -1
  92. package/dist/schema-generator/resolver-collector/resolver-collector.js +22 -0
  93. package/dist/schema-generator/resolver-collector/resolver-collector.js.map +1 -1
  94. package/dist/shared/constants.d.ts +0 -16
  95. package/dist/shared/constants.d.ts.map +1 -1
  96. package/dist/shared/constants.js +0 -19
  97. package/dist/shared/constants.js.map +1 -1
  98. package/dist/shared/directive-detector.d.ts.map +1 -1
  99. package/dist/shared/directive-detector.js +8 -15
  100. package/dist/shared/directive-detector.js.map +1 -1
  101. package/dist/shared/enum-prefix-detector.d.ts +63 -0
  102. package/dist/shared/enum-prefix-detector.d.ts.map +1 -0
  103. package/dist/shared/enum-prefix-detector.js +80 -0
  104. package/dist/shared/enum-prefix-detector.js.map +1 -0
  105. package/dist/shared/file-scanner.d.ts.map +1 -1
  106. package/dist/shared/file-scanner.js +5 -3
  107. package/dist/shared/file-scanner.js.map +1 -1
  108. package/dist/shared/ignore-fields-detector.d.ts +26 -0
  109. package/dist/shared/ignore-fields-detector.d.ts.map +1 -0
  110. package/dist/shared/ignore-fields-detector.js +83 -0
  111. package/dist/shared/ignore-fields-detector.js.map +1 -0
  112. package/dist/shared/ignore-fields-validator.d.ts +29 -0
  113. package/dist/shared/ignore-fields-validator.d.ts.map +1 -0
  114. package/dist/shared/ignore-fields-validator.js +43 -0
  115. package/dist/shared/ignore-fields-validator.js.map +1 -0
  116. package/dist/shared/index.d.ts +3 -1
  117. package/dist/shared/index.d.ts.map +1 -1
  118. package/dist/shared/index.js +1 -3
  119. package/dist/shared/index.js.map +1 -1
  120. package/dist/shared/interface-detector.d.ts +3 -2
  121. package/dist/shared/interface-detector.d.ts.map +1 -1
  122. package/dist/shared/interface-detector.js +54 -11
  123. package/dist/shared/interface-detector.js.map +1 -1
  124. package/dist/shared/path-utils.d.ts +2 -0
  125. package/dist/shared/path-utils.d.ts.map +1 -0
  126. package/dist/shared/path-utils.js +4 -0
  127. package/dist/shared/path-utils.js.map +1 -0
  128. package/dist/shared/source-location.d.ts +5 -0
  129. package/dist/shared/source-location.d.ts.map +1 -1
  130. package/dist/shared/source-location.js +7 -0
  131. package/dist/shared/source-location.js.map +1 -1
  132. package/dist/shared/type-converter.d.ts.map +1 -1
  133. package/dist/shared/type-converter.js +11 -0
  134. package/dist/shared/type-converter.js.map +1 -1
  135. package/dist/shared/typescript-utils.d.ts +34 -7
  136. package/dist/shared/typescript-utils.d.ts.map +1 -1
  137. package/dist/shared/typescript-utils.js +72 -24
  138. package/dist/shared/typescript-utils.js.map +1 -1
  139. package/dist/type-extractor/collector/scalar-collector.d.ts.map +1 -1
  140. package/dist/type-extractor/collector/scalar-collector.js +4 -14
  141. package/dist/type-extractor/collector/scalar-collector.js.map +1 -1
  142. package/dist/type-extractor/converter/graphql-converter.d.ts.map +1 -1
  143. package/dist/type-extractor/converter/graphql-converter.js +57 -4
  144. package/dist/type-extractor/converter/graphql-converter.js.map +1 -1
  145. package/dist/type-extractor/extractor/field-type-resolver.d.ts +28 -0
  146. package/dist/type-extractor/extractor/field-type-resolver.d.ts.map +1 -0
  147. package/dist/type-extractor/extractor/field-type-resolver.js +433 -0
  148. package/dist/type-extractor/extractor/field-type-resolver.js.map +1 -0
  149. package/dist/type-extractor/extractor/type-extractor.d.ts +12 -3
  150. package/dist/type-extractor/extractor/type-extractor.d.ts.map +1 -1
  151. package/dist/type-extractor/extractor/type-extractor.js +260 -229
  152. package/dist/type-extractor/extractor/type-extractor.js.map +1 -1
  153. package/dist/type-extractor/extractor/type-name-collector.d.ts +24 -0
  154. package/dist/type-extractor/extractor/type-name-collector.d.ts.map +1 -0
  155. package/dist/type-extractor/extractor/type-name-collector.js +102 -0
  156. package/dist/type-extractor/extractor/type-name-collector.js.map +1 -0
  157. package/dist/type-extractor/mapper/scalar-base-type-mapper.d.ts +89 -0
  158. package/dist/type-extractor/mapper/scalar-base-type-mapper.d.ts.map +1 -0
  159. package/dist/type-extractor/mapper/scalar-base-type-mapper.js +158 -0
  160. package/dist/type-extractor/mapper/scalar-base-type-mapper.js.map +1 -0
  161. package/dist/type-extractor/types/diagnostics.d.ts +1 -1
  162. package/dist/type-extractor/types/diagnostics.d.ts.map +1 -1
  163. package/dist/type-extractor/types/graphql.d.ts +2 -0
  164. package/dist/type-extractor/types/graphql.d.ts.map +1 -1
  165. package/dist/type-extractor/types/index.d.ts +2 -1
  166. package/dist/type-extractor/types/index.d.ts.map +1 -1
  167. package/dist/type-extractor/types/index.js +1 -1
  168. package/dist/type-extractor/types/index.js.map +1 -1
  169. package/dist/type-extractor/types/ts-type-reference-factory.d.ts +47 -0
  170. package/dist/type-extractor/types/ts-type-reference-factory.d.ts.map +1 -0
  171. package/dist/type-extractor/types/ts-type-reference-factory.js +75 -0
  172. package/dist/type-extractor/types/ts-type-reference-factory.js.map +1 -0
  173. package/dist/type-extractor/types/typescript.d.ts +25 -1
  174. package/dist/type-extractor/types/typescript.d.ts.map +1 -1
  175. package/dist/type-extractor/validator/type-validator.js +1 -1
  176. package/dist/type-extractor/validator/type-validator.js.map +1 -1
  177. package/docs/coding-agents.md +64 -0
  178. package/docs/configuration.md +6 -20
  179. package/docs/getting-started.md +15 -12
  180. package/docs/index.md +36 -21
  181. package/docs/integration/apollo.md +8 -40
  182. package/docs/integration/drizzle.md +187 -0
  183. package/docs/integration/prisma.md +196 -0
  184. package/docs/integration/yoga.md +8 -40
  185. package/docs/schema/abstract-resolvers.md +117 -0
  186. package/docs/schema/directives.md +5 -0
  187. package/docs/schema/documentation.md +5 -0
  188. package/docs/schema/enums.md +307 -0
  189. package/docs/schema/fields.md +66 -0
  190. package/docs/schema/index.md +21 -0
  191. package/docs/schema/inputs.md +117 -15
  192. package/docs/schema/interfaces.md +31 -1
  193. package/docs/schema/objects.md +42 -0
  194. package/docs/schema/queries-mutations.md +138 -22
  195. package/docs/schema/scalars.md +5 -0
  196. package/docs/schema/unions.md +208 -1
  197. package/docs/what-is-gqlkit.md +13 -8
  198. package/package.json +14 -5
  199. package/src/auto-type-generator/auto-type-generator.ts +1670 -0
  200. package/src/auto-type-generator/index.ts +63 -0
  201. package/src/auto-type-generator/inline-enum-collector.ts +338 -0
  202. package/src/auto-type-generator/inline-object-traverser.ts +49 -0
  203. package/src/auto-type-generator/inline-union-collector.ts +402 -0
  204. package/src/auto-type-generator/inline-union-types.ts +33 -0
  205. package/src/auto-type-generator/inline-union-validator.ts +482 -0
  206. package/src/auto-type-generator/name-collision-validator.ts +119 -0
  207. package/src/auto-type-generator/naming-convention.ts +163 -0
  208. package/src/auto-type-generator/resolve-type-generator.ts +21 -0
  209. package/src/auto-type-generator/resolver-field-iterator.ts +39 -0
  210. package/src/auto-type-generator/typename-extractor.ts +230 -0
  211. package/src/auto-type-generator/typename-resolve-type-generator.ts +281 -0
  212. package/src/auto-type-generator/typename-types.ts +66 -0
  213. package/src/auto-type-generator/typename-validator.ts +326 -0
  214. package/src/cli.ts +13 -0
  215. package/src/commands/docs.ts +211 -0
  216. package/src/commands/gen.ts +141 -0
  217. package/src/commands/main.ts +5 -0
  218. package/src/config/define-config.ts +28 -0
  219. package/src/config/index.ts +7 -0
  220. package/src/config/types.ts +144 -0
  221. package/src/config-loader/index.ts +14 -0
  222. package/src/config-loader/loader.ts +143 -0
  223. package/src/config-loader/validator.ts +672 -0
  224. package/src/gen-orchestrator/hook-executor/hook-executor.ts +117 -0
  225. package/src/gen-orchestrator/orchestrator.ts +798 -0
  226. package/src/gen-orchestrator/reporter/diagnostic-reporter.ts +44 -0
  227. package/src/gen-orchestrator/reporter/progress-reporter.ts +61 -0
  228. package/src/gen-orchestrator/writer/file-writer.ts +38 -0
  229. package/src/index.ts +2 -0
  230. package/src/resolver-extractor/extract-resolvers.ts +82 -0
  231. package/src/resolver-extractor/extractor/define-api-extractor.ts +740 -0
  232. package/src/resolver-extractor/index.ts +13 -0
  233. package/src/resolver-extractor/validator/abstract-resolver-validator.ts +259 -0
  234. package/src/schema-generator/builder/ast-builder.ts +706 -0
  235. package/src/schema-generator/emitter/code-emitter.ts +385 -0
  236. package/src/schema-generator/emitter/sdl-emitter.ts +13 -0
  237. package/src/schema-generator/generate-schema.ts +267 -0
  238. package/src/schema-generator/index.ts +19 -0
  239. package/src/schema-generator/integrator/result-integrator.ts +759 -0
  240. package/src/schema-generator/pruner/schema-pruner.ts +112 -0
  241. package/src/schema-generator/resolver-collector/resolver-collector.ts +157 -0
  242. package/src/shared/constants.ts +122 -0
  243. package/src/shared/default-value-detector.ts +172 -0
  244. package/src/shared/diagnostics.ts +35 -0
  245. package/src/shared/directive-definition-extractor.ts +564 -0
  246. package/src/shared/directive-detector.ts +556 -0
  247. package/src/shared/enum-prefix-detector.ts +99 -0
  248. package/src/shared/file-scanner.ts +170 -0
  249. package/src/shared/ignore-fields-detector.ts +109 -0
  250. package/src/shared/ignore-fields-validator.ts +66 -0
  251. package/src/shared/index.ts +34 -0
  252. package/src/shared/inline-object-extractor.ts +102 -0
  253. package/src/shared/inline-object-utils.ts +23 -0
  254. package/src/shared/interface-detector.ts +176 -0
  255. package/src/shared/interface-validator.ts +211 -0
  256. package/src/shared/metadata-detector.ts +443 -0
  257. package/src/shared/path-utils.ts +3 -0
  258. package/src/shared/program-factory.ts +51 -0
  259. package/src/shared/source-location.ts +38 -0
  260. package/src/shared/tsconfig-loader.ts +126 -0
  261. package/src/shared/tsdoc-parser.ts +155 -0
  262. package/src/shared/type-converter.ts +99 -0
  263. package/src/shared/typescript-utils.ts +246 -0
  264. package/src/type-extractor/collector/result-collector.ts +57 -0
  265. package/src/type-extractor/collector/scalar-collector.ts +254 -0
  266. package/src/type-extractor/converter/field-eligibility.ts +112 -0
  267. package/src/type-extractor/converter/graphql-converter.ts +483 -0
  268. package/src/type-extractor/extract-types.ts +1 -0
  269. package/src/type-extractor/extractor/field-type-resolver.ts +614 -0
  270. package/src/type-extractor/extractor/type-extractor.ts +1644 -0
  271. package/src/type-extractor/extractor/type-name-collector.ts +130 -0
  272. package/src/type-extractor/index.ts +20 -0
  273. package/src/type-extractor/mapper/scalar-base-type-mapper.ts +265 -0
  274. package/src/type-extractor/types/diagnostics.ts +109 -0
  275. package/src/type-extractor/types/graphql.ts +55 -0
  276. package/src/type-extractor/types/index.ts +37 -0
  277. package/src/type-extractor/types/ts-type-reference-factory.ts +150 -0
  278. package/src/type-extractor/types/typescript.ts +137 -0
  279. package/src/type-extractor/validator/type-validator.ts +77 -0
  280. package/dist/auto-type-generator/auto-type-generator.test.d.ts +0 -2
  281. package/dist/auto-type-generator/auto-type-generator.test.d.ts.map +0 -1
  282. package/dist/auto-type-generator/auto-type-generator.test.js +0 -613
  283. package/dist/auto-type-generator/auto-type-generator.test.js.map +0 -1
  284. package/dist/auto-type-generator/name-collision-validator.test.d.ts +0 -2
  285. package/dist/auto-type-generator/name-collision-validator.test.d.ts.map +0 -1
  286. package/dist/auto-type-generator/name-collision-validator.test.js +0 -358
  287. package/dist/auto-type-generator/name-collision-validator.test.js.map +0 -1
  288. package/dist/auto-type-generator/naming-convention.test.d.ts +0 -2
  289. package/dist/auto-type-generator/naming-convention.test.d.ts.map +0 -1
  290. package/dist/auto-type-generator/naming-convention.test.js +0 -132
  291. package/dist/auto-type-generator/naming-convention.test.js.map +0 -1
  292. package/dist/commands/gen.test.d.ts +0 -2
  293. package/dist/commands/gen.test.d.ts.map +0 -1
  294. package/dist/commands/gen.test.js +0 -226
  295. package/dist/commands/gen.test.js.map +0 -1
  296. package/dist/config-loader/loader.test.d.ts +0 -2
  297. package/dist/config-loader/loader.test.d.ts.map +0 -1
  298. package/dist/config-loader/loader.test.js +0 -123
  299. package/dist/config-loader/loader.test.js.map +0 -1
  300. package/dist/config-loader/validator.test.d.ts +0 -2
  301. package/dist/config-loader/validator.test.d.ts.map +0 -1
  302. package/dist/config-loader/validator.test.js +0 -846
  303. package/dist/config-loader/validator.test.js.map +0 -1
  304. package/dist/gen-orchestrator/golden.test.d.ts +0 -2
  305. package/dist/gen-orchestrator/golden.test.d.ts.map +0 -1
  306. package/dist/gen-orchestrator/golden.test.js +0 -102
  307. package/dist/gen-orchestrator/golden.test.js.map +0 -1
  308. package/dist/gen-orchestrator/hook-executor/hook-executor.test.d.ts +0 -2
  309. package/dist/gen-orchestrator/hook-executor/hook-executor.test.d.ts.map +0 -1
  310. package/dist/gen-orchestrator/hook-executor/hook-executor.test.js +0 -167
  311. package/dist/gen-orchestrator/hook-executor/hook-executor.test.js.map +0 -1
  312. package/dist/gen-orchestrator/reporter/progress-reporter.test.d.ts +0 -2
  313. package/dist/gen-orchestrator/reporter/progress-reporter.test.d.ts.map +0 -1
  314. package/dist/gen-orchestrator/reporter/progress-reporter.test.js +0 -74
  315. package/dist/gen-orchestrator/reporter/progress-reporter.test.js.map +0 -1
  316. package/dist/resolver-extractor/validator/only-validator.d.ts +0 -61
  317. package/dist/resolver-extractor/validator/only-validator.d.ts.map +0 -1
  318. package/dist/resolver-extractor/validator/only-validator.js +0 -76
  319. package/dist/resolver-extractor/validator/only-validator.js.map +0 -1
  320. package/dist/resolver-extractor/validator/only-validator.test.d.ts +0 -8
  321. package/dist/resolver-extractor/validator/only-validator.test.d.ts.map +0 -1
  322. package/dist/resolver-extractor/validator/only-validator.test.js +0 -352
  323. package/dist/resolver-extractor/validator/only-validator.test.js.map +0 -1
  324. package/dist/schema-generator/builder/ast-builder.test.d.ts +0 -2
  325. package/dist/schema-generator/builder/ast-builder.test.d.ts.map +0 -1
  326. package/dist/schema-generator/builder/ast-builder.test.js +0 -469
  327. package/dist/schema-generator/builder/ast-builder.test.js.map +0 -1
  328. package/dist/shared/file-scanner.test.d.ts +0 -2
  329. package/dist/shared/file-scanner.test.d.ts.map +0 -1
  330. package/dist/shared/file-scanner.test.js +0 -138
  331. package/dist/shared/file-scanner.test.js.map +0 -1
  332. package/dist/shared/interface-validator.test.d.ts +0 -2
  333. package/dist/shared/interface-validator.test.d.ts.map +0 -1
  334. package/dist/shared/interface-validator.test.js +0 -145
  335. package/dist/shared/interface-validator.test.js.map +0 -1
  336. package/dist/type-extractor/types/typescript.test.d.ts +0 -2
  337. package/dist/type-extractor/types/typescript.test.d.ts.map +0 -1
  338. package/dist/type-extractor/types/typescript.test.js +0 -287
  339. package/dist/type-extractor/types/typescript.test.js.map +0 -1
@@ -0,0 +1,614 @@
1
+ import ts from "typescript";
2
+ import { isInternalTypeSymbol } from "../../shared/constants.js";
3
+ import { extractInlineObjectProperties as extractInlineObjectPropertiesShared } from "../../shared/inline-object-extractor.js";
4
+ import { isInlineObjectType } from "../../shared/inline-object-utils.js";
5
+ import { detectScalarMetadata } from "../../shared/metadata-detector.js";
6
+ import {
7
+ type DeprecationInfo,
8
+ extractTsDocFromSymbol,
9
+ } from "../../shared/tsdoc-parser.js";
10
+ import {
11
+ findEnumParentSymbol,
12
+ findNonNullTypeNode,
13
+ getNonNullableTypes,
14
+ getTypeNameFromNode,
15
+ isBooleanUnion,
16
+ isNullableUnion,
17
+ resolveOriginalSymbol,
18
+ } from "../../shared/typescript-utils.js";
19
+ import type {
20
+ ScalarBaseTypeMappingTable,
21
+ ScalarMappingContext,
22
+ } from "../mapper/scalar-base-type-mapper.js";
23
+ import { lookupScalarMapping } from "../mapper/scalar-base-type-mapper.js";
24
+ import {
25
+ createArrayType,
26
+ createInlineEnumType,
27
+ createInlineObjectType,
28
+ createLiteralType,
29
+ createPrimitiveType,
30
+ createReferenceType,
31
+ createScalarType,
32
+ createUnionType,
33
+ } from "../types/ts-type-reference-factory.js";
34
+ import type {
35
+ InlineEnumMemberInfo,
36
+ TSTypeReference,
37
+ } from "../types/typescript.js";
38
+ import type { GlobalTypeMapping } from "./type-extractor.js";
39
+
40
+ export interface FieldTypeResolverContext {
41
+ readonly checker: ts.TypeChecker;
42
+ readonly knownTypeNames: ReadonlySet<string>;
43
+ readonly knownTypeSymbols: ReadonlyMap<string, ts.Symbol>;
44
+ readonly underlyingSymbolToTypeName: ReadonlyMap<ts.Symbol, string>;
45
+ readonly globalTypeMappings: ReadonlyArray<GlobalTypeMapping>;
46
+ readonly sourceFiles: ReadonlySet<string>;
47
+ /** Scalar base type mapping table for automatic base type -> scalar mapping */
48
+ readonly scalarMappingTable: ScalarBaseTypeMappingTable | null;
49
+ /** Current resolution context for scalar mapping (input or output) */
50
+ readonly scalarMappingContext: ScalarMappingContext;
51
+ }
52
+
53
+ /**
54
+ * Internal context including cycle detection state.
55
+ */
56
+ interface InternalFieldTypeContext extends FieldTypeResolverContext {
57
+ readonly visitedTypes: WeakSet<ts.Type>;
58
+ }
59
+
60
+ /**
61
+ * Resolves a TypeScript type to a TSTypeReference for use in field context.
62
+ *
63
+ * This function is specifically for field type resolution (not type declarations).
64
+ * Key differences from type declaration context:
65
+ * - Uses knownTypeNames to determine if a type exists in the schema
66
+ * - Intersection types are always treated as inline objects
67
+ * - Utility types (both builtin and user-defined) are treated as inline objects
68
+ * unless they are explicitly declared in the schema
69
+ */
70
+ export function resolveFieldType(
71
+ type: ts.Type,
72
+ typeNode: ts.TypeNode | undefined,
73
+ ctx: FieldTypeResolverContext,
74
+ ): TSTypeReference {
75
+ const internalCtx: InternalFieldTypeContext = {
76
+ ...ctx,
77
+ visitedTypes: new WeakSet(),
78
+ };
79
+ return resolveFieldTypeInternal(type, typeNode, internalCtx);
80
+ }
81
+
82
+ function resolveFieldTypeInternal(
83
+ type: ts.Type,
84
+ typeNode: ts.TypeNode | undefined,
85
+ ctx: InternalFieldTypeContext,
86
+ ): TSTypeReference {
87
+ const { checker, knownTypeNames, globalTypeMappings } = ctx;
88
+
89
+ // Scalar detection
90
+ const metadataResult = detectScalarMetadata(type, checker);
91
+ if (
92
+ metadataResult.scalarName &&
93
+ !metadataResult.isPrimitive &&
94
+ !metadataResult.isList
95
+ ) {
96
+ return createScalarType({
97
+ name: metadataResult.scalarName,
98
+ scalarInfo: {
99
+ scalarName: metadataResult.scalarName,
100
+ typeName: metadataResult.scalarName,
101
+ baseType: undefined,
102
+ isCustom: true,
103
+ only: metadataResult.only,
104
+ },
105
+ nullable: metadataResult.nullable,
106
+ });
107
+ }
108
+
109
+ // Boolean union handling
110
+ if (isBooleanUnion(type)) {
111
+ const nullable = isNullableUnion(type);
112
+ return createPrimitiveType({ name: "boolean", nullable });
113
+ }
114
+
115
+ // Union type handling
116
+ if (type.isUnion()) {
117
+ const nullable = isNullableUnion(type);
118
+
119
+ // Preserve type alias name for enum types (string literal unions)
120
+ const aliasSymbol = type.aliasSymbol;
121
+ if (aliasSymbol) {
122
+ const name = aliasSymbol.getName();
123
+ if (isKnownSchemaType(name, aliasSymbol, ctx)) {
124
+ return createReferenceType({ name, nullable });
125
+ }
126
+ }
127
+
128
+ // Fallback: Extract name from typeNode when aliasSymbol is not available (e.g., re-exported types)
129
+ if (typeNode && ts.isTypeReferenceNode(typeNode)) {
130
+ const typeName = getTypeNameFromNode(typeNode);
131
+ const nodeSymbol = checker.getSymbolAtLocation(typeNode.typeName);
132
+ if (
133
+ typeName &&
134
+ isKnownSchemaType(typeName, nodeSymbol ?? undefined, ctx)
135
+ ) {
136
+ return createReferenceType({ name: typeName, nullable });
137
+ }
138
+ }
139
+
140
+ const nonNullTypes = getNonNullableTypes(type);
141
+
142
+ // Check if all non-null types belong to the same enum
143
+ const enumParentSymbol = findEnumParentSymbol(nonNullTypes);
144
+ if (enumParentSymbol) {
145
+ const enumName = enumParentSymbol.getName();
146
+ // If enum is in knownTypeNames, treat as reference type
147
+ if (isKnownSchemaType(enumName, enumParentSymbol, ctx)) {
148
+ return createReferenceType({ name: enumName, nullable });
149
+ }
150
+ // External enum: extract members and treat as inline enum
151
+ const externalEnumResult = tryExtractExternalEnumAsInlineEnum(
152
+ enumParentSymbol,
153
+ checker,
154
+ );
155
+ if (externalEnumResult) {
156
+ return createInlineEnumType({
157
+ members: externalEnumResult.members,
158
+ nullable,
159
+ externalEnumSymbol: enumParentSymbol,
160
+ externalEnumDescription: externalEnumResult.description,
161
+ externalEnumDeprecated: externalEnumResult.deprecated,
162
+ });
163
+ }
164
+ }
165
+
166
+ // Check if all non-null types are string literals (inline enum)
167
+ const inlineEnumResult = tryExtractAsInlineEnum(nonNullTypes);
168
+ if (inlineEnumResult) {
169
+ return createInlineEnumType({
170
+ members: inlineEnumResult,
171
+ nullable,
172
+ externalEnumSymbol: null,
173
+ externalEnumDescription: null,
174
+ externalEnumDeprecated: null,
175
+ });
176
+ }
177
+
178
+ if (nonNullTypes.length === 1) {
179
+ const nonNullTypeNode =
180
+ typeNode && ts.isUnionTypeNode(typeNode)
181
+ ? findNonNullTypeNode(typeNode)
182
+ : undefined;
183
+
184
+ const innerResult = resolveFieldTypeInternal(
185
+ nonNullTypes[0]!,
186
+ nonNullTypeNode,
187
+ ctx,
188
+ );
189
+ return { ...innerResult, nullable };
190
+ }
191
+
192
+ const memberResults = nonNullTypes.map((t) =>
193
+ resolveFieldTypeInternal(t, undefined, ctx),
194
+ );
195
+
196
+ return createUnionType({ members: memberResults, nullable });
197
+ }
198
+
199
+ // Array type handling
200
+ if (checker.isArrayType(type)) {
201
+ const typeArgs = (type as ts.TypeReference).typeArguments;
202
+ const elementType = typeArgs?.[0];
203
+
204
+ let elementTypeNode: ts.TypeNode | undefined;
205
+ if (typeNode && ts.isArrayTypeNode(typeNode)) {
206
+ elementTypeNode = typeNode.elementType;
207
+ }
208
+
209
+ const elementResult = elementType
210
+ ? resolveFieldTypeInternal(elementType, elementTypeNode, ctx)
211
+ : createPrimitiveType({ name: "unknown", nullable: false });
212
+
213
+ return createArrayType(elementResult);
214
+ }
215
+
216
+ // Primitive types
217
+ const typeString = checker.typeToString(type);
218
+
219
+ if (type.flags & ts.TypeFlags.String) {
220
+ return createPrimitiveType({ name: "string", nullable: false });
221
+ }
222
+ if (type.flags & ts.TypeFlags.Number) {
223
+ return createPrimitiveType({ name: "number", nullable: false });
224
+ }
225
+ if (
226
+ type.flags & ts.TypeFlags.Boolean ||
227
+ type.flags & ts.TypeFlags.BooleanLiteral
228
+ ) {
229
+ return createPrimitiveType({ name: "boolean", nullable: false });
230
+ }
231
+ if (type.flags & ts.TypeFlags.StringLiteral) {
232
+ return createLiteralType(typeString.replace(/"/g, ""));
233
+ }
234
+ if (type.flags & ts.TypeFlags.NumberLiteral) {
235
+ return createLiteralType(typeString);
236
+ }
237
+
238
+ // Intersection types in field context are ALWAYS treated as inline objects
239
+ // GraphQL doesn't have intersection types, so we must expand them
240
+ if (type.isIntersection()) {
241
+ // If the intersection has an alias that's in knownTypeNames, use it
242
+ if (type.aliasSymbol) {
243
+ const aliasName = type.aliasSymbol.getName();
244
+ if (isKnownSchemaType(aliasName, type.aliasSymbol, ctx)) {
245
+ return createReferenceType({ name: aliasName, nullable: false });
246
+ }
247
+ }
248
+
249
+ // Otherwise, treat as inline object
250
+ return tryExtractAsInlineObject(type, ctx);
251
+ }
252
+
253
+ // Inline object type handling
254
+ if (isInlineObjectType(type)) {
255
+ // Check if typeNode references a known type
256
+ if (typeNode && ts.isTypeReferenceNode(typeNode)) {
257
+ const typeName = getTypeNameFromNode(typeNode);
258
+ const nodeSymbol = checker.getSymbolAtLocation(typeNode.typeName);
259
+ if (
260
+ typeName &&
261
+ isKnownSchemaType(typeName, nodeSymbol ?? undefined, ctx)
262
+ ) {
263
+ return createReferenceType({ name: typeName, nullable: false });
264
+ }
265
+ }
266
+
267
+ return tryExtractAsInlineObject(type, ctx);
268
+ }
269
+
270
+ // Mapped types (utility types like Omit, Pick, user-defined utilities)
271
+ if (type.flags & ts.TypeFlags.Object) {
272
+ const objectType = type as ts.ObjectType;
273
+ if (objectType.objectFlags & ts.ObjectFlags.Mapped) {
274
+ // Check if typeNode references a known type (schema-defined type)
275
+ if (typeNode && ts.isTypeReferenceNode(typeNode)) {
276
+ const typeName = getTypeNameFromNode(typeNode);
277
+ const nodeSymbol = checker.getSymbolAtLocation(typeNode.typeName);
278
+ if (
279
+ typeName &&
280
+ isKnownSchemaType(typeName, nodeSymbol ?? undefined, ctx)
281
+ ) {
282
+ return createReferenceType({ name: typeName, nullable: false });
283
+ }
284
+ }
285
+ // Not a known type - treat as inline object
286
+ return tryExtractAsInlineObject(type, ctx);
287
+ }
288
+ }
289
+
290
+ // Type alias expansion: type aliases not in knownTypeNames should be expanded as inline objects
291
+ // This handles cases like: type MyPayload = { user: User; success: boolean; }
292
+ // where MyPayload is used as return type but not declared as a schema type
293
+ // Only expand if the underlying type is an anonymous object literal, not a named type
294
+ // IMPORTANT: Only expand if the name doesn't exist in schema at all.
295
+ // If the name exists but symbols don't match, that's a shadowing case handled by later logic.
296
+ if (type.aliasSymbol) {
297
+ const aliasName = type.aliasSymbol.getName();
298
+ if (!knownTypeNames.has(aliasName)) {
299
+ // Check if this is an anonymous object type (not an interface or another named type)
300
+ // using ts.ObjectFlags.Anonymous for a more robust check than internal symbol names
301
+ const isAnonymousObject =
302
+ (type.flags & ts.TypeFlags.Object) !== 0 &&
303
+ ((type as ts.ObjectType).objectFlags & ts.ObjectFlags.Anonymous) !== 0;
304
+
305
+ if (isAnonymousObject) {
306
+ // Not a known schema type and is an anonymous object - expand to generate Payload type
307
+ return tryExtractAsInlineObject(type, ctx);
308
+ }
309
+ }
310
+ }
311
+
312
+ // Extract type name from typeNode first (takes precedence over type.symbol).
313
+ // This handles cases like:
314
+ // - `typeof def` where the type's symbol is internal (__type, __object)
315
+ // - `Simplify<T>` where the typeNode is the declared alias name but type.symbol is the expanded type
316
+ if (typeNode && ts.isTypeReferenceNode(typeNode)) {
317
+ const typeName = getTypeNameFromNode(typeNode);
318
+ const nodeSymbol = checker.getSymbolAtLocation(typeNode.typeName);
319
+ if (typeName && isKnownSchemaType(typeName, nodeSymbol ?? undefined, ctx)) {
320
+ return createReferenceType({ name: typeName, nullable: false });
321
+ }
322
+ }
323
+
324
+ // Named type reference (symbol-based lookup)
325
+ if (type.symbol) {
326
+ const symbolName = type.symbol.getName();
327
+
328
+ if (!isInternalTypeSymbol(symbolName)) {
329
+ // Check for global type mappings (custom scalars)
330
+ const globalMapping = globalTypeMappings.find(
331
+ (m) => m.typeName === symbolName,
332
+ );
333
+ if (globalMapping) {
334
+ return createScalarType({
335
+ name: globalMapping.scalarName,
336
+ scalarInfo: {
337
+ scalarName: globalMapping.scalarName,
338
+ typeName: globalMapping.typeName,
339
+ baseType: undefined,
340
+ isCustom: true,
341
+ only: globalMapping.only,
342
+ },
343
+ nullable: false,
344
+ });
345
+ }
346
+
347
+ // Check if it's a known type by symbol comparison
348
+ if (isKnownSchemaType(symbolName, type.symbol, ctx)) {
349
+ return createReferenceType({ name: symbolName, nullable: false });
350
+ }
351
+
352
+ // Check if the symbol is the underlying type of a schema type alias
353
+ // For `type User = ExternalUser;`, this allows `ExternalUser` to be recognized as `User`
354
+ const resolvedSymbol = resolveOriginalSymbol(type.symbol, checker);
355
+ const schemaTypeName = ctx.underlyingSymbolToTypeName.get(resolvedSymbol);
356
+ if (schemaTypeName) {
357
+ return createReferenceType({ name: schemaTypeName, nullable: false });
358
+ }
359
+
360
+ // If the name exists in schema but symbol doesn't match,
361
+ // it's a different type with the same name
362
+ if (knownTypeNames.has(symbolName)) {
363
+ // Check if the type is declared within schema files (local shadowing)
364
+ if (isTypeFromSchemaFiles(type.symbol, ctx.sourceFiles)) {
365
+ // Local shadowing - use name matching for backwards compatibility
366
+ return createReferenceType({ name: symbolName, nullable: false });
367
+ }
368
+ // Type from outside schema files - expand as inline object
369
+ return tryExtractAsInlineObject(type, ctx);
370
+ }
371
+
372
+ // Check for scalar base type mapping
373
+ // This allows automatic mapping of base types (e.g., Date) to scalar types (e.g., DateTime)
374
+ if (ctx.scalarMappingTable) {
375
+ const scalarMappingResult = lookupScalarMapping({
376
+ baseTypeSymbol: resolvedSymbol,
377
+ context: ctx.scalarMappingContext,
378
+ table: ctx.scalarMappingTable,
379
+ });
380
+
381
+ if (scalarMappingResult.mapping) {
382
+ return createScalarType({
383
+ name: scalarMappingResult.mapping.scalarName,
384
+ scalarInfo: {
385
+ scalarName: scalarMappingResult.mapping.scalarName,
386
+ typeName: scalarMappingResult.mapping.sourceTypeName,
387
+ baseType: undefined,
388
+ isCustom: true,
389
+ only: scalarMappingResult.mapping.only,
390
+ },
391
+ nullable: false,
392
+ });
393
+ }
394
+ // Note: Conflicts are handled at the pipeline level, not here
395
+ }
396
+
397
+ // Check for external TypeScript enum (not in knownTypeNames)
398
+ // When a field uses an enum type directly (not as a union), handle it here
399
+ // Check both symbol flags and declarations since the flags may vary
400
+ const isEnumSymbol =
401
+ (resolvedSymbol.flags & ts.SymbolFlags.Enum) !== 0 ||
402
+ resolvedSymbol.getDeclarations()?.some(ts.isEnumDeclaration) === true;
403
+ if (isEnumSymbol) {
404
+ const externalEnumResult = tryExtractExternalEnumAsInlineEnum(
405
+ resolvedSymbol,
406
+ checker,
407
+ );
408
+ if (externalEnumResult) {
409
+ return createInlineEnumType({
410
+ members: externalEnumResult.members,
411
+ nullable: false,
412
+ externalEnumSymbol: resolvedSymbol,
413
+ externalEnumDescription: externalEnumResult.description,
414
+ externalEnumDeprecated: externalEnumResult.deprecated,
415
+ });
416
+ }
417
+ }
418
+
419
+ // Unknown type - still return reference but it will likely cause validation error later
420
+ return createReferenceType({ name: symbolName, nullable: false });
421
+ }
422
+ }
423
+
424
+ return createReferenceType({ name: typeString, nullable: false });
425
+ }
426
+
427
+ function tryExtractAsInlineObject(
428
+ type: ts.Type,
429
+ ctx: InternalFieldTypeContext,
430
+ ): TSTypeReference {
431
+ const { visitedTypes, checker } = ctx;
432
+ if (visitedTypes.has(type)) {
433
+ // Cycle detected, return a placeholder reference
434
+ const typeName = type.symbol?.getName() ?? "Unknown";
435
+ return createReferenceType({ name: typeName, nullable: false });
436
+ }
437
+
438
+ visitedTypes.add(type);
439
+
440
+ const inlineProperties = extractInlineObjectPropertiesShared(
441
+ type,
442
+ checker,
443
+ (propType) => resolveFieldTypeInternal(propType, undefined, ctx),
444
+ );
445
+
446
+ // Extract type-level TSDoc from the alias symbol if present (Requirement 7.2)
447
+ // Only extract from user-defined types, not built-in TypeScript utility types
448
+ let description: string | null = null;
449
+ let deprecated: DeprecationInfo | null = null;
450
+ if (type.aliasSymbol) {
451
+ const declarations = type.aliasSymbol.getDeclarations();
452
+ const isUserDefined =
453
+ declarations?.some((decl) => {
454
+ const sourceFile = decl.getSourceFile();
455
+ return !sourceFile.isDeclarationFile;
456
+ }) ?? false;
457
+
458
+ if (isUserDefined) {
459
+ const tsdocInfo = extractTsDocFromSymbol(type.aliasSymbol, checker);
460
+ description = tsdocInfo.description;
461
+ deprecated = tsdocInfo.deprecated;
462
+ }
463
+ }
464
+
465
+ return createInlineObjectType({
466
+ properties: inlineProperties,
467
+ description,
468
+ deprecated,
469
+ });
470
+ }
471
+
472
+ /**
473
+ * Checks if all types are string literals and extracts them as inline enum members.
474
+ * Returns null if any type is not a string literal.
475
+ */
476
+ function tryExtractAsInlineEnum(
477
+ types: ReadonlyArray<ts.Type>,
478
+ ): ReadonlyArray<InlineEnumMemberInfo> | null {
479
+ if (types.length === 0) {
480
+ return null;
481
+ }
482
+
483
+ const members: InlineEnumMemberInfo[] = [];
484
+
485
+ for (const type of types) {
486
+ if (!(type.flags & ts.TypeFlags.StringLiteral)) {
487
+ return null;
488
+ }
489
+
490
+ const literalType = type as ts.StringLiteralType;
491
+ const value = literalType.value;
492
+
493
+ members.push({
494
+ value,
495
+ description: null,
496
+ deprecated: null,
497
+ });
498
+ }
499
+
500
+ return members;
501
+ }
502
+
503
+ /**
504
+ * Result of extracting an external TypeScript enum.
505
+ * Includes both member info and type-level TSDoc.
506
+ */
507
+ interface ExternalEnumExtractionResult {
508
+ readonly members: ReadonlyArray<InlineEnumMemberInfo>;
509
+ /** TSDoc description from the enum type itself */
510
+ readonly description: string | null;
511
+ /** @deprecated tag from the enum type itself */
512
+ readonly deprecated: DeprecationInfo | null;
513
+ }
514
+
515
+ /**
516
+ * Extracts enum members from an external TypeScript enum symbol.
517
+ * Returns the member info including TSDoc description and deprecated status,
518
+ * as well as the enum type's own TSDoc information.
519
+ * Returns null if the enum declaration cannot be found or has no valid members.
520
+ */
521
+ function tryExtractExternalEnumAsInlineEnum(
522
+ enumSymbol: ts.Symbol,
523
+ checker: ts.TypeChecker,
524
+ ): ExternalEnumExtractionResult | null {
525
+ const declarations = enumSymbol.getDeclarations();
526
+ if (!declarations || declarations.length === 0) {
527
+ return null;
528
+ }
529
+
530
+ const enumDeclaration = declarations.find(ts.isEnumDeclaration);
531
+ if (!enumDeclaration) {
532
+ return null;
533
+ }
534
+
535
+ const members: InlineEnumMemberInfo[] = [];
536
+
537
+ for (const member of enumDeclaration.members) {
538
+ const initializer = member.initializer;
539
+ if (!initializer || !ts.isStringLiteral(initializer)) {
540
+ continue;
541
+ }
542
+
543
+ const value = initializer.text;
544
+ const memberSymbol = checker.getSymbolAtLocation(member.name);
545
+ const tsdocInfo = memberSymbol
546
+ ? extractTsDocFromSymbol(memberSymbol, checker)
547
+ : { description: null, deprecated: null };
548
+
549
+ members.push({
550
+ value,
551
+ description: tsdocInfo.description,
552
+ deprecated: tsdocInfo.deprecated,
553
+ });
554
+ }
555
+
556
+ if (members.length === 0) {
557
+ return null;
558
+ }
559
+
560
+ // Extract TSDoc from the enum type itself
561
+ const enumTsDoc = extractTsDocFromSymbol(enumSymbol, checker);
562
+
563
+ return {
564
+ members,
565
+ description: enumTsDoc.description,
566
+ deprecated: enumTsDoc.deprecated,
567
+ };
568
+ }
569
+
570
+ /**
571
+ * Checks if a type's symbol matches the known schema type symbol.
572
+ * Returns true if both name matches AND symbol matches (or if symbol comparison is not possible).
573
+ */
574
+ function isKnownSchemaType(
575
+ name: string,
576
+ typeSymbol: ts.Symbol | undefined,
577
+ ctx: FieldTypeResolverContext,
578
+ ): boolean {
579
+ const { knownTypeNames, knownTypeSymbols, checker } = ctx;
580
+
581
+ if (!knownTypeNames.has(name)) {
582
+ return false;
583
+ }
584
+
585
+ const schemaSymbol = knownTypeSymbols.get(name);
586
+ if (!schemaSymbol || !typeSymbol) {
587
+ return false;
588
+ }
589
+
590
+ const resolvedTypeSymbol = resolveOriginalSymbol(typeSymbol, checker);
591
+ return resolvedTypeSymbol === schemaSymbol;
592
+ }
593
+
594
+ /**
595
+ * Checks if a type's symbol is declared within the schema source files.
596
+ * Returns true if the type is a local definition (shadowing), false if from external files.
597
+ */
598
+ function isTypeFromSchemaFiles(
599
+ symbol: ts.Symbol,
600
+ sourceFiles: ReadonlySet<string>,
601
+ ): boolean {
602
+ const declarations = symbol.getDeclarations();
603
+ if (!declarations || declarations.length === 0) {
604
+ return false;
605
+ }
606
+
607
+ const declaration = declarations[0];
608
+ if (!declaration) {
609
+ return false;
610
+ }
611
+
612
+ const sourceFile = declaration.getSourceFile();
613
+ return sourceFiles.has(sourceFile.fileName);
614
+ }