openapi-typesafe 0.0.0 → 1.0.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (678) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +71 -1
  3. package/bin/cli.js +4 -0
  4. package/dist/adapters/node-file-system/node-file-system.cjs +46 -0
  5. package/dist/adapters/node-file-system/node-file-system.cjs.map +1 -0
  6. package/dist/adapters/node-file-system/node-file-system.mjs +40 -0
  7. package/dist/adapters/node-file-system/node-file-system.mjs.map +1 -0
  8. package/dist/adapters/redocly-loader/alias-limit.cjs +16 -0
  9. package/dist/adapters/redocly-loader/alias-limit.cjs.map +1 -0
  10. package/dist/adapters/redocly-loader/alias-limit.mjs +14 -0
  11. package/dist/adapters/redocly-loader/alias-limit.mjs.map +1 -0
  12. package/dist/adapters/redocly-loader/allowed-hosts.cjs +42 -0
  13. package/dist/adapters/redocly-loader/allowed-hosts.cjs.map +1 -0
  14. package/dist/adapters/redocly-loader/allowed-hosts.mjs +40 -0
  15. package/dist/adapters/redocly-loader/allowed-hosts.mjs.map +1 -0
  16. package/dist/adapters/redocly-loader/bundled-ref-repair.cjs +53 -0
  17. package/dist/adapters/redocly-loader/bundled-ref-repair.cjs.map +1 -0
  18. package/dist/adapters/redocly-loader/bundled-ref-repair.mjs +51 -0
  19. package/dist/adapters/redocly-loader/bundled-ref-repair.mjs.map +1 -0
  20. package/dist/adapters/redocly-loader/malformed-refs.cjs +41 -0
  21. package/dist/adapters/redocly-loader/malformed-refs.cjs.map +1 -0
  22. package/dist/adapters/redocly-loader/malformed-refs.mjs +38 -0
  23. package/dist/adapters/redocly-loader/malformed-refs.mjs.map +1 -0
  24. package/dist/adapters/redocly-loader/redocly-config-source.cjs +42 -0
  25. package/dist/adapters/redocly-loader/redocly-config-source.cjs.map +1 -0
  26. package/dist/adapters/redocly-loader/redocly-config-source.mjs +35 -0
  27. package/dist/adapters/redocly-loader/redocly-config-source.mjs.map +1 -0
  28. package/dist/adapters/redocly-loader/redocly-schema-loader.cjs +169 -0
  29. package/dist/adapters/redocly-loader/redocly-schema-loader.cjs.map +1 -0
  30. package/dist/adapters/redocly-loader/redocly-schema-loader.mjs +167 -0
  31. package/dist/adapters/redocly-loader/redocly-schema-loader.mjs.map +1 -0
  32. package/dist/adapters/redocly-loader/ref-access.cjs +107 -0
  33. package/dist/adapters/redocly-loader/ref-access.cjs.map +1 -0
  34. package/dist/adapters/redocly-loader/ref-access.mjs +99 -0
  35. package/dist/adapters/redocly-loader/ref-access.mjs.map +1 -0
  36. package/dist/adapters/redocly-loader/ref-holders.cjs +31 -0
  37. package/dist/adapters/redocly-loader/ref-holders.cjs.map +1 -0
  38. package/dist/adapters/redocly-loader/ref-holders.mjs +29 -0
  39. package/dist/adapters/redocly-loader/ref-holders.mjs.map +1 -0
  40. package/dist/adapters/redocly-loader/remote-fetch.cjs +60 -0
  41. package/dist/adapters/redocly-loader/remote-fetch.cjs.map +1 -0
  42. package/dist/adapters/redocly-loader/remote-fetch.mjs +56 -0
  43. package/dist/adapters/redocly-loader/remote-fetch.mjs.map +1 -0
  44. package/dist/adapters/redocly-loader/schema-load-errors.cjs +87 -0
  45. package/dist/adapters/redocly-loader/schema-load-errors.cjs.map +1 -0
  46. package/dist/adapters/redocly-loader/schema-load-errors.mjs +77 -0
  47. package/dist/adapters/redocly-loader/schema-load-errors.mjs.map +1 -0
  48. package/dist/adapters/redocly-loader/schema-source.cjs +104 -0
  49. package/dist/adapters/redocly-loader/schema-source.cjs.map +1 -0
  50. package/dist/adapters/redocly-loader/schema-source.mjs +98 -0
  51. package/dist/adapters/redocly-loader/schema-source.mjs.map +1 -0
  52. package/dist/adapters/redocly-loader/unsupported-keys.cjs +62 -0
  53. package/dist/adapters/redocly-loader/unsupported-keys.cjs.map +1 -0
  54. package/dist/adapters/redocly-loader/unsupported-keys.mjs +58 -0
  55. package/dist/adapters/redocly-loader/unsupported-keys.mjs.map +1 -0
  56. package/dist/adapters/terminal-logger/terminal-logger.cjs +67 -0
  57. package/dist/adapters/terminal-logger/terminal-logger.cjs.map +1 -0
  58. package/dist/adapters/terminal-logger/terminal-logger.mjs +59 -0
  59. package/dist/adapters/terminal-logger/terminal-logger.mjs.map +1 -0
  60. package/dist/adapters/type-ast-bridge/footer-nodes.cjs +21 -0
  61. package/dist/adapters/type-ast-bridge/footer-nodes.cjs.map +1 -0
  62. package/dist/adapters/type-ast-bridge/footer-nodes.mjs +17 -0
  63. package/dist/adapters/type-ast-bridge/footer-nodes.mjs.map +1 -0
  64. package/dist/adapters/type-ast-bridge/ir-declarations-to-typescript.cjs +75 -0
  65. package/dist/adapters/type-ast-bridge/ir-declarations-to-typescript.cjs.map +1 -0
  66. package/dist/adapters/type-ast-bridge/ir-declarations-to-typescript.mjs +71 -0
  67. package/dist/adapters/type-ast-bridge/ir-declarations-to-typescript.mjs.map +1 -0
  68. package/dist/adapters/type-ast-bridge/ir-to-typescript.cjs +145 -0
  69. package/dist/adapters/type-ast-bridge/ir-to-typescript.cjs.map +1 -0
  70. package/dist/adapters/type-ast-bridge/ir-to-typescript.mjs +139 -0
  71. package/dist/adapters/type-ast-bridge/ir-to-typescript.mjs.map +1 -0
  72. package/dist/adapters/type-ast-bridge/lazy-node.cjs +23 -0
  73. package/dist/adapters/type-ast-bridge/lazy-node.cjs.map +1 -0
  74. package/dist/adapters/type-ast-bridge/lazy-node.mjs +21 -0
  75. package/dist/adapters/type-ast-bridge/lazy-node.mjs.map +1 -0
  76. package/dist/adapters/type-ast-bridge/load-typescript.cjs +57 -0
  77. package/dist/adapters/type-ast-bridge/load-typescript.cjs.map +1 -0
  78. package/dist/adapters/type-ast-bridge/load-typescript.mjs +51 -0
  79. package/dist/adapters/type-ast-bridge/load-typescript.mjs.map +1 -0
  80. package/dist/adapters/type-ast-bridge/print-typescript.cjs +21 -0
  81. package/dist/adapters/type-ast-bridge/print-typescript.cjs.map +1 -0
  82. package/dist/adapters/type-ast-bridge/print-typescript.mjs +19 -0
  83. package/dist/adapters/type-ast-bridge/print-typescript.mjs.map +1 -0
  84. package/dist/adapters/type-ast-bridge/typescript-raw-text.cjs +33 -0
  85. package/dist/adapters/type-ast-bridge/typescript-raw-text.cjs.map +1 -0
  86. package/dist/adapters/type-ast-bridge/typescript-raw-text.mjs +29 -0
  87. package/dist/adapters/type-ast-bridge/typescript-raw-text.mjs.map +1 -0
  88. package/dist/adapters/type-ast-bridge/typescript-to-ir.cjs +204 -0
  89. package/dist/adapters/type-ast-bridge/typescript-to-ir.cjs.map +1 -0
  90. package/dist/adapters/type-ast-bridge/typescript-to-ir.mjs +201 -0
  91. package/dist/adapters/type-ast-bridge/typescript-to-ir.mjs.map +1 -0
  92. package/dist/api/ast-to-string.cjs +39 -0
  93. package/dist/api/ast-to-string.cjs.map +1 -0
  94. package/dist/api/ast-to-string.mjs +37 -0
  95. package/dist/api/ast-to-string.mjs.map +1 -0
  96. package/dist/api/comment-header.cjs +11 -0
  97. package/dist/api/comment-header.cjs.map +1 -0
  98. package/dist/api/comment-header.mjs +9 -0
  99. package/dist/api/comment-header.mjs.map +1 -0
  100. package/dist/api/default-ports.cjs +38 -0
  101. package/dist/api/default-ports.cjs.map +1 -0
  102. package/dist/api/default-ports.mjs +28 -0
  103. package/dist/api/default-ports.mjs.map +1 -0
  104. package/dist/api/discriminator-enum.cjs +44 -0
  105. package/dist/api/discriminator-enum.cjs.map +1 -0
  106. package/dist/api/discriminator-enum.mjs +42 -0
  107. package/dist/api/discriminator-enum.mjs.map +1 -0
  108. package/dist/api/discriminator-scan.cjs +168 -0
  109. package/dist/api/discriminator-scan.cjs.map +1 -0
  110. package/dist/api/discriminator-scan.mjs +165 -0
  111. package/dist/api/discriminator-scan.mjs.map +1 -0
  112. package/dist/api/document-declarations.cjs +28 -0
  113. package/dist/api/document-declarations.cjs.map +1 -0
  114. package/dist/api/document-declarations.mjs +26 -0
  115. package/dist/api/document-declarations.mjs.map +1 -0
  116. package/dist/api/document-refs.cjs +53 -0
  117. package/dist/api/document-refs.cjs.map +1 -0
  118. package/dist/api/document-refs.mjs +50 -0
  119. package/dist/api/document-refs.mjs.map +1 -0
  120. package/dist/api/document-run.cjs +107 -0
  121. package/dist/api/document-run.cjs.map +1 -0
  122. package/dist/api/document-run.mjs +101 -0
  123. package/dist/api/document-run.mjs.map +1 -0
  124. package/dist/api/footer-entry.cjs +18 -0
  125. package/dist/api/footer-entry.cjs.map +1 -0
  126. package/dist/api/footer-entry.mjs +15 -0
  127. package/dist/api/footer-entry.mjs.map +1 -0
  128. package/dist/api/footer-sink.cjs +53 -0
  129. package/dist/api/footer-sink.cjs.map +1 -0
  130. package/dist/api/footer-sink.mjs +51 -0
  131. package/dist/api/footer-sink.mjs.map +1 -0
  132. package/dist/api/legacy-callback-warning.cjs +25 -0
  133. package/dist/api/legacy-callback-warning.cjs.map +1 -0
  134. package/dist/api/legacy-callback-warning.mjs +22 -0
  135. package/dist/api/legacy-callback-warning.mjs.map +1 -0
  136. package/dist/api/legacy-ts-helpers.cjs +203 -0
  137. package/dist/api/legacy-ts-helpers.cjs.map +1 -0
  138. package/dist/api/legacy-ts-helpers.mjs +187 -0
  139. package/dist/api/legacy-ts-helpers.mjs.map +1 -0
  140. package/dist/api/legacy-utils.cjs +65 -0
  141. package/dist/api/legacy-utils.cjs.map +1 -0
  142. package/dist/api/legacy-utils.mjs +50 -0
  143. package/dist/api/legacy-utils.mjs.map +1 -0
  144. package/dist/api/openapi-ts.cjs +40 -0
  145. package/dist/api/openapi-ts.cjs.map +1 -0
  146. package/dist/api/openapi-ts.mjs +34 -0
  147. package/dist/api/openapi-ts.mjs.map +1 -0
  148. package/dist/api/schema-callbacks.cjs +140 -0
  149. package/dist/api/schema-callbacks.cjs.map +1 -0
  150. package/dist/api/schema-callbacks.mjs +136 -0
  151. package/dist/api/schema-callbacks.mjs.map +1 -0
  152. package/dist/api/string-to-ast.cjs +21 -0
  153. package/dist/api/string-to-ast.cjs.map +1 -0
  154. package/dist/api/string-to-ast.mjs +18 -0
  155. package/dist/api/string-to-ast.mjs.map +1 -0
  156. package/dist/api/transform-context.cjs +82 -0
  157. package/dist/api/transform-context.cjs.map +1 -0
  158. package/dist/api/transform-context.mjs +65 -0
  159. package/dist/api/transform-context.mjs.map +1 -0
  160. package/dist/api/transform-schema.cjs +31 -0
  161. package/dist/api/transform-schema.cjs.map +1 -0
  162. package/dist/api/transform-schema.mjs +26 -0
  163. package/dist/api/transform-schema.mjs.map +1 -0
  164. package/dist/api/type-helpers.cjs +85 -0
  165. package/dist/api/type-helpers.cjs.map +1 -0
  166. package/dist/api/type-helpers.mjs +66 -0
  167. package/dist/api/type-helpers.mjs.map +1 -0
  168. package/dist/api/unsupported-feature-warnings.cjs +17 -0
  169. package/dist/api/unsupported-feature-warnings.cjs.map +1 -0
  170. package/dist/api/unsupported-feature-warnings.mjs +15 -0
  171. package/dist/api/unsupported-feature-warnings.mjs.map +1 -0
  172. package/dist/application/print/comment-writer.cjs +95 -0
  173. package/dist/application/print/comment-writer.cjs.map +1 -0
  174. package/dist/application/print/comment-writer.mjs +93 -0
  175. package/dist/application/print/comment-writer.mjs.map +1 -0
  176. package/dist/application/print/declaration-printer.cjs +83 -0
  177. package/dist/application/print/declaration-printer.cjs.map +1 -0
  178. package/dist/application/print/declaration-printer.mjs +81 -0
  179. package/dist/application/print/declaration-printer.mjs.map +1 -0
  180. package/dist/application/print/literal-text.cjs +52 -0
  181. package/dist/application/print/literal-text.cjs.map +1 -0
  182. package/dist/application/print/literal-text.mjs +48 -0
  183. package/dist/application/print/literal-text.mjs.map +1 -0
  184. package/dist/application/print/print-nodes.cjs +38 -0
  185. package/dist/application/print/print-nodes.cjs.map +1 -0
  186. package/dist/application/print/print-nodes.mjs +36 -0
  187. package/dist/application/print/print-nodes.mjs.map +1 -0
  188. package/dist/application/print/print-options.cjs +6 -0
  189. package/dist/application/print/print-options.cjs.map +1 -0
  190. package/dist/application/print/print-options.mjs +4 -0
  191. package/dist/application/print/print-options.mjs.map +1 -0
  192. package/dist/application/print/text-writer.cjs +63 -0
  193. package/dist/application/print/text-writer.cjs.map +1 -0
  194. package/dist/application/print/text-writer.mjs +60 -0
  195. package/dist/application/print/text-writer.mjs.map +1 -0
  196. package/dist/application/print/type-printer.cjs +214 -0
  197. package/dist/application/print/type-printer.cjs.map +1 -0
  198. package/dist/application/print/type-printer.mjs +210 -0
  199. package/dist/application/print/type-printer.mjs.map +1 -0
  200. package/dist/application/stack-overflow.cjs +36 -0
  201. package/dist/application/stack-overflow.cjs.map +1 -0
  202. package/dist/application/stack-overflow.mjs +31 -0
  203. package/dist/application/stack-overflow.mjs.map +1 -0
  204. package/dist/application/transform/document/components.cjs +104 -0
  205. package/dist/application/transform/document/components.cjs.map +1 -0
  206. package/dist/application/transform/document/components.mjs +102 -0
  207. package/dist/application/transform/document/components.mjs.map +1 -0
  208. package/dist/application/transform/document/defs-root.cjs +18 -0
  209. package/dist/application/transform/document/defs-root.cjs.map +1 -0
  210. package/dist/application/transform/document/defs-root.mjs +16 -0
  211. package/dist/application/transform/document/defs-root.mjs.map +1 -0
  212. package/dist/application/transform/document/document-member.cjs +13 -0
  213. package/dist/application/transform/document/document-member.cjs.map +1 -0
  214. package/dist/application/transform/document/document-member.mjs +11 -0
  215. package/dist/application/transform/document/document-member.mjs.map +1 -0
  216. package/dist/application/transform/document/document.cjs +86 -0
  217. package/dist/application/transform/document/document.cjs.map +1 -0
  218. package/dist/application/transform/document/document.mjs +83 -0
  219. package/dist/application/transform/document/document.mjs.map +1 -0
  220. package/dist/application/transform/document/header.cjs +27 -0
  221. package/dist/application/transform/document/header.cjs.map +1 -0
  222. package/dist/application/transform/document/header.mjs +25 -0
  223. package/dist/application/transform/document/header.mjs.map +1 -0
  224. package/dist/application/transform/document/kept-deprecated.cjs +96 -0
  225. package/dist/application/transform/document/kept-deprecated.cjs.map +1 -0
  226. package/dist/application/transform/document/kept-deprecated.mjs +94 -0
  227. package/dist/application/transform/document/kept-deprecated.mjs.map +1 -0
  228. package/dist/application/transform/document/media-type.cjs +42 -0
  229. package/dist/application/transform/document/media-type.cjs.map +1 -0
  230. package/dist/application/transform/document/media-type.mjs +38 -0
  231. package/dist/application/transform/document/media-type.mjs.map +1 -0
  232. package/dist/application/transform/document/operation.cjs +45 -0
  233. package/dist/application/transform/document/operation.cjs.map +1 -0
  234. package/dist/application/transform/document/operation.mjs +43 -0
  235. package/dist/application/transform/document/operation.mjs.map +1 -0
  236. package/dist/application/transform/document/parameter.cjs +25 -0
  237. package/dist/application/transform/document/parameter.cjs.map +1 -0
  238. package/dist/application/transform/document/parameter.mjs +23 -0
  239. package/dist/application/transform/document/parameter.mjs.map +1 -0
  240. package/dist/application/transform/document/parameters.cjs +114 -0
  241. package/dist/application/transform/document/parameters.cjs.map +1 -0
  242. package/dist/application/transform/document/parameters.mjs +112 -0
  243. package/dist/application/transform/document/parameters.mjs.map +1 -0
  244. package/dist/application/transform/document/path-item-conflicts.cjs +51 -0
  245. package/dist/application/transform/document/path-item-conflicts.cjs.map +1 -0
  246. package/dist/application/transform/document/path-item-conflicts.mjs +49 -0
  247. package/dist/application/transform/document/path-item-conflicts.mjs.map +1 -0
  248. package/dist/application/transform/document/path-item.cjs +82 -0
  249. package/dist/application/transform/document/path-item.cjs.map +1 -0
  250. package/dist/application/transform/document/path-item.mjs +80 -0
  251. package/dist/application/transform/document/path-item.mjs.map +1 -0
  252. package/dist/application/transform/document/path-key-overlaps.cjs +57 -0
  253. package/dist/application/transform/document/path-key-overlaps.cjs.map +1 -0
  254. package/dist/application/transform/document/path-key-overlaps.mjs +55 -0
  255. package/dist/application/transform/document/path-key-overlaps.mjs.map +1 -0
  256. package/dist/application/transform/document/paths-enum.cjs +75 -0
  257. package/dist/application/transform/document/paths-enum.cjs.map +1 -0
  258. package/dist/application/transform/document/paths-enum.mjs +72 -0
  259. package/dist/application/transform/document/paths-enum.mjs.map +1 -0
  260. package/dist/application/transform/document/paths.cjs +127 -0
  261. package/dist/application/transform/document/paths.cjs.map +1 -0
  262. package/dist/application/transform/document/paths.mjs +125 -0
  263. package/dist/application/transform/document/paths.mjs.map +1 -0
  264. package/dist/application/transform/document/request-body.cjs +36 -0
  265. package/dist/application/transform/document/request-body.cjs.map +1 -0
  266. package/dist/application/transform/document/request-body.mjs +34 -0
  267. package/dist/application/transform/document/request-body.mjs.map +1 -0
  268. package/dist/application/transform/document/response.cjs +59 -0
  269. package/dist/application/transform/document/response.cjs.map +1 -0
  270. package/dist/application/transform/document/response.mjs +57 -0
  271. package/dist/application/transform/document/response.mjs.map +1 -0
  272. package/dist/application/transform/document/responses.cjs +23 -0
  273. package/dist/application/transform/document/responses.cjs.map +1 -0
  274. package/dist/application/transform/document/responses.mjs +21 -0
  275. package/dist/application/transform/document/responses.mjs.map +1 -0
  276. package/dist/application/transform/document/root-type-aliases.cjs +69 -0
  277. package/dist/application/transform/document/root-type-aliases.cjs.map +1 -0
  278. package/dist/application/transform/document/root-type-aliases.mjs +65 -0
  279. package/dist/application/transform/document/root-type-aliases.mjs.map +1 -0
  280. package/dist/application/transform/document/webhooks.cjs +19 -0
  281. package/dist/application/transform/document/webhooks.cjs.map +1 -0
  282. package/dist/application/transform/document/webhooks.mjs +17 -0
  283. package/dist/application/transform/document/webhooks.mjs.map +1 -0
  284. package/dist/application/transform/document-entries.cjs +17 -0
  285. package/dist/application/transform/document-entries.cjs.map +1 -0
  286. package/dist/application/transform/document-entries.mjs +14 -0
  287. package/dist/application/transform/document-entries.mjs.map +1 -0
  288. package/dist/application/transform/footer/document-footer.cjs +88 -0
  289. package/dist/application/transform/footer/document-footer.cjs.map +1 -0
  290. package/dist/application/transform/footer/document-footer.mjs +86 -0
  291. package/dist/application/transform/footer/document-footer.mjs.map +1 -0
  292. package/dist/application/transform/footer/enum-naming.cjs +121 -0
  293. package/dist/application/transform/footer/enum-naming.cjs.map +1 -0
  294. package/dist/application/transform/footer/enum-naming.mjs +115 -0
  295. package/dist/application/transform/footer/enum-naming.mjs.map +1 -0
  296. package/dist/application/transform/helper-types.cjs +68 -0
  297. package/dist/application/transform/helper-types.cjs.map +1 -0
  298. package/dist/application/transform/helper-types.mjs +65 -0
  299. package/dist/application/transform/helper-types.mjs.map +1 -0
  300. package/dist/application/transform/literal-type.cjs +36 -0
  301. package/dist/application/transform/literal-type.cjs.map +1 -0
  302. package/dist/application/transform/literal-type.mjs +34 -0
  303. package/dist/application/transform/literal-type.mjs.map +1 -0
  304. package/dist/application/transform/numbered-names.cjs +18 -0
  305. package/dist/application/transform/numbered-names.cjs.map +1 -0
  306. package/dist/application/transform/numbered-names.mjs +16 -0
  307. package/dist/application/transform/numbered-names.mjs.map +1 -0
  308. package/dist/application/transform/ref-type.cjs +57 -0
  309. package/dist/application/transform/ref-type.cjs.map +1 -0
  310. package/dist/application/transform/ref-type.mjs +54 -0
  311. package/dist/application/transform/ref-type.mjs.map +1 -0
  312. package/dist/application/transform/schema/array-type.cjs +105 -0
  313. package/dist/application/transform/schema/array-type.cjs.map +1 -0
  314. package/dist/application/transform/schema/array-type.mjs +103 -0
  315. package/dist/application/transform/schema/array-type.mjs.map +1 -0
  316. package/dist/application/transform/schema/composition-type.cjs +107 -0
  317. package/dist/application/transform/schema/composition-type.cjs.map +1 -0
  318. package/dist/application/transform/schema/composition-type.mjs +105 -0
  319. package/dist/application/transform/schema/composition-type.mjs.map +1 -0
  320. package/dist/application/transform/schema/core-type.cjs +84 -0
  321. package/dist/application/transform/schema/core-type.cjs.map +1 -0
  322. package/dist/application/transform/schema/core-type.mjs +82 -0
  323. package/dist/application/transform/schema/core-type.mjs.map +1 -0
  324. package/dist/application/transform/schema/discriminator-property.cjs +21 -0
  325. package/dist/application/transform/schema/discriminator-property.cjs.map +1 -0
  326. package/dist/application/transform/schema/discriminator-property.mjs +19 -0
  327. package/dist/application/transform/schema/discriminator-property.mjs.map +1 -0
  328. package/dist/application/transform/schema/enum-rule.cjs +107 -0
  329. package/dist/application/transform/schema/enum-rule.cjs.map +1 -0
  330. package/dist/application/transform/schema/enum-rule.mjs +105 -0
  331. package/dist/application/transform/schema/enum-rule.mjs.map +1 -0
  332. package/dist/application/transform/schema/object-type.cjs +173 -0
  333. package/dist/application/transform/schema/object-type.cjs.map +1 -0
  334. package/dist/application/transform/schema/object-type.mjs +170 -0
  335. package/dist/application/transform/schema/object-type.mjs.map +1 -0
  336. package/dist/application/transform/schema/presence-members.cjs +59 -0
  337. package/dist/application/transform/schema/presence-members.cjs.map +1 -0
  338. package/dist/application/transform/schema/presence-members.mjs +57 -0
  339. package/dist/application/transform/schema/presence-members.mjs.map +1 -0
  340. package/dist/application/transform/schema/schema-transform.cjs +72 -0
  341. package/dist/application/transform/schema/schema-transform.cjs.map +1 -0
  342. package/dist/application/transform/schema/schema-transform.mjs +68 -0
  343. package/dist/application/transform/schema/schema-transform.mjs.map +1 -0
  344. package/dist/application/transform/schema/unevaluated-properties.cjs +61 -0
  345. package/dist/application/transform/schema/unevaluated-properties.cjs.map +1 -0
  346. package/dist/application/transform/schema/unevaluated-properties.mjs +59 -0
  347. package/dist/application/transform/schema/unevaluated-properties.mjs.map +1 -0
  348. package/dist/application/transform/schema-comment.cjs +84 -0
  349. package/dist/application/transform/schema-comment.cjs.map +1 -0
  350. package/dist/application/transform/schema-comment.mjs +81 -0
  351. package/dist/application/transform/schema-comment.mjs.map +1 -0
  352. package/dist/application/transform/shared-types.cjs +8 -0
  353. package/dist/application/transform/shared-types.cjs.map +1 -0
  354. package/dist/application/transform/shared-types.mjs +6 -0
  355. package/dist/application/transform/shared-types.mjs.map +1 -0
  356. package/dist/application/transform/type-combinators.cjs +49 -0
  357. package/dist/application/transform/type-combinators.cjs.map +1 -0
  358. package/dist/application/transform/type-combinators.mjs +42 -0
  359. package/dist/application/transform/type-combinators.mjs.map +1 -0
  360. package/dist/cli/cli-arguments.cjs +137 -0
  361. package/dist/cli/cli-arguments.cjs.map +1 -0
  362. package/dist/cli/cli-arguments.mjs +129 -0
  363. package/dist/cli/cli-arguments.mjs.map +1 -0
  364. package/dist/cli/cli-errors.cjs +80 -0
  365. package/dist/cli/cli-errors.cjs.map +1 -0
  366. package/dist/cli/cli-errors.mjs +76 -0
  367. package/dist/cli/cli-errors.mjs.map +1 -0
  368. package/dist/cli/cli-output.cjs +37 -0
  369. package/dist/cli/cli-output.cjs.map +1 -0
  370. package/dist/cli/cli-output.mjs +30 -0
  371. package/dist/cli/cli-output.mjs.map +1 -0
  372. package/dist/cli/docs-links.cjs +6 -0
  373. package/dist/cli/docs-links.cjs.map +1 -0
  374. package/dist/cli/docs-links.mjs +4 -0
  375. package/dist/cli/docs-links.mjs.map +1 -0
  376. package/dist/cli/fix-option.cjs +19 -0
  377. package/dist/cli/fix-option.cjs.map +1 -0
  378. package/dist/cli/fix-option.mjs +16 -0
  379. package/dist/cli/fix-option.mjs.map +1 -0
  380. package/dist/cli/help-text.cjs +44 -0
  381. package/dist/cli/help-text.cjs.map +1 -0
  382. package/dist/cli/help-text.mjs +42 -0
  383. package/dist/cli/help-text.mjs.map +1 -0
  384. package/dist/cli/main.cjs +62 -0
  385. package/dist/cli/main.cjs.map +1 -0
  386. package/dist/cli/main.d.cts +2 -0
  387. package/dist/cli/main.d.mts +2 -0
  388. package/dist/cli/main.d.ts +2 -0
  389. package/dist/cli/main.mjs +54 -0
  390. package/dist/cli/main.mjs.map +1 -0
  391. package/dist/cli/redocly-apis.cjs +65 -0
  392. package/dist/cli/redocly-apis.cjs.map +1 -0
  393. package/dist/cli/redocly-apis.mjs +62 -0
  394. package/dist/cli/redocly-apis.mjs.map +1 -0
  395. package/dist/cli/ref-limits.cjs +14 -0
  396. package/dist/cli/ref-limits.cjs.map +1 -0
  397. package/dist/cli/ref-limits.mjs +12 -0
  398. package/dist/cli/ref-limits.mjs.map +1 -0
  399. package/dist/cli/run-cli.cjs +100 -0
  400. package/dist/cli/run-cli.cjs.map +1 -0
  401. package/dist/cli/run-cli.mjs +98 -0
  402. package/dist/cli/run-cli.mjs.map +1 -0
  403. package/dist/domain/assert-never.cjs +8 -0
  404. package/dist/domain/assert-never.cjs.map +1 -0
  405. package/dist/domain/assert-never.mjs +6 -0
  406. package/dist/domain/assert-never.mjs.map +1 -0
  407. package/dist/domain/errors.cjs +50 -0
  408. package/dist/domain/errors.cjs.map +1 -0
  409. package/dist/domain/errors.mjs +46 -0
  410. package/dist/domain/errors.mjs.map +1 -0
  411. package/dist/domain/ir/constructors.cjs +89 -0
  412. package/dist/domain/ir/constructors.cjs.map +1 -0
  413. package/dist/domain/ir/constructors.mjs +71 -0
  414. package/dist/domain/ir/constructors.mjs.map +1 -0
  415. package/dist/domain/ir/identifier-text.cjs +29 -0
  416. package/dist/domain/ir/identifier-text.cjs.map +1 -0
  417. package/dist/domain/ir/identifier-text.mjs +25 -0
  418. package/dist/domain/ir/identifier-text.mjs.map +1 -0
  419. package/dist/domain/ir/newer-identifier-ranges.cjs +109 -0
  420. package/dist/domain/ir/newer-identifier-ranges.cjs.map +1 -0
  421. package/dist/domain/ir/newer-identifier-ranges.mjs +106 -0
  422. package/dist/domain/ir/newer-identifier-ranges.mjs.map +1 -0
  423. package/dist/domain/ir/normalize.cjs +32 -0
  424. package/dist/domain/ir/normalize.cjs.map +1 -0
  425. package/dist/domain/ir/normalize.mjs +29 -0
  426. package/dist/domain/ir/normalize.mjs.map +1 -0
  427. package/dist/domain/ir/property-name.cjs +19 -0
  428. package/dist/domain/ir/property-name.cjs.map +1 -0
  429. package/dist/domain/ir/property-name.mjs +16 -0
  430. package/dist/domain/ir/property-name.mjs.map +1 -0
  431. package/dist/domain/ir/raw-text-escapes.cjs +25 -0
  432. package/dist/domain/ir/raw-text-escapes.cjs.map +1 -0
  433. package/dist/domain/ir/raw-text-escapes.mjs +22 -0
  434. package/dist/domain/ir/raw-text-escapes.mjs.map +1 -0
  435. package/dist/domain/openapi/alias-expansion.cjs +50 -0
  436. package/dist/domain/openapi/alias-expansion.cjs.map +1 -0
  437. package/dist/domain/openapi/alias-expansion.mjs +45 -0
  438. package/dist/domain/openapi/alias-expansion.mjs.map +1 -0
  439. package/dist/domain/openapi/binary-content.cjs +48 -0
  440. package/dist/domain/openapi/binary-content.cjs.map +1 -0
  441. package/dist/domain/openapi/binary-content.mjs +45 -0
  442. package/dist/domain/openapi/binary-content.mjs.map +1 -0
  443. package/dist/domain/openapi/components-object.cjs +29 -0
  444. package/dist/domain/openapi/components-object.cjs.map +1 -0
  445. package/dist/domain/openapi/components-object.mjs +24 -0
  446. package/dist/domain/openapi/components-object.mjs.map +1 -0
  447. package/dist/domain/openapi/json-pointer.cjs +31 -0
  448. package/dist/domain/openapi/json-pointer.cjs.map +1 -0
  449. package/dist/domain/openapi/json-pointer.mjs +27 -0
  450. package/dist/domain/openapi/json-pointer.mjs.map +1 -0
  451. package/dist/domain/openapi/media-type-object.cjs +14 -0
  452. package/dist/domain/openapi/media-type-object.cjs.map +1 -0
  453. package/dist/domain/openapi/media-type-object.mjs +11 -0
  454. package/dist/domain/openapi/media-type-object.mjs.map +1 -0
  455. package/dist/domain/openapi/parameter-object.cjs +13 -0
  456. package/dist/domain/openapi/parameter-object.cjs.map +1 -0
  457. package/dist/domain/openapi/parameter-object.mjs +10 -0
  458. package/dist/domain/openapi/parameter-object.mjs.map +1 -0
  459. package/dist/domain/openapi/path-item-object.cjs +35 -0
  460. package/dist/domain/openapi/path-item-object.cjs.map +1 -0
  461. package/dist/domain/openapi/path-item-object.mjs +30 -0
  462. package/dist/domain/openapi/path-item-object.mjs.map +1 -0
  463. package/dist/domain/openapi/unsupported-features.cjs +87 -0
  464. package/dist/domain/openapi/unsupported-features.cjs.map +1 -0
  465. package/dist/domain/openapi/unsupported-features.mjs +84 -0
  466. package/dist/domain/openapi/unsupported-features.mjs.map +1 -0
  467. package/dist/domain/output-fixes.cjs +66 -0
  468. package/dist/domain/output-fixes.cjs.map +1 -0
  469. package/dist/domain/output-fixes.mjs +59 -0
  470. package/dist/domain/output-fixes.mjs.map +1 -0
  471. package/dist/index.cjs +98 -0
  472. package/dist/index.cjs.map +1 -0
  473. package/dist/index.d.cts +812 -0
  474. package/dist/index.d.mts +812 -0
  475. package/dist/index.d.ts +812 -0
  476. package/dist/index.mjs +27 -0
  477. package/dist/index.mjs.map +1 -0
  478. package/dist/transform/components-object.cjs +14 -0
  479. package/dist/transform/components-object.cjs.map +1 -0
  480. package/dist/transform/components-object.mjs +10 -0
  481. package/dist/transform/components-object.mjs.map +1 -0
  482. package/dist/transform/header-object.cjs +12 -0
  483. package/dist/transform/header-object.cjs.map +1 -0
  484. package/dist/transform/header-object.mjs +10 -0
  485. package/dist/transform/header-object.mjs.map +1 -0
  486. package/dist/transform/media-type-object.cjs +12 -0
  487. package/dist/transform/media-type-object.cjs.map +1 -0
  488. package/dist/transform/media-type-object.mjs +10 -0
  489. package/dist/transform/media-type-object.mjs.map +1 -0
  490. package/dist/transform/operation-object.cjs +26 -0
  491. package/dist/transform/operation-object.cjs.map +1 -0
  492. package/dist/transform/operation-object.mjs +21 -0
  493. package/dist/transform/operation-object.mjs.map +1 -0
  494. package/dist/transform/parameter-object.cjs +12 -0
  495. package/dist/transform/parameter-object.cjs.map +1 -0
  496. package/dist/transform/parameter-object.mjs +10 -0
  497. package/dist/transform/parameter-object.mjs.map +1 -0
  498. package/dist/transform/path-item-object.cjs +12 -0
  499. package/dist/transform/path-item-object.cjs.map +1 -0
  500. package/dist/transform/path-item-object.mjs +10 -0
  501. package/dist/transform/path-item-object.mjs.map +1 -0
  502. package/dist/transform/paths-object.cjs +11 -0
  503. package/dist/transform/paths-object.cjs.map +1 -0
  504. package/dist/transform/paths-object.mjs +9 -0
  505. package/dist/transform/paths-object.mjs.map +1 -0
  506. package/dist/transform/request-body-object.cjs +12 -0
  507. package/dist/transform/request-body-object.cjs.map +1 -0
  508. package/dist/transform/request-body-object.mjs +10 -0
  509. package/dist/transform/request-body-object.mjs.map +1 -0
  510. package/dist/transform/response-object.cjs +12 -0
  511. package/dist/transform/response-object.cjs.map +1 -0
  512. package/dist/transform/response-object.mjs +10 -0
  513. package/dist/transform/response-object.mjs.map +1 -0
  514. package/dist/transform/responses-object.cjs +12 -0
  515. package/dist/transform/responses-object.cjs.map +1 -0
  516. package/dist/transform/responses-object.mjs +10 -0
  517. package/dist/transform/responses-object.mjs.map +1 -0
  518. package/dist/transform/schema-object.cjs +21 -0
  519. package/dist/transform/schema-object.cjs.map +1 -0
  520. package/dist/transform/schema-object.mjs +16 -0
  521. package/dist/transform/schema-object.mjs.map +1 -0
  522. package/package.json +115 -4
  523. package/src/adapters/node-file-system/node-file-system.ts +44 -0
  524. package/src/adapters/redocly-loader/alias-limit.ts +20 -0
  525. package/src/adapters/redocly-loader/allowed-hosts.ts +62 -0
  526. package/src/adapters/redocly-loader/bundled-ref-repair.ts +65 -0
  527. package/src/adapters/redocly-loader/malformed-refs.ts +61 -0
  528. package/src/adapters/redocly-loader/redocly-config-source.ts +43 -0
  529. package/src/adapters/redocly-loader/redocly-schema-loader.ts +246 -0
  530. package/src/adapters/redocly-loader/ref-access.ts +146 -0
  531. package/src/adapters/redocly-loader/ref-holders.ts +43 -0
  532. package/src/adapters/redocly-loader/remote-fetch.ts +104 -0
  533. package/src/adapters/redocly-loader/schema-load-errors.ts +124 -0
  534. package/src/adapters/redocly-loader/schema-source.ts +151 -0
  535. package/src/adapters/redocly-loader/unsupported-keys.ts +102 -0
  536. package/src/adapters/terminal-logger/terminal-logger.ts +98 -0
  537. package/src/adapters/type-ast-bridge/footer-nodes.ts +38 -0
  538. package/src/adapters/type-ast-bridge/ir-declarations-to-typescript.ts +100 -0
  539. package/src/adapters/type-ast-bridge/ir-to-typescript.ts +220 -0
  540. package/src/adapters/type-ast-bridge/lazy-node.ts +24 -0
  541. package/src/adapters/type-ast-bridge/load-typescript.ts +84 -0
  542. package/src/adapters/type-ast-bridge/print-typescript.ts +33 -0
  543. package/src/adapters/type-ast-bridge/typescript-raw-text.ts +49 -0
  544. package/src/adapters/type-ast-bridge/typescript-to-ir.ts +280 -0
  545. package/src/adapters/type-ast-bridge/typescript-types.ts +8 -0
  546. package/src/api/ast-to-string.ts +59 -0
  547. package/src/api/comment-header.ts +7 -0
  548. package/src/api/default-ports.ts +44 -0
  549. package/src/api/discriminator-enum.ts +76 -0
  550. package/src/api/discriminator-scan.ts +272 -0
  551. package/src/api/document-declarations.ts +41 -0
  552. package/src/api/document-refs.ts +71 -0
  553. package/src/api/document-run.ts +159 -0
  554. package/src/api/footer-entry.ts +23 -0
  555. package/src/api/footer-sink.ts +67 -0
  556. package/src/api/legacy-callback-warning.ts +29 -0
  557. package/src/api/legacy-ts-helpers.ts +311 -0
  558. package/src/api/legacy-utils.ts +118 -0
  559. package/src/api/openapi-ts.ts +62 -0
  560. package/src/api/schema-callbacks.ts +211 -0
  561. package/src/api/string-to-ast.ts +27 -0
  562. package/src/api/transform-context.ts +87 -0
  563. package/src/api/transform-schema.ts +39 -0
  564. package/src/api/type-helpers.ts +130 -0
  565. package/src/api/unsupported-feature-warnings.ts +26 -0
  566. package/src/application/ports/file-system.ts +12 -0
  567. package/src/application/ports/logger.ts +16 -0
  568. package/src/application/ports/redocly-config-source.ts +16 -0
  569. package/src/application/ports/schema-loader.ts +32 -0
  570. package/src/application/print/comment-writer.ts +91 -0
  571. package/src/application/print/declaration-printer.ts +100 -0
  572. package/src/application/print/literal-text.ts +62 -0
  573. package/src/application/print/print-nodes.ts +62 -0
  574. package/src/application/print/print-options.ts +11 -0
  575. package/src/application/print/text-writer.ts +83 -0
  576. package/src/application/print/type-printer.ts +281 -0
  577. package/src/application/stack-overflow.ts +54 -0
  578. package/src/application/transform/document/components.ts +189 -0
  579. package/src/application/transform/document/defs-root.ts +25 -0
  580. package/src/application/transform/document/document-member.ts +20 -0
  581. package/src/application/transform/document/document.ts +157 -0
  582. package/src/application/transform/document/header.ts +34 -0
  583. package/src/application/transform/document/kept-deprecated.ts +135 -0
  584. package/src/application/transform/document/media-type.ts +78 -0
  585. package/src/application/transform/document/operation.ts +64 -0
  586. package/src/application/transform/document/parameter.ts +45 -0
  587. package/src/application/transform/document/parameters.ts +200 -0
  588. package/src/application/transform/document/path-item-conflicts.ts +79 -0
  589. package/src/application/transform/document/path-item.ts +168 -0
  590. package/src/application/transform/document/path-key-overlaps.ts +112 -0
  591. package/src/application/transform/document/paths-enum.ts +127 -0
  592. package/src/application/transform/document/paths.ts +211 -0
  593. package/src/application/transform/document/request-body.ts +50 -0
  594. package/src/application/transform/document/response.ts +109 -0
  595. package/src/application/transform/document/responses.ts +29 -0
  596. package/src/application/transform/document/root-type-aliases.ts +106 -0
  597. package/src/application/transform/document/webhooks.ts +22 -0
  598. package/src/application/transform/document-entries.ts +28 -0
  599. package/src/application/transform/footer/document-footer.ts +127 -0
  600. package/src/application/transform/footer/enum-naming.ts +181 -0
  601. package/src/application/transform/helper-types.ts +92 -0
  602. package/src/application/transform/literal-type.ts +54 -0
  603. package/src/application/transform/numbered-names.ts +20 -0
  604. package/src/application/transform/ref-type.ts +97 -0
  605. package/src/application/transform/schema/array-type.ts +152 -0
  606. package/src/application/transform/schema/composition-type.ts +183 -0
  607. package/src/application/transform/schema/core-type.ts +115 -0
  608. package/src/application/transform/schema/discriminator-property.ts +28 -0
  609. package/src/application/transform/schema/enum-rule.ts +157 -0
  610. package/src/application/transform/schema/object-type.ts +271 -0
  611. package/src/application/transform/schema/presence-members.ts +96 -0
  612. package/src/application/transform/schema/schema-context.ts +110 -0
  613. package/src/application/transform/schema/schema-rule.ts +29 -0
  614. package/src/application/transform/schema/schema-transform.ts +99 -0
  615. package/src/application/transform/schema/unevaluated-properties.ts +105 -0
  616. package/src/application/transform/schema-comment.ts +116 -0
  617. package/src/application/transform/shared-types.ts +9 -0
  618. package/src/application/transform/transform-context.ts +51 -0
  619. package/src/application/transform/type-combinators.ts +57 -0
  620. package/src/cli/cli-arguments.ts +198 -0
  621. package/src/cli/cli-dependencies.ts +42 -0
  622. package/src/cli/cli-errors.ts +125 -0
  623. package/src/cli/cli-output.ts +53 -0
  624. package/src/cli/docs-links.ts +6 -0
  625. package/src/cli/fix-option.ts +29 -0
  626. package/src/cli/help-text.ts +52 -0
  627. package/src/cli/main.ts +67 -0
  628. package/src/cli/redocly-apis.ts +91 -0
  629. package/src/cli/ref-limits.ts +16 -0
  630. package/src/cli/run-cli.ts +114 -0
  631. package/src/domain/assert-never.ts +8 -0
  632. package/src/domain/errors.ts +74 -0
  633. package/src/domain/ir/constructors.ts +137 -0
  634. package/src/domain/ir/identifier-text.ts +49 -0
  635. package/src/domain/ir/newer-identifier-ranges.ts +109 -0
  636. package/src/domain/ir/nodes.ts +224 -0
  637. package/src/domain/ir/normalize.ts +51 -0
  638. package/src/domain/ir/property-name.ts +28 -0
  639. package/src/domain/ir/raw-text-escapes.ts +37 -0
  640. package/src/domain/openapi/alias-expansion.ts +72 -0
  641. package/src/domain/openapi/binary-content.ts +74 -0
  642. package/src/domain/openapi/components-object.ts +52 -0
  643. package/src/domain/openapi/document-object.ts +12 -0
  644. package/src/domain/openapi/header-object.ts +9 -0
  645. package/src/domain/openapi/json-pointer.ts +46 -0
  646. package/src/domain/openapi/media-type-object.ts +26 -0
  647. package/src/domain/openapi/operation-object.ts +13 -0
  648. package/src/domain/openapi/parameter-object.ts +30 -0
  649. package/src/domain/openapi/path-item-object.ts +70 -0
  650. package/src/domain/openapi/request-body-object.ts +7 -0
  651. package/src/domain/openapi/response-object.ts +14 -0
  652. package/src/domain/openapi/schema-object.ts +59 -0
  653. package/src/domain/openapi/unsupported-features.ts +139 -0
  654. package/src/domain/output-fixes.ts +95 -0
  655. package/src/index.ts +67 -0
  656. package/src/transform/components-object.ts +25 -0
  657. package/src/transform/header-object.ts +19 -0
  658. package/src/transform/media-type-object.ts +19 -0
  659. package/src/transform/operation-object.ts +36 -0
  660. package/src/transform/parameter-object.ts +19 -0
  661. package/src/transform/parameters-array.ts +19 -0
  662. package/src/transform/path-item-object.ts +22 -0
  663. package/src/transform/paths-enum.ts +8 -0
  664. package/src/transform/paths-object.ts +15 -0
  665. package/src/transform/request-body-object.ts +19 -0
  666. package/src/transform/response-object.ts +19 -0
  667. package/src/transform/responses-object.ts +19 -0
  668. package/src/transform/schema-object.ts +36 -0
  669. package/src/transform/webhooks-object.ts +15 -0
  670. package/src/types/generator-options.ts +267 -0
  671. package/src/types/openapi-common.ts +100 -0
  672. package/src/types/openapi-document.ts +196 -0
  673. package/src/types/openapi-path-item.ts +130 -0
  674. package/src/types/openapi-request.ts +209 -0
  675. package/src/types/openapi-response.ts +81 -0
  676. package/src/types/openapi-schema.ts +169 -0
  677. package/src/types/openapi-security.ts +116 -0
  678. package/src/types.ts +12 -0
@@ -0,0 +1,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;;"}
@@ -0,0 +1,31 @@
1
+ 'use strict';
2
+
3
+ function parseRefPointer(ref) {
4
+ const [, pointer = ""] = ref.split("#/");
5
+ return pointer.split("/").map(unescapePointerSegment).filter((segment) => segment.length > 0);
6
+ }
7
+ function unescapePointerSegment(segment) {
8
+ return decodeURIComponent(segment.replaceAll("~1", "/").replaceAll("~0", "~"));
9
+ }
10
+ function escapePointerSegment(segment) {
11
+ return segment.replaceAll("~", "~0").replaceAll("/", "~1").replaceAll("%", "%25");
12
+ }
13
+ function createRef(parts) {
14
+ let ref = "#";
15
+ for (const part of parts) {
16
+ if (part === void 0 || part === null || part === "") {
17
+ continue;
18
+ }
19
+ const text = String(part);
20
+ const segments = parseRefPointer(text);
21
+ for (const segment of segments.length > 0 ? segments : [text]) {
22
+ ref += `/${escapePointerSegment(segment)}`;
23
+ }
24
+ }
25
+ return ref;
26
+ }
27
+
28
+ exports.createRef = createRef;
29
+ exports.escapePointerSegment = escapePointerSegment;
30
+ exports.parseRefPointer = parseRefPointer;
31
+ //# sourceMappingURL=json-pointer.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-pointer.cjs","sources":["../../../src/domain/openapi/json-pointer.ts"],"sourcesContent":["/**\n * The JSON Pointer of a `$ref` as path segments, with the semantics of Redocly's `parseRef`, which\n * the original generator used: the part after the first `#/`, split at `/`, each segment unescaped\n * (`~1` → `/`, `~0` → `~`, then percent-decoding), and empty segments dropped.\n *\n * Throws URIError for a malformed percent escape, as the original does.\n */\nexport function parseRefPointer(ref: string): string[] {\n const [, pointer = \"\"] = ref.split(\"#/\");\n return pointer\n .split(\"/\")\n .map(unescapePointerSegment)\n .filter((segment) => segment.length > 0);\n}\n\nfunction unescapePointerSegment(segment: string): string {\n return decodeURIComponent(segment.replaceAll(\"~1\", \"/\").replaceAll(\"~0\", \"~\"));\n}\n\n/**\n * Escape one segment for a JSON Pointer in a `$ref` fragment: `~` → `~0`, `/` → `~1`, and `%` →\n * `%25`, because reading a pointer back percent-decodes it. The original did not escape `%`, so a\n * name like `50%` threw URIError and `a%2Fb` read back as `a/b` (upstream #2251, #2828).\n */\nexport function escapePointerSegment(segment: string): string {\n return segment.replaceAll(\"~\", \"~0\").replaceAll(\"/\", \"~1\").replaceAll(\"%\", \"%25\");\n}\n\n/**\n * Join parts into a local `$ref` (the original `createRef`). Empty parts are skipped. A part that\n * is itself a `$ref` contributes its segments; any other part is one segment.\n */\nexport function createRef(parts: readonly (string | number | null | undefined)[]): string {\n let ref = \"#\";\n for (const part of parts) {\n if (part === undefined || part === null || part === \"\") {\n continue;\n }\n const text = String(part);\n const segments = parseRefPointer(text);\n for (const segment of segments.length > 0 ? segments : [text]) {\n ref += `/${escapePointerSegment(segment)}`;\n }\n }\n return ref;\n}\n"],"names":[],"mappings":";;AAOO,SAAS,gBAAgB,GAAA,EAAuB;AACrD,EAAA,MAAM,GAAG,OAAA,GAAU,EAAE,CAAA,GAAI,GAAA,CAAI,MAAM,IAAI,CAAA;AACvC,EAAA,OAAO,OAAA,CACJ,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAI,sBAAsB,CAAA,CAC1B,MAAA,CAAO,CAAC,OAAA,KAAY,OAAA,CAAQ,MAAA,GAAS,CAAC,CAAA;AAC3C;AAEA,SAAS,uBAAuB,OAAA,EAAyB;AACvD,EAAA,OAAO,kBAAA,CAAmB,QAAQ,UAAA,CAAW,IAAA,EAAM,GAAG,CAAA,CAAE,UAAA,CAAW,IAAA,EAAM,GAAG,CAAC,CAAA;AAC/E;AAOO,SAAS,qBAAqB,OAAA,EAAyB;AAC5D,EAAA,OAAO,OAAA,CAAQ,UAAA,CAAW,GAAA,EAAK,IAAI,CAAA,CAAE,UAAA,CAAW,GAAA,EAAK,IAAI,CAAA,CAAE,UAAA,CAAW,GAAA,EAAK,KAAK,CAAA;AAClF;AAMO,SAAS,UAAU,KAAA,EAAgE;AACxF,EAAA,IAAI,GAAA,GAAM,GAAA;AACV,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,IAAI,IAAA,KAAS,MAAA,IAAa,IAAA,KAAS,IAAA,IAAQ,SAAS,EAAA,EAAI;AACtD,MAAA;AAAA,IACF;AACA,IAAA,MAAM,IAAA,GAAO,OAAO,IAAI,CAAA;AACxB,IAAA,MAAM,QAAA,GAAW,gBAAgB,IAAI,CAAA;AACrC,IAAA,KAAA,MAAW,WAAW,QAAA,CAAS,MAAA,GAAS,IAAI,QAAA,GAAW,CAAC,IAAI,CAAA,EAAG;AAC7D,MAAA,GAAA,IAAO,CAAA,CAAA,EAAI,oBAAA,CAAqB,OAAO,CAAC,CAAA,CAAA;AAAA,IAC1C;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT;;;;"}
@@ -0,0 +1,27 @@
1
+ function parseRefPointer(ref) {
2
+ const [, pointer = ""] = ref.split("#/");
3
+ return pointer.split("/").map(unescapePointerSegment).filter((segment) => segment.length > 0);
4
+ }
5
+ function unescapePointerSegment(segment) {
6
+ return decodeURIComponent(segment.replaceAll("~1", "/").replaceAll("~0", "~"));
7
+ }
8
+ function escapePointerSegment(segment) {
9
+ return segment.replaceAll("~", "~0").replaceAll("/", "~1").replaceAll("%", "%25");
10
+ }
11
+ function createRef(parts) {
12
+ let ref = "#";
13
+ for (const part of parts) {
14
+ if (part === void 0 || part === null || part === "") {
15
+ continue;
16
+ }
17
+ const text = String(part);
18
+ const segments = parseRefPointer(text);
19
+ for (const segment of segments.length > 0 ? segments : [text]) {
20
+ ref += `/${escapePointerSegment(segment)}`;
21
+ }
22
+ }
23
+ return ref;
24
+ }
25
+
26
+ export { createRef, escapePointerSegment, parseRefPointer };
27
+ //# sourceMappingURL=json-pointer.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-pointer.mjs","sources":["../../../src/domain/openapi/json-pointer.ts"],"sourcesContent":["/**\n * The JSON Pointer of a `$ref` as path segments, with the semantics of Redocly's `parseRef`, which\n * the original generator used: the part after the first `#/`, split at `/`, each segment unescaped\n * (`~1` → `/`, `~0` → `~`, then percent-decoding), and empty segments dropped.\n *\n * Throws URIError for a malformed percent escape, as the original does.\n */\nexport function parseRefPointer(ref: string): string[] {\n const [, pointer = \"\"] = ref.split(\"#/\");\n return pointer\n .split(\"/\")\n .map(unescapePointerSegment)\n .filter((segment) => segment.length > 0);\n}\n\nfunction unescapePointerSegment(segment: string): string {\n return decodeURIComponent(segment.replaceAll(\"~1\", \"/\").replaceAll(\"~0\", \"~\"));\n}\n\n/**\n * Escape one segment for a JSON Pointer in a `$ref` fragment: `~` → `~0`, `/` → `~1`, and `%` →\n * `%25`, because reading a pointer back percent-decodes it. The original did not escape `%`, so a\n * name like `50%` threw URIError and `a%2Fb` read back as `a/b` (upstream #2251, #2828).\n */\nexport function escapePointerSegment(segment: string): string {\n return segment.replaceAll(\"~\", \"~0\").replaceAll(\"/\", \"~1\").replaceAll(\"%\", \"%25\");\n}\n\n/**\n * Join parts into a local `$ref` (the original `createRef`). Empty parts are skipped. A part that\n * is itself a `$ref` contributes its segments; any other part is one segment.\n */\nexport function createRef(parts: readonly (string | number | null | undefined)[]): string {\n let ref = \"#\";\n for (const part of parts) {\n if (part === undefined || part === null || part === \"\") {\n continue;\n }\n const text = String(part);\n const segments = parseRefPointer(text);\n for (const segment of segments.length > 0 ? segments : [text]) {\n ref += `/${escapePointerSegment(segment)}`;\n }\n }\n return ref;\n}\n"],"names":[],"mappings":"AAOO,SAAS,gBAAgB,GAAA,EAAuB;AACrD,EAAA,MAAM,GAAG,OAAA,GAAU,EAAE,CAAA,GAAI,GAAA,CAAI,MAAM,IAAI,CAAA;AACvC,EAAA,OAAO,OAAA,CACJ,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAI,sBAAsB,CAAA,CAC1B,MAAA,CAAO,CAAC,OAAA,KAAY,OAAA,CAAQ,MAAA,GAAS,CAAC,CAAA;AAC3C;AAEA,SAAS,uBAAuB,OAAA,EAAyB;AACvD,EAAA,OAAO,kBAAA,CAAmB,QAAQ,UAAA,CAAW,IAAA,EAAM,GAAG,CAAA,CAAE,UAAA,CAAW,IAAA,EAAM,GAAG,CAAC,CAAA;AAC/E;AAOO,SAAS,qBAAqB,OAAA,EAAyB;AAC5D,EAAA,OAAO,OAAA,CAAQ,UAAA,CAAW,GAAA,EAAK,IAAI,CAAA,CAAE,UAAA,CAAW,GAAA,EAAK,IAAI,CAAA,CAAE,UAAA,CAAW,GAAA,EAAK,KAAK,CAAA;AAClF;AAMO,SAAS,UAAU,KAAA,EAAgE;AACxF,EAAA,IAAI,GAAA,GAAM,GAAA;AACV,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,IAAI,IAAA,KAAS,MAAA,IAAa,IAAA,KAAS,IAAA,IAAQ,SAAS,EAAA,EAAI;AACtD,MAAA;AAAA,IACF;AACA,IAAA,MAAM,IAAA,GAAO,OAAO,IAAI,CAAA;AACxB,IAAA,MAAM,QAAA,GAAW,gBAAgB,IAAI,CAAA;AACrC,IAAA,KAAA,MAAW,WAAW,QAAA,CAAS,MAAA,GAAS,IAAI,QAAA,GAAW,CAAC,IAAI,CAAA,EAAG;AAC7D,MAAA,GAAA,IAAO,CAAA,CAAA,EAAI,oBAAA,CAAqB,OAAO,CAAC,CAAA,CAAA;AAAA,IAC1C;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT;;"}
@@ -0,0 +1,14 @@
1
+ 'use strict';
2
+
3
+ const jsonPointer = require('./json-pointer.cjs');
4
+
5
+ const COMPONENTS_SEGMENT = "components";
6
+ const MEDIA_TYPES_COMPONENT_KIND = "mediaTypes";
7
+ function isMediaTypeComponentRef(ref) {
8
+ const [root, kind] = jsonPointer.parseRefPointer(ref);
9
+ return ref.startsWith("#/") && root === COMPONENTS_SEGMENT && kind === MEDIA_TYPES_COMPONENT_KIND;
10
+ }
11
+
12
+ exports.MEDIA_TYPES_COMPONENT_KIND = MEDIA_TYPES_COMPONENT_KIND;
13
+ exports.isMediaTypeComponentRef = isMediaTypeComponentRef;
14
+ //# sourceMappingURL=media-type-object.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-type-object.cjs","sources":["../../../src/domain/openapi/media-type-object.ts"],"sourcesContent":["import { parseRefPointer } from \"./json-pointer.js\";\nimport type { ReferenceSchema, Schema } from \"./schema-object.js\";\n\n/** The parts of a Media Type Object the generator reads (OpenAPI 3.2 §4.8.14). */\nexport interface MediaTypeObject {\n /** The complete content. */\n readonly schema?: Schema;\n /** Each item of a sequential media type such as `application/jsonl` (OpenAPI 3.2). */\n readonly itemSchema?: Schema;\n}\n\n/** A `content` map: media type name to a Media Type Object or a `$ref` to one. */\nexport type ContentMap = Readonly<Record<string, MediaTypeObject | ReferenceSchema>>;\n\nconst COMPONENTS_SEGMENT = \"components\";\n/** The OpenAPI 3.2 component map of reusable Media Type Objects. */\nexport const MEDIA_TYPES_COMPONENT_KIND = \"mediaTypes\";\n\n/**\n * Whether a `content` entry's `$ref` points into `components.mediaTypes` (OpenAPI 3.2). Other\n * `$ref`s in `content` keep the output they had before 3.2 (ADR-020).\n */\nexport function isMediaTypeComponentRef(ref: string): boolean {\n const [root, kind] = parseRefPointer(ref);\n return ref.startsWith(\"#/\") && root === COMPONENTS_SEGMENT && kind === MEDIA_TYPES_COMPONENT_KIND;\n}\n"],"names":["parseRefPointer"],"mappings":";;;;AAcA,MAAM,kBAAA,GAAqB,YAAA;AAEpB,MAAM,0BAAA,GAA6B;AAMnC,SAAS,wBAAwB,GAAA,EAAsB;AAC5D,EAAA,MAAM,CAAC,IAAA,EAAM,IAAI,CAAA,GAAIA,4BAAgB,GAAG,CAAA;AACxC,EAAA,OAAO,IAAI,UAAA,CAAW,IAAI,CAAA,IAAK,IAAA,KAAS,sBAAsB,IAAA,KAAS,0BAAA;AACzE;;;"}
@@ -0,0 +1,11 @@
1
+ import { parseRefPointer } from './json-pointer.mjs';
2
+
3
+ const COMPONENTS_SEGMENT = "components";
4
+ const MEDIA_TYPES_COMPONENT_KIND = "mediaTypes";
5
+ function isMediaTypeComponentRef(ref) {
6
+ const [root, kind] = parseRefPointer(ref);
7
+ return ref.startsWith("#/") && root === COMPONENTS_SEGMENT && kind === MEDIA_TYPES_COMPONENT_KIND;
8
+ }
9
+
10
+ export { MEDIA_TYPES_COMPONENT_KIND, isMediaTypeComponentRef };
11
+ //# sourceMappingURL=media-type-object.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-type-object.mjs","sources":["../../../src/domain/openapi/media-type-object.ts"],"sourcesContent":["import { parseRefPointer } from \"./json-pointer.js\";\nimport type { ReferenceSchema, Schema } from \"./schema-object.js\";\n\n/** The parts of a Media Type Object the generator reads (OpenAPI 3.2 §4.8.14). */\nexport interface MediaTypeObject {\n /** The complete content. */\n readonly schema?: Schema;\n /** Each item of a sequential media type such as `application/jsonl` (OpenAPI 3.2). */\n readonly itemSchema?: Schema;\n}\n\n/** A `content` map: media type name to a Media Type Object or a `$ref` to one. */\nexport type ContentMap = Readonly<Record<string, MediaTypeObject | ReferenceSchema>>;\n\nconst COMPONENTS_SEGMENT = \"components\";\n/** The OpenAPI 3.2 component map of reusable Media Type Objects. */\nexport const MEDIA_TYPES_COMPONENT_KIND = \"mediaTypes\";\n\n/**\n * Whether a `content` entry's `$ref` points into `components.mediaTypes` (OpenAPI 3.2). Other\n * `$ref`s in `content` keep the output they had before 3.2 (ADR-020).\n */\nexport function isMediaTypeComponentRef(ref: string): boolean {\n const [root, kind] = parseRefPointer(ref);\n return ref.startsWith(\"#/\") && root === COMPONENTS_SEGMENT && kind === MEDIA_TYPES_COMPONENT_KIND;\n}\n"],"names":[],"mappings":";;AAcA,MAAM,kBAAA,GAAqB,YAAA;AAEpB,MAAM,0BAAA,GAA6B;AAMnC,SAAS,wBAAwB,GAAA,EAAsB;AAC5D,EAAA,MAAM,CAAC,IAAA,EAAM,IAAI,CAAA,GAAI,gBAAgB,GAAG,CAAA;AACxC,EAAA,OAAO,IAAI,UAAA,CAAW,IAAI,CAAA,IAAK,IAAA,KAAS,sBAAsB,IAAA,KAAS,0BAAA;AACzE;;"}
@@ -0,0 +1,13 @@
1
+ 'use strict';
2
+
3
+ const PARAMETER_LOCATIONS = Object.freeze([
4
+ "query",
5
+ "header",
6
+ "path",
7
+ "cookie"
8
+ ]);
9
+ const QUERYSTRING_LOCATION = "querystring";
10
+
11
+ exports.PARAMETER_LOCATIONS = PARAMETER_LOCATIONS;
12
+ exports.QUERYSTRING_LOCATION = QUERYSTRING_LOCATION;
13
+ //# sourceMappingURL=parameter-object.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parameter-object.cjs","sources":["../../../src/domain/openapi/parameter-object.ts"],"sourcesContent":["import type { ContentMap } from \"./media-type-object.js\";\nimport type { ReferenceSchema, Schema } from \"./schema-object.js\";\n\nexport type ParameterLocation = \"query\" | \"header\" | \"path\" | \"cookie\";\n\n/** Every parameter location, in the order the generated `parameters` type lists them. */\nexport const PARAMETER_LOCATIONS: readonly ParameterLocation[] = Object.freeze([\n \"query\",\n \"header\",\n \"path\",\n \"cookie\",\n]);\n\n/**\n * The OpenAPI 3.2 location of a parameter that is the whole query string, described by `content`.\n * Its type becomes the `query` member of `parameters` (ADR-020).\n */\nexport const QUERYSTRING_LOCATION = \"querystring\";\n\n/** The parts of a Parameter Object the generator reads (OpenAPI 3.2 §4.8.12). */\nexport interface ParameterObject {\n readonly name: string;\n readonly in: ParameterLocation | typeof QUERYSTRING_LOCATION;\n readonly required?: boolean;\n readonly deprecated?: boolean;\n readonly schema?: Schema;\n readonly content?: ContentMap;\n}\n\nexport type ParameterOrReference = ParameterObject | ReferenceSchema;\n"],"names":[],"mappings":";;AAMO,MAAM,mBAAA,GAAoD,OAAO,MAAA,CAAO;AAAA,EAC7E,OAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAC;AAMM,MAAM,oBAAA,GAAuB;;;"}
@@ -0,0 +1,10 @@
1
+ const PARAMETER_LOCATIONS = Object.freeze([
2
+ "query",
3
+ "header",
4
+ "path",
5
+ "cookie"
6
+ ]);
7
+ const QUERYSTRING_LOCATION = "querystring";
8
+
9
+ export { PARAMETER_LOCATIONS, QUERYSTRING_LOCATION };
10
+ //# sourceMappingURL=parameter-object.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parameter-object.mjs","sources":["../../../src/domain/openapi/parameter-object.ts"],"sourcesContent":["import type { ContentMap } from \"./media-type-object.js\";\nimport type { ReferenceSchema, Schema } from \"./schema-object.js\";\n\nexport type ParameterLocation = \"query\" | \"header\" | \"path\" | \"cookie\";\n\n/** Every parameter location, in the order the generated `parameters` type lists them. */\nexport const PARAMETER_LOCATIONS: readonly ParameterLocation[] = Object.freeze([\n \"query\",\n \"header\",\n \"path\",\n \"cookie\",\n]);\n\n/**\n * The OpenAPI 3.2 location of a parameter that is the whole query string, described by `content`.\n * Its type becomes the `query` member of `parameters` (ADR-020).\n */\nexport const QUERYSTRING_LOCATION = \"querystring\";\n\n/** The parts of a Parameter Object the generator reads (OpenAPI 3.2 §4.8.12). */\nexport interface ParameterObject {\n readonly name: string;\n readonly in: ParameterLocation | typeof QUERYSTRING_LOCATION;\n readonly required?: boolean;\n readonly deprecated?: boolean;\n readonly schema?: Schema;\n readonly content?: ContentMap;\n}\n\nexport type ParameterOrReference = ParameterObject | ReferenceSchema;\n"],"names":[],"mappings":"AAMO,MAAM,mBAAA,GAAoD,OAAO,MAAA,CAAO;AAAA,EAC7E,OAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAC;AAMM,MAAM,oBAAA,GAAuB;;"}
@@ -0,0 +1,35 @@
1
+ 'use strict';
2
+
3
+ const HTTP_METHODS = Object.freeze([
4
+ "get",
5
+ "put",
6
+ "post",
7
+ "delete",
8
+ "options",
9
+ "head",
10
+ "patch",
11
+ "trace"
12
+ ]);
13
+ const QUERY_METHOD = "query";
14
+ const ADDITIONAL_OPERATIONS_KEY = "additionalOperations";
15
+ function pathItemOperations(pathItem) {
16
+ const methods = [...HTTP_METHODS, QUERY_METHOD];
17
+ const fixed = methods.flatMap((method) => {
18
+ const operation = pathItem[method];
19
+ return operation ? [{ method, operation, segments: [method] }] : [];
20
+ });
21
+ const additional = Object.entries(pathItem.additionalOperations ?? {}).map(
22
+ ([method, operation]) => ({
23
+ method,
24
+ operation,
25
+ segments: [ADDITIONAL_OPERATIONS_KEY, method]
26
+ })
27
+ );
28
+ return [...fixed, ...additional];
29
+ }
30
+
31
+ exports.ADDITIONAL_OPERATIONS_KEY = ADDITIONAL_OPERATIONS_KEY;
32
+ exports.HTTP_METHODS = HTTP_METHODS;
33
+ exports.QUERY_METHOD = QUERY_METHOD;
34
+ exports.pathItemOperations = pathItemOperations;
35
+ //# sourceMappingURL=path-item-object.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-item-object.cjs","sources":["../../../src/domain/openapi/path-item-object.ts"],"sourcesContent":["import type { OperationObject } from \"./operation-object.js\";\nimport type { ParameterOrReference } from \"./parameter-object.js\";\nimport type { ReferenceSchema } from \"./schema-object.js\";\n\n/** The methods every generated path item lists, with `?: never` when the document has none. */\nexport type HttpMethod = \"get\" | \"put\" | \"post\" | \"delete\" | \"options\" | \"head\" | \"patch\" | \"trace\";\n\n/** The operation fields of a path item, in the order the generated types list them. */\nexport const HTTP_METHODS: readonly HttpMethod[] = Object.freeze([\n \"get\",\n \"put\",\n \"post\",\n \"delete\",\n \"options\",\n \"head\",\n \"patch\",\n \"trace\",\n]);\n\n/**\n * The OpenAPI 3.2 QUERY method. Its member is written only when the path item declares it, so\n * documents without it keep their output (ADR-020).\n */\nexport const QUERY_METHOD = \"query\";\n\n/** Every operation field of a path item. */\nexport type PathItemMethod = HttpMethod | typeof QUERY_METHOD;\n\n/** The OpenAPI 3.2 path item field for methods other than the fixed fields, by exact name. */\nexport const ADDITIONAL_OPERATIONS_KEY = \"additionalOperations\";\n\nexport type OperationEntry = OperationObject | ReferenceSchema;\n\n/** The parts of a Path Item Object the generator reads (OpenAPI 3.2 §4.8.9). */\nexport type PathItemObject = {\n readonly parameters?: readonly ParameterOrReference[];\n readonly additionalOperations?: Readonly<Record<string, OperationEntry>>;\n} & { readonly [method in PathItemMethod]?: OperationEntry };\n\n/** Path items by URL template (OpenAPI 3.1 §4.8.8); webhooks use the same shape by name. */\nexport type PathsObject = Readonly<Record<string, PathItemObject | ReferenceSchema>>;\n\n/** One operation of a path item and the method it is declared under. */\nexport interface PathItemOperation {\n /** A fixed field (`get`, `query`, …) or an `additionalOperations` name (`SUBSCRIBE`). */\n readonly method: string;\n readonly operation: OperationEntry;\n /** JSON Pointer segments from the path item to the operation. */\n readonly segments: readonly string[];\n}\n\n/**\n * Every operation of a path item: the fixed methods in output order, then `query`, then\n * `additionalOperations` in document order.\n */\nexport function pathItemOperations(pathItem: PathItemObject): PathItemOperation[] {\n const methods: readonly PathItemMethod[] = [...HTTP_METHODS, QUERY_METHOD];\n const fixed = methods.flatMap((method) => {\n const operation = pathItem[method];\n return operation ? [{ method, operation, segments: [method] }] : [];\n });\n const additional = Object.entries(pathItem.additionalOperations ?? {}).map(\n ([method, operation]) => ({\n method,\n operation,\n segments: [ADDITIONAL_OPERATIONS_KEY, method],\n }),\n );\n return [...fixed, ...additional];\n}\n"],"names":[],"mappings":";;AAQO,MAAM,YAAA,GAAsC,OAAO,MAAA,CAAO;AAAA,EAC/D,KAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAC;AAMM,MAAM,YAAA,GAAe;AAMrB,MAAM,yBAAA,GAA4B;AA0BlC,SAAS,mBAAmB,QAAA,EAA+C;AAChF,EAAA,MAAM,OAAA,GAAqC,CAAC,GAAG,YAAA,EAAc,YAAY,CAAA;AACzE,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,OAAA,CAAQ,CAAC,MAAA,KAAW;AACxC,IAAA,MAAM,SAAA,GAAY,SAAS,MAAM,CAAA;AACjC,IAAA,OAAO,SAAA,GAAY,CAAC,EAAE,MAAA,EAAQ,SAAA,EAAW,QAAA,EAAU,CAAC,MAAM,CAAA,EAAG,CAAA,GAAI,EAAC;AAAA,EACpE,CAAC,CAAA;AACD,EAAA,MAAM,aAAa,MAAA,CAAO,OAAA,CAAQ,SAAS,oBAAA,IAAwB,EAAE,CAAA,CAAE,GAAA;AAAA,IACrE,CAAC,CAAC,MAAA,EAAQ,SAAS,CAAA,MAAO;AAAA,MACxB,MAAA;AAAA,MACA,SAAA;AAAA,MACA,QAAA,EAAU,CAAC,yBAAA,EAA2B,MAAM;AAAA,KAC9C;AAAA,GACF;AACA,EAAA,OAAO,CAAC,GAAG,KAAA,EAAO,GAAG,UAAU,CAAA;AACjC;;;;;"}
@@ -0,0 +1,30 @@
1
+ const HTTP_METHODS = Object.freeze([
2
+ "get",
3
+ "put",
4
+ "post",
5
+ "delete",
6
+ "options",
7
+ "head",
8
+ "patch",
9
+ "trace"
10
+ ]);
11
+ const QUERY_METHOD = "query";
12
+ const ADDITIONAL_OPERATIONS_KEY = "additionalOperations";
13
+ function pathItemOperations(pathItem) {
14
+ const methods = [...HTTP_METHODS, QUERY_METHOD];
15
+ const fixed = methods.flatMap((method) => {
16
+ const operation = pathItem[method];
17
+ return operation ? [{ method, operation, segments: [method] }] : [];
18
+ });
19
+ const additional = Object.entries(pathItem.additionalOperations ?? {}).map(
20
+ ([method, operation]) => ({
21
+ method,
22
+ operation,
23
+ segments: [ADDITIONAL_OPERATIONS_KEY, method]
24
+ })
25
+ );
26
+ return [...fixed, ...additional];
27
+ }
28
+
29
+ export { ADDITIONAL_OPERATIONS_KEY, HTTP_METHODS, QUERY_METHOD, pathItemOperations };
30
+ //# sourceMappingURL=path-item-object.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-item-object.mjs","sources":["../../../src/domain/openapi/path-item-object.ts"],"sourcesContent":["import type { OperationObject } from \"./operation-object.js\";\nimport type { ParameterOrReference } from \"./parameter-object.js\";\nimport type { ReferenceSchema } from \"./schema-object.js\";\n\n/** The methods every generated path item lists, with `?: never` when the document has none. */\nexport type HttpMethod = \"get\" | \"put\" | \"post\" | \"delete\" | \"options\" | \"head\" | \"patch\" | \"trace\";\n\n/** The operation fields of a path item, in the order the generated types list them. */\nexport const HTTP_METHODS: readonly HttpMethod[] = Object.freeze([\n \"get\",\n \"put\",\n \"post\",\n \"delete\",\n \"options\",\n \"head\",\n \"patch\",\n \"trace\",\n]);\n\n/**\n * The OpenAPI 3.2 QUERY method. Its member is written only when the path item declares it, so\n * documents without it keep their output (ADR-020).\n */\nexport const QUERY_METHOD = \"query\";\n\n/** Every operation field of a path item. */\nexport type PathItemMethod = HttpMethod | typeof QUERY_METHOD;\n\n/** The OpenAPI 3.2 path item field for methods other than the fixed fields, by exact name. */\nexport const ADDITIONAL_OPERATIONS_KEY = \"additionalOperations\";\n\nexport type OperationEntry = OperationObject | ReferenceSchema;\n\n/** The parts of a Path Item Object the generator reads (OpenAPI 3.2 §4.8.9). */\nexport type PathItemObject = {\n readonly parameters?: readonly ParameterOrReference[];\n readonly additionalOperations?: Readonly<Record<string, OperationEntry>>;\n} & { readonly [method in PathItemMethod]?: OperationEntry };\n\n/** Path items by URL template (OpenAPI 3.1 §4.8.8); webhooks use the same shape by name. */\nexport type PathsObject = Readonly<Record<string, PathItemObject | ReferenceSchema>>;\n\n/** One operation of a path item and the method it is declared under. */\nexport interface PathItemOperation {\n /** A fixed field (`get`, `query`, …) or an `additionalOperations` name (`SUBSCRIBE`). */\n readonly method: string;\n readonly operation: OperationEntry;\n /** JSON Pointer segments from the path item to the operation. */\n readonly segments: readonly string[];\n}\n\n/**\n * Every operation of a path item: the fixed methods in output order, then `query`, then\n * `additionalOperations` in document order.\n */\nexport function pathItemOperations(pathItem: PathItemObject): PathItemOperation[] {\n const methods: readonly PathItemMethod[] = [...HTTP_METHODS, QUERY_METHOD];\n const fixed = methods.flatMap((method) => {\n const operation = pathItem[method];\n return operation ? [{ method, operation, segments: [method] }] : [];\n });\n const additional = Object.entries(pathItem.additionalOperations ?? {}).map(\n ([method, operation]) => ({\n method,\n operation,\n segments: [ADDITIONAL_OPERATIONS_KEY, method],\n }),\n );\n return [...fixed, ...additional];\n}\n"],"names":[],"mappings":"AAQO,MAAM,YAAA,GAAsC,OAAO,MAAA,CAAO;AAAA,EAC/D,KAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAC;AAMM,MAAM,YAAA,GAAe;AAMrB,MAAM,yBAAA,GAA4B;AA0BlC,SAAS,mBAAmB,QAAA,EAA+C;AAChF,EAAA,MAAM,OAAA,GAAqC,CAAC,GAAG,YAAA,EAAc,YAAY,CAAA;AACzE,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,OAAA,CAAQ,CAAC,MAAA,KAAW;AACxC,IAAA,MAAM,SAAA,GAAY,SAAS,MAAM,CAAA;AACjC,IAAA,OAAO,SAAA,GAAY,CAAC,EAAE,MAAA,EAAQ,SAAA,EAAW,QAAA,EAAU,CAAC,MAAM,CAAA,EAAG,CAAA,GAAI,EAAC;AAAA,EACpE,CAAC,CAAA;AACD,EAAA,MAAM,aAAa,MAAA,CAAO,OAAA,CAAQ,SAAS,oBAAA,IAAwB,EAAE,CAAA,CAAE,GAAA;AAAA,IACrE,CAAC,CAAC,MAAA,EAAQ,SAAS,CAAA,MAAO;AAAA,MACxB,MAAA;AAAA,MACA,SAAA;AAAA,MACA,QAAA,EAAU,CAAC,yBAAA,EAA2B,MAAM;AAAA,KAC9C;AAAA,GACF;AACA,EAAA,OAAO,CAAC,GAAG,KAAA,EAAO,GAAG,UAAU,CAAA;AACjC;;"}