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 @@
1
+ {"version":3,"file":"normalize.mjs","sources":["../../../src/domain/ir/normalize.ts"],"sourcesContent":["import type { IrKeyword, IrType } from \"./nodes.js\";\n\n/**\n * Keywords that `dedupeTypes` removes when repeated. The original (`tsDedupe`) treats these as\n * primitives; `unknown` is not one of them and is kept even when repeated.\n */\nconst DEDUPLICATED_KEYWORDS: ReadonlySet<IrKeyword> = new Set([\n \"boolean\",\n \"never\",\n \"null\",\n \"number\",\n \"string\",\n \"undefined\",\n]);\n\n/**\n * Remove repeated primitive keywords from a union or intersection member list, keeping the first\n * occurrence and the order. Literals, references and object types are never removed, even when\n * equal: this matches the original `tsDedupe`, which compares only node kinds of primitives.\n */\nexport function dedupeTypes(types: readonly IrType[]): IrType[] {\n const seenKeywords = new Set<IrKeyword>();\n const kept: IrType[] = [];\n for (const type of types) {\n if (type.kind === \"keyword\" && DEDUPLICATED_KEYWORDS.has(type.keyword)) {\n if (seenKeywords.has(type.keyword)) {\n continue;\n }\n seenKeywords.add(type.keyword);\n }\n kept.push(type);\n }\n return kept;\n}\n\n/**\n * The collation the original `getEntries` uses for `alphabetize`. Natural order: `a2` sorts before\n * `a10`. It is locale-based on purpose, to stay byte-compatible with the original output.\n */\nconst ALPHABETIZE_COLLATOR = new Intl.Collator(\"en-us\", { numeric: true });\n\n/**\n * Sort `[key, value]` entries by key like the original `alphabetize` option (ENGINEERING_PLAN 4.1\n * `sortMembers`). The original sorts source entries before it builds members, so transformers call\n * this on entries, not on finished IR members. The sort is stable and returns a new array.\n */\nexport function sortEntriesByKey<T>(entries: readonly (readonly [string, T])[]): [string, T][] {\n return entries\n .map(([key, value]): [string, T] => [key, value])\n .sort(([left], [right]) => ALPHABETIZE_COLLATOR.compare(left, right));\n}\n"],"names":[],"mappings":"AAMA,MAAM,qBAAA,uBAAoD,GAAA,CAAI;AAAA,EAC5D,SAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAC,CAAA;AAOM,SAAS,YAAY,KAAA,EAAoC;AAC9D,EAAA,MAAM,YAAA,uBAAmB,GAAA,EAAe;AACxC,EAAA,MAAM,OAAiB,EAAC;AACxB,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,IAAI,KAAK,IAAA,KAAS,SAAA,IAAa,sBAAsB,GAAA,CAAI,IAAA,CAAK,OAAO,CAAA,EAAG;AACtE,MAAA,IAAI,YAAA,CAAa,GAAA,CAAI,IAAA,CAAK,OAAO,CAAA,EAAG;AAClC,QAAA;AAAA,MACF;AACA,MAAA,YAAA,CAAa,GAAA,CAAI,KAAK,OAAO,CAAA;AAAA,IAC/B;AACA,IAAA,IAAA,CAAK,KAAK,IAAI,CAAA;AAAA,EAChB;AACA,EAAA,OAAO,IAAA;AACT;AAMA,MAAM,oBAAA,GAAuB,IAAI,IAAA,CAAK,QAAA,CAAS,SAAS,EAAE,OAAA,EAAS,MAAM,CAAA;AAOlE,SAAS,iBAAoB,OAAA,EAA2D;AAC7F,EAAA,OAAO,OAAA,CACJ,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAmB,CAAC,GAAA,EAAK,KAAK,CAAC,CAAA,CAC/C,KAAK,CAAC,CAAC,IAAI,CAAA,EAAG,CAAC,KAAK,MAAM,oBAAA,CAAqB,OAAA,CAAQ,IAAA,EAAM,KAAK,CAAC,CAAA;AACxE;;"}
@@ -0,0 +1,19 @@
1
+ 'use strict';
2
+
3
+ const JS_PROPERTY_INDEX_RE = /^[A-Za-z_$][A-Za-z_$0-9]*$/;
4
+ function isNonNegativeNumberText(index) {
5
+ return String(Number(index)) === index && index[0] !== "-";
6
+ }
7
+ function toPropertyName(index) {
8
+ if (typeof index === "number") {
9
+ return index < 0 ? { kind: "string", value: String(index) } : { kind: "number", text: String(index) };
10
+ }
11
+ if (isNonNegativeNumberText(index)) {
12
+ return { kind: "number", text: index };
13
+ }
14
+ return JS_PROPERTY_INDEX_RE.test(index) ? { kind: "identifier", text: index } : { kind: "string", value: index };
15
+ }
16
+
17
+ exports.JS_PROPERTY_INDEX_RE = JS_PROPERTY_INDEX_RE;
18
+ exports.toPropertyName = toPropertyName;
19
+ //# sourceMappingURL=property-name.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"property-name.cjs","sources":["../../../src/domain/ir/property-name.ts"],"sourcesContent":["import type { IrPropertyName } from \"./nodes.js\";\n\n/** A name that can be written without quotes. */\nexport const JS_PROPERTY_INDEX_RE = /^[A-Za-z_$][A-Za-z_$0-9]*$/;\n\nfunction isNonNegativeNumberText(index: string): boolean {\n return String(Number(index)) === index && index[0] !== \"-\";\n}\n\n/**\n * Choose how a property key is written, following the original `tsPropertyIndex`: non-negative\n * numbers (and strings that are exactly such a number) unquoted, valid identifiers unquoted,\n * everything else as a quoted string. Negative numbers become strings because `-1` is not a valid\n * property key.\n */\nexport function toPropertyName(index: string | number): IrPropertyName {\n if (typeof index === \"number\") {\n return index < 0\n ? { kind: \"string\", value: String(index) }\n : { kind: \"number\", text: String(index) };\n }\n if (isNonNegativeNumberText(index)) {\n return { kind: \"number\", text: index };\n }\n return JS_PROPERTY_INDEX_RE.test(index)\n ? { kind: \"identifier\", text: index }\n : { kind: \"string\", value: index };\n}\n"],"names":[],"mappings":";;AAGO,MAAM,oBAAA,GAAuB;AAEpC,SAAS,wBAAwB,KAAA,EAAwB;AACvD,EAAA,OAAO,MAAA,CAAO,OAAO,KAAK,CAAC,MAAM,KAAA,IAAS,KAAA,CAAM,CAAC,CAAA,KAAM,GAAA;AACzD;AAQO,SAAS,eAAe,KAAA,EAAwC;AACrE,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,QAAQ,CAAA,GACX,EAAE,IAAA,EAAM,QAAA,EAAU,OAAO,MAAA,CAAO,KAAK,CAAA,EAAE,GACvC,EAAE,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,MAAA,CAAO,KAAK,CAAA,EAAE;AAAA,EAC5C;AACA,EAAA,IAAI,uBAAA,CAAwB,KAAK,CAAA,EAAG;AAClC,IAAA,OAAO,EAAE,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,KAAA,EAAM;AAAA,EACvC;AACA,EAAA,OAAO,oBAAA,CAAqB,IAAA,CAAK,KAAK,CAAA,GAClC,EAAE,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,KAAA,EAAM,GAClC,EAAE,IAAA,EAAM,QAAA,EAAU,OAAO,KAAA,EAAM;AACrC;;;"}
@@ -0,0 +1,16 @@
1
+ const JS_PROPERTY_INDEX_RE = /^[A-Za-z_$][A-Za-z_$0-9]*$/;
2
+ function isNonNegativeNumberText(index) {
3
+ return String(Number(index)) === index && index[0] !== "-";
4
+ }
5
+ function toPropertyName(index) {
6
+ if (typeof index === "number") {
7
+ return index < 0 ? { kind: "string", value: String(index) } : { kind: "number", text: String(index) };
8
+ }
9
+ if (isNonNegativeNumberText(index)) {
10
+ return { kind: "number", text: index };
11
+ }
12
+ return JS_PROPERTY_INDEX_RE.test(index) ? { kind: "identifier", text: index } : { kind: "string", value: index };
13
+ }
14
+
15
+ export { JS_PROPERTY_INDEX_RE, toPropertyName };
16
+ //# sourceMappingURL=property-name.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"property-name.mjs","sources":["../../../src/domain/ir/property-name.ts"],"sourcesContent":["import type { IrPropertyName } from \"./nodes.js\";\n\n/** A name that can be written without quotes. */\nexport const JS_PROPERTY_INDEX_RE = /^[A-Za-z_$][A-Za-z_$0-9]*$/;\n\nfunction isNonNegativeNumberText(index: string): boolean {\n return String(Number(index)) === index && index[0] !== \"-\";\n}\n\n/**\n * Choose how a property key is written, following the original `tsPropertyIndex`: non-negative\n * numbers (and strings that are exactly such a number) unquoted, valid identifiers unquoted,\n * everything else as a quoted string. Negative numbers become strings because `-1` is not a valid\n * property key.\n */\nexport function toPropertyName(index: string | number): IrPropertyName {\n if (typeof index === \"number\") {\n return index < 0\n ? { kind: \"string\", value: String(index) }\n : { kind: \"number\", text: String(index) };\n }\n if (isNonNegativeNumberText(index)) {\n return { kind: \"number\", text: index };\n }\n return JS_PROPERTY_INDEX_RE.test(index)\n ? { kind: \"identifier\", text: index }\n : { kind: \"string\", value: index };\n}\n"],"names":[],"mappings":"AAGO,MAAM,oBAAA,GAAuB;AAEpC,SAAS,wBAAwB,KAAA,EAAwB;AACvD,EAAA,OAAO,MAAA,CAAO,OAAO,KAAK,CAAC,MAAM,KAAA,IAAS,KAAA,CAAM,CAAC,CAAA,KAAM,GAAA;AACzD;AAQO,SAAS,eAAe,KAAA,EAAwC;AACrE,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,QAAQ,CAAA,GACX,EAAE,IAAA,EAAM,QAAA,EAAU,OAAO,MAAA,CAAO,KAAK,CAAA,EAAE,GACvC,EAAE,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,MAAA,CAAO,KAAK,CAAA,EAAE;AAAA,EAC5C;AACA,EAAA,IAAI,uBAAA,CAAwB,KAAK,CAAA,EAAG;AAClC,IAAA,OAAO,EAAE,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,KAAA,EAAM;AAAA,EACvC;AACA,EAAA,OAAO,oBAAA,CAAqB,IAAA,CAAK,KAAK,CAAA,GAClC,EAAE,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,KAAA,EAAM,GAClC,EAAE,IAAA,EAAM,QAAA,EAAU,OAAO,KAAA,EAAM;AACrC;;"}
@@ -0,0 +1,25 @@
1
+ 'use strict';
2
+
3
+ const SINGLE_QUOTED_ESCAPES = /* @__PURE__ */ new Map([
4
+ ["\\", "\\\\"],
5
+ ["'", "\\'"],
6
+ ["\n", "\\n"],
7
+ ["\r", "\\r"],
8
+ ["\u2028", "\\u2028"],
9
+ ["\u2029", "\\u2029"]
10
+ ]);
11
+ const SINGLE_QUOTED_SPECIAL_RE = /[\\'\n\r\u2028\u2029]/g;
12
+ function escapeSingleQuotedText(value) {
13
+ return value.replace(SINGLE_QUOTED_SPECIAL_RE, (char) => SINGLE_QUOTED_ESCAPES.get(char) ?? char);
14
+ }
15
+ const TEMPLATE_SPECIAL_RE = /\\|`|\$\{|\r/g;
16
+ function escapeTemplateSpecial(special) {
17
+ return special === "\r" ? "\\r" : `\\${special}`;
18
+ }
19
+ function escapeTemplateText(value) {
20
+ return value.replace(TEMPLATE_SPECIAL_RE, escapeTemplateSpecial);
21
+ }
22
+
23
+ exports.escapeSingleQuotedText = escapeSingleQuotedText;
24
+ exports.escapeTemplateText = escapeTemplateText;
25
+ //# sourceMappingURL=raw-text-escapes.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"raw-text-escapes.cjs","sources":["../../../src/domain/ir/raw-text-escapes.ts"],"sourcesContent":["/**\n * Escapes for document text that the transformer writes into raw type text (threat model,\n * docs/security/threat-model.md). Without them, a name or path from the document could end the\n * literal early and add its own code to the generated file. Only the characters that would end or\n * change the literal are escaped, so output for every other name stays byte-identical.\n */\n\n/** Line terminators end a single-quoted string; TypeScript reads U+2028 and U+2029 as such too. */\nconst SINGLE_QUOTED_ESCAPES: ReadonlyMap<string, string> = new Map([\n [\"\\\\\", \"\\\\\\\\\"],\n [\"'\", \"\\\\'\"],\n [\"\\n\", \"\\\\n\"],\n [\"\\r\", \"\\\\r\"],\n [\"\\u2028\", \"\\\\u2028\"],\n [\"\\u2029\", \"\\\\u2029\"],\n]);\nconst SINGLE_QUOTED_SPECIAL_RE = /[\\\\'\\n\\r\\u2028\\u2029]/g;\n\n/** The text between the quotes of a single-quoted string literal with this value. */\nexport function escapeSingleQuotedText(value: string): string {\n return value.replace(SINGLE_QUOTED_SPECIAL_RE, (char) => SINGLE_QUOTED_ESCAPES.get(char) ?? char);\n}\n\n/**\n * A backslash, a backtick, or the `${` that would start a placeholder. A raw carriage return is\n * read as a line feed inside a template literal, so it is written as an escape.\n */\nconst TEMPLATE_SPECIAL_RE = /\\\\|`|\\$\\{|\\r/g;\n\nfunction escapeTemplateSpecial(special: string): string {\n return special === \"\\r\" ? \"\\\\r\" : `\\\\${special}`;\n}\n\n/** Template literal text (between placeholders) that reads back as exactly this value. */\nexport function escapeTemplateText(value: string): string {\n return value.replace(TEMPLATE_SPECIAL_RE, escapeTemplateSpecial);\n}\n"],"names":[],"mappings":";;AAQA,MAAM,qBAAA,uBAAyD,GAAA,CAAI;AAAA,EACjE,CAAC,MAAM,MAAM,CAAA;AAAA,EACb,CAAC,KAAK,KAAK,CAAA;AAAA,EACX,CAAC,MAAM,KAAK,CAAA;AAAA,EACZ,CAAC,MAAM,KAAK,CAAA;AAAA,EACZ,CAAC,UAAU,SAAS,CAAA;AAAA,EACpB,CAAC,UAAU,SAAS;AACtB,CAAC,CAAA;AACD,MAAM,wBAAA,GAA2B,wBAAA;AAG1B,SAAS,uBAAuB,KAAA,EAAuB;AAC5D,EAAA,OAAO,KAAA,CAAM,QAAQ,wBAAA,EAA0B,CAAC,SAAS,qBAAA,CAAsB,GAAA,CAAI,IAAI,CAAA,IAAK,IAAI,CAAA;AAClG;AAMA,MAAM,mBAAA,GAAsB,eAAA;AAE5B,SAAS,sBAAsB,OAAA,EAAyB;AACtD,EAAA,OAAO,OAAA,KAAY,IAAA,GAAO,KAAA,GAAQ,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA;AAChD;AAGO,SAAS,mBAAmB,KAAA,EAAuB;AACxD,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,mBAAA,EAAqB,qBAAqB,CAAA;AACjE;;;"}
@@ -0,0 +1,22 @@
1
+ const SINGLE_QUOTED_ESCAPES = /* @__PURE__ */ new Map([
2
+ ["\\", "\\\\"],
3
+ ["'", "\\'"],
4
+ ["\n", "\\n"],
5
+ ["\r", "\\r"],
6
+ ["\u2028", "\\u2028"],
7
+ ["\u2029", "\\u2029"]
8
+ ]);
9
+ const SINGLE_QUOTED_SPECIAL_RE = /[\\'\n\r\u2028\u2029]/g;
10
+ function escapeSingleQuotedText(value) {
11
+ return value.replace(SINGLE_QUOTED_SPECIAL_RE, (char) => SINGLE_QUOTED_ESCAPES.get(char) ?? char);
12
+ }
13
+ const TEMPLATE_SPECIAL_RE = /\\|`|\$\{|\r/g;
14
+ function escapeTemplateSpecial(special) {
15
+ return special === "\r" ? "\\r" : `\\${special}`;
16
+ }
17
+ function escapeTemplateText(value) {
18
+ return value.replace(TEMPLATE_SPECIAL_RE, escapeTemplateSpecial);
19
+ }
20
+
21
+ export { escapeSingleQuotedText, escapeTemplateText };
22
+ //# sourceMappingURL=raw-text-escapes.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"raw-text-escapes.mjs","sources":["../../../src/domain/ir/raw-text-escapes.ts"],"sourcesContent":["/**\n * Escapes for document text that the transformer writes into raw type text (threat model,\n * docs/security/threat-model.md). Without them, a name or path from the document could end the\n * literal early and add its own code to the generated file. Only the characters that would end or\n * change the literal are escaped, so output for every other name stays byte-identical.\n */\n\n/** Line terminators end a single-quoted string; TypeScript reads U+2028 and U+2029 as such too. */\nconst SINGLE_QUOTED_ESCAPES: ReadonlyMap<string, string> = new Map([\n [\"\\\\\", \"\\\\\\\\\"],\n [\"'\", \"\\\\'\"],\n [\"\\n\", \"\\\\n\"],\n [\"\\r\", \"\\\\r\"],\n [\"\\u2028\", \"\\\\u2028\"],\n [\"\\u2029\", \"\\\\u2029\"],\n]);\nconst SINGLE_QUOTED_SPECIAL_RE = /[\\\\'\\n\\r\\u2028\\u2029]/g;\n\n/** The text between the quotes of a single-quoted string literal with this value. */\nexport function escapeSingleQuotedText(value: string): string {\n return value.replace(SINGLE_QUOTED_SPECIAL_RE, (char) => SINGLE_QUOTED_ESCAPES.get(char) ?? char);\n}\n\n/**\n * A backslash, a backtick, or the `${` that would start a placeholder. A raw carriage return is\n * read as a line feed inside a template literal, so it is written as an escape.\n */\nconst TEMPLATE_SPECIAL_RE = /\\\\|`|\\$\\{|\\r/g;\n\nfunction escapeTemplateSpecial(special: string): string {\n return special === \"\\r\" ? \"\\\\r\" : `\\\\${special}`;\n}\n\n/** Template literal text (between placeholders) that reads back as exactly this value. */\nexport function escapeTemplateText(value: string): string {\n return value.replace(TEMPLATE_SPECIAL_RE, escapeTemplateSpecial);\n}\n"],"names":[],"mappings":"AAQA,MAAM,qBAAA,uBAAyD,GAAA,CAAI;AAAA,EACjE,CAAC,MAAM,MAAM,CAAA;AAAA,EACb,CAAC,KAAK,KAAK,CAAA;AAAA,EACX,CAAC,MAAM,KAAK,CAAA;AAAA,EACZ,CAAC,MAAM,KAAK,CAAA;AAAA,EACZ,CAAC,UAAU,SAAS,CAAA;AAAA,EACpB,CAAC,UAAU,SAAS;AACtB,CAAC,CAAA;AACD,MAAM,wBAAA,GAA2B,wBAAA;AAG1B,SAAS,uBAAuB,KAAA,EAAuB;AAC5D,EAAA,OAAO,KAAA,CAAM,QAAQ,wBAAA,EAA0B,CAAC,SAAS,qBAAA,CAAsB,GAAA,CAAI,IAAI,CAAA,IAAK,IAAI,CAAA;AAClG;AAMA,MAAM,mBAAA,GAAsB,eAAA;AAE5B,SAAS,sBAAsB,OAAA,EAAyB;AACtD,EAAA,OAAO,OAAA,KAAY,IAAA,GAAO,KAAA,GAAQ,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA;AAChD;AAGO,SAAS,mBAAmB,KAAA,EAAuB;AACxD,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,mBAAA,EAAqB,qBAAqB,CAAA;AACjE;;"}
@@ -0,0 +1,75 @@
1
+ 'use strict';
2
+
3
+ const jsonPointer = require('./json-pointer.cjs');
4
+
5
+ const MAX_DEPTH = 16;
6
+ const LOCAL_REF_PREFIX = "#/";
7
+ function isObject(value) {
8
+ return typeof value === "object" && value !== null && !Array.isArray(value);
9
+ }
10
+ function resolveLocalRef(document, ref) {
11
+ if (!ref.startsWith(LOCAL_REF_PREFIX)) {
12
+ return void 0;
13
+ }
14
+ let node = document;
15
+ for (const segment of jsonPointer.parseRefPointer(ref)) {
16
+ node = isObject(node) || Array.isArray(node) ? node[segment] : void 0;
17
+ }
18
+ return node;
19
+ }
20
+ function intersect(left, right) {
21
+ if (left === null || right === null) {
22
+ return left ?? right;
23
+ }
24
+ return new Set([...left].filter((value) => right.has(value)));
25
+ }
26
+ function unite(sets) {
27
+ return sets.some((set) => set === null) ? null : new Set(sets.flatMap((set) => [...set ?? []]));
28
+ }
29
+ function isAdmittedValue(value) {
30
+ return value === null || ["string", "number", "boolean"].includes(typeof value);
31
+ }
32
+ function follow(node, walk) {
33
+ if (!isObject(node) || typeof node.$ref !== "string") {
34
+ return node;
35
+ }
36
+ return walk.skipped.has(node.$ref) ? void 0 : resolveLocalRef(walk.document, node.$ref);
37
+ }
38
+ function members(node, keyword) {
39
+ const list = node[keyword];
40
+ return Array.isArray(list) ? list : [];
41
+ }
42
+ function ownValues(node) {
43
+ const listed = Array.isArray(node.enum) ? node.enum.filter(isAdmittedValue) : null;
44
+ const constant = "const" in node && isAdmittedValue(node.const) ? /* @__PURE__ */ new Set([node.const]) : null;
45
+ return intersect(listed === null ? null : new Set(listed), constant);
46
+ }
47
+ function schemaValues(schema, walk) {
48
+ const node = follow(schema, walk);
49
+ if (!isObject(node) || walk.depth > MAX_DEPTH) {
50
+ return null;
51
+ }
52
+ const next = { ...walk, depth: walk.depth + 1 };
53
+ const parts = members(node, "allOf").map((part) => schemaValues(part, next));
54
+ const variants = [...members(node, "anyOf"), ...members(node, "oneOf")];
55
+ const union = variants.length === 0 ? null : unite(variants.map((v) => schemaValues(v, next)));
56
+ return [...parts, union].reduce(intersect, ownValues(node));
57
+ }
58
+ function propertyValues(schema, key, walk) {
59
+ const node = follow(schema, walk);
60
+ if (!isObject(node) || walk.depth > MAX_DEPTH) {
61
+ return null;
62
+ }
63
+ const next = { ...walk, depth: walk.depth + 1 };
64
+ const properties = isObject(node.properties) ? node.properties : {};
65
+ const own = Object.hasOwn(properties, key) ? schemaValues(properties[key], next) : null;
66
+ const parts = members(node, "allOf").map((part) => propertyValues(part, key, next));
67
+ return parts.reduce(intersect, own);
68
+ }
69
+ function admittedPropertyValues(schema, key, document, skipped = /* @__PURE__ */ new Set()) {
70
+ return propertyValues(schema, key, { document, depth: 0, skipped });
71
+ }
72
+
73
+ exports.admittedPropertyValues = admittedPropertyValues;
74
+ exports.resolveLocalRef = resolveLocalRef;
75
+ //# sourceMappingURL=admitted-values.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admitted-values.cjs","sources":["../../../src/domain/openapi/admitted-values.ts"],"sourcesContent":["import { parseRefPointer } from \"./json-pointer.js\";\n\n/**\n * The values a schema admits when it admits only finitely many (`enum`, `const`, and `allOf` /\n * `anyOf` / `oneOf` of those), read from the document. Null means \"any value\" as far as this\n * reading goes: a schema of any other shape, or a `$ref` it cannot follow, is never assumed to\n * exclude a value.\n */\n\nexport type AdmittedValue = string | number | boolean | null;\n/** A finite set of values, or null for every value. */\nexport type AdmittedValues = ReadonlySet<AdmittedValue> | null;\n\ntype JsonObject = Readonly<Record<string, unknown>>;\n\n/** How deep `$ref`s and compositions are followed; deeper schemas admit every value. */\nconst MAX_DEPTH = 16;\nconst LOCAL_REF_PREFIX = \"#/\";\n\nfunction isObject(value: unknown): value is JsonObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/** The node at a local `$ref` (`#/...`) of the document, or undefined. */\nexport function resolveLocalRef(document: unknown, ref: string): unknown {\n if (!ref.startsWith(LOCAL_REF_PREFIX)) {\n return undefined;\n }\n let node: unknown = document;\n for (const segment of parseRefPointer(ref)) {\n node = isObject(node) || Array.isArray(node) ? (node as JsonObject)[segment] : undefined;\n }\n return node;\n}\n\nfunction intersect(left: AdmittedValues, right: AdmittedValues): AdmittedValues {\n if (left === null || right === null) {\n return left ?? right;\n }\n return new Set([...left].filter((value) => right.has(value)));\n}\n\nfunction unite(sets: readonly AdmittedValues[]): AdmittedValues {\n return sets.some((set) => set === null) ? null : new Set(sets.flatMap((set) => [...(set ?? [])]));\n}\n\nfunction isAdmittedValue(value: unknown): value is AdmittedValue {\n return value === null || [\"string\", \"number\", \"boolean\"].includes(typeof value);\n}\n\ninterface Walk {\n readonly document: unknown;\n readonly depth: number;\n /** `$ref`s whose targets are left out: they add nothing to the generated type here. */\n readonly skipped: ReadonlySet<string>;\n}\n\nfunction follow(node: unknown, walk: Walk): unknown {\n if (!isObject(node) || typeof node.$ref !== \"string\") {\n return node;\n }\n return walk.skipped.has(node.$ref) ? undefined : resolveLocalRef(walk.document, node.$ref);\n}\n\nfunction members(node: JsonObject, keyword: string): readonly unknown[] {\n const list = node[keyword];\n return Array.isArray(list) ? list : [];\n}\n\n/** `enum` and `const` of the schema itself, before its compositions. */\nfunction ownValues(node: JsonObject): AdmittedValues {\n const listed = Array.isArray(node.enum) ? node.enum.filter(isAdmittedValue) : null;\n const constant = \"const\" in node && isAdmittedValue(node.const) ? new Set([node.const]) : null;\n return intersect(listed === null ? null : new Set(listed), constant);\n}\n\nfunction schemaValues(schema: unknown, walk: Walk): AdmittedValues {\n const node = follow(schema, walk);\n if (!isObject(node) || walk.depth > MAX_DEPTH) {\n return null;\n }\n const next = { ...walk, depth: walk.depth + 1 };\n const parts = members(node, \"allOf\").map((part) => schemaValues(part, next));\n const variants = [...members(node, \"anyOf\"), ...members(node, \"oneOf\")];\n const union = variants.length === 0 ? null : unite(variants.map((v) => schemaValues(v, next)));\n return [...parts, union].reduce<AdmittedValues>(intersect, ownValues(node));\n}\n\nfunction propertyValues(schema: unknown, key: string, walk: Walk): AdmittedValues {\n const node = follow(schema, walk);\n if (!isObject(node) || walk.depth > MAX_DEPTH) {\n return null;\n }\n const next = { ...walk, depth: walk.depth + 1 };\n const properties = isObject(node.properties) ? node.properties : {};\n const own = Object.hasOwn(properties, key) ? schemaValues(properties[key], next) : null;\n const parts = members(node, \"allOf\").map((part) => propertyValues(part, key, next));\n return parts.reduce<AdmittedValues>(intersect, own);\n}\n\n/**\n * The values property `key` of an object schema admits: the intersection over the schema's own\n * `properties` and its `allOf` parts (followed through `$ref`s, except `skipped` ones); null for\n * every value.\n */\nexport function admittedPropertyValues(\n schema: unknown,\n key: string,\n document: unknown,\n skipped: ReadonlySet<string> = new Set(),\n): AdmittedValues {\n return propertyValues(schema, key, { document, depth: 0, skipped });\n}\n"],"names":["parseRefPointer"],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ import { parseRefPointer } from './json-pointer.mjs';
2
+
3
+ const MAX_DEPTH = 16;
4
+ const LOCAL_REF_PREFIX = "#/";
5
+ function isObject(value) {
6
+ return typeof value === "object" && value !== null && !Array.isArray(value);
7
+ }
8
+ function resolveLocalRef(document, ref) {
9
+ if (!ref.startsWith(LOCAL_REF_PREFIX)) {
10
+ return void 0;
11
+ }
12
+ let node = document;
13
+ for (const segment of parseRefPointer(ref)) {
14
+ node = isObject(node) || Array.isArray(node) ? node[segment] : void 0;
15
+ }
16
+ return node;
17
+ }
18
+ function intersect(left, right) {
19
+ if (left === null || right === null) {
20
+ return left ?? right;
21
+ }
22
+ return new Set([...left].filter((value) => right.has(value)));
23
+ }
24
+ function unite(sets) {
25
+ return sets.some((set) => set === null) ? null : new Set(sets.flatMap((set) => [...set ?? []]));
26
+ }
27
+ function isAdmittedValue(value) {
28
+ return value === null || ["string", "number", "boolean"].includes(typeof value);
29
+ }
30
+ function follow(node, walk) {
31
+ if (!isObject(node) || typeof node.$ref !== "string") {
32
+ return node;
33
+ }
34
+ return walk.skipped.has(node.$ref) ? void 0 : resolveLocalRef(walk.document, node.$ref);
35
+ }
36
+ function members(node, keyword) {
37
+ const list = node[keyword];
38
+ return Array.isArray(list) ? list : [];
39
+ }
40
+ function ownValues(node) {
41
+ const listed = Array.isArray(node.enum) ? node.enum.filter(isAdmittedValue) : null;
42
+ const constant = "const" in node && isAdmittedValue(node.const) ? /* @__PURE__ */ new Set([node.const]) : null;
43
+ return intersect(listed === null ? null : new Set(listed), constant);
44
+ }
45
+ function schemaValues(schema, walk) {
46
+ const node = follow(schema, walk);
47
+ if (!isObject(node) || walk.depth > MAX_DEPTH) {
48
+ return null;
49
+ }
50
+ const next = { ...walk, depth: walk.depth + 1 };
51
+ const parts = members(node, "allOf").map((part) => schemaValues(part, next));
52
+ const variants = [...members(node, "anyOf"), ...members(node, "oneOf")];
53
+ const union = variants.length === 0 ? null : unite(variants.map((v) => schemaValues(v, next)));
54
+ return [...parts, union].reduce(intersect, ownValues(node));
55
+ }
56
+ function propertyValues(schema, key, walk) {
57
+ const node = follow(schema, walk);
58
+ if (!isObject(node) || walk.depth > MAX_DEPTH) {
59
+ return null;
60
+ }
61
+ const next = { ...walk, depth: walk.depth + 1 };
62
+ const properties = isObject(node.properties) ? node.properties : {};
63
+ const own = Object.hasOwn(properties, key) ? schemaValues(properties[key], next) : null;
64
+ const parts = members(node, "allOf").map((part) => propertyValues(part, key, next));
65
+ return parts.reduce(intersect, own);
66
+ }
67
+ function admittedPropertyValues(schema, key, document, skipped = /* @__PURE__ */ new Set()) {
68
+ return propertyValues(schema, key, { document, depth: 0, skipped });
69
+ }
70
+
71
+ export { admittedPropertyValues, resolveLocalRef };
72
+ //# sourceMappingURL=admitted-values.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admitted-values.mjs","sources":["../../../src/domain/openapi/admitted-values.ts"],"sourcesContent":["import { parseRefPointer } from \"./json-pointer.js\";\n\n/**\n * The values a schema admits when it admits only finitely many (`enum`, `const`, and `allOf` /\n * `anyOf` / `oneOf` of those), read from the document. Null means \"any value\" as far as this\n * reading goes: a schema of any other shape, or a `$ref` it cannot follow, is never assumed to\n * exclude a value.\n */\n\nexport type AdmittedValue = string | number | boolean | null;\n/** A finite set of values, or null for every value. */\nexport type AdmittedValues = ReadonlySet<AdmittedValue> | null;\n\ntype JsonObject = Readonly<Record<string, unknown>>;\n\n/** How deep `$ref`s and compositions are followed; deeper schemas admit every value. */\nconst MAX_DEPTH = 16;\nconst LOCAL_REF_PREFIX = \"#/\";\n\nfunction isObject(value: unknown): value is JsonObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/** The node at a local `$ref` (`#/...`) of the document, or undefined. */\nexport function resolveLocalRef(document: unknown, ref: string): unknown {\n if (!ref.startsWith(LOCAL_REF_PREFIX)) {\n return undefined;\n }\n let node: unknown = document;\n for (const segment of parseRefPointer(ref)) {\n node = isObject(node) || Array.isArray(node) ? (node as JsonObject)[segment] : undefined;\n }\n return node;\n}\n\nfunction intersect(left: AdmittedValues, right: AdmittedValues): AdmittedValues {\n if (left === null || right === null) {\n return left ?? right;\n }\n return new Set([...left].filter((value) => right.has(value)));\n}\n\nfunction unite(sets: readonly AdmittedValues[]): AdmittedValues {\n return sets.some((set) => set === null) ? null : new Set(sets.flatMap((set) => [...(set ?? [])]));\n}\n\nfunction isAdmittedValue(value: unknown): value is AdmittedValue {\n return value === null || [\"string\", \"number\", \"boolean\"].includes(typeof value);\n}\n\ninterface Walk {\n readonly document: unknown;\n readonly depth: number;\n /** `$ref`s whose targets are left out: they add nothing to the generated type here. */\n readonly skipped: ReadonlySet<string>;\n}\n\nfunction follow(node: unknown, walk: Walk): unknown {\n if (!isObject(node) || typeof node.$ref !== \"string\") {\n return node;\n }\n return walk.skipped.has(node.$ref) ? undefined : resolveLocalRef(walk.document, node.$ref);\n}\n\nfunction members(node: JsonObject, keyword: string): readonly unknown[] {\n const list = node[keyword];\n return Array.isArray(list) ? list : [];\n}\n\n/** `enum` and `const` of the schema itself, before its compositions. */\nfunction ownValues(node: JsonObject): AdmittedValues {\n const listed = Array.isArray(node.enum) ? node.enum.filter(isAdmittedValue) : null;\n const constant = \"const\" in node && isAdmittedValue(node.const) ? new Set([node.const]) : null;\n return intersect(listed === null ? null : new Set(listed), constant);\n}\n\nfunction schemaValues(schema: unknown, walk: Walk): AdmittedValues {\n const node = follow(schema, walk);\n if (!isObject(node) || walk.depth > MAX_DEPTH) {\n return null;\n }\n const next = { ...walk, depth: walk.depth + 1 };\n const parts = members(node, \"allOf\").map((part) => schemaValues(part, next));\n const variants = [...members(node, \"anyOf\"), ...members(node, \"oneOf\")];\n const union = variants.length === 0 ? null : unite(variants.map((v) => schemaValues(v, next)));\n return [...parts, union].reduce<AdmittedValues>(intersect, ownValues(node));\n}\n\nfunction propertyValues(schema: unknown, key: string, walk: Walk): AdmittedValues {\n const node = follow(schema, walk);\n if (!isObject(node) || walk.depth > MAX_DEPTH) {\n return null;\n }\n const next = { ...walk, depth: walk.depth + 1 };\n const properties = isObject(node.properties) ? node.properties : {};\n const own = Object.hasOwn(properties, key) ? schemaValues(properties[key], next) : null;\n const parts = members(node, \"allOf\").map((part) => propertyValues(part, key, next));\n return parts.reduce<AdmittedValues>(intersect, own);\n}\n\n/**\n * The values property `key` of an object schema admits: the intersection over the schema's own\n * `properties` and its `allOf` parts (followed through `$ref`s, except `skipped` ones); null for\n * every value.\n */\nexport function admittedPropertyValues(\n schema: unknown,\n key: string,\n document: unknown,\n skipped: ReadonlySet<string> = new Set(),\n): AdmittedValues {\n return propertyValues(schema, key, { document, depth: 0, skipped });\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ 'use strict';
2
+
3
+ const ALIAS_EXPANSION_MIN_NODES = 1e6;
4
+ const ALIAS_EXPANSION_MAX_RATIO = 100;
5
+ function childrenOf(node) {
6
+ return Array.isArray(node) ? node : Object.values(node);
7
+ }
8
+ function isContainer(value) {
9
+ return typeof value === "object" && value !== null;
10
+ }
11
+ function sizeOf(node, sizes) {
12
+ return childrenOf(node).reduce(
13
+ (total, child) => total + (isContainer(child) ? sizes.get(child) ?? 1 : 1),
14
+ 1
15
+ );
16
+ }
17
+ function countNodes(root) {
18
+ if (!isContainer(root)) {
19
+ return { stored: 1, expanded: 1 };
20
+ }
21
+ const sizes = /* @__PURE__ */ new Map();
22
+ const entered = /* @__PURE__ */ new Set();
23
+ const stack = [root];
24
+ while (stack.length > 0) {
25
+ const node = stack[stack.length - 1];
26
+ const isFirstVisit = !entered.has(node);
27
+ entered.add(node);
28
+ const pending = isFirstVisit ? childrenOf(node).filter((child) => isContainer(child) && !entered.has(child)) : [];
29
+ if (pending.length > 0) {
30
+ stack.push(...pending);
31
+ continue;
32
+ }
33
+ stack.pop();
34
+ sizes.set(node, sizeOf(node, sizes));
35
+ }
36
+ let stored = 0;
37
+ for (const node of sizes.keys()) {
38
+ stored += 1 + childrenOf(node).filter((child) => !isContainer(child)).length;
39
+ }
40
+ return { stored, expanded: sizes.get(root) ?? 1 };
41
+ }
42
+ function isAliasExpansionExcessive({ stored, expanded }) {
43
+ return expanded > Math.max(ALIAS_EXPANSION_MIN_NODES, stored * ALIAS_EXPANSION_MAX_RATIO);
44
+ }
45
+
46
+ exports.ALIAS_EXPANSION_MAX_RATIO = ALIAS_EXPANSION_MAX_RATIO;
47
+ exports.ALIAS_EXPANSION_MIN_NODES = ALIAS_EXPANSION_MIN_NODES;
48
+ exports.countNodes = countNodes;
49
+ exports.isAliasExpansionExcessive = isAliasExpansionExcessive;
50
+ //# sourceMappingURL=alias-expansion.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alias-expansion.cjs","sources":["../../../src/domain/openapi/alias-expansion.ts"],"sourcesContent":["/**\n * YAML aliases (`*name`) make the parsed document share objects. A \"billion laughs\" document,\n * where each level refers to the previous one ten times, parses into a few hundred objects that\n * every walk over the document (Redocly's resolver, the generator) visits as 10^9 nodes: the run\n * took minutes and ended with \"RangeError: Set maximum size exceeded\" (pre-beta test plan 10.2).\n * A document is refused when its aliases expand it far beyond what it stores.\n */\n\n/** Expansion below this many nodes is allowed whatever the ratio: large real documents pass. */\nexport const ALIAS_EXPANSION_MIN_NODES = 1_000_000;\n/** Real documents reuse anchors a few times; a bomb multiplies its size by orders of magnitude. */\nexport const ALIAS_EXPANSION_MAX_RATIO = 100;\n\nexport interface NodeCounts {\n /** Nodes of the document as written: each object once, with its entries. */\n readonly stored: number;\n /** Nodes a walk visits when it follows every shared object again. */\n readonly expanded: number;\n}\n\nfunction childrenOf(node: object): unknown[] {\n return Array.isArray(node) ? node : Object.values(node);\n}\n\nfunction isContainer(value: unknown): value is object {\n return typeof value === \"object\" && value !== null;\n}\n\n/** The expanded size of `node`, whose container children are all sized (or in a cycle). */\nfunction sizeOf(node: object, sizes: ReadonlyMap<object, number>): number {\n return childrenOf(node).reduce<number>(\n (total, child) => total + (isContainer(child) ? (sizes.get(child) ?? 1) : 1),\n 1,\n );\n}\n\n/**\n * Count stored and expanded nodes without recursion (documents can be thousands of levels deep)\n * and without expanding: each shared object is sized once. A cycle counts its back edge once.\n */\nexport function countNodes(root: unknown): NodeCounts {\n if (!isContainer(root)) {\n return { stored: 1, expanded: 1 };\n }\n const sizes = new Map<object, number>();\n const entered = new Set<object>();\n const stack: object[] = [root];\n while (stack.length > 0) {\n const node = stack[stack.length - 1] as object;\n const isFirstVisit = !entered.has(node);\n entered.add(node);\n const pending = isFirstVisit\n ? childrenOf(node).filter((child) => isContainer(child) && !entered.has(child))\n : [];\n if (pending.length > 0) {\n stack.push(...(pending as object[]));\n continue;\n }\n stack.pop();\n sizes.set(node, sizeOf(node, sizes));\n }\n let stored = 0;\n for (const node of sizes.keys()) {\n stored += 1 + childrenOf(node).filter((child) => !isContainer(child)).length;\n }\n return { stored, expanded: sizes.get(root) ?? 1 };\n}\n\n/** Whether the aliases of a parsed document expand it beyond the limits above. */\nexport function isAliasExpansionExcessive({ stored, expanded }: NodeCounts): boolean {\n return expanded > Math.max(ALIAS_EXPANSION_MIN_NODES, stored * ALIAS_EXPANSION_MAX_RATIO);\n}\n"],"names":[],"mappings":";;AASO,MAAM,yBAAA,GAA4B;AAElC,MAAM,yBAAA,GAA4B;AASzC,SAAS,WAAW,IAAA,EAAyB;AAC3C,EAAA,OAAO,MAAM,OAAA,CAAQ,IAAI,IAAI,IAAA,GAAO,MAAA,CAAO,OAAO,IAAI,CAAA;AACxD;AAEA,SAAS,YAAY,KAAA,EAAiC;AACpD,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA;AAChD;AAGA,SAAS,MAAA,CAAO,MAAc,KAAA,EAA4C;AACxE,EAAA,OAAO,UAAA,CAAW,IAAI,CAAA,CAAE,MAAA;AAAA,IACtB,CAAC,KAAA,EAAO,KAAA,KAAU,KAAA,IAAS,WAAA,CAAY,KAAK,CAAA,GAAK,KAAA,CAAM,GAAA,CAAI,KAAK,CAAA,IAAK,CAAA,GAAK,CAAA,CAAA;AAAA,IAC1E;AAAA,GACF;AACF;AAMO,SAAS,WAAW,IAAA,EAA2B;AACpD,EAAA,IAAI,CAAC,WAAA,CAAY,IAAI,CAAA,EAAG;AACtB,IAAA,OAAO,EAAE,MAAA,EAAQ,CAAA,EAAG,QAAA,EAAU,CAAA,EAAE;AAAA,EAClC;AACA,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAoB;AACtC,EAAA,MAAM,OAAA,uBAAc,GAAA,EAAY;AAChC,EAAA,MAAM,KAAA,GAAkB,CAAC,IAAI,CAAA;AAC7B,EAAA,OAAO,KAAA,CAAM,SAAS,CAAA,EAAG;AACvB,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AACnC,IAAA,MAAM,YAAA,GAAe,CAAC,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA;AACtC,IAAA,OAAA,CAAQ,IAAI,IAAI,CAAA;AAChB,IAAA,MAAM,UAAU,YAAA,GACZ,UAAA,CAAW,IAAI,CAAA,CAAE,OAAO,CAAC,KAAA,KAAU,WAAA,CAAY,KAAK,KAAK,CAAC,OAAA,CAAQ,IAAI,KAAK,CAAC,IAC5E,EAAC;AACL,IAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,MAAA,KAAA,CAAM,IAAA,CAAK,GAAI,OAAoB,CAAA;AACnC,MAAA;AAAA,IACF;AACA,IAAA,KAAA,CAAM,GAAA,EAAI;AACV,IAAA,KAAA,CAAM,GAAA,CAAI,IAAA,EAAM,MAAA,CAAO,IAAA,EAAM,KAAK,CAAC,CAAA;AAAA,EACrC;AACA,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,KAAA,MAAW,IAAA,IAAQ,KAAA,CAAM,IAAA,EAAK,EAAG;AAC/B,IAAA,MAAA,IAAU,CAAA,GAAI,UAAA,CAAW,IAAI,CAAA,CAAE,MAAA,CAAO,CAAC,KAAA,KAAU,CAAC,WAAA,CAAY,KAAK,CAAC,CAAA,CAAE,MAAA;AAAA,EACxE;AACA,EAAA,OAAO,EAAE,MAAA,EAAQ,QAAA,EAAU,MAAM,GAAA,CAAI,IAAI,KAAK,CAAA,EAAE;AAClD;AAGO,SAAS,yBAAA,CAA0B,EAAE,MAAA,EAAQ,QAAA,EAAS,EAAwB;AACnF,EAAA,OAAO,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,yBAAA,EAA2B,SAAS,yBAAyB,CAAA;AAC1F;;;;;"}
@@ -0,0 +1,45 @@
1
+ const ALIAS_EXPANSION_MIN_NODES = 1e6;
2
+ const ALIAS_EXPANSION_MAX_RATIO = 100;
3
+ function childrenOf(node) {
4
+ return Array.isArray(node) ? node : Object.values(node);
5
+ }
6
+ function isContainer(value) {
7
+ return typeof value === "object" && value !== null;
8
+ }
9
+ function sizeOf(node, sizes) {
10
+ return childrenOf(node).reduce(
11
+ (total, child) => total + (isContainer(child) ? sizes.get(child) ?? 1 : 1),
12
+ 1
13
+ );
14
+ }
15
+ function countNodes(root) {
16
+ if (!isContainer(root)) {
17
+ return { stored: 1, expanded: 1 };
18
+ }
19
+ const sizes = /* @__PURE__ */ new Map();
20
+ const entered = /* @__PURE__ */ new Set();
21
+ const stack = [root];
22
+ while (stack.length > 0) {
23
+ const node = stack[stack.length - 1];
24
+ const isFirstVisit = !entered.has(node);
25
+ entered.add(node);
26
+ const pending = isFirstVisit ? childrenOf(node).filter((child) => isContainer(child) && !entered.has(child)) : [];
27
+ if (pending.length > 0) {
28
+ stack.push(...pending);
29
+ continue;
30
+ }
31
+ stack.pop();
32
+ sizes.set(node, sizeOf(node, sizes));
33
+ }
34
+ let stored = 0;
35
+ for (const node of sizes.keys()) {
36
+ stored += 1 + childrenOf(node).filter((child) => !isContainer(child)).length;
37
+ }
38
+ return { stored, expanded: sizes.get(root) ?? 1 };
39
+ }
40
+ function isAliasExpansionExcessive({ stored, expanded }) {
41
+ return expanded > Math.max(ALIAS_EXPANSION_MIN_NODES, stored * ALIAS_EXPANSION_MAX_RATIO);
42
+ }
43
+
44
+ export { ALIAS_EXPANSION_MAX_RATIO, ALIAS_EXPANSION_MIN_NODES, countNodes, isAliasExpansionExcessive };
45
+ //# sourceMappingURL=alias-expansion.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alias-expansion.mjs","sources":["../../../src/domain/openapi/alias-expansion.ts"],"sourcesContent":["/**\n * YAML aliases (`*name`) make the parsed document share objects. A \"billion laughs\" document,\n * where each level refers to the previous one ten times, parses into a few hundred objects that\n * every walk over the document (Redocly's resolver, the generator) visits as 10^9 nodes: the run\n * took minutes and ended with \"RangeError: Set maximum size exceeded\" (pre-beta test plan 10.2).\n * A document is refused when its aliases expand it far beyond what it stores.\n */\n\n/** Expansion below this many nodes is allowed whatever the ratio: large real documents pass. */\nexport const ALIAS_EXPANSION_MIN_NODES = 1_000_000;\n/** Real documents reuse anchors a few times; a bomb multiplies its size by orders of magnitude. */\nexport const ALIAS_EXPANSION_MAX_RATIO = 100;\n\nexport interface NodeCounts {\n /** Nodes of the document as written: each object once, with its entries. */\n readonly stored: number;\n /** Nodes a walk visits when it follows every shared object again. */\n readonly expanded: number;\n}\n\nfunction childrenOf(node: object): unknown[] {\n return Array.isArray(node) ? node : Object.values(node);\n}\n\nfunction isContainer(value: unknown): value is object {\n return typeof value === \"object\" && value !== null;\n}\n\n/** The expanded size of `node`, whose container children are all sized (or in a cycle). */\nfunction sizeOf(node: object, sizes: ReadonlyMap<object, number>): number {\n return childrenOf(node).reduce<number>(\n (total, child) => total + (isContainer(child) ? (sizes.get(child) ?? 1) : 1),\n 1,\n );\n}\n\n/**\n * Count stored and expanded nodes without recursion (documents can be thousands of levels deep)\n * and without expanding: each shared object is sized once. A cycle counts its back edge once.\n */\nexport function countNodes(root: unknown): NodeCounts {\n if (!isContainer(root)) {\n return { stored: 1, expanded: 1 };\n }\n const sizes = new Map<object, number>();\n const entered = new Set<object>();\n const stack: object[] = [root];\n while (stack.length > 0) {\n const node = stack[stack.length - 1] as object;\n const isFirstVisit = !entered.has(node);\n entered.add(node);\n const pending = isFirstVisit\n ? childrenOf(node).filter((child) => isContainer(child) && !entered.has(child))\n : [];\n if (pending.length > 0) {\n stack.push(...(pending as object[]));\n continue;\n }\n stack.pop();\n sizes.set(node, sizeOf(node, sizes));\n }\n let stored = 0;\n for (const node of sizes.keys()) {\n stored += 1 + childrenOf(node).filter((child) => !isContainer(child)).length;\n }\n return { stored, expanded: sizes.get(root) ?? 1 };\n}\n\n/** Whether the aliases of a parsed document expand it beyond the limits above. */\nexport function isAliasExpansionExcessive({ stored, expanded }: NodeCounts): boolean {\n return expanded > Math.max(ALIAS_EXPANSION_MIN_NODES, stored * ALIAS_EXPANSION_MAX_RATIO);\n}\n"],"names":[],"mappings":"AASO,MAAM,yBAAA,GAA4B;AAElC,MAAM,yBAAA,GAA4B;AASzC,SAAS,WAAW,IAAA,EAAyB;AAC3C,EAAA,OAAO,MAAM,OAAA,CAAQ,IAAI,IAAI,IAAA,GAAO,MAAA,CAAO,OAAO,IAAI,CAAA;AACxD;AAEA,SAAS,YAAY,KAAA,EAAiC;AACpD,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA;AAChD;AAGA,SAAS,MAAA,CAAO,MAAc,KAAA,EAA4C;AACxE,EAAA,OAAO,UAAA,CAAW,IAAI,CAAA,CAAE,MAAA;AAAA,IACtB,CAAC,KAAA,EAAO,KAAA,KAAU,KAAA,IAAS,WAAA,CAAY,KAAK,CAAA,GAAK,KAAA,CAAM,GAAA,CAAI,KAAK,CAAA,IAAK,CAAA,GAAK,CAAA,CAAA;AAAA,IAC1E;AAAA,GACF;AACF;AAMO,SAAS,WAAW,IAAA,EAA2B;AACpD,EAAA,IAAI,CAAC,WAAA,CAAY,IAAI,CAAA,EAAG;AACtB,IAAA,OAAO,EAAE,MAAA,EAAQ,CAAA,EAAG,QAAA,EAAU,CAAA,EAAE;AAAA,EAClC;AACA,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAoB;AACtC,EAAA,MAAM,OAAA,uBAAc,GAAA,EAAY;AAChC,EAAA,MAAM,KAAA,GAAkB,CAAC,IAAI,CAAA;AAC7B,EAAA,OAAO,KAAA,CAAM,SAAS,CAAA,EAAG;AACvB,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AACnC,IAAA,MAAM,YAAA,GAAe,CAAC,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA;AACtC,IAAA,OAAA,CAAQ,IAAI,IAAI,CAAA;AAChB,IAAA,MAAM,UAAU,YAAA,GACZ,UAAA,CAAW,IAAI,CAAA,CAAE,OAAO,CAAC,KAAA,KAAU,WAAA,CAAY,KAAK,KAAK,CAAC,OAAA,CAAQ,IAAI,KAAK,CAAC,IAC5E,EAAC;AACL,IAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,MAAA,KAAA,CAAM,IAAA,CAAK,GAAI,OAAoB,CAAA;AACnC,MAAA;AAAA,IACF;AACA,IAAA,KAAA,CAAM,GAAA,EAAI;AACV,IAAA,KAAA,CAAM,GAAA,CAAI,IAAA,EAAM,MAAA,CAAO,IAAA,EAAM,KAAK,CAAC,CAAA;AAAA,EACrC;AACA,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,KAAA,MAAW,IAAA,IAAQ,KAAA,CAAM,IAAA,EAAK,EAAG;AAC/B,IAAA,MAAA,IAAU,CAAA,GAAI,UAAA,CAAW,IAAI,CAAA,CAAE,MAAA,CAAO,CAAC,KAAA,KAAU,CAAC,WAAA,CAAY,KAAK,CAAC,CAAA,CAAE,MAAA;AAAA,EACxE;AACA,EAAA,OAAO,EAAE,MAAA,EAAQ,QAAA,EAAU,MAAM,GAAA,CAAI,IAAI,KAAK,CAAA,EAAE;AAClD;AAGO,SAAS,yBAAA,CAA0B,EAAE,MAAA,EAAQ,QAAA,EAAS,EAAwB;AACnF,EAAA,OAAO,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,yBAAA,EAA2B,SAAS,yBAAyB,CAAA;AAC1F;;"}
@@ -0,0 +1,48 @@
1
+ 'use strict';
2
+
3
+ const BINARY_FORMAT = "binary";
4
+ const TEXT_TOP_LEVEL_TYPE = "text";
5
+ const APPLICATION_TOP_LEVEL_TYPE = "application";
6
+ const TEXT_STRUCTURED_SYNTAXES = /* @__PURE__ */ new Set(["json", "xml", "yaml"]);
7
+ const TEXT_APPLICATION_SUBTYPES = /* @__PURE__ */ new Set([
8
+ "ecmascript",
9
+ "graphql",
10
+ "javascript",
11
+ "json-seq",
12
+ "jsonl",
13
+ "sql",
14
+ "x-ndjson",
15
+ "x-www-form-urlencoded",
16
+ "x-yaml"
17
+ ]);
18
+ const PARAMETER_SEPARATOR = ";";
19
+ const SUBTYPE_SEPARATOR = "/";
20
+ const SUFFIX_SEPARATOR = "+";
21
+ function isTextualMediaType(mediaType) {
22
+ const essence = (mediaType.split(PARAMETER_SEPARATOR)[0] ?? "").trim().toLowerCase();
23
+ const [topLevelType, subtype] = essence.split(SUBTYPE_SEPARATOR);
24
+ if (topLevelType === void 0 || subtype === void 0) {
25
+ return false;
26
+ }
27
+ if (topLevelType === TEXT_TOP_LEVEL_TYPE) {
28
+ return true;
29
+ }
30
+ const suffix = subtype.slice(subtype.lastIndexOf(SUFFIX_SEPARATOR) + 1);
31
+ if (TEXT_STRUCTURED_SYNTAXES.has(subtype) || TEXT_STRUCTURED_SYNTAXES.has(suffix)) {
32
+ return true;
33
+ }
34
+ return topLevelType === APPLICATION_TOP_LEVEL_TYPE && TEXT_APPLICATION_SUBTYPES.has(subtype);
35
+ }
36
+ function isRawBinarySchema(schema) {
37
+ if (schema.contentEncoding !== void 0) {
38
+ return false;
39
+ }
40
+ if (schema.format === BINARY_FORMAT) {
41
+ return true;
42
+ }
43
+ return schema.contentMediaType !== void 0 && !isTextualMediaType(schema.contentMediaType);
44
+ }
45
+
46
+ exports.isRawBinarySchema = isRawBinarySchema;
47
+ exports.isTextualMediaType = isTextualMediaType;
48
+ //# sourceMappingURL=binary-content.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binary-content.cjs","sources":["../../../src/domain/openapi/binary-content.ts"],"sourcesContent":["import type { SchemaObject } from \"./schema-object.js\";\n\n/**\n * Which string schemas describe raw binary data, following \"Working with Binary Data\" of the\n * OpenAPI specification (3.1): `format: binary` in 3.0, a `contentMediaType` without a\n * `contentEncoding` in 3.1. `--binary-as-blob` types these as `Blob`.\n * https://spec.openapis.org/oas/v3.1.1.html#working-with-binary-data\n */\n\n/** The OpenAPI 3.0 format of unencoded octets (`byte` is base64 text). */\nconst BINARY_FORMAT = \"binary\";\n\n/** The top-level media type whose contents are always text (RFC 2046). */\nconst TEXT_TOP_LEVEL_TYPE = \"text\";\n\n/** The top-level media type of the text formats in `TEXT_APPLICATION_SUBTYPES`. */\nconst APPLICATION_TOP_LEVEL_TYPE = \"application\";\n\n/**\n * Text syntaxes, as a subtype (`application/json`) or a structured syntax suffix\n * (`application/problem+json`, `image/svg+xml`; RFC 6839, RFC 9512).\n */\nconst TEXT_STRUCTURED_SYNTAXES: ReadonlySet<string> = new Set([\"json\", \"xml\", \"yaml\"]);\n\n/** Other text formats under `application/`, registered or in common use. */\nconst TEXT_APPLICATION_SUBTYPES: ReadonlySet<string> = new Set([\n \"ecmascript\",\n \"graphql\",\n \"javascript\",\n \"json-seq\",\n \"jsonl\",\n \"sql\",\n \"x-ndjson\",\n \"x-www-form-urlencoded\",\n \"x-yaml\",\n]);\n\nconst PARAMETER_SEPARATOR = \";\";\nconst SUBTYPE_SEPARATOR = \"/\";\nconst SUFFIX_SEPARATOR = \"+\";\n\n/**\n * Whether a media type's contents are text, so a string schema with it holds the text itself.\n * Parameters (`; charset=utf-8`) and case are ignored; a value without a subtype is not text.\n */\nexport function isTextualMediaType(mediaType: string): boolean {\n const essence = (mediaType.split(PARAMETER_SEPARATOR)[0] ?? \"\").trim().toLowerCase();\n const [topLevelType, subtype] = essence.split(SUBTYPE_SEPARATOR);\n if (topLevelType === undefined || subtype === undefined) {\n return false;\n }\n if (topLevelType === TEXT_TOP_LEVEL_TYPE) {\n return true;\n }\n const suffix = subtype.slice(subtype.lastIndexOf(SUFFIX_SEPARATOR) + 1);\n if (TEXT_STRUCTURED_SYNTAXES.has(subtype) || TEXT_STRUCTURED_SYNTAXES.has(suffix)) {\n return true;\n }\n return topLevelType === APPLICATION_TOP_LEVEL_TYPE && TEXT_APPLICATION_SUBTYPES.has(subtype);\n}\n\n/**\n * Whether a schema describes raw (unencoded) binary data. Any `contentEncoding` means the value\n * is encoded text, so it wins over `format: binary`.\n */\nexport function isRawBinarySchema(schema: SchemaObject): boolean {\n if (schema.contentEncoding !== undefined) {\n return false;\n }\n if (schema.format === BINARY_FORMAT) {\n return true;\n }\n return schema.contentMediaType !== undefined && !isTextualMediaType(schema.contentMediaType);\n}\n"],"names":[],"mappings":";;AAUA,MAAM,aAAA,GAAgB,QAAA;AAGtB,MAAM,mBAAA,GAAsB,MAAA;AAG5B,MAAM,0BAAA,GAA6B,aAAA;AAMnC,MAAM,2CAAgD,IAAI,GAAA,CAAI,CAAC,MAAA,EAAQ,KAAA,EAAO,MAAM,CAAC,CAAA;AAGrF,MAAM,yBAAA,uBAAqD,GAAA,CAAI;AAAA,EAC7D,YAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA,uBAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,MAAM,mBAAA,GAAsB,GAAA;AAC5B,MAAM,iBAAA,GAAoB,GAAA;AAC1B,MAAM,gBAAA,GAAmB,GAAA;AAMlB,SAAS,mBAAmB,SAAA,EAA4B;AAC7D,EAAA,MAAM,OAAA,GAAA,CAAW,SAAA,CAAU,KAAA,CAAM,mBAAmB,CAAA,CAAE,CAAC,CAAA,IAAK,EAAA,EAAI,IAAA,EAAK,CAAE,WAAA,EAAY;AACnF,EAAA,MAAM,CAAC,YAAA,EAAc,OAAO,CAAA,GAAI,OAAA,CAAQ,MAAM,iBAAiB,CAAA;AAC/D,EAAA,IAAI,YAAA,KAAiB,MAAA,IAAa,OAAA,KAAY,MAAA,EAAW;AACvD,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,iBAAiB,mBAAA,EAAqB;AACxC,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAM,SAAS,OAAA,CAAQ,KAAA,CAAM,QAAQ,WAAA,CAAY,gBAAgB,IAAI,CAAC,CAAA;AACtE,EAAA,IAAI,yBAAyB,GAAA,CAAI,OAAO,KAAK,wBAAA,CAAyB,GAAA,CAAI,MAAM,CAAA,EAAG;AACjF,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,YAAA,KAAiB,0BAAA,IAA8B,yBAAA,CAA0B,GAAA,CAAI,OAAO,CAAA;AAC7F;AAMO,SAAS,kBAAkB,MAAA,EAA+B;AAC/D,EAAA,IAAI,MAAA,CAAO,oBAAoB,MAAA,EAAW;AACxC,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,MAAA,CAAO,WAAW,aAAA,EAAe;AACnC,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,OAAO,gBAAA,KAAqB,MAAA,IAAa,CAAC,kBAAA,CAAmB,OAAO,gBAAgB,CAAA;AAC7F;;;"}
@@ -0,0 +1,45 @@
1
+ const BINARY_FORMAT = "binary";
2
+ const TEXT_TOP_LEVEL_TYPE = "text";
3
+ const APPLICATION_TOP_LEVEL_TYPE = "application";
4
+ const TEXT_STRUCTURED_SYNTAXES = /* @__PURE__ */ new Set(["json", "xml", "yaml"]);
5
+ const TEXT_APPLICATION_SUBTYPES = /* @__PURE__ */ new Set([
6
+ "ecmascript",
7
+ "graphql",
8
+ "javascript",
9
+ "json-seq",
10
+ "jsonl",
11
+ "sql",
12
+ "x-ndjson",
13
+ "x-www-form-urlencoded",
14
+ "x-yaml"
15
+ ]);
16
+ const PARAMETER_SEPARATOR = ";";
17
+ const SUBTYPE_SEPARATOR = "/";
18
+ const SUFFIX_SEPARATOR = "+";
19
+ function isTextualMediaType(mediaType) {
20
+ const essence = (mediaType.split(PARAMETER_SEPARATOR)[0] ?? "").trim().toLowerCase();
21
+ const [topLevelType, subtype] = essence.split(SUBTYPE_SEPARATOR);
22
+ if (topLevelType === void 0 || subtype === void 0) {
23
+ return false;
24
+ }
25
+ if (topLevelType === TEXT_TOP_LEVEL_TYPE) {
26
+ return true;
27
+ }
28
+ const suffix = subtype.slice(subtype.lastIndexOf(SUFFIX_SEPARATOR) + 1);
29
+ if (TEXT_STRUCTURED_SYNTAXES.has(subtype) || TEXT_STRUCTURED_SYNTAXES.has(suffix)) {
30
+ return true;
31
+ }
32
+ return topLevelType === APPLICATION_TOP_LEVEL_TYPE && TEXT_APPLICATION_SUBTYPES.has(subtype);
33
+ }
34
+ function isRawBinarySchema(schema) {
35
+ if (schema.contentEncoding !== void 0) {
36
+ return false;
37
+ }
38
+ if (schema.format === BINARY_FORMAT) {
39
+ return true;
40
+ }
41
+ return schema.contentMediaType !== void 0 && !isTextualMediaType(schema.contentMediaType);
42
+ }
43
+
44
+ export { isRawBinarySchema, isTextualMediaType };
45
+ //# sourceMappingURL=binary-content.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binary-content.mjs","sources":["../../../src/domain/openapi/binary-content.ts"],"sourcesContent":["import type { SchemaObject } from \"./schema-object.js\";\n\n/**\n * Which string schemas describe raw binary data, following \"Working with Binary Data\" of the\n * OpenAPI specification (3.1): `format: binary` in 3.0, a `contentMediaType` without a\n * `contentEncoding` in 3.1. `--binary-as-blob` types these as `Blob`.\n * https://spec.openapis.org/oas/v3.1.1.html#working-with-binary-data\n */\n\n/** The OpenAPI 3.0 format of unencoded octets (`byte` is base64 text). */\nconst BINARY_FORMAT = \"binary\";\n\n/** The top-level media type whose contents are always text (RFC 2046). */\nconst TEXT_TOP_LEVEL_TYPE = \"text\";\n\n/** The top-level media type of the text formats in `TEXT_APPLICATION_SUBTYPES`. */\nconst APPLICATION_TOP_LEVEL_TYPE = \"application\";\n\n/**\n * Text syntaxes, as a subtype (`application/json`) or a structured syntax suffix\n * (`application/problem+json`, `image/svg+xml`; RFC 6839, RFC 9512).\n */\nconst TEXT_STRUCTURED_SYNTAXES: ReadonlySet<string> = new Set([\"json\", \"xml\", \"yaml\"]);\n\n/** Other text formats under `application/`, registered or in common use. */\nconst TEXT_APPLICATION_SUBTYPES: ReadonlySet<string> = new Set([\n \"ecmascript\",\n \"graphql\",\n \"javascript\",\n \"json-seq\",\n \"jsonl\",\n \"sql\",\n \"x-ndjson\",\n \"x-www-form-urlencoded\",\n \"x-yaml\",\n]);\n\nconst PARAMETER_SEPARATOR = \";\";\nconst SUBTYPE_SEPARATOR = \"/\";\nconst SUFFIX_SEPARATOR = \"+\";\n\n/**\n * Whether a media type's contents are text, so a string schema with it holds the text itself.\n * Parameters (`; charset=utf-8`) and case are ignored; a value without a subtype is not text.\n */\nexport function isTextualMediaType(mediaType: string): boolean {\n const essence = (mediaType.split(PARAMETER_SEPARATOR)[0] ?? \"\").trim().toLowerCase();\n const [topLevelType, subtype] = essence.split(SUBTYPE_SEPARATOR);\n if (topLevelType === undefined || subtype === undefined) {\n return false;\n }\n if (topLevelType === TEXT_TOP_LEVEL_TYPE) {\n return true;\n }\n const suffix = subtype.slice(subtype.lastIndexOf(SUFFIX_SEPARATOR) + 1);\n if (TEXT_STRUCTURED_SYNTAXES.has(subtype) || TEXT_STRUCTURED_SYNTAXES.has(suffix)) {\n return true;\n }\n return topLevelType === APPLICATION_TOP_LEVEL_TYPE && TEXT_APPLICATION_SUBTYPES.has(subtype);\n}\n\n/**\n * Whether a schema describes raw (unencoded) binary data. Any `contentEncoding` means the value\n * is encoded text, so it wins over `format: binary`.\n */\nexport function isRawBinarySchema(schema: SchemaObject): boolean {\n if (schema.contentEncoding !== undefined) {\n return false;\n }\n if (schema.format === BINARY_FORMAT) {\n return true;\n }\n return schema.contentMediaType !== undefined && !isTextualMediaType(schema.contentMediaType);\n}\n"],"names":[],"mappings":"AAUA,MAAM,aAAA,GAAgB,QAAA;AAGtB,MAAM,mBAAA,GAAsB,MAAA;AAG5B,MAAM,0BAAA,GAA6B,aAAA;AAMnC,MAAM,2CAAgD,IAAI,GAAA,CAAI,CAAC,MAAA,EAAQ,KAAA,EAAO,MAAM,CAAC,CAAA;AAGrF,MAAM,yBAAA,uBAAqD,GAAA,CAAI;AAAA,EAC7D,YAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA,uBAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,MAAM,mBAAA,GAAsB,GAAA;AAC5B,MAAM,iBAAA,GAAoB,GAAA;AAC1B,MAAM,gBAAA,GAAmB,GAAA;AAMlB,SAAS,mBAAmB,SAAA,EAA4B;AAC7D,EAAA,MAAM,OAAA,GAAA,CAAW,SAAA,CAAU,KAAA,CAAM,mBAAmB,CAAA,CAAE,CAAC,CAAA,IAAK,EAAA,EAAI,IAAA,EAAK,CAAE,WAAA,EAAY;AACnF,EAAA,MAAM,CAAC,YAAA,EAAc,OAAO,CAAA,GAAI,OAAA,CAAQ,MAAM,iBAAiB,CAAA;AAC/D,EAAA,IAAI,YAAA,KAAiB,MAAA,IAAa,OAAA,KAAY,MAAA,EAAW;AACvD,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,iBAAiB,mBAAA,EAAqB;AACxC,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAM,SAAS,OAAA,CAAQ,KAAA,CAAM,QAAQ,WAAA,CAAY,gBAAgB,IAAI,CAAC,CAAA;AACtE,EAAA,IAAI,yBAAyB,GAAA,CAAI,OAAO,KAAK,wBAAA,CAAyB,GAAA,CAAI,MAAM,CAAA,EAAG;AACjF,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,YAAA,KAAiB,0BAAA,IAA8B,yBAAA,CAA0B,GAAA,CAAI,OAAO,CAAA;AAC7F;AAMO,SAAS,kBAAkB,MAAA,EAA+B;AAC/D,EAAA,IAAI,MAAA,CAAO,oBAAoB,MAAA,EAAW;AACxC,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,MAAA,CAAO,WAAW,aAAA,EAAe;AACnC,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,OAAO,gBAAA,KAAqB,MAAA,IAAa,CAAC,kBAAA,CAAmB,OAAO,gBAAgB,CAAA;AAC7F;;"}
@@ -0,0 +1,29 @@
1
+ 'use strict';
2
+
3
+ const mediaTypeObject = require('./media-type-object.cjs');
4
+
5
+ const COMPONENT_KINDS = Object.freeze([
6
+ "schemas",
7
+ "responses",
8
+ "parameters",
9
+ "requestBodies",
10
+ "headers",
11
+ "pathItems"
12
+ ]);
13
+ const DECLARED_COMPONENT_KINDS = Object.freeze([mediaTypeObject.MEDIA_TYPES_COMPONENT_KIND]);
14
+ function singularizeComponentKind(kind) {
15
+ return kind === "requestBodies" ? "requestBody" : kind.slice(0, -1);
16
+ }
17
+ function isEnumSchema(schema) {
18
+ if (typeof schema !== "object" || schema === null || Array.isArray(schema)) {
19
+ return false;
20
+ }
21
+ const record = schema;
22
+ return "enum" in record && Array.isArray(record.enum) && (!("type" in record) || record.type !== "object") && !("properties" in record) && !("additionalProperties" in record);
23
+ }
24
+
25
+ exports.COMPONENT_KINDS = COMPONENT_KINDS;
26
+ exports.DECLARED_COMPONENT_KINDS = DECLARED_COMPONENT_KINDS;
27
+ exports.isEnumSchema = isEnumSchema;
28
+ exports.singularizeComponentKind = singularizeComponentKind;
29
+ //# sourceMappingURL=components-object.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"components-object.cjs","sources":["../../../src/domain/openapi/components-object.ts"],"sourcesContent":["import { MEDIA_TYPES_COMPONENT_KIND } from \"./media-type-object.js\";\n\n/**\n * The component maps the generator always writes, in output order (OpenAPI 3.1 §4.8.7); a kind the\n * document lacks is `never`.\n */\nexport const COMPONENT_KINDS = Object.freeze([\n \"schemas\",\n \"responses\",\n \"parameters\",\n \"requestBodies\",\n \"headers\",\n \"pathItems\",\n] as const);\n\n/**\n * OpenAPI 3.2 component maps, written after `COMPONENT_KINDS` and only when the document has them,\n * so documents without them keep their output (ADR-020).\n */\nexport const DECLARED_COMPONENT_KINDS = Object.freeze([MEDIA_TYPES_COMPONENT_KIND] as const);\n\nexport type ComponentKind =\n | (typeof COMPONENT_KINDS)[number]\n | (typeof DECLARED_COMPONENT_KINDS)[number];\n\n/** Components by kind and name; entries are read by each kind's transformer. */\nexport type ComponentsObject = {\n readonly [kind in ComponentKind]?: Readonly<Record<string, unknown>>;\n};\n\n/** `requestBodies` → `requestBody`; other kinds drop the final `s`. */\nexport function singularizeComponentKind(kind: ComponentKind | `x-${string}`): string {\n return kind === \"requestBodies\" ? \"requestBody\" : kind.slice(0, -1);\n}\n\n/**\n * Whether a schema is an enum that `--enum` turns into a TypeScript enum. With `--root-types`\n * such schemas get no root alias, because the enum is already exported under that name.\n */\nexport function isEnumSchema(schema: unknown): boolean {\n if (typeof schema !== \"object\" || schema === null || Array.isArray(schema)) {\n return false;\n }\n const record = schema as Record<string, unknown>;\n return (\n \"enum\" in record &&\n Array.isArray(record.enum) &&\n (!(\"type\" in record) || record.type !== \"object\") &&\n !(\"properties\" in record) &&\n !(\"additionalProperties\" in record)\n );\n}\n"],"names":["MEDIA_TYPES_COMPONENT_KIND"],"mappings":";;;;AAMO,MAAM,eAAA,GAAkB,OAAO,MAAA,CAAO;AAAA,EAC3C,SAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,eAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAU;AAMH,MAAM,wBAAA,GAA2B,MAAA,CAAO,MAAA,CAAO,CAACA,0CAA0B,CAAU;AAYpF,SAAS,yBAAyB,IAAA,EAA6C;AACpF,EAAA,OAAO,SAAS,eAAA,GAAkB,aAAA,GAAgB,IAAA,CAAK,KAAA,CAAM,GAAG,EAAE,CAAA;AACpE;AAMO,SAAS,aAAa,MAAA,EAA0B;AACrD,EAAA,IAAI,OAAO,WAAW,QAAA,IAAY,MAAA,KAAW,QAAQ,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;AAC1E,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,MAAM,MAAA,GAAS,MAAA;AACf,EAAA,OACE,UAAU,MAAA,IACV,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,IAAI,CAAA,KACxB,EAAE,MAAA,IAAU,MAAA,CAAA,IAAW,OAAO,IAAA,KAAS,QAAA,CAAA,IACxC,EAAE,YAAA,IAAgB,MAAA,CAAA,IAClB,EAAE,sBAAA,IAA0B,MAAA,CAAA;AAEhC;;;;;"}
@@ -0,0 +1,24 @@
1
+ import { MEDIA_TYPES_COMPONENT_KIND } from './media-type-object.mjs';
2
+
3
+ const COMPONENT_KINDS = Object.freeze([
4
+ "schemas",
5
+ "responses",
6
+ "parameters",
7
+ "requestBodies",
8
+ "headers",
9
+ "pathItems"
10
+ ]);
11
+ const DECLARED_COMPONENT_KINDS = Object.freeze([MEDIA_TYPES_COMPONENT_KIND]);
12
+ function singularizeComponentKind(kind) {
13
+ return kind === "requestBodies" ? "requestBody" : kind.slice(0, -1);
14
+ }
15
+ function isEnumSchema(schema) {
16
+ if (typeof schema !== "object" || schema === null || Array.isArray(schema)) {
17
+ return false;
18
+ }
19
+ const record = schema;
20
+ return "enum" in record && Array.isArray(record.enum) && (!("type" in record) || record.type !== "object") && !("properties" in record) && !("additionalProperties" in record);
21
+ }
22
+
23
+ export { COMPONENT_KINDS, DECLARED_COMPONENT_KINDS, isEnumSchema, singularizeComponentKind };
24
+ //# sourceMappingURL=components-object.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"components-object.mjs","sources":["../../../src/domain/openapi/components-object.ts"],"sourcesContent":["import { MEDIA_TYPES_COMPONENT_KIND } from \"./media-type-object.js\";\n\n/**\n * The component maps the generator always writes, in output order (OpenAPI 3.1 §4.8.7); a kind the\n * document lacks is `never`.\n */\nexport const COMPONENT_KINDS = Object.freeze([\n \"schemas\",\n \"responses\",\n \"parameters\",\n \"requestBodies\",\n \"headers\",\n \"pathItems\",\n] as const);\n\n/**\n * OpenAPI 3.2 component maps, written after `COMPONENT_KINDS` and only when the document has them,\n * so documents without them keep their output (ADR-020).\n */\nexport const DECLARED_COMPONENT_KINDS = Object.freeze([MEDIA_TYPES_COMPONENT_KIND] as const);\n\nexport type ComponentKind =\n | (typeof COMPONENT_KINDS)[number]\n | (typeof DECLARED_COMPONENT_KINDS)[number];\n\n/** Components by kind and name; entries are read by each kind's transformer. */\nexport type ComponentsObject = {\n readonly [kind in ComponentKind]?: Readonly<Record<string, unknown>>;\n};\n\n/** `requestBodies` → `requestBody`; other kinds drop the final `s`. */\nexport function singularizeComponentKind(kind: ComponentKind | `x-${string}`): string {\n return kind === \"requestBodies\" ? \"requestBody\" : kind.slice(0, -1);\n}\n\n/**\n * Whether a schema is an enum that `--enum` turns into a TypeScript enum. With `--root-types`\n * such schemas get no root alias, because the enum is already exported under that name.\n */\nexport function isEnumSchema(schema: unknown): boolean {\n if (typeof schema !== \"object\" || schema === null || Array.isArray(schema)) {\n return false;\n }\n const record = schema as Record<string, unknown>;\n return (\n \"enum\" in record &&\n Array.isArray(record.enum) &&\n (!(\"type\" in record) || record.type !== \"object\") &&\n !(\"properties\" in record) &&\n !(\"additionalProperties\" in record)\n );\n}\n"],"names":[],"mappings":";;AAMO,MAAM,eAAA,GAAkB,OAAO,MAAA,CAAO;AAAA,EAC3C,SAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,eAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAU;AAMH,MAAM,wBAAA,GAA2B,MAAA,CAAO,MAAA,CAAO,CAAC,0BAA0B,CAAU;AAYpF,SAAS,yBAAyB,IAAA,EAA6C;AACpF,EAAA,OAAO,SAAS,eAAA,GAAkB,aAAA,GAAgB,IAAA,CAAK,KAAA,CAAM,GAAG,EAAE,CAAA;AACpE;AAMO,SAAS,aAAa,MAAA,EAA0B;AACrD,EAAA,IAAI,OAAO,WAAW,QAAA,IAAY,MAAA,KAAW,QAAQ,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;AAC1E,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,MAAM,MAAA,GAAS,MAAA;AACf,EAAA,OACE,UAAU,MAAA,IACV,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,IAAI,CAAA,KACxB,EAAE,MAAA,IAAU,MAAA,CAAA,IAAW,OAAO,IAAA,KAAS,QAAA,CAAA,IACxC,EAAE,YAAA,IAAgB,MAAA,CAAA,IAClB,EAAE,sBAAA,IAA0B,MAAA,CAAA;AAEhC;;"}