openapi-typesafe 0.0.0 → 1.0.0-rc.1

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 (863) 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 +61 -0
  25. package/dist/adapters/redocly-loader/redocly-config-source.cjs.map +1 -0
  26. package/dist/adapters/redocly-loader/redocly-config-source.mjs +54 -0
  27. package/dist/adapters/redocly-loader/redocly-config-source.mjs.map +1 -0
  28. package/dist/adapters/redocly-loader/redocly-schema-loader.cjs +179 -0
  29. package/dist/adapters/redocly-loader/redocly-schema-loader.cjs.map +1 -0
  30. package/dist/adapters/redocly-loader/redocly-schema-loader.mjs +177 -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 +148 -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 +142 -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 +210 -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 +207 -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-conflict-warnings.cjs +25 -0
  105. package/dist/api/discriminator-conflict-warnings.cjs.map +1 -0
  106. package/dist/api/discriminator-conflict-warnings.mjs +23 -0
  107. package/dist/api/discriminator-conflict-warnings.mjs.map +1 -0
  108. package/dist/api/discriminator-enum-names.cjs +19 -0
  109. package/dist/api/discriminator-enum-names.cjs.map +1 -0
  110. package/dist/api/discriminator-enum-names.mjs +17 -0
  111. package/dist/api/discriminator-enum-names.mjs.map +1 -0
  112. package/dist/api/discriminator-enum-parent.cjs +59 -0
  113. package/dist/api/discriminator-enum-parent.cjs.map +1 -0
  114. package/dist/api/discriminator-enum-parent.mjs +57 -0
  115. package/dist/api/discriminator-enum-parent.mjs.map +1 -0
  116. package/dist/api/discriminator-enum.cjs +69 -0
  117. package/dist/api/discriminator-enum.cjs.map +1 -0
  118. package/dist/api/discriminator-enum.mjs +66 -0
  119. package/dist/api/discriminator-enum.mjs.map +1 -0
  120. package/dist/api/discriminator-other-owners.cjs +67 -0
  121. package/dist/api/discriminator-other-owners.cjs.map +1 -0
  122. package/dist/api/discriminator-other-owners.mjs +64 -0
  123. package/dist/api/discriminator-other-owners.mjs.map +1 -0
  124. package/dist/api/discriminator-patch.cjs +88 -0
  125. package/dist/api/discriminator-patch.cjs.map +1 -0
  126. package/dist/api/discriminator-patch.mjs +82 -0
  127. package/dist/api/discriminator-patch.mjs.map +1 -0
  128. package/dist/api/discriminator-scan.cjs +153 -0
  129. package/dist/api/discriminator-scan.cjs.map +1 -0
  130. package/dist/api/discriminator-scan.mjs +150 -0
  131. package/dist/api/discriminator-scan.mjs.map +1 -0
  132. package/dist/api/document-declarations.cjs +28 -0
  133. package/dist/api/document-declarations.cjs.map +1 -0
  134. package/dist/api/document-declarations.mjs +26 -0
  135. package/dist/api/document-declarations.mjs.map +1 -0
  136. package/dist/api/document-refs.cjs +53 -0
  137. package/dist/api/document-refs.cjs.map +1 -0
  138. package/dist/api/document-refs.mjs +50 -0
  139. package/dist/api/document-refs.mjs.map +1 -0
  140. package/dist/api/document-run.cjs +122 -0
  141. package/dist/api/document-run.cjs.map +1 -0
  142. package/dist/api/document-run.mjs +116 -0
  143. package/dist/api/document-run.mjs.map +1 -0
  144. package/dist/api/enum-values-warnings.cjs +16 -0
  145. package/dist/api/enum-values-warnings.cjs.map +1 -0
  146. package/dist/api/enum-values-warnings.mjs +14 -0
  147. package/dist/api/enum-values-warnings.mjs.map +1 -0
  148. package/dist/api/footer-entry.cjs +18 -0
  149. package/dist/api/footer-entry.cjs.map +1 -0
  150. package/dist/api/footer-entry.mjs +15 -0
  151. package/dist/api/footer-entry.mjs.map +1 -0
  152. package/dist/api/footer-sink.cjs +53 -0
  153. package/dist/api/footer-sink.cjs.map +1 -0
  154. package/dist/api/footer-sink.mjs +51 -0
  155. package/dist/api/footer-sink.mjs.map +1 -0
  156. package/dist/api/legacy-callback-warning.cjs +25 -0
  157. package/dist/api/legacy-callback-warning.cjs.map +1 -0
  158. package/dist/api/legacy-callback-warning.mjs +22 -0
  159. package/dist/api/legacy-callback-warning.mjs.map +1 -0
  160. package/dist/api/legacy-ts-helpers.cjs +203 -0
  161. package/dist/api/legacy-ts-helpers.cjs.map +1 -0
  162. package/dist/api/legacy-ts-helpers.mjs +187 -0
  163. package/dist/api/legacy-ts-helpers.mjs.map +1 -0
  164. package/dist/api/legacy-utils.cjs +65 -0
  165. package/dist/api/legacy-utils.cjs.map +1 -0
  166. package/dist/api/legacy-utils.mjs +50 -0
  167. package/dist/api/legacy-utils.mjs.map +1 -0
  168. package/dist/api/openapi-ts.cjs +40 -0
  169. package/dist/api/openapi-ts.cjs.map +1 -0
  170. package/dist/api/openapi-ts.mjs +34 -0
  171. package/dist/api/openapi-ts.mjs.map +1 -0
  172. package/dist/api/path-template-warnings.cjs +21 -0
  173. package/dist/api/path-template-warnings.cjs.map +1 -0
  174. package/dist/api/path-template-warnings.mjs +19 -0
  175. package/dist/api/path-template-warnings.mjs.map +1 -0
  176. package/dist/api/schema-callbacks.cjs +140 -0
  177. package/dist/api/schema-callbacks.cjs.map +1 -0
  178. package/dist/api/schema-callbacks.mjs +136 -0
  179. package/dist/api/schema-callbacks.mjs.map +1 -0
  180. package/dist/api/string-to-ast.cjs +21 -0
  181. package/dist/api/string-to-ast.cjs.map +1 -0
  182. package/dist/api/string-to-ast.mjs +18 -0
  183. package/dist/api/string-to-ast.mjs.map +1 -0
  184. package/dist/api/transform-context.cjs +84 -0
  185. package/dist/api/transform-context.cjs.map +1 -0
  186. package/dist/api/transform-context.mjs +67 -0
  187. package/dist/api/transform-context.mjs.map +1 -0
  188. package/dist/api/transform-schema.cjs +80 -0
  189. package/dist/api/transform-schema.cjs.map +1 -0
  190. package/dist/api/transform-schema.mjs +75 -0
  191. package/dist/api/transform-schema.mjs.map +1 -0
  192. package/dist/api/type-helpers.cjs +85 -0
  193. package/dist/api/type-helpers.cjs.map +1 -0
  194. package/dist/api/type-helpers.mjs +66 -0
  195. package/dist/api/type-helpers.mjs.map +1 -0
  196. package/dist/api/unsupported-feature-warnings.cjs +22 -0
  197. package/dist/api/unsupported-feature-warnings.cjs.map +1 -0
  198. package/dist/api/unsupported-feature-warnings.mjs +20 -0
  199. package/dist/api/unsupported-feature-warnings.mjs.map +1 -0
  200. package/dist/application/print/comment-writer.cjs +95 -0
  201. package/dist/application/print/comment-writer.cjs.map +1 -0
  202. package/dist/application/print/comment-writer.mjs +93 -0
  203. package/dist/application/print/comment-writer.mjs.map +1 -0
  204. package/dist/application/print/declaration-printer.cjs +83 -0
  205. package/dist/application/print/declaration-printer.cjs.map +1 -0
  206. package/dist/application/print/declaration-printer.mjs +81 -0
  207. package/dist/application/print/declaration-printer.mjs.map +1 -0
  208. package/dist/application/print/literal-text.cjs +52 -0
  209. package/dist/application/print/literal-text.cjs.map +1 -0
  210. package/dist/application/print/literal-text.mjs +48 -0
  211. package/dist/application/print/literal-text.mjs.map +1 -0
  212. package/dist/application/print/print-nodes.cjs +38 -0
  213. package/dist/application/print/print-nodes.cjs.map +1 -0
  214. package/dist/application/print/print-nodes.mjs +36 -0
  215. package/dist/application/print/print-nodes.mjs.map +1 -0
  216. package/dist/application/print/print-options.cjs +6 -0
  217. package/dist/application/print/print-options.cjs.map +1 -0
  218. package/dist/application/print/print-options.mjs +4 -0
  219. package/dist/application/print/print-options.mjs.map +1 -0
  220. package/dist/application/print/text-writer.cjs +63 -0
  221. package/dist/application/print/text-writer.cjs.map +1 -0
  222. package/dist/application/print/text-writer.mjs +60 -0
  223. package/dist/application/print/text-writer.mjs.map +1 -0
  224. package/dist/application/print/type-printer.cjs +219 -0
  225. package/dist/application/print/type-printer.cjs.map +1 -0
  226. package/dist/application/print/type-printer.mjs +215 -0
  227. package/dist/application/print/type-printer.mjs.map +1 -0
  228. package/dist/application/stack-overflow.cjs +36 -0
  229. package/dist/application/stack-overflow.cjs.map +1 -0
  230. package/dist/application/stack-overflow.mjs +31 -0
  231. package/dist/application/stack-overflow.mjs.map +1 -0
  232. package/dist/application/transform/document/assignability.cjs +144 -0
  233. package/dist/application/transform/document/assignability.cjs.map +1 -0
  234. package/dist/application/transform/document/assignability.mjs +138 -0
  235. package/dist/application/transform/document/assignability.mjs.map +1 -0
  236. package/dist/application/transform/document/components.cjs +104 -0
  237. package/dist/application/transform/document/components.cjs.map +1 -0
  238. package/dist/application/transform/document/components.mjs +102 -0
  239. package/dist/application/transform/document/components.mjs.map +1 -0
  240. package/dist/application/transform/document/declared-types.cjs +66 -0
  241. package/dist/application/transform/document/declared-types.cjs.map +1 -0
  242. package/dist/application/transform/document/declared-types.mjs +63 -0
  243. package/dist/application/transform/document/declared-types.mjs.map +1 -0
  244. package/dist/application/transform/document/defs-root.cjs +18 -0
  245. package/dist/application/transform/document/defs-root.cjs.map +1 -0
  246. package/dist/application/transform/document/defs-root.mjs +16 -0
  247. package/dist/application/transform/document/defs-root.mjs.map +1 -0
  248. package/dist/application/transform/document/document-member.cjs +13 -0
  249. package/dist/application/transform/document/document-member.cjs.map +1 -0
  250. package/dist/application/transform/document/document-member.mjs +11 -0
  251. package/dist/application/transform/document/document-member.mjs.map +1 -0
  252. package/dist/application/transform/document/document.cjs +109 -0
  253. package/dist/application/transform/document/document.cjs.map +1 -0
  254. package/dist/application/transform/document/document.mjs +106 -0
  255. package/dist/application/transform/document/document.mjs.map +1 -0
  256. package/dist/application/transform/document/exploded-query.cjs +46 -0
  257. package/dist/application/transform/document/exploded-query.cjs.map +1 -0
  258. package/dist/application/transform/document/exploded-query.mjs +43 -0
  259. package/dist/application/transform/document/exploded-query.mjs.map +1 -0
  260. package/dist/application/transform/document/global-type-references.cjs +63 -0
  261. package/dist/application/transform/document/global-type-references.cjs.map +1 -0
  262. package/dist/application/transform/document/global-type-references.mjs +61 -0
  263. package/dist/application/transform/document/global-type-references.mjs.map +1 -0
  264. package/dist/application/transform/document/header.cjs +27 -0
  265. package/dist/application/transform/document/header.cjs.map +1 -0
  266. package/dist/application/transform/document/header.mjs +25 -0
  267. package/dist/application/transform/document/header.mjs.map +1 -0
  268. package/dist/application/transform/document/kept-deprecated.cjs +96 -0
  269. package/dist/application/transform/document/kept-deprecated.cjs.map +1 -0
  270. package/dist/application/transform/document/kept-deprecated.mjs +94 -0
  271. package/dist/application/transform/document/kept-deprecated.mjs.map +1 -0
  272. package/dist/application/transform/document/list-assignability.cjs +54 -0
  273. package/dist/application/transform/document/list-assignability.cjs.map +1 -0
  274. package/dist/application/transform/document/list-assignability.mjs +52 -0
  275. package/dist/application/transform/document/list-assignability.mjs.map +1 -0
  276. package/dist/application/transform/document/media-type.cjs +42 -0
  277. package/dist/application/transform/document/media-type.cjs.map +1 -0
  278. package/dist/application/transform/document/media-type.mjs +38 -0
  279. package/dist/application/transform/document/media-type.mjs.map +1 -0
  280. package/dist/application/transform/document/operation.cjs +45 -0
  281. package/dist/application/transform/document/operation.cjs.map +1 -0
  282. package/dist/application/transform/document/operation.mjs +43 -0
  283. package/dist/application/transform/document/operation.mjs.map +1 -0
  284. package/dist/application/transform/document/parameter.cjs +25 -0
  285. package/dist/application/transform/document/parameter.cjs.map +1 -0
  286. package/dist/application/transform/document/parameter.mjs +23 -0
  287. package/dist/application/transform/document/parameter.mjs.map +1 -0
  288. package/dist/application/transform/document/parameters.cjs +146 -0
  289. package/dist/application/transform/document/parameters.cjs.map +1 -0
  290. package/dist/application/transform/document/parameters.mjs +144 -0
  291. package/dist/application/transform/document/parameters.mjs.map +1 -0
  292. package/dist/application/transform/document/path-item.cjs +82 -0
  293. package/dist/application/transform/document/path-item.cjs.map +1 -0
  294. package/dist/application/transform/document/path-item.mjs +80 -0
  295. package/dist/application/transform/document/path-item.mjs.map +1 -0
  296. package/dist/application/transform/document/path-key-overlaps.cjs +107 -0
  297. package/dist/application/transform/document/path-key-overlaps.cjs.map +1 -0
  298. package/dist/application/transform/document/path-key-overlaps.mjs +105 -0
  299. package/dist/application/transform/document/path-key-overlaps.mjs.map +1 -0
  300. package/dist/application/transform/document/path-template-replace.cjs +48 -0
  301. package/dist/application/transform/document/path-template-replace.cjs.map +1 -0
  302. package/dist/application/transform/document/path-template-replace.mjs +45 -0
  303. package/dist/application/transform/document/path-template-replace.mjs.map +1 -0
  304. package/dist/application/transform/document/paths-enum.cjs +75 -0
  305. package/dist/application/transform/document/paths-enum.cjs.map +1 -0
  306. package/dist/application/transform/document/paths-enum.mjs +72 -0
  307. package/dist/application/transform/document/paths-enum.mjs.map +1 -0
  308. package/dist/application/transform/document/paths.cjs +153 -0
  309. package/dist/application/transform/document/paths.cjs.map +1 -0
  310. package/dist/application/transform/document/paths.mjs +149 -0
  311. package/dist/application/transform/document/paths.mjs.map +1 -0
  312. package/dist/application/transform/document/request-body.cjs +36 -0
  313. package/dist/application/transform/document/request-body.cjs.map +1 -0
  314. package/dist/application/transform/document/request-body.mjs +34 -0
  315. package/dist/application/transform/document/request-body.mjs.map +1 -0
  316. package/dist/application/transform/document/response.cjs +59 -0
  317. package/dist/application/transform/document/response.cjs.map +1 -0
  318. package/dist/application/transform/document/response.mjs +57 -0
  319. package/dist/application/transform/document/response.mjs.map +1 -0
  320. package/dist/application/transform/document/responses.cjs +23 -0
  321. package/dist/application/transform/document/responses.cjs.map +1 -0
  322. package/dist/application/transform/document/responses.mjs +21 -0
  323. package/dist/application/transform/document/responses.mjs.map +1 -0
  324. package/dist/application/transform/document/root-type-aliases.cjs +70 -0
  325. package/dist/application/transform/document/root-type-aliases.cjs.map +1 -0
  326. package/dist/application/transform/document/root-type-aliases.mjs +67 -0
  327. package/dist/application/transform/document/root-type-aliases.mjs.map +1 -0
  328. package/dist/application/transform/document/template-key-match.cjs +128 -0
  329. package/dist/application/transform/document/template-key-match.cjs.map +1 -0
  330. package/dist/application/transform/document/template-key-match.mjs +125 -0
  331. package/dist/application/transform/document/template-key-match.mjs.map +1 -0
  332. package/dist/application/transform/document/type-assignability.cjs +192 -0
  333. package/dist/application/transform/document/type-assignability.cjs.map +1 -0
  334. package/dist/application/transform/document/type-assignability.mjs +190 -0
  335. package/dist/application/transform/document/type-assignability.mjs.map +1 -0
  336. package/dist/application/transform/document/type-key.cjs +70 -0
  337. package/dist/application/transform/document/type-key.cjs.map +1 -0
  338. package/dist/application/transform/document/type-key.mjs +68 -0
  339. package/dist/application/transform/document/type-key.mjs.map +1 -0
  340. package/dist/application/transform/document/type-resolution.cjs +131 -0
  341. package/dist/application/transform/document/type-resolution.cjs.map +1 -0
  342. package/dist/application/transform/document/type-resolution.mjs +125 -0
  343. package/dist/application/transform/document/type-resolution.mjs.map +1 -0
  344. package/dist/application/transform/document/webhooks.cjs +19 -0
  345. package/dist/application/transform/document/webhooks.cjs.map +1 -0
  346. package/dist/application/transform/document/webhooks.mjs +17 -0
  347. package/dist/application/transform/document/webhooks.mjs.map +1 -0
  348. package/dist/application/transform/document-entries.cjs +17 -0
  349. package/dist/application/transform/document-entries.cjs.map +1 -0
  350. package/dist/application/transform/document-entries.mjs +14 -0
  351. package/dist/application/transform/document-entries.mjs.map +1 -0
  352. package/dist/application/transform/footer/document-footer.cjs +150 -0
  353. package/dist/application/transform/footer/document-footer.cjs.map +1 -0
  354. package/dist/application/transform/footer/document-footer.mjs +148 -0
  355. package/dist/application/transform/footer/document-footer.mjs.map +1 -0
  356. package/dist/application/transform/footer/enum-naming.cjs +138 -0
  357. package/dist/application/transform/footer/enum-naming.cjs.map +1 -0
  358. package/dist/application/transform/footer/enum-naming.mjs +131 -0
  359. package/dist/application/transform/footer/enum-naming.mjs.map +1 -0
  360. package/dist/application/transform/footer/enum-values-check.cjs +129 -0
  361. package/dist/application/transform/footer/enum-values-check.cjs.map +1 -0
  362. package/dist/application/transform/footer/enum-values-check.mjs +127 -0
  363. package/dist/application/transform/footer/enum-values-check.mjs.map +1 -0
  364. package/dist/application/transform/footer/evaluation.cjs +33 -0
  365. package/dist/application/transform/footer/evaluation.cjs.map +1 -0
  366. package/dist/application/transform/footer/evaluation.mjs +26 -0
  367. package/dist/application/transform/footer/evaluation.mjs.map +1 -0
  368. package/dist/application/transform/footer/shared-enum-names.cjs +60 -0
  369. package/dist/application/transform/footer/shared-enum-names.cjs.map +1 -0
  370. package/dist/application/transform/footer/shared-enum-names.mjs +57 -0
  371. package/dist/application/transform/footer/shared-enum-names.mjs.map +1 -0
  372. package/dist/application/transform/footer/type-evaluation.cjs +246 -0
  373. package/dist/application/transform/footer/type-evaluation.cjs.map +1 -0
  374. package/dist/application/transform/footer/type-evaluation.mjs +244 -0
  375. package/dist/application/transform/footer/type-evaluation.mjs.map +1 -0
  376. package/dist/application/transform/footer/type-rules.cjs +172 -0
  377. package/dist/application/transform/footer/type-rules.cjs.map +1 -0
  378. package/dist/application/transform/footer/type-rules.mjs +166 -0
  379. package/dist/application/transform/footer/type-rules.mjs.map +1 -0
  380. package/dist/application/transform/helper-types.cjs +68 -0
  381. package/dist/application/transform/helper-types.cjs.map +1 -0
  382. package/dist/application/transform/helper-types.mjs +65 -0
  383. package/dist/application/transform/helper-types.mjs.map +1 -0
  384. package/dist/application/transform/literal-type.cjs +36 -0
  385. package/dist/application/transform/literal-type.cjs.map +1 -0
  386. package/dist/application/transform/literal-type.mjs +34 -0
  387. package/dist/application/transform/literal-type.mjs.map +1 -0
  388. package/dist/application/transform/numbered-names.cjs +18 -0
  389. package/dist/application/transform/numbered-names.cjs.map +1 -0
  390. package/dist/application/transform/numbered-names.mjs +16 -0
  391. package/dist/application/transform/numbered-names.mjs.map +1 -0
  392. package/dist/application/transform/ref-pointer/generated-location.cjs +138 -0
  393. package/dist/application/transform/ref-pointer/generated-location.cjs.map +1 -0
  394. package/dist/application/transform/ref-pointer/generated-location.mjs +136 -0
  395. package/dist/application/transform/ref-pointer/generated-location.mjs.map +1 -0
  396. package/dist/application/transform/ref-pointer/generated-shape.cjs +171 -0
  397. package/dist/application/transform/ref-pointer/generated-shape.cjs.map +1 -0
  398. package/dist/application/transform/ref-pointer/generated-shape.mjs +162 -0
  399. package/dist/application/transform/ref-pointer/generated-shape.mjs.map +1 -0
  400. package/dist/application/transform/ref-pointer/inline-cycles.cjs +44 -0
  401. package/dist/application/transform/ref-pointer/inline-cycles.cjs.map +1 -0
  402. package/dist/application/transform/ref-pointer/inline-cycles.mjs +42 -0
  403. package/dist/application/transform/ref-pointer/inline-cycles.mjs.map +1 -0
  404. package/dist/application/transform/ref-pointer/original-index.cjs +62 -0
  405. package/dist/application/transform/ref-pointer/original-index.cjs.map +1 -0
  406. package/dist/application/transform/ref-pointer/original-index.mjs +60 -0
  407. package/dist/application/transform/ref-pointer/original-index.mjs.map +1 -0
  408. package/dist/application/transform/ref-pointer/pointer-type.cjs +60 -0
  409. package/dist/application/transform/ref-pointer/pointer-type.cjs.map +1 -0
  410. package/dist/application/transform/ref-pointer/pointer-type.mjs +57 -0
  411. package/dist/application/transform/ref-pointer/pointer-type.mjs.map +1 -0
  412. package/dist/application/transform/ref-pointer/pointer-walk.cjs +66 -0
  413. package/dist/application/transform/ref-pointer/pointer-walk.cjs.map +1 -0
  414. package/dist/application/transform/ref-pointer/pointer-walk.mjs +56 -0
  415. package/dist/application/transform/ref-pointer/pointer-walk.mjs.map +1 -0
  416. package/dist/application/transform/ref-pointer/typed-walk.cjs +124 -0
  417. package/dist/application/transform/ref-pointer/typed-walk.cjs.map +1 -0
  418. package/dist/application/transform/ref-pointer/typed-walk.mjs +122 -0
  419. package/dist/application/transform/ref-pointer/typed-walk.mjs.map +1 -0
  420. package/dist/application/transform/ref-type.cjs +62 -0
  421. package/dist/application/transform/ref-type.cjs.map +1 -0
  422. package/dist/application/transform/ref-type.mjs +55 -0
  423. package/dist/application/transform/ref-type.mjs.map +1 -0
  424. package/dist/application/transform/schema/access-flags.cjs +38 -0
  425. package/dist/application/transform/schema/access-flags.cjs.map +1 -0
  426. package/dist/application/transform/schema/access-flags.mjs +36 -0
  427. package/dist/application/transform/schema/access-flags.mjs.map +1 -0
  428. package/dist/application/transform/schema/array-type.cjs +136 -0
  429. package/dist/application/transform/schema/array-type.cjs.map +1 -0
  430. package/dist/application/transform/schema/array-type.mjs +134 -0
  431. package/dist/application/transform/schema/array-type.mjs.map +1 -0
  432. package/dist/application/transform/schema/composition-type.cjs +142 -0
  433. package/dist/application/transform/schema/composition-type.cjs.map +1 -0
  434. package/dist/application/transform/schema/composition-type.mjs +140 -0
  435. package/dist/application/transform/schema/composition-type.mjs.map +1 -0
  436. package/dist/application/transform/schema/core-type.cjs +86 -0
  437. package/dist/application/transform/schema/core-type.cjs.map +1 -0
  438. package/dist/application/transform/schema/core-type.mjs +84 -0
  439. package/dist/application/transform/schema/core-type.mjs.map +1 -0
  440. package/dist/application/transform/schema/discriminated-union.cjs +30 -0
  441. package/dist/application/transform/schema/discriminated-union.cjs.map +1 -0
  442. package/dist/application/transform/schema/discriminated-union.mjs +27 -0
  443. package/dist/application/transform/schema/discriminated-union.mjs.map +1 -0
  444. package/dist/application/transform/schema/discriminator-property.cjs +22 -0
  445. package/dist/application/transform/schema/discriminator-property.cjs.map +1 -0
  446. package/dist/application/transform/schema/discriminator-property.mjs +20 -0
  447. package/dist/application/transform/schema/discriminator-property.mjs.map +1 -0
  448. package/dist/application/transform/schema/enum-rule.cjs +163 -0
  449. package/dist/application/transform/schema/enum-rule.cjs.map +1 -0
  450. package/dist/application/transform/schema/enum-rule.mjs +160 -0
  451. package/dist/application/transform/schema/enum-rule.mjs.map +1 -0
  452. package/dist/application/transform/schema/inherited-discriminator.cjs +29 -0
  453. package/dist/application/transform/schema/inherited-discriminator.cjs.map +1 -0
  454. package/dist/application/transform/schema/inherited-discriminator.mjs +26 -0
  455. package/dist/application/transform/schema/inherited-discriminator.mjs.map +1 -0
  456. package/dist/application/transform/schema/object-type.cjs +186 -0
  457. package/dist/application/transform/schema/object-type.cjs.map +1 -0
  458. package/dist/application/transform/schema/object-type.mjs +182 -0
  459. package/dist/application/transform/schema/object-type.mjs.map +1 -0
  460. package/dist/application/transform/schema/presence-members.cjs +59 -0
  461. package/dist/application/transform/schema/presence-members.cjs.map +1 -0
  462. package/dist/application/transform/schema/presence-members.mjs +57 -0
  463. package/dist/application/transform/schema/presence-members.mjs.map +1 -0
  464. package/dist/application/transform/schema/required-variants.cjs +45 -0
  465. package/dist/application/transform/schema/required-variants.cjs.map +1 -0
  466. package/dist/application/transform/schema/required-variants.mjs +42 -0
  467. package/dist/application/transform/schema/required-variants.mjs.map +1 -0
  468. package/dist/application/transform/schema/schema-transform.cjs +72 -0
  469. package/dist/application/transform/schema/schema-transform.cjs.map +1 -0
  470. package/dist/application/transform/schema/schema-transform.mjs +68 -0
  471. package/dist/application/transform/schema/schema-transform.mjs.map +1 -0
  472. package/dist/application/transform/schema/unevaluated-properties.cjs +61 -0
  473. package/dist/application/transform/schema/unevaluated-properties.cjs.map +1 -0
  474. package/dist/application/transform/schema/unevaluated-properties.mjs +59 -0
  475. package/dist/application/transform/schema/unevaluated-properties.mjs.map +1 -0
  476. package/dist/application/transform/schema-comment.cjs +130 -0
  477. package/dist/application/transform/schema-comment.cjs.map +1 -0
  478. package/dist/application/transform/schema-comment.mjs +125 -0
  479. package/dist/application/transform/schema-comment.mjs.map +1 -0
  480. package/dist/application/transform/shared-types.cjs +8 -0
  481. package/dist/application/transform/shared-types.cjs.map +1 -0
  482. package/dist/application/transform/shared-types.mjs +6 -0
  483. package/dist/application/transform/shared-types.mjs.map +1 -0
  484. package/dist/application/transform/type-combinators.cjs +49 -0
  485. package/dist/application/transform/type-combinators.cjs.map +1 -0
  486. package/dist/application/transform/type-combinators.mjs +42 -0
  487. package/dist/application/transform/type-combinators.mjs.map +1 -0
  488. package/dist/cli/cli-arguments.cjs +145 -0
  489. package/dist/cli/cli-arguments.cjs.map +1 -0
  490. package/dist/cli/cli-arguments.mjs +137 -0
  491. package/dist/cli/cli-arguments.mjs.map +1 -0
  492. package/dist/cli/cli-errors.cjs +81 -0
  493. package/dist/cli/cli-errors.cjs.map +1 -0
  494. package/dist/cli/cli-errors.mjs +77 -0
  495. package/dist/cli/cli-errors.mjs.map +1 -0
  496. package/dist/cli/cli-output.cjs +42 -0
  497. package/dist/cli/cli-output.cjs.map +1 -0
  498. package/dist/cli/cli-output.mjs +35 -0
  499. package/dist/cli/cli-output.mjs.map +1 -0
  500. package/dist/cli/docs-links.cjs +6 -0
  501. package/dist/cli/docs-links.cjs.map +1 -0
  502. package/dist/cli/docs-links.mjs +4 -0
  503. package/dist/cli/docs-links.mjs.map +1 -0
  504. package/dist/cli/fix-option.cjs +19 -0
  505. package/dist/cli/fix-option.cjs.map +1 -0
  506. package/dist/cli/fix-option.mjs +16 -0
  507. package/dist/cli/fix-option.mjs.map +1 -0
  508. package/dist/cli/help-text.cjs +44 -0
  509. package/dist/cli/help-text.cjs.map +1 -0
  510. package/dist/cli/help-text.mjs +42 -0
  511. package/dist/cli/help-text.mjs.map +1 -0
  512. package/dist/cli/main.cjs +67 -0
  513. package/dist/cli/main.cjs.map +1 -0
  514. package/dist/cli/main.d.cts +2 -0
  515. package/dist/cli/main.d.mts +2 -0
  516. package/dist/cli/main.d.ts +2 -0
  517. package/dist/cli/main.mjs +59 -0
  518. package/dist/cli/main.mjs.map +1 -0
  519. package/dist/cli/redocly-apis.cjs +69 -0
  520. package/dist/cli/redocly-apis.cjs.map +1 -0
  521. package/dist/cli/redocly-apis.mjs +66 -0
  522. package/dist/cli/redocly-apis.mjs.map +1 -0
  523. package/dist/cli/ref-limits.cjs +14 -0
  524. package/dist/cli/ref-limits.cjs.map +1 -0
  525. package/dist/cli/ref-limits.mjs +12 -0
  526. package/dist/cli/ref-limits.mjs.map +1 -0
  527. package/dist/cli/run-cli.cjs +113 -0
  528. package/dist/cli/run-cli.cjs.map +1 -0
  529. package/dist/cli/run-cli.mjs +111 -0
  530. package/dist/cli/run-cli.mjs.map +1 -0
  531. package/dist/domain/assert-never.cjs +8 -0
  532. package/dist/domain/assert-never.cjs.map +1 -0
  533. package/dist/domain/assert-never.mjs +6 -0
  534. package/dist/domain/assert-never.mjs.map +1 -0
  535. package/dist/domain/errors.cjs +52 -0
  536. package/dist/domain/errors.cjs.map +1 -0
  537. package/dist/domain/errors.mjs +48 -0
  538. package/dist/domain/errors.mjs.map +1 -0
  539. package/dist/domain/ir/constructors.cjs +93 -0
  540. package/dist/domain/ir/constructors.cjs.map +1 -0
  541. package/dist/domain/ir/constructors.mjs +74 -0
  542. package/dist/domain/ir/constructors.mjs.map +1 -0
  543. package/dist/domain/ir/identifier-text.cjs +29 -0
  544. package/dist/domain/ir/identifier-text.cjs.map +1 -0
  545. package/dist/domain/ir/identifier-text.mjs +25 -0
  546. package/dist/domain/ir/identifier-text.mjs.map +1 -0
  547. package/dist/domain/ir/newer-identifier-ranges.cjs +109 -0
  548. package/dist/domain/ir/newer-identifier-ranges.cjs.map +1 -0
  549. package/dist/domain/ir/newer-identifier-ranges.mjs +106 -0
  550. package/dist/domain/ir/newer-identifier-ranges.mjs.map +1 -0
  551. package/dist/domain/ir/normalize.cjs +32 -0
  552. package/dist/domain/ir/normalize.cjs.map +1 -0
  553. package/dist/domain/ir/normalize.mjs +29 -0
  554. package/dist/domain/ir/normalize.mjs.map +1 -0
  555. package/dist/domain/ir/property-name.cjs +19 -0
  556. package/dist/domain/ir/property-name.cjs.map +1 -0
  557. package/dist/domain/ir/property-name.mjs +16 -0
  558. package/dist/domain/ir/property-name.mjs.map +1 -0
  559. package/dist/domain/ir/raw-text-escapes.cjs +25 -0
  560. package/dist/domain/ir/raw-text-escapes.cjs.map +1 -0
  561. package/dist/domain/ir/raw-text-escapes.mjs +22 -0
  562. package/dist/domain/ir/raw-text-escapes.mjs.map +1 -0
  563. package/dist/domain/openapi/admitted-values.cjs +75 -0
  564. package/dist/domain/openapi/admitted-values.cjs.map +1 -0
  565. package/dist/domain/openapi/admitted-values.mjs +72 -0
  566. package/dist/domain/openapi/admitted-values.mjs.map +1 -0
  567. package/dist/domain/openapi/alias-expansion.cjs +50 -0
  568. package/dist/domain/openapi/alias-expansion.cjs.map +1 -0
  569. package/dist/domain/openapi/alias-expansion.mjs +45 -0
  570. package/dist/domain/openapi/alias-expansion.mjs.map +1 -0
  571. package/dist/domain/openapi/binary-content.cjs +48 -0
  572. package/dist/domain/openapi/binary-content.cjs.map +1 -0
  573. package/dist/domain/openapi/binary-content.mjs +45 -0
  574. package/dist/domain/openapi/binary-content.mjs.map +1 -0
  575. package/dist/domain/openapi/components-object.cjs +29 -0
  576. package/dist/domain/openapi/components-object.cjs.map +1 -0
  577. package/dist/domain/openapi/components-object.mjs +24 -0
  578. package/dist/domain/openapi/components-object.mjs.map +1 -0
  579. package/dist/domain/openapi/discriminated-union.cjs +68 -0
  580. package/dist/domain/openapi/discriminated-union.cjs.map +1 -0
  581. package/dist/domain/openapi/discriminated-union.mjs +62 -0
  582. package/dist/domain/openapi/discriminated-union.mjs.map +1 -0
  583. package/dist/domain/openapi/discriminator-conflicts.cjs +143 -0
  584. package/dist/domain/openapi/discriminator-conflicts.cjs.map +1 -0
  585. package/dist/domain/openapi/discriminator-conflicts.mjs +141 -0
  586. package/dist/domain/openapi/discriminator-conflicts.mjs.map +1 -0
  587. package/dist/domain/openapi/json-pointer.cjs +31 -0
  588. package/dist/domain/openapi/json-pointer.cjs.map +1 -0
  589. package/dist/domain/openapi/json-pointer.mjs +27 -0
  590. package/dist/domain/openapi/json-pointer.mjs.map +1 -0
  591. package/dist/domain/openapi/media-type-object.cjs +14 -0
  592. package/dist/domain/openapi/media-type-object.cjs.map +1 -0
  593. package/dist/domain/openapi/media-type-object.mjs +11 -0
  594. package/dist/domain/openapi/media-type-object.mjs.map +1 -0
  595. package/dist/domain/openapi/parameter-object.cjs +13 -0
  596. package/dist/domain/openapi/parameter-object.cjs.map +1 -0
  597. package/dist/domain/openapi/parameter-object.mjs +10 -0
  598. package/dist/domain/openapi/parameter-object.mjs.map +1 -0
  599. package/dist/domain/openapi/path-item-object.cjs +35 -0
  600. package/dist/domain/openapi/path-item-object.cjs.map +1 -0
  601. package/dist/domain/openapi/path-item-object.mjs +30 -0
  602. package/dist/domain/openapi/path-item-object.mjs.map +1 -0
  603. package/dist/domain/openapi/path-templates.cjs +23 -0
  604. package/dist/domain/openapi/path-templates.cjs.map +1 -0
  605. package/dist/domain/openapi/path-templates.mjs +21 -0
  606. package/dist/domain/openapi/path-templates.mjs.map +1 -0
  607. package/dist/domain/openapi/unsupported-features.cjs +87 -0
  608. package/dist/domain/openapi/unsupported-features.cjs.map +1 -0
  609. package/dist/domain/openapi/unsupported-features.mjs +84 -0
  610. package/dist/domain/openapi/unsupported-features.mjs.map +1 -0
  611. package/dist/domain/output-fixes.cjs +101 -0
  612. package/dist/domain/output-fixes.cjs.map +1 -0
  613. package/dist/domain/output-fixes.mjs +94 -0
  614. package/dist/domain/output-fixes.mjs.map +1 -0
  615. package/dist/domain/warnings.cjs +15 -0
  616. package/dist/domain/warnings.cjs.map +1 -0
  617. package/dist/domain/warnings.mjs +12 -0
  618. package/dist/domain/warnings.mjs.map +1 -0
  619. package/dist/index.cjs +98 -0
  620. package/dist/index.cjs.map +1 -0
  621. package/dist/index.d.cts +841 -0
  622. package/dist/index.d.mts +841 -0
  623. package/dist/index.d.ts +841 -0
  624. package/dist/index.mjs +27 -0
  625. package/dist/index.mjs.map +1 -0
  626. package/dist/transform/components-object.cjs +15 -0
  627. package/dist/transform/components-object.cjs.map +1 -0
  628. package/dist/transform/components-object.mjs +11 -0
  629. package/dist/transform/components-object.mjs.map +1 -0
  630. package/dist/transform/header-object.cjs +12 -0
  631. package/dist/transform/header-object.cjs.map +1 -0
  632. package/dist/transform/header-object.mjs +10 -0
  633. package/dist/transform/header-object.mjs.map +1 -0
  634. package/dist/transform/media-type-object.cjs +12 -0
  635. package/dist/transform/media-type-object.cjs.map +1 -0
  636. package/dist/transform/media-type-object.mjs +10 -0
  637. package/dist/transform/media-type-object.mjs.map +1 -0
  638. package/dist/transform/operation-object.cjs +26 -0
  639. package/dist/transform/operation-object.cjs.map +1 -0
  640. package/dist/transform/operation-object.mjs +21 -0
  641. package/dist/transform/operation-object.mjs.map +1 -0
  642. package/dist/transform/parameter-object.cjs +12 -0
  643. package/dist/transform/parameter-object.cjs.map +1 -0
  644. package/dist/transform/parameter-object.mjs +10 -0
  645. package/dist/transform/parameter-object.mjs.map +1 -0
  646. package/dist/transform/path-item-object.cjs +12 -0
  647. package/dist/transform/path-item-object.cjs.map +1 -0
  648. package/dist/transform/path-item-object.mjs +10 -0
  649. package/dist/transform/path-item-object.mjs.map +1 -0
  650. package/dist/transform/paths-object.cjs +11 -0
  651. package/dist/transform/paths-object.cjs.map +1 -0
  652. package/dist/transform/paths-object.mjs +9 -0
  653. package/dist/transform/paths-object.mjs.map +1 -0
  654. package/dist/transform/request-body-object.cjs +12 -0
  655. package/dist/transform/request-body-object.cjs.map +1 -0
  656. package/dist/transform/request-body-object.mjs +10 -0
  657. package/dist/transform/request-body-object.mjs.map +1 -0
  658. package/dist/transform/response-object.cjs +12 -0
  659. package/dist/transform/response-object.cjs.map +1 -0
  660. package/dist/transform/response-object.mjs +10 -0
  661. package/dist/transform/response-object.mjs.map +1 -0
  662. package/dist/transform/responses-object.cjs +12 -0
  663. package/dist/transform/responses-object.cjs.map +1 -0
  664. package/dist/transform/responses-object.mjs +10 -0
  665. package/dist/transform/responses-object.mjs.map +1 -0
  666. package/dist/transform/schema-object.cjs +21 -0
  667. package/dist/transform/schema-object.cjs.map +1 -0
  668. package/dist/transform/schema-object.mjs +16 -0
  669. package/dist/transform/schema-object.mjs.map +1 -0
  670. package/package.json +115 -4
  671. package/src/adapters/node-file-system/node-file-system.ts +44 -0
  672. package/src/adapters/redocly-loader/alias-limit.ts +20 -0
  673. package/src/adapters/redocly-loader/allowed-hosts.ts +62 -0
  674. package/src/adapters/redocly-loader/bundled-ref-repair.ts +65 -0
  675. package/src/adapters/redocly-loader/malformed-refs.ts +61 -0
  676. package/src/adapters/redocly-loader/redocly-config-source.ts +78 -0
  677. package/src/adapters/redocly-loader/redocly-schema-loader.ts +262 -0
  678. package/src/adapters/redocly-loader/ref-access.ts +146 -0
  679. package/src/adapters/redocly-loader/ref-holders.ts +43 -0
  680. package/src/adapters/redocly-loader/remote-fetch.ts +104 -0
  681. package/src/adapters/redocly-loader/schema-load-errors.ts +124 -0
  682. package/src/adapters/redocly-loader/schema-source.ts +151 -0
  683. package/src/adapters/redocly-loader/unsupported-keys.ts +102 -0
  684. package/src/adapters/terminal-logger/terminal-logger.ts +98 -0
  685. package/src/adapters/type-ast-bridge/footer-nodes.ts +38 -0
  686. package/src/adapters/type-ast-bridge/ir-declarations-to-typescript.ts +100 -0
  687. package/src/adapters/type-ast-bridge/ir-to-typescript.ts +223 -0
  688. package/src/adapters/type-ast-bridge/lazy-node.ts +24 -0
  689. package/src/adapters/type-ast-bridge/load-typescript.ts +84 -0
  690. package/src/adapters/type-ast-bridge/print-typescript.ts +33 -0
  691. package/src/adapters/type-ast-bridge/typescript-raw-text.ts +49 -0
  692. package/src/adapters/type-ast-bridge/typescript-to-ir.ts +294 -0
  693. package/src/adapters/type-ast-bridge/typescript-types.ts +8 -0
  694. package/src/api/ast-to-string.ts +59 -0
  695. package/src/api/comment-header.ts +7 -0
  696. package/src/api/default-ports.ts +44 -0
  697. package/src/api/discriminator-conflict-warnings.ts +43 -0
  698. package/src/api/discriminator-enum-names.ts +26 -0
  699. package/src/api/discriminator-enum-parent.ts +129 -0
  700. package/src/api/discriminator-enum.ts +115 -0
  701. package/src/api/discriminator-other-owners.ts +97 -0
  702. package/src/api/discriminator-patch.ts +147 -0
  703. package/src/api/discriminator-scan.ts +260 -0
  704. package/src/api/document-declarations.ts +41 -0
  705. package/src/api/document-refs.ts +71 -0
  706. package/src/api/document-run.ts +177 -0
  707. package/src/api/enum-values-warnings.ts +21 -0
  708. package/src/api/footer-entry.ts +23 -0
  709. package/src/api/footer-sink.ts +67 -0
  710. package/src/api/legacy-callback-warning.ts +29 -0
  711. package/src/api/legacy-ts-helpers.ts +311 -0
  712. package/src/api/legacy-utils.ts +118 -0
  713. package/src/api/openapi-ts.ts +62 -0
  714. package/src/api/path-template-warnings.ts +27 -0
  715. package/src/api/schema-callbacks.ts +211 -0
  716. package/src/api/string-to-ast.ts +27 -0
  717. package/src/api/transform-context.ts +93 -0
  718. package/src/api/transform-schema.ts +123 -0
  719. package/src/api/type-helpers.ts +130 -0
  720. package/src/api/unsupported-feature-warnings.ts +33 -0
  721. package/src/application/ports/file-system.ts +12 -0
  722. package/src/application/ports/logger.ts +16 -0
  723. package/src/application/ports/redocly-config-source.ts +20 -0
  724. package/src/application/ports/schema-loader.ts +32 -0
  725. package/src/application/print/comment-writer.ts +91 -0
  726. package/src/application/print/declaration-printer.ts +100 -0
  727. package/src/application/print/literal-text.ts +62 -0
  728. package/src/application/print/print-nodes.ts +62 -0
  729. package/src/application/print/print-options.ts +11 -0
  730. package/src/application/print/text-writer.ts +83 -0
  731. package/src/application/print/type-printer.ts +287 -0
  732. package/src/application/stack-overflow.ts +54 -0
  733. package/src/application/transform/document/assignability.ts +203 -0
  734. package/src/application/transform/document/components.ts +189 -0
  735. package/src/application/transform/document/declared-types.ts +93 -0
  736. package/src/application/transform/document/defs-root.ts +25 -0
  737. package/src/application/transform/document/document-member.ts +20 -0
  738. package/src/application/transform/document/document.ts +215 -0
  739. package/src/application/transform/document/exploded-query.ts +91 -0
  740. package/src/application/transform/document/global-type-references.ts +78 -0
  741. package/src/application/transform/document/header.ts +34 -0
  742. package/src/application/transform/document/kept-deprecated.ts +135 -0
  743. package/src/application/transform/document/list-assignability.ts +87 -0
  744. package/src/application/transform/document/media-type.ts +78 -0
  745. package/src/application/transform/document/operation.ts +64 -0
  746. package/src/application/transform/document/parameter.ts +45 -0
  747. package/src/application/transform/document/parameters.ts +265 -0
  748. package/src/application/transform/document/path-item.ts +168 -0
  749. package/src/application/transform/document/path-key-overlaps.ts +201 -0
  750. package/src/application/transform/document/path-template-replace.ts +90 -0
  751. package/src/application/transform/document/paths-enum.ts +127 -0
  752. package/src/application/transform/document/paths.ts +273 -0
  753. package/src/application/transform/document/request-body.ts +50 -0
  754. package/src/application/transform/document/response.ts +109 -0
  755. package/src/application/transform/document/responses.ts +29 -0
  756. package/src/application/transform/document/root-type-aliases.ts +107 -0
  757. package/src/application/transform/document/template-key-match.ts +183 -0
  758. package/src/application/transform/document/type-assignability.ts +268 -0
  759. package/src/application/transform/document/type-key.ts +80 -0
  760. package/src/application/transform/document/type-resolution.ts +163 -0
  761. package/src/application/transform/document/webhooks.ts +22 -0
  762. package/src/application/transform/document-entries.ts +28 -0
  763. package/src/application/transform/footer/document-footer.ts +212 -0
  764. package/src/application/transform/footer/enum-naming.ts +210 -0
  765. package/src/application/transform/footer/enum-values-check.ts +171 -0
  766. package/src/application/transform/footer/evaluation.ts +47 -0
  767. package/src/application/transform/footer/shared-enum-names.ts +86 -0
  768. package/src/application/transform/footer/type-evaluation.ts +294 -0
  769. package/src/application/transform/footer/type-rules.ts +269 -0
  770. package/src/application/transform/helper-types.ts +92 -0
  771. package/src/application/transform/literal-type.ts +54 -0
  772. package/src/application/transform/numbered-names.ts +20 -0
  773. package/src/application/transform/ref-pointer/generated-location.ts +211 -0
  774. package/src/application/transform/ref-pointer/generated-shape.ts +275 -0
  775. package/src/application/transform/ref-pointer/inline-cycles.ts +56 -0
  776. package/src/application/transform/ref-pointer/original-index.ts +95 -0
  777. package/src/application/transform/ref-pointer/pointer-type.ts +92 -0
  778. package/src/application/transform/ref-pointer/pointer-walk.ts +96 -0
  779. package/src/application/transform/ref-pointer/typed-walk.ts +192 -0
  780. package/src/application/transform/ref-type.ts +102 -0
  781. package/src/application/transform/schema/access-flags.ts +63 -0
  782. package/src/application/transform/schema/array-type.ts +213 -0
  783. package/src/application/transform/schema/composition-type.ts +255 -0
  784. package/src/application/transform/schema/core-type.ts +119 -0
  785. package/src/application/transform/schema/discriminated-union.ts +58 -0
  786. package/src/application/transform/schema/discriminator-property.ts +33 -0
  787. package/src/application/transform/schema/enum-rule.ts +280 -0
  788. package/src/application/transform/schema/inherited-discriminator.ts +54 -0
  789. package/src/application/transform/schema/object-type.ts +289 -0
  790. package/src/application/transform/schema/presence-members.ts +96 -0
  791. package/src/application/transform/schema/required-variants.ts +88 -0
  792. package/src/application/transform/schema/schema-context.ts +136 -0
  793. package/src/application/transform/schema/schema-rule.ts +29 -0
  794. package/src/application/transform/schema/schema-transform.ts +99 -0
  795. package/src/application/transform/schema/unevaluated-properties.ts +105 -0
  796. package/src/application/transform/schema-comment.ts +196 -0
  797. package/src/application/transform/shared-types.ts +9 -0
  798. package/src/application/transform/transform-context.ts +51 -0
  799. package/src/application/transform/type-combinators.ts +57 -0
  800. package/src/cli/cli-arguments.ts +208 -0
  801. package/src/cli/cli-dependencies.ts +47 -0
  802. package/src/cli/cli-errors.ts +127 -0
  803. package/src/cli/cli-output.ts +67 -0
  804. package/src/cli/docs-links.ts +6 -0
  805. package/src/cli/fix-option.ts +29 -0
  806. package/src/cli/help-text.ts +52 -0
  807. package/src/cli/main.ts +73 -0
  808. package/src/cli/redocly-apis.ts +95 -0
  809. package/src/cli/ref-limits.ts +16 -0
  810. package/src/cli/run-cli.ts +131 -0
  811. package/src/domain/assert-never.ts +8 -0
  812. package/src/domain/errors.ts +76 -0
  813. package/src/domain/ir/constructors.ts +142 -0
  814. package/src/domain/ir/identifier-text.ts +49 -0
  815. package/src/domain/ir/newer-identifier-ranges.ts +109 -0
  816. package/src/domain/ir/nodes.ts +225 -0
  817. package/src/domain/ir/normalize.ts +51 -0
  818. package/src/domain/ir/property-name.ts +28 -0
  819. package/src/domain/ir/raw-text-escapes.ts +37 -0
  820. package/src/domain/openapi/admitted-values.ts +113 -0
  821. package/src/domain/openapi/alias-expansion.ts +72 -0
  822. package/src/domain/openapi/binary-content.ts +74 -0
  823. package/src/domain/openapi/components-object.ts +52 -0
  824. package/src/domain/openapi/discriminated-union.ts +109 -0
  825. package/src/domain/openapi/discriminator-conflicts.ts +251 -0
  826. package/src/domain/openapi/document-object.ts +12 -0
  827. package/src/domain/openapi/header-object.ts +9 -0
  828. package/src/domain/openapi/json-pointer.ts +46 -0
  829. package/src/domain/openapi/media-type-object.ts +26 -0
  830. package/src/domain/openapi/operation-object.ts +13 -0
  831. package/src/domain/openapi/parameter-object.ts +34 -0
  832. package/src/domain/openapi/path-item-object.ts +70 -0
  833. package/src/domain/openapi/path-templates.ts +31 -0
  834. package/src/domain/openapi/request-body-object.ts +7 -0
  835. package/src/domain/openapi/response-object.ts +14 -0
  836. package/src/domain/openapi/schema-object.ts +61 -0
  837. package/src/domain/openapi/unsupported-features.ts +139 -0
  838. package/src/domain/output-fixes.ts +136 -0
  839. package/src/domain/warnings.ts +20 -0
  840. package/src/index.ts +67 -0
  841. package/src/transform/components-object.ts +27 -0
  842. package/src/transform/header-object.ts +19 -0
  843. package/src/transform/media-type-object.ts +19 -0
  844. package/src/transform/operation-object.ts +36 -0
  845. package/src/transform/parameter-object.ts +19 -0
  846. package/src/transform/parameters-array.ts +19 -0
  847. package/src/transform/path-item-object.ts +22 -0
  848. package/src/transform/paths-enum.ts +8 -0
  849. package/src/transform/paths-object.ts +15 -0
  850. package/src/transform/request-body-object.ts +19 -0
  851. package/src/transform/response-object.ts +19 -0
  852. package/src/transform/responses-object.ts +19 -0
  853. package/src/transform/schema-object.ts +36 -0
  854. package/src/transform/webhooks-object.ts +15 -0
  855. package/src/types/generator-options.ts +278 -0
  856. package/src/types/openapi-common.ts +100 -0
  857. package/src/types/openapi-document.ts +196 -0
  858. package/src/types/openapi-path-item.ts +130 -0
  859. package/src/types/openapi-request.ts +209 -0
  860. package/src/types/openapi-response.ts +81 -0
  861. package/src/types/openapi-schema.ts +169 -0
  862. package/src/types/openapi-security.ts +116 -0
  863. package/src/types.ts +12 -0
@@ -0,0 +1,63 @@
1
+ 'use strict';
2
+
3
+ const LINE_FEED = 10;
4
+ const CARRIAGE_RETURN = 13;
5
+ const LINE_SEPARATOR = 8232;
6
+ const PARAGRAPH_SEPARATOR = 8233;
7
+ function isLineBreak(code) {
8
+ return code === LINE_FEED || code === CARRIAGE_RETURN || code === LINE_SEPARATOR || code === PARAGRAPH_SEPARATOR;
9
+ }
10
+ class TextWriter {
11
+ #options;
12
+ #output = "";
13
+ #indent = 0;
14
+ #isAtLineStart = true;
15
+ constructor(options) {
16
+ this.#options = options;
17
+ }
18
+ get indent() {
19
+ return this.#indent;
20
+ }
21
+ get options() {
22
+ return this.#options;
23
+ }
24
+ get text() {
25
+ return this.#output;
26
+ }
27
+ increaseIndent() {
28
+ this.#indent++;
29
+ }
30
+ decreaseIndent() {
31
+ this.#indent--;
32
+ }
33
+ /** Write text, indenting it first when it starts a line. */
34
+ write(text) {
35
+ if (text.length === 0) {
36
+ return;
37
+ }
38
+ const prefix = this.#isAtLineStart ? this.indentString(this.#indent) : "";
39
+ this.rawWrite(prefix + text);
40
+ }
41
+ /** Write text exactly as given. */
42
+ rawWrite(text) {
43
+ this.#output += text;
44
+ this.#updateLineStart(text);
45
+ }
46
+ /** End the current line; does nothing when nothing has been written on it yet. */
47
+ writeLine() {
48
+ if (!this.#isAtLineStart) {
49
+ this.rawWrite(this.#options.newLine);
50
+ }
51
+ }
52
+ indentString(level) {
53
+ return " ".repeat(level * this.#options.indentSize);
54
+ }
55
+ // Like TypeScript: any write leaves the writer mid-line unless the text ends with a line break.
56
+ #updateLineStart(text) {
57
+ this.#isAtLineStart = text.length > 0 && isLineBreak(text.charCodeAt(text.length - 1));
58
+ }
59
+ }
60
+
61
+ exports.TextWriter = TextWriter;
62
+ exports.isLineBreak = isLineBreak;
63
+ //# sourceMappingURL=text-writer.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-writer.cjs","sources":["../../../src/application/print/text-writer.ts"],"sourcesContent":["import type { PrintOptions } from \"./print-options.js\";\n\nconst LINE_FEED = 0x0a;\nconst CARRIAGE_RETURN = 0x0d;\nconst LINE_SEPARATOR = 0x2028;\nconst PARAGRAPH_SEPARATOR = 0x2029;\n\n/** Line breaks as the TypeScript scanner defines them (`isLineBreak`). */\nexport function isLineBreak(code: number): boolean {\n return (\n code === LINE_FEED ||\n code === CARRIAGE_RETURN ||\n code === LINE_SEPARATOR ||\n code === PARAGRAPH_SEPARATOR\n );\n}\n\n/**\n * Output buffer with indentation, modeled on the TypeScript printer's text writer: `write` indents\n * text that starts a line, `rawWrite` never does, and `writeLine` does nothing at the start of a\n * line. Matching these rules is what makes comment re-indentation byte-identical to the original.\n */\nexport class TextWriter {\n readonly #options: PrintOptions;\n #output = \"\";\n #indent = 0;\n #isAtLineStart = true;\n\n constructor(options: PrintOptions) {\n this.#options = options;\n }\n\n get indent(): number {\n return this.#indent;\n }\n\n get options(): PrintOptions {\n return this.#options;\n }\n\n get text(): string {\n return this.#output;\n }\n\n increaseIndent(): void {\n this.#indent++;\n }\n\n decreaseIndent(): void {\n this.#indent--;\n }\n\n /** Write text, indenting it first when it starts a line. */\n write(text: string): void {\n if (text.length === 0) {\n return;\n }\n const prefix = this.#isAtLineStart ? this.indentString(this.#indent) : \"\";\n this.rawWrite(prefix + text);\n }\n\n /** Write text exactly as given. */\n rawWrite(text: string): void {\n this.#output += text;\n this.#updateLineStart(text);\n }\n\n /** End the current line; does nothing when nothing has been written on it yet. */\n writeLine(): void {\n if (!this.#isAtLineStart) {\n this.rawWrite(this.#options.newLine);\n }\n }\n\n indentString(level: number): string {\n return \" \".repeat(level * this.#options.indentSize);\n }\n\n // Like TypeScript: any write leaves the writer mid-line unless the text ends with a line break.\n #updateLineStart(text: string): void {\n this.#isAtLineStart = text.length > 0 && isLineBreak(text.charCodeAt(text.length - 1));\n }\n}\n"],"names":[],"mappings":";;AAEA,MAAM,SAAA,GAAY,EAAA;AAClB,MAAM,eAAA,GAAkB,EAAA;AACxB,MAAM,cAAA,GAAiB,IAAA;AACvB,MAAM,mBAAA,GAAsB,IAAA;AAGrB,SAAS,YAAY,IAAA,EAAuB;AACjD,EAAA,OACE,SAAS,SAAA,IACT,IAAA,KAAS,eAAA,IACT,IAAA,KAAS,kBACT,IAAA,KAAS,mBAAA;AAEb;AAOO,MAAM,UAAA,CAAW;AAAA,EACb,QAAA;AAAA,EACT,OAAA,GAAU,EAAA;AAAA,EACV,OAAA,GAAU,CAAA;AAAA,EACV,cAAA,GAAiB,IAAA;AAAA,EAEjB,YAAY,OAAA,EAAuB;AACjC,IAAA,IAAA,CAAK,QAAA,GAAW,OAAA;AAAA,EAClB;AAAA,EAEA,IAAI,MAAA,GAAiB;AACnB,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA,EAEA,IAAI,OAAA,GAAwB;AAC1B,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EACd;AAAA,EAEA,IAAI,IAAA,GAAe;AACjB,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA,EAEA,cAAA,GAAuB;AACrB,IAAA,IAAA,CAAK,OAAA,EAAA;AAAA,EACP;AAAA,EAEA,cAAA,GAAuB;AACrB,IAAA,IAAA,CAAK,OAAA,EAAA;AAAA,EACP;AAAA;AAAA,EAGA,MAAM,IAAA,EAAoB;AACxB,IAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,MAAA;AAAA,IACF;AACA,IAAA,MAAM,SAAS,IAAA,CAAK,cAAA,GAAiB,KAAK,YAAA,CAAa,IAAA,CAAK,OAAO,CAAA,GAAI,EAAA;AACvE,IAAA,IAAA,CAAK,QAAA,CAAS,SAAS,IAAI,CAAA;AAAA,EAC7B;AAAA;AAAA,EAGA,SAAS,IAAA,EAAoB;AAC3B,IAAA,IAAA,CAAK,OAAA,IAAW,IAAA;AAChB,IAAA,IAAA,CAAK,iBAAiB,IAAI,CAAA;AAAA,EAC5B;AAAA;AAAA,EAGA,SAAA,GAAkB;AAChB,IAAA,IAAI,CAAC,KAAK,cAAA,EAAgB;AACxB,MAAA,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,QAAA,CAAS,OAAO,CAAA;AAAA,IACrC;AAAA,EACF;AAAA,EAEA,aAAa,KAAA,EAAuB;AAClC,IAAA,OAAO,GAAA,CAAI,MAAA,CAAO,KAAA,GAAQ,IAAA,CAAK,SAAS,UAAU,CAAA;AAAA,EACpD;AAAA;AAAA,EAGA,iBAAiB,IAAA,EAAoB;AACnC,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAA,CAAK,MAAA,GAAS,CAAA,IAAK,WAAA,CAAY,KAAK,UAAA,CAAW,IAAA,CAAK,MAAA,GAAS,CAAC,CAAC,CAAA;AAAA,EACvF;AACF;;;"}
@@ -0,0 +1,60 @@
1
+ const LINE_FEED = 10;
2
+ const CARRIAGE_RETURN = 13;
3
+ const LINE_SEPARATOR = 8232;
4
+ const PARAGRAPH_SEPARATOR = 8233;
5
+ function isLineBreak(code) {
6
+ return code === LINE_FEED || code === CARRIAGE_RETURN || code === LINE_SEPARATOR || code === PARAGRAPH_SEPARATOR;
7
+ }
8
+ class TextWriter {
9
+ #options;
10
+ #output = "";
11
+ #indent = 0;
12
+ #isAtLineStart = true;
13
+ constructor(options) {
14
+ this.#options = options;
15
+ }
16
+ get indent() {
17
+ return this.#indent;
18
+ }
19
+ get options() {
20
+ return this.#options;
21
+ }
22
+ get text() {
23
+ return this.#output;
24
+ }
25
+ increaseIndent() {
26
+ this.#indent++;
27
+ }
28
+ decreaseIndent() {
29
+ this.#indent--;
30
+ }
31
+ /** Write text, indenting it first when it starts a line. */
32
+ write(text) {
33
+ if (text.length === 0) {
34
+ return;
35
+ }
36
+ const prefix = this.#isAtLineStart ? this.indentString(this.#indent) : "";
37
+ this.rawWrite(prefix + text);
38
+ }
39
+ /** Write text exactly as given. */
40
+ rawWrite(text) {
41
+ this.#output += text;
42
+ this.#updateLineStart(text);
43
+ }
44
+ /** End the current line; does nothing when nothing has been written on it yet. */
45
+ writeLine() {
46
+ if (!this.#isAtLineStart) {
47
+ this.rawWrite(this.#options.newLine);
48
+ }
49
+ }
50
+ indentString(level) {
51
+ return " ".repeat(level * this.#options.indentSize);
52
+ }
53
+ // Like TypeScript: any write leaves the writer mid-line unless the text ends with a line break.
54
+ #updateLineStart(text) {
55
+ this.#isAtLineStart = text.length > 0 && isLineBreak(text.charCodeAt(text.length - 1));
56
+ }
57
+ }
58
+
59
+ export { TextWriter, isLineBreak };
60
+ //# sourceMappingURL=text-writer.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-writer.mjs","sources":["../../../src/application/print/text-writer.ts"],"sourcesContent":["import type { PrintOptions } from \"./print-options.js\";\n\nconst LINE_FEED = 0x0a;\nconst CARRIAGE_RETURN = 0x0d;\nconst LINE_SEPARATOR = 0x2028;\nconst PARAGRAPH_SEPARATOR = 0x2029;\n\n/** Line breaks as the TypeScript scanner defines them (`isLineBreak`). */\nexport function isLineBreak(code: number): boolean {\n return (\n code === LINE_FEED ||\n code === CARRIAGE_RETURN ||\n code === LINE_SEPARATOR ||\n code === PARAGRAPH_SEPARATOR\n );\n}\n\n/**\n * Output buffer with indentation, modeled on the TypeScript printer's text writer: `write` indents\n * text that starts a line, `rawWrite` never does, and `writeLine` does nothing at the start of a\n * line. Matching these rules is what makes comment re-indentation byte-identical to the original.\n */\nexport class TextWriter {\n readonly #options: PrintOptions;\n #output = \"\";\n #indent = 0;\n #isAtLineStart = true;\n\n constructor(options: PrintOptions) {\n this.#options = options;\n }\n\n get indent(): number {\n return this.#indent;\n }\n\n get options(): PrintOptions {\n return this.#options;\n }\n\n get text(): string {\n return this.#output;\n }\n\n increaseIndent(): void {\n this.#indent++;\n }\n\n decreaseIndent(): void {\n this.#indent--;\n }\n\n /** Write text, indenting it first when it starts a line. */\n write(text: string): void {\n if (text.length === 0) {\n return;\n }\n const prefix = this.#isAtLineStart ? this.indentString(this.#indent) : \"\";\n this.rawWrite(prefix + text);\n }\n\n /** Write text exactly as given. */\n rawWrite(text: string): void {\n this.#output += text;\n this.#updateLineStart(text);\n }\n\n /** End the current line; does nothing when nothing has been written on it yet. */\n writeLine(): void {\n if (!this.#isAtLineStart) {\n this.rawWrite(this.#options.newLine);\n }\n }\n\n indentString(level: number): string {\n return \" \".repeat(level * this.#options.indentSize);\n }\n\n // Like TypeScript: any write leaves the writer mid-line unless the text ends with a line break.\n #updateLineStart(text: string): void {\n this.#isAtLineStart = text.length > 0 && isLineBreak(text.charCodeAt(text.length - 1));\n }\n}\n"],"names":[],"mappings":"AAEA,MAAM,SAAA,GAAY,EAAA;AAClB,MAAM,eAAA,GAAkB,EAAA;AACxB,MAAM,cAAA,GAAiB,IAAA;AACvB,MAAM,mBAAA,GAAsB,IAAA;AAGrB,SAAS,YAAY,IAAA,EAAuB;AACjD,EAAA,OACE,SAAS,SAAA,IACT,IAAA,KAAS,eAAA,IACT,IAAA,KAAS,kBACT,IAAA,KAAS,mBAAA;AAEb;AAOO,MAAM,UAAA,CAAW;AAAA,EACb,QAAA;AAAA,EACT,OAAA,GAAU,EAAA;AAAA,EACV,OAAA,GAAU,CAAA;AAAA,EACV,cAAA,GAAiB,IAAA;AAAA,EAEjB,YAAY,OAAA,EAAuB;AACjC,IAAA,IAAA,CAAK,QAAA,GAAW,OAAA;AAAA,EAClB;AAAA,EAEA,IAAI,MAAA,GAAiB;AACnB,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA,EAEA,IAAI,OAAA,GAAwB;AAC1B,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EACd;AAAA,EAEA,IAAI,IAAA,GAAe;AACjB,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA,EAEA,cAAA,GAAuB;AACrB,IAAA,IAAA,CAAK,OAAA,EAAA;AAAA,EACP;AAAA,EAEA,cAAA,GAAuB;AACrB,IAAA,IAAA,CAAK,OAAA,EAAA;AAAA,EACP;AAAA;AAAA,EAGA,MAAM,IAAA,EAAoB;AACxB,IAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,MAAA;AAAA,IACF;AACA,IAAA,MAAM,SAAS,IAAA,CAAK,cAAA,GAAiB,KAAK,YAAA,CAAa,IAAA,CAAK,OAAO,CAAA,GAAI,EAAA;AACvE,IAAA,IAAA,CAAK,QAAA,CAAS,SAAS,IAAI,CAAA;AAAA,EAC7B;AAAA;AAAA,EAGA,SAAS,IAAA,EAAoB;AAC3B,IAAA,IAAA,CAAK,OAAA,IAAW,IAAA;AAChB,IAAA,IAAA,CAAK,iBAAiB,IAAI,CAAA;AAAA,EAC5B;AAAA;AAAA,EAGA,SAAA,GAAkB;AAChB,IAAA,IAAI,CAAC,KAAK,cAAA,EAAgB;AACxB,MAAA,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,QAAA,CAAS,OAAO,CAAA;AAAA,IACrC;AAAA,EACF;AAAA,EAEA,aAAa,KAAA,EAAuB;AAClC,IAAA,OAAO,GAAA,CAAI,MAAA,CAAO,KAAA,GAAQ,IAAA,CAAK,SAAS,UAAU,CAAA;AAAA,EACpD;AAAA;AAAA,EAGA,iBAAiB,IAAA,EAAoB;AACnC,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAA,CAAK,MAAA,GAAS,CAAA,IAAK,WAAA,CAAY,KAAK,UAAA,CAAW,IAAA,CAAK,MAAA,GAAS,CAAC,CAAC,CAAA;AAAA,EACvF;AACF;;"}
@@ -0,0 +1,219 @@
1
+ 'use strict';
2
+
3
+ const assertNever = require('../../domain/assert-never.cjs');
4
+ const commentWriter = require('./comment-writer.cjs');
5
+ const literalText = require('./literal-text.cjs');
6
+
7
+ const isUnionOrIntersection = (type) => type.kind === "union" || type.kind === "intersection";
8
+ const needsParensAsConstituent = isUnionOrIntersection;
9
+ const needsParensAsPostfixOperand = (type) => type.kind === "readonly" || isUnionOrIntersection(type);
10
+ const needsParensAsReadonlyOperand = needsParensAsPostfixOperand;
11
+ function writeTypeIn(writer, type, needsParens) {
12
+ if (!needsParens(type)) {
13
+ writeType(writer, type);
14
+ return;
15
+ }
16
+ writer.write("(");
17
+ writeType(writer, type);
18
+ writer.write(")");
19
+ }
20
+ function writeInlineList(writer, items, separator, writeItem) {
21
+ items.forEach((item, index) => {
22
+ if (index > 0) {
23
+ writer.write(separator);
24
+ }
25
+ writeItem(item);
26
+ });
27
+ }
28
+ function writeMultiLineList(writer, items, format, writeItem) {
29
+ if (items.length === 0) {
30
+ if (format.isLineBreakWhenEmpty) {
31
+ writer.writeLine();
32
+ }
33
+ return;
34
+ }
35
+ writer.writeLine();
36
+ writer.increaseIndent();
37
+ items.forEach((item, index) => {
38
+ if (index > 0) {
39
+ writer.write(format.delimiter);
40
+ writer.writeLine();
41
+ }
42
+ writeItem(item);
43
+ });
44
+ writer.decreaseIndent();
45
+ writer.writeLine();
46
+ }
47
+ function writePropertyName(writer, name) {
48
+ switch (name.kind) {
49
+ case "identifier":
50
+ case "number":
51
+ writer.write(name.text);
52
+ break;
53
+ case "string":
54
+ writer.write(literalText.printEscapedString(name.value));
55
+ break;
56
+ default:
57
+ assertNever.assertNever(name);
58
+ }
59
+ }
60
+ function writeIndexSignatureParameter(writer, name, type) {
61
+ writer.write(`[${name}: `);
62
+ writer.increaseIndent();
63
+ writeType(writer, type);
64
+ writer.decreaseIndent();
65
+ writer.write("]");
66
+ }
67
+ function writeMember(writer, member) {
68
+ for (const comment of member.comments) {
69
+ commentWriter.writeLeadingComment(writer, comment);
70
+ }
71
+ if (member.isReadonly) {
72
+ writer.write("readonly ");
73
+ }
74
+ if (member.kind === "property") {
75
+ writePropertyName(writer, member.name);
76
+ writer.write(member.isOptional ? "?: " : ": ");
77
+ } else {
78
+ writeIndexSignatureParameter(writer, member.parameterName, member.parameterType);
79
+ writer.write(": ");
80
+ }
81
+ writeType(writer, member.type);
82
+ writer.write(";");
83
+ }
84
+ function writeTupleElement(writer, element) {
85
+ if (element.isRest) {
86
+ writer.write("...");
87
+ }
88
+ if (element.isOptional) {
89
+ writeTypeIn(writer, element.type, needsParensAsPostfixOperand);
90
+ writer.write("?");
91
+ return;
92
+ }
93
+ writeType(writer, element.type);
94
+ }
95
+ function writeObjectType(writer, members) {
96
+ writer.write("{");
97
+ writeMultiLineList(
98
+ writer,
99
+ members,
100
+ { delimiter: "", isLineBreakWhenEmpty: false },
101
+ (member) => writeMember(writer, member)
102
+ );
103
+ writer.write("}");
104
+ }
105
+ function writeTupleType(writer, elements) {
106
+ writer.write("[");
107
+ writeMultiLineList(
108
+ writer,
109
+ elements,
110
+ { delimiter: ",", isLineBreakWhenEmpty: true },
111
+ (element) => writeTupleElement(writer, element)
112
+ );
113
+ writer.write("]");
114
+ }
115
+ function writeReferenceType(writer, name, typeArguments) {
116
+ writer.write(name);
117
+ if (typeArguments.length > 0) {
118
+ writer.write("<");
119
+ writeInlineList(writer, typeArguments, ", ", (argument) => writeType(writer, argument));
120
+ writer.write(">");
121
+ }
122
+ }
123
+ function writeIndexedAccessType(writer, type) {
124
+ writeTypeIn(writer, type.object, needsParensAsPostfixOperand);
125
+ writer.write("[");
126
+ writeType(writer, type.index);
127
+ writer.write("]");
128
+ }
129
+ function writeConstituents(writer, types, separator) {
130
+ writeInlineList(
131
+ writer,
132
+ types,
133
+ separator,
134
+ (member) => writeTypeIn(writer, member, needsParensAsConstituent)
135
+ );
136
+ }
137
+ function printLeafType(type) {
138
+ switch (type.kind) {
139
+ case "keyword":
140
+ return type.keyword;
141
+ case "stringLiteral":
142
+ return literalText.printStringLiteral(type.value, type.encoding);
143
+ case "numberLiteral":
144
+ return literalText.printNumberLiteral(type.value);
145
+ case "booleanLiteral":
146
+ return String(type.value);
147
+ default:
148
+ return assertNever.assertNever(type);
149
+ }
150
+ }
151
+ function writeRawType(writer, text) {
152
+ text.split("\n").forEach((line, index) => {
153
+ if (index > 0) {
154
+ writer.rawWrite(writer.options.newLine);
155
+ }
156
+ writer.write(line);
157
+ });
158
+ }
159
+ function writeArrayType(writer, element) {
160
+ writeTypeIn(writer, element, needsParensAsPostfixOperand);
161
+ writer.write("[]");
162
+ }
163
+ function writeReadonlyType(writer, operand) {
164
+ writer.write("readonly ");
165
+ writeTypeIn(writer, operand, needsParensAsReadonlyOperand);
166
+ }
167
+ function writeOperatorType(writer, type) {
168
+ if (type.kind === "array") {
169
+ writeArrayType(writer, type.element);
170
+ } else if (type.kind === "indexedAccess") {
171
+ writeIndexedAccessType(writer, type);
172
+ } else {
173
+ writeReadonlyType(writer, type.type);
174
+ }
175
+ }
176
+ const CONSTITUENT_SEPARATORS = { union: " | ", intersection: " & " };
177
+ function writeLeafType(writer, type) {
178
+ if (type.kind === "raw") {
179
+ writeRawType(writer, type.text);
180
+ } else {
181
+ writer.write(printLeafType(type));
182
+ }
183
+ }
184
+ function writeType(writer, type) {
185
+ switch (type.kind) {
186
+ case "keyword":
187
+ case "stringLiteral":
188
+ case "numberLiteral":
189
+ case "booleanLiteral":
190
+ case "raw":
191
+ writeLeafType(writer, type);
192
+ break;
193
+ case "reference":
194
+ writeReferenceType(writer, type.name, type.typeArguments);
195
+ break;
196
+ case "array":
197
+ case "indexedAccess":
198
+ case "readonly":
199
+ writeOperatorType(writer, type);
200
+ break;
201
+ case "union":
202
+ case "intersection":
203
+ writeConstituents(writer, type.types, CONSTITUENT_SEPARATORS[type.kind]);
204
+ break;
205
+ case "object":
206
+ writeObjectType(writer, type.members);
207
+ break;
208
+ case "tuple":
209
+ writeTupleType(writer, type.elements);
210
+ break;
211
+ default:
212
+ assertNever.assertNever(type);
213
+ }
214
+ }
215
+
216
+ exports.writeMember = writeMember;
217
+ exports.writeMultiLineList = writeMultiLineList;
218
+ exports.writeType = writeType;
219
+ //# sourceMappingURL=type-printer.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-printer.cjs","sources":["../../../src/application/print/type-printer.ts"],"sourcesContent":["import { assertNever } from \"../../domain/assert-never.js\";\nimport type {\n IrIndexedAccessType,\n IrMember,\n IrPropertyName,\n IrRawType,\n IrTupleElement,\n IrType,\n} from \"../../domain/ir/nodes.js\";\nimport { writeLeadingComment } from \"./comment-writer.js\";\nimport { printEscapedString, printNumberLiteral, printStringLiteral } from \"./literal-text.js\";\nimport type { TextWriter } from \"./text-writer.js\";\n\n/**\n * Parenthesization contexts. Each predicate says when a child type needs parentheses; together they\n * reproduce the TypeScript factory's parenthesizer rules for the node kinds of the IR, so output\n * matches the original even when unions are nested (`A | (B | C)`).\n */\nconst isUnionOrIntersection = (type: IrType): boolean =>\n type.kind === \"union\" || type.kind === \"intersection\";\n/** Union and intersection members (`parenthesizeConstituentTypeOf{Union,Intersection}Type`). */\nconst needsParensAsConstituent = isUnionOrIntersection;\n/** Array element and indexed-access object (`parenthesizeNonArrayTypeOfPostfixType`). */\nconst needsParensAsPostfixOperand = (type: IrType): boolean =>\n type.kind === \"readonly\" || isUnionOrIntersection(type);\n/** Operand of `readonly` (`parenthesizeOperandOfReadonlyTypeOperator`). */\nconst needsParensAsReadonlyOperand = needsParensAsPostfixOperand;\n\nfunction writeTypeIn(\n writer: TextWriter,\n type: IrType,\n needsParens: (type: IrType) => boolean,\n): void {\n if (!needsParens(type)) {\n writeType(writer, type);\n return;\n }\n writer.write(\"(\");\n writeType(writer, type);\n writer.write(\")\");\n}\n\n/** Write a single-line list: `separator` between items, nothing for an empty list. */\nfunction writeInlineList<T>(\n writer: TextWriter,\n items: readonly T[],\n separator: string,\n writeItem: (item: T) => void,\n) {\n items.forEach((item, index) => {\n if (index > 0) {\n writer.write(separator);\n }\n writeItem(item);\n });\n}\n\n/**\n * Write a multi-line list the way the TypeScript printer does: a line break after the opening\n * token, one item per indented line, `delimiter` after every item but the last, and a line break\n * before the closing token. An empty list prints the line break only when `isLineBreakWhenEmpty`\n * (interfaces, enums and tuples do; object type literals print `{}`).\n */\nexport function writeMultiLineList<T>(\n writer: TextWriter,\n items: readonly T[],\n format: { readonly delimiter: string; readonly isLineBreakWhenEmpty: boolean },\n writeItem: (item: T) => void,\n): void {\n if (items.length === 0) {\n if (format.isLineBreakWhenEmpty) {\n writer.writeLine();\n }\n return;\n }\n writer.writeLine();\n writer.increaseIndent();\n items.forEach((item, index) => {\n if (index > 0) {\n writer.write(format.delimiter);\n writer.writeLine();\n }\n writeItem(item);\n });\n writer.decreaseIndent();\n writer.writeLine();\n}\n\nfunction writePropertyName(writer: TextWriter, name: IrPropertyName): void {\n switch (name.kind) {\n case \"identifier\":\n case \"number\":\n writer.write(name.text);\n break;\n case \"string\":\n writer.write(printEscapedString(name.value));\n break;\n default:\n assertNever(name);\n }\n}\n\n/**\n * `[name: type]`. TypeScript prints index signature parameters as an indented list, so a multi-line\n * parameter type (an object or tuple) is indented one level deeper than the member.\n */\nfunction writeIndexSignatureParameter(writer: TextWriter, name: string, type: IrType): void {\n writer.write(`[${name}: `);\n writer.increaseIndent();\n writeType(writer, type);\n writer.decreaseIndent();\n writer.write(\"]\");\n}\n\n/** Write one member of an interface or object type, with its comment and trailing semicolon. */\nexport function writeMember(writer: TextWriter, member: IrMember): void {\n for (const comment of member.comments) {\n writeLeadingComment(writer, comment);\n }\n if (member.isReadonly) {\n writer.write(\"readonly \");\n }\n if (member.kind === \"property\") {\n writePropertyName(writer, member.name);\n writer.write(member.isOptional ? \"?: \" : \": \");\n } else {\n writeIndexSignatureParameter(writer, member.parameterName, member.parameterType);\n writer.write(\": \");\n }\n writeType(writer, member.type);\n writer.write(\";\");\n}\n\nfunction writeTupleElement(writer: TextWriter, element: IrTupleElement): void {\n if (element.isRest) {\n writer.write(\"...\");\n }\n if (element.isOptional) {\n // TypeScript parenthesizes an optional element as a postfix operand (`(A | B)?`).\n writeTypeIn(writer, element.type, needsParensAsPostfixOperand);\n writer.write(\"?\");\n return;\n }\n writeType(writer, element.type);\n}\n\nfunction writeObjectType(writer: TextWriter, members: readonly IrMember[]): void {\n writer.write(\"{\");\n writeMultiLineList(writer, members, { delimiter: \"\", isLineBreakWhenEmpty: false }, (member) =>\n writeMember(writer, member),\n );\n writer.write(\"}\");\n}\n\nfunction writeTupleType(writer: TextWriter, elements: readonly IrTupleElement[]): void {\n writer.write(\"[\");\n writeMultiLineList(writer, elements, { delimiter: \",\", isLineBreakWhenEmpty: true }, (element) =>\n writeTupleElement(writer, element),\n );\n writer.write(\"]\");\n}\n\nfunction writeReferenceType(\n writer: TextWriter,\n name: string,\n typeArguments: readonly IrType[],\n): void {\n writer.write(name);\n if (typeArguments.length > 0) {\n writer.write(\"<\");\n writeInlineList(writer, typeArguments, \", \", (argument) => writeType(writer, argument));\n writer.write(\">\");\n }\n}\n\nfunction writeIndexedAccessType(writer: TextWriter, type: IrIndexedAccessType): void {\n writeTypeIn(writer, type.object, needsParensAsPostfixOperand);\n writer.write(\"[\");\n writeType(writer, type.index);\n writer.write(\"]\");\n}\n\nfunction writeConstituents(writer: TextWriter, types: readonly IrType[], separator: string): void {\n writeInlineList(writer, types, separator, (member) =>\n writeTypeIn(writer, member, needsParensAsConstituent),\n );\n}\n\ntype IrLeafType = Extract<\n IrType,\n { kind: \"keyword\" | \"stringLiteral\" | \"numberLiteral\" | \"booleanLiteral\" }\n>;\n\nfunction printLeafType(type: IrLeafType): string {\n switch (type.kind) {\n case \"keyword\":\n return type.keyword;\n case \"stringLiteral\":\n return printStringLiteral(type.value, type.encoding);\n case \"numberLiteral\":\n return printNumberLiteral(type.value);\n case \"booleanLiteral\":\n return String(type.value);\n default:\n return assertNever(type);\n }\n}\n\n/**\n * Raw text is printed as if it started at column 0, so its continuation lines get the current\n * indentation, as the TypeScript printer indents a nested node.\n */\nfunction writeRawType(writer: TextWriter, text: string): void {\n text.split(\"\\n\").forEach((line, index) => {\n if (index > 0) {\n writer.rawWrite(writer.options.newLine);\n }\n writer.write(line);\n });\n}\n\nfunction writeArrayType(writer: TextWriter, element: IrType): void {\n writeTypeIn(writer, element, needsParensAsPostfixOperand);\n writer.write(\"[]\");\n}\n\nfunction writeReadonlyType(writer: TextWriter, operand: IrType): void {\n writer.write(\"readonly \");\n writeTypeIn(writer, operand, needsParensAsReadonlyOperand);\n}\n\ntype IrOperatorType = Extract<IrType, { kind: \"array\" | \"indexedAccess\" | \"readonly\" }>;\n\n/** Types built with a type operator: `T[]`, `T[K]` and `readonly T`. */\nfunction writeOperatorType(writer: TextWriter, type: IrOperatorType): void {\n if (type.kind === \"array\") {\n writeArrayType(writer, type.element);\n } else if (type.kind === \"indexedAccess\") {\n writeIndexedAccessType(writer, type);\n } else {\n writeReadonlyType(writer, type.type);\n }\n}\n\nconst CONSTITUENT_SEPARATORS = { union: \" | \", intersection: \" & \" } as const;\n\n/** A raw type may span lines and is re-indented; any other leaf prints on one line. */\nfunction writeLeafType(writer: TextWriter, type: IrLeafType | IrRawType): void {\n if (type.kind === \"raw\") {\n writeRawType(writer, type.text);\n } else {\n writer.write(printLeafType(type));\n }\n}\n\n/** Write a type at the writer's current position. */\nexport function writeType(writer: TextWriter, type: IrType): void {\n switch (type.kind) {\n case \"keyword\":\n case \"stringLiteral\":\n case \"numberLiteral\":\n case \"booleanLiteral\":\n case \"raw\":\n writeLeafType(writer, type);\n break;\n case \"reference\":\n writeReferenceType(writer, type.name, type.typeArguments);\n break;\n case \"array\":\n case \"indexedAccess\":\n case \"readonly\":\n writeOperatorType(writer, type);\n break;\n case \"union\":\n case \"intersection\":\n writeConstituents(writer, type.types, CONSTITUENT_SEPARATORS[type.kind]);\n break;\n case \"object\":\n writeObjectType(writer, type.members);\n break;\n case \"tuple\":\n writeTupleType(writer, type.elements);\n break;\n default:\n assertNever(type);\n }\n}\n"],"names":["printEscapedString","assertNever","writeLeadingComment","printStringLiteral","printNumberLiteral"],"mappings":"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"}
@@ -0,0 +1,215 @@
1
+ import { assertNever } from '../../domain/assert-never.mjs';
2
+ import { writeLeadingComment } from './comment-writer.mjs';
3
+ import { printEscapedString, printNumberLiteral, printStringLiteral } from './literal-text.mjs';
4
+
5
+ const isUnionOrIntersection = (type) => type.kind === "union" || type.kind === "intersection";
6
+ const needsParensAsConstituent = isUnionOrIntersection;
7
+ const needsParensAsPostfixOperand = (type) => type.kind === "readonly" || isUnionOrIntersection(type);
8
+ const needsParensAsReadonlyOperand = needsParensAsPostfixOperand;
9
+ function writeTypeIn(writer, type, needsParens) {
10
+ if (!needsParens(type)) {
11
+ writeType(writer, type);
12
+ return;
13
+ }
14
+ writer.write("(");
15
+ writeType(writer, type);
16
+ writer.write(")");
17
+ }
18
+ function writeInlineList(writer, items, separator, writeItem) {
19
+ items.forEach((item, index) => {
20
+ if (index > 0) {
21
+ writer.write(separator);
22
+ }
23
+ writeItem(item);
24
+ });
25
+ }
26
+ function writeMultiLineList(writer, items, format, writeItem) {
27
+ if (items.length === 0) {
28
+ if (format.isLineBreakWhenEmpty) {
29
+ writer.writeLine();
30
+ }
31
+ return;
32
+ }
33
+ writer.writeLine();
34
+ writer.increaseIndent();
35
+ items.forEach((item, index) => {
36
+ if (index > 0) {
37
+ writer.write(format.delimiter);
38
+ writer.writeLine();
39
+ }
40
+ writeItem(item);
41
+ });
42
+ writer.decreaseIndent();
43
+ writer.writeLine();
44
+ }
45
+ function writePropertyName(writer, name) {
46
+ switch (name.kind) {
47
+ case "identifier":
48
+ case "number":
49
+ writer.write(name.text);
50
+ break;
51
+ case "string":
52
+ writer.write(printEscapedString(name.value));
53
+ break;
54
+ default:
55
+ assertNever(name);
56
+ }
57
+ }
58
+ function writeIndexSignatureParameter(writer, name, type) {
59
+ writer.write(`[${name}: `);
60
+ writer.increaseIndent();
61
+ writeType(writer, type);
62
+ writer.decreaseIndent();
63
+ writer.write("]");
64
+ }
65
+ function writeMember(writer, member) {
66
+ for (const comment of member.comments) {
67
+ writeLeadingComment(writer, comment);
68
+ }
69
+ if (member.isReadonly) {
70
+ writer.write("readonly ");
71
+ }
72
+ if (member.kind === "property") {
73
+ writePropertyName(writer, member.name);
74
+ writer.write(member.isOptional ? "?: " : ": ");
75
+ } else {
76
+ writeIndexSignatureParameter(writer, member.parameterName, member.parameterType);
77
+ writer.write(": ");
78
+ }
79
+ writeType(writer, member.type);
80
+ writer.write(";");
81
+ }
82
+ function writeTupleElement(writer, element) {
83
+ if (element.isRest) {
84
+ writer.write("...");
85
+ }
86
+ if (element.isOptional) {
87
+ writeTypeIn(writer, element.type, needsParensAsPostfixOperand);
88
+ writer.write("?");
89
+ return;
90
+ }
91
+ writeType(writer, element.type);
92
+ }
93
+ function writeObjectType(writer, members) {
94
+ writer.write("{");
95
+ writeMultiLineList(
96
+ writer,
97
+ members,
98
+ { delimiter: "", isLineBreakWhenEmpty: false },
99
+ (member) => writeMember(writer, member)
100
+ );
101
+ writer.write("}");
102
+ }
103
+ function writeTupleType(writer, elements) {
104
+ writer.write("[");
105
+ writeMultiLineList(
106
+ writer,
107
+ elements,
108
+ { delimiter: ",", isLineBreakWhenEmpty: true },
109
+ (element) => writeTupleElement(writer, element)
110
+ );
111
+ writer.write("]");
112
+ }
113
+ function writeReferenceType(writer, name, typeArguments) {
114
+ writer.write(name);
115
+ if (typeArguments.length > 0) {
116
+ writer.write("<");
117
+ writeInlineList(writer, typeArguments, ", ", (argument) => writeType(writer, argument));
118
+ writer.write(">");
119
+ }
120
+ }
121
+ function writeIndexedAccessType(writer, type) {
122
+ writeTypeIn(writer, type.object, needsParensAsPostfixOperand);
123
+ writer.write("[");
124
+ writeType(writer, type.index);
125
+ writer.write("]");
126
+ }
127
+ function writeConstituents(writer, types, separator) {
128
+ writeInlineList(
129
+ writer,
130
+ types,
131
+ separator,
132
+ (member) => writeTypeIn(writer, member, needsParensAsConstituent)
133
+ );
134
+ }
135
+ function printLeafType(type) {
136
+ switch (type.kind) {
137
+ case "keyword":
138
+ return type.keyword;
139
+ case "stringLiteral":
140
+ return printStringLiteral(type.value, type.encoding);
141
+ case "numberLiteral":
142
+ return printNumberLiteral(type.value);
143
+ case "booleanLiteral":
144
+ return String(type.value);
145
+ default:
146
+ return assertNever(type);
147
+ }
148
+ }
149
+ function writeRawType(writer, text) {
150
+ text.split("\n").forEach((line, index) => {
151
+ if (index > 0) {
152
+ writer.rawWrite(writer.options.newLine);
153
+ }
154
+ writer.write(line);
155
+ });
156
+ }
157
+ function writeArrayType(writer, element) {
158
+ writeTypeIn(writer, element, needsParensAsPostfixOperand);
159
+ writer.write("[]");
160
+ }
161
+ function writeReadonlyType(writer, operand) {
162
+ writer.write("readonly ");
163
+ writeTypeIn(writer, operand, needsParensAsReadonlyOperand);
164
+ }
165
+ function writeOperatorType(writer, type) {
166
+ if (type.kind === "array") {
167
+ writeArrayType(writer, type.element);
168
+ } else if (type.kind === "indexedAccess") {
169
+ writeIndexedAccessType(writer, type);
170
+ } else {
171
+ writeReadonlyType(writer, type.type);
172
+ }
173
+ }
174
+ const CONSTITUENT_SEPARATORS = { union: " | ", intersection: " & " };
175
+ function writeLeafType(writer, type) {
176
+ if (type.kind === "raw") {
177
+ writeRawType(writer, type.text);
178
+ } else {
179
+ writer.write(printLeafType(type));
180
+ }
181
+ }
182
+ function writeType(writer, type) {
183
+ switch (type.kind) {
184
+ case "keyword":
185
+ case "stringLiteral":
186
+ case "numberLiteral":
187
+ case "booleanLiteral":
188
+ case "raw":
189
+ writeLeafType(writer, type);
190
+ break;
191
+ case "reference":
192
+ writeReferenceType(writer, type.name, type.typeArguments);
193
+ break;
194
+ case "array":
195
+ case "indexedAccess":
196
+ case "readonly":
197
+ writeOperatorType(writer, type);
198
+ break;
199
+ case "union":
200
+ case "intersection":
201
+ writeConstituents(writer, type.types, CONSTITUENT_SEPARATORS[type.kind]);
202
+ break;
203
+ case "object":
204
+ writeObjectType(writer, type.members);
205
+ break;
206
+ case "tuple":
207
+ writeTupleType(writer, type.elements);
208
+ break;
209
+ default:
210
+ assertNever(type);
211
+ }
212
+ }
213
+
214
+ export { writeMember, writeMultiLineList, writeType };
215
+ //# sourceMappingURL=type-printer.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-printer.mjs","sources":["../../../src/application/print/type-printer.ts"],"sourcesContent":["import { assertNever } from \"../../domain/assert-never.js\";\nimport type {\n IrIndexedAccessType,\n IrMember,\n IrPropertyName,\n IrRawType,\n IrTupleElement,\n IrType,\n} from \"../../domain/ir/nodes.js\";\nimport { writeLeadingComment } from \"./comment-writer.js\";\nimport { printEscapedString, printNumberLiteral, printStringLiteral } from \"./literal-text.js\";\nimport type { TextWriter } from \"./text-writer.js\";\n\n/**\n * Parenthesization contexts. Each predicate says when a child type needs parentheses; together they\n * reproduce the TypeScript factory's parenthesizer rules for the node kinds of the IR, so output\n * matches the original even when unions are nested (`A | (B | C)`).\n */\nconst isUnionOrIntersection = (type: IrType): boolean =>\n type.kind === \"union\" || type.kind === \"intersection\";\n/** Union and intersection members (`parenthesizeConstituentTypeOf{Union,Intersection}Type`). */\nconst needsParensAsConstituent = isUnionOrIntersection;\n/** Array element and indexed-access object (`parenthesizeNonArrayTypeOfPostfixType`). */\nconst needsParensAsPostfixOperand = (type: IrType): boolean =>\n type.kind === \"readonly\" || isUnionOrIntersection(type);\n/** Operand of `readonly` (`parenthesizeOperandOfReadonlyTypeOperator`). */\nconst needsParensAsReadonlyOperand = needsParensAsPostfixOperand;\n\nfunction writeTypeIn(\n writer: TextWriter,\n type: IrType,\n needsParens: (type: IrType) => boolean,\n): void {\n if (!needsParens(type)) {\n writeType(writer, type);\n return;\n }\n writer.write(\"(\");\n writeType(writer, type);\n writer.write(\")\");\n}\n\n/** Write a single-line list: `separator` between items, nothing for an empty list. */\nfunction writeInlineList<T>(\n writer: TextWriter,\n items: readonly T[],\n separator: string,\n writeItem: (item: T) => void,\n) {\n items.forEach((item, index) => {\n if (index > 0) {\n writer.write(separator);\n }\n writeItem(item);\n });\n}\n\n/**\n * Write a multi-line list the way the TypeScript printer does: a line break after the opening\n * token, one item per indented line, `delimiter` after every item but the last, and a line break\n * before the closing token. An empty list prints the line break only when `isLineBreakWhenEmpty`\n * (interfaces, enums and tuples do; object type literals print `{}`).\n */\nexport function writeMultiLineList<T>(\n writer: TextWriter,\n items: readonly T[],\n format: { readonly delimiter: string; readonly isLineBreakWhenEmpty: boolean },\n writeItem: (item: T) => void,\n): void {\n if (items.length === 0) {\n if (format.isLineBreakWhenEmpty) {\n writer.writeLine();\n }\n return;\n }\n writer.writeLine();\n writer.increaseIndent();\n items.forEach((item, index) => {\n if (index > 0) {\n writer.write(format.delimiter);\n writer.writeLine();\n }\n writeItem(item);\n });\n writer.decreaseIndent();\n writer.writeLine();\n}\n\nfunction writePropertyName(writer: TextWriter, name: IrPropertyName): void {\n switch (name.kind) {\n case \"identifier\":\n case \"number\":\n writer.write(name.text);\n break;\n case \"string\":\n writer.write(printEscapedString(name.value));\n break;\n default:\n assertNever(name);\n }\n}\n\n/**\n * `[name: type]`. TypeScript prints index signature parameters as an indented list, so a multi-line\n * parameter type (an object or tuple) is indented one level deeper than the member.\n */\nfunction writeIndexSignatureParameter(writer: TextWriter, name: string, type: IrType): void {\n writer.write(`[${name}: `);\n writer.increaseIndent();\n writeType(writer, type);\n writer.decreaseIndent();\n writer.write(\"]\");\n}\n\n/** Write one member of an interface or object type, with its comment and trailing semicolon. */\nexport function writeMember(writer: TextWriter, member: IrMember): void {\n for (const comment of member.comments) {\n writeLeadingComment(writer, comment);\n }\n if (member.isReadonly) {\n writer.write(\"readonly \");\n }\n if (member.kind === \"property\") {\n writePropertyName(writer, member.name);\n writer.write(member.isOptional ? \"?: \" : \": \");\n } else {\n writeIndexSignatureParameter(writer, member.parameterName, member.parameterType);\n writer.write(\": \");\n }\n writeType(writer, member.type);\n writer.write(\";\");\n}\n\nfunction writeTupleElement(writer: TextWriter, element: IrTupleElement): void {\n if (element.isRest) {\n writer.write(\"...\");\n }\n if (element.isOptional) {\n // TypeScript parenthesizes an optional element as a postfix operand (`(A | B)?`).\n writeTypeIn(writer, element.type, needsParensAsPostfixOperand);\n writer.write(\"?\");\n return;\n }\n writeType(writer, element.type);\n}\n\nfunction writeObjectType(writer: TextWriter, members: readonly IrMember[]): void {\n writer.write(\"{\");\n writeMultiLineList(writer, members, { delimiter: \"\", isLineBreakWhenEmpty: false }, (member) =>\n writeMember(writer, member),\n );\n writer.write(\"}\");\n}\n\nfunction writeTupleType(writer: TextWriter, elements: readonly IrTupleElement[]): void {\n writer.write(\"[\");\n writeMultiLineList(writer, elements, { delimiter: \",\", isLineBreakWhenEmpty: true }, (element) =>\n writeTupleElement(writer, element),\n );\n writer.write(\"]\");\n}\n\nfunction writeReferenceType(\n writer: TextWriter,\n name: string,\n typeArguments: readonly IrType[],\n): void {\n writer.write(name);\n if (typeArguments.length > 0) {\n writer.write(\"<\");\n writeInlineList(writer, typeArguments, \", \", (argument) => writeType(writer, argument));\n writer.write(\">\");\n }\n}\n\nfunction writeIndexedAccessType(writer: TextWriter, type: IrIndexedAccessType): void {\n writeTypeIn(writer, type.object, needsParensAsPostfixOperand);\n writer.write(\"[\");\n writeType(writer, type.index);\n writer.write(\"]\");\n}\n\nfunction writeConstituents(writer: TextWriter, types: readonly IrType[], separator: string): void {\n writeInlineList(writer, types, separator, (member) =>\n writeTypeIn(writer, member, needsParensAsConstituent),\n );\n}\n\ntype IrLeafType = Extract<\n IrType,\n { kind: \"keyword\" | \"stringLiteral\" | \"numberLiteral\" | \"booleanLiteral\" }\n>;\n\nfunction printLeafType(type: IrLeafType): string {\n switch (type.kind) {\n case \"keyword\":\n return type.keyword;\n case \"stringLiteral\":\n return printStringLiteral(type.value, type.encoding);\n case \"numberLiteral\":\n return printNumberLiteral(type.value);\n case \"booleanLiteral\":\n return String(type.value);\n default:\n return assertNever(type);\n }\n}\n\n/**\n * Raw text is printed as if it started at column 0, so its continuation lines get the current\n * indentation, as the TypeScript printer indents a nested node.\n */\nfunction writeRawType(writer: TextWriter, text: string): void {\n text.split(\"\\n\").forEach((line, index) => {\n if (index > 0) {\n writer.rawWrite(writer.options.newLine);\n }\n writer.write(line);\n });\n}\n\nfunction writeArrayType(writer: TextWriter, element: IrType): void {\n writeTypeIn(writer, element, needsParensAsPostfixOperand);\n writer.write(\"[]\");\n}\n\nfunction writeReadonlyType(writer: TextWriter, operand: IrType): void {\n writer.write(\"readonly \");\n writeTypeIn(writer, operand, needsParensAsReadonlyOperand);\n}\n\ntype IrOperatorType = Extract<IrType, { kind: \"array\" | \"indexedAccess\" | \"readonly\" }>;\n\n/** Types built with a type operator: `T[]`, `T[K]` and `readonly T`. */\nfunction writeOperatorType(writer: TextWriter, type: IrOperatorType): void {\n if (type.kind === \"array\") {\n writeArrayType(writer, type.element);\n } else if (type.kind === \"indexedAccess\") {\n writeIndexedAccessType(writer, type);\n } else {\n writeReadonlyType(writer, type.type);\n }\n}\n\nconst CONSTITUENT_SEPARATORS = { union: \" | \", intersection: \" & \" } as const;\n\n/** A raw type may span lines and is re-indented; any other leaf prints on one line. */\nfunction writeLeafType(writer: TextWriter, type: IrLeafType | IrRawType): void {\n if (type.kind === \"raw\") {\n writeRawType(writer, type.text);\n } else {\n writer.write(printLeafType(type));\n }\n}\n\n/** Write a type at the writer's current position. */\nexport function writeType(writer: TextWriter, type: IrType): void {\n switch (type.kind) {\n case \"keyword\":\n case \"stringLiteral\":\n case \"numberLiteral\":\n case \"booleanLiteral\":\n case \"raw\":\n writeLeafType(writer, type);\n break;\n case \"reference\":\n writeReferenceType(writer, type.name, type.typeArguments);\n break;\n case \"array\":\n case \"indexedAccess\":\n case \"readonly\":\n writeOperatorType(writer, type);\n break;\n case \"union\":\n case \"intersection\":\n writeConstituents(writer, type.types, CONSTITUENT_SEPARATORS[type.kind]);\n break;\n case \"object\":\n writeObjectType(writer, type.members);\n break;\n case \"tuple\":\n writeTupleType(writer, type.elements);\n break;\n default:\n assertNever(type);\n }\n}\n"],"names":[],"mappings":"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"}