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,77 @@
1
+ import { OpenAPITypesafeError, ERROR_CODES } from '../../domain/errors.mjs';
2
+
3
+ function sourceEmptyError(message) {
4
+ return new OpenAPITypesafeError({ code: ERROR_CODES.SCHEMA_SOURCE_EMPTY, message });
5
+ }
6
+ function sourceInvalidError(source) {
7
+ const received = Array.isArray(source) ? "Array" : typeof source;
8
+ return new OpenAPITypesafeError({
9
+ code: ERROR_CODES.SCHEMA_SOURCE_INVALID,
10
+ message: `Expected string, object, or Buffer. Got ${received}`,
11
+ details: { received }
12
+ });
13
+ }
14
+ function causeMessage(cause) {
15
+ return cause instanceof Error ? cause.message : String(cause);
16
+ }
17
+ const SOURCE_TEXT_IN_MESSAGE = 200;
18
+ function pathStringError(text) {
19
+ const shown = text.length > SOURCE_TEXT_IN_MESSAGE ? `${text.slice(0, SOURCE_TEXT_IN_MESSAGE)}\u2026` : text;
20
+ return new OpenAPITypesafeError({
21
+ code: ERROR_CODES.SCHEMA_SOURCE_INVALID,
22
+ message: `The string "${shown}" was parsed as YAML text, not loaded as a file. To load a file, pass a URL: openapiTS(pathToFileURL(path)) from node:url.`,
23
+ details: { reason: "path", received: "string" }
24
+ });
25
+ }
26
+ function loadFailedError(absoluteRef, cause) {
27
+ return new OpenAPITypesafeError({
28
+ code: ERROR_CODES.SCHEMA_LOAD_FAILED,
29
+ message: causeMessage(cause),
30
+ details: { source: absoluteRef },
31
+ cause
32
+ });
33
+ }
34
+ function parseFailedError(format, absoluteRef, cause) {
35
+ return new OpenAPITypesafeError({
36
+ code: ERROR_CODES.SCHEMA_PARSE_FAILED,
37
+ message: causeMessage(cause),
38
+ details: { format, source: absoluteRef },
39
+ cause
40
+ });
41
+ }
42
+ function versionUnsupportedError(message, parsed) {
43
+ return new OpenAPITypesafeError({
44
+ code: ERROR_CODES.SCHEMA_VERSION_UNSUPPORTED,
45
+ message,
46
+ details: { openapi: parsed.openapi, swagger: parsed.swagger }
47
+ });
48
+ }
49
+ function schemaInvalidError(problems) {
50
+ return new OpenAPITypesafeError({
51
+ code: ERROR_CODES.SCHEMA_INVALID,
52
+ message: problems.at(-1) ?? "",
53
+ details: { problems: [...problems] }
54
+ });
55
+ }
56
+ function refCycleError(cause) {
57
+ return new OpenAPITypesafeError({
58
+ code: ERROR_CODES.SCHEMA_REF_INVALID,
59
+ message: cause.message,
60
+ details: { reason: "cycle" },
61
+ cause
62
+ });
63
+ }
64
+ function hostListText(hosts) {
65
+ return hosts.length === 0 ? "none" : hosts.join(", ");
66
+ }
67
+ function refForbiddenError(ref, details) {
68
+ const limit = details.reason === "outside-local-root" ? `it is outside the local $ref root ${details.localRoot}` : `its host is not in the allowed remote $ref hosts (${hostListText(details.allowedHosts)})`;
69
+ return new OpenAPITypesafeError({
70
+ code: ERROR_CODES.SCHEMA_REF_FORBIDDEN,
71
+ message: `Refused to load ${ref}: ${limit}`,
72
+ details: { ref, ...details }
73
+ });
74
+ }
75
+
76
+ export { loadFailedError, parseFailedError, pathStringError, refCycleError, refForbiddenError, schemaInvalidError, sourceEmptyError, sourceInvalidError, versionUnsupportedError };
77
+ //# sourceMappingURL=schema-load-errors.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-load-errors.mjs","sources":["../../../src/adapters/redocly-loader/schema-load-errors.ts"],"sourcesContent":["import { ERROR_CODES, OpenAPITypesafeError } from \"../../domain/errors.js\";\n\n/**\n * The typed errors of loading, validating and bundling a document (ADR-011). Messages are the\n * original messages, so Node API users who match on them keep working.\n */\n\n/** No source was given, or the source is empty. */\nexport function sourceEmptyError(message: string): OpenAPITypesafeError {\n return new OpenAPITypesafeError({ code: ERROR_CODES.SCHEMA_SOURCE_EMPTY, message });\n}\n\n/** The source is neither a URL, text, buffer, stream nor plain object. */\nexport function sourceInvalidError(source: unknown): OpenAPITypesafeError {\n const received = Array.isArray(source) ? \"Array\" : typeof source;\n return new OpenAPITypesafeError({\n code: ERROR_CODES.SCHEMA_SOURCE_INVALID,\n message: `Expected string, object, or Buffer. Got ${received}`,\n details: { received },\n });\n}\n\nfunction causeMessage(cause: unknown): string {\n return cause instanceof Error ? cause.message : String(cause);\n}\n\n/** Enough of a source string to recognise it in the message. */\nconst SOURCE_TEXT_IN_MESSAGE = 200;\n\n/**\n * A string source is document text, so a file path parses as a YAML string scalar, not as a\n * document (docs/node.md). The message says how to load the file instead.\n */\nexport function pathStringError(text: string): OpenAPITypesafeError {\n const shown =\n text.length > SOURCE_TEXT_IN_MESSAGE ? `${text.slice(0, SOURCE_TEXT_IN_MESSAGE)}…` : text;\n return new OpenAPITypesafeError({\n code: ERROR_CODES.SCHEMA_SOURCE_INVALID,\n message:\n `The string \"${shown}\" was parsed as YAML text, not loaded as a file. ` +\n \"To load a file, pass a URL: openapiTS(pathToFileURL(path)) from node:url.\",\n details: { reason: \"path\", received: \"string\" },\n });\n}\n\n/** Reading the document from a file or URL failed; the message is the reader's message. */\nexport function loadFailedError(absoluteRef: string, cause: unknown): OpenAPITypesafeError {\n return new OpenAPITypesafeError({\n code: ERROR_CODES.SCHEMA_LOAD_FAILED,\n message: causeMessage(cause),\n details: { source: absoluteRef },\n cause,\n });\n}\n\n/** The document text is not valid JSON or YAML; the message is the parser's message. */\nexport function parseFailedError(\n format: \"json\" | \"yaml\",\n absoluteRef: string,\n cause: unknown,\n): OpenAPITypesafeError {\n return new OpenAPITypesafeError({\n code: ERROR_CODES.SCHEMA_PARSE_FAILED,\n message: causeMessage(cause),\n details: { format, source: absoluteRef },\n cause,\n });\n}\n\n/** The document is not OpenAPI 3.x. */\nexport function versionUnsupportedError(\n message: string,\n parsed: Readonly<Record<string, unknown>>,\n): OpenAPITypesafeError {\n return new OpenAPITypesafeError({\n code: ERROR_CODES.SCHEMA_VERSION_UNSUPPORTED,\n message,\n details: { openapi: parsed.openapi, swagger: parsed.swagger },\n });\n}\n\n/**\n * Linting or bundling found errors. The message is the last error, as in the original; all error\n * messages are in `details.problems`.\n */\nexport function schemaInvalidError(problems: readonly string[]): OpenAPITypesafeError {\n return new OpenAPITypesafeError({\n code: ERROR_CODES.SCHEMA_INVALID,\n message: problems.at(-1) ?? \"\",\n details: { problems: [...problems] },\n });\n}\n\n/** A `$ref` chain points back to itself with no schema in between (`A: $ref B`, `B: $ref A`). */\nexport function refCycleError(cause: Error): OpenAPITypesafeError {\n return new OpenAPITypesafeError({\n code: ERROR_CODES.SCHEMA_REF_INVALID,\n message: cause.message,\n details: { reason: \"cycle\" },\n cause,\n });\n}\n\nfunction hostListText(hosts: readonly string[]): string {\n return hosts.length === 0 ? \"none\" : hosts.join(\", \");\n}\n\n/** Why a `$ref` document was refused, with the limit it broke (ADR-017). */\nexport type RefRefusalDetails =\n | { readonly reason: \"outside-local-root\"; readonly localRoot: string }\n | { readonly reason: \"host-not-allowed\"; readonly allowedHosts: readonly string[] };\n\n/** A `$ref` is outside the local root, or its host is not allowed (threat model R1, R2). */\nexport function refForbiddenError(ref: string, details: RefRefusalDetails): OpenAPITypesafeError {\n const limit =\n details.reason === \"outside-local-root\"\n ? `it is outside the local $ref root ${details.localRoot}`\n : `its host is not in the allowed remote $ref hosts (${hostListText(details.allowedHosts)})`;\n return new OpenAPITypesafeError({\n code: ERROR_CODES.SCHEMA_REF_FORBIDDEN,\n message: `Refused to load ${ref}: ${limit}`,\n details: { ref, ...details },\n });\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,104 @@
1
+ 'use strict';
2
+
3
+ const node_stream = require('node:stream');
4
+ const consumers = require('node:stream/consumers');
5
+ const node_url = require('node:url');
6
+ const openapiCore = require('@redocly/openapi-core');
7
+ const parseJson = require('parse-json');
8
+ const aliasLimit = require('./alias-limit.cjs');
9
+ const schemaLoadErrors = require('./schema-load-errors.cjs');
10
+
11
+ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e.default : e; }
12
+
13
+ const parseJson__default = /*#__PURE__*/_interopDefaultCompat(parseJson);
14
+
15
+ async function readStream(stream, absoluteRef) {
16
+ try {
17
+ return (await consumers.text(stream)).trim();
18
+ } catch (error) {
19
+ throw schemaLoadErrors.loadFailedError(absoluteRef, error);
20
+ }
21
+ }
22
+ const URL_PREFIXES = ["http://", "https://", "file://"];
23
+ function parseSchemaText(schema, options) {
24
+ if (URL_PREFIXES.some((prefix) => schema.startsWith(prefix))) {
25
+ const url = new URL(schema);
26
+ const absoluteRef = url.protocol === "file:" ? node_url.fileURLToPath(url) : url.href;
27
+ return parseSchema(url, { absoluteRef, resolver: options.resolver });
28
+ }
29
+ return schema[0] === "{" ? parseJsonText(schema, options.absoluteRef) : parseYamlText(schema, options.absoluteRef);
30
+ }
31
+ function parseJsonText(text2, absoluteRef) {
32
+ try {
33
+ return { source: new openapiCore.Source(absoluteRef, text2, "application/json"), parsed: parseJson__default(text2) };
34
+ } catch (cause) {
35
+ throw schemaLoadErrors.parseFailedError("json", absoluteRef, cause);
36
+ }
37
+ }
38
+ function parseYamlText(text2, absoluteRef) {
39
+ let document;
40
+ try {
41
+ document = openapiCore.makeDocumentFromString(text2, absoluteRef);
42
+ } catch (cause) {
43
+ throw schemaLoadErrors.parseFailedError("yaml", absoluteRef, cause);
44
+ }
45
+ if (typeof document.parsed === "string") {
46
+ throw schemaLoadErrors.pathStringError(text2);
47
+ }
48
+ const failure = aliasLimit.aliasExpansionFailure(document.parsed);
49
+ if (failure !== void 0) {
50
+ throw schemaLoadErrors.parseFailedError("yaml", absoluteRef, failure);
51
+ }
52
+ return document;
53
+ }
54
+ async function resolveSchemaURL(options) {
55
+ const result = await options.resolver.resolveDocument(null, options.absoluteRef, true).catch((cause) => {
56
+ throw cause instanceof openapiCore.YamlParseError ? fileParseFailedError(options.absoluteRef, cause) : schemaLoadErrors.loadFailedError(options.absoluteRef, readerError(cause));
57
+ });
58
+ if ("parsed" in result) {
59
+ return result;
60
+ }
61
+ throw schemaLoadErrors.loadFailedError(options.absoluteRef, readerError(result));
62
+ }
63
+ function readerError(error) {
64
+ let current = error;
65
+ while (current instanceof openapiCore.ResolveError) {
66
+ current = current.originalError;
67
+ }
68
+ return current;
69
+ }
70
+ function fileParseFailedError(absoluteRef, error) {
71
+ const format = absoluteRef.toLowerCase().endsWith(".json") ? "json" : "yaml";
72
+ const cause = error.message.includes(absoluteRef) ? error : new Error(`${error.message} in "${absoluteRef}"`, { cause: error });
73
+ return schemaLoadErrors.parseFailedError(format, absoluteRef, cause);
74
+ }
75
+ function parseSchemaObject(schema, absoluteRef) {
76
+ if (typeof schema === "object" && !Array.isArray(schema)) {
77
+ return {
78
+ source: new openapiCore.Source(absoluteRef, JSON.stringify(schema), "application/json"),
79
+ parsed: schema
80
+ };
81
+ }
82
+ throw schemaLoadErrors.sourceInvalidError(schema);
83
+ }
84
+ async function parseSchema(schema, options) {
85
+ if (!schema) {
86
+ throw schemaLoadErrors.sourceEmptyError("Can\u2019t parse empty schema");
87
+ }
88
+ if (schema instanceof URL) {
89
+ return resolveSchemaURL(options);
90
+ }
91
+ if (schema instanceof node_stream.Readable) {
92
+ return parseSchema(await readStream(schema, options.absoluteRef), options);
93
+ }
94
+ if (schema instanceof Buffer) {
95
+ return parseSchema(schema.toString("utf8"), options);
96
+ }
97
+ if (typeof schema === "string") {
98
+ return parseSchemaText(schema, options);
99
+ }
100
+ return parseSchemaObject(schema, options.absoluteRef);
101
+ }
102
+
103
+ exports.parseSchema = parseSchema;
104
+ //# sourceMappingURL=schema-source.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-source.cjs","sources":["../../../src/adapters/redocly-loader/schema-source.ts"],"sourcesContent":["import { Readable } from \"node:stream\";\nimport { text } from \"node:stream/consumers\";\nimport { fileURLToPath } from \"node:url\";\nimport {\n type BaseResolver,\n type Document,\n makeDocumentFromString,\n ResolveError,\n Source,\n YamlParseError,\n} from \"@redocly/openapi-core\";\nimport parseJson from \"parse-json\";\nimport { aliasExpansionFailure } from \"./alias-limit.js\";\nimport {\n loadFailedError,\n parseFailedError,\n pathStringError,\n sourceEmptyError,\n sourceInvalidError,\n} from \"./schema-load-errors.js\";\n\n/** Parse a schema source of any supported type into a Redocly document (ENGINEERING_PLAN 4.5). */\n\nexport interface ParseSchemaOptions {\n absoluteRef: string;\n resolver: BaseResolver;\n}\n\n/**\n * Read a stream to the end as UTF-8 text, trimmed. A stream that fails rejects with\n * SCHEMA_LOAD_FAILED; listening only for `data` and `end` left the promise pending forever.\n */\nasync function readStream(stream: Readable, absoluteRef: string): Promise<string> {\n try {\n return (await text(stream)).trim();\n } catch (error) {\n throw loadFailedError(absoluteRef, error);\n }\n}\n\nconst URL_PREFIXES = [\"http://\", \"https://\", \"file://\"] as const;\n\n/** A string is a URL, JSON (starts with `{`) or YAML. */\nfunction parseSchemaText(\n schema: string,\n options: ParseSchemaOptions,\n): Promise<Document> | Document {\n if (URL_PREFIXES.some((prefix) => schema.startsWith(prefix))) {\n const url = new URL(schema);\n const absoluteRef = url.protocol === \"file:\" ? fileURLToPath(url) : url.href;\n return parseSchema(url, { absoluteRef, resolver: options.resolver });\n }\n return schema[0] === \"{\"\n ? parseJsonText(schema, options.absoluteRef)\n : parseYamlText(schema, options.absoluteRef);\n}\n\nfunction parseJsonText(text: string, absoluteRef: string): Document {\n try {\n return { source: new Source(absoluteRef, text, \"application/json\"), parsed: parseJson(text) };\n } catch (cause) {\n throw parseFailedError(\"json\", absoluteRef, cause);\n }\n}\n\nfunction parseYamlText(text: string, absoluteRef: string): Document {\n let document: Document;\n try {\n document = makeDocumentFromString(text, absoluteRef);\n } catch (cause) {\n throw parseFailedError(\"yaml\", absoluteRef, cause);\n }\n // Text that is only a YAML string scalar, such as \"./openapi.yaml\", was meant as a file path.\n if (typeof document.parsed === \"string\") {\n throw pathStringError(text);\n }\n const failure = aliasExpansionFailure(document.parsed);\n if (failure !== undefined) {\n throw parseFailedError(\"yaml\", absoluteRef, failure);\n }\n return document;\n}\n\n/** The resolver throws for some failures (a missing file) and returns an error for others. */\nasync function resolveSchemaURL(options: ParseSchemaOptions): Promise<Document> {\n const result = await options.resolver\n .resolveDocument(null, options.absoluteRef, true)\n .catch((cause: unknown) => {\n throw cause instanceof YamlParseError\n ? fileParseFailedError(options.absoluteRef, cause)\n : loadFailedError(options.absoluteRef, readerError(cause));\n });\n if (\"parsed\" in result) {\n return result;\n }\n throw loadFailedError(options.absoluteRef, readerError(result));\n}\n\n/**\n * Redocly wraps a failed read in `ResolveError`, which keeps the reader's error in\n * `originalError`, not in `cause`. Unwrapped, the cause keeps the network reason (refused, DNS).\n */\nfunction readerError(error: unknown): unknown {\n let current = error;\n while (current instanceof ResolveError) {\n current = current.originalError;\n }\n return current;\n}\n\n/**\n * The resolver parses JSON files with its YAML parser too, so the format comes from the file\n * name. Some parser messages (a second YAML document) do not name the file; the error adds it.\n */\nfunction fileParseFailedError(absoluteRef: string, error: YamlParseError): Error {\n const format = absoluteRef.toLowerCase().endsWith(\".json\") ? \"json\" : \"yaml\";\n const cause = error.message.includes(absoluteRef)\n ? error\n : new Error(`${error.message} in \"${absoluteRef}\"`, { cause: error });\n return parseFailedError(format, absoluteRef, cause);\n}\n\nfunction parseSchemaObject(schema: unknown, absoluteRef: string): Document {\n if (typeof schema === \"object\" && !Array.isArray(schema)) {\n return {\n source: new Source(absoluteRef, JSON.stringify(schema), \"application/json\"),\n parsed: schema,\n };\n }\n throw sourceInvalidError(schema);\n}\n\n/** Parse any supported source: URL, stream, buffer, URL or document text, or a plain object. */\nexport async function parseSchema(schema: unknown, options: ParseSchemaOptions): Promise<Document> {\n if (!schema) {\n throw sourceEmptyError(\"Can’t parse empty schema\");\n }\n if (schema instanceof URL) {\n return resolveSchemaURL(options);\n }\n if (schema instanceof Readable) {\n return parseSchema(await readStream(schema, options.absoluteRef), options);\n }\n if (schema instanceof Buffer) {\n return parseSchema(schema.toString(\"utf8\"), options);\n }\n if (typeof schema === \"string\") {\n return parseSchemaText(schema, options);\n }\n return parseSchemaObject(schema, options.absoluteRef);\n}\n"],"names":["text","loadFailedError","fileURLToPath","Source","parseJson","parseFailedError","makeDocumentFromString","pathStringError","aliasExpansionFailure","YamlParseError","ResolveError","sourceInvalidError","sourceEmptyError","Readable"],"mappings":";;;;;;;;;;;;;;AAgCA,eAAe,UAAA,CAAW,QAAkB,WAAA,EAAsC;AAChF,EAAA,IAAI;AACF,IAAA,OAAA,CAAQ,MAAMA,cAAA,CAAK,MAAM,CAAA,EAAG,IAAA,EAAK;AAAA,EACnC,SAAS,KAAA,EAAO;AACd,IAAA,MAAMC,gCAAA,CAAgB,aAAa,KAAK,CAAA;AAAA,EAC1C;AACF;AAEA,MAAM,YAAA,GAAe,CAAC,SAAA,EAAW,UAAA,EAAY,SAAS,CAAA;AAGtD,SAAS,eAAA,CACP,QACA,OAAA,EAC8B;AAC9B,EAAA,IAAI,YAAA,CAAa,KAAK,CAAC,MAAA,KAAW,OAAO,UAAA,CAAW,MAAM,CAAC,CAAA,EAAG;AAC5D,IAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,MAAM,CAAA;AAC1B,IAAA,MAAM,cAAc,GAAA,CAAI,QAAA,KAAa,UAAUC,sBAAA,CAAc,GAAG,IAAI,GAAA,CAAI,IAAA;AACxE,IAAA,OAAO,YAAY,GAAA,EAAK,EAAE,aAAa,QAAA,EAAU,OAAA,CAAQ,UAAU,CAAA;AAAA,EACrE;AACA,EAAA,OAAO,MAAA,CAAO,CAAC,CAAA,KAAM,GAAA,GACjB,aAAA,CAAc,MAAA,EAAQ,OAAA,CAAQ,WAAW,CAAA,GACzC,aAAA,CAAc,MAAA,EAAQ,OAAA,CAAQ,WAAW,CAAA;AAC/C;AAEA,SAAS,aAAA,CAAcF,OAAc,WAAA,EAA+B;AAClE,EAAA,IAAI;AACF,IAAA,OAAO,EAAE,MAAA,EAAQ,IAAIG,kBAAA,CAAO,WAAA,EAAaH,KAAAA,EAAM,kBAAkB,CAAA,EAAG,MAAA,EAAQI,kBAAA,CAAUJ,KAAI,CAAA,EAAE;AAAA,EAC9F,SAAS,KAAA,EAAO;AACd,IAAA,MAAMK,iCAAA,CAAiB,MAAA,EAAQ,WAAA,EAAa,KAAK,CAAA;AAAA,EACnD;AACF;AAEA,SAAS,aAAA,CAAcL,OAAc,WAAA,EAA+B;AAClE,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI;AACF,IAAA,QAAA,GAAWM,kCAAA,CAAuBN,OAAM,WAAW,CAAA;AAAA,EACrD,SAAS,KAAA,EAAO;AACd,IAAA,MAAMK,iCAAA,CAAiB,MAAA,EAAQ,WAAA,EAAa,KAAK,CAAA;AAAA,EACnD;AAEA,EAAA,IAAI,OAAO,QAAA,CAAS,MAAA,KAAW,QAAA,EAAU;AACvC,IAAA,MAAME,iCAAgBP,KAAI,CAAA;AAAA,EAC5B;AACA,EAAA,MAAM,OAAA,GAAUQ,gCAAA,CAAsB,QAAA,CAAS,MAAM,CAAA;AACrD,EAAA,IAAI,YAAY,MAAA,EAAW;AACzB,IAAA,MAAMH,iCAAA,CAAiB,MAAA,EAAQ,WAAA,EAAa,OAAO,CAAA;AAAA,EACrD;AACA,EAAA,OAAO,QAAA;AACT;AAGA,eAAe,iBAAiB,OAAA,EAAgD;AAC9E,EAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,QAAA,CAC1B,eAAA,CAAgB,IAAA,EAAM,OAAA,CAAQ,WAAA,EAAa,IAAI,CAAA,CAC/C,KAAA,CAAM,CAAC,KAAA,KAAmB;AACzB,IAAA,MAAM,KAAA,YAAiBI,0BAAA,GACnB,oBAAA,CAAqB,OAAA,CAAQ,WAAA,EAAa,KAAK,CAAA,GAC/CR,gCAAA,CAAgB,OAAA,CAAQ,WAAA,EAAa,WAAA,CAAY,KAAK,CAAC,CAAA;AAAA,EAC7D,CAAC,CAAA;AACH,EAAA,IAAI,YAAY,MAAA,EAAQ;AACtB,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,MAAMA,gCAAA,CAAgB,OAAA,CAAQ,WAAA,EAAa,WAAA,CAAY,MAAM,CAAC,CAAA;AAChE;AAMA,SAAS,YAAY,KAAA,EAAyB;AAC5C,EAAA,IAAI,OAAA,GAAU,KAAA;AACd,EAAA,OAAO,mBAAmBS,wBAAA,EAAc;AACtC,IAAA,OAAA,GAAU,OAAA,CAAQ,aAAA;AAAA,EACpB;AACA,EAAA,OAAO,OAAA;AACT;AAMA,SAAS,oBAAA,CAAqB,aAAqB,KAAA,EAA8B;AAC/E,EAAA,MAAM,SAAS,WAAA,CAAY,WAAA,GAAc,QAAA,CAAS,OAAO,IAAI,MAAA,GAAS,MAAA;AACtE,EAAA,MAAM,QAAQ,KAAA,CAAM,OAAA,CAAQ,SAAS,WAAW,CAAA,GAC5C,QACA,IAAI,KAAA,CAAM,CAAA,EAAG,KAAA,CAAM,OAAO,CAAA,KAAA,EAAQ,WAAW,KAAK,EAAE,KAAA,EAAO,OAAO,CAAA;AACtE,EAAA,OAAOL,iCAAA,CAAiB,MAAA,EAAQ,WAAA,EAAa,KAAK,CAAA;AACpD;AAEA,SAAS,iBAAA,CAAkB,QAAiB,WAAA,EAA+B;AACzE,EAAA,IAAI,OAAO,MAAA,KAAW,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;AACxD,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,IAAIF,kBAAA,CAAO,WAAA,EAAa,KAAK,SAAA,CAAU,MAAM,GAAG,kBAAkB,CAAA;AAAA,MAC1E,MAAA,EAAQ;AAAA,KACV;AAAA,EACF;AACA,EAAA,MAAMQ,oCAAmB,MAAM,CAAA;AACjC;AAGA,eAAsB,WAAA,CAAY,QAAiB,OAAA,EAAgD;AACjG,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAMC,kCAAiB,+BAA0B,CAAA;AAAA,EACnD;AACA,EAAA,IAAI,kBAAkB,GAAA,EAAK;AACzB,IAAA,OAAO,iBAAiB,OAAO,CAAA;AAAA,EACjC;AACA,EAAA,IAAI,kBAAkBC,oBAAA,EAAU;AAC9B,IAAA,OAAO,YAAY,MAAM,UAAA,CAAW,QAAQ,OAAA,CAAQ,WAAW,GAAG,OAAO,CAAA;AAAA,EAC3E;AACA,EAAA,IAAI,kBAAkB,MAAA,EAAQ;AAC5B,IAAA,OAAO,WAAA,CAAY,MAAA,CAAO,QAAA,CAAS,MAAM,GAAG,OAAO,CAAA;AAAA,EACrD;AACA,EAAA,IAAI,OAAO,WAAW,QAAA,EAAU;AAC9B,IAAA,OAAO,eAAA,CAAgB,QAAQ,OAAO,CAAA;AAAA,EACxC;AACA,EAAA,OAAO,iBAAA,CAAkB,MAAA,EAAQ,OAAA,CAAQ,WAAW,CAAA;AACtD;;"}
@@ -0,0 +1,98 @@
1
+ import { Readable } from 'node:stream';
2
+ import { text } from 'node:stream/consumers';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { YamlParseError, Source, ResolveError, makeDocumentFromString } from '@redocly/openapi-core';
5
+ import parseJson from 'parse-json';
6
+ import { aliasExpansionFailure } from './alias-limit.mjs';
7
+ import { sourceEmptyError, loadFailedError, sourceInvalidError, parseFailedError, pathStringError } from './schema-load-errors.mjs';
8
+
9
+ async function readStream(stream, absoluteRef) {
10
+ try {
11
+ return (await text(stream)).trim();
12
+ } catch (error) {
13
+ throw loadFailedError(absoluteRef, error);
14
+ }
15
+ }
16
+ const URL_PREFIXES = ["http://", "https://", "file://"];
17
+ function parseSchemaText(schema, options) {
18
+ if (URL_PREFIXES.some((prefix) => schema.startsWith(prefix))) {
19
+ const url = new URL(schema);
20
+ const absoluteRef = url.protocol === "file:" ? fileURLToPath(url) : url.href;
21
+ return parseSchema(url, { absoluteRef, resolver: options.resolver });
22
+ }
23
+ return schema[0] === "{" ? parseJsonText(schema, options.absoluteRef) : parseYamlText(schema, options.absoluteRef);
24
+ }
25
+ function parseJsonText(text2, absoluteRef) {
26
+ try {
27
+ return { source: new Source(absoluteRef, text2, "application/json"), parsed: parseJson(text2) };
28
+ } catch (cause) {
29
+ throw parseFailedError("json", absoluteRef, cause);
30
+ }
31
+ }
32
+ function parseYamlText(text2, absoluteRef) {
33
+ let document;
34
+ try {
35
+ document = makeDocumentFromString(text2, absoluteRef);
36
+ } catch (cause) {
37
+ throw parseFailedError("yaml", absoluteRef, cause);
38
+ }
39
+ if (typeof document.parsed === "string") {
40
+ throw pathStringError(text2);
41
+ }
42
+ const failure = aliasExpansionFailure(document.parsed);
43
+ if (failure !== void 0) {
44
+ throw parseFailedError("yaml", absoluteRef, failure);
45
+ }
46
+ return document;
47
+ }
48
+ async function resolveSchemaURL(options) {
49
+ const result = await options.resolver.resolveDocument(null, options.absoluteRef, true).catch((cause) => {
50
+ throw cause instanceof YamlParseError ? fileParseFailedError(options.absoluteRef, cause) : loadFailedError(options.absoluteRef, readerError(cause));
51
+ });
52
+ if ("parsed" in result) {
53
+ return result;
54
+ }
55
+ throw loadFailedError(options.absoluteRef, readerError(result));
56
+ }
57
+ function readerError(error) {
58
+ let current = error;
59
+ while (current instanceof ResolveError) {
60
+ current = current.originalError;
61
+ }
62
+ return current;
63
+ }
64
+ function fileParseFailedError(absoluteRef, error) {
65
+ const format = absoluteRef.toLowerCase().endsWith(".json") ? "json" : "yaml";
66
+ const cause = error.message.includes(absoluteRef) ? error : new Error(`${error.message} in "${absoluteRef}"`, { cause: error });
67
+ return parseFailedError(format, absoluteRef, cause);
68
+ }
69
+ function parseSchemaObject(schema, absoluteRef) {
70
+ if (typeof schema === "object" && !Array.isArray(schema)) {
71
+ return {
72
+ source: new Source(absoluteRef, JSON.stringify(schema), "application/json"),
73
+ parsed: schema
74
+ };
75
+ }
76
+ throw sourceInvalidError(schema);
77
+ }
78
+ async function parseSchema(schema, options) {
79
+ if (!schema) {
80
+ throw sourceEmptyError("Can\u2019t parse empty schema");
81
+ }
82
+ if (schema instanceof URL) {
83
+ return resolveSchemaURL(options);
84
+ }
85
+ if (schema instanceof Readable) {
86
+ return parseSchema(await readStream(schema, options.absoluteRef), options);
87
+ }
88
+ if (schema instanceof Buffer) {
89
+ return parseSchema(schema.toString("utf8"), options);
90
+ }
91
+ if (typeof schema === "string") {
92
+ return parseSchemaText(schema, options);
93
+ }
94
+ return parseSchemaObject(schema, options.absoluteRef);
95
+ }
96
+
97
+ export { parseSchema };
98
+ //# sourceMappingURL=schema-source.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-source.mjs","sources":["../../../src/adapters/redocly-loader/schema-source.ts"],"sourcesContent":["import { Readable } from \"node:stream\";\nimport { text } from \"node:stream/consumers\";\nimport { fileURLToPath } from \"node:url\";\nimport {\n type BaseResolver,\n type Document,\n makeDocumentFromString,\n ResolveError,\n Source,\n YamlParseError,\n} from \"@redocly/openapi-core\";\nimport parseJson from \"parse-json\";\nimport { aliasExpansionFailure } from \"./alias-limit.js\";\nimport {\n loadFailedError,\n parseFailedError,\n pathStringError,\n sourceEmptyError,\n sourceInvalidError,\n} from \"./schema-load-errors.js\";\n\n/** Parse a schema source of any supported type into a Redocly document (ENGINEERING_PLAN 4.5). */\n\nexport interface ParseSchemaOptions {\n absoluteRef: string;\n resolver: BaseResolver;\n}\n\n/**\n * Read a stream to the end as UTF-8 text, trimmed. A stream that fails rejects with\n * SCHEMA_LOAD_FAILED; listening only for `data` and `end` left the promise pending forever.\n */\nasync function readStream(stream: Readable, absoluteRef: string): Promise<string> {\n try {\n return (await text(stream)).trim();\n } catch (error) {\n throw loadFailedError(absoluteRef, error);\n }\n}\n\nconst URL_PREFIXES = [\"http://\", \"https://\", \"file://\"] as const;\n\n/** A string is a URL, JSON (starts with `{`) or YAML. */\nfunction parseSchemaText(\n schema: string,\n options: ParseSchemaOptions,\n): Promise<Document> | Document {\n if (URL_PREFIXES.some((prefix) => schema.startsWith(prefix))) {\n const url = new URL(schema);\n const absoluteRef = url.protocol === \"file:\" ? fileURLToPath(url) : url.href;\n return parseSchema(url, { absoluteRef, resolver: options.resolver });\n }\n return schema[0] === \"{\"\n ? parseJsonText(schema, options.absoluteRef)\n : parseYamlText(schema, options.absoluteRef);\n}\n\nfunction parseJsonText(text: string, absoluteRef: string): Document {\n try {\n return { source: new Source(absoluteRef, text, \"application/json\"), parsed: parseJson(text) };\n } catch (cause) {\n throw parseFailedError(\"json\", absoluteRef, cause);\n }\n}\n\nfunction parseYamlText(text: string, absoluteRef: string): Document {\n let document: Document;\n try {\n document = makeDocumentFromString(text, absoluteRef);\n } catch (cause) {\n throw parseFailedError(\"yaml\", absoluteRef, cause);\n }\n // Text that is only a YAML string scalar, such as \"./openapi.yaml\", was meant as a file path.\n if (typeof document.parsed === \"string\") {\n throw pathStringError(text);\n }\n const failure = aliasExpansionFailure(document.parsed);\n if (failure !== undefined) {\n throw parseFailedError(\"yaml\", absoluteRef, failure);\n }\n return document;\n}\n\n/** The resolver throws for some failures (a missing file) and returns an error for others. */\nasync function resolveSchemaURL(options: ParseSchemaOptions): Promise<Document> {\n const result = await options.resolver\n .resolveDocument(null, options.absoluteRef, true)\n .catch((cause: unknown) => {\n throw cause instanceof YamlParseError\n ? fileParseFailedError(options.absoluteRef, cause)\n : loadFailedError(options.absoluteRef, readerError(cause));\n });\n if (\"parsed\" in result) {\n return result;\n }\n throw loadFailedError(options.absoluteRef, readerError(result));\n}\n\n/**\n * Redocly wraps a failed read in `ResolveError`, which keeps the reader's error in\n * `originalError`, not in `cause`. Unwrapped, the cause keeps the network reason (refused, DNS).\n */\nfunction readerError(error: unknown): unknown {\n let current = error;\n while (current instanceof ResolveError) {\n current = current.originalError;\n }\n return current;\n}\n\n/**\n * The resolver parses JSON files with its YAML parser too, so the format comes from the file\n * name. Some parser messages (a second YAML document) do not name the file; the error adds it.\n */\nfunction fileParseFailedError(absoluteRef: string, error: YamlParseError): Error {\n const format = absoluteRef.toLowerCase().endsWith(\".json\") ? \"json\" : \"yaml\";\n const cause = error.message.includes(absoluteRef)\n ? error\n : new Error(`${error.message} in \"${absoluteRef}\"`, { cause: error });\n return parseFailedError(format, absoluteRef, cause);\n}\n\nfunction parseSchemaObject(schema: unknown, absoluteRef: string): Document {\n if (typeof schema === \"object\" && !Array.isArray(schema)) {\n return {\n source: new Source(absoluteRef, JSON.stringify(schema), \"application/json\"),\n parsed: schema,\n };\n }\n throw sourceInvalidError(schema);\n}\n\n/** Parse any supported source: URL, stream, buffer, URL or document text, or a plain object. */\nexport async function parseSchema(schema: unknown, options: ParseSchemaOptions): Promise<Document> {\n if (!schema) {\n throw sourceEmptyError(\"Can’t parse empty schema\");\n }\n if (schema instanceof URL) {\n return resolveSchemaURL(options);\n }\n if (schema instanceof Readable) {\n return parseSchema(await readStream(schema, options.absoluteRef), options);\n }\n if (schema instanceof Buffer) {\n return parseSchema(schema.toString(\"utf8\"), options);\n }\n if (typeof schema === \"string\") {\n return parseSchemaText(schema, options);\n }\n return parseSchemaObject(schema, options.absoluteRef);\n}\n"],"names":["text"],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ 'use strict';
2
+
3
+ const errors = require('../../domain/errors.cjs');
4
+
5
+ const UNSUPPORTED_KEYS = /* @__PURE__ */ new Set([
6
+ "hasOwnProperty",
7
+ "isPrototypeOf",
8
+ "propertyIsEnumerable",
9
+ "toLocaleString",
10
+ "valueOf",
11
+ "__defineGetter__",
12
+ "__defineSetter__",
13
+ "__lookupGetter__",
14
+ "__lookupSetter__"
15
+ ]);
16
+ const KEYS_IN_MESSAGE = 5;
17
+ function escapePointerSegment(segment) {
18
+ return segment.replaceAll("~", "~0").replaceAll("/", "~1");
19
+ }
20
+ function unsupportedKeysOf(document) {
21
+ const found = [];
22
+ const visited = /* @__PURE__ */ new WeakSet();
23
+ const pending = [];
24
+ const enqueue = (value, pointer) => {
25
+ if (typeof value === "object" && value !== null && !visited.has(value)) {
26
+ visited.add(value);
27
+ pending.push({ value, pointer });
28
+ }
29
+ };
30
+ enqueue(document.parsed, "#");
31
+ for (let node = pending.pop(); node !== void 0; node = pending.pop()) {
32
+ for (const [key, child] of Object.entries(node.value)) {
33
+ const pointer = `${node.pointer}/${escapePointerSegment(key)}`;
34
+ if (UNSUPPORTED_KEYS.has(key)) {
35
+ found.push({ key, pointer, source: document.source });
36
+ }
37
+ enqueue(child, pointer);
38
+ }
39
+ }
40
+ return found;
41
+ }
42
+ function findUnsupportedKeys(documents) {
43
+ return documents.flatMap(unsupportedKeysOf);
44
+ }
45
+ function describeKey(found) {
46
+ return `"${found.key}" at ${found.pointer} in ${found.source}`;
47
+ }
48
+ function unsupportedKeysError(keys, cause) {
49
+ const listed = keys.slice(0, KEYS_IN_MESSAGE).map(describeKey);
50
+ const more = keys.length > KEYS_IN_MESSAGE ? ` and ${keys.length - KEYS_IN_MESSAGE} more` : "";
51
+ return new errors.OpenAPITypesafeError({
52
+ code: errors.ERROR_CODES.SCHEMA_KEY_UNSUPPORTED,
53
+ message: `The schema loader (Redocly 1.x) failed on a key named like a built-in object method. Rename it: ${listed.join(", ")}${more}.`,
54
+ details: { keys: keys.map((found) => ({ ...found })) },
55
+ cause
56
+ });
57
+ }
58
+
59
+ exports.UNSUPPORTED_KEYS = UNSUPPORTED_KEYS;
60
+ exports.findUnsupportedKeys = findUnsupportedKeys;
61
+ exports.unsupportedKeysError = unsupportedKeysError;
62
+ //# sourceMappingURL=unsupported-keys.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unsupported-keys.cjs","sources":["../../../src/adapters/redocly-loader/unsupported-keys.ts"],"sourcesContent":["import { ERROR_CODES, OpenAPITypesafeError } from \"../../domain/errors.js\";\n\n/**\n * Keys Redocly 1.34 cannot walk. It looks up the type of every key with `type.properties[key]`,\n * which also finds inherited `Object.prototype` members; it then calls a found function with no\n * `this`, and these methods throw a `TypeError` for that. Redocly 2.x looks up own keys only\n * (ADR-005 keeps 1.34). `toString` and `constructor` do not throw, and load as they should.\n *\n * Redocly does not walk every value (`default` and `const` are data), so a document with such a\n * key is not rejected up front: the loader looks for them only after Redocly threw a `TypeError`.\n */\nexport const UNSUPPORTED_KEYS: ReadonlySet<string> = new Set([\n \"hasOwnProperty\",\n \"isPrototypeOf\",\n \"propertyIsEnumerable\",\n \"toLocaleString\",\n \"valueOf\",\n \"__defineGetter__\",\n \"__defineSetter__\",\n \"__lookupGetter__\",\n \"__lookupSetter__\",\n]);\n\n/** Enough found keys in the message to act on; `details.keys` has all of them. */\nconst KEYS_IN_MESSAGE = 5;\n\n/** A parsed document and where it was loaded from. */\nexport interface LoadedDocument {\n readonly source: string;\n readonly parsed: unknown;\n}\n\n/** An unsupported key: its JSON pointer and the document that has it. */\nexport interface UnsupportedKey {\n readonly key: string;\n readonly pointer: string;\n readonly source: string;\n}\n\ninterface PendingNode {\n readonly value: object;\n readonly pointer: string;\n}\n\n/** RFC 6901: `~` becomes `~0` and `/` becomes `~1`. */\nfunction escapePointerSegment(segment: string): string {\n return segment.replaceAll(\"~\", \"~0\").replaceAll(\"/\", \"~1\");\n}\n\n/**\n * The unsupported keys of one parsed document. The walk uses its own stack, so a deeply nested\n * document is checked without running out of call stack; nodes shared by YAML aliases are checked\n * once.\n */\nfunction unsupportedKeysOf(document: LoadedDocument): UnsupportedKey[] {\n const found: UnsupportedKey[] = [];\n const visited = new WeakSet<object>();\n const pending: PendingNode[] = [];\n const enqueue = (value: unknown, pointer: string): void => {\n if (typeof value === \"object\" && value !== null && !visited.has(value)) {\n visited.add(value);\n pending.push({ value, pointer });\n }\n };\n enqueue(document.parsed, \"#\");\n for (let node = pending.pop(); node !== undefined; node = pending.pop()) {\n for (const [key, child] of Object.entries(node.value)) {\n const pointer = `${node.pointer}/${escapePointerSegment(key)}`;\n if (UNSUPPORTED_KEYS.has(key)) {\n found.push({ key, pointer, source: document.source });\n }\n enqueue(child, pointer);\n }\n }\n return found;\n}\n\n/** Every unsupported key of the given documents. */\nexport function findUnsupportedKeys(documents: readonly LoadedDocument[]): UnsupportedKey[] {\n return documents.flatMap(unsupportedKeysOf);\n}\n\nfunction describeKey(found: UnsupportedKey): string {\n return `\"${found.key}\" at ${found.pointer} in ${found.source}`;\n}\n\n/** The typed error for the keys the schema loader failed on; `cause` is Redocly's `TypeError`. */\nexport function unsupportedKeysError(\n keys: readonly UnsupportedKey[],\n cause: unknown,\n): OpenAPITypesafeError {\n const listed = keys.slice(0, KEYS_IN_MESSAGE).map(describeKey);\n const more = keys.length > KEYS_IN_MESSAGE ? ` and ${keys.length - KEYS_IN_MESSAGE} more` : \"\";\n return new OpenAPITypesafeError({\n code: ERROR_CODES.SCHEMA_KEY_UNSUPPORTED,\n message:\n \"The schema loader (Redocly 1.x) failed on a key named like a built-in object method. \" +\n `Rename it: ${listed.join(\", \")}${more}.`,\n details: { keys: keys.map((found) => ({ ...found })) },\n cause,\n });\n}\n"],"names":["OpenAPITypesafeError","ERROR_CODES"],"mappings":";;;;AAWO,MAAM,gBAAA,uBAA4C,GAAA,CAAI;AAAA,EAC3D,gBAAA;AAAA,EACA,eAAA;AAAA,EACA,sBAAA;AAAA,EACA,gBAAA;AAAA,EACA,SAAA;AAAA,EACA,kBAAA;AAAA,EACA,kBAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACF,CAAC;AAGD,MAAM,eAAA,GAAkB,CAAA;AAqBxB,SAAS,qBAAqB,OAAA,EAAyB;AACrD,EAAA,OAAO,QAAQ,UAAA,CAAW,GAAA,EAAK,IAAI,CAAA,CAAE,UAAA,CAAW,KAAK,IAAI,CAAA;AAC3D;AAOA,SAAS,kBAAkB,QAAA,EAA4C;AACrE,EAAA,MAAM,QAA0B,EAAC;AACjC,EAAA,MAAM,OAAA,uBAAc,OAAA,EAAgB;AACpC,EAAA,MAAM,UAAyB,EAAC;AAChC,EAAA,MAAM,OAAA,GAAU,CAAC,KAAA,EAAgB,OAAA,KAA0B;AACzD,IAAA,IAAI,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,CAAC,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,EAAG;AACtE,MAAA,OAAA,CAAQ,IAAI,KAAK,CAAA;AACjB,MAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,KAAA,EAAO,OAAA,EAAS,CAAA;AAAA,IACjC;AAAA,EACF,CAAA;AACA,EAAA,OAAA,CAAQ,QAAA,CAAS,QAAQ,GAAG,CAAA;AAC5B,EAAA,KAAA,IAAS,IAAA,GAAO,QAAQ,GAAA,EAAI,EAAG,SAAS,MAAA,EAAW,IAAA,GAAO,OAAA,CAAQ,GAAA,EAAI,EAAG;AACvE,IAAA,KAAA,MAAW,CAAC,KAAK,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,IAAA,CAAK,KAAK,CAAA,EAAG;AACrD,MAAA,MAAM,UAAU,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,CAAA,EAAI,oBAAA,CAAqB,GAAG,CAAC,CAAA,CAAA;AAC5D,MAAA,IAAI,gBAAA,CAAiB,GAAA,CAAI,GAAG,CAAA,EAAG;AAC7B,QAAA,KAAA,CAAM,KAAK,EAAE,GAAA,EAAK,SAAS,MAAA,EAAQ,QAAA,CAAS,QAAQ,CAAA;AAAA,MACtD;AACA,MAAA,OAAA,CAAQ,OAAO,OAAO,CAAA;AAAA,IACxB;AAAA,EACF;AACA,EAAA,OAAO,KAAA;AACT;AAGO,SAAS,oBAAoB,SAAA,EAAwD;AAC1F,EAAA,OAAO,SAAA,CAAU,QAAQ,iBAAiB,CAAA;AAC5C;AAEA,SAAS,YAAY,KAAA,EAA+B;AAClD,EAAA,OAAO,CAAA,CAAA,EAAI,MAAM,GAAG,CAAA,KAAA,EAAQ,MAAM,OAAO,CAAA,IAAA,EAAO,MAAM,MAAM,CAAA,CAAA;AAC9D;AAGO,SAAS,oBAAA,CACd,MACA,KAAA,EACsB;AACtB,EAAA,MAAM,SAAS,IAAA,CAAK,KAAA,CAAM,GAAG,eAAe,CAAA,CAAE,IAAI,WAAW,CAAA;AAC7D,EAAA,MAAM,IAAA,GAAO,KAAK,MAAA,GAAS,eAAA,GAAkB,QAAQ,IAAA,CAAK,MAAA,GAAS,eAAe,CAAA,KAAA,CAAA,GAAU,EAAA;AAC5F,EAAA,OAAO,IAAIA,2BAAA,CAAqB;AAAA,IAC9B,MAAMC,kBAAA,CAAY,sBAAA;AAAA,IAClB,SACE,CAAA,gGAAA,EACc,MAAA,CAAO,KAAK,IAAI,CAAC,GAAG,IAAI,CAAA,CAAA,CAAA;AAAA,IACxC,OAAA,EAAS,EAAE,IAAA,EAAM,IAAA,CAAK,GAAA,CAAI,CAAC,KAAA,MAAW,EAAE,GAAG,KAAA,EAAM,CAAE,CAAA,EAAE;AAAA,IACrD;AAAA,GACD,CAAA;AACH;;;;"}
@@ -0,0 +1,58 @@
1
+ import { OpenAPITypesafeError, ERROR_CODES } from '../../domain/errors.mjs';
2
+
3
+ const UNSUPPORTED_KEYS = /* @__PURE__ */ new Set([
4
+ "hasOwnProperty",
5
+ "isPrototypeOf",
6
+ "propertyIsEnumerable",
7
+ "toLocaleString",
8
+ "valueOf",
9
+ "__defineGetter__",
10
+ "__defineSetter__",
11
+ "__lookupGetter__",
12
+ "__lookupSetter__"
13
+ ]);
14
+ const KEYS_IN_MESSAGE = 5;
15
+ function escapePointerSegment(segment) {
16
+ return segment.replaceAll("~", "~0").replaceAll("/", "~1");
17
+ }
18
+ function unsupportedKeysOf(document) {
19
+ const found = [];
20
+ const visited = /* @__PURE__ */ new WeakSet();
21
+ const pending = [];
22
+ const enqueue = (value, pointer) => {
23
+ if (typeof value === "object" && value !== null && !visited.has(value)) {
24
+ visited.add(value);
25
+ pending.push({ value, pointer });
26
+ }
27
+ };
28
+ enqueue(document.parsed, "#");
29
+ for (let node = pending.pop(); node !== void 0; node = pending.pop()) {
30
+ for (const [key, child] of Object.entries(node.value)) {
31
+ const pointer = `${node.pointer}/${escapePointerSegment(key)}`;
32
+ if (UNSUPPORTED_KEYS.has(key)) {
33
+ found.push({ key, pointer, source: document.source });
34
+ }
35
+ enqueue(child, pointer);
36
+ }
37
+ }
38
+ return found;
39
+ }
40
+ function findUnsupportedKeys(documents) {
41
+ return documents.flatMap(unsupportedKeysOf);
42
+ }
43
+ function describeKey(found) {
44
+ return `"${found.key}" at ${found.pointer} in ${found.source}`;
45
+ }
46
+ function unsupportedKeysError(keys, cause) {
47
+ const listed = keys.slice(0, KEYS_IN_MESSAGE).map(describeKey);
48
+ const more = keys.length > KEYS_IN_MESSAGE ? ` and ${keys.length - KEYS_IN_MESSAGE} more` : "";
49
+ return new OpenAPITypesafeError({
50
+ code: ERROR_CODES.SCHEMA_KEY_UNSUPPORTED,
51
+ message: `The schema loader (Redocly 1.x) failed on a key named like a built-in object method. Rename it: ${listed.join(", ")}${more}.`,
52
+ details: { keys: keys.map((found) => ({ ...found })) },
53
+ cause
54
+ });
55
+ }
56
+
57
+ export { UNSUPPORTED_KEYS, findUnsupportedKeys, unsupportedKeysError };
58
+ //# sourceMappingURL=unsupported-keys.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unsupported-keys.mjs","sources":["../../../src/adapters/redocly-loader/unsupported-keys.ts"],"sourcesContent":["import { ERROR_CODES, OpenAPITypesafeError } from \"../../domain/errors.js\";\n\n/**\n * Keys Redocly 1.34 cannot walk. It looks up the type of every key with `type.properties[key]`,\n * which also finds inherited `Object.prototype` members; it then calls a found function with no\n * `this`, and these methods throw a `TypeError` for that. Redocly 2.x looks up own keys only\n * (ADR-005 keeps 1.34). `toString` and `constructor` do not throw, and load as they should.\n *\n * Redocly does not walk every value (`default` and `const` are data), so a document with such a\n * key is not rejected up front: the loader looks for them only after Redocly threw a `TypeError`.\n */\nexport const UNSUPPORTED_KEYS: ReadonlySet<string> = new Set([\n \"hasOwnProperty\",\n \"isPrototypeOf\",\n \"propertyIsEnumerable\",\n \"toLocaleString\",\n \"valueOf\",\n \"__defineGetter__\",\n \"__defineSetter__\",\n \"__lookupGetter__\",\n \"__lookupSetter__\",\n]);\n\n/** Enough found keys in the message to act on; `details.keys` has all of them. */\nconst KEYS_IN_MESSAGE = 5;\n\n/** A parsed document and where it was loaded from. */\nexport interface LoadedDocument {\n readonly source: string;\n readonly parsed: unknown;\n}\n\n/** An unsupported key: its JSON pointer and the document that has it. */\nexport interface UnsupportedKey {\n readonly key: string;\n readonly pointer: string;\n readonly source: string;\n}\n\ninterface PendingNode {\n readonly value: object;\n readonly pointer: string;\n}\n\n/** RFC 6901: `~` becomes `~0` and `/` becomes `~1`. */\nfunction escapePointerSegment(segment: string): string {\n return segment.replaceAll(\"~\", \"~0\").replaceAll(\"/\", \"~1\");\n}\n\n/**\n * The unsupported keys of one parsed document. The walk uses its own stack, so a deeply nested\n * document is checked without running out of call stack; nodes shared by YAML aliases are checked\n * once.\n */\nfunction unsupportedKeysOf(document: LoadedDocument): UnsupportedKey[] {\n const found: UnsupportedKey[] = [];\n const visited = new WeakSet<object>();\n const pending: PendingNode[] = [];\n const enqueue = (value: unknown, pointer: string): void => {\n if (typeof value === \"object\" && value !== null && !visited.has(value)) {\n visited.add(value);\n pending.push({ value, pointer });\n }\n };\n enqueue(document.parsed, \"#\");\n for (let node = pending.pop(); node !== undefined; node = pending.pop()) {\n for (const [key, child] of Object.entries(node.value)) {\n const pointer = `${node.pointer}/${escapePointerSegment(key)}`;\n if (UNSUPPORTED_KEYS.has(key)) {\n found.push({ key, pointer, source: document.source });\n }\n enqueue(child, pointer);\n }\n }\n return found;\n}\n\n/** Every unsupported key of the given documents. */\nexport function findUnsupportedKeys(documents: readonly LoadedDocument[]): UnsupportedKey[] {\n return documents.flatMap(unsupportedKeysOf);\n}\n\nfunction describeKey(found: UnsupportedKey): string {\n return `\"${found.key}\" at ${found.pointer} in ${found.source}`;\n}\n\n/** The typed error for the keys the schema loader failed on; `cause` is Redocly's `TypeError`. */\nexport function unsupportedKeysError(\n keys: readonly UnsupportedKey[],\n cause: unknown,\n): OpenAPITypesafeError {\n const listed = keys.slice(0, KEYS_IN_MESSAGE).map(describeKey);\n const more = keys.length > KEYS_IN_MESSAGE ? ` and ${keys.length - KEYS_IN_MESSAGE} more` : \"\";\n return new OpenAPITypesafeError({\n code: ERROR_CODES.SCHEMA_KEY_UNSUPPORTED,\n message:\n \"The schema loader (Redocly 1.x) failed on a key named like a built-in object method. \" +\n `Rename it: ${listed.join(\", \")}${more}.`,\n details: { keys: keys.map((found) => ({ ...found })) },\n cause,\n });\n}\n"],"names":[],"mappings":";;AAWO,MAAM,gBAAA,uBAA4C,GAAA,CAAI;AAAA,EAC3D,gBAAA;AAAA,EACA,eAAA;AAAA,EACA,sBAAA;AAAA,EACA,gBAAA;AAAA,EACA,SAAA;AAAA,EACA,kBAAA;AAAA,EACA,kBAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACF,CAAC;AAGD,MAAM,eAAA,GAAkB,CAAA;AAqBxB,SAAS,qBAAqB,OAAA,EAAyB;AACrD,EAAA,OAAO,QAAQ,UAAA,CAAW,GAAA,EAAK,IAAI,CAAA,CAAE,UAAA,CAAW,KAAK,IAAI,CAAA;AAC3D;AAOA,SAAS,kBAAkB,QAAA,EAA4C;AACrE,EAAA,MAAM,QAA0B,EAAC;AACjC,EAAA,MAAM,OAAA,uBAAc,OAAA,EAAgB;AACpC,EAAA,MAAM,UAAyB,EAAC;AAChC,EAAA,MAAM,OAAA,GAAU,CAAC,KAAA,EAAgB,OAAA,KAA0B;AACzD,IAAA,IAAI,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,CAAC,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,EAAG;AACtE,MAAA,OAAA,CAAQ,IAAI,KAAK,CAAA;AACjB,MAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,KAAA,EAAO,OAAA,EAAS,CAAA;AAAA,IACjC;AAAA,EACF,CAAA;AACA,EAAA,OAAA,CAAQ,QAAA,CAAS,QAAQ,GAAG,CAAA;AAC5B,EAAA,KAAA,IAAS,IAAA,GAAO,QAAQ,GAAA,EAAI,EAAG,SAAS,MAAA,EAAW,IAAA,GAAO,OAAA,CAAQ,GAAA,EAAI,EAAG;AACvE,IAAA,KAAA,MAAW,CAAC,KAAK,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,IAAA,CAAK,KAAK,CAAA,EAAG;AACrD,MAAA,MAAM,UAAU,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,CAAA,EAAI,oBAAA,CAAqB,GAAG,CAAC,CAAA,CAAA;AAC5D,MAAA,IAAI,gBAAA,CAAiB,GAAA,CAAI,GAAG,CAAA,EAAG;AAC7B,QAAA,KAAA,CAAM,KAAK,EAAE,GAAA,EAAK,SAAS,MAAA,EAAQ,QAAA,CAAS,QAAQ,CAAA;AAAA,MACtD;AACA,MAAA,OAAA,CAAQ,OAAO,OAAO,CAAA;AAAA,IACxB;AAAA,EACF;AACA,EAAA,OAAO,KAAA;AACT;AAGO,SAAS,oBAAoB,SAAA,EAAwD;AAC1F,EAAA,OAAO,SAAA,CAAU,QAAQ,iBAAiB,CAAA;AAC5C;AAEA,SAAS,YAAY,KAAA,EAA+B;AAClD,EAAA,OAAO,CAAA,CAAA,EAAI,MAAM,GAAG,CAAA,KAAA,EAAQ,MAAM,OAAO,CAAA,IAAA,EAAO,MAAM,MAAM,CAAA,CAAA;AAC9D;AAGO,SAAS,oBAAA,CACd,MACA,KAAA,EACsB;AACtB,EAAA,MAAM,SAAS,IAAA,CAAK,KAAA,CAAM,GAAG,eAAe,CAAA,CAAE,IAAI,WAAW,CAAA;AAC7D,EAAA,MAAM,IAAA,GAAO,KAAK,MAAA,GAAS,eAAA,GAAkB,QAAQ,IAAA,CAAK,MAAA,GAAS,eAAe,CAAA,KAAA,CAAA,GAAU,EAAA;AAC5F,EAAA,OAAO,IAAI,oBAAA,CAAqB;AAAA,IAC9B,MAAM,WAAA,CAAY,sBAAA;AAAA,IAClB,SACE,CAAA,gGAAA,EACc,MAAA,CAAO,KAAK,IAAI,CAAC,GAAG,IAAI,CAAA,CAAA,CAAA;AAAA,IACxC,OAAA,EAAS,EAAE,IAAA,EAAM,IAAA,CAAK,GAAA,CAAI,CAAC,KAAA,MAAW,EAAE,GAAG,KAAA,EAAM,CAAE,CAAA,EAAE;AAAA,IACrD;AAAA,GACD,CAAA;AACH;;"}
@@ -0,0 +1,67 @@
1
+ 'use strict';
2
+
3
+ const colors = require('ansi-colors');
4
+
5
+ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e.default : e; }
6
+
7
+ const colors__default = /*#__PURE__*/_interopDefaultCompat(colors);
8
+
9
+ const MILLISECONDS_PER_SECOND = 1e3;
10
+ const MILLISECONDS_PER_MINUTE = 6e4;
11
+ function formatDuration(milliseconds) {
12
+ if (milliseconds < MILLISECONDS_PER_SECOND) {
13
+ return `${Math.round(10 * milliseconds) / 10}ms`;
14
+ }
15
+ if (milliseconds < MILLISECONDS_PER_MINUTE) {
16
+ return `${Math.round(milliseconds / 100) / 10}s`;
17
+ }
18
+ return `${Math.round(milliseconds / 6e3) / 10}m`;
19
+ }
20
+ function groupColor(palette, group) {
21
+ const byGroup = {
22
+ redoc: palette.cyanBright,
23
+ lint: palette.yellowBright,
24
+ bundle: palette.magentaBright,
25
+ ts: palette.blueBright
26
+ };
27
+ return group && byGroup[group] || palette.whiteBright;
28
+ }
29
+ function isDebugEnabled(filter, group) {
30
+ if (!filter) {
31
+ return false;
32
+ }
33
+ return !group || filter === "*" || filter === "openapi-ts:*" || filter.toLocaleLowerCase() === `openapi-ts:${group.toLocaleLowerCase()}`;
34
+ }
35
+ class TerminalLogger {
36
+ #options;
37
+ #palette;
38
+ constructor(options) {
39
+ this.#options = options;
40
+ this.#palette = colors__default.create();
41
+ this.#palette.enabled = options.useColors;
42
+ }
43
+ debug(message, group, durationMs) {
44
+ if (!isDebugEnabled(this.#options.debugFilter, group)) {
45
+ return;
46
+ }
47
+ const name = groupColor(this.#palette, group)(`openapi-ts:${group ?? "info"}`);
48
+ const time = durationMs === void 0 ? "" : this.#palette.green(` ${formatDuration(durationMs)} `);
49
+ this.#options.sink.debug(` ${this.#palette.bold(name)}${time}${message}`);
50
+ }
51
+ warn(message) {
52
+ if (!this.#options.silent) {
53
+ this.#options.sink.warn(this.#palette.yellow(` \u26A0 ${message}`));
54
+ }
55
+ }
56
+ error(message) {
57
+ this.#options.sink.error(this.#palette.red(` \u2718 ${message}`));
58
+ }
59
+ }
60
+ function createTerminalLogger(options) {
61
+ return new TerminalLogger(options);
62
+ }
63
+
64
+ exports.createTerminalLogger = createTerminalLogger;
65
+ exports.formatDuration = formatDuration;
66
+ exports.isDebugEnabled = isDebugEnabled;
67
+ //# sourceMappingURL=terminal-logger.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-logger.cjs","sources":["../../../src/adapters/terminal-logger/terminal-logger.ts"],"sourcesContent":["import colors from \"ansi-colors\";\nimport type { DebugGroup, Logger } from \"../../application/ports/logger.js\";\n\n/**\n * The Logger port on a terminal, with the original output format: ` ⚠ ` warnings, ` ✘ `\n * errors, and `openapi-ts:<group>` debug lines filtered by `DEBUG` (ENGINEERING_PLAN 4.5).\n */\n\n/** Where the lines go: `console` in production, a recording sink in tests. */\nexport interface TerminalSink {\n debug(line: string): void;\n warn(line: string): void;\n error(line: string): void;\n}\n\nexport interface TerminalLoggerOptions {\n /** Drop warnings (errors and debug lines are still written). */\n readonly silent: boolean;\n /** The value of `DEBUG`: `*`, `openapi-ts:*` or `openapi-ts:<group>` turn debug lines on. */\n readonly debugFilter: string | undefined;\n readonly useColors: boolean;\n readonly sink: TerminalSink;\n}\n\ntype Colors = ReturnType<typeof colors.create>;\n\nconst MILLISECONDS_PER_SECOND = 1000;\nconst MILLISECONDS_PER_MINUTE = 60_000;\n\n/** A duration as the original prints it: one decimal, in ms, s or m. */\nexport function formatDuration(milliseconds: number): string {\n if (milliseconds < MILLISECONDS_PER_SECOND) {\n return `${Math.round(10 * milliseconds) / 10}ms`;\n }\n if (milliseconds < MILLISECONDS_PER_MINUTE) {\n return `${Math.round(milliseconds / 100) / 10}s`;\n }\n return `${Math.round(milliseconds / 6000) / 10}m`;\n}\n\nfunction groupColor(palette: Colors, group: DebugGroup | undefined): (text: string) => string {\n const byGroup: Readonly<Partial<Record<DebugGroup, (text: string) => string>>> = {\n redoc: palette.cyanBright,\n lint: palette.yellowBright,\n bundle: palette.magentaBright,\n ts: palette.blueBright,\n };\n return (group && byGroup[group]) || palette.whiteBright;\n}\n\n/** Whether `DEBUG` asks for this group (the original check, case-insensitive for the group). */\nexport function isDebugEnabled(filter: string | undefined, group: DebugGroup | undefined): boolean {\n if (!filter) {\n return false;\n }\n return (\n !group ||\n filter === \"*\" ||\n filter === \"openapi-ts:*\" ||\n filter.toLocaleLowerCase() === `openapi-ts:${group.toLocaleLowerCase()}`\n );\n}\n\nclass TerminalLogger implements Logger {\n readonly #options: TerminalLoggerOptions;\n readonly #palette: Colors;\n\n constructor(options: TerminalLoggerOptions) {\n this.#options = options;\n this.#palette = colors.create();\n this.#palette.enabled = options.useColors;\n }\n\n debug(message: string, group?: DebugGroup, durationMs?: number): void {\n if (!isDebugEnabled(this.#options.debugFilter, group)) {\n return;\n }\n const name = groupColor(this.#palette, group)(`openapi-ts:${group ?? \"info\"}`);\n const time =\n durationMs === undefined ? \"\" : this.#palette.green(` ${formatDuration(durationMs)} `);\n this.#options.sink.debug(` ${this.#palette.bold(name)}${time}${message}`);\n }\n\n warn(message: string): void {\n if (!this.#options.silent) {\n this.#options.sink.warn(this.#palette.yellow(` ⚠ ${message}`));\n }\n }\n\n error(message: string): void {\n this.#options.sink.error(this.#palette.red(` ✘ ${message}`));\n }\n}\n\n/** A Logger that writes to a terminal sink. */\nexport function createTerminalLogger(options: TerminalLoggerOptions): Logger {\n return new TerminalLogger(options);\n}\n"],"names":["colors"],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import colors from 'ansi-colors';
2
+
3
+ const MILLISECONDS_PER_SECOND = 1e3;
4
+ const MILLISECONDS_PER_MINUTE = 6e4;
5
+ function formatDuration(milliseconds) {
6
+ if (milliseconds < MILLISECONDS_PER_SECOND) {
7
+ return `${Math.round(10 * milliseconds) / 10}ms`;
8
+ }
9
+ if (milliseconds < MILLISECONDS_PER_MINUTE) {
10
+ return `${Math.round(milliseconds / 100) / 10}s`;
11
+ }
12
+ return `${Math.round(milliseconds / 6e3) / 10}m`;
13
+ }
14
+ function groupColor(palette, group) {
15
+ const byGroup = {
16
+ redoc: palette.cyanBright,
17
+ lint: palette.yellowBright,
18
+ bundle: palette.magentaBright,
19
+ ts: palette.blueBright
20
+ };
21
+ return group && byGroup[group] || palette.whiteBright;
22
+ }
23
+ function isDebugEnabled(filter, group) {
24
+ if (!filter) {
25
+ return false;
26
+ }
27
+ return !group || filter === "*" || filter === "openapi-ts:*" || filter.toLocaleLowerCase() === `openapi-ts:${group.toLocaleLowerCase()}`;
28
+ }
29
+ class TerminalLogger {
30
+ #options;
31
+ #palette;
32
+ constructor(options) {
33
+ this.#options = options;
34
+ this.#palette = colors.create();
35
+ this.#palette.enabled = options.useColors;
36
+ }
37
+ debug(message, group, durationMs) {
38
+ if (!isDebugEnabled(this.#options.debugFilter, group)) {
39
+ return;
40
+ }
41
+ const name = groupColor(this.#palette, group)(`openapi-ts:${group ?? "info"}`);
42
+ const time = durationMs === void 0 ? "" : this.#palette.green(` ${formatDuration(durationMs)} `);
43
+ this.#options.sink.debug(` ${this.#palette.bold(name)}${time}${message}`);
44
+ }
45
+ warn(message) {
46
+ if (!this.#options.silent) {
47
+ this.#options.sink.warn(this.#palette.yellow(` \u26A0 ${message}`));
48
+ }
49
+ }
50
+ error(message) {
51
+ this.#options.sink.error(this.#palette.red(` \u2718 ${message}`));
52
+ }
53
+ }
54
+ function createTerminalLogger(options) {
55
+ return new TerminalLogger(options);
56
+ }
57
+
58
+ export { createTerminalLogger, formatDuration, isDebugEnabled };
59
+ //# sourceMappingURL=terminal-logger.mjs.map