openapi-typesafe 0.0.0 → 1.0.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (678) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +71 -1
  3. package/bin/cli.js +4 -0
  4. package/dist/adapters/node-file-system/node-file-system.cjs +46 -0
  5. package/dist/adapters/node-file-system/node-file-system.cjs.map +1 -0
  6. package/dist/adapters/node-file-system/node-file-system.mjs +40 -0
  7. package/dist/adapters/node-file-system/node-file-system.mjs.map +1 -0
  8. package/dist/adapters/redocly-loader/alias-limit.cjs +16 -0
  9. package/dist/adapters/redocly-loader/alias-limit.cjs.map +1 -0
  10. package/dist/adapters/redocly-loader/alias-limit.mjs +14 -0
  11. package/dist/adapters/redocly-loader/alias-limit.mjs.map +1 -0
  12. package/dist/adapters/redocly-loader/allowed-hosts.cjs +42 -0
  13. package/dist/adapters/redocly-loader/allowed-hosts.cjs.map +1 -0
  14. package/dist/adapters/redocly-loader/allowed-hosts.mjs +40 -0
  15. package/dist/adapters/redocly-loader/allowed-hosts.mjs.map +1 -0
  16. package/dist/adapters/redocly-loader/bundled-ref-repair.cjs +53 -0
  17. package/dist/adapters/redocly-loader/bundled-ref-repair.cjs.map +1 -0
  18. package/dist/adapters/redocly-loader/bundled-ref-repair.mjs +51 -0
  19. package/dist/adapters/redocly-loader/bundled-ref-repair.mjs.map +1 -0
  20. package/dist/adapters/redocly-loader/malformed-refs.cjs +41 -0
  21. package/dist/adapters/redocly-loader/malformed-refs.cjs.map +1 -0
  22. package/dist/adapters/redocly-loader/malformed-refs.mjs +38 -0
  23. package/dist/adapters/redocly-loader/malformed-refs.mjs.map +1 -0
  24. package/dist/adapters/redocly-loader/redocly-config-source.cjs +42 -0
  25. package/dist/adapters/redocly-loader/redocly-config-source.cjs.map +1 -0
  26. package/dist/adapters/redocly-loader/redocly-config-source.mjs +35 -0
  27. package/dist/adapters/redocly-loader/redocly-config-source.mjs.map +1 -0
  28. package/dist/adapters/redocly-loader/redocly-schema-loader.cjs +169 -0
  29. package/dist/adapters/redocly-loader/redocly-schema-loader.cjs.map +1 -0
  30. package/dist/adapters/redocly-loader/redocly-schema-loader.mjs +167 -0
  31. package/dist/adapters/redocly-loader/redocly-schema-loader.mjs.map +1 -0
  32. package/dist/adapters/redocly-loader/ref-access.cjs +107 -0
  33. package/dist/adapters/redocly-loader/ref-access.cjs.map +1 -0
  34. package/dist/adapters/redocly-loader/ref-access.mjs +99 -0
  35. package/dist/adapters/redocly-loader/ref-access.mjs.map +1 -0
  36. package/dist/adapters/redocly-loader/ref-holders.cjs +31 -0
  37. package/dist/adapters/redocly-loader/ref-holders.cjs.map +1 -0
  38. package/dist/adapters/redocly-loader/ref-holders.mjs +29 -0
  39. package/dist/adapters/redocly-loader/ref-holders.mjs.map +1 -0
  40. package/dist/adapters/redocly-loader/remote-fetch.cjs +60 -0
  41. package/dist/adapters/redocly-loader/remote-fetch.cjs.map +1 -0
  42. package/dist/adapters/redocly-loader/remote-fetch.mjs +56 -0
  43. package/dist/adapters/redocly-loader/remote-fetch.mjs.map +1 -0
  44. package/dist/adapters/redocly-loader/schema-load-errors.cjs +87 -0
  45. package/dist/adapters/redocly-loader/schema-load-errors.cjs.map +1 -0
  46. package/dist/adapters/redocly-loader/schema-load-errors.mjs +77 -0
  47. package/dist/adapters/redocly-loader/schema-load-errors.mjs.map +1 -0
  48. package/dist/adapters/redocly-loader/schema-source.cjs +104 -0
  49. package/dist/adapters/redocly-loader/schema-source.cjs.map +1 -0
  50. package/dist/adapters/redocly-loader/schema-source.mjs +98 -0
  51. package/dist/adapters/redocly-loader/schema-source.mjs.map +1 -0
  52. package/dist/adapters/redocly-loader/unsupported-keys.cjs +62 -0
  53. package/dist/adapters/redocly-loader/unsupported-keys.cjs.map +1 -0
  54. package/dist/adapters/redocly-loader/unsupported-keys.mjs +58 -0
  55. package/dist/adapters/redocly-loader/unsupported-keys.mjs.map +1 -0
  56. package/dist/adapters/terminal-logger/terminal-logger.cjs +67 -0
  57. package/dist/adapters/terminal-logger/terminal-logger.cjs.map +1 -0
  58. package/dist/adapters/terminal-logger/terminal-logger.mjs +59 -0
  59. package/dist/adapters/terminal-logger/terminal-logger.mjs.map +1 -0
  60. package/dist/adapters/type-ast-bridge/footer-nodes.cjs +21 -0
  61. package/dist/adapters/type-ast-bridge/footer-nodes.cjs.map +1 -0
  62. package/dist/adapters/type-ast-bridge/footer-nodes.mjs +17 -0
  63. package/dist/adapters/type-ast-bridge/footer-nodes.mjs.map +1 -0
  64. package/dist/adapters/type-ast-bridge/ir-declarations-to-typescript.cjs +75 -0
  65. package/dist/adapters/type-ast-bridge/ir-declarations-to-typescript.cjs.map +1 -0
  66. package/dist/adapters/type-ast-bridge/ir-declarations-to-typescript.mjs +71 -0
  67. package/dist/adapters/type-ast-bridge/ir-declarations-to-typescript.mjs.map +1 -0
  68. package/dist/adapters/type-ast-bridge/ir-to-typescript.cjs +145 -0
  69. package/dist/adapters/type-ast-bridge/ir-to-typescript.cjs.map +1 -0
  70. package/dist/adapters/type-ast-bridge/ir-to-typescript.mjs +139 -0
  71. package/dist/adapters/type-ast-bridge/ir-to-typescript.mjs.map +1 -0
  72. package/dist/adapters/type-ast-bridge/lazy-node.cjs +23 -0
  73. package/dist/adapters/type-ast-bridge/lazy-node.cjs.map +1 -0
  74. package/dist/adapters/type-ast-bridge/lazy-node.mjs +21 -0
  75. package/dist/adapters/type-ast-bridge/lazy-node.mjs.map +1 -0
  76. package/dist/adapters/type-ast-bridge/load-typescript.cjs +57 -0
  77. package/dist/adapters/type-ast-bridge/load-typescript.cjs.map +1 -0
  78. package/dist/adapters/type-ast-bridge/load-typescript.mjs +51 -0
  79. package/dist/adapters/type-ast-bridge/load-typescript.mjs.map +1 -0
  80. package/dist/adapters/type-ast-bridge/print-typescript.cjs +21 -0
  81. package/dist/adapters/type-ast-bridge/print-typescript.cjs.map +1 -0
  82. package/dist/adapters/type-ast-bridge/print-typescript.mjs +19 -0
  83. package/dist/adapters/type-ast-bridge/print-typescript.mjs.map +1 -0
  84. package/dist/adapters/type-ast-bridge/typescript-raw-text.cjs +33 -0
  85. package/dist/adapters/type-ast-bridge/typescript-raw-text.cjs.map +1 -0
  86. package/dist/adapters/type-ast-bridge/typescript-raw-text.mjs +29 -0
  87. package/dist/adapters/type-ast-bridge/typescript-raw-text.mjs.map +1 -0
  88. package/dist/adapters/type-ast-bridge/typescript-to-ir.cjs +204 -0
  89. package/dist/adapters/type-ast-bridge/typescript-to-ir.cjs.map +1 -0
  90. package/dist/adapters/type-ast-bridge/typescript-to-ir.mjs +201 -0
  91. package/dist/adapters/type-ast-bridge/typescript-to-ir.mjs.map +1 -0
  92. package/dist/api/ast-to-string.cjs +39 -0
  93. package/dist/api/ast-to-string.cjs.map +1 -0
  94. package/dist/api/ast-to-string.mjs +37 -0
  95. package/dist/api/ast-to-string.mjs.map +1 -0
  96. package/dist/api/comment-header.cjs +11 -0
  97. package/dist/api/comment-header.cjs.map +1 -0
  98. package/dist/api/comment-header.mjs +9 -0
  99. package/dist/api/comment-header.mjs.map +1 -0
  100. package/dist/api/default-ports.cjs +38 -0
  101. package/dist/api/default-ports.cjs.map +1 -0
  102. package/dist/api/default-ports.mjs +28 -0
  103. package/dist/api/default-ports.mjs.map +1 -0
  104. package/dist/api/discriminator-enum.cjs +44 -0
  105. package/dist/api/discriminator-enum.cjs.map +1 -0
  106. package/dist/api/discriminator-enum.mjs +42 -0
  107. package/dist/api/discriminator-enum.mjs.map +1 -0
  108. package/dist/api/discriminator-scan.cjs +168 -0
  109. package/dist/api/discriminator-scan.cjs.map +1 -0
  110. package/dist/api/discriminator-scan.mjs +165 -0
  111. package/dist/api/discriminator-scan.mjs.map +1 -0
  112. package/dist/api/document-declarations.cjs +28 -0
  113. package/dist/api/document-declarations.cjs.map +1 -0
  114. package/dist/api/document-declarations.mjs +26 -0
  115. package/dist/api/document-declarations.mjs.map +1 -0
  116. package/dist/api/document-refs.cjs +53 -0
  117. package/dist/api/document-refs.cjs.map +1 -0
  118. package/dist/api/document-refs.mjs +50 -0
  119. package/dist/api/document-refs.mjs.map +1 -0
  120. package/dist/api/document-run.cjs +107 -0
  121. package/dist/api/document-run.cjs.map +1 -0
  122. package/dist/api/document-run.mjs +101 -0
  123. package/dist/api/document-run.mjs.map +1 -0
  124. package/dist/api/footer-entry.cjs +18 -0
  125. package/dist/api/footer-entry.cjs.map +1 -0
  126. package/dist/api/footer-entry.mjs +15 -0
  127. package/dist/api/footer-entry.mjs.map +1 -0
  128. package/dist/api/footer-sink.cjs +53 -0
  129. package/dist/api/footer-sink.cjs.map +1 -0
  130. package/dist/api/footer-sink.mjs +51 -0
  131. package/dist/api/footer-sink.mjs.map +1 -0
  132. package/dist/api/legacy-callback-warning.cjs +25 -0
  133. package/dist/api/legacy-callback-warning.cjs.map +1 -0
  134. package/dist/api/legacy-callback-warning.mjs +22 -0
  135. package/dist/api/legacy-callback-warning.mjs.map +1 -0
  136. package/dist/api/legacy-ts-helpers.cjs +203 -0
  137. package/dist/api/legacy-ts-helpers.cjs.map +1 -0
  138. package/dist/api/legacy-ts-helpers.mjs +187 -0
  139. package/dist/api/legacy-ts-helpers.mjs.map +1 -0
  140. package/dist/api/legacy-utils.cjs +65 -0
  141. package/dist/api/legacy-utils.cjs.map +1 -0
  142. package/dist/api/legacy-utils.mjs +50 -0
  143. package/dist/api/legacy-utils.mjs.map +1 -0
  144. package/dist/api/openapi-ts.cjs +40 -0
  145. package/dist/api/openapi-ts.cjs.map +1 -0
  146. package/dist/api/openapi-ts.mjs +34 -0
  147. package/dist/api/openapi-ts.mjs.map +1 -0
  148. package/dist/api/schema-callbacks.cjs +140 -0
  149. package/dist/api/schema-callbacks.cjs.map +1 -0
  150. package/dist/api/schema-callbacks.mjs +136 -0
  151. package/dist/api/schema-callbacks.mjs.map +1 -0
  152. package/dist/api/string-to-ast.cjs +21 -0
  153. package/dist/api/string-to-ast.cjs.map +1 -0
  154. package/dist/api/string-to-ast.mjs +18 -0
  155. package/dist/api/string-to-ast.mjs.map +1 -0
  156. package/dist/api/transform-context.cjs +82 -0
  157. package/dist/api/transform-context.cjs.map +1 -0
  158. package/dist/api/transform-context.mjs +65 -0
  159. package/dist/api/transform-context.mjs.map +1 -0
  160. package/dist/api/transform-schema.cjs +31 -0
  161. package/dist/api/transform-schema.cjs.map +1 -0
  162. package/dist/api/transform-schema.mjs +26 -0
  163. package/dist/api/transform-schema.mjs.map +1 -0
  164. package/dist/api/type-helpers.cjs +85 -0
  165. package/dist/api/type-helpers.cjs.map +1 -0
  166. package/dist/api/type-helpers.mjs +66 -0
  167. package/dist/api/type-helpers.mjs.map +1 -0
  168. package/dist/api/unsupported-feature-warnings.cjs +17 -0
  169. package/dist/api/unsupported-feature-warnings.cjs.map +1 -0
  170. package/dist/api/unsupported-feature-warnings.mjs +15 -0
  171. package/dist/api/unsupported-feature-warnings.mjs.map +1 -0
  172. package/dist/application/print/comment-writer.cjs +95 -0
  173. package/dist/application/print/comment-writer.cjs.map +1 -0
  174. package/dist/application/print/comment-writer.mjs +93 -0
  175. package/dist/application/print/comment-writer.mjs.map +1 -0
  176. package/dist/application/print/declaration-printer.cjs +83 -0
  177. package/dist/application/print/declaration-printer.cjs.map +1 -0
  178. package/dist/application/print/declaration-printer.mjs +81 -0
  179. package/dist/application/print/declaration-printer.mjs.map +1 -0
  180. package/dist/application/print/literal-text.cjs +52 -0
  181. package/dist/application/print/literal-text.cjs.map +1 -0
  182. package/dist/application/print/literal-text.mjs +48 -0
  183. package/dist/application/print/literal-text.mjs.map +1 -0
  184. package/dist/application/print/print-nodes.cjs +38 -0
  185. package/dist/application/print/print-nodes.cjs.map +1 -0
  186. package/dist/application/print/print-nodes.mjs +36 -0
  187. package/dist/application/print/print-nodes.mjs.map +1 -0
  188. package/dist/application/print/print-options.cjs +6 -0
  189. package/dist/application/print/print-options.cjs.map +1 -0
  190. package/dist/application/print/print-options.mjs +4 -0
  191. package/dist/application/print/print-options.mjs.map +1 -0
  192. package/dist/application/print/text-writer.cjs +63 -0
  193. package/dist/application/print/text-writer.cjs.map +1 -0
  194. package/dist/application/print/text-writer.mjs +60 -0
  195. package/dist/application/print/text-writer.mjs.map +1 -0
  196. package/dist/application/print/type-printer.cjs +214 -0
  197. package/dist/application/print/type-printer.cjs.map +1 -0
  198. package/dist/application/print/type-printer.mjs +210 -0
  199. package/dist/application/print/type-printer.mjs.map +1 -0
  200. package/dist/application/stack-overflow.cjs +36 -0
  201. package/dist/application/stack-overflow.cjs.map +1 -0
  202. package/dist/application/stack-overflow.mjs +31 -0
  203. package/dist/application/stack-overflow.mjs.map +1 -0
  204. package/dist/application/transform/document/components.cjs +104 -0
  205. package/dist/application/transform/document/components.cjs.map +1 -0
  206. package/dist/application/transform/document/components.mjs +102 -0
  207. package/dist/application/transform/document/components.mjs.map +1 -0
  208. package/dist/application/transform/document/defs-root.cjs +18 -0
  209. package/dist/application/transform/document/defs-root.cjs.map +1 -0
  210. package/dist/application/transform/document/defs-root.mjs +16 -0
  211. package/dist/application/transform/document/defs-root.mjs.map +1 -0
  212. package/dist/application/transform/document/document-member.cjs +13 -0
  213. package/dist/application/transform/document/document-member.cjs.map +1 -0
  214. package/dist/application/transform/document/document-member.mjs +11 -0
  215. package/dist/application/transform/document/document-member.mjs.map +1 -0
  216. package/dist/application/transform/document/document.cjs +86 -0
  217. package/dist/application/transform/document/document.cjs.map +1 -0
  218. package/dist/application/transform/document/document.mjs +83 -0
  219. package/dist/application/transform/document/document.mjs.map +1 -0
  220. package/dist/application/transform/document/header.cjs +27 -0
  221. package/dist/application/transform/document/header.cjs.map +1 -0
  222. package/dist/application/transform/document/header.mjs +25 -0
  223. package/dist/application/transform/document/header.mjs.map +1 -0
  224. package/dist/application/transform/document/kept-deprecated.cjs +96 -0
  225. package/dist/application/transform/document/kept-deprecated.cjs.map +1 -0
  226. package/dist/application/transform/document/kept-deprecated.mjs +94 -0
  227. package/dist/application/transform/document/kept-deprecated.mjs.map +1 -0
  228. package/dist/application/transform/document/media-type.cjs +42 -0
  229. package/dist/application/transform/document/media-type.cjs.map +1 -0
  230. package/dist/application/transform/document/media-type.mjs +38 -0
  231. package/dist/application/transform/document/media-type.mjs.map +1 -0
  232. package/dist/application/transform/document/operation.cjs +45 -0
  233. package/dist/application/transform/document/operation.cjs.map +1 -0
  234. package/dist/application/transform/document/operation.mjs +43 -0
  235. package/dist/application/transform/document/operation.mjs.map +1 -0
  236. package/dist/application/transform/document/parameter.cjs +25 -0
  237. package/dist/application/transform/document/parameter.cjs.map +1 -0
  238. package/dist/application/transform/document/parameter.mjs +23 -0
  239. package/dist/application/transform/document/parameter.mjs.map +1 -0
  240. package/dist/application/transform/document/parameters.cjs +114 -0
  241. package/dist/application/transform/document/parameters.cjs.map +1 -0
  242. package/dist/application/transform/document/parameters.mjs +112 -0
  243. package/dist/application/transform/document/parameters.mjs.map +1 -0
  244. package/dist/application/transform/document/path-item-conflicts.cjs +51 -0
  245. package/dist/application/transform/document/path-item-conflicts.cjs.map +1 -0
  246. package/dist/application/transform/document/path-item-conflicts.mjs +49 -0
  247. package/dist/application/transform/document/path-item-conflicts.mjs.map +1 -0
  248. package/dist/application/transform/document/path-item.cjs +82 -0
  249. package/dist/application/transform/document/path-item.cjs.map +1 -0
  250. package/dist/application/transform/document/path-item.mjs +80 -0
  251. package/dist/application/transform/document/path-item.mjs.map +1 -0
  252. package/dist/application/transform/document/path-key-overlaps.cjs +57 -0
  253. package/dist/application/transform/document/path-key-overlaps.cjs.map +1 -0
  254. package/dist/application/transform/document/path-key-overlaps.mjs +55 -0
  255. package/dist/application/transform/document/path-key-overlaps.mjs.map +1 -0
  256. package/dist/application/transform/document/paths-enum.cjs +75 -0
  257. package/dist/application/transform/document/paths-enum.cjs.map +1 -0
  258. package/dist/application/transform/document/paths-enum.mjs +72 -0
  259. package/dist/application/transform/document/paths-enum.mjs.map +1 -0
  260. package/dist/application/transform/document/paths.cjs +127 -0
  261. package/dist/application/transform/document/paths.cjs.map +1 -0
  262. package/dist/application/transform/document/paths.mjs +125 -0
  263. package/dist/application/transform/document/paths.mjs.map +1 -0
  264. package/dist/application/transform/document/request-body.cjs +36 -0
  265. package/dist/application/transform/document/request-body.cjs.map +1 -0
  266. package/dist/application/transform/document/request-body.mjs +34 -0
  267. package/dist/application/transform/document/request-body.mjs.map +1 -0
  268. package/dist/application/transform/document/response.cjs +59 -0
  269. package/dist/application/transform/document/response.cjs.map +1 -0
  270. package/dist/application/transform/document/response.mjs +57 -0
  271. package/dist/application/transform/document/response.mjs.map +1 -0
  272. package/dist/application/transform/document/responses.cjs +23 -0
  273. package/dist/application/transform/document/responses.cjs.map +1 -0
  274. package/dist/application/transform/document/responses.mjs +21 -0
  275. package/dist/application/transform/document/responses.mjs.map +1 -0
  276. package/dist/application/transform/document/root-type-aliases.cjs +69 -0
  277. package/dist/application/transform/document/root-type-aliases.cjs.map +1 -0
  278. package/dist/application/transform/document/root-type-aliases.mjs +65 -0
  279. package/dist/application/transform/document/root-type-aliases.mjs.map +1 -0
  280. package/dist/application/transform/document/webhooks.cjs +19 -0
  281. package/dist/application/transform/document/webhooks.cjs.map +1 -0
  282. package/dist/application/transform/document/webhooks.mjs +17 -0
  283. package/dist/application/transform/document/webhooks.mjs.map +1 -0
  284. package/dist/application/transform/document-entries.cjs +17 -0
  285. package/dist/application/transform/document-entries.cjs.map +1 -0
  286. package/dist/application/transform/document-entries.mjs +14 -0
  287. package/dist/application/transform/document-entries.mjs.map +1 -0
  288. package/dist/application/transform/footer/document-footer.cjs +88 -0
  289. package/dist/application/transform/footer/document-footer.cjs.map +1 -0
  290. package/dist/application/transform/footer/document-footer.mjs +86 -0
  291. package/dist/application/transform/footer/document-footer.mjs.map +1 -0
  292. package/dist/application/transform/footer/enum-naming.cjs +121 -0
  293. package/dist/application/transform/footer/enum-naming.cjs.map +1 -0
  294. package/dist/application/transform/footer/enum-naming.mjs +115 -0
  295. package/dist/application/transform/footer/enum-naming.mjs.map +1 -0
  296. package/dist/application/transform/helper-types.cjs +68 -0
  297. package/dist/application/transform/helper-types.cjs.map +1 -0
  298. package/dist/application/transform/helper-types.mjs +65 -0
  299. package/dist/application/transform/helper-types.mjs.map +1 -0
  300. package/dist/application/transform/literal-type.cjs +36 -0
  301. package/dist/application/transform/literal-type.cjs.map +1 -0
  302. package/dist/application/transform/literal-type.mjs +34 -0
  303. package/dist/application/transform/literal-type.mjs.map +1 -0
  304. package/dist/application/transform/numbered-names.cjs +18 -0
  305. package/dist/application/transform/numbered-names.cjs.map +1 -0
  306. package/dist/application/transform/numbered-names.mjs +16 -0
  307. package/dist/application/transform/numbered-names.mjs.map +1 -0
  308. package/dist/application/transform/ref-type.cjs +57 -0
  309. package/dist/application/transform/ref-type.cjs.map +1 -0
  310. package/dist/application/transform/ref-type.mjs +54 -0
  311. package/dist/application/transform/ref-type.mjs.map +1 -0
  312. package/dist/application/transform/schema/array-type.cjs +105 -0
  313. package/dist/application/transform/schema/array-type.cjs.map +1 -0
  314. package/dist/application/transform/schema/array-type.mjs +103 -0
  315. package/dist/application/transform/schema/array-type.mjs.map +1 -0
  316. package/dist/application/transform/schema/composition-type.cjs +107 -0
  317. package/dist/application/transform/schema/composition-type.cjs.map +1 -0
  318. package/dist/application/transform/schema/composition-type.mjs +105 -0
  319. package/dist/application/transform/schema/composition-type.mjs.map +1 -0
  320. package/dist/application/transform/schema/core-type.cjs +84 -0
  321. package/dist/application/transform/schema/core-type.cjs.map +1 -0
  322. package/dist/application/transform/schema/core-type.mjs +82 -0
  323. package/dist/application/transform/schema/core-type.mjs.map +1 -0
  324. package/dist/application/transform/schema/discriminator-property.cjs +21 -0
  325. package/dist/application/transform/schema/discriminator-property.cjs.map +1 -0
  326. package/dist/application/transform/schema/discriminator-property.mjs +19 -0
  327. package/dist/application/transform/schema/discriminator-property.mjs.map +1 -0
  328. package/dist/application/transform/schema/enum-rule.cjs +107 -0
  329. package/dist/application/transform/schema/enum-rule.cjs.map +1 -0
  330. package/dist/application/transform/schema/enum-rule.mjs +105 -0
  331. package/dist/application/transform/schema/enum-rule.mjs.map +1 -0
  332. package/dist/application/transform/schema/object-type.cjs +173 -0
  333. package/dist/application/transform/schema/object-type.cjs.map +1 -0
  334. package/dist/application/transform/schema/object-type.mjs +170 -0
  335. package/dist/application/transform/schema/object-type.mjs.map +1 -0
  336. package/dist/application/transform/schema/presence-members.cjs +59 -0
  337. package/dist/application/transform/schema/presence-members.cjs.map +1 -0
  338. package/dist/application/transform/schema/presence-members.mjs +57 -0
  339. package/dist/application/transform/schema/presence-members.mjs.map +1 -0
  340. package/dist/application/transform/schema/schema-transform.cjs +72 -0
  341. package/dist/application/transform/schema/schema-transform.cjs.map +1 -0
  342. package/dist/application/transform/schema/schema-transform.mjs +68 -0
  343. package/dist/application/transform/schema/schema-transform.mjs.map +1 -0
  344. package/dist/application/transform/schema/unevaluated-properties.cjs +61 -0
  345. package/dist/application/transform/schema/unevaluated-properties.cjs.map +1 -0
  346. package/dist/application/transform/schema/unevaluated-properties.mjs +59 -0
  347. package/dist/application/transform/schema/unevaluated-properties.mjs.map +1 -0
  348. package/dist/application/transform/schema-comment.cjs +84 -0
  349. package/dist/application/transform/schema-comment.cjs.map +1 -0
  350. package/dist/application/transform/schema-comment.mjs +81 -0
  351. package/dist/application/transform/schema-comment.mjs.map +1 -0
  352. package/dist/application/transform/shared-types.cjs +8 -0
  353. package/dist/application/transform/shared-types.cjs.map +1 -0
  354. package/dist/application/transform/shared-types.mjs +6 -0
  355. package/dist/application/transform/shared-types.mjs.map +1 -0
  356. package/dist/application/transform/type-combinators.cjs +49 -0
  357. package/dist/application/transform/type-combinators.cjs.map +1 -0
  358. package/dist/application/transform/type-combinators.mjs +42 -0
  359. package/dist/application/transform/type-combinators.mjs.map +1 -0
  360. package/dist/cli/cli-arguments.cjs +137 -0
  361. package/dist/cli/cli-arguments.cjs.map +1 -0
  362. package/dist/cli/cli-arguments.mjs +129 -0
  363. package/dist/cli/cli-arguments.mjs.map +1 -0
  364. package/dist/cli/cli-errors.cjs +80 -0
  365. package/dist/cli/cli-errors.cjs.map +1 -0
  366. package/dist/cli/cli-errors.mjs +76 -0
  367. package/dist/cli/cli-errors.mjs.map +1 -0
  368. package/dist/cli/cli-output.cjs +37 -0
  369. package/dist/cli/cli-output.cjs.map +1 -0
  370. package/dist/cli/cli-output.mjs +30 -0
  371. package/dist/cli/cli-output.mjs.map +1 -0
  372. package/dist/cli/docs-links.cjs +6 -0
  373. package/dist/cli/docs-links.cjs.map +1 -0
  374. package/dist/cli/docs-links.mjs +4 -0
  375. package/dist/cli/docs-links.mjs.map +1 -0
  376. package/dist/cli/fix-option.cjs +19 -0
  377. package/dist/cli/fix-option.cjs.map +1 -0
  378. package/dist/cli/fix-option.mjs +16 -0
  379. package/dist/cli/fix-option.mjs.map +1 -0
  380. package/dist/cli/help-text.cjs +44 -0
  381. package/dist/cli/help-text.cjs.map +1 -0
  382. package/dist/cli/help-text.mjs +42 -0
  383. package/dist/cli/help-text.mjs.map +1 -0
  384. package/dist/cli/main.cjs +62 -0
  385. package/dist/cli/main.cjs.map +1 -0
  386. package/dist/cli/main.d.cts +2 -0
  387. package/dist/cli/main.d.mts +2 -0
  388. package/dist/cli/main.d.ts +2 -0
  389. package/dist/cli/main.mjs +54 -0
  390. package/dist/cli/main.mjs.map +1 -0
  391. package/dist/cli/redocly-apis.cjs +65 -0
  392. package/dist/cli/redocly-apis.cjs.map +1 -0
  393. package/dist/cli/redocly-apis.mjs +62 -0
  394. package/dist/cli/redocly-apis.mjs.map +1 -0
  395. package/dist/cli/ref-limits.cjs +14 -0
  396. package/dist/cli/ref-limits.cjs.map +1 -0
  397. package/dist/cli/ref-limits.mjs +12 -0
  398. package/dist/cli/ref-limits.mjs.map +1 -0
  399. package/dist/cli/run-cli.cjs +100 -0
  400. package/dist/cli/run-cli.cjs.map +1 -0
  401. package/dist/cli/run-cli.mjs +98 -0
  402. package/dist/cli/run-cli.mjs.map +1 -0
  403. package/dist/domain/assert-never.cjs +8 -0
  404. package/dist/domain/assert-never.cjs.map +1 -0
  405. package/dist/domain/assert-never.mjs +6 -0
  406. package/dist/domain/assert-never.mjs.map +1 -0
  407. package/dist/domain/errors.cjs +50 -0
  408. package/dist/domain/errors.cjs.map +1 -0
  409. package/dist/domain/errors.mjs +46 -0
  410. package/dist/domain/errors.mjs.map +1 -0
  411. package/dist/domain/ir/constructors.cjs +89 -0
  412. package/dist/domain/ir/constructors.cjs.map +1 -0
  413. package/dist/domain/ir/constructors.mjs +71 -0
  414. package/dist/domain/ir/constructors.mjs.map +1 -0
  415. package/dist/domain/ir/identifier-text.cjs +29 -0
  416. package/dist/domain/ir/identifier-text.cjs.map +1 -0
  417. package/dist/domain/ir/identifier-text.mjs +25 -0
  418. package/dist/domain/ir/identifier-text.mjs.map +1 -0
  419. package/dist/domain/ir/newer-identifier-ranges.cjs +109 -0
  420. package/dist/domain/ir/newer-identifier-ranges.cjs.map +1 -0
  421. package/dist/domain/ir/newer-identifier-ranges.mjs +106 -0
  422. package/dist/domain/ir/newer-identifier-ranges.mjs.map +1 -0
  423. package/dist/domain/ir/normalize.cjs +32 -0
  424. package/dist/domain/ir/normalize.cjs.map +1 -0
  425. package/dist/domain/ir/normalize.mjs +29 -0
  426. package/dist/domain/ir/normalize.mjs.map +1 -0
  427. package/dist/domain/ir/property-name.cjs +19 -0
  428. package/dist/domain/ir/property-name.cjs.map +1 -0
  429. package/dist/domain/ir/property-name.mjs +16 -0
  430. package/dist/domain/ir/property-name.mjs.map +1 -0
  431. package/dist/domain/ir/raw-text-escapes.cjs +25 -0
  432. package/dist/domain/ir/raw-text-escapes.cjs.map +1 -0
  433. package/dist/domain/ir/raw-text-escapes.mjs +22 -0
  434. package/dist/domain/ir/raw-text-escapes.mjs.map +1 -0
  435. package/dist/domain/openapi/alias-expansion.cjs +50 -0
  436. package/dist/domain/openapi/alias-expansion.cjs.map +1 -0
  437. package/dist/domain/openapi/alias-expansion.mjs +45 -0
  438. package/dist/domain/openapi/alias-expansion.mjs.map +1 -0
  439. package/dist/domain/openapi/binary-content.cjs +48 -0
  440. package/dist/domain/openapi/binary-content.cjs.map +1 -0
  441. package/dist/domain/openapi/binary-content.mjs +45 -0
  442. package/dist/domain/openapi/binary-content.mjs.map +1 -0
  443. package/dist/domain/openapi/components-object.cjs +29 -0
  444. package/dist/domain/openapi/components-object.cjs.map +1 -0
  445. package/dist/domain/openapi/components-object.mjs +24 -0
  446. package/dist/domain/openapi/components-object.mjs.map +1 -0
  447. package/dist/domain/openapi/json-pointer.cjs +31 -0
  448. package/dist/domain/openapi/json-pointer.cjs.map +1 -0
  449. package/dist/domain/openapi/json-pointer.mjs +27 -0
  450. package/dist/domain/openapi/json-pointer.mjs.map +1 -0
  451. package/dist/domain/openapi/media-type-object.cjs +14 -0
  452. package/dist/domain/openapi/media-type-object.cjs.map +1 -0
  453. package/dist/domain/openapi/media-type-object.mjs +11 -0
  454. package/dist/domain/openapi/media-type-object.mjs.map +1 -0
  455. package/dist/domain/openapi/parameter-object.cjs +13 -0
  456. package/dist/domain/openapi/parameter-object.cjs.map +1 -0
  457. package/dist/domain/openapi/parameter-object.mjs +10 -0
  458. package/dist/domain/openapi/parameter-object.mjs.map +1 -0
  459. package/dist/domain/openapi/path-item-object.cjs +35 -0
  460. package/dist/domain/openapi/path-item-object.cjs.map +1 -0
  461. package/dist/domain/openapi/path-item-object.mjs +30 -0
  462. package/dist/domain/openapi/path-item-object.mjs.map +1 -0
  463. package/dist/domain/openapi/unsupported-features.cjs +87 -0
  464. package/dist/domain/openapi/unsupported-features.cjs.map +1 -0
  465. package/dist/domain/openapi/unsupported-features.mjs +84 -0
  466. package/dist/domain/openapi/unsupported-features.mjs.map +1 -0
  467. package/dist/domain/output-fixes.cjs +66 -0
  468. package/dist/domain/output-fixes.cjs.map +1 -0
  469. package/dist/domain/output-fixes.mjs +59 -0
  470. package/dist/domain/output-fixes.mjs.map +1 -0
  471. package/dist/index.cjs +98 -0
  472. package/dist/index.cjs.map +1 -0
  473. package/dist/index.d.cts +812 -0
  474. package/dist/index.d.mts +812 -0
  475. package/dist/index.d.ts +812 -0
  476. package/dist/index.mjs +27 -0
  477. package/dist/index.mjs.map +1 -0
  478. package/dist/transform/components-object.cjs +14 -0
  479. package/dist/transform/components-object.cjs.map +1 -0
  480. package/dist/transform/components-object.mjs +10 -0
  481. package/dist/transform/components-object.mjs.map +1 -0
  482. package/dist/transform/header-object.cjs +12 -0
  483. package/dist/transform/header-object.cjs.map +1 -0
  484. package/dist/transform/header-object.mjs +10 -0
  485. package/dist/transform/header-object.mjs.map +1 -0
  486. package/dist/transform/media-type-object.cjs +12 -0
  487. package/dist/transform/media-type-object.cjs.map +1 -0
  488. package/dist/transform/media-type-object.mjs +10 -0
  489. package/dist/transform/media-type-object.mjs.map +1 -0
  490. package/dist/transform/operation-object.cjs +26 -0
  491. package/dist/transform/operation-object.cjs.map +1 -0
  492. package/dist/transform/operation-object.mjs +21 -0
  493. package/dist/transform/operation-object.mjs.map +1 -0
  494. package/dist/transform/parameter-object.cjs +12 -0
  495. package/dist/transform/parameter-object.cjs.map +1 -0
  496. package/dist/transform/parameter-object.mjs +10 -0
  497. package/dist/transform/parameter-object.mjs.map +1 -0
  498. package/dist/transform/path-item-object.cjs +12 -0
  499. package/dist/transform/path-item-object.cjs.map +1 -0
  500. package/dist/transform/path-item-object.mjs +10 -0
  501. package/dist/transform/path-item-object.mjs.map +1 -0
  502. package/dist/transform/paths-object.cjs +11 -0
  503. package/dist/transform/paths-object.cjs.map +1 -0
  504. package/dist/transform/paths-object.mjs +9 -0
  505. package/dist/transform/paths-object.mjs.map +1 -0
  506. package/dist/transform/request-body-object.cjs +12 -0
  507. package/dist/transform/request-body-object.cjs.map +1 -0
  508. package/dist/transform/request-body-object.mjs +10 -0
  509. package/dist/transform/request-body-object.mjs.map +1 -0
  510. package/dist/transform/response-object.cjs +12 -0
  511. package/dist/transform/response-object.cjs.map +1 -0
  512. package/dist/transform/response-object.mjs +10 -0
  513. package/dist/transform/response-object.mjs.map +1 -0
  514. package/dist/transform/responses-object.cjs +12 -0
  515. package/dist/transform/responses-object.cjs.map +1 -0
  516. package/dist/transform/responses-object.mjs +10 -0
  517. package/dist/transform/responses-object.mjs.map +1 -0
  518. package/dist/transform/schema-object.cjs +21 -0
  519. package/dist/transform/schema-object.cjs.map +1 -0
  520. package/dist/transform/schema-object.mjs +16 -0
  521. package/dist/transform/schema-object.mjs.map +1 -0
  522. package/package.json +115 -4
  523. package/src/adapters/node-file-system/node-file-system.ts +44 -0
  524. package/src/adapters/redocly-loader/alias-limit.ts +20 -0
  525. package/src/adapters/redocly-loader/allowed-hosts.ts +62 -0
  526. package/src/adapters/redocly-loader/bundled-ref-repair.ts +65 -0
  527. package/src/adapters/redocly-loader/malformed-refs.ts +61 -0
  528. package/src/adapters/redocly-loader/redocly-config-source.ts +43 -0
  529. package/src/adapters/redocly-loader/redocly-schema-loader.ts +246 -0
  530. package/src/adapters/redocly-loader/ref-access.ts +146 -0
  531. package/src/adapters/redocly-loader/ref-holders.ts +43 -0
  532. package/src/adapters/redocly-loader/remote-fetch.ts +104 -0
  533. package/src/adapters/redocly-loader/schema-load-errors.ts +124 -0
  534. package/src/adapters/redocly-loader/schema-source.ts +151 -0
  535. package/src/adapters/redocly-loader/unsupported-keys.ts +102 -0
  536. package/src/adapters/terminal-logger/terminal-logger.ts +98 -0
  537. package/src/adapters/type-ast-bridge/footer-nodes.ts +38 -0
  538. package/src/adapters/type-ast-bridge/ir-declarations-to-typescript.ts +100 -0
  539. package/src/adapters/type-ast-bridge/ir-to-typescript.ts +220 -0
  540. package/src/adapters/type-ast-bridge/lazy-node.ts +24 -0
  541. package/src/adapters/type-ast-bridge/load-typescript.ts +84 -0
  542. package/src/adapters/type-ast-bridge/print-typescript.ts +33 -0
  543. package/src/adapters/type-ast-bridge/typescript-raw-text.ts +49 -0
  544. package/src/adapters/type-ast-bridge/typescript-to-ir.ts +280 -0
  545. package/src/adapters/type-ast-bridge/typescript-types.ts +8 -0
  546. package/src/api/ast-to-string.ts +59 -0
  547. package/src/api/comment-header.ts +7 -0
  548. package/src/api/default-ports.ts +44 -0
  549. package/src/api/discriminator-enum.ts +76 -0
  550. package/src/api/discriminator-scan.ts +272 -0
  551. package/src/api/document-declarations.ts +41 -0
  552. package/src/api/document-refs.ts +71 -0
  553. package/src/api/document-run.ts +159 -0
  554. package/src/api/footer-entry.ts +23 -0
  555. package/src/api/footer-sink.ts +67 -0
  556. package/src/api/legacy-callback-warning.ts +29 -0
  557. package/src/api/legacy-ts-helpers.ts +311 -0
  558. package/src/api/legacy-utils.ts +118 -0
  559. package/src/api/openapi-ts.ts +62 -0
  560. package/src/api/schema-callbacks.ts +211 -0
  561. package/src/api/string-to-ast.ts +27 -0
  562. package/src/api/transform-context.ts +87 -0
  563. package/src/api/transform-schema.ts +39 -0
  564. package/src/api/type-helpers.ts +130 -0
  565. package/src/api/unsupported-feature-warnings.ts +26 -0
  566. package/src/application/ports/file-system.ts +12 -0
  567. package/src/application/ports/logger.ts +16 -0
  568. package/src/application/ports/redocly-config-source.ts +16 -0
  569. package/src/application/ports/schema-loader.ts +32 -0
  570. package/src/application/print/comment-writer.ts +91 -0
  571. package/src/application/print/declaration-printer.ts +100 -0
  572. package/src/application/print/literal-text.ts +62 -0
  573. package/src/application/print/print-nodes.ts +62 -0
  574. package/src/application/print/print-options.ts +11 -0
  575. package/src/application/print/text-writer.ts +83 -0
  576. package/src/application/print/type-printer.ts +281 -0
  577. package/src/application/stack-overflow.ts +54 -0
  578. package/src/application/transform/document/components.ts +189 -0
  579. package/src/application/transform/document/defs-root.ts +25 -0
  580. package/src/application/transform/document/document-member.ts +20 -0
  581. package/src/application/transform/document/document.ts +157 -0
  582. package/src/application/transform/document/header.ts +34 -0
  583. package/src/application/transform/document/kept-deprecated.ts +135 -0
  584. package/src/application/transform/document/media-type.ts +78 -0
  585. package/src/application/transform/document/operation.ts +64 -0
  586. package/src/application/transform/document/parameter.ts +45 -0
  587. package/src/application/transform/document/parameters.ts +200 -0
  588. package/src/application/transform/document/path-item-conflicts.ts +79 -0
  589. package/src/application/transform/document/path-item.ts +168 -0
  590. package/src/application/transform/document/path-key-overlaps.ts +112 -0
  591. package/src/application/transform/document/paths-enum.ts +127 -0
  592. package/src/application/transform/document/paths.ts +211 -0
  593. package/src/application/transform/document/request-body.ts +50 -0
  594. package/src/application/transform/document/response.ts +109 -0
  595. package/src/application/transform/document/responses.ts +29 -0
  596. package/src/application/transform/document/root-type-aliases.ts +106 -0
  597. package/src/application/transform/document/webhooks.ts +22 -0
  598. package/src/application/transform/document-entries.ts +28 -0
  599. package/src/application/transform/footer/document-footer.ts +127 -0
  600. package/src/application/transform/footer/enum-naming.ts +181 -0
  601. package/src/application/transform/helper-types.ts +92 -0
  602. package/src/application/transform/literal-type.ts +54 -0
  603. package/src/application/transform/numbered-names.ts +20 -0
  604. package/src/application/transform/ref-type.ts +97 -0
  605. package/src/application/transform/schema/array-type.ts +152 -0
  606. package/src/application/transform/schema/composition-type.ts +183 -0
  607. package/src/application/transform/schema/core-type.ts +115 -0
  608. package/src/application/transform/schema/discriminator-property.ts +28 -0
  609. package/src/application/transform/schema/enum-rule.ts +157 -0
  610. package/src/application/transform/schema/object-type.ts +271 -0
  611. package/src/application/transform/schema/presence-members.ts +96 -0
  612. package/src/application/transform/schema/schema-context.ts +110 -0
  613. package/src/application/transform/schema/schema-rule.ts +29 -0
  614. package/src/application/transform/schema/schema-transform.ts +99 -0
  615. package/src/application/transform/schema/unevaluated-properties.ts +105 -0
  616. package/src/application/transform/schema-comment.ts +116 -0
  617. package/src/application/transform/shared-types.ts +9 -0
  618. package/src/application/transform/transform-context.ts +51 -0
  619. package/src/application/transform/type-combinators.ts +57 -0
  620. package/src/cli/cli-arguments.ts +198 -0
  621. package/src/cli/cli-dependencies.ts +42 -0
  622. package/src/cli/cli-errors.ts +125 -0
  623. package/src/cli/cli-output.ts +53 -0
  624. package/src/cli/docs-links.ts +6 -0
  625. package/src/cli/fix-option.ts +29 -0
  626. package/src/cli/help-text.ts +52 -0
  627. package/src/cli/main.ts +67 -0
  628. package/src/cli/redocly-apis.ts +91 -0
  629. package/src/cli/ref-limits.ts +16 -0
  630. package/src/cli/run-cli.ts +114 -0
  631. package/src/domain/assert-never.ts +8 -0
  632. package/src/domain/errors.ts +74 -0
  633. package/src/domain/ir/constructors.ts +137 -0
  634. package/src/domain/ir/identifier-text.ts +49 -0
  635. package/src/domain/ir/newer-identifier-ranges.ts +109 -0
  636. package/src/domain/ir/nodes.ts +224 -0
  637. package/src/domain/ir/normalize.ts +51 -0
  638. package/src/domain/ir/property-name.ts +28 -0
  639. package/src/domain/ir/raw-text-escapes.ts +37 -0
  640. package/src/domain/openapi/alias-expansion.ts +72 -0
  641. package/src/domain/openapi/binary-content.ts +74 -0
  642. package/src/domain/openapi/components-object.ts +52 -0
  643. package/src/domain/openapi/document-object.ts +12 -0
  644. package/src/domain/openapi/header-object.ts +9 -0
  645. package/src/domain/openapi/json-pointer.ts +46 -0
  646. package/src/domain/openapi/media-type-object.ts +26 -0
  647. package/src/domain/openapi/operation-object.ts +13 -0
  648. package/src/domain/openapi/parameter-object.ts +30 -0
  649. package/src/domain/openapi/path-item-object.ts +70 -0
  650. package/src/domain/openapi/request-body-object.ts +7 -0
  651. package/src/domain/openapi/response-object.ts +14 -0
  652. package/src/domain/openapi/schema-object.ts +59 -0
  653. package/src/domain/openapi/unsupported-features.ts +139 -0
  654. package/src/domain/output-fixes.ts +95 -0
  655. package/src/index.ts +67 -0
  656. package/src/transform/components-object.ts +25 -0
  657. package/src/transform/header-object.ts +19 -0
  658. package/src/transform/media-type-object.ts +19 -0
  659. package/src/transform/operation-object.ts +36 -0
  660. package/src/transform/parameter-object.ts +19 -0
  661. package/src/transform/parameters-array.ts +19 -0
  662. package/src/transform/path-item-object.ts +22 -0
  663. package/src/transform/paths-enum.ts +8 -0
  664. package/src/transform/paths-object.ts +15 -0
  665. package/src/transform/request-body-object.ts +19 -0
  666. package/src/transform/response-object.ts +19 -0
  667. package/src/transform/responses-object.ts +19 -0
  668. package/src/transform/schema-object.ts +36 -0
  669. package/src/transform/webhooks-object.ts +15 -0
  670. package/src/types/generator-options.ts +267 -0
  671. package/src/types/openapi-common.ts +100 -0
  672. package/src/types/openapi-document.ts +196 -0
  673. package/src/types/openapi-path-item.ts +130 -0
  674. package/src/types/openapi-request.ts +209 -0
  675. package/src/types/openapi-response.ts +81 -0
  676. package/src/types/openapi-schema.ts +169 -0
  677. package/src/types/openapi-security.ts +116 -0
  678. package/src/types.ts +12 -0
@@ -0,0 +1,214 @@
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
+ writeType(writer, element.type);
89
+ }
90
+ function writeObjectType(writer, members) {
91
+ writer.write("{");
92
+ writeMultiLineList(
93
+ writer,
94
+ members,
95
+ { delimiter: "", isLineBreakWhenEmpty: false },
96
+ (member) => writeMember(writer, member)
97
+ );
98
+ writer.write("}");
99
+ }
100
+ function writeTupleType(writer, elements) {
101
+ writer.write("[");
102
+ writeMultiLineList(
103
+ writer,
104
+ elements,
105
+ { delimiter: ",", isLineBreakWhenEmpty: true },
106
+ (element) => writeTupleElement(writer, element)
107
+ );
108
+ writer.write("]");
109
+ }
110
+ function writeReferenceType(writer, name, typeArguments) {
111
+ writer.write(name);
112
+ if (typeArguments.length > 0) {
113
+ writer.write("<");
114
+ writeInlineList(writer, typeArguments, ", ", (argument) => writeType(writer, argument));
115
+ writer.write(">");
116
+ }
117
+ }
118
+ function writeIndexedAccessType(writer, type) {
119
+ writeTypeIn(writer, type.object, needsParensAsPostfixOperand);
120
+ writer.write("[");
121
+ writeType(writer, type.index);
122
+ writer.write("]");
123
+ }
124
+ function writeConstituents(writer, types, separator) {
125
+ writeInlineList(
126
+ writer,
127
+ types,
128
+ separator,
129
+ (member) => writeTypeIn(writer, member, needsParensAsConstituent)
130
+ );
131
+ }
132
+ function printLeafType(type) {
133
+ switch (type.kind) {
134
+ case "keyword":
135
+ return type.keyword;
136
+ case "stringLiteral":
137
+ return literalText.printStringLiteral(type.value, type.encoding);
138
+ case "numberLiteral":
139
+ return literalText.printNumberLiteral(type.value);
140
+ case "booleanLiteral":
141
+ return String(type.value);
142
+ default:
143
+ return assertNever.assertNever(type);
144
+ }
145
+ }
146
+ function writeRawType(writer, text) {
147
+ text.split("\n").forEach((line, index) => {
148
+ if (index > 0) {
149
+ writer.rawWrite(writer.options.newLine);
150
+ }
151
+ writer.write(line);
152
+ });
153
+ }
154
+ function writeArrayType(writer, element) {
155
+ writeTypeIn(writer, element, needsParensAsPostfixOperand);
156
+ writer.write("[]");
157
+ }
158
+ function writeReadonlyType(writer, operand) {
159
+ writer.write("readonly ");
160
+ writeTypeIn(writer, operand, needsParensAsReadonlyOperand);
161
+ }
162
+ function writeOperatorType(writer, type) {
163
+ if (type.kind === "array") {
164
+ writeArrayType(writer, type.element);
165
+ } else if (type.kind === "indexedAccess") {
166
+ writeIndexedAccessType(writer, type);
167
+ } else {
168
+ writeReadonlyType(writer, type.type);
169
+ }
170
+ }
171
+ const CONSTITUENT_SEPARATORS = { union: " | ", intersection: " & " };
172
+ function writeLeafType(writer, type) {
173
+ if (type.kind === "raw") {
174
+ writeRawType(writer, type.text);
175
+ } else {
176
+ writer.write(printLeafType(type));
177
+ }
178
+ }
179
+ function writeType(writer, type) {
180
+ switch (type.kind) {
181
+ case "keyword":
182
+ case "stringLiteral":
183
+ case "numberLiteral":
184
+ case "booleanLiteral":
185
+ case "raw":
186
+ writeLeafType(writer, type);
187
+ break;
188
+ case "reference":
189
+ writeReferenceType(writer, type.name, type.typeArguments);
190
+ break;
191
+ case "array":
192
+ case "indexedAccess":
193
+ case "readonly":
194
+ writeOperatorType(writer, type);
195
+ break;
196
+ case "union":
197
+ case "intersection":
198
+ writeConstituents(writer, type.types, CONSTITUENT_SEPARATORS[type.kind]);
199
+ break;
200
+ case "object":
201
+ writeObjectType(writer, type.members);
202
+ break;
203
+ case "tuple":
204
+ writeTupleType(writer, type.elements);
205
+ break;
206
+ default:
207
+ assertNever.assertNever(type);
208
+ }
209
+ }
210
+
211
+ exports.writeMember = writeMember;
212
+ exports.writeMultiLineList = writeMultiLineList;
213
+ exports.writeType = writeType;
214
+ //# 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 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,210 @@
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
+ writeType(writer, element.type);
87
+ }
88
+ function writeObjectType(writer, members) {
89
+ writer.write("{");
90
+ writeMultiLineList(
91
+ writer,
92
+ members,
93
+ { delimiter: "", isLineBreakWhenEmpty: false },
94
+ (member) => writeMember(writer, member)
95
+ );
96
+ writer.write("}");
97
+ }
98
+ function writeTupleType(writer, elements) {
99
+ writer.write("[");
100
+ writeMultiLineList(
101
+ writer,
102
+ elements,
103
+ { delimiter: ",", isLineBreakWhenEmpty: true },
104
+ (element) => writeTupleElement(writer, element)
105
+ );
106
+ writer.write("]");
107
+ }
108
+ function writeReferenceType(writer, name, typeArguments) {
109
+ writer.write(name);
110
+ if (typeArguments.length > 0) {
111
+ writer.write("<");
112
+ writeInlineList(writer, typeArguments, ", ", (argument) => writeType(writer, argument));
113
+ writer.write(">");
114
+ }
115
+ }
116
+ function writeIndexedAccessType(writer, type) {
117
+ writeTypeIn(writer, type.object, needsParensAsPostfixOperand);
118
+ writer.write("[");
119
+ writeType(writer, type.index);
120
+ writer.write("]");
121
+ }
122
+ function writeConstituents(writer, types, separator) {
123
+ writeInlineList(
124
+ writer,
125
+ types,
126
+ separator,
127
+ (member) => writeTypeIn(writer, member, needsParensAsConstituent)
128
+ );
129
+ }
130
+ function printLeafType(type) {
131
+ switch (type.kind) {
132
+ case "keyword":
133
+ return type.keyword;
134
+ case "stringLiteral":
135
+ return printStringLiteral(type.value, type.encoding);
136
+ case "numberLiteral":
137
+ return printNumberLiteral(type.value);
138
+ case "booleanLiteral":
139
+ return String(type.value);
140
+ default:
141
+ return assertNever(type);
142
+ }
143
+ }
144
+ function writeRawType(writer, text) {
145
+ text.split("\n").forEach((line, index) => {
146
+ if (index > 0) {
147
+ writer.rawWrite(writer.options.newLine);
148
+ }
149
+ writer.write(line);
150
+ });
151
+ }
152
+ function writeArrayType(writer, element) {
153
+ writeTypeIn(writer, element, needsParensAsPostfixOperand);
154
+ writer.write("[]");
155
+ }
156
+ function writeReadonlyType(writer, operand) {
157
+ writer.write("readonly ");
158
+ writeTypeIn(writer, operand, needsParensAsReadonlyOperand);
159
+ }
160
+ function writeOperatorType(writer, type) {
161
+ if (type.kind === "array") {
162
+ writeArrayType(writer, type.element);
163
+ } else if (type.kind === "indexedAccess") {
164
+ writeIndexedAccessType(writer, type);
165
+ } else {
166
+ writeReadonlyType(writer, type.type);
167
+ }
168
+ }
169
+ const CONSTITUENT_SEPARATORS = { union: " | ", intersection: " & " };
170
+ function writeLeafType(writer, type) {
171
+ if (type.kind === "raw") {
172
+ writeRawType(writer, type.text);
173
+ } else {
174
+ writer.write(printLeafType(type));
175
+ }
176
+ }
177
+ function writeType(writer, type) {
178
+ switch (type.kind) {
179
+ case "keyword":
180
+ case "stringLiteral":
181
+ case "numberLiteral":
182
+ case "booleanLiteral":
183
+ case "raw":
184
+ writeLeafType(writer, type);
185
+ break;
186
+ case "reference":
187
+ writeReferenceType(writer, type.name, type.typeArguments);
188
+ break;
189
+ case "array":
190
+ case "indexedAccess":
191
+ case "readonly":
192
+ writeOperatorType(writer, type);
193
+ break;
194
+ case "union":
195
+ case "intersection":
196
+ writeConstituents(writer, type.types, CONSTITUENT_SEPARATORS[type.kind]);
197
+ break;
198
+ case "object":
199
+ writeObjectType(writer, type.members);
200
+ break;
201
+ case "tuple":
202
+ writeTupleType(writer, type.elements);
203
+ break;
204
+ default:
205
+ assertNever(type);
206
+ }
207
+ }
208
+
209
+ export { writeMember, writeMultiLineList, writeType };
210
+ //# 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 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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"}
@@ -0,0 +1,36 @@
1
+ 'use strict';
2
+
3
+ const errors = require('../domain/errors.cjs');
4
+
5
+ const STACK_OVERFLOW_MESSAGE = /maximum call stack size exceeded/i;
6
+ function isStackOverflowError(error) {
7
+ return error instanceof RangeError && STACK_OVERFLOW_MESSAGE.test(error.message);
8
+ }
9
+ function schemaTooDeepError(step, cause) {
10
+ return new errors.OpenAPITypesafeError({
11
+ code: errors.ERROR_CODES.SCHEMA_TOO_DEEP,
12
+ message: `The schema is nested too deeply to ${step}: the call stack ran out. Both inline schemas and chains of $ref (each schema referring to the next) count; shorten the deepest.`,
13
+ details: { step },
14
+ cause
15
+ });
16
+ }
17
+ function withStackOverflowReported(step, run) {
18
+ try {
19
+ return run();
20
+ } catch (error) {
21
+ throw isStackOverflowError(error) ? schemaTooDeepError(step, error) : error;
22
+ }
23
+ }
24
+ async function withStackOverflowReportedAsync(step, run) {
25
+ try {
26
+ return await run();
27
+ } catch (error) {
28
+ throw isStackOverflowError(error) ? schemaTooDeepError(step, error) : error;
29
+ }
30
+ }
31
+
32
+ exports.isStackOverflowError = isStackOverflowError;
33
+ exports.schemaTooDeepError = schemaTooDeepError;
34
+ exports.withStackOverflowReported = withStackOverflowReported;
35
+ exports.withStackOverflowReportedAsync = withStackOverflowReportedAsync;
36
+ //# sourceMappingURL=stack-overflow.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stack-overflow.cjs","sources":["../../src/application/stack-overflow.ts"],"sourcesContent":["import { ERROR_CODES, OpenAPITypesafeError } from \"../domain/errors.js\";\n\n/**\n * Deeply nested schemas (ENGINEERING_PLAN 8.5). Loading, bundling, transforming and printing walk\n * schemas recursively, and Redocly follows each `$ref` inside the walk. On the default Node.js\n * stack, about 550 levels of inline schemas or a chain of about 900 `$ref`s (each schema refers to\n * the next) run out of call stack. Real documents stay far below: every YAML or JSON file goes\n * through the YAML parser, which stops at 100 levels, and the whole corpus passes. The overflow is\n * reported as a typed error instead of a `RangeError` with a stack trace.\n */\n\n/** The step that ran out of call stack; named in the message and the details. */\nexport type DeepSchemaStep = \"load\" | \"transform\" | \"print\";\n\n/** V8 and JavaScriptCore (Node.js, Deno, Bun) throw a `RangeError` with this message. */\nconst STACK_OVERFLOW_MESSAGE = /maximum call stack size exceeded/i;\n\n/** Whether a thrown value is a call stack overflow. */\nexport function isStackOverflowError(error: unknown): boolean {\n return error instanceof RangeError && STACK_OVERFLOW_MESSAGE.test(error.message);\n}\n\n/** The typed error for a document nested too deeply for the call stack. */\nexport function schemaTooDeepError(step: DeepSchemaStep, cause: unknown): OpenAPITypesafeError {\n return new OpenAPITypesafeError({\n code: ERROR_CODES.SCHEMA_TOO_DEEP,\n message:\n `The schema is nested too deeply to ${step}: the call stack ran out. Both inline ` +\n \"schemas and chains of $ref (each schema referring to the next) count; shorten the deepest.\",\n details: { step },\n cause,\n });\n}\n\n/** Run a step and report a stack overflow in it as SCHEMA_TOO_DEEP; other errors pass through. */\nexport function withStackOverflowReported<T>(step: DeepSchemaStep, run: () => T): T {\n try {\n return run();\n } catch (error) {\n throw isStackOverflowError(error) ? schemaTooDeepError(step, error) : error;\n }\n}\n\n/** The asynchronous form of `withStackOverflowReported`. */\nexport async function withStackOverflowReportedAsync<T>(\n step: DeepSchemaStep,\n run: () => Promise<T>,\n): Promise<T> {\n try {\n return await run();\n } catch (error) {\n throw isStackOverflowError(error) ? schemaTooDeepError(step, error) : error;\n }\n}\n"],"names":["OpenAPITypesafeError","ERROR_CODES"],"mappings":";;;;AAeA,MAAM,sBAAA,GAAyB,mCAAA;AAGxB,SAAS,qBAAqB,KAAA,EAAyB;AAC5D,EAAA,OAAO,KAAA,YAAiB,UAAA,IAAc,sBAAA,CAAuB,IAAA,CAAK,MAAM,OAAO,CAAA;AACjF;AAGO,SAAS,kBAAA,CAAmB,MAAsB,KAAA,EAAsC;AAC7F,EAAA,OAAO,IAAIA,2BAAA,CAAqB;AAAA,IAC9B,MAAMC,kBAAA,CAAY,eAAA;AAAA,IAClB,OAAA,EACE,sCAAsC,IAAI,CAAA,gIAAA,CAAA;AAAA,IAE5C,OAAA,EAAS,EAAE,IAAA,EAAK;AAAA,IAChB;AAAA,GACD,CAAA;AACH;AAGO,SAAS,yBAAA,CAA6B,MAAsB,GAAA,EAAiB;AAClF,EAAA,IAAI;AACF,IAAA,OAAO,GAAA,EAAI;AAAA,EACb,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,qBAAqB,KAAK,CAAA,GAAI,kBAAA,CAAmB,IAAA,EAAM,KAAK,CAAA,GAAI,KAAA;AAAA,EACxE;AACF;AAGA,eAAsB,8BAAA,CACpB,MACA,GAAA,EACY;AACZ,EAAA,IAAI;AACF,IAAA,OAAO,MAAM,GAAA,EAAI;AAAA,EACnB,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,qBAAqB,KAAK,CAAA,GAAI,kBAAA,CAAmB,IAAA,EAAM,KAAK,CAAA,GAAI,KAAA;AAAA,EACxE;AACF;;;;;"}
@@ -0,0 +1,31 @@
1
+ import { OpenAPITypesafeError, ERROR_CODES } from '../domain/errors.mjs';
2
+
3
+ const STACK_OVERFLOW_MESSAGE = /maximum call stack size exceeded/i;
4
+ function isStackOverflowError(error) {
5
+ return error instanceof RangeError && STACK_OVERFLOW_MESSAGE.test(error.message);
6
+ }
7
+ function schemaTooDeepError(step, cause) {
8
+ return new OpenAPITypesafeError({
9
+ code: ERROR_CODES.SCHEMA_TOO_DEEP,
10
+ message: `The schema is nested too deeply to ${step}: the call stack ran out. Both inline schemas and chains of $ref (each schema referring to the next) count; shorten the deepest.`,
11
+ details: { step },
12
+ cause
13
+ });
14
+ }
15
+ function withStackOverflowReported(step, run) {
16
+ try {
17
+ return run();
18
+ } catch (error) {
19
+ throw isStackOverflowError(error) ? schemaTooDeepError(step, error) : error;
20
+ }
21
+ }
22
+ async function withStackOverflowReportedAsync(step, run) {
23
+ try {
24
+ return await run();
25
+ } catch (error) {
26
+ throw isStackOverflowError(error) ? schemaTooDeepError(step, error) : error;
27
+ }
28
+ }
29
+
30
+ export { isStackOverflowError, schemaTooDeepError, withStackOverflowReported, withStackOverflowReportedAsync };
31
+ //# sourceMappingURL=stack-overflow.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stack-overflow.mjs","sources":["../../src/application/stack-overflow.ts"],"sourcesContent":["import { ERROR_CODES, OpenAPITypesafeError } from \"../domain/errors.js\";\n\n/**\n * Deeply nested schemas (ENGINEERING_PLAN 8.5). Loading, bundling, transforming and printing walk\n * schemas recursively, and Redocly follows each `$ref` inside the walk. On the default Node.js\n * stack, about 550 levels of inline schemas or a chain of about 900 `$ref`s (each schema refers to\n * the next) run out of call stack. Real documents stay far below: every YAML or JSON file goes\n * through the YAML parser, which stops at 100 levels, and the whole corpus passes. The overflow is\n * reported as a typed error instead of a `RangeError` with a stack trace.\n */\n\n/** The step that ran out of call stack; named in the message and the details. */\nexport type DeepSchemaStep = \"load\" | \"transform\" | \"print\";\n\n/** V8 and JavaScriptCore (Node.js, Deno, Bun) throw a `RangeError` with this message. */\nconst STACK_OVERFLOW_MESSAGE = /maximum call stack size exceeded/i;\n\n/** Whether a thrown value is a call stack overflow. */\nexport function isStackOverflowError(error: unknown): boolean {\n return error instanceof RangeError && STACK_OVERFLOW_MESSAGE.test(error.message);\n}\n\n/** The typed error for a document nested too deeply for the call stack. */\nexport function schemaTooDeepError(step: DeepSchemaStep, cause: unknown): OpenAPITypesafeError {\n return new OpenAPITypesafeError({\n code: ERROR_CODES.SCHEMA_TOO_DEEP,\n message:\n `The schema is nested too deeply to ${step}: the call stack ran out. Both inline ` +\n \"schemas and chains of $ref (each schema referring to the next) count; shorten the deepest.\",\n details: { step },\n cause,\n });\n}\n\n/** Run a step and report a stack overflow in it as SCHEMA_TOO_DEEP; other errors pass through. */\nexport function withStackOverflowReported<T>(step: DeepSchemaStep, run: () => T): T {\n try {\n return run();\n } catch (error) {\n throw isStackOverflowError(error) ? schemaTooDeepError(step, error) : error;\n }\n}\n\n/** The asynchronous form of `withStackOverflowReported`. */\nexport async function withStackOverflowReportedAsync<T>(\n step: DeepSchemaStep,\n run: () => Promise<T>,\n): Promise<T> {\n try {\n return await run();\n } catch (error) {\n throw isStackOverflowError(error) ? schemaTooDeepError(step, error) : error;\n }\n}\n"],"names":[],"mappings":";;AAeA,MAAM,sBAAA,GAAyB,mCAAA;AAGxB,SAAS,qBAAqB,KAAA,EAAyB;AAC5D,EAAA,OAAO,KAAA,YAAiB,UAAA,IAAc,sBAAA,CAAuB,IAAA,CAAK,MAAM,OAAO,CAAA;AACjF;AAGO,SAAS,kBAAA,CAAmB,MAAsB,KAAA,EAAsC;AAC7F,EAAA,OAAO,IAAI,oBAAA,CAAqB;AAAA,IAC9B,MAAM,WAAA,CAAY,eAAA;AAAA,IAClB,OAAA,EACE,sCAAsC,IAAI,CAAA,gIAAA,CAAA;AAAA,IAE5C,OAAA,EAAS,EAAE,IAAA,EAAK;AAAA,IAChB;AAAA,GACD,CAAA;AACH;AAGO,SAAS,yBAAA,CAA6B,MAAsB,GAAA,EAAiB;AAClF,EAAA,IAAI;AACF,IAAA,OAAO,GAAA,EAAI;AAAA,EACb,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,qBAAqB,KAAK,CAAA,GAAI,kBAAA,CAAmB,IAAA,EAAM,KAAK,CAAA,GAAI,KAAA;AAAA,EACxE;AACF;AAGA,eAAsB,8BAAA,CACpB,MACA,GAAA,EACY;AACZ,EAAA,IAAI;AACF,IAAA,OAAO,MAAM,GAAA,EAAI;AAAA,EACnB,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,qBAAqB,KAAK,CAAA,GAAI,kBAAA,CAAmB,IAAA,EAAM,KAAK,CAAA,GAAI,KAAA;AAAA,EACxE;AACF;;"}