openapi-typesafe 0.0.0 → 1.0.0-rc.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 (678) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +71 -1
  3. package/bin/cli.js +4 -0
  4. package/dist/adapters/node-file-system/node-file-system.cjs +46 -0
  5. package/dist/adapters/node-file-system/node-file-system.cjs.map +1 -0
  6. package/dist/adapters/node-file-system/node-file-system.mjs +40 -0
  7. package/dist/adapters/node-file-system/node-file-system.mjs.map +1 -0
  8. package/dist/adapters/redocly-loader/alias-limit.cjs +16 -0
  9. package/dist/adapters/redocly-loader/alias-limit.cjs.map +1 -0
  10. package/dist/adapters/redocly-loader/alias-limit.mjs +14 -0
  11. package/dist/adapters/redocly-loader/alias-limit.mjs.map +1 -0
  12. package/dist/adapters/redocly-loader/allowed-hosts.cjs +42 -0
  13. package/dist/adapters/redocly-loader/allowed-hosts.cjs.map +1 -0
  14. package/dist/adapters/redocly-loader/allowed-hosts.mjs +40 -0
  15. package/dist/adapters/redocly-loader/allowed-hosts.mjs.map +1 -0
  16. package/dist/adapters/redocly-loader/bundled-ref-repair.cjs +53 -0
  17. package/dist/adapters/redocly-loader/bundled-ref-repair.cjs.map +1 -0
  18. package/dist/adapters/redocly-loader/bundled-ref-repair.mjs +51 -0
  19. package/dist/adapters/redocly-loader/bundled-ref-repair.mjs.map +1 -0
  20. package/dist/adapters/redocly-loader/malformed-refs.cjs +41 -0
  21. package/dist/adapters/redocly-loader/malformed-refs.cjs.map +1 -0
  22. package/dist/adapters/redocly-loader/malformed-refs.mjs +38 -0
  23. package/dist/adapters/redocly-loader/malformed-refs.mjs.map +1 -0
  24. package/dist/adapters/redocly-loader/redocly-config-source.cjs +42 -0
  25. package/dist/adapters/redocly-loader/redocly-config-source.cjs.map +1 -0
  26. package/dist/adapters/redocly-loader/redocly-config-source.mjs +35 -0
  27. package/dist/adapters/redocly-loader/redocly-config-source.mjs.map +1 -0
  28. package/dist/adapters/redocly-loader/redocly-schema-loader.cjs +169 -0
  29. package/dist/adapters/redocly-loader/redocly-schema-loader.cjs.map +1 -0
  30. package/dist/adapters/redocly-loader/redocly-schema-loader.mjs +167 -0
  31. package/dist/adapters/redocly-loader/redocly-schema-loader.mjs.map +1 -0
  32. package/dist/adapters/redocly-loader/ref-access.cjs +107 -0
  33. package/dist/adapters/redocly-loader/ref-access.cjs.map +1 -0
  34. package/dist/adapters/redocly-loader/ref-access.mjs +99 -0
  35. package/dist/adapters/redocly-loader/ref-access.mjs.map +1 -0
  36. package/dist/adapters/redocly-loader/ref-holders.cjs +31 -0
  37. package/dist/adapters/redocly-loader/ref-holders.cjs.map +1 -0
  38. package/dist/adapters/redocly-loader/ref-holders.mjs +29 -0
  39. package/dist/adapters/redocly-loader/ref-holders.mjs.map +1 -0
  40. package/dist/adapters/redocly-loader/remote-fetch.cjs +60 -0
  41. package/dist/adapters/redocly-loader/remote-fetch.cjs.map +1 -0
  42. package/dist/adapters/redocly-loader/remote-fetch.mjs +56 -0
  43. package/dist/adapters/redocly-loader/remote-fetch.mjs.map +1 -0
  44. package/dist/adapters/redocly-loader/schema-load-errors.cjs +87 -0
  45. package/dist/adapters/redocly-loader/schema-load-errors.cjs.map +1 -0
  46. package/dist/adapters/redocly-loader/schema-load-errors.mjs +77 -0
  47. package/dist/adapters/redocly-loader/schema-load-errors.mjs.map +1 -0
  48. package/dist/adapters/redocly-loader/schema-source.cjs +104 -0
  49. package/dist/adapters/redocly-loader/schema-source.cjs.map +1 -0
  50. package/dist/adapters/redocly-loader/schema-source.mjs +98 -0
  51. package/dist/adapters/redocly-loader/schema-source.mjs.map +1 -0
  52. package/dist/adapters/redocly-loader/unsupported-keys.cjs +62 -0
  53. package/dist/adapters/redocly-loader/unsupported-keys.cjs.map +1 -0
  54. package/dist/adapters/redocly-loader/unsupported-keys.mjs +58 -0
  55. package/dist/adapters/redocly-loader/unsupported-keys.mjs.map +1 -0
  56. package/dist/adapters/terminal-logger/terminal-logger.cjs +67 -0
  57. package/dist/adapters/terminal-logger/terminal-logger.cjs.map +1 -0
  58. package/dist/adapters/terminal-logger/terminal-logger.mjs +59 -0
  59. package/dist/adapters/terminal-logger/terminal-logger.mjs.map +1 -0
  60. package/dist/adapters/type-ast-bridge/footer-nodes.cjs +21 -0
  61. package/dist/adapters/type-ast-bridge/footer-nodes.cjs.map +1 -0
  62. package/dist/adapters/type-ast-bridge/footer-nodes.mjs +17 -0
  63. package/dist/adapters/type-ast-bridge/footer-nodes.mjs.map +1 -0
  64. package/dist/adapters/type-ast-bridge/ir-declarations-to-typescript.cjs +75 -0
  65. package/dist/adapters/type-ast-bridge/ir-declarations-to-typescript.cjs.map +1 -0
  66. package/dist/adapters/type-ast-bridge/ir-declarations-to-typescript.mjs +71 -0
  67. package/dist/adapters/type-ast-bridge/ir-declarations-to-typescript.mjs.map +1 -0
  68. package/dist/adapters/type-ast-bridge/ir-to-typescript.cjs +145 -0
  69. package/dist/adapters/type-ast-bridge/ir-to-typescript.cjs.map +1 -0
  70. package/dist/adapters/type-ast-bridge/ir-to-typescript.mjs +139 -0
  71. package/dist/adapters/type-ast-bridge/ir-to-typescript.mjs.map +1 -0
  72. package/dist/adapters/type-ast-bridge/lazy-node.cjs +23 -0
  73. package/dist/adapters/type-ast-bridge/lazy-node.cjs.map +1 -0
  74. package/dist/adapters/type-ast-bridge/lazy-node.mjs +21 -0
  75. package/dist/adapters/type-ast-bridge/lazy-node.mjs.map +1 -0
  76. package/dist/adapters/type-ast-bridge/load-typescript.cjs +57 -0
  77. package/dist/adapters/type-ast-bridge/load-typescript.cjs.map +1 -0
  78. package/dist/adapters/type-ast-bridge/load-typescript.mjs +51 -0
  79. package/dist/adapters/type-ast-bridge/load-typescript.mjs.map +1 -0
  80. package/dist/adapters/type-ast-bridge/print-typescript.cjs +21 -0
  81. package/dist/adapters/type-ast-bridge/print-typescript.cjs.map +1 -0
  82. package/dist/adapters/type-ast-bridge/print-typescript.mjs +19 -0
  83. package/dist/adapters/type-ast-bridge/print-typescript.mjs.map +1 -0
  84. package/dist/adapters/type-ast-bridge/typescript-raw-text.cjs +33 -0
  85. package/dist/adapters/type-ast-bridge/typescript-raw-text.cjs.map +1 -0
  86. package/dist/adapters/type-ast-bridge/typescript-raw-text.mjs +29 -0
  87. package/dist/adapters/type-ast-bridge/typescript-raw-text.mjs.map +1 -0
  88. package/dist/adapters/type-ast-bridge/typescript-to-ir.cjs +204 -0
  89. package/dist/adapters/type-ast-bridge/typescript-to-ir.cjs.map +1 -0
  90. package/dist/adapters/type-ast-bridge/typescript-to-ir.mjs +201 -0
  91. package/dist/adapters/type-ast-bridge/typescript-to-ir.mjs.map +1 -0
  92. package/dist/api/ast-to-string.cjs +39 -0
  93. package/dist/api/ast-to-string.cjs.map +1 -0
  94. package/dist/api/ast-to-string.mjs +37 -0
  95. package/dist/api/ast-to-string.mjs.map +1 -0
  96. package/dist/api/comment-header.cjs +11 -0
  97. package/dist/api/comment-header.cjs.map +1 -0
  98. package/dist/api/comment-header.mjs +9 -0
  99. package/dist/api/comment-header.mjs.map +1 -0
  100. package/dist/api/default-ports.cjs +38 -0
  101. package/dist/api/default-ports.cjs.map +1 -0
  102. package/dist/api/default-ports.mjs +28 -0
  103. package/dist/api/default-ports.mjs.map +1 -0
  104. package/dist/api/discriminator-enum.cjs +44 -0
  105. package/dist/api/discriminator-enum.cjs.map +1 -0
  106. package/dist/api/discriminator-enum.mjs +42 -0
  107. package/dist/api/discriminator-enum.mjs.map +1 -0
  108. package/dist/api/discriminator-scan.cjs +168 -0
  109. package/dist/api/discriminator-scan.cjs.map +1 -0
  110. package/dist/api/discriminator-scan.mjs +165 -0
  111. package/dist/api/discriminator-scan.mjs.map +1 -0
  112. package/dist/api/document-declarations.cjs +28 -0
  113. package/dist/api/document-declarations.cjs.map +1 -0
  114. package/dist/api/document-declarations.mjs +26 -0
  115. package/dist/api/document-declarations.mjs.map +1 -0
  116. package/dist/api/document-refs.cjs +53 -0
  117. package/dist/api/document-refs.cjs.map +1 -0
  118. package/dist/api/document-refs.mjs +50 -0
  119. package/dist/api/document-refs.mjs.map +1 -0
  120. package/dist/api/document-run.cjs +107 -0
  121. package/dist/api/document-run.cjs.map +1 -0
  122. package/dist/api/document-run.mjs +101 -0
  123. package/dist/api/document-run.mjs.map +1 -0
  124. package/dist/api/footer-entry.cjs +18 -0
  125. package/dist/api/footer-entry.cjs.map +1 -0
  126. package/dist/api/footer-entry.mjs +15 -0
  127. package/dist/api/footer-entry.mjs.map +1 -0
  128. package/dist/api/footer-sink.cjs +53 -0
  129. package/dist/api/footer-sink.cjs.map +1 -0
  130. package/dist/api/footer-sink.mjs +51 -0
  131. package/dist/api/footer-sink.mjs.map +1 -0
  132. package/dist/api/legacy-callback-warning.cjs +25 -0
  133. package/dist/api/legacy-callback-warning.cjs.map +1 -0
  134. package/dist/api/legacy-callback-warning.mjs +22 -0
  135. package/dist/api/legacy-callback-warning.mjs.map +1 -0
  136. package/dist/api/legacy-ts-helpers.cjs +203 -0
  137. package/dist/api/legacy-ts-helpers.cjs.map +1 -0
  138. package/dist/api/legacy-ts-helpers.mjs +187 -0
  139. package/dist/api/legacy-ts-helpers.mjs.map +1 -0
  140. package/dist/api/legacy-utils.cjs +65 -0
  141. package/dist/api/legacy-utils.cjs.map +1 -0
  142. package/dist/api/legacy-utils.mjs +50 -0
  143. package/dist/api/legacy-utils.mjs.map +1 -0
  144. package/dist/api/openapi-ts.cjs +40 -0
  145. package/dist/api/openapi-ts.cjs.map +1 -0
  146. package/dist/api/openapi-ts.mjs +34 -0
  147. package/dist/api/openapi-ts.mjs.map +1 -0
  148. package/dist/api/schema-callbacks.cjs +140 -0
  149. package/dist/api/schema-callbacks.cjs.map +1 -0
  150. package/dist/api/schema-callbacks.mjs +136 -0
  151. package/dist/api/schema-callbacks.mjs.map +1 -0
  152. package/dist/api/string-to-ast.cjs +21 -0
  153. package/dist/api/string-to-ast.cjs.map +1 -0
  154. package/dist/api/string-to-ast.mjs +18 -0
  155. package/dist/api/string-to-ast.mjs.map +1 -0
  156. package/dist/api/transform-context.cjs +82 -0
  157. package/dist/api/transform-context.cjs.map +1 -0
  158. package/dist/api/transform-context.mjs +65 -0
  159. package/dist/api/transform-context.mjs.map +1 -0
  160. package/dist/api/transform-schema.cjs +31 -0
  161. package/dist/api/transform-schema.cjs.map +1 -0
  162. package/dist/api/transform-schema.mjs +26 -0
  163. package/dist/api/transform-schema.mjs.map +1 -0
  164. package/dist/api/type-helpers.cjs +85 -0
  165. package/dist/api/type-helpers.cjs.map +1 -0
  166. package/dist/api/type-helpers.mjs +66 -0
  167. package/dist/api/type-helpers.mjs.map +1 -0
  168. package/dist/api/unsupported-feature-warnings.cjs +17 -0
  169. package/dist/api/unsupported-feature-warnings.cjs.map +1 -0
  170. package/dist/api/unsupported-feature-warnings.mjs +15 -0
  171. package/dist/api/unsupported-feature-warnings.mjs.map +1 -0
  172. package/dist/application/print/comment-writer.cjs +95 -0
  173. package/dist/application/print/comment-writer.cjs.map +1 -0
  174. package/dist/application/print/comment-writer.mjs +93 -0
  175. package/dist/application/print/comment-writer.mjs.map +1 -0
  176. package/dist/application/print/declaration-printer.cjs +83 -0
  177. package/dist/application/print/declaration-printer.cjs.map +1 -0
  178. package/dist/application/print/declaration-printer.mjs +81 -0
  179. package/dist/application/print/declaration-printer.mjs.map +1 -0
  180. package/dist/application/print/literal-text.cjs +52 -0
  181. package/dist/application/print/literal-text.cjs.map +1 -0
  182. package/dist/application/print/literal-text.mjs +48 -0
  183. package/dist/application/print/literal-text.mjs.map +1 -0
  184. package/dist/application/print/print-nodes.cjs +38 -0
  185. package/dist/application/print/print-nodes.cjs.map +1 -0
  186. package/dist/application/print/print-nodes.mjs +36 -0
  187. package/dist/application/print/print-nodes.mjs.map +1 -0
  188. package/dist/application/print/print-options.cjs +6 -0
  189. package/dist/application/print/print-options.cjs.map +1 -0
  190. package/dist/application/print/print-options.mjs +4 -0
  191. package/dist/application/print/print-options.mjs.map +1 -0
  192. package/dist/application/print/text-writer.cjs +63 -0
  193. package/dist/application/print/text-writer.cjs.map +1 -0
  194. package/dist/application/print/text-writer.mjs +60 -0
  195. package/dist/application/print/text-writer.mjs.map +1 -0
  196. package/dist/application/print/type-printer.cjs +214 -0
  197. package/dist/application/print/type-printer.cjs.map +1 -0
  198. package/dist/application/print/type-printer.mjs +210 -0
  199. package/dist/application/print/type-printer.mjs.map +1 -0
  200. package/dist/application/stack-overflow.cjs +36 -0
  201. package/dist/application/stack-overflow.cjs.map +1 -0
  202. package/dist/application/stack-overflow.mjs +31 -0
  203. package/dist/application/stack-overflow.mjs.map +1 -0
  204. package/dist/application/transform/document/components.cjs +104 -0
  205. package/dist/application/transform/document/components.cjs.map +1 -0
  206. package/dist/application/transform/document/components.mjs +102 -0
  207. package/dist/application/transform/document/components.mjs.map +1 -0
  208. package/dist/application/transform/document/defs-root.cjs +18 -0
  209. package/dist/application/transform/document/defs-root.cjs.map +1 -0
  210. package/dist/application/transform/document/defs-root.mjs +16 -0
  211. package/dist/application/transform/document/defs-root.mjs.map +1 -0
  212. package/dist/application/transform/document/document-member.cjs +13 -0
  213. package/dist/application/transform/document/document-member.cjs.map +1 -0
  214. package/dist/application/transform/document/document-member.mjs +11 -0
  215. package/dist/application/transform/document/document-member.mjs.map +1 -0
  216. package/dist/application/transform/document/document.cjs +86 -0
  217. package/dist/application/transform/document/document.cjs.map +1 -0
  218. package/dist/application/transform/document/document.mjs +83 -0
  219. package/dist/application/transform/document/document.mjs.map +1 -0
  220. package/dist/application/transform/document/header.cjs +27 -0
  221. package/dist/application/transform/document/header.cjs.map +1 -0
  222. package/dist/application/transform/document/header.mjs +25 -0
  223. package/dist/application/transform/document/header.mjs.map +1 -0
  224. package/dist/application/transform/document/kept-deprecated.cjs +96 -0
  225. package/dist/application/transform/document/kept-deprecated.cjs.map +1 -0
  226. package/dist/application/transform/document/kept-deprecated.mjs +94 -0
  227. package/dist/application/transform/document/kept-deprecated.mjs.map +1 -0
  228. package/dist/application/transform/document/media-type.cjs +42 -0
  229. package/dist/application/transform/document/media-type.cjs.map +1 -0
  230. package/dist/application/transform/document/media-type.mjs +38 -0
  231. package/dist/application/transform/document/media-type.mjs.map +1 -0
  232. package/dist/application/transform/document/operation.cjs +45 -0
  233. package/dist/application/transform/document/operation.cjs.map +1 -0
  234. package/dist/application/transform/document/operation.mjs +43 -0
  235. package/dist/application/transform/document/operation.mjs.map +1 -0
  236. package/dist/application/transform/document/parameter.cjs +25 -0
  237. package/dist/application/transform/document/parameter.cjs.map +1 -0
  238. package/dist/application/transform/document/parameter.mjs +23 -0
  239. package/dist/application/transform/document/parameter.mjs.map +1 -0
  240. package/dist/application/transform/document/parameters.cjs +114 -0
  241. package/dist/application/transform/document/parameters.cjs.map +1 -0
  242. package/dist/application/transform/document/parameters.mjs +112 -0
  243. package/dist/application/transform/document/parameters.mjs.map +1 -0
  244. package/dist/application/transform/document/path-item-conflicts.cjs +51 -0
  245. package/dist/application/transform/document/path-item-conflicts.cjs.map +1 -0
  246. package/dist/application/transform/document/path-item-conflicts.mjs +49 -0
  247. package/dist/application/transform/document/path-item-conflicts.mjs.map +1 -0
  248. package/dist/application/transform/document/path-item.cjs +82 -0
  249. package/dist/application/transform/document/path-item.cjs.map +1 -0
  250. package/dist/application/transform/document/path-item.mjs +80 -0
  251. package/dist/application/transform/document/path-item.mjs.map +1 -0
  252. package/dist/application/transform/document/path-key-overlaps.cjs +57 -0
  253. package/dist/application/transform/document/path-key-overlaps.cjs.map +1 -0
  254. package/dist/application/transform/document/path-key-overlaps.mjs +55 -0
  255. package/dist/application/transform/document/path-key-overlaps.mjs.map +1 -0
  256. package/dist/application/transform/document/paths-enum.cjs +75 -0
  257. package/dist/application/transform/document/paths-enum.cjs.map +1 -0
  258. package/dist/application/transform/document/paths-enum.mjs +72 -0
  259. package/dist/application/transform/document/paths-enum.mjs.map +1 -0
  260. package/dist/application/transform/document/paths.cjs +127 -0
  261. package/dist/application/transform/document/paths.cjs.map +1 -0
  262. package/dist/application/transform/document/paths.mjs +125 -0
  263. package/dist/application/transform/document/paths.mjs.map +1 -0
  264. package/dist/application/transform/document/request-body.cjs +36 -0
  265. package/dist/application/transform/document/request-body.cjs.map +1 -0
  266. package/dist/application/transform/document/request-body.mjs +34 -0
  267. package/dist/application/transform/document/request-body.mjs.map +1 -0
  268. package/dist/application/transform/document/response.cjs +59 -0
  269. package/dist/application/transform/document/response.cjs.map +1 -0
  270. package/dist/application/transform/document/response.mjs +57 -0
  271. package/dist/application/transform/document/response.mjs.map +1 -0
  272. package/dist/application/transform/document/responses.cjs +23 -0
  273. package/dist/application/transform/document/responses.cjs.map +1 -0
  274. package/dist/application/transform/document/responses.mjs +21 -0
  275. package/dist/application/transform/document/responses.mjs.map +1 -0
  276. package/dist/application/transform/document/root-type-aliases.cjs +69 -0
  277. package/dist/application/transform/document/root-type-aliases.cjs.map +1 -0
  278. package/dist/application/transform/document/root-type-aliases.mjs +65 -0
  279. package/dist/application/transform/document/root-type-aliases.mjs.map +1 -0
  280. package/dist/application/transform/document/webhooks.cjs +19 -0
  281. package/dist/application/transform/document/webhooks.cjs.map +1 -0
  282. package/dist/application/transform/document/webhooks.mjs +17 -0
  283. package/dist/application/transform/document/webhooks.mjs.map +1 -0
  284. package/dist/application/transform/document-entries.cjs +17 -0
  285. package/dist/application/transform/document-entries.cjs.map +1 -0
  286. package/dist/application/transform/document-entries.mjs +14 -0
  287. package/dist/application/transform/document-entries.mjs.map +1 -0
  288. package/dist/application/transform/footer/document-footer.cjs +88 -0
  289. package/dist/application/transform/footer/document-footer.cjs.map +1 -0
  290. package/dist/application/transform/footer/document-footer.mjs +86 -0
  291. package/dist/application/transform/footer/document-footer.mjs.map +1 -0
  292. package/dist/application/transform/footer/enum-naming.cjs +121 -0
  293. package/dist/application/transform/footer/enum-naming.cjs.map +1 -0
  294. package/dist/application/transform/footer/enum-naming.mjs +115 -0
  295. package/dist/application/transform/footer/enum-naming.mjs.map +1 -0
  296. package/dist/application/transform/helper-types.cjs +68 -0
  297. package/dist/application/transform/helper-types.cjs.map +1 -0
  298. package/dist/application/transform/helper-types.mjs +65 -0
  299. package/dist/application/transform/helper-types.mjs.map +1 -0
  300. package/dist/application/transform/literal-type.cjs +36 -0
  301. package/dist/application/transform/literal-type.cjs.map +1 -0
  302. package/dist/application/transform/literal-type.mjs +34 -0
  303. package/dist/application/transform/literal-type.mjs.map +1 -0
  304. package/dist/application/transform/numbered-names.cjs +18 -0
  305. package/dist/application/transform/numbered-names.cjs.map +1 -0
  306. package/dist/application/transform/numbered-names.mjs +16 -0
  307. package/dist/application/transform/numbered-names.mjs.map +1 -0
  308. package/dist/application/transform/ref-type.cjs +57 -0
  309. package/dist/application/transform/ref-type.cjs.map +1 -0
  310. package/dist/application/transform/ref-type.mjs +54 -0
  311. package/dist/application/transform/ref-type.mjs.map +1 -0
  312. package/dist/application/transform/schema/array-type.cjs +105 -0
  313. package/dist/application/transform/schema/array-type.cjs.map +1 -0
  314. package/dist/application/transform/schema/array-type.mjs +103 -0
  315. package/dist/application/transform/schema/array-type.mjs.map +1 -0
  316. package/dist/application/transform/schema/composition-type.cjs +107 -0
  317. package/dist/application/transform/schema/composition-type.cjs.map +1 -0
  318. package/dist/application/transform/schema/composition-type.mjs +105 -0
  319. package/dist/application/transform/schema/composition-type.mjs.map +1 -0
  320. package/dist/application/transform/schema/core-type.cjs +84 -0
  321. package/dist/application/transform/schema/core-type.cjs.map +1 -0
  322. package/dist/application/transform/schema/core-type.mjs +82 -0
  323. package/dist/application/transform/schema/core-type.mjs.map +1 -0
  324. package/dist/application/transform/schema/discriminator-property.cjs +21 -0
  325. package/dist/application/transform/schema/discriminator-property.cjs.map +1 -0
  326. package/dist/application/transform/schema/discriminator-property.mjs +19 -0
  327. package/dist/application/transform/schema/discriminator-property.mjs.map +1 -0
  328. package/dist/application/transform/schema/enum-rule.cjs +107 -0
  329. package/dist/application/transform/schema/enum-rule.cjs.map +1 -0
  330. package/dist/application/transform/schema/enum-rule.mjs +105 -0
  331. package/dist/application/transform/schema/enum-rule.mjs.map +1 -0
  332. package/dist/application/transform/schema/object-type.cjs +173 -0
  333. package/dist/application/transform/schema/object-type.cjs.map +1 -0
  334. package/dist/application/transform/schema/object-type.mjs +170 -0
  335. package/dist/application/transform/schema/object-type.mjs.map +1 -0
  336. package/dist/application/transform/schema/presence-members.cjs +59 -0
  337. package/dist/application/transform/schema/presence-members.cjs.map +1 -0
  338. package/dist/application/transform/schema/presence-members.mjs +57 -0
  339. package/dist/application/transform/schema/presence-members.mjs.map +1 -0
  340. package/dist/application/transform/schema/schema-transform.cjs +72 -0
  341. package/dist/application/transform/schema/schema-transform.cjs.map +1 -0
  342. package/dist/application/transform/schema/schema-transform.mjs +68 -0
  343. package/dist/application/transform/schema/schema-transform.mjs.map +1 -0
  344. package/dist/application/transform/schema/unevaluated-properties.cjs +61 -0
  345. package/dist/application/transform/schema/unevaluated-properties.cjs.map +1 -0
  346. package/dist/application/transform/schema/unevaluated-properties.mjs +59 -0
  347. package/dist/application/transform/schema/unevaluated-properties.mjs.map +1 -0
  348. package/dist/application/transform/schema-comment.cjs +84 -0
  349. package/dist/application/transform/schema-comment.cjs.map +1 -0
  350. package/dist/application/transform/schema-comment.mjs +81 -0
  351. package/dist/application/transform/schema-comment.mjs.map +1 -0
  352. package/dist/application/transform/shared-types.cjs +8 -0
  353. package/dist/application/transform/shared-types.cjs.map +1 -0
  354. package/dist/application/transform/shared-types.mjs +6 -0
  355. package/dist/application/transform/shared-types.mjs.map +1 -0
  356. package/dist/application/transform/type-combinators.cjs +49 -0
  357. package/dist/application/transform/type-combinators.cjs.map +1 -0
  358. package/dist/application/transform/type-combinators.mjs +42 -0
  359. package/dist/application/transform/type-combinators.mjs.map +1 -0
  360. package/dist/cli/cli-arguments.cjs +137 -0
  361. package/dist/cli/cli-arguments.cjs.map +1 -0
  362. package/dist/cli/cli-arguments.mjs +129 -0
  363. package/dist/cli/cli-arguments.mjs.map +1 -0
  364. package/dist/cli/cli-errors.cjs +80 -0
  365. package/dist/cli/cli-errors.cjs.map +1 -0
  366. package/dist/cli/cli-errors.mjs +76 -0
  367. package/dist/cli/cli-errors.mjs.map +1 -0
  368. package/dist/cli/cli-output.cjs +37 -0
  369. package/dist/cli/cli-output.cjs.map +1 -0
  370. package/dist/cli/cli-output.mjs +30 -0
  371. package/dist/cli/cli-output.mjs.map +1 -0
  372. package/dist/cli/docs-links.cjs +6 -0
  373. package/dist/cli/docs-links.cjs.map +1 -0
  374. package/dist/cli/docs-links.mjs +4 -0
  375. package/dist/cli/docs-links.mjs.map +1 -0
  376. package/dist/cli/fix-option.cjs +19 -0
  377. package/dist/cli/fix-option.cjs.map +1 -0
  378. package/dist/cli/fix-option.mjs +16 -0
  379. package/dist/cli/fix-option.mjs.map +1 -0
  380. package/dist/cli/help-text.cjs +44 -0
  381. package/dist/cli/help-text.cjs.map +1 -0
  382. package/dist/cli/help-text.mjs +42 -0
  383. package/dist/cli/help-text.mjs.map +1 -0
  384. package/dist/cli/main.cjs +62 -0
  385. package/dist/cli/main.cjs.map +1 -0
  386. package/dist/cli/main.d.cts +2 -0
  387. package/dist/cli/main.d.mts +2 -0
  388. package/dist/cli/main.d.ts +2 -0
  389. package/dist/cli/main.mjs +54 -0
  390. package/dist/cli/main.mjs.map +1 -0
  391. package/dist/cli/redocly-apis.cjs +65 -0
  392. package/dist/cli/redocly-apis.cjs.map +1 -0
  393. package/dist/cli/redocly-apis.mjs +62 -0
  394. package/dist/cli/redocly-apis.mjs.map +1 -0
  395. package/dist/cli/ref-limits.cjs +14 -0
  396. package/dist/cli/ref-limits.cjs.map +1 -0
  397. package/dist/cli/ref-limits.mjs +12 -0
  398. package/dist/cli/ref-limits.mjs.map +1 -0
  399. package/dist/cli/run-cli.cjs +100 -0
  400. package/dist/cli/run-cli.cjs.map +1 -0
  401. package/dist/cli/run-cli.mjs +98 -0
  402. package/dist/cli/run-cli.mjs.map +1 -0
  403. package/dist/domain/assert-never.cjs +8 -0
  404. package/dist/domain/assert-never.cjs.map +1 -0
  405. package/dist/domain/assert-never.mjs +6 -0
  406. package/dist/domain/assert-never.mjs.map +1 -0
  407. package/dist/domain/errors.cjs +50 -0
  408. package/dist/domain/errors.cjs.map +1 -0
  409. package/dist/domain/errors.mjs +46 -0
  410. package/dist/domain/errors.mjs.map +1 -0
  411. package/dist/domain/ir/constructors.cjs +89 -0
  412. package/dist/domain/ir/constructors.cjs.map +1 -0
  413. package/dist/domain/ir/constructors.mjs +71 -0
  414. package/dist/domain/ir/constructors.mjs.map +1 -0
  415. package/dist/domain/ir/identifier-text.cjs +29 -0
  416. package/dist/domain/ir/identifier-text.cjs.map +1 -0
  417. package/dist/domain/ir/identifier-text.mjs +25 -0
  418. package/dist/domain/ir/identifier-text.mjs.map +1 -0
  419. package/dist/domain/ir/newer-identifier-ranges.cjs +109 -0
  420. package/dist/domain/ir/newer-identifier-ranges.cjs.map +1 -0
  421. package/dist/domain/ir/newer-identifier-ranges.mjs +106 -0
  422. package/dist/domain/ir/newer-identifier-ranges.mjs.map +1 -0
  423. package/dist/domain/ir/normalize.cjs +32 -0
  424. package/dist/domain/ir/normalize.cjs.map +1 -0
  425. package/dist/domain/ir/normalize.mjs +29 -0
  426. package/dist/domain/ir/normalize.mjs.map +1 -0
  427. package/dist/domain/ir/property-name.cjs +19 -0
  428. package/dist/domain/ir/property-name.cjs.map +1 -0
  429. package/dist/domain/ir/property-name.mjs +16 -0
  430. package/dist/domain/ir/property-name.mjs.map +1 -0
  431. package/dist/domain/ir/raw-text-escapes.cjs +25 -0
  432. package/dist/domain/ir/raw-text-escapes.cjs.map +1 -0
  433. package/dist/domain/ir/raw-text-escapes.mjs +22 -0
  434. package/dist/domain/ir/raw-text-escapes.mjs.map +1 -0
  435. package/dist/domain/openapi/alias-expansion.cjs +50 -0
  436. package/dist/domain/openapi/alias-expansion.cjs.map +1 -0
  437. package/dist/domain/openapi/alias-expansion.mjs +45 -0
  438. package/dist/domain/openapi/alias-expansion.mjs.map +1 -0
  439. package/dist/domain/openapi/binary-content.cjs +48 -0
  440. package/dist/domain/openapi/binary-content.cjs.map +1 -0
  441. package/dist/domain/openapi/binary-content.mjs +45 -0
  442. package/dist/domain/openapi/binary-content.mjs.map +1 -0
  443. package/dist/domain/openapi/components-object.cjs +29 -0
  444. package/dist/domain/openapi/components-object.cjs.map +1 -0
  445. package/dist/domain/openapi/components-object.mjs +24 -0
  446. package/dist/domain/openapi/components-object.mjs.map +1 -0
  447. package/dist/domain/openapi/json-pointer.cjs +31 -0
  448. package/dist/domain/openapi/json-pointer.cjs.map +1 -0
  449. package/dist/domain/openapi/json-pointer.mjs +27 -0
  450. package/dist/domain/openapi/json-pointer.mjs.map +1 -0
  451. package/dist/domain/openapi/media-type-object.cjs +14 -0
  452. package/dist/domain/openapi/media-type-object.cjs.map +1 -0
  453. package/dist/domain/openapi/media-type-object.mjs +11 -0
  454. package/dist/domain/openapi/media-type-object.mjs.map +1 -0
  455. package/dist/domain/openapi/parameter-object.cjs +13 -0
  456. package/dist/domain/openapi/parameter-object.cjs.map +1 -0
  457. package/dist/domain/openapi/parameter-object.mjs +10 -0
  458. package/dist/domain/openapi/parameter-object.mjs.map +1 -0
  459. package/dist/domain/openapi/path-item-object.cjs +35 -0
  460. package/dist/domain/openapi/path-item-object.cjs.map +1 -0
  461. package/dist/domain/openapi/path-item-object.mjs +30 -0
  462. package/dist/domain/openapi/path-item-object.mjs.map +1 -0
  463. package/dist/domain/openapi/unsupported-features.cjs +87 -0
  464. package/dist/domain/openapi/unsupported-features.cjs.map +1 -0
  465. package/dist/domain/openapi/unsupported-features.mjs +84 -0
  466. package/dist/domain/openapi/unsupported-features.mjs.map +1 -0
  467. package/dist/domain/output-fixes.cjs +66 -0
  468. package/dist/domain/output-fixes.cjs.map +1 -0
  469. package/dist/domain/output-fixes.mjs +59 -0
  470. package/dist/domain/output-fixes.mjs.map +1 -0
  471. package/dist/index.cjs +98 -0
  472. package/dist/index.cjs.map +1 -0
  473. package/dist/index.d.cts +812 -0
  474. package/dist/index.d.mts +812 -0
  475. package/dist/index.d.ts +812 -0
  476. package/dist/index.mjs +27 -0
  477. package/dist/index.mjs.map +1 -0
  478. package/dist/transform/components-object.cjs +14 -0
  479. package/dist/transform/components-object.cjs.map +1 -0
  480. package/dist/transform/components-object.mjs +10 -0
  481. package/dist/transform/components-object.mjs.map +1 -0
  482. package/dist/transform/header-object.cjs +12 -0
  483. package/dist/transform/header-object.cjs.map +1 -0
  484. package/dist/transform/header-object.mjs +10 -0
  485. package/dist/transform/header-object.mjs.map +1 -0
  486. package/dist/transform/media-type-object.cjs +12 -0
  487. package/dist/transform/media-type-object.cjs.map +1 -0
  488. package/dist/transform/media-type-object.mjs +10 -0
  489. package/dist/transform/media-type-object.mjs.map +1 -0
  490. package/dist/transform/operation-object.cjs +26 -0
  491. package/dist/transform/operation-object.cjs.map +1 -0
  492. package/dist/transform/operation-object.mjs +21 -0
  493. package/dist/transform/operation-object.mjs.map +1 -0
  494. package/dist/transform/parameter-object.cjs +12 -0
  495. package/dist/transform/parameter-object.cjs.map +1 -0
  496. package/dist/transform/parameter-object.mjs +10 -0
  497. package/dist/transform/parameter-object.mjs.map +1 -0
  498. package/dist/transform/path-item-object.cjs +12 -0
  499. package/dist/transform/path-item-object.cjs.map +1 -0
  500. package/dist/transform/path-item-object.mjs +10 -0
  501. package/dist/transform/path-item-object.mjs.map +1 -0
  502. package/dist/transform/paths-object.cjs +11 -0
  503. package/dist/transform/paths-object.cjs.map +1 -0
  504. package/dist/transform/paths-object.mjs +9 -0
  505. package/dist/transform/paths-object.mjs.map +1 -0
  506. package/dist/transform/request-body-object.cjs +12 -0
  507. package/dist/transform/request-body-object.cjs.map +1 -0
  508. package/dist/transform/request-body-object.mjs +10 -0
  509. package/dist/transform/request-body-object.mjs.map +1 -0
  510. package/dist/transform/response-object.cjs +12 -0
  511. package/dist/transform/response-object.cjs.map +1 -0
  512. package/dist/transform/response-object.mjs +10 -0
  513. package/dist/transform/response-object.mjs.map +1 -0
  514. package/dist/transform/responses-object.cjs +12 -0
  515. package/dist/transform/responses-object.cjs.map +1 -0
  516. package/dist/transform/responses-object.mjs +10 -0
  517. package/dist/transform/responses-object.mjs.map +1 -0
  518. package/dist/transform/schema-object.cjs +21 -0
  519. package/dist/transform/schema-object.cjs.map +1 -0
  520. package/dist/transform/schema-object.mjs +16 -0
  521. package/dist/transform/schema-object.mjs.map +1 -0
  522. package/package.json +115 -4
  523. package/src/adapters/node-file-system/node-file-system.ts +44 -0
  524. package/src/adapters/redocly-loader/alias-limit.ts +20 -0
  525. package/src/adapters/redocly-loader/allowed-hosts.ts +62 -0
  526. package/src/adapters/redocly-loader/bundled-ref-repair.ts +65 -0
  527. package/src/adapters/redocly-loader/malformed-refs.ts +61 -0
  528. package/src/adapters/redocly-loader/redocly-config-source.ts +43 -0
  529. package/src/adapters/redocly-loader/redocly-schema-loader.ts +246 -0
  530. package/src/adapters/redocly-loader/ref-access.ts +146 -0
  531. package/src/adapters/redocly-loader/ref-holders.ts +43 -0
  532. package/src/adapters/redocly-loader/remote-fetch.ts +104 -0
  533. package/src/adapters/redocly-loader/schema-load-errors.ts +124 -0
  534. package/src/adapters/redocly-loader/schema-source.ts +151 -0
  535. package/src/adapters/redocly-loader/unsupported-keys.ts +102 -0
  536. package/src/adapters/terminal-logger/terminal-logger.ts +98 -0
  537. package/src/adapters/type-ast-bridge/footer-nodes.ts +38 -0
  538. package/src/adapters/type-ast-bridge/ir-declarations-to-typescript.ts +100 -0
  539. package/src/adapters/type-ast-bridge/ir-to-typescript.ts +220 -0
  540. package/src/adapters/type-ast-bridge/lazy-node.ts +24 -0
  541. package/src/adapters/type-ast-bridge/load-typescript.ts +84 -0
  542. package/src/adapters/type-ast-bridge/print-typescript.ts +33 -0
  543. package/src/adapters/type-ast-bridge/typescript-raw-text.ts +49 -0
  544. package/src/adapters/type-ast-bridge/typescript-to-ir.ts +280 -0
  545. package/src/adapters/type-ast-bridge/typescript-types.ts +8 -0
  546. package/src/api/ast-to-string.ts +59 -0
  547. package/src/api/comment-header.ts +7 -0
  548. package/src/api/default-ports.ts +44 -0
  549. package/src/api/discriminator-enum.ts +76 -0
  550. package/src/api/discriminator-scan.ts +272 -0
  551. package/src/api/document-declarations.ts +41 -0
  552. package/src/api/document-refs.ts +71 -0
  553. package/src/api/document-run.ts +159 -0
  554. package/src/api/footer-entry.ts +23 -0
  555. package/src/api/footer-sink.ts +67 -0
  556. package/src/api/legacy-callback-warning.ts +29 -0
  557. package/src/api/legacy-ts-helpers.ts +311 -0
  558. package/src/api/legacy-utils.ts +118 -0
  559. package/src/api/openapi-ts.ts +62 -0
  560. package/src/api/schema-callbacks.ts +211 -0
  561. package/src/api/string-to-ast.ts +27 -0
  562. package/src/api/transform-context.ts +87 -0
  563. package/src/api/transform-schema.ts +39 -0
  564. package/src/api/type-helpers.ts +130 -0
  565. package/src/api/unsupported-feature-warnings.ts +26 -0
  566. package/src/application/ports/file-system.ts +12 -0
  567. package/src/application/ports/logger.ts +16 -0
  568. package/src/application/ports/redocly-config-source.ts +16 -0
  569. package/src/application/ports/schema-loader.ts +32 -0
  570. package/src/application/print/comment-writer.ts +91 -0
  571. package/src/application/print/declaration-printer.ts +100 -0
  572. package/src/application/print/literal-text.ts +62 -0
  573. package/src/application/print/print-nodes.ts +62 -0
  574. package/src/application/print/print-options.ts +11 -0
  575. package/src/application/print/text-writer.ts +83 -0
  576. package/src/application/print/type-printer.ts +281 -0
  577. package/src/application/stack-overflow.ts +54 -0
  578. package/src/application/transform/document/components.ts +189 -0
  579. package/src/application/transform/document/defs-root.ts +25 -0
  580. package/src/application/transform/document/document-member.ts +20 -0
  581. package/src/application/transform/document/document.ts +157 -0
  582. package/src/application/transform/document/header.ts +34 -0
  583. package/src/application/transform/document/kept-deprecated.ts +135 -0
  584. package/src/application/transform/document/media-type.ts +78 -0
  585. package/src/application/transform/document/operation.ts +64 -0
  586. package/src/application/transform/document/parameter.ts +45 -0
  587. package/src/application/transform/document/parameters.ts +200 -0
  588. package/src/application/transform/document/path-item-conflicts.ts +79 -0
  589. package/src/application/transform/document/path-item.ts +168 -0
  590. package/src/application/transform/document/path-key-overlaps.ts +112 -0
  591. package/src/application/transform/document/paths-enum.ts +127 -0
  592. package/src/application/transform/document/paths.ts +211 -0
  593. package/src/application/transform/document/request-body.ts +50 -0
  594. package/src/application/transform/document/response.ts +109 -0
  595. package/src/application/transform/document/responses.ts +29 -0
  596. package/src/application/transform/document/root-type-aliases.ts +106 -0
  597. package/src/application/transform/document/webhooks.ts +22 -0
  598. package/src/application/transform/document-entries.ts +28 -0
  599. package/src/application/transform/footer/document-footer.ts +127 -0
  600. package/src/application/transform/footer/enum-naming.ts +181 -0
  601. package/src/application/transform/helper-types.ts +92 -0
  602. package/src/application/transform/literal-type.ts +54 -0
  603. package/src/application/transform/numbered-names.ts +20 -0
  604. package/src/application/transform/ref-type.ts +97 -0
  605. package/src/application/transform/schema/array-type.ts +152 -0
  606. package/src/application/transform/schema/composition-type.ts +183 -0
  607. package/src/application/transform/schema/core-type.ts +115 -0
  608. package/src/application/transform/schema/discriminator-property.ts +28 -0
  609. package/src/application/transform/schema/enum-rule.ts +157 -0
  610. package/src/application/transform/schema/object-type.ts +271 -0
  611. package/src/application/transform/schema/presence-members.ts +96 -0
  612. package/src/application/transform/schema/schema-context.ts +110 -0
  613. package/src/application/transform/schema/schema-rule.ts +29 -0
  614. package/src/application/transform/schema/schema-transform.ts +99 -0
  615. package/src/application/transform/schema/unevaluated-properties.ts +105 -0
  616. package/src/application/transform/schema-comment.ts +116 -0
  617. package/src/application/transform/shared-types.ts +9 -0
  618. package/src/application/transform/transform-context.ts +51 -0
  619. package/src/application/transform/type-combinators.ts +57 -0
  620. package/src/cli/cli-arguments.ts +198 -0
  621. package/src/cli/cli-dependencies.ts +42 -0
  622. package/src/cli/cli-errors.ts +125 -0
  623. package/src/cli/cli-output.ts +53 -0
  624. package/src/cli/docs-links.ts +6 -0
  625. package/src/cli/fix-option.ts +29 -0
  626. package/src/cli/help-text.ts +52 -0
  627. package/src/cli/main.ts +67 -0
  628. package/src/cli/redocly-apis.ts +91 -0
  629. package/src/cli/ref-limits.ts +16 -0
  630. package/src/cli/run-cli.ts +114 -0
  631. package/src/domain/assert-never.ts +8 -0
  632. package/src/domain/errors.ts +74 -0
  633. package/src/domain/ir/constructors.ts +137 -0
  634. package/src/domain/ir/identifier-text.ts +49 -0
  635. package/src/domain/ir/newer-identifier-ranges.ts +109 -0
  636. package/src/domain/ir/nodes.ts +224 -0
  637. package/src/domain/ir/normalize.ts +51 -0
  638. package/src/domain/ir/property-name.ts +28 -0
  639. package/src/domain/ir/raw-text-escapes.ts +37 -0
  640. package/src/domain/openapi/alias-expansion.ts +72 -0
  641. package/src/domain/openapi/binary-content.ts +74 -0
  642. package/src/domain/openapi/components-object.ts +52 -0
  643. package/src/domain/openapi/document-object.ts +12 -0
  644. package/src/domain/openapi/header-object.ts +9 -0
  645. package/src/domain/openapi/json-pointer.ts +46 -0
  646. package/src/domain/openapi/media-type-object.ts +26 -0
  647. package/src/domain/openapi/operation-object.ts +13 -0
  648. package/src/domain/openapi/parameter-object.ts +30 -0
  649. package/src/domain/openapi/path-item-object.ts +70 -0
  650. package/src/domain/openapi/request-body-object.ts +7 -0
  651. package/src/domain/openapi/response-object.ts +14 -0
  652. package/src/domain/openapi/schema-object.ts +59 -0
  653. package/src/domain/openapi/unsupported-features.ts +139 -0
  654. package/src/domain/output-fixes.ts +95 -0
  655. package/src/index.ts +67 -0
  656. package/src/transform/components-object.ts +25 -0
  657. package/src/transform/header-object.ts +19 -0
  658. package/src/transform/media-type-object.ts +19 -0
  659. package/src/transform/operation-object.ts +36 -0
  660. package/src/transform/parameter-object.ts +19 -0
  661. package/src/transform/parameters-array.ts +19 -0
  662. package/src/transform/path-item-object.ts +22 -0
  663. package/src/transform/paths-enum.ts +8 -0
  664. package/src/transform/paths-object.ts +15 -0
  665. package/src/transform/request-body-object.ts +19 -0
  666. package/src/transform/response-object.ts +19 -0
  667. package/src/transform/responses-object.ts +19 -0
  668. package/src/transform/schema-object.ts +36 -0
  669. package/src/transform/webhooks-object.ts +15 -0
  670. package/src/types/generator-options.ts +267 -0
  671. package/src/types/openapi-common.ts +100 -0
  672. package/src/types/openapi-document.ts +196 -0
  673. package/src/types/openapi-path-item.ts +130 -0
  674. package/src/types/openapi-request.ts +209 -0
  675. package/src/types/openapi-response.ts +81 -0
  676. package/src/types/openapi-schema.ts +169 -0
  677. package/src/types/openapi-security.ts +116 -0
  678. package/src/types.ts +12 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-typescript.cjs","sources":["../../../src/adapters/type-ast-bridge/load-typescript.ts"],"sourcesContent":["import { createRequire } from \"node:module\";\nimport { join } from \"node:path\";\nimport { ERROR_CODES, OpenAPITypesafeError } from \"../../domain/errors.js\";\n\n/**\n * Load a TypeScript compiler module with the JavaScript API (ADR-004, decision 4). The bridge\n * needs it only for legacy `ts.Node` callbacks and the deprecated `ts.Node` helpers, so it is\n * loaded on first use, never at import time. TypeScript 7 has no JavaScript API: on such a project\n * the user installs `@typescript/typescript6`.\n */\n\n/** The `typescript` module of TypeScript 6 or earlier (or `@typescript/typescript6`). */\nexport type TypeScriptModule = typeof import(\"typescript\");\n\n/** Loads one package by name, like `require`. */\nexport type ModuleRequire = (id: string) => unknown;\n\n/** The packages to try, in order: the project's own TypeScript first. */\nexport const TYPESCRIPT_PACKAGES = [\"typescript\", \"@typescript/typescript6\"] as const;\n\n/** Error codes of a package that is missing or cannot be loaded with `require`. */\nconst UNAVAILABLE_CODES = new Set([\n \"MODULE_NOT_FOUND\",\n \"ERR_REQUIRE_ESM\",\n \"ERR_PACKAGE_PATH_NOT_EXPORTED\",\n]);\n\nexport class TypeScriptNotFoundError extends OpenAPITypesafeError {\n constructor() {\n super({\n code: ERROR_CODES.TYPESCRIPT_NOT_FOUND,\n message:\n \"A callback or helper uses TypeScript compiler nodes, \" +\n \"which needs the TypeScript JavaScript API. \" +\n 'Install \"typescript\" version 6 or earlier, ' +\n 'or \"@typescript/typescript6\" on TypeScript 7, ' +\n \"or use IR callbacks (irCallbacks: true).\",\n details: { packages: [...TYPESCRIPT_PACKAGES] },\n });\n this.name = \"TypeScriptNotFoundError\";\n }\n}\n\n/** Where to look: the current project, then this package's own location. */\nexport function defaultModuleRequires(): readonly ModuleRequire[] {\n return [createRequire(join(process.cwd(), \"package.json\")), createRequire(import.meta.url)];\n}\n\nfunction hasCompilerApi(value: unknown): value is TypeScriptModule {\n const module = value as Partial<TypeScriptModule> | undefined;\n return (\n typeof module?.factory?.createTypeReferenceNode === \"function\" &&\n typeof module.createPrinter === \"function\"\n );\n}\n\nfunction tryRequire(load: ModuleRequire, id: string): unknown {\n try {\n return load(id);\n } catch (error) {\n if (UNAVAILABLE_CODES.has((error as { code?: string }).code ?? \"\")) {\n return undefined;\n }\n throw error;\n }\n}\n\n/**\n * The first package with the compiler API, trying each package name with each location. Node\n * caches resolved modules, so repeated calls are cheap and return the same module.\n */\nexport function loadTypeScript(\n requires: readonly ModuleRequire[] = defaultModuleRequires(),\n): TypeScriptModule {\n for (const id of TYPESCRIPT_PACKAGES) {\n for (const load of requires) {\n const module = tryRequire(load, id);\n if (hasCompilerApi(module)) {\n return module;\n }\n }\n }\n throw new TypeScriptNotFoundError();\n}\n"],"names":["OpenAPITypesafeError","ERROR_CODES","createRequire","join"],"mappings":";;;;;;;AAkBO,MAAM,mBAAA,GAAsB,CAAC,YAAA,EAAc,yBAAyB;AAG3E,MAAM,iBAAA,uBAAwB,GAAA,CAAI;AAAA,EAChC,kBAAA;AAAA,EACA,iBAAA;AAAA,EACA;AACF,CAAC,CAAA;AAEM,MAAM,gCAAgCA,2BAAA,CAAqB;AAAA,EAChE,WAAA,GAAc;AACZ,IAAA,KAAA,CAAM;AAAA,MACJ,MAAMC,kBAAA,CAAY,oBAAA;AAAA,MAClB,OAAA,EACE,mOAAA;AAAA,MAKF,SAAS,EAAE,QAAA,EAAU,CAAC,GAAG,mBAAmB,CAAA;AAAE,KAC/C,CAAA;AACD,IAAA,IAAA,CAAK,IAAA,GAAO,yBAAA;AAAA,EACd;AACF;AAGO,SAAS,qBAAA,GAAkD;AAChE,EAAA,OAAO,CAACC,yBAAA,CAAcC,SAAA,CAAK,OAAA,CAAQ,GAAA,EAAI,EAAG,cAAc,CAAC,CAAA,EAAGD,yBAAA,CAAc,8RAAe,CAAC,CAAA;AAC5F;AAEA,SAAS,eAAe,KAAA,EAA2C;AACjE,EAAA,MAAM,MAAA,GAAS,KAAA;AACf,EAAA,OACE,OAAO,MAAA,EAAQ,OAAA,EAAS,4BAA4B,UAAA,IACpD,OAAO,OAAO,aAAA,KAAkB,UAAA;AAEpC;AAEA,SAAS,UAAA,CAAW,MAAqB,EAAA,EAAqB;AAC5D,EAAA,IAAI;AACF,IAAA,OAAO,KAAK,EAAE,CAAA;AAAA,EAChB,SAAS,KAAA,EAAO;AACd,IAAA,IAAI,iBAAA,CAAkB,GAAA,CAAK,KAAA,CAA4B,IAAA,IAAQ,EAAE,CAAA,EAAG;AAClE,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,MAAM,KAAA;AAAA,EACR;AACF;AAMO,SAAS,cAAA,CACd,QAAA,GAAqC,qBAAA,EAAsB,EACzC;AAClB,EAAA,KAAA,MAAW,MAAM,mBAAA,EAAqB;AACpC,IAAA,KAAA,MAAW,QAAQ,QAAA,EAAU;AAC3B,MAAA,MAAM,MAAA,GAAS,UAAA,CAAW,IAAA,EAAM,EAAE,CAAA;AAClC,MAAA,IAAI,cAAA,CAAe,MAAM,CAAA,EAAG;AAC1B,QAAA,OAAO,MAAA;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACA,EAAA,MAAM,IAAI,uBAAA,EAAwB;AACpC;;;;;"}
@@ -0,0 +1,51 @@
1
+ import { createRequire } from 'node:module';
2
+ import { join } from 'node:path';
3
+ import { OpenAPITypesafeError, ERROR_CODES } from '../../domain/errors.mjs';
4
+
5
+ const TYPESCRIPT_PACKAGES = ["typescript", "@typescript/typescript6"];
6
+ const UNAVAILABLE_CODES = /* @__PURE__ */ new Set([
7
+ "MODULE_NOT_FOUND",
8
+ "ERR_REQUIRE_ESM",
9
+ "ERR_PACKAGE_PATH_NOT_EXPORTED"
10
+ ]);
11
+ class TypeScriptNotFoundError extends OpenAPITypesafeError {
12
+ constructor() {
13
+ super({
14
+ code: ERROR_CODES.TYPESCRIPT_NOT_FOUND,
15
+ message: 'A callback or helper uses TypeScript compiler nodes, which needs the TypeScript JavaScript API. Install "typescript" version 6 or earlier, or "@typescript/typescript6" on TypeScript 7, or use IR callbacks (irCallbacks: true).',
16
+ details: { packages: [...TYPESCRIPT_PACKAGES] }
17
+ });
18
+ this.name = "TypeScriptNotFoundError";
19
+ }
20
+ }
21
+ function defaultModuleRequires() {
22
+ return [createRequire(join(process.cwd(), "package.json")), createRequire(import.meta.url)];
23
+ }
24
+ function hasCompilerApi(value) {
25
+ const module = value;
26
+ return typeof module?.factory?.createTypeReferenceNode === "function" && typeof module.createPrinter === "function";
27
+ }
28
+ function tryRequire(load, id) {
29
+ try {
30
+ return load(id);
31
+ } catch (error) {
32
+ if (UNAVAILABLE_CODES.has(error.code ?? "")) {
33
+ return void 0;
34
+ }
35
+ throw error;
36
+ }
37
+ }
38
+ function loadTypeScript(requires = defaultModuleRequires()) {
39
+ for (const id of TYPESCRIPT_PACKAGES) {
40
+ for (const load of requires) {
41
+ const module = tryRequire(load, id);
42
+ if (hasCompilerApi(module)) {
43
+ return module;
44
+ }
45
+ }
46
+ }
47
+ throw new TypeScriptNotFoundError();
48
+ }
49
+
50
+ export { TYPESCRIPT_PACKAGES, TypeScriptNotFoundError, defaultModuleRequires, loadTypeScript };
51
+ //# sourceMappingURL=load-typescript.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-typescript.mjs","sources":["../../../src/adapters/type-ast-bridge/load-typescript.ts"],"sourcesContent":["import { createRequire } from \"node:module\";\nimport { join } from \"node:path\";\nimport { ERROR_CODES, OpenAPITypesafeError } from \"../../domain/errors.js\";\n\n/**\n * Load a TypeScript compiler module with the JavaScript API (ADR-004, decision 4). The bridge\n * needs it only for legacy `ts.Node` callbacks and the deprecated `ts.Node` helpers, so it is\n * loaded on first use, never at import time. TypeScript 7 has no JavaScript API: on such a project\n * the user installs `@typescript/typescript6`.\n */\n\n/** The `typescript` module of TypeScript 6 or earlier (or `@typescript/typescript6`). */\nexport type TypeScriptModule = typeof import(\"typescript\");\n\n/** Loads one package by name, like `require`. */\nexport type ModuleRequire = (id: string) => unknown;\n\n/** The packages to try, in order: the project's own TypeScript first. */\nexport const TYPESCRIPT_PACKAGES = [\"typescript\", \"@typescript/typescript6\"] as const;\n\n/** Error codes of a package that is missing or cannot be loaded with `require`. */\nconst UNAVAILABLE_CODES = new Set([\n \"MODULE_NOT_FOUND\",\n \"ERR_REQUIRE_ESM\",\n \"ERR_PACKAGE_PATH_NOT_EXPORTED\",\n]);\n\nexport class TypeScriptNotFoundError extends OpenAPITypesafeError {\n constructor() {\n super({\n code: ERROR_CODES.TYPESCRIPT_NOT_FOUND,\n message:\n \"A callback or helper uses TypeScript compiler nodes, \" +\n \"which needs the TypeScript JavaScript API. \" +\n 'Install \"typescript\" version 6 or earlier, ' +\n 'or \"@typescript/typescript6\" on TypeScript 7, ' +\n \"or use IR callbacks (irCallbacks: true).\",\n details: { packages: [...TYPESCRIPT_PACKAGES] },\n });\n this.name = \"TypeScriptNotFoundError\";\n }\n}\n\n/** Where to look: the current project, then this package's own location. */\nexport function defaultModuleRequires(): readonly ModuleRequire[] {\n return [createRequire(join(process.cwd(), \"package.json\")), createRequire(import.meta.url)];\n}\n\nfunction hasCompilerApi(value: unknown): value is TypeScriptModule {\n const module = value as Partial<TypeScriptModule> | undefined;\n return (\n typeof module?.factory?.createTypeReferenceNode === \"function\" &&\n typeof module.createPrinter === \"function\"\n );\n}\n\nfunction tryRequire(load: ModuleRequire, id: string): unknown {\n try {\n return load(id);\n } catch (error) {\n if (UNAVAILABLE_CODES.has((error as { code?: string }).code ?? \"\")) {\n return undefined;\n }\n throw error;\n }\n}\n\n/**\n * The first package with the compiler API, trying each package name with each location. Node\n * caches resolved modules, so repeated calls are cheap and return the same module.\n */\nexport function loadTypeScript(\n requires: readonly ModuleRequire[] = defaultModuleRequires(),\n): TypeScriptModule {\n for (const id of TYPESCRIPT_PACKAGES) {\n for (const load of requires) {\n const module = tryRequire(load, id);\n if (hasCompilerApi(module)) {\n return module;\n }\n }\n }\n throw new TypeScriptNotFoundError();\n}\n"],"names":[],"mappings":";;;;AAkBO,MAAM,mBAAA,GAAsB,CAAC,YAAA,EAAc,yBAAyB;AAG3E,MAAM,iBAAA,uBAAwB,GAAA,CAAI;AAAA,EAChC,kBAAA;AAAA,EACA,iBAAA;AAAA,EACA;AACF,CAAC,CAAA;AAEM,MAAM,gCAAgC,oBAAA,CAAqB;AAAA,EAChE,WAAA,GAAc;AACZ,IAAA,KAAA,CAAM;AAAA,MACJ,MAAM,WAAA,CAAY,oBAAA;AAAA,MAClB,OAAA,EACE,mOAAA;AAAA,MAKF,SAAS,EAAE,QAAA,EAAU,CAAC,GAAG,mBAAmB,CAAA;AAAE,KAC/C,CAAA;AACD,IAAA,IAAA,CAAK,IAAA,GAAO,yBAAA;AAAA,EACd;AACF;AAGO,SAAS,qBAAA,GAAkD;AAChE,EAAA,OAAO,CAAC,aAAA,CAAc,IAAA,CAAK,OAAA,CAAQ,GAAA,EAAI,EAAG,cAAc,CAAC,CAAA,EAAG,aAAA,CAAc,MAAA,CAAA,IAAA,CAAY,GAAG,CAAC,CAAA;AAC5F;AAEA,SAAS,eAAe,KAAA,EAA2C;AACjE,EAAA,MAAM,MAAA,GAAS,KAAA;AACf,EAAA,OACE,OAAO,MAAA,EAAQ,OAAA,EAAS,4BAA4B,UAAA,IACpD,OAAO,OAAO,aAAA,KAAkB,UAAA;AAEpC;AAEA,SAAS,UAAA,CAAW,MAAqB,EAAA,EAAqB;AAC5D,EAAA,IAAI;AACF,IAAA,OAAO,KAAK,EAAE,CAAA;AAAA,EAChB,SAAS,KAAA,EAAO;AACd,IAAA,IAAI,iBAAA,CAAkB,GAAA,CAAK,KAAA,CAA4B,IAAA,IAAQ,EAAE,CAAA,EAAG;AAClE,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,MAAM,KAAA;AAAA,EACR;AACF;AAMO,SAAS,cAAA,CACd,QAAA,GAAqC,qBAAA,EAAsB,EACzC;AAClB,EAAA,KAAA,MAAW,MAAM,mBAAA,EAAqB;AACpC,IAAA,KAAA,MAAW,QAAQ,QAAA,EAAU;AAC3B,MAAA,MAAM,MAAA,GAAS,UAAA,CAAW,IAAA,EAAM,EAAE,CAAA;AAClC,MAAA,IAAI,cAAA,CAAe,MAAM,CAAA,EAAG;AAC1B,QAAA,OAAO,MAAA;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACA,EAAA,MAAM,IAAI,uBAAA,EAAwB;AACpC;;"}
@@ -0,0 +1,21 @@
1
+ 'use strict';
2
+
3
+ function printWithTypeScript(ts, nodes, options) {
4
+ const sourceFile = ts.createSourceFile(
5
+ options?.fileName ?? "openapi-ts.ts",
6
+ options?.sourceText ?? "",
7
+ ts.ScriptTarget.ESNext,
8
+ false,
9
+ ts.ScriptKind.TS
10
+ );
11
+ sourceFile.statements = ts.factory.createNodeArray(nodes);
12
+ const printer = ts.createPrinter({
13
+ newLine: ts.NewLineKind.LineFeed,
14
+ removeComments: false,
15
+ ...options?.formatOptions
16
+ });
17
+ return printer.printFile(sourceFile);
18
+ }
19
+
20
+ exports.printWithTypeScript = printWithTypeScript;
21
+ //# sourceMappingURL=print-typescript.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"print-typescript.cjs","sources":["../../../src/adapters/type-ast-bridge/print-typescript.ts"],"sourcesContent":["import type ts from \"typescript\";\nimport type { TypeScriptModule } from \"./load-typescript.js\";\n\n/** Options of `astToString` for the TypeScript printer, as in the original. */\nexport interface AstToStringOptions {\n fileName?: string;\n sourceText?: string;\n formatOptions?: ts.PrinterOptions;\n}\n\n/** Print TypeScript nodes as the original `astToString` did. */\nexport function printWithTypeScript(\n ts: TypeScriptModule,\n nodes: readonly ts.Node[],\n options?: AstToStringOptions,\n): string {\n const sourceFile = ts.createSourceFile(\n options?.fileName ?? \"openapi-ts.ts\",\n options?.sourceText ?? \"\",\n ts.ScriptTarget.ESNext,\n false,\n ts.ScriptKind.TS,\n );\n // The source file is new and not shared, so its statements can be set once.\n (sourceFile as { statements: ts.NodeArray<ts.Statement> }).statements =\n ts.factory.createNodeArray(nodes as readonly ts.Statement[]);\n const printer = ts.createPrinter({\n newLine: ts.NewLineKind.LineFeed,\n removeComments: false,\n ...options?.formatOptions,\n });\n return printer.printFile(sourceFile);\n}\n"],"names":[],"mappings":";;AAWO,SAAS,mBAAA,CACd,EAAA,EACA,KAAA,EACA,OAAA,EACQ;AACR,EAAA,MAAM,aAAa,EAAA,CAAG,gBAAA;AAAA,IACpB,SAAS,QAAA,IAAY,eAAA;AAAA,IACrB,SAAS,UAAA,IAAc,EAAA;AAAA,IACvB,GAAG,YAAA,CAAa,MAAA;AAAA,IAChB,KAAA;AAAA,IACA,GAAG,UAAA,CAAW;AAAA,GAChB;AAEA,EAAC,UAAA,CAA0D,UAAA,GACzD,EAAA,CAAG,OAAA,CAAQ,gBAAgB,KAAgC,CAAA;AAC7D,EAAA,MAAM,OAAA,GAAU,GAAG,aAAA,CAAc;AAAA,IAC/B,OAAA,EAAS,GAAG,WAAA,CAAY,QAAA;AAAA,IACxB,cAAA,EAAgB,KAAA;AAAA,IAChB,GAAG,OAAA,EAAS;AAAA,GACb,CAAA;AACD,EAAA,OAAO,OAAA,CAAQ,UAAU,UAAU,CAAA;AACrC;;"}
@@ -0,0 +1,19 @@
1
+ function printWithTypeScript(ts, nodes, options) {
2
+ const sourceFile = ts.createSourceFile(
3
+ options?.fileName ?? "openapi-ts.ts",
4
+ options?.sourceText ?? "",
5
+ ts.ScriptTarget.ESNext,
6
+ false,
7
+ ts.ScriptKind.TS
8
+ );
9
+ sourceFile.statements = ts.factory.createNodeArray(nodes);
10
+ const printer = ts.createPrinter({
11
+ newLine: ts.NewLineKind.LineFeed,
12
+ removeComments: false,
13
+ ...options?.formatOptions
14
+ });
15
+ return printer.printFile(sourceFile);
16
+ }
17
+
18
+ export { printWithTypeScript };
19
+ //# sourceMappingURL=print-typescript.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"print-typescript.mjs","sources":["../../../src/adapters/type-ast-bridge/print-typescript.ts"],"sourcesContent":["import type ts from \"typescript\";\nimport type { TypeScriptModule } from \"./load-typescript.js\";\n\n/** Options of `astToString` for the TypeScript printer, as in the original. */\nexport interface AstToStringOptions {\n fileName?: string;\n sourceText?: string;\n formatOptions?: ts.PrinterOptions;\n}\n\n/** Print TypeScript nodes as the original `astToString` did. */\nexport function printWithTypeScript(\n ts: TypeScriptModule,\n nodes: readonly ts.Node[],\n options?: AstToStringOptions,\n): string {\n const sourceFile = ts.createSourceFile(\n options?.fileName ?? \"openapi-ts.ts\",\n options?.sourceText ?? \"\",\n ts.ScriptTarget.ESNext,\n false,\n ts.ScriptKind.TS,\n );\n // The source file is new and not shared, so its statements can be set once.\n (sourceFile as { statements: ts.NodeArray<ts.Statement> }).statements =\n ts.factory.createNodeArray(nodes as readonly ts.Statement[]);\n const printer = ts.createPrinter({\n newLine: ts.NewLineKind.LineFeed,\n removeComments: false,\n ...options?.formatOptions,\n });\n return printer.printFile(sourceFile);\n}\n"],"names":[],"mappings":"AAWO,SAAS,mBAAA,CACd,EAAA,EACA,KAAA,EACA,OAAA,EACQ;AACR,EAAA,MAAM,aAAa,EAAA,CAAG,gBAAA;AAAA,IACpB,SAAS,QAAA,IAAY,eAAA;AAAA,IACrB,SAAS,UAAA,IAAc,EAAA;AAAA,IACvB,GAAG,YAAA,CAAa,MAAA;AAAA,IAChB,KAAA;AAAA,IACA,GAAG,UAAA,CAAW;AAAA,GAChB;AAEA,EAAC,UAAA,CAA0D,UAAA,GACzD,EAAA,CAAG,OAAA,CAAQ,gBAAgB,KAAgC,CAAA;AAC7D,EAAA,MAAM,OAAA,GAAU,GAAG,aAAA,CAAc;AAAA,IAC/B,OAAA,EAAS,GAAG,WAAA,CAAY,QAAA;AAAA,IACxB,cAAA,EAAgB,KAAA;AAAA,IAChB,GAAG,OAAA,EAAS;AAAA,GACb,CAAA;AACD,EAAA,OAAO,OAAA,CAAQ,UAAU,UAAU,CAAA;AACrC;;"}
@@ -0,0 +1,33 @@
1
+ 'use strict';
2
+
3
+ const constructors = require('../../domain/ir/constructors.cjs');
4
+ const irToTypescript = require('./ir-to-typescript.cjs');
5
+
6
+ function isIrNode(value) {
7
+ return typeof value.kind === "string";
8
+ }
9
+ function withoutIrNodes(ts, node) {
10
+ const visit = (child) => isIrNode(child) ? irToTypescript.toTypeNode(ts, child) : ts.visitEachChild(child, visit, void 0);
11
+ return visit(node);
12
+ }
13
+ function printPlainNode(ts, node) {
14
+ const source = ts.createSourceFile("openapi-ts.ts", "", ts.ScriptTarget.ESNext, false);
15
+ const printer = ts.createPrinter({ newLine: ts.NewLineKind.LineFeed });
16
+ return printer.printNode(ts.EmitHint.Unspecified, node, source);
17
+ }
18
+ function asRaw(ts, node) {
19
+ const printable = withoutIrNodes(ts, node);
20
+ return constructors.irRaw(printPlainNode(ts, printable), printable);
21
+ }
22
+ function hasSyntheticComments(ts, node) {
23
+ const leading = ts.getSyntheticLeadingComments(node)?.length ?? 0;
24
+ return leading + (ts.getSyntheticTrailingComments(node)?.length ?? 0) > 0;
25
+ }
26
+ function needsPrintedText(ts, node) {
27
+ return node.pos >= 0 || hasSyntheticComments(ts, node);
28
+ }
29
+
30
+ exports.asRaw = asRaw;
31
+ exports.isIrNode = isIrNode;
32
+ exports.needsPrintedText = needsPrintedText;
33
+ //# sourceMappingURL=typescript-raw-text.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typescript-raw-text.cjs","sources":["../../../src/adapters/type-ast-bridge/typescript-raw-text.ts"],"sourcesContent":["import type ts from \"typescript\";\nimport { irRaw } from \"../../domain/ir/constructors.js\";\nimport type { IrType } from \"../../domain/ir/nodes.js\";\nimport { toTypeNode } from \"./ir-to-typescript.js\";\nimport type { TypeScriptModule } from \"./load-typescript.js\";\n\n/**\n * Callback nodes that the IR cannot model exactly are kept as text, printed the way the original\n * printed them (ADR-004, decision 3).\n */\n\n/** IR nodes have a string `kind`; TypeScript nodes have a numeric one. */\nexport function isIrNode(value: unknown): value is IrType {\n return typeof (value as { kind?: unknown }).kind === \"string\";\n}\n\n/** Replace IR nodes nested in a TypeScript tree, so the TypeScript printer can print it. */\nfunction withoutIrNodes<T extends ts.Node>(ts: TypeScriptModule, node: T): T {\n const visit = (child: ts.Node): ts.Node =>\n isIrNode(child) ? toTypeNode(ts, child) : ts.visitEachChild(child, visit, undefined);\n return visit(node) as T;\n}\n\nfunction printPlainNode(ts: TypeScriptModule, node: ts.Node): string {\n const source = ts.createSourceFile(\"openapi-ts.ts\", \"\", ts.ScriptTarget.ESNext, false);\n const printer = ts.createPrinter({ newLine: ts.NewLineKind.LineFeed });\n return printer.printNode(ts.EmitHint.Unspecified, node, source);\n}\n\n/** Print as the original did: the TypeScript printer with an empty source file and LF. */\nexport function printTypeScriptNode(ts: TypeScriptModule, node: ts.Node): string {\n return printPlainNode(ts, withoutIrNodes(ts, node));\n}\n\n/** The node as text, keeping the node itself for the way back to TypeScript (`toTypeNode`). */\nexport function asRaw(ts: TypeScriptModule, node: ts.TypeNode): IrType {\n const printable = withoutIrNodes(ts, node);\n return irRaw(printPlainNode(ts, printable), printable);\n}\n\nfunction hasSyntheticComments(ts: TypeScriptModule, node: ts.Node): boolean {\n const leading = ts.getSyntheticLeadingComments(node)?.length ?? 0;\n return leading + (ts.getSyntheticTrailingComments(node)?.length ?? 0) > 0;\n}\n\n/** Parsed nodes print from their source text, and comments attach to text: keep both printed. */\nexport function needsPrintedText(ts: TypeScriptModule, node: ts.Node): boolean {\n return node.pos >= 0 || hasSyntheticComments(ts, node);\n}\n"],"names":["toTypeNode","irRaw"],"mappings":";;;;;AAYO,SAAS,SAAS,KAAA,EAAiC;AACxD,EAAA,OAAO,OAAQ,MAA6B,IAAA,KAAS,QAAA;AACvD;AAGA,SAAS,cAAA,CAAkC,IAAsB,IAAA,EAAY;AAC3E,EAAA,MAAM,KAAA,GAAQ,CAAC,KAAA,KACb,QAAA,CAAS,KAAK,CAAA,GAAIA,yBAAA,CAAW,EAAA,EAAI,KAAK,CAAA,GAAI,EAAA,CAAG,cAAA,CAAe,KAAA,EAAO,OAAO,MAAS,CAAA;AACrF,EAAA,OAAO,MAAM,IAAI,CAAA;AACnB;AAEA,SAAS,cAAA,CAAe,IAAsB,IAAA,EAAuB;AACnE,EAAA,MAAM,MAAA,GAAS,GAAG,gBAAA,CAAiB,eAAA,EAAiB,IAAI,EAAA,CAAG,YAAA,CAAa,QAAQ,KAAK,CAAA;AACrF,EAAA,MAAM,OAAA,GAAU,GAAG,aAAA,CAAc,EAAE,SAAS,EAAA,CAAG,WAAA,CAAY,UAAU,CAAA;AACrE,EAAA,OAAO,QAAQ,SAAA,CAAU,EAAA,CAAG,QAAA,CAAS,WAAA,EAAa,MAAM,MAAM,CAAA;AAChE;AAQO,SAAS,KAAA,CAAM,IAAsB,IAAA,EAA2B;AACrE,EAAA,MAAM,SAAA,GAAY,cAAA,CAAe,EAAA,EAAI,IAAI,CAAA;AACzC,EAAA,OAAOC,kBAAA,CAAM,cAAA,CAAe,EAAA,EAAI,SAAS,GAAG,SAAS,CAAA;AACvD;AAEA,SAAS,oBAAA,CAAqB,IAAsB,IAAA,EAAwB;AAC1E,EAAA,MAAM,OAAA,GAAU,EAAA,CAAG,2BAAA,CAA4B,IAAI,GAAG,MAAA,IAAU,CAAA;AAChE,EAAA,OAAO,WAAW,EAAA,CAAG,4BAAA,CAA6B,IAAI,CAAA,EAAG,UAAU,CAAA,CAAA,GAAK,CAAA;AAC1E;AAGO,SAAS,gBAAA,CAAiB,IAAsB,IAAA,EAAwB;AAC7E,EAAA,OAAO,IAAA,CAAK,GAAA,IAAO,CAAA,IAAK,oBAAA,CAAqB,IAAI,IAAI,CAAA;AACvD;;;;"}
@@ -0,0 +1,29 @@
1
+ import { irRaw } from '../../domain/ir/constructors.mjs';
2
+ import { toTypeNode } from './ir-to-typescript.mjs';
3
+
4
+ function isIrNode(value) {
5
+ return typeof value.kind === "string";
6
+ }
7
+ function withoutIrNodes(ts, node) {
8
+ const visit = (child) => isIrNode(child) ? toTypeNode(ts, child) : ts.visitEachChild(child, visit, void 0);
9
+ return visit(node);
10
+ }
11
+ function printPlainNode(ts, node) {
12
+ const source = ts.createSourceFile("openapi-ts.ts", "", ts.ScriptTarget.ESNext, false);
13
+ const printer = ts.createPrinter({ newLine: ts.NewLineKind.LineFeed });
14
+ return printer.printNode(ts.EmitHint.Unspecified, node, source);
15
+ }
16
+ function asRaw(ts, node) {
17
+ const printable = withoutIrNodes(ts, node);
18
+ return irRaw(printPlainNode(ts, printable), printable);
19
+ }
20
+ function hasSyntheticComments(ts, node) {
21
+ const leading = ts.getSyntheticLeadingComments(node)?.length ?? 0;
22
+ return leading + (ts.getSyntheticTrailingComments(node)?.length ?? 0) > 0;
23
+ }
24
+ function needsPrintedText(ts, node) {
25
+ return node.pos >= 0 || hasSyntheticComments(ts, node);
26
+ }
27
+
28
+ export { asRaw, isIrNode, needsPrintedText };
29
+ //# sourceMappingURL=typescript-raw-text.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typescript-raw-text.mjs","sources":["../../../src/adapters/type-ast-bridge/typescript-raw-text.ts"],"sourcesContent":["import type ts from \"typescript\";\nimport { irRaw } from \"../../domain/ir/constructors.js\";\nimport type { IrType } from \"../../domain/ir/nodes.js\";\nimport { toTypeNode } from \"./ir-to-typescript.js\";\nimport type { TypeScriptModule } from \"./load-typescript.js\";\n\n/**\n * Callback nodes that the IR cannot model exactly are kept as text, printed the way the original\n * printed them (ADR-004, decision 3).\n */\n\n/** IR nodes have a string `kind`; TypeScript nodes have a numeric one. */\nexport function isIrNode(value: unknown): value is IrType {\n return typeof (value as { kind?: unknown }).kind === \"string\";\n}\n\n/** Replace IR nodes nested in a TypeScript tree, so the TypeScript printer can print it. */\nfunction withoutIrNodes<T extends ts.Node>(ts: TypeScriptModule, node: T): T {\n const visit = (child: ts.Node): ts.Node =>\n isIrNode(child) ? toTypeNode(ts, child) : ts.visitEachChild(child, visit, undefined);\n return visit(node) as T;\n}\n\nfunction printPlainNode(ts: TypeScriptModule, node: ts.Node): string {\n const source = ts.createSourceFile(\"openapi-ts.ts\", \"\", ts.ScriptTarget.ESNext, false);\n const printer = ts.createPrinter({ newLine: ts.NewLineKind.LineFeed });\n return printer.printNode(ts.EmitHint.Unspecified, node, source);\n}\n\n/** Print as the original did: the TypeScript printer with an empty source file and LF. */\nexport function printTypeScriptNode(ts: TypeScriptModule, node: ts.Node): string {\n return printPlainNode(ts, withoutIrNodes(ts, node));\n}\n\n/** The node as text, keeping the node itself for the way back to TypeScript (`toTypeNode`). */\nexport function asRaw(ts: TypeScriptModule, node: ts.TypeNode): IrType {\n const printable = withoutIrNodes(ts, node);\n return irRaw(printPlainNode(ts, printable), printable);\n}\n\nfunction hasSyntheticComments(ts: TypeScriptModule, node: ts.Node): boolean {\n const leading = ts.getSyntheticLeadingComments(node)?.length ?? 0;\n return leading + (ts.getSyntheticTrailingComments(node)?.length ?? 0) > 0;\n}\n\n/** Parsed nodes print from their source text, and comments attach to text: keep both printed. */\nexport function needsPrintedText(ts: TypeScriptModule, node: ts.Node): boolean {\n return node.pos >= 0 || hasSyntheticComments(ts, node);\n}\n"],"names":[],"mappings":";;;AAYO,SAAS,SAAS,KAAA,EAAiC;AACxD,EAAA,OAAO,OAAQ,MAA6B,IAAA,KAAS,QAAA;AACvD;AAGA,SAAS,cAAA,CAAkC,IAAsB,IAAA,EAAY;AAC3E,EAAA,MAAM,KAAA,GAAQ,CAAC,KAAA,KACb,QAAA,CAAS,KAAK,CAAA,GAAI,UAAA,CAAW,EAAA,EAAI,KAAK,CAAA,GAAI,EAAA,CAAG,cAAA,CAAe,KAAA,EAAO,OAAO,MAAS,CAAA;AACrF,EAAA,OAAO,MAAM,IAAI,CAAA;AACnB;AAEA,SAAS,cAAA,CAAe,IAAsB,IAAA,EAAuB;AACnE,EAAA,MAAM,MAAA,GAAS,GAAG,gBAAA,CAAiB,eAAA,EAAiB,IAAI,EAAA,CAAG,YAAA,CAAa,QAAQ,KAAK,CAAA;AACrF,EAAA,MAAM,OAAA,GAAU,GAAG,aAAA,CAAc,EAAE,SAAS,EAAA,CAAG,WAAA,CAAY,UAAU,CAAA;AACrE,EAAA,OAAO,QAAQ,SAAA,CAAU,EAAA,CAAG,QAAA,CAAS,WAAA,EAAa,MAAM,MAAM,CAAA;AAChE;AAQO,SAAS,KAAA,CAAM,IAAsB,IAAA,EAA2B;AACrE,EAAA,MAAM,SAAA,GAAY,cAAA,CAAe,EAAA,EAAI,IAAI,CAAA;AACzC,EAAA,OAAO,KAAA,CAAM,cAAA,CAAe,EAAA,EAAI,SAAS,GAAG,SAAS,CAAA;AACvD;AAEA,SAAS,oBAAA,CAAqB,IAAsB,IAAA,EAAwB;AAC1E,EAAA,MAAM,OAAA,GAAU,EAAA,CAAG,2BAAA,CAA4B,IAAI,GAAG,MAAA,IAAU,CAAA;AAChE,EAAA,OAAO,WAAW,EAAA,CAAG,4BAAA,CAA6B,IAAI,CAAA,EAAG,UAAU,CAAA,CAAA,GAAK,CAAA;AAC1E;AAGO,SAAS,gBAAA,CAAiB,IAAsB,IAAA,EAAwB;AAC7E,EAAA,OAAO,IAAA,CAAK,GAAA,IAAO,CAAA,IAAK,oBAAA,CAAqB,IAAI,IAAI,CAAA;AACvD;;"}
@@ -0,0 +1,204 @@
1
+ 'use strict';
2
+
3
+ const constructors = require('../../domain/ir/constructors.cjs');
4
+ const typescriptRawText = require('./typescript-raw-text.cjs');
5
+
6
+ function keywordOf(ts, kind) {
7
+ const keywords = /* @__PURE__ */ new Map([
8
+ [ts.SyntaxKind.StringKeyword, "string"],
9
+ [ts.SyntaxKind.NumberKeyword, "number"],
10
+ [ts.SyntaxKind.BooleanKeyword, "boolean"],
11
+ [ts.SyntaxKind.UndefinedKeyword, "undefined"],
12
+ [ts.SyntaxKind.UnknownKeyword, "unknown"],
13
+ [ts.SyntaxKind.NeverKeyword, "never"]
14
+ ]);
15
+ return keywords.get(kind);
16
+ }
17
+ function isCanonicalNumber(text) {
18
+ return String(Number(text)) === text;
19
+ }
20
+ function fromNumber(ts, literal) {
21
+ if (ts.isNumericLiteral(literal)) {
22
+ return isCanonicalNumber(literal.text) ? { kind: "numberLiteral", value: Number(literal.text) } : null;
23
+ }
24
+ const isNegative = ts.isPrefixUnaryExpression(literal) && literal.operator === ts.SyntaxKind.MinusToken && ts.isNumericLiteral(literal.operand) && isCanonicalNumber(literal.operand.text) && Number(literal.operand.text) !== 0;
25
+ return isNegative ? { kind: "numberLiteral", value: -Number(literal.operand.text) } : null;
26
+ }
27
+ function fromLiteral(ts, node) {
28
+ const { literal } = node;
29
+ if (ts.isStringLiteral(literal)) {
30
+ const isSingleQuoted = literal.singleQuote === true;
31
+ return isSingleQuoted ? null : { kind: "stringLiteral", value: literal.text, encoding: "escaped" };
32
+ }
33
+ if (literal.kind === ts.SyntaxKind.NullKeyword) {
34
+ return { kind: "keyword", keyword: "null" };
35
+ }
36
+ if (literal.kind === ts.SyntaxKind.TrueKeyword || literal.kind === ts.SyntaxKind.FalseKeyword) {
37
+ return { kind: "booleanLiteral", value: literal.kind === ts.SyntaxKind.TrueKeyword };
38
+ }
39
+ return fromNumber(ts, literal);
40
+ }
41
+ function childrenOf(ts, parent) {
42
+ return (child) => fromTypeNode(ts, child, parent);
43
+ }
44
+ function fromReference(ts, node) {
45
+ if (!ts.isIdentifier(node.typeName)) {
46
+ return null;
47
+ }
48
+ const typeArguments = (node.typeArguments ?? []).map(childrenOf(ts, node));
49
+ return { kind: "reference", name: ts.idText(node.typeName), typeArguments };
50
+ }
51
+ function fromTuple(ts, node) {
52
+ const isPlain = node.elements.every(
53
+ (element) => !ts.isNamedTupleMember(element) && !ts.isOptionalTypeNode(element)
54
+ );
55
+ if (!isPlain) {
56
+ return null;
57
+ }
58
+ const convert = childrenOf(ts, node);
59
+ const elements = node.elements.map(
60
+ (element) => ts.isRestTypeNode(element) ? { type: convert(element.type), isRest: true } : { type: convert(element), isRest: false }
61
+ );
62
+ return { kind: "tuple", elements };
63
+ }
64
+ function fromComments(ts, node) {
65
+ const comments = ts.getSyntheticLeadingComments(node) ?? [];
66
+ const hasTrailing = (ts.getSyntheticTrailingComments(node)?.length ?? 0) > 0;
67
+ if (hasTrailing || comments.some((comment) => !comment.hasTrailingNewLine)) {
68
+ return null;
69
+ }
70
+ return comments.map((comment) => ({
71
+ kind: comment.kind === ts.SyntaxKind.MultiLineCommentTrivia ? "block" : "line",
72
+ text: comment.text
73
+ }));
74
+ }
75
+ function fromPropertyName(ts, name) {
76
+ if (ts.isIdentifier(name)) {
77
+ return { kind: "identifier", text: ts.idText(name) };
78
+ }
79
+ if (ts.isStringLiteral(name) && name.singleQuote !== true) {
80
+ return { kind: "string", value: name.text };
81
+ }
82
+ return ts.isNumericLiteral(name) ? { kind: "number", text: name.text } : null;
83
+ }
84
+ function readonlyFlag(ts, node) {
85
+ const modifiers = ts.canHaveModifiers(node) ? ts.getModifiers(node) ?? [] : [];
86
+ const isOnlyReadonly = modifiers.every(
87
+ (modifier) => modifier.kind === ts.SyntaxKind.ReadonlyKeyword
88
+ );
89
+ return isOnlyReadonly ? modifiers.length > 0 : null;
90
+ }
91
+ function fromPropertySignature(ts, node) {
92
+ const name = fromPropertyName(ts, node.name);
93
+ const comments = fromComments(ts, node);
94
+ const isReadonly = readonlyFlag(ts, node);
95
+ if (name === null || comments === null || isReadonly === null || node.type === void 0) {
96
+ return null;
97
+ }
98
+ return {
99
+ kind: "property",
100
+ name,
101
+ type: fromTypeNode(ts, node.type, node),
102
+ isOptional: node.questionToken !== void 0,
103
+ isReadonly,
104
+ comments
105
+ };
106
+ }
107
+ function fromIndexSignature(ts, node) {
108
+ const [parameter, ...others] = node.parameters;
109
+ const comments = fromComments(ts, node);
110
+ const isReadonly = readonlyFlag(ts, node);
111
+ const isPlain = parameter?.type !== void 0 && ts.isIdentifier(parameter.name) && others.length === 0;
112
+ if (!isPlain || comments === null || isReadonly === null) {
113
+ return null;
114
+ }
115
+ return {
116
+ kind: "indexSignature",
117
+ parameterName: ts.idText(parameter.name),
118
+ parameterType: fromTypeNode(ts, parameter.type, node),
119
+ type: fromTypeNode(ts, node.type, node),
120
+ isReadonly,
121
+ comments
122
+ };
123
+ }
124
+ function fromMember(ts, member) {
125
+ if (member.pos >= 0) {
126
+ return null;
127
+ }
128
+ if (ts.isPropertySignature(member)) {
129
+ return fromPropertySignature(ts, member);
130
+ }
131
+ return ts.isIndexSignatureDeclaration(member) ? fromIndexSignature(ts, member) : null;
132
+ }
133
+ function fromTypeLiteral(ts, node) {
134
+ const members = node.members.map((member) => fromMember(ts, member));
135
+ const isReadable = members.every((member) => member !== null);
136
+ return isReadable ? { kind: "object", members } : null;
137
+ }
138
+ function fromComposite(ts, node) {
139
+ const convert = childrenOf(ts, node);
140
+ if (ts.isArrayTypeNode(node)) {
141
+ return { kind: "array", element: convert(node.elementType) };
142
+ }
143
+ if (ts.isUnionTypeNode(node)) {
144
+ return { kind: "union", types: node.types.map(convert) };
145
+ }
146
+ if (ts.isIntersectionTypeNode(node)) {
147
+ return { kind: "intersection", types: node.types.map(convert) };
148
+ }
149
+ if (ts.isIndexedAccessTypeNode(node)) {
150
+ return {
151
+ kind: "indexedAccess",
152
+ object: convert(node.objectType),
153
+ index: convert(node.indexType)
154
+ };
155
+ }
156
+ if (ts.isTypeOperatorNode(node) && node.operator === ts.SyntaxKind.ReadonlyKeyword) {
157
+ return { kind: "readonly", type: convert(node.type) };
158
+ }
159
+ return ts.isTypeLiteralNode(node) ? fromTypeLiteral(ts, node) : null;
160
+ }
161
+ function fromStructure(ts, node) {
162
+ const keyword = keywordOf(ts, node.kind);
163
+ if (keyword !== void 0) {
164
+ return { kind: "keyword", keyword };
165
+ }
166
+ if (ts.isIdentifier(node)) {
167
+ return constructors.irRaw(ts.idText(node));
168
+ }
169
+ if (ts.isLiteralTypeNode(node)) {
170
+ return fromLiteral(ts, node);
171
+ }
172
+ if (ts.isTypeReferenceNode(node)) {
173
+ return fromReference(ts, node);
174
+ }
175
+ return ts.isTupleTypeNode(node) ? fromTuple(ts, node) : fromComposite(ts, node);
176
+ }
177
+ function isFactoryParenthesis(ts, inner, parent) {
178
+ if (parent === void 0) {
179
+ return false;
180
+ }
181
+ const isComposite = ts.isUnionTypeNode(inner) || ts.isIntersectionTypeNode(inner);
182
+ const isPostfixOrReadonlyParent = ts.isArrayTypeNode(parent) || ts.isIndexedAccessTypeNode(parent) || ts.isTypeOperatorNode(parent);
183
+ if (isPostfixOrReadonlyParent) {
184
+ return isComposite || ts.isTypeOperatorNode(inner);
185
+ }
186
+ const isCompositeParent = ts.isUnionTypeNode(parent) || ts.isIntersectionTypeNode(parent);
187
+ return isCompositeParent && isComposite;
188
+ }
189
+ function fromTypeNode(ts, node, parent) {
190
+ if (typescriptRawText.isIrNode(node)) {
191
+ return node;
192
+ }
193
+ if (typescriptRawText.needsPrintedText(ts, node)) {
194
+ return typescriptRawText.asRaw(ts, node);
195
+ }
196
+ if (ts.isParenthesizedTypeNode(node)) {
197
+ return isFactoryParenthesis(ts, node.type, parent) ? fromTypeNode(ts, node.type, parent) : typescriptRawText.asRaw(ts, node);
198
+ }
199
+ return fromStructure(ts, node) ?? typescriptRawText.asRaw(ts, node);
200
+ }
201
+
202
+ exports.fromPropertySignature = fromPropertySignature;
203
+ exports.fromTypeNode = fromTypeNode;
204
+ //# sourceMappingURL=typescript-to-ir.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typescript-to-ir.cjs","sources":["../../../src/adapters/type-ast-bridge/typescript-to-ir.ts"],"sourcesContent":["import type ts from \"typescript\";\nimport { irRaw } from \"../../domain/ir/constructors.js\";\nimport type {\n IrComment,\n IrKeyword,\n IrMember,\n IrPropertyName,\n IrPropertySignature,\n IrType,\n} from \"../../domain/ir/nodes.js\";\nimport type { TypeScriptModule } from \"./load-typescript.js\";\nimport { asRaw, isIrNode, needsPrintedText } from \"./typescript-raw-text.js\";\n\n/**\n * Read TypeScript type nodes from user callbacks into IR (ADR-004, decision 3). Synthesized nodes\n * are mapped by structure. Anything the IR cannot express exactly is printed with the TypeScript\n * printer, the way the original output it, and kept as a `raw` node: parsed nodes, nodes with\n * comments, explicit parentheses, single-quoted strings, numbers not in canonical form, and syntax\n * the IR does not model. Every function takes the user's TypeScript module (ADR-004, decision 4):\n * `SyntaxKind` numbers differ between versions, so a node is read with the module that made it.\n */\n\nfunction keywordOf(ts: TypeScriptModule, kind: ts.SyntaxKind): IrKeyword | undefined {\n const keywords: ReadonlyMap<ts.SyntaxKind, IrKeyword> = new Map([\n [ts.SyntaxKind.StringKeyword, \"string\"],\n [ts.SyntaxKind.NumberKeyword, \"number\"],\n [ts.SyntaxKind.BooleanKeyword, \"boolean\"],\n [ts.SyntaxKind.UndefinedKeyword, \"undefined\"],\n [ts.SyntaxKind.UnknownKeyword, \"unknown\"],\n [ts.SyntaxKind.NeverKeyword, \"never\"],\n ]);\n return keywords.get(kind);\n}\n\nfunction isCanonicalNumber(text: string): boolean {\n return String(Number(text)) === text;\n}\n\nfunction fromNumber(ts: TypeScriptModule, literal: ts.Expression): IrType | null {\n if (ts.isNumericLiteral(literal)) {\n return isCanonicalNumber(literal.text)\n ? { kind: \"numberLiteral\", value: Number(literal.text) }\n : null;\n }\n const isNegative =\n ts.isPrefixUnaryExpression(literal) &&\n literal.operator === ts.SyntaxKind.MinusToken &&\n ts.isNumericLiteral(literal.operand) &&\n isCanonicalNumber(literal.operand.text) &&\n Number(literal.operand.text) !== 0;\n return isNegative\n ? { kind: \"numberLiteral\", value: -Number((literal.operand as ts.NumericLiteral).text) }\n : null;\n}\n\nfunction fromLiteral(ts: TypeScriptModule, node: ts.LiteralTypeNode): IrType | null {\n const { literal } = node;\n if (ts.isStringLiteral(literal)) {\n const isSingleQuoted = (literal as { singleQuote?: boolean }).singleQuote === true;\n return isSingleQuoted\n ? null\n : { kind: \"stringLiteral\", value: literal.text, encoding: \"escaped\" };\n }\n if (literal.kind === ts.SyntaxKind.NullKeyword) {\n return { kind: \"keyword\", keyword: \"null\" };\n }\n if (literal.kind === ts.SyntaxKind.TrueKeyword || literal.kind === ts.SyntaxKind.FalseKeyword) {\n return { kind: \"booleanLiteral\", value: literal.kind === ts.SyntaxKind.TrueKeyword };\n }\n return fromNumber(ts, literal);\n}\n\n/** Converts the children of one node, which becomes their parent. */\nfunction childrenOf(ts: TypeScriptModule, parent: ts.Node): (child: ts.TypeNode) => IrType {\n return (child) => fromTypeNode(ts, child, parent);\n}\n\nfunction fromReference(ts: TypeScriptModule, node: ts.TypeReferenceNode): IrType | null {\n if (!ts.isIdentifier(node.typeName)) {\n return null;\n }\n const typeArguments = (node.typeArguments ?? []).map(childrenOf(ts, node));\n return { kind: \"reference\", name: ts.idText(node.typeName), typeArguments };\n}\n\nfunction fromTuple(ts: TypeScriptModule, node: ts.TupleTypeNode): IrType | null {\n const isPlain = node.elements.every(\n (element) => !ts.isNamedTupleMember(element) && !ts.isOptionalTypeNode(element),\n );\n if (!isPlain) {\n return null;\n }\n const convert = childrenOf(ts, node);\n const elements = node.elements.map((element) =>\n ts.isRestTypeNode(element)\n ? { type: convert(element.type), isRest: true }\n : { type: convert(element), isRest: false },\n );\n return { kind: \"tuple\", elements };\n}\n\n/**\n * Leading comments in order, or null when the IR cannot hold them: trailing comments, or a\n * comment without a line break after it (the IR always writes one).\n */\nfunction fromComments(ts: TypeScriptModule, node: ts.Node): IrComment[] | null {\n const comments = ts.getSyntheticLeadingComments(node) ?? [];\n const hasTrailing = (ts.getSyntheticTrailingComments(node)?.length ?? 0) > 0;\n if (hasTrailing || comments.some((comment) => !comment.hasTrailingNewLine)) {\n return null;\n }\n return comments.map((comment) => ({\n kind: comment.kind === ts.SyntaxKind.MultiLineCommentTrivia ? \"block\" : \"line\",\n text: comment.text,\n }));\n}\n\nfunction fromPropertyName(ts: TypeScriptModule, name: ts.PropertyName): IrPropertyName | null {\n if (ts.isIdentifier(name)) {\n return { kind: \"identifier\", text: ts.idText(name) };\n }\n if (ts.isStringLiteral(name) && (name as { singleQuote?: boolean }).singleQuote !== true) {\n return { kind: \"string\", value: name.text };\n }\n return ts.isNumericLiteral(name) ? { kind: \"number\", text: name.text } : null;\n}\n\n/** Only `readonly` is modeled; any other modifier makes the member unreadable as IR. */\nfunction readonlyFlag(ts: TypeScriptModule, node: ts.TypeElement): boolean | null {\n const modifiers = ts.canHaveModifiers(node) ? (ts.getModifiers(node) ?? []) : [];\n const isOnlyReadonly = modifiers.every(\n (modifier) => modifier.kind === ts.SyntaxKind.ReadonlyKeyword,\n );\n return isOnlyReadonly ? modifiers.length > 0 : null;\n}\n\n/** A property signature as IR, or null when it uses syntax the IR does not model. */\nexport function fromPropertySignature(\n ts: TypeScriptModule,\n node: ts.PropertySignature,\n): IrPropertySignature | null {\n const name = fromPropertyName(ts, node.name);\n const comments = fromComments(ts, node);\n const isReadonly = readonlyFlag(ts, node);\n if (name === null || comments === null || isReadonly === null || node.type === undefined) {\n return null;\n }\n return {\n kind: \"property\",\n name,\n type: fromTypeNode(ts, node.type, node),\n isOptional: node.questionToken !== undefined,\n isReadonly,\n comments,\n };\n}\n\nfunction fromIndexSignature(\n ts: TypeScriptModule,\n node: ts.IndexSignatureDeclaration,\n): IrMember | null {\n const [parameter, ...others] = node.parameters;\n const comments = fromComments(ts, node);\n const isReadonly = readonlyFlag(ts, node);\n const isPlain =\n parameter?.type !== undefined && ts.isIdentifier(parameter.name) && others.length === 0;\n if (!isPlain || comments === null || isReadonly === null) {\n return null;\n }\n return {\n kind: \"indexSignature\",\n parameterName: ts.idText(parameter.name as ts.Identifier),\n parameterType: fromTypeNode(ts, parameter.type as ts.TypeNode, node),\n type: fromTypeNode(ts, node.type, node),\n isReadonly,\n comments,\n };\n}\n\nfunction fromMember(ts: TypeScriptModule, member: ts.TypeElement): IrMember | null {\n if (member.pos >= 0) {\n return null;\n }\n if (ts.isPropertySignature(member)) {\n return fromPropertySignature(ts, member);\n }\n return ts.isIndexSignatureDeclaration(member) ? fromIndexSignature(ts, member) : null;\n}\n\nfunction fromTypeLiteral(ts: TypeScriptModule, node: ts.TypeLiteralNode): IrType | null {\n const members = node.members.map((member) => fromMember(ts, member));\n const isReadable = members.every((member) => member !== null);\n return isReadable ? { kind: \"object\", members: members as IrMember[] } : null;\n}\n\nfunction fromComposite(ts: TypeScriptModule, node: ts.TypeNode): IrType | null {\n const convert = childrenOf(ts, node);\n if (ts.isArrayTypeNode(node)) {\n return { kind: \"array\", element: convert(node.elementType) };\n }\n if (ts.isUnionTypeNode(node)) {\n return { kind: \"union\", types: node.types.map(convert) };\n }\n if (ts.isIntersectionTypeNode(node)) {\n return { kind: \"intersection\", types: node.types.map(convert) };\n }\n if (ts.isIndexedAccessTypeNode(node)) {\n return {\n kind: \"indexedAccess\",\n object: convert(node.objectType),\n index: convert(node.indexType),\n };\n }\n if (ts.isTypeOperatorNode(node) && node.operator === ts.SyntaxKind.ReadonlyKeyword) {\n return { kind: \"readonly\", type: convert(node.type) };\n }\n return ts.isTypeLiteralNode(node) ? fromTypeLiteral(ts, node) : null;\n}\n\nfunction fromStructure(ts: TypeScriptModule, node: ts.TypeNode): IrType | null {\n const keyword = keywordOf(ts, node.kind);\n if (keyword !== undefined) {\n return { kind: \"keyword\", keyword };\n }\n if (ts.isIdentifier(node)) {\n // The original writes JSON string literals and some references as bare identifiers.\n return irRaw(ts.idText(node));\n }\n if (ts.isLiteralTypeNode(node)) {\n return fromLiteral(ts, node);\n }\n if (ts.isTypeReferenceNode(node)) {\n return fromReference(ts, node);\n }\n return ts.isTupleTypeNode(node) ? fromTuple(ts, node) : fromComposite(ts, node);\n}\n\n/**\n * Whether the factory's parenthesizer put these parentheses in (same rules as the IR printer):\n * unions, intersections and `readonly` types as array elements, indexed objects and `readonly`\n * operands; unions and intersections as members of other unions or intersections.\n */\nfunction isFactoryParenthesis(\n ts: TypeScriptModule,\n inner: ts.TypeNode,\n parent: ts.Node | undefined,\n): boolean {\n if (parent === undefined) {\n return false;\n }\n const isComposite = ts.isUnionTypeNode(inner) || ts.isIntersectionTypeNode(inner);\n const isPostfixOrReadonlyParent =\n ts.isArrayTypeNode(parent) ||\n ts.isIndexedAccessTypeNode(parent) ||\n ts.isTypeOperatorNode(parent);\n if (isPostfixOrReadonlyParent) {\n return isComposite || ts.isTypeOperatorNode(inner);\n }\n const isCompositeParent = ts.isUnionTypeNode(parent) || ts.isIntersectionTypeNode(parent);\n return isCompositeParent && isComposite;\n}\n\n/**\n * Convert a type node. `parent` is the node that contains it: synthesized nodes have no `parent`\n * link, and it is needed to tell parentheses the factory inserted from ones the user wrote.\n */\nexport function fromTypeNode(ts: TypeScriptModule, node: ts.TypeNode, parent?: ts.Node): IrType {\n if (isIrNode(node)) {\n return node;\n }\n if (needsPrintedText(ts, node)) {\n return asRaw(ts, node);\n }\n if (ts.isParenthesizedTypeNode(node)) {\n return isFactoryParenthesis(ts, node.type, parent)\n ? fromTypeNode(ts, node.type, parent)\n : asRaw(ts, node);\n }\n return fromStructure(ts, node) ?? asRaw(ts, node);\n}\n"],"names":["irRaw","isIrNode","needsPrintedText","asRaw"],"mappings":"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"}