openapi-typesafe 0.0.0 → 1.0.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (863) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +71 -1
  3. package/bin/cli.js +4 -0
  4. package/dist/adapters/node-file-system/node-file-system.cjs +46 -0
  5. package/dist/adapters/node-file-system/node-file-system.cjs.map +1 -0
  6. package/dist/adapters/node-file-system/node-file-system.mjs +40 -0
  7. package/dist/adapters/node-file-system/node-file-system.mjs.map +1 -0
  8. package/dist/adapters/redocly-loader/alias-limit.cjs +16 -0
  9. package/dist/adapters/redocly-loader/alias-limit.cjs.map +1 -0
  10. package/dist/adapters/redocly-loader/alias-limit.mjs +14 -0
  11. package/dist/adapters/redocly-loader/alias-limit.mjs.map +1 -0
  12. package/dist/adapters/redocly-loader/allowed-hosts.cjs +42 -0
  13. package/dist/adapters/redocly-loader/allowed-hosts.cjs.map +1 -0
  14. package/dist/adapters/redocly-loader/allowed-hosts.mjs +40 -0
  15. package/dist/adapters/redocly-loader/allowed-hosts.mjs.map +1 -0
  16. package/dist/adapters/redocly-loader/bundled-ref-repair.cjs +53 -0
  17. package/dist/adapters/redocly-loader/bundled-ref-repair.cjs.map +1 -0
  18. package/dist/adapters/redocly-loader/bundled-ref-repair.mjs +51 -0
  19. package/dist/adapters/redocly-loader/bundled-ref-repair.mjs.map +1 -0
  20. package/dist/adapters/redocly-loader/malformed-refs.cjs +41 -0
  21. package/dist/adapters/redocly-loader/malformed-refs.cjs.map +1 -0
  22. package/dist/adapters/redocly-loader/malformed-refs.mjs +38 -0
  23. package/dist/adapters/redocly-loader/malformed-refs.mjs.map +1 -0
  24. package/dist/adapters/redocly-loader/redocly-config-source.cjs +61 -0
  25. package/dist/adapters/redocly-loader/redocly-config-source.cjs.map +1 -0
  26. package/dist/adapters/redocly-loader/redocly-config-source.mjs +54 -0
  27. package/dist/adapters/redocly-loader/redocly-config-source.mjs.map +1 -0
  28. package/dist/adapters/redocly-loader/redocly-schema-loader.cjs +179 -0
  29. package/dist/adapters/redocly-loader/redocly-schema-loader.cjs.map +1 -0
  30. package/dist/adapters/redocly-loader/redocly-schema-loader.mjs +177 -0
  31. package/dist/adapters/redocly-loader/redocly-schema-loader.mjs.map +1 -0
  32. package/dist/adapters/redocly-loader/ref-access.cjs +107 -0
  33. package/dist/adapters/redocly-loader/ref-access.cjs.map +1 -0
  34. package/dist/adapters/redocly-loader/ref-access.mjs +99 -0
  35. package/dist/adapters/redocly-loader/ref-access.mjs.map +1 -0
  36. package/dist/adapters/redocly-loader/ref-holders.cjs +31 -0
  37. package/dist/adapters/redocly-loader/ref-holders.cjs.map +1 -0
  38. package/dist/adapters/redocly-loader/ref-holders.mjs +29 -0
  39. package/dist/adapters/redocly-loader/ref-holders.mjs.map +1 -0
  40. package/dist/adapters/redocly-loader/remote-fetch.cjs +60 -0
  41. package/dist/adapters/redocly-loader/remote-fetch.cjs.map +1 -0
  42. package/dist/adapters/redocly-loader/remote-fetch.mjs +56 -0
  43. package/dist/adapters/redocly-loader/remote-fetch.mjs.map +1 -0
  44. package/dist/adapters/redocly-loader/schema-load-errors.cjs +87 -0
  45. package/dist/adapters/redocly-loader/schema-load-errors.cjs.map +1 -0
  46. package/dist/adapters/redocly-loader/schema-load-errors.mjs +77 -0
  47. package/dist/adapters/redocly-loader/schema-load-errors.mjs.map +1 -0
  48. package/dist/adapters/redocly-loader/schema-source.cjs +104 -0
  49. package/dist/adapters/redocly-loader/schema-source.cjs.map +1 -0
  50. package/dist/adapters/redocly-loader/schema-source.mjs +98 -0
  51. package/dist/adapters/redocly-loader/schema-source.mjs.map +1 -0
  52. package/dist/adapters/redocly-loader/unsupported-keys.cjs +62 -0
  53. package/dist/adapters/redocly-loader/unsupported-keys.cjs.map +1 -0
  54. package/dist/adapters/redocly-loader/unsupported-keys.mjs +58 -0
  55. package/dist/adapters/redocly-loader/unsupported-keys.mjs.map +1 -0
  56. package/dist/adapters/terminal-logger/terminal-logger.cjs +67 -0
  57. package/dist/adapters/terminal-logger/terminal-logger.cjs.map +1 -0
  58. package/dist/adapters/terminal-logger/terminal-logger.mjs +59 -0
  59. package/dist/adapters/terminal-logger/terminal-logger.mjs.map +1 -0
  60. package/dist/adapters/type-ast-bridge/footer-nodes.cjs +21 -0
  61. package/dist/adapters/type-ast-bridge/footer-nodes.cjs.map +1 -0
  62. package/dist/adapters/type-ast-bridge/footer-nodes.mjs +17 -0
  63. package/dist/adapters/type-ast-bridge/footer-nodes.mjs.map +1 -0
  64. package/dist/adapters/type-ast-bridge/ir-declarations-to-typescript.cjs +75 -0
  65. package/dist/adapters/type-ast-bridge/ir-declarations-to-typescript.cjs.map +1 -0
  66. package/dist/adapters/type-ast-bridge/ir-declarations-to-typescript.mjs +71 -0
  67. package/dist/adapters/type-ast-bridge/ir-declarations-to-typescript.mjs.map +1 -0
  68. package/dist/adapters/type-ast-bridge/ir-to-typescript.cjs +148 -0
  69. package/dist/adapters/type-ast-bridge/ir-to-typescript.cjs.map +1 -0
  70. package/dist/adapters/type-ast-bridge/ir-to-typescript.mjs +142 -0
  71. package/dist/adapters/type-ast-bridge/ir-to-typescript.mjs.map +1 -0
  72. package/dist/adapters/type-ast-bridge/lazy-node.cjs +23 -0
  73. package/dist/adapters/type-ast-bridge/lazy-node.cjs.map +1 -0
  74. package/dist/adapters/type-ast-bridge/lazy-node.mjs +21 -0
  75. package/dist/adapters/type-ast-bridge/lazy-node.mjs.map +1 -0
  76. package/dist/adapters/type-ast-bridge/load-typescript.cjs +57 -0
  77. package/dist/adapters/type-ast-bridge/load-typescript.cjs.map +1 -0
  78. package/dist/adapters/type-ast-bridge/load-typescript.mjs +51 -0
  79. package/dist/adapters/type-ast-bridge/load-typescript.mjs.map +1 -0
  80. package/dist/adapters/type-ast-bridge/print-typescript.cjs +21 -0
  81. package/dist/adapters/type-ast-bridge/print-typescript.cjs.map +1 -0
  82. package/dist/adapters/type-ast-bridge/print-typescript.mjs +19 -0
  83. package/dist/adapters/type-ast-bridge/print-typescript.mjs.map +1 -0
  84. package/dist/adapters/type-ast-bridge/typescript-raw-text.cjs +33 -0
  85. package/dist/adapters/type-ast-bridge/typescript-raw-text.cjs.map +1 -0
  86. package/dist/adapters/type-ast-bridge/typescript-raw-text.mjs +29 -0
  87. package/dist/adapters/type-ast-bridge/typescript-raw-text.mjs.map +1 -0
  88. package/dist/adapters/type-ast-bridge/typescript-to-ir.cjs +210 -0
  89. package/dist/adapters/type-ast-bridge/typescript-to-ir.cjs.map +1 -0
  90. package/dist/adapters/type-ast-bridge/typescript-to-ir.mjs +207 -0
  91. package/dist/adapters/type-ast-bridge/typescript-to-ir.mjs.map +1 -0
  92. package/dist/api/ast-to-string.cjs +39 -0
  93. package/dist/api/ast-to-string.cjs.map +1 -0
  94. package/dist/api/ast-to-string.mjs +37 -0
  95. package/dist/api/ast-to-string.mjs.map +1 -0
  96. package/dist/api/comment-header.cjs +11 -0
  97. package/dist/api/comment-header.cjs.map +1 -0
  98. package/dist/api/comment-header.mjs +9 -0
  99. package/dist/api/comment-header.mjs.map +1 -0
  100. package/dist/api/default-ports.cjs +38 -0
  101. package/dist/api/default-ports.cjs.map +1 -0
  102. package/dist/api/default-ports.mjs +28 -0
  103. package/dist/api/default-ports.mjs.map +1 -0
  104. package/dist/api/discriminator-conflict-warnings.cjs +25 -0
  105. package/dist/api/discriminator-conflict-warnings.cjs.map +1 -0
  106. package/dist/api/discriminator-conflict-warnings.mjs +23 -0
  107. package/dist/api/discriminator-conflict-warnings.mjs.map +1 -0
  108. package/dist/api/discriminator-enum-names.cjs +19 -0
  109. package/dist/api/discriminator-enum-names.cjs.map +1 -0
  110. package/dist/api/discriminator-enum-names.mjs +17 -0
  111. package/dist/api/discriminator-enum-names.mjs.map +1 -0
  112. package/dist/api/discriminator-enum-parent.cjs +59 -0
  113. package/dist/api/discriminator-enum-parent.cjs.map +1 -0
  114. package/dist/api/discriminator-enum-parent.mjs +57 -0
  115. package/dist/api/discriminator-enum-parent.mjs.map +1 -0
  116. package/dist/api/discriminator-enum.cjs +69 -0
  117. package/dist/api/discriminator-enum.cjs.map +1 -0
  118. package/dist/api/discriminator-enum.mjs +66 -0
  119. package/dist/api/discriminator-enum.mjs.map +1 -0
  120. package/dist/api/discriminator-other-owners.cjs +67 -0
  121. package/dist/api/discriminator-other-owners.cjs.map +1 -0
  122. package/dist/api/discriminator-other-owners.mjs +64 -0
  123. package/dist/api/discriminator-other-owners.mjs.map +1 -0
  124. package/dist/api/discriminator-patch.cjs +88 -0
  125. package/dist/api/discriminator-patch.cjs.map +1 -0
  126. package/dist/api/discriminator-patch.mjs +82 -0
  127. package/dist/api/discriminator-patch.mjs.map +1 -0
  128. package/dist/api/discriminator-scan.cjs +153 -0
  129. package/dist/api/discriminator-scan.cjs.map +1 -0
  130. package/dist/api/discriminator-scan.mjs +150 -0
  131. package/dist/api/discriminator-scan.mjs.map +1 -0
  132. package/dist/api/document-declarations.cjs +28 -0
  133. package/dist/api/document-declarations.cjs.map +1 -0
  134. package/dist/api/document-declarations.mjs +26 -0
  135. package/dist/api/document-declarations.mjs.map +1 -0
  136. package/dist/api/document-refs.cjs +53 -0
  137. package/dist/api/document-refs.cjs.map +1 -0
  138. package/dist/api/document-refs.mjs +50 -0
  139. package/dist/api/document-refs.mjs.map +1 -0
  140. package/dist/api/document-run.cjs +122 -0
  141. package/dist/api/document-run.cjs.map +1 -0
  142. package/dist/api/document-run.mjs +116 -0
  143. package/dist/api/document-run.mjs.map +1 -0
  144. package/dist/api/enum-values-warnings.cjs +16 -0
  145. package/dist/api/enum-values-warnings.cjs.map +1 -0
  146. package/dist/api/enum-values-warnings.mjs +14 -0
  147. package/dist/api/enum-values-warnings.mjs.map +1 -0
  148. package/dist/api/footer-entry.cjs +18 -0
  149. package/dist/api/footer-entry.cjs.map +1 -0
  150. package/dist/api/footer-entry.mjs +15 -0
  151. package/dist/api/footer-entry.mjs.map +1 -0
  152. package/dist/api/footer-sink.cjs +53 -0
  153. package/dist/api/footer-sink.cjs.map +1 -0
  154. package/dist/api/footer-sink.mjs +51 -0
  155. package/dist/api/footer-sink.mjs.map +1 -0
  156. package/dist/api/legacy-callback-warning.cjs +25 -0
  157. package/dist/api/legacy-callback-warning.cjs.map +1 -0
  158. package/dist/api/legacy-callback-warning.mjs +22 -0
  159. package/dist/api/legacy-callback-warning.mjs.map +1 -0
  160. package/dist/api/legacy-ts-helpers.cjs +203 -0
  161. package/dist/api/legacy-ts-helpers.cjs.map +1 -0
  162. package/dist/api/legacy-ts-helpers.mjs +187 -0
  163. package/dist/api/legacy-ts-helpers.mjs.map +1 -0
  164. package/dist/api/legacy-utils.cjs +65 -0
  165. package/dist/api/legacy-utils.cjs.map +1 -0
  166. package/dist/api/legacy-utils.mjs +50 -0
  167. package/dist/api/legacy-utils.mjs.map +1 -0
  168. package/dist/api/openapi-ts.cjs +40 -0
  169. package/dist/api/openapi-ts.cjs.map +1 -0
  170. package/dist/api/openapi-ts.mjs +34 -0
  171. package/dist/api/openapi-ts.mjs.map +1 -0
  172. package/dist/api/path-template-warnings.cjs +21 -0
  173. package/dist/api/path-template-warnings.cjs.map +1 -0
  174. package/dist/api/path-template-warnings.mjs +19 -0
  175. package/dist/api/path-template-warnings.mjs.map +1 -0
  176. package/dist/api/schema-callbacks.cjs +140 -0
  177. package/dist/api/schema-callbacks.cjs.map +1 -0
  178. package/dist/api/schema-callbacks.mjs +136 -0
  179. package/dist/api/schema-callbacks.mjs.map +1 -0
  180. package/dist/api/string-to-ast.cjs +21 -0
  181. package/dist/api/string-to-ast.cjs.map +1 -0
  182. package/dist/api/string-to-ast.mjs +18 -0
  183. package/dist/api/string-to-ast.mjs.map +1 -0
  184. package/dist/api/transform-context.cjs +84 -0
  185. package/dist/api/transform-context.cjs.map +1 -0
  186. package/dist/api/transform-context.mjs +67 -0
  187. package/dist/api/transform-context.mjs.map +1 -0
  188. package/dist/api/transform-schema.cjs +80 -0
  189. package/dist/api/transform-schema.cjs.map +1 -0
  190. package/dist/api/transform-schema.mjs +75 -0
  191. package/dist/api/transform-schema.mjs.map +1 -0
  192. package/dist/api/type-helpers.cjs +85 -0
  193. package/dist/api/type-helpers.cjs.map +1 -0
  194. package/dist/api/type-helpers.mjs +66 -0
  195. package/dist/api/type-helpers.mjs.map +1 -0
  196. package/dist/api/unsupported-feature-warnings.cjs +22 -0
  197. package/dist/api/unsupported-feature-warnings.cjs.map +1 -0
  198. package/dist/api/unsupported-feature-warnings.mjs +20 -0
  199. package/dist/api/unsupported-feature-warnings.mjs.map +1 -0
  200. package/dist/application/print/comment-writer.cjs +95 -0
  201. package/dist/application/print/comment-writer.cjs.map +1 -0
  202. package/dist/application/print/comment-writer.mjs +93 -0
  203. package/dist/application/print/comment-writer.mjs.map +1 -0
  204. package/dist/application/print/declaration-printer.cjs +83 -0
  205. package/dist/application/print/declaration-printer.cjs.map +1 -0
  206. package/dist/application/print/declaration-printer.mjs +81 -0
  207. package/dist/application/print/declaration-printer.mjs.map +1 -0
  208. package/dist/application/print/literal-text.cjs +52 -0
  209. package/dist/application/print/literal-text.cjs.map +1 -0
  210. package/dist/application/print/literal-text.mjs +48 -0
  211. package/dist/application/print/literal-text.mjs.map +1 -0
  212. package/dist/application/print/print-nodes.cjs +38 -0
  213. package/dist/application/print/print-nodes.cjs.map +1 -0
  214. package/dist/application/print/print-nodes.mjs +36 -0
  215. package/dist/application/print/print-nodes.mjs.map +1 -0
  216. package/dist/application/print/print-options.cjs +6 -0
  217. package/dist/application/print/print-options.cjs.map +1 -0
  218. package/dist/application/print/print-options.mjs +4 -0
  219. package/dist/application/print/print-options.mjs.map +1 -0
  220. package/dist/application/print/text-writer.cjs +63 -0
  221. package/dist/application/print/text-writer.cjs.map +1 -0
  222. package/dist/application/print/text-writer.mjs +60 -0
  223. package/dist/application/print/text-writer.mjs.map +1 -0
  224. package/dist/application/print/type-printer.cjs +219 -0
  225. package/dist/application/print/type-printer.cjs.map +1 -0
  226. package/dist/application/print/type-printer.mjs +215 -0
  227. package/dist/application/print/type-printer.mjs.map +1 -0
  228. package/dist/application/stack-overflow.cjs +36 -0
  229. package/dist/application/stack-overflow.cjs.map +1 -0
  230. package/dist/application/stack-overflow.mjs +31 -0
  231. package/dist/application/stack-overflow.mjs.map +1 -0
  232. package/dist/application/transform/document/assignability.cjs +144 -0
  233. package/dist/application/transform/document/assignability.cjs.map +1 -0
  234. package/dist/application/transform/document/assignability.mjs +138 -0
  235. package/dist/application/transform/document/assignability.mjs.map +1 -0
  236. package/dist/application/transform/document/components.cjs +104 -0
  237. package/dist/application/transform/document/components.cjs.map +1 -0
  238. package/dist/application/transform/document/components.mjs +102 -0
  239. package/dist/application/transform/document/components.mjs.map +1 -0
  240. package/dist/application/transform/document/declared-types.cjs +66 -0
  241. package/dist/application/transform/document/declared-types.cjs.map +1 -0
  242. package/dist/application/transform/document/declared-types.mjs +63 -0
  243. package/dist/application/transform/document/declared-types.mjs.map +1 -0
  244. package/dist/application/transform/document/defs-root.cjs +18 -0
  245. package/dist/application/transform/document/defs-root.cjs.map +1 -0
  246. package/dist/application/transform/document/defs-root.mjs +16 -0
  247. package/dist/application/transform/document/defs-root.mjs.map +1 -0
  248. package/dist/application/transform/document/document-member.cjs +13 -0
  249. package/dist/application/transform/document/document-member.cjs.map +1 -0
  250. package/dist/application/transform/document/document-member.mjs +11 -0
  251. package/dist/application/transform/document/document-member.mjs.map +1 -0
  252. package/dist/application/transform/document/document.cjs +109 -0
  253. package/dist/application/transform/document/document.cjs.map +1 -0
  254. package/dist/application/transform/document/document.mjs +106 -0
  255. package/dist/application/transform/document/document.mjs.map +1 -0
  256. package/dist/application/transform/document/exploded-query.cjs +46 -0
  257. package/dist/application/transform/document/exploded-query.cjs.map +1 -0
  258. package/dist/application/transform/document/exploded-query.mjs +43 -0
  259. package/dist/application/transform/document/exploded-query.mjs.map +1 -0
  260. package/dist/application/transform/document/global-type-references.cjs +63 -0
  261. package/dist/application/transform/document/global-type-references.cjs.map +1 -0
  262. package/dist/application/transform/document/global-type-references.mjs +61 -0
  263. package/dist/application/transform/document/global-type-references.mjs.map +1 -0
  264. package/dist/application/transform/document/header.cjs +27 -0
  265. package/dist/application/transform/document/header.cjs.map +1 -0
  266. package/dist/application/transform/document/header.mjs +25 -0
  267. package/dist/application/transform/document/header.mjs.map +1 -0
  268. package/dist/application/transform/document/kept-deprecated.cjs +96 -0
  269. package/dist/application/transform/document/kept-deprecated.cjs.map +1 -0
  270. package/dist/application/transform/document/kept-deprecated.mjs +94 -0
  271. package/dist/application/transform/document/kept-deprecated.mjs.map +1 -0
  272. package/dist/application/transform/document/list-assignability.cjs +54 -0
  273. package/dist/application/transform/document/list-assignability.cjs.map +1 -0
  274. package/dist/application/transform/document/list-assignability.mjs +52 -0
  275. package/dist/application/transform/document/list-assignability.mjs.map +1 -0
  276. package/dist/application/transform/document/media-type.cjs +42 -0
  277. package/dist/application/transform/document/media-type.cjs.map +1 -0
  278. package/dist/application/transform/document/media-type.mjs +38 -0
  279. package/dist/application/transform/document/media-type.mjs.map +1 -0
  280. package/dist/application/transform/document/operation.cjs +45 -0
  281. package/dist/application/transform/document/operation.cjs.map +1 -0
  282. package/dist/application/transform/document/operation.mjs +43 -0
  283. package/dist/application/transform/document/operation.mjs.map +1 -0
  284. package/dist/application/transform/document/parameter.cjs +25 -0
  285. package/dist/application/transform/document/parameter.cjs.map +1 -0
  286. package/dist/application/transform/document/parameter.mjs +23 -0
  287. package/dist/application/transform/document/parameter.mjs.map +1 -0
  288. package/dist/application/transform/document/parameters.cjs +146 -0
  289. package/dist/application/transform/document/parameters.cjs.map +1 -0
  290. package/dist/application/transform/document/parameters.mjs +144 -0
  291. package/dist/application/transform/document/parameters.mjs.map +1 -0
  292. package/dist/application/transform/document/path-item.cjs +82 -0
  293. package/dist/application/transform/document/path-item.cjs.map +1 -0
  294. package/dist/application/transform/document/path-item.mjs +80 -0
  295. package/dist/application/transform/document/path-item.mjs.map +1 -0
  296. package/dist/application/transform/document/path-key-overlaps.cjs +107 -0
  297. package/dist/application/transform/document/path-key-overlaps.cjs.map +1 -0
  298. package/dist/application/transform/document/path-key-overlaps.mjs +105 -0
  299. package/dist/application/transform/document/path-key-overlaps.mjs.map +1 -0
  300. package/dist/application/transform/document/path-template-replace.cjs +48 -0
  301. package/dist/application/transform/document/path-template-replace.cjs.map +1 -0
  302. package/dist/application/transform/document/path-template-replace.mjs +45 -0
  303. package/dist/application/transform/document/path-template-replace.mjs.map +1 -0
  304. package/dist/application/transform/document/paths-enum.cjs +75 -0
  305. package/dist/application/transform/document/paths-enum.cjs.map +1 -0
  306. package/dist/application/transform/document/paths-enum.mjs +72 -0
  307. package/dist/application/transform/document/paths-enum.mjs.map +1 -0
  308. package/dist/application/transform/document/paths.cjs +153 -0
  309. package/dist/application/transform/document/paths.cjs.map +1 -0
  310. package/dist/application/transform/document/paths.mjs +149 -0
  311. package/dist/application/transform/document/paths.mjs.map +1 -0
  312. package/dist/application/transform/document/request-body.cjs +36 -0
  313. package/dist/application/transform/document/request-body.cjs.map +1 -0
  314. package/dist/application/transform/document/request-body.mjs +34 -0
  315. package/dist/application/transform/document/request-body.mjs.map +1 -0
  316. package/dist/application/transform/document/response.cjs +59 -0
  317. package/dist/application/transform/document/response.cjs.map +1 -0
  318. package/dist/application/transform/document/response.mjs +57 -0
  319. package/dist/application/transform/document/response.mjs.map +1 -0
  320. package/dist/application/transform/document/responses.cjs +23 -0
  321. package/dist/application/transform/document/responses.cjs.map +1 -0
  322. package/dist/application/transform/document/responses.mjs +21 -0
  323. package/dist/application/transform/document/responses.mjs.map +1 -0
  324. package/dist/application/transform/document/root-type-aliases.cjs +70 -0
  325. package/dist/application/transform/document/root-type-aliases.cjs.map +1 -0
  326. package/dist/application/transform/document/root-type-aliases.mjs +67 -0
  327. package/dist/application/transform/document/root-type-aliases.mjs.map +1 -0
  328. package/dist/application/transform/document/template-key-match.cjs +128 -0
  329. package/dist/application/transform/document/template-key-match.cjs.map +1 -0
  330. package/dist/application/transform/document/template-key-match.mjs +125 -0
  331. package/dist/application/transform/document/template-key-match.mjs.map +1 -0
  332. package/dist/application/transform/document/type-assignability.cjs +192 -0
  333. package/dist/application/transform/document/type-assignability.cjs.map +1 -0
  334. package/dist/application/transform/document/type-assignability.mjs +190 -0
  335. package/dist/application/transform/document/type-assignability.mjs.map +1 -0
  336. package/dist/application/transform/document/type-key.cjs +70 -0
  337. package/dist/application/transform/document/type-key.cjs.map +1 -0
  338. package/dist/application/transform/document/type-key.mjs +68 -0
  339. package/dist/application/transform/document/type-key.mjs.map +1 -0
  340. package/dist/application/transform/document/type-resolution.cjs +131 -0
  341. package/dist/application/transform/document/type-resolution.cjs.map +1 -0
  342. package/dist/application/transform/document/type-resolution.mjs +125 -0
  343. package/dist/application/transform/document/type-resolution.mjs.map +1 -0
  344. package/dist/application/transform/document/webhooks.cjs +19 -0
  345. package/dist/application/transform/document/webhooks.cjs.map +1 -0
  346. package/dist/application/transform/document/webhooks.mjs +17 -0
  347. package/dist/application/transform/document/webhooks.mjs.map +1 -0
  348. package/dist/application/transform/document-entries.cjs +17 -0
  349. package/dist/application/transform/document-entries.cjs.map +1 -0
  350. package/dist/application/transform/document-entries.mjs +14 -0
  351. package/dist/application/transform/document-entries.mjs.map +1 -0
  352. package/dist/application/transform/footer/document-footer.cjs +150 -0
  353. package/dist/application/transform/footer/document-footer.cjs.map +1 -0
  354. package/dist/application/transform/footer/document-footer.mjs +148 -0
  355. package/dist/application/transform/footer/document-footer.mjs.map +1 -0
  356. package/dist/application/transform/footer/enum-naming.cjs +138 -0
  357. package/dist/application/transform/footer/enum-naming.cjs.map +1 -0
  358. package/dist/application/transform/footer/enum-naming.mjs +131 -0
  359. package/dist/application/transform/footer/enum-naming.mjs.map +1 -0
  360. package/dist/application/transform/footer/enum-values-check.cjs +129 -0
  361. package/dist/application/transform/footer/enum-values-check.cjs.map +1 -0
  362. package/dist/application/transform/footer/enum-values-check.mjs +127 -0
  363. package/dist/application/transform/footer/enum-values-check.mjs.map +1 -0
  364. package/dist/application/transform/footer/evaluation.cjs +33 -0
  365. package/dist/application/transform/footer/evaluation.cjs.map +1 -0
  366. package/dist/application/transform/footer/evaluation.mjs +26 -0
  367. package/dist/application/transform/footer/evaluation.mjs.map +1 -0
  368. package/dist/application/transform/footer/shared-enum-names.cjs +60 -0
  369. package/dist/application/transform/footer/shared-enum-names.cjs.map +1 -0
  370. package/dist/application/transform/footer/shared-enum-names.mjs +57 -0
  371. package/dist/application/transform/footer/shared-enum-names.mjs.map +1 -0
  372. package/dist/application/transform/footer/type-evaluation.cjs +246 -0
  373. package/dist/application/transform/footer/type-evaluation.cjs.map +1 -0
  374. package/dist/application/transform/footer/type-evaluation.mjs +244 -0
  375. package/dist/application/transform/footer/type-evaluation.mjs.map +1 -0
  376. package/dist/application/transform/footer/type-rules.cjs +172 -0
  377. package/dist/application/transform/footer/type-rules.cjs.map +1 -0
  378. package/dist/application/transform/footer/type-rules.mjs +166 -0
  379. package/dist/application/transform/footer/type-rules.mjs.map +1 -0
  380. package/dist/application/transform/helper-types.cjs +68 -0
  381. package/dist/application/transform/helper-types.cjs.map +1 -0
  382. package/dist/application/transform/helper-types.mjs +65 -0
  383. package/dist/application/transform/helper-types.mjs.map +1 -0
  384. package/dist/application/transform/literal-type.cjs +36 -0
  385. package/dist/application/transform/literal-type.cjs.map +1 -0
  386. package/dist/application/transform/literal-type.mjs +34 -0
  387. package/dist/application/transform/literal-type.mjs.map +1 -0
  388. package/dist/application/transform/numbered-names.cjs +18 -0
  389. package/dist/application/transform/numbered-names.cjs.map +1 -0
  390. package/dist/application/transform/numbered-names.mjs +16 -0
  391. package/dist/application/transform/numbered-names.mjs.map +1 -0
  392. package/dist/application/transform/ref-pointer/generated-location.cjs +138 -0
  393. package/dist/application/transform/ref-pointer/generated-location.cjs.map +1 -0
  394. package/dist/application/transform/ref-pointer/generated-location.mjs +136 -0
  395. package/dist/application/transform/ref-pointer/generated-location.mjs.map +1 -0
  396. package/dist/application/transform/ref-pointer/generated-shape.cjs +171 -0
  397. package/dist/application/transform/ref-pointer/generated-shape.cjs.map +1 -0
  398. package/dist/application/transform/ref-pointer/generated-shape.mjs +162 -0
  399. package/dist/application/transform/ref-pointer/generated-shape.mjs.map +1 -0
  400. package/dist/application/transform/ref-pointer/inline-cycles.cjs +44 -0
  401. package/dist/application/transform/ref-pointer/inline-cycles.cjs.map +1 -0
  402. package/dist/application/transform/ref-pointer/inline-cycles.mjs +42 -0
  403. package/dist/application/transform/ref-pointer/inline-cycles.mjs.map +1 -0
  404. package/dist/application/transform/ref-pointer/original-index.cjs +62 -0
  405. package/dist/application/transform/ref-pointer/original-index.cjs.map +1 -0
  406. package/dist/application/transform/ref-pointer/original-index.mjs +60 -0
  407. package/dist/application/transform/ref-pointer/original-index.mjs.map +1 -0
  408. package/dist/application/transform/ref-pointer/pointer-type.cjs +60 -0
  409. package/dist/application/transform/ref-pointer/pointer-type.cjs.map +1 -0
  410. package/dist/application/transform/ref-pointer/pointer-type.mjs +57 -0
  411. package/dist/application/transform/ref-pointer/pointer-type.mjs.map +1 -0
  412. package/dist/application/transform/ref-pointer/pointer-walk.cjs +66 -0
  413. package/dist/application/transform/ref-pointer/pointer-walk.cjs.map +1 -0
  414. package/dist/application/transform/ref-pointer/pointer-walk.mjs +56 -0
  415. package/dist/application/transform/ref-pointer/pointer-walk.mjs.map +1 -0
  416. package/dist/application/transform/ref-pointer/typed-walk.cjs +124 -0
  417. package/dist/application/transform/ref-pointer/typed-walk.cjs.map +1 -0
  418. package/dist/application/transform/ref-pointer/typed-walk.mjs +122 -0
  419. package/dist/application/transform/ref-pointer/typed-walk.mjs.map +1 -0
  420. package/dist/application/transform/ref-type.cjs +62 -0
  421. package/dist/application/transform/ref-type.cjs.map +1 -0
  422. package/dist/application/transform/ref-type.mjs +55 -0
  423. package/dist/application/transform/ref-type.mjs.map +1 -0
  424. package/dist/application/transform/schema/access-flags.cjs +38 -0
  425. package/dist/application/transform/schema/access-flags.cjs.map +1 -0
  426. package/dist/application/transform/schema/access-flags.mjs +36 -0
  427. package/dist/application/transform/schema/access-flags.mjs.map +1 -0
  428. package/dist/application/transform/schema/array-type.cjs +136 -0
  429. package/dist/application/transform/schema/array-type.cjs.map +1 -0
  430. package/dist/application/transform/schema/array-type.mjs +134 -0
  431. package/dist/application/transform/schema/array-type.mjs.map +1 -0
  432. package/dist/application/transform/schema/composition-type.cjs +142 -0
  433. package/dist/application/transform/schema/composition-type.cjs.map +1 -0
  434. package/dist/application/transform/schema/composition-type.mjs +140 -0
  435. package/dist/application/transform/schema/composition-type.mjs.map +1 -0
  436. package/dist/application/transform/schema/core-type.cjs +86 -0
  437. package/dist/application/transform/schema/core-type.cjs.map +1 -0
  438. package/dist/application/transform/schema/core-type.mjs +84 -0
  439. package/dist/application/transform/schema/core-type.mjs.map +1 -0
  440. package/dist/application/transform/schema/discriminated-union.cjs +30 -0
  441. package/dist/application/transform/schema/discriminated-union.cjs.map +1 -0
  442. package/dist/application/transform/schema/discriminated-union.mjs +27 -0
  443. package/dist/application/transform/schema/discriminated-union.mjs.map +1 -0
  444. package/dist/application/transform/schema/discriminator-property.cjs +22 -0
  445. package/dist/application/transform/schema/discriminator-property.cjs.map +1 -0
  446. package/dist/application/transform/schema/discriminator-property.mjs +20 -0
  447. package/dist/application/transform/schema/discriminator-property.mjs.map +1 -0
  448. package/dist/application/transform/schema/enum-rule.cjs +163 -0
  449. package/dist/application/transform/schema/enum-rule.cjs.map +1 -0
  450. package/dist/application/transform/schema/enum-rule.mjs +160 -0
  451. package/dist/application/transform/schema/enum-rule.mjs.map +1 -0
  452. package/dist/application/transform/schema/inherited-discriminator.cjs +29 -0
  453. package/dist/application/transform/schema/inherited-discriminator.cjs.map +1 -0
  454. package/dist/application/transform/schema/inherited-discriminator.mjs +26 -0
  455. package/dist/application/transform/schema/inherited-discriminator.mjs.map +1 -0
  456. package/dist/application/transform/schema/object-type.cjs +186 -0
  457. package/dist/application/transform/schema/object-type.cjs.map +1 -0
  458. package/dist/application/transform/schema/object-type.mjs +182 -0
  459. package/dist/application/transform/schema/object-type.mjs.map +1 -0
  460. package/dist/application/transform/schema/presence-members.cjs +59 -0
  461. package/dist/application/transform/schema/presence-members.cjs.map +1 -0
  462. package/dist/application/transform/schema/presence-members.mjs +57 -0
  463. package/dist/application/transform/schema/presence-members.mjs.map +1 -0
  464. package/dist/application/transform/schema/required-variants.cjs +45 -0
  465. package/dist/application/transform/schema/required-variants.cjs.map +1 -0
  466. package/dist/application/transform/schema/required-variants.mjs +42 -0
  467. package/dist/application/transform/schema/required-variants.mjs.map +1 -0
  468. package/dist/application/transform/schema/schema-transform.cjs +72 -0
  469. package/dist/application/transform/schema/schema-transform.cjs.map +1 -0
  470. package/dist/application/transform/schema/schema-transform.mjs +68 -0
  471. package/dist/application/transform/schema/schema-transform.mjs.map +1 -0
  472. package/dist/application/transform/schema/unevaluated-properties.cjs +61 -0
  473. package/dist/application/transform/schema/unevaluated-properties.cjs.map +1 -0
  474. package/dist/application/transform/schema/unevaluated-properties.mjs +59 -0
  475. package/dist/application/transform/schema/unevaluated-properties.mjs.map +1 -0
  476. package/dist/application/transform/schema-comment.cjs +130 -0
  477. package/dist/application/transform/schema-comment.cjs.map +1 -0
  478. package/dist/application/transform/schema-comment.mjs +125 -0
  479. package/dist/application/transform/schema-comment.mjs.map +1 -0
  480. package/dist/application/transform/shared-types.cjs +8 -0
  481. package/dist/application/transform/shared-types.cjs.map +1 -0
  482. package/dist/application/transform/shared-types.mjs +6 -0
  483. package/dist/application/transform/shared-types.mjs.map +1 -0
  484. package/dist/application/transform/type-combinators.cjs +49 -0
  485. package/dist/application/transform/type-combinators.cjs.map +1 -0
  486. package/dist/application/transform/type-combinators.mjs +42 -0
  487. package/dist/application/transform/type-combinators.mjs.map +1 -0
  488. package/dist/cli/cli-arguments.cjs +145 -0
  489. package/dist/cli/cli-arguments.cjs.map +1 -0
  490. package/dist/cli/cli-arguments.mjs +137 -0
  491. package/dist/cli/cli-arguments.mjs.map +1 -0
  492. package/dist/cli/cli-errors.cjs +81 -0
  493. package/dist/cli/cli-errors.cjs.map +1 -0
  494. package/dist/cli/cli-errors.mjs +77 -0
  495. package/dist/cli/cli-errors.mjs.map +1 -0
  496. package/dist/cli/cli-output.cjs +42 -0
  497. package/dist/cli/cli-output.cjs.map +1 -0
  498. package/dist/cli/cli-output.mjs +35 -0
  499. package/dist/cli/cli-output.mjs.map +1 -0
  500. package/dist/cli/docs-links.cjs +6 -0
  501. package/dist/cli/docs-links.cjs.map +1 -0
  502. package/dist/cli/docs-links.mjs +4 -0
  503. package/dist/cli/docs-links.mjs.map +1 -0
  504. package/dist/cli/fix-option.cjs +19 -0
  505. package/dist/cli/fix-option.cjs.map +1 -0
  506. package/dist/cli/fix-option.mjs +16 -0
  507. package/dist/cli/fix-option.mjs.map +1 -0
  508. package/dist/cli/help-text.cjs +44 -0
  509. package/dist/cli/help-text.cjs.map +1 -0
  510. package/dist/cli/help-text.mjs +42 -0
  511. package/dist/cli/help-text.mjs.map +1 -0
  512. package/dist/cli/main.cjs +67 -0
  513. package/dist/cli/main.cjs.map +1 -0
  514. package/dist/cli/main.d.cts +2 -0
  515. package/dist/cli/main.d.mts +2 -0
  516. package/dist/cli/main.d.ts +2 -0
  517. package/dist/cli/main.mjs +59 -0
  518. package/dist/cli/main.mjs.map +1 -0
  519. package/dist/cli/redocly-apis.cjs +69 -0
  520. package/dist/cli/redocly-apis.cjs.map +1 -0
  521. package/dist/cli/redocly-apis.mjs +66 -0
  522. package/dist/cli/redocly-apis.mjs.map +1 -0
  523. package/dist/cli/ref-limits.cjs +14 -0
  524. package/dist/cli/ref-limits.cjs.map +1 -0
  525. package/dist/cli/ref-limits.mjs +12 -0
  526. package/dist/cli/ref-limits.mjs.map +1 -0
  527. package/dist/cli/run-cli.cjs +113 -0
  528. package/dist/cli/run-cli.cjs.map +1 -0
  529. package/dist/cli/run-cli.mjs +111 -0
  530. package/dist/cli/run-cli.mjs.map +1 -0
  531. package/dist/domain/assert-never.cjs +8 -0
  532. package/dist/domain/assert-never.cjs.map +1 -0
  533. package/dist/domain/assert-never.mjs +6 -0
  534. package/dist/domain/assert-never.mjs.map +1 -0
  535. package/dist/domain/errors.cjs +52 -0
  536. package/dist/domain/errors.cjs.map +1 -0
  537. package/dist/domain/errors.mjs +48 -0
  538. package/dist/domain/errors.mjs.map +1 -0
  539. package/dist/domain/ir/constructors.cjs +93 -0
  540. package/dist/domain/ir/constructors.cjs.map +1 -0
  541. package/dist/domain/ir/constructors.mjs +74 -0
  542. package/dist/domain/ir/constructors.mjs.map +1 -0
  543. package/dist/domain/ir/identifier-text.cjs +29 -0
  544. package/dist/domain/ir/identifier-text.cjs.map +1 -0
  545. package/dist/domain/ir/identifier-text.mjs +25 -0
  546. package/dist/domain/ir/identifier-text.mjs.map +1 -0
  547. package/dist/domain/ir/newer-identifier-ranges.cjs +109 -0
  548. package/dist/domain/ir/newer-identifier-ranges.cjs.map +1 -0
  549. package/dist/domain/ir/newer-identifier-ranges.mjs +106 -0
  550. package/dist/domain/ir/newer-identifier-ranges.mjs.map +1 -0
  551. package/dist/domain/ir/normalize.cjs +32 -0
  552. package/dist/domain/ir/normalize.cjs.map +1 -0
  553. package/dist/domain/ir/normalize.mjs +29 -0
  554. package/dist/domain/ir/normalize.mjs.map +1 -0
  555. package/dist/domain/ir/property-name.cjs +19 -0
  556. package/dist/domain/ir/property-name.cjs.map +1 -0
  557. package/dist/domain/ir/property-name.mjs +16 -0
  558. package/dist/domain/ir/property-name.mjs.map +1 -0
  559. package/dist/domain/ir/raw-text-escapes.cjs +25 -0
  560. package/dist/domain/ir/raw-text-escapes.cjs.map +1 -0
  561. package/dist/domain/ir/raw-text-escapes.mjs +22 -0
  562. package/dist/domain/ir/raw-text-escapes.mjs.map +1 -0
  563. package/dist/domain/openapi/admitted-values.cjs +75 -0
  564. package/dist/domain/openapi/admitted-values.cjs.map +1 -0
  565. package/dist/domain/openapi/admitted-values.mjs +72 -0
  566. package/dist/domain/openapi/admitted-values.mjs.map +1 -0
  567. package/dist/domain/openapi/alias-expansion.cjs +50 -0
  568. package/dist/domain/openapi/alias-expansion.cjs.map +1 -0
  569. package/dist/domain/openapi/alias-expansion.mjs +45 -0
  570. package/dist/domain/openapi/alias-expansion.mjs.map +1 -0
  571. package/dist/domain/openapi/binary-content.cjs +48 -0
  572. package/dist/domain/openapi/binary-content.cjs.map +1 -0
  573. package/dist/domain/openapi/binary-content.mjs +45 -0
  574. package/dist/domain/openapi/binary-content.mjs.map +1 -0
  575. package/dist/domain/openapi/components-object.cjs +29 -0
  576. package/dist/domain/openapi/components-object.cjs.map +1 -0
  577. package/dist/domain/openapi/components-object.mjs +24 -0
  578. package/dist/domain/openapi/components-object.mjs.map +1 -0
  579. package/dist/domain/openapi/discriminated-union.cjs +68 -0
  580. package/dist/domain/openapi/discriminated-union.cjs.map +1 -0
  581. package/dist/domain/openapi/discriminated-union.mjs +62 -0
  582. package/dist/domain/openapi/discriminated-union.mjs.map +1 -0
  583. package/dist/domain/openapi/discriminator-conflicts.cjs +143 -0
  584. package/dist/domain/openapi/discriminator-conflicts.cjs.map +1 -0
  585. package/dist/domain/openapi/discriminator-conflicts.mjs +141 -0
  586. package/dist/domain/openapi/discriminator-conflicts.mjs.map +1 -0
  587. package/dist/domain/openapi/json-pointer.cjs +31 -0
  588. package/dist/domain/openapi/json-pointer.cjs.map +1 -0
  589. package/dist/domain/openapi/json-pointer.mjs +27 -0
  590. package/dist/domain/openapi/json-pointer.mjs.map +1 -0
  591. package/dist/domain/openapi/media-type-object.cjs +14 -0
  592. package/dist/domain/openapi/media-type-object.cjs.map +1 -0
  593. package/dist/domain/openapi/media-type-object.mjs +11 -0
  594. package/dist/domain/openapi/media-type-object.mjs.map +1 -0
  595. package/dist/domain/openapi/parameter-object.cjs +13 -0
  596. package/dist/domain/openapi/parameter-object.cjs.map +1 -0
  597. package/dist/domain/openapi/parameter-object.mjs +10 -0
  598. package/dist/domain/openapi/parameter-object.mjs.map +1 -0
  599. package/dist/domain/openapi/path-item-object.cjs +35 -0
  600. package/dist/domain/openapi/path-item-object.cjs.map +1 -0
  601. package/dist/domain/openapi/path-item-object.mjs +30 -0
  602. package/dist/domain/openapi/path-item-object.mjs.map +1 -0
  603. package/dist/domain/openapi/path-templates.cjs +23 -0
  604. package/dist/domain/openapi/path-templates.cjs.map +1 -0
  605. package/dist/domain/openapi/path-templates.mjs +21 -0
  606. package/dist/domain/openapi/path-templates.mjs.map +1 -0
  607. package/dist/domain/openapi/unsupported-features.cjs +87 -0
  608. package/dist/domain/openapi/unsupported-features.cjs.map +1 -0
  609. package/dist/domain/openapi/unsupported-features.mjs +84 -0
  610. package/dist/domain/openapi/unsupported-features.mjs.map +1 -0
  611. package/dist/domain/output-fixes.cjs +101 -0
  612. package/dist/domain/output-fixes.cjs.map +1 -0
  613. package/dist/domain/output-fixes.mjs +94 -0
  614. package/dist/domain/output-fixes.mjs.map +1 -0
  615. package/dist/domain/warnings.cjs +15 -0
  616. package/dist/domain/warnings.cjs.map +1 -0
  617. package/dist/domain/warnings.mjs +12 -0
  618. package/dist/domain/warnings.mjs.map +1 -0
  619. package/dist/index.cjs +98 -0
  620. package/dist/index.cjs.map +1 -0
  621. package/dist/index.d.cts +841 -0
  622. package/dist/index.d.mts +841 -0
  623. package/dist/index.d.ts +841 -0
  624. package/dist/index.mjs +27 -0
  625. package/dist/index.mjs.map +1 -0
  626. package/dist/transform/components-object.cjs +15 -0
  627. package/dist/transform/components-object.cjs.map +1 -0
  628. package/dist/transform/components-object.mjs +11 -0
  629. package/dist/transform/components-object.mjs.map +1 -0
  630. package/dist/transform/header-object.cjs +12 -0
  631. package/dist/transform/header-object.cjs.map +1 -0
  632. package/dist/transform/header-object.mjs +10 -0
  633. package/dist/transform/header-object.mjs.map +1 -0
  634. package/dist/transform/media-type-object.cjs +12 -0
  635. package/dist/transform/media-type-object.cjs.map +1 -0
  636. package/dist/transform/media-type-object.mjs +10 -0
  637. package/dist/transform/media-type-object.mjs.map +1 -0
  638. package/dist/transform/operation-object.cjs +26 -0
  639. package/dist/transform/operation-object.cjs.map +1 -0
  640. package/dist/transform/operation-object.mjs +21 -0
  641. package/dist/transform/operation-object.mjs.map +1 -0
  642. package/dist/transform/parameter-object.cjs +12 -0
  643. package/dist/transform/parameter-object.cjs.map +1 -0
  644. package/dist/transform/parameter-object.mjs +10 -0
  645. package/dist/transform/parameter-object.mjs.map +1 -0
  646. package/dist/transform/path-item-object.cjs +12 -0
  647. package/dist/transform/path-item-object.cjs.map +1 -0
  648. package/dist/transform/path-item-object.mjs +10 -0
  649. package/dist/transform/path-item-object.mjs.map +1 -0
  650. package/dist/transform/paths-object.cjs +11 -0
  651. package/dist/transform/paths-object.cjs.map +1 -0
  652. package/dist/transform/paths-object.mjs +9 -0
  653. package/dist/transform/paths-object.mjs.map +1 -0
  654. package/dist/transform/request-body-object.cjs +12 -0
  655. package/dist/transform/request-body-object.cjs.map +1 -0
  656. package/dist/transform/request-body-object.mjs +10 -0
  657. package/dist/transform/request-body-object.mjs.map +1 -0
  658. package/dist/transform/response-object.cjs +12 -0
  659. package/dist/transform/response-object.cjs.map +1 -0
  660. package/dist/transform/response-object.mjs +10 -0
  661. package/dist/transform/response-object.mjs.map +1 -0
  662. package/dist/transform/responses-object.cjs +12 -0
  663. package/dist/transform/responses-object.cjs.map +1 -0
  664. package/dist/transform/responses-object.mjs +10 -0
  665. package/dist/transform/responses-object.mjs.map +1 -0
  666. package/dist/transform/schema-object.cjs +21 -0
  667. package/dist/transform/schema-object.cjs.map +1 -0
  668. package/dist/transform/schema-object.mjs +16 -0
  669. package/dist/transform/schema-object.mjs.map +1 -0
  670. package/package.json +115 -4
  671. package/src/adapters/node-file-system/node-file-system.ts +44 -0
  672. package/src/adapters/redocly-loader/alias-limit.ts +20 -0
  673. package/src/adapters/redocly-loader/allowed-hosts.ts +62 -0
  674. package/src/adapters/redocly-loader/bundled-ref-repair.ts +65 -0
  675. package/src/adapters/redocly-loader/malformed-refs.ts +61 -0
  676. package/src/adapters/redocly-loader/redocly-config-source.ts +78 -0
  677. package/src/adapters/redocly-loader/redocly-schema-loader.ts +262 -0
  678. package/src/adapters/redocly-loader/ref-access.ts +146 -0
  679. package/src/adapters/redocly-loader/ref-holders.ts +43 -0
  680. package/src/adapters/redocly-loader/remote-fetch.ts +104 -0
  681. package/src/adapters/redocly-loader/schema-load-errors.ts +124 -0
  682. package/src/adapters/redocly-loader/schema-source.ts +151 -0
  683. package/src/adapters/redocly-loader/unsupported-keys.ts +102 -0
  684. package/src/adapters/terminal-logger/terminal-logger.ts +98 -0
  685. package/src/adapters/type-ast-bridge/footer-nodes.ts +38 -0
  686. package/src/adapters/type-ast-bridge/ir-declarations-to-typescript.ts +100 -0
  687. package/src/adapters/type-ast-bridge/ir-to-typescript.ts +223 -0
  688. package/src/adapters/type-ast-bridge/lazy-node.ts +24 -0
  689. package/src/adapters/type-ast-bridge/load-typescript.ts +84 -0
  690. package/src/adapters/type-ast-bridge/print-typescript.ts +33 -0
  691. package/src/adapters/type-ast-bridge/typescript-raw-text.ts +49 -0
  692. package/src/adapters/type-ast-bridge/typescript-to-ir.ts +294 -0
  693. package/src/adapters/type-ast-bridge/typescript-types.ts +8 -0
  694. package/src/api/ast-to-string.ts +59 -0
  695. package/src/api/comment-header.ts +7 -0
  696. package/src/api/default-ports.ts +44 -0
  697. package/src/api/discriminator-conflict-warnings.ts +43 -0
  698. package/src/api/discriminator-enum-names.ts +26 -0
  699. package/src/api/discriminator-enum-parent.ts +129 -0
  700. package/src/api/discriminator-enum.ts +115 -0
  701. package/src/api/discriminator-other-owners.ts +97 -0
  702. package/src/api/discriminator-patch.ts +147 -0
  703. package/src/api/discriminator-scan.ts +260 -0
  704. package/src/api/document-declarations.ts +41 -0
  705. package/src/api/document-refs.ts +71 -0
  706. package/src/api/document-run.ts +177 -0
  707. package/src/api/enum-values-warnings.ts +21 -0
  708. package/src/api/footer-entry.ts +23 -0
  709. package/src/api/footer-sink.ts +67 -0
  710. package/src/api/legacy-callback-warning.ts +29 -0
  711. package/src/api/legacy-ts-helpers.ts +311 -0
  712. package/src/api/legacy-utils.ts +118 -0
  713. package/src/api/openapi-ts.ts +62 -0
  714. package/src/api/path-template-warnings.ts +27 -0
  715. package/src/api/schema-callbacks.ts +211 -0
  716. package/src/api/string-to-ast.ts +27 -0
  717. package/src/api/transform-context.ts +93 -0
  718. package/src/api/transform-schema.ts +123 -0
  719. package/src/api/type-helpers.ts +130 -0
  720. package/src/api/unsupported-feature-warnings.ts +33 -0
  721. package/src/application/ports/file-system.ts +12 -0
  722. package/src/application/ports/logger.ts +16 -0
  723. package/src/application/ports/redocly-config-source.ts +20 -0
  724. package/src/application/ports/schema-loader.ts +32 -0
  725. package/src/application/print/comment-writer.ts +91 -0
  726. package/src/application/print/declaration-printer.ts +100 -0
  727. package/src/application/print/literal-text.ts +62 -0
  728. package/src/application/print/print-nodes.ts +62 -0
  729. package/src/application/print/print-options.ts +11 -0
  730. package/src/application/print/text-writer.ts +83 -0
  731. package/src/application/print/type-printer.ts +287 -0
  732. package/src/application/stack-overflow.ts +54 -0
  733. package/src/application/transform/document/assignability.ts +203 -0
  734. package/src/application/transform/document/components.ts +189 -0
  735. package/src/application/transform/document/declared-types.ts +93 -0
  736. package/src/application/transform/document/defs-root.ts +25 -0
  737. package/src/application/transform/document/document-member.ts +20 -0
  738. package/src/application/transform/document/document.ts +215 -0
  739. package/src/application/transform/document/exploded-query.ts +91 -0
  740. package/src/application/transform/document/global-type-references.ts +78 -0
  741. package/src/application/transform/document/header.ts +34 -0
  742. package/src/application/transform/document/kept-deprecated.ts +135 -0
  743. package/src/application/transform/document/list-assignability.ts +87 -0
  744. package/src/application/transform/document/media-type.ts +78 -0
  745. package/src/application/transform/document/operation.ts +64 -0
  746. package/src/application/transform/document/parameter.ts +45 -0
  747. package/src/application/transform/document/parameters.ts +265 -0
  748. package/src/application/transform/document/path-item.ts +168 -0
  749. package/src/application/transform/document/path-key-overlaps.ts +201 -0
  750. package/src/application/transform/document/path-template-replace.ts +90 -0
  751. package/src/application/transform/document/paths-enum.ts +127 -0
  752. package/src/application/transform/document/paths.ts +273 -0
  753. package/src/application/transform/document/request-body.ts +50 -0
  754. package/src/application/transform/document/response.ts +109 -0
  755. package/src/application/transform/document/responses.ts +29 -0
  756. package/src/application/transform/document/root-type-aliases.ts +107 -0
  757. package/src/application/transform/document/template-key-match.ts +183 -0
  758. package/src/application/transform/document/type-assignability.ts +268 -0
  759. package/src/application/transform/document/type-key.ts +80 -0
  760. package/src/application/transform/document/type-resolution.ts +163 -0
  761. package/src/application/transform/document/webhooks.ts +22 -0
  762. package/src/application/transform/document-entries.ts +28 -0
  763. package/src/application/transform/footer/document-footer.ts +212 -0
  764. package/src/application/transform/footer/enum-naming.ts +210 -0
  765. package/src/application/transform/footer/enum-values-check.ts +171 -0
  766. package/src/application/transform/footer/evaluation.ts +47 -0
  767. package/src/application/transform/footer/shared-enum-names.ts +86 -0
  768. package/src/application/transform/footer/type-evaluation.ts +294 -0
  769. package/src/application/transform/footer/type-rules.ts +269 -0
  770. package/src/application/transform/helper-types.ts +92 -0
  771. package/src/application/transform/literal-type.ts +54 -0
  772. package/src/application/transform/numbered-names.ts +20 -0
  773. package/src/application/transform/ref-pointer/generated-location.ts +211 -0
  774. package/src/application/transform/ref-pointer/generated-shape.ts +275 -0
  775. package/src/application/transform/ref-pointer/inline-cycles.ts +56 -0
  776. package/src/application/transform/ref-pointer/original-index.ts +95 -0
  777. package/src/application/transform/ref-pointer/pointer-type.ts +92 -0
  778. package/src/application/transform/ref-pointer/pointer-walk.ts +96 -0
  779. package/src/application/transform/ref-pointer/typed-walk.ts +192 -0
  780. package/src/application/transform/ref-type.ts +102 -0
  781. package/src/application/transform/schema/access-flags.ts +63 -0
  782. package/src/application/transform/schema/array-type.ts +213 -0
  783. package/src/application/transform/schema/composition-type.ts +255 -0
  784. package/src/application/transform/schema/core-type.ts +119 -0
  785. package/src/application/transform/schema/discriminated-union.ts +58 -0
  786. package/src/application/transform/schema/discriminator-property.ts +33 -0
  787. package/src/application/transform/schema/enum-rule.ts +280 -0
  788. package/src/application/transform/schema/inherited-discriminator.ts +54 -0
  789. package/src/application/transform/schema/object-type.ts +289 -0
  790. package/src/application/transform/schema/presence-members.ts +96 -0
  791. package/src/application/transform/schema/required-variants.ts +88 -0
  792. package/src/application/transform/schema/schema-context.ts +136 -0
  793. package/src/application/transform/schema/schema-rule.ts +29 -0
  794. package/src/application/transform/schema/schema-transform.ts +99 -0
  795. package/src/application/transform/schema/unevaluated-properties.ts +105 -0
  796. package/src/application/transform/schema-comment.ts +196 -0
  797. package/src/application/transform/shared-types.ts +9 -0
  798. package/src/application/transform/transform-context.ts +51 -0
  799. package/src/application/transform/type-combinators.ts +57 -0
  800. package/src/cli/cli-arguments.ts +208 -0
  801. package/src/cli/cli-dependencies.ts +47 -0
  802. package/src/cli/cli-errors.ts +127 -0
  803. package/src/cli/cli-output.ts +67 -0
  804. package/src/cli/docs-links.ts +6 -0
  805. package/src/cli/fix-option.ts +29 -0
  806. package/src/cli/help-text.ts +52 -0
  807. package/src/cli/main.ts +73 -0
  808. package/src/cli/redocly-apis.ts +95 -0
  809. package/src/cli/ref-limits.ts +16 -0
  810. package/src/cli/run-cli.ts +131 -0
  811. package/src/domain/assert-never.ts +8 -0
  812. package/src/domain/errors.ts +76 -0
  813. package/src/domain/ir/constructors.ts +142 -0
  814. package/src/domain/ir/identifier-text.ts +49 -0
  815. package/src/domain/ir/newer-identifier-ranges.ts +109 -0
  816. package/src/domain/ir/nodes.ts +225 -0
  817. package/src/domain/ir/normalize.ts +51 -0
  818. package/src/domain/ir/property-name.ts +28 -0
  819. package/src/domain/ir/raw-text-escapes.ts +37 -0
  820. package/src/domain/openapi/admitted-values.ts +113 -0
  821. package/src/domain/openapi/alias-expansion.ts +72 -0
  822. package/src/domain/openapi/binary-content.ts +74 -0
  823. package/src/domain/openapi/components-object.ts +52 -0
  824. package/src/domain/openapi/discriminated-union.ts +109 -0
  825. package/src/domain/openapi/discriminator-conflicts.ts +251 -0
  826. package/src/domain/openapi/document-object.ts +12 -0
  827. package/src/domain/openapi/header-object.ts +9 -0
  828. package/src/domain/openapi/json-pointer.ts +46 -0
  829. package/src/domain/openapi/media-type-object.ts +26 -0
  830. package/src/domain/openapi/operation-object.ts +13 -0
  831. package/src/domain/openapi/parameter-object.ts +34 -0
  832. package/src/domain/openapi/path-item-object.ts +70 -0
  833. package/src/domain/openapi/path-templates.ts +31 -0
  834. package/src/domain/openapi/request-body-object.ts +7 -0
  835. package/src/domain/openapi/response-object.ts +14 -0
  836. package/src/domain/openapi/schema-object.ts +61 -0
  837. package/src/domain/openapi/unsupported-features.ts +139 -0
  838. package/src/domain/output-fixes.ts +136 -0
  839. package/src/domain/warnings.ts +20 -0
  840. package/src/index.ts +67 -0
  841. package/src/transform/components-object.ts +27 -0
  842. package/src/transform/header-object.ts +19 -0
  843. package/src/transform/media-type-object.ts +19 -0
  844. package/src/transform/operation-object.ts +36 -0
  845. package/src/transform/parameter-object.ts +19 -0
  846. package/src/transform/parameters-array.ts +19 -0
  847. package/src/transform/path-item-object.ts +22 -0
  848. package/src/transform/paths-enum.ts +8 -0
  849. package/src/transform/paths-object.ts +15 -0
  850. package/src/transform/request-body-object.ts +19 -0
  851. package/src/transform/response-object.ts +19 -0
  852. package/src/transform/responses-object.ts +19 -0
  853. package/src/transform/schema-object.ts +36 -0
  854. package/src/transform/webhooks-object.ts +15 -0
  855. package/src/types/generator-options.ts +278 -0
  856. package/src/types/openapi-common.ts +100 -0
  857. package/src/types/openapi-document.ts +196 -0
  858. package/src/types/openapi-path-item.ts +130 -0
  859. package/src/types/openapi-request.ts +209 -0
  860. package/src/types/openapi-response.ts +81 -0
  861. package/src/types/openapi-schema.ts +169 -0
  862. package/src/types/openapi-security.ts +116 -0
  863. package/src/types.ts +12 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document.mjs","sources":["../../../../src/application/transform/document/document.ts"],"sourcesContent":["import { irKeyword, irObject, irRecord } from \"../../../domain/ir/constructors.js\";\nimport type {\n IrDeclaration,\n IrIntersectionType,\n IrObjectType,\n IrType,\n IrTypeAliasDeclaration,\n} from \"../../../domain/ir/nodes.js\";\nimport type { ComponentsObject } from \"../../../domain/openapi/components-object.js\";\nimport type { DocumentObject } from \"../../../domain/openapi/document-object.js\";\nimport type { PathsObject } from \"../../../domain/openapi/path-item-object.js\";\nimport { READ_WRITE_MARKER_TYPES } from \"../helper-types.js\";\nimport type { TransformContext, TransformOptions } from \"../transform-context.js\";\nimport { componentsType } from \"./components.js\";\nimport { type DeclaredTypeLookup, declaredTypeLookup } from \"./declared-types.js\";\nimport { defsRootType } from \"./defs-root.js\";\nimport { keptDeprecatedComponents } from \"./kept-deprecated.js\";\nimport { pathMembers, pathsObjectType } from \"./paths.js\";\nimport { apiPathsEnumDeclaration } from \"./paths-enum.js\";\nimport { webhooksType } from \"./webhooks.js\";\n\n/** The root types, in output order. */\nconst ROOT_KEYS = Object.freeze([\"paths\", \"webhooks\", \"components\", \"$defs\"] as const);\ntype RootKey = (typeof ROOT_KEYS)[number];\n\nconst OPERATIONS_NAME = \"operations\";\n/** The type of a root without members: `Record<string, never>`. */\nconst EMPTY_ROOT_TYPE = irRecord(irKeyword(\"string\"), irKeyword(\"never\"));\n\n/** A root's type and the declarations that follow it (the `--root-types` aliases). */\ninterface RootResult {\n readonly type: IrType;\n readonly aliases: readonly IrTypeAliasDeclaration[];\n /**\n * The root's final type, for a root that reads the types the whole file declares (`paths`, whose\n * overlap check follows references). `type` then only tells whether the root has members.\n */\n readonly withDeclaredTypes?: (lookup: DeclaredTypeLookup) => IrType;\n}\n\ntype RootTransform = (\n node: object,\n context: TransformContext,\n document: DocumentObject,\n) => RootResult;\n\n/** Without `--exclude-deprecated` nothing is left out, so the scan is skipped. */\nfunction keptDeprecated(document: DocumentObject, context: TransformContext): ReadonlySet<object> {\n return context.options.excludeDeprecated\n ? keptDeprecatedComponents(document, context.refs)\n : new Set();\n}\n\nconst ROOT_TRANSFORMS: Readonly<Record<RootKey, RootTransform>> = {\n paths: (node, context) => {\n const members = pathMembers(node as PathsObject, context);\n return {\n type: irObject(members.map(({ member }) => member)),\n aliases: [],\n withDeclaredTypes: (lookup) => pathsObjectType(members, lookup),\n };\n },\n webhooks: (node, context) => ({ type: webhooksType(node as PathsObject, context), aliases: [] }),\n components: (node, context, document) => {\n const kept = keptDeprecated(document, context);\n const { type, rootTypes } = componentsType(node as ComponentsObject, context, kept);\n return { type, aliases: rootTypes };\n },\n $defs: (node, context) => ({\n type: defsRootType(node as NonNullable<DocumentObject[\"$defs\"]>, context),\n aliases: [],\n }),\n};\n\nfunction emptyAlias(name: string): IrTypeAliasDeclaration {\n return { kind: \"typeAlias\", name, isExported: true, type: EMPTY_ROOT_TYPE, comments: [] };\n}\n\n/** A root type that declares something: an object with members, or an intersection of them. */\ntype RootBodyType = IrObjectType | IrIntersectionType;\n\nfunction isRootBody(type: IrType): type is RootBodyType {\n return (type.kind === \"object\" && type.members.length > 0) || type.kind === \"intersection\";\n}\n\n/**\n * A root with members: an interface, or a type alias with `--export-type`. An intersection (the\n * `paths` of overlapping `--path-params-as-types` keys) can only be a type alias.\n */\nfunction rootDeclaration(\n name: RootKey,\n type: RootBodyType,\n options: TransformOptions,\n): IrDeclaration {\n return options.exportType || type.kind === \"intersection\"\n ? { kind: \"typeAlias\", name, isExported: true, type, comments: [] }\n : { kind: \"interface\", name, isExported: true, members: type.members, comments: [] };\n}\n\n/**\n * The declarations of one root: its type, then its aliases. `finish` gives the root's declaration\n * again from the types the whole file declares, for a root with `withDeclaredTypes`.\n */\ninterface RootDeclarations {\n readonly declarations: readonly IrDeclaration[];\n readonly finish?: (lookup: DeclaredTypeLookup) => IrDeclaration;\n}\n\n/**\n * The declarations of one root. A root that is missing, or whose type has no members, is\n * `Record<string, never>`. Only an object type (or the `paths` intersection) counts as having\n * members: a callback type the IR keeps as raw text does not (ADR-004).\n */\nfunction rootDeclarations(\n root: RootKey,\n document: DocumentObject,\n context: TransformContext,\n): RootDeclarations {\n const node: unknown = document[root];\n if (!node || typeof node !== \"object\") {\n context.diagnostics.debug(`${root} done (skipped)`, 0);\n return { declarations: [emptyAlias(root)] };\n }\n const startedAt = context.diagnostics.now();\n const { type, aliases, withDeclaredTypes } = ROOT_TRANSFORMS[root](node, context, document);\n if (!isRootBody(type)) {\n context.diagnostics.debug(`${root} done (skipped)`, 0);\n return { declarations: [emptyAlias(root), ...aliases] };\n }\n const declaration = rootDeclaration(root, type, context.options);\n context.diagnostics.debug(`${root} done`, context.diagnostics.now() - startedAt);\n const finish =\n withDeclaredTypes &&\n ((lookup: DeclaredTypeLookup) => {\n const finished = withDeclaredTypes(lookup);\n return isRootBody(finished) ? rootDeclaration(root, finished, context.options) : declaration;\n });\n return { declarations: [declaration, ...aliases], ...(finish ? { finish } : {}) };\n}\n\n/**\n * Every root's declarations in output order. A root with `finish` gets its declaration from the\n * types of the other roots and of the footer (the `operations` interface), which exist only once\n * every root is transformed.\n */\nfunction rootsDeclarations(\n document: DocumentObject,\n context: TransformContext,\n footer: () => readonly IrDeclaration[],\n): IrDeclaration[] {\n const roots = ROOT_KEYS.map((root) => rootDeclarations(root, document, context));\n const transformed = roots.flatMap(({ declarations }) => declarations);\n if (roots.every(({ finish }) => finish === undefined)) {\n return transformed;\n }\n const lookup = declaredTypeLookup([...transformed, ...footer()]);\n return roots.flatMap(({ declarations, finish }) => {\n const [declaration, ...aliases] = declarations;\n return finish === undefined || declaration === undefined\n ? declarations\n : [finish(lookup), ...aliases];\n });\n}\n\n/**\n * The `inject` text as written (ADR-010, decision 4), without the blank lines around it. The\n * original reprinted it with the TypeScript printer; text without code printed nothing then.\n */\nfunction withoutBlankLinesAround(text: string): string {\n return text.replace(/^(?:[ \\t]*\\r?\\n)+/, \"\").trimEnd();\n}\n\n/** No footer declarations: the roots' references to `operations` stay unresolved. */\nconst NO_FOOTER = (): readonly IrDeclaration[] => [];\n\n/**\n * The document's declarations before the footer: helper types, injected code, then one root type\n * per root key with the aliases that follow it. `footer` reads the footer's declarations once the\n * roots are transformed.\n */\nexport function documentBody(\n document: DocumentObject,\n context: TransformContext,\n footer: () => readonly IrDeclaration[] = NO_FOOTER,\n): IrDeclaration[] {\n const declarations: IrDeclaration[] = [];\n if (context.options.readWriteMarkers) {\n declarations.push({ kind: \"rawDeclaration\", text: READ_WRITE_MARKER_TYPES });\n }\n const inject = withoutBlankLinesAround(context.options.inject ?? \"\");\n if (inject !== \"\") {\n declarations.push({ kind: \"rawDeclaration\", text: inject });\n }\n declarations.push(...rootsDeclarations(document, context, footer));\n return declarations;\n}\n\n/**\n * The declarations after the footer: an empty `operations` type when the footer has no\n * operations, and the `--make-paths-enum` enum.\n */\nexport function documentClosing(\n document: DocumentObject,\n context: TransformContext,\n hasOperations: boolean,\n): IrDeclaration[] {\n const declarations: IrDeclaration[] = [];\n if (!hasOperations) {\n declarations.push(emptyAlias(OPERATIONS_NAME));\n }\n if (context.options.makePathsEnum && document.paths) {\n declarations.push(apiPathsEnumDeclaration(document.paths));\n }\n return declarations;\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ 'use strict';
2
+
3
+ const FORM_STYLE = "form";
4
+ function resolvedSchema(schema, refs, seen) {
5
+ if (typeof schema !== "object" || schema === null) {
6
+ return null;
7
+ }
8
+ if (!("$ref" in schema)) {
9
+ return schema;
10
+ }
11
+ if (seen.has(schema.$ref)) {
12
+ return null;
13
+ }
14
+ const target = refs.resolve(schema.$ref);
15
+ return target === void 0 ? null : resolvedSchema(target, refs, /* @__PURE__ */ new Set([...seen, schema.$ref]));
16
+ }
17
+ function nonNullTypes(schema) {
18
+ const types = Array.isArray(schema.type) ? schema.type : [schema.type];
19
+ return types.filter((type) => type !== void 0 && type !== null && type !== "null");
20
+ }
21
+ function isObjectComposition(members, refs, seen) {
22
+ return members !== void 0 && members.length > 0 && members.every((member) => isObjectSchemaWith(member, refs, seen));
23
+ }
24
+ function isObjectSchemaWith(schema, refs, seen) {
25
+ const resolved = resolvedSchema(schema, refs, seen);
26
+ if (resolved === null) {
27
+ return false;
28
+ }
29
+ const types = nonNullTypes(resolved);
30
+ if (types.length > 0) {
31
+ return types.every((type) => type === "object");
32
+ }
33
+ return resolved.properties !== void 0 || resolved.additionalProperties !== void 0 || resolved.patternProperties !== void 0 || isObjectComposition(resolved.allOf, refs, seen) || isObjectComposition(resolved.oneOf, refs, seen) || isObjectComposition(resolved.anyOf, refs, seen);
34
+ }
35
+ function isObjectSchema(schema, refs) {
36
+ return isObjectSchemaWith(schema, refs, /* @__PURE__ */ new Set());
37
+ }
38
+ function isExplodedQueryObject(parameter, refs) {
39
+ const style = parameter.style ?? FORM_STYLE;
40
+ const explode = parameter.explode ?? style === FORM_STYLE;
41
+ return parameter.in === "query" && style === FORM_STYLE && explode && parameter.schema !== void 0 && isObjectSchema(parameter.schema, refs);
42
+ }
43
+
44
+ exports.isExplodedQueryObject = isExplodedQueryObject;
45
+ exports.isObjectSchema = isObjectSchema;
46
+ //# sourceMappingURL=exploded-query.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exploded-query.cjs","sources":["../../../../src/application/transform/document/exploded-query.ts"],"sourcesContent":["import type { ParameterObject } from \"../../../domain/openapi/parameter-object.js\";\nimport type { Schema, SchemaObject } from \"../../../domain/openapi/schema-object.js\";\nimport type { RefResolver } from \"../schema/schema-context.js\";\n\n/**\n * Exploded object query parameters (OpenAPI 3.2 §4.8.12.4, upstream #2361). A query parameter has\n * `style: form` and, with it, `explode: true` by default. An object value is then sent as its own\n * `key=value` pairs, `?page=1&limit=10`: the parameter's name is not in the URL. So with the\n * `exploded-query-objects` fix, the object's properties are keys of `query`, not one key named\n * after the parameter.\n */\n\nconst FORM_STYLE = \"form\";\n\n/** Whether a `$ref` chain has been followed already, so a cycle ends. */\ntype SeenRefs = ReadonlySet<string>;\n\nfunction resolvedSchema(schema: Schema, refs: RefResolver, seen: SeenRefs): SchemaObject | null {\n if (typeof schema !== \"object\" || schema === null) {\n return null;\n }\n if (!(\"$ref\" in schema)) {\n return schema;\n }\n if (seen.has(schema.$ref)) {\n return null;\n }\n const target = refs.resolve(schema.$ref) as Schema | undefined;\n return target === undefined\n ? null\n : resolvedSchema(target, refs, new Set([...seen, schema.$ref]));\n}\n\n/** The types of a `type` keyword other than `null`; empty when it has none. */\nfunction nonNullTypes(schema: SchemaObject): readonly unknown[] {\n const types = Array.isArray(schema.type) ? schema.type : [schema.type];\n return types.filter((type) => type !== undefined && type !== null && type !== \"null\");\n}\n\n/** Whether every member of a composition is an object schema; false for an empty list. */\nfunction isObjectComposition(\n members: readonly Schema[] | undefined,\n refs: RefResolver,\n seen: SeenRefs,\n): boolean {\n return (\n members !== undefined &&\n members.length > 0 &&\n members.every((member) => isObjectSchemaWith(member, refs, seen))\n );\n}\n\nfunction isObjectSchemaWith(schema: Schema, refs: RefResolver, seen: SeenRefs): boolean {\n const resolved = resolvedSchema(schema, refs, seen);\n if (resolved === null) {\n return false;\n }\n const types = nonNullTypes(resolved);\n if (types.length > 0) {\n return types.every((type) => type === \"object\");\n }\n return (\n resolved.properties !== undefined ||\n resolved.additionalProperties !== undefined ||\n resolved.patternProperties !== undefined ||\n isObjectComposition(resolved.allOf, refs, seen) ||\n isObjectComposition(resolved.oneOf, refs, seen) ||\n isObjectComposition(resolved.anyOf, refs, seen)\n );\n}\n\n/**\n * Whether the schema describes only objects: `type: object` (with `null` or not), or no `type`\n * and object keywords, or a composition of such schemas. A `$ref` is followed.\n */\nexport function isObjectSchema(schema: Schema, refs: RefResolver): boolean {\n return isObjectSchemaWith(schema, refs, new Set());\n}\n\n/** Whether an `in: query` parameter sends its object value as the object's own keys. */\nexport function isExplodedQueryObject(parameter: ParameterObject, refs: RefResolver): boolean {\n const style = parameter.style ?? FORM_STYLE;\n const explode = parameter.explode ?? style === FORM_STYLE;\n return (\n parameter.in === \"query\" &&\n style === FORM_STYLE &&\n explode &&\n parameter.schema !== undefined &&\n isObjectSchema(parameter.schema, refs)\n );\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ const FORM_STYLE = "form";
2
+ function resolvedSchema(schema, refs, seen) {
3
+ if (typeof schema !== "object" || schema === null) {
4
+ return null;
5
+ }
6
+ if (!("$ref" in schema)) {
7
+ return schema;
8
+ }
9
+ if (seen.has(schema.$ref)) {
10
+ return null;
11
+ }
12
+ const target = refs.resolve(schema.$ref);
13
+ return target === void 0 ? null : resolvedSchema(target, refs, /* @__PURE__ */ new Set([...seen, schema.$ref]));
14
+ }
15
+ function nonNullTypes(schema) {
16
+ const types = Array.isArray(schema.type) ? schema.type : [schema.type];
17
+ return types.filter((type) => type !== void 0 && type !== null && type !== "null");
18
+ }
19
+ function isObjectComposition(members, refs, seen) {
20
+ return members !== void 0 && members.length > 0 && members.every((member) => isObjectSchemaWith(member, refs, seen));
21
+ }
22
+ function isObjectSchemaWith(schema, refs, seen) {
23
+ const resolved = resolvedSchema(schema, refs, seen);
24
+ if (resolved === null) {
25
+ return false;
26
+ }
27
+ const types = nonNullTypes(resolved);
28
+ if (types.length > 0) {
29
+ return types.every((type) => type === "object");
30
+ }
31
+ return resolved.properties !== void 0 || resolved.additionalProperties !== void 0 || resolved.patternProperties !== void 0 || isObjectComposition(resolved.allOf, refs, seen) || isObjectComposition(resolved.oneOf, refs, seen) || isObjectComposition(resolved.anyOf, refs, seen);
32
+ }
33
+ function isObjectSchema(schema, refs) {
34
+ return isObjectSchemaWith(schema, refs, /* @__PURE__ */ new Set());
35
+ }
36
+ function isExplodedQueryObject(parameter, refs) {
37
+ const style = parameter.style ?? FORM_STYLE;
38
+ const explode = parameter.explode ?? style === FORM_STYLE;
39
+ return parameter.in === "query" && style === FORM_STYLE && explode && parameter.schema !== void 0 && isObjectSchema(parameter.schema, refs);
40
+ }
41
+
42
+ export { isExplodedQueryObject, isObjectSchema };
43
+ //# sourceMappingURL=exploded-query.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exploded-query.mjs","sources":["../../../../src/application/transform/document/exploded-query.ts"],"sourcesContent":["import type { ParameterObject } from \"../../../domain/openapi/parameter-object.js\";\nimport type { Schema, SchemaObject } from \"../../../domain/openapi/schema-object.js\";\nimport type { RefResolver } from \"../schema/schema-context.js\";\n\n/**\n * Exploded object query parameters (OpenAPI 3.2 §4.8.12.4, upstream #2361). A query parameter has\n * `style: form` and, with it, `explode: true` by default. An object value is then sent as its own\n * `key=value` pairs, `?page=1&limit=10`: the parameter's name is not in the URL. So with the\n * `exploded-query-objects` fix, the object's properties are keys of `query`, not one key named\n * after the parameter.\n */\n\nconst FORM_STYLE = \"form\";\n\n/** Whether a `$ref` chain has been followed already, so a cycle ends. */\ntype SeenRefs = ReadonlySet<string>;\n\nfunction resolvedSchema(schema: Schema, refs: RefResolver, seen: SeenRefs): SchemaObject | null {\n if (typeof schema !== \"object\" || schema === null) {\n return null;\n }\n if (!(\"$ref\" in schema)) {\n return schema;\n }\n if (seen.has(schema.$ref)) {\n return null;\n }\n const target = refs.resolve(schema.$ref) as Schema | undefined;\n return target === undefined\n ? null\n : resolvedSchema(target, refs, new Set([...seen, schema.$ref]));\n}\n\n/** The types of a `type` keyword other than `null`; empty when it has none. */\nfunction nonNullTypes(schema: SchemaObject): readonly unknown[] {\n const types = Array.isArray(schema.type) ? schema.type : [schema.type];\n return types.filter((type) => type !== undefined && type !== null && type !== \"null\");\n}\n\n/** Whether every member of a composition is an object schema; false for an empty list. */\nfunction isObjectComposition(\n members: readonly Schema[] | undefined,\n refs: RefResolver,\n seen: SeenRefs,\n): boolean {\n return (\n members !== undefined &&\n members.length > 0 &&\n members.every((member) => isObjectSchemaWith(member, refs, seen))\n );\n}\n\nfunction isObjectSchemaWith(schema: Schema, refs: RefResolver, seen: SeenRefs): boolean {\n const resolved = resolvedSchema(schema, refs, seen);\n if (resolved === null) {\n return false;\n }\n const types = nonNullTypes(resolved);\n if (types.length > 0) {\n return types.every((type) => type === \"object\");\n }\n return (\n resolved.properties !== undefined ||\n resolved.additionalProperties !== undefined ||\n resolved.patternProperties !== undefined ||\n isObjectComposition(resolved.allOf, refs, seen) ||\n isObjectComposition(resolved.oneOf, refs, seen) ||\n isObjectComposition(resolved.anyOf, refs, seen)\n );\n}\n\n/**\n * Whether the schema describes only objects: `type: object` (with `null` or not), or no `type`\n * and object keywords, or a composition of such schemas. A `$ref` is followed.\n */\nexport function isObjectSchema(schema: Schema, refs: RefResolver): boolean {\n return isObjectSchemaWith(schema, refs, new Set());\n}\n\n/** Whether an `in: query` parameter sends its object value as the object's own keys. */\nexport function isExplodedQueryObject(parameter: ParameterObject, refs: RefResolver): boolean {\n const style = parameter.style ?? FORM_STYLE;\n const explode = parameter.explode ?? style === FORM_STYLE;\n return (\n parameter.in === \"query\" &&\n style === FORM_STYLE &&\n explode &&\n parameter.schema !== undefined &&\n isObjectSchema(parameter.schema, refs)\n );\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ 'use strict';
2
+
3
+ const GLOBAL_TYPE_NAMES = /* @__PURE__ */ new Set([
4
+ "Array",
5
+ "Blob",
6
+ "Exclude",
7
+ "Extract",
8
+ "NonNullable",
9
+ "Omit",
10
+ "Partial",
11
+ "Pick",
12
+ "Readonly",
13
+ "ReadonlyArray",
14
+ "Record",
15
+ "Required"
16
+ ]);
17
+ const GENERIC_USE = /\b([A-Z][A-Za-z]*)\s*</g;
18
+ const SKIPPED_KEYS = /* @__PURE__ */ new Set(["origin", "comments"]);
19
+ function isObject(value) {
20
+ return typeof value === "object" && value !== null;
21
+ }
22
+ function addTextUses(text, used) {
23
+ for (const match of text.matchAll(GENERIC_USE)) {
24
+ const name = match[1] ?? "";
25
+ if (GLOBAL_TYPE_NAMES.has(name)) {
26
+ used.add(name);
27
+ }
28
+ }
29
+ }
30
+ function addNodeUses(node, used) {
31
+ if (node.kind === "reference" && typeof node.name === "string") {
32
+ if (GLOBAL_TYPE_NAMES.has(node.name)) {
33
+ used.add(node.name);
34
+ }
35
+ } else if ((node.kind === "raw" || node.kind === "rawDeclaration") && typeof node.text === "string") {
36
+ addTextUses(node.text, used);
37
+ }
38
+ }
39
+ function visit(value, used) {
40
+ if (Array.isArray(value)) {
41
+ for (const item of value) {
42
+ visit(item, used);
43
+ }
44
+ return;
45
+ }
46
+ if (!isObject(value)) {
47
+ return;
48
+ }
49
+ addNodeUses(value, used);
50
+ for (const [key, child] of Object.entries(value)) {
51
+ if (!SKIPPED_KEYS.has(key)) {
52
+ visit(child, used);
53
+ }
54
+ }
55
+ }
56
+ function globalTypeReferences(declarations) {
57
+ const used = /* @__PURE__ */ new Set();
58
+ visit(declarations, used);
59
+ return used;
60
+ }
61
+
62
+ exports.globalTypeReferences = globalTypeReferences;
63
+ //# sourceMappingURL=global-type-references.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-type-references.cjs","sources":["../../../../src/application/transform/document/global-type-references.ts"],"sourcesContent":["import type { IrDeclaration } from \"../../../domain/ir/nodes.js\";\n\n/**\n * The TypeScript global types that generated code can refer to: in references (`Record<string,\n * never>`, `Omit<…>`, the `Blob` of `--binary-as-blob`) and in the text of footer helpers\n * (`Exclude<…>`, `Readonly<…>`). A module declaration of the same name shadows the global: every\n * use of it then fails to compile, or silently names the module's type (`Blob`).\n */\nconst GLOBAL_TYPE_NAMES: ReadonlySet<string> = new Set([\n \"Array\",\n \"Blob\",\n \"Exclude\",\n \"Extract\",\n \"NonNullable\",\n \"Omit\",\n \"Partial\",\n \"Pick\",\n \"Readonly\",\n \"ReadonlyArray\",\n \"Record\",\n \"Required\",\n]);\n\nconst GENERIC_USE = /\\b([A-Z][A-Za-z]*)\\s*</g;\n\n/** `origin` holds the outside node a raw type was printed from; it is not part of the output. */\nconst SKIPPED_KEYS: ReadonlySet<string> = new Set([\"origin\", \"comments\"]);\n\nfunction isObject(value: unknown): value is Readonly<Record<string, unknown>> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction addTextUses(text: string, used: Set<string>): void {\n for (const match of text.matchAll(GENERIC_USE)) {\n const name = match[1] ?? \"\";\n if (GLOBAL_TYPE_NAMES.has(name)) {\n used.add(name);\n }\n }\n}\n\nfunction addNodeUses(node: Readonly<Record<string, unknown>>, used: Set<string>): void {\n if (node.kind === \"reference\" && typeof node.name === \"string\") {\n if (GLOBAL_TYPE_NAMES.has(node.name)) {\n used.add(node.name);\n }\n } else if (\n (node.kind === \"raw\" || node.kind === \"rawDeclaration\") &&\n typeof node.text === \"string\"\n ) {\n addTextUses(node.text, used);\n }\n}\n\nfunction visit(value: unknown, used: Set<string>): void {\n if (Array.isArray(value)) {\n for (const item of value) {\n visit(item, used);\n }\n return;\n }\n if (!isObject(value)) {\n return;\n }\n addNodeUses(value, used);\n for (const [key, child] of Object.entries(value)) {\n if (!SKIPPED_KEYS.has(key)) {\n visit(child, used);\n }\n }\n}\n\n/** The TypeScript global type names that the declarations refer to. */\nexport function globalTypeReferences(declarations: readonly IrDeclaration[]): Set<string> {\n const used = new Set<string>();\n visit(declarations, used);\n return used;\n}\n"],"names":[],"mappings":";;AAQA,MAAM,iBAAA,uBAA6C,GAAA,CAAI;AAAA,EACrD,OAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,aAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA,eAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,MAAM,WAAA,GAAc,yBAAA;AAGpB,MAAM,+BAAoC,IAAI,GAAA,CAAI,CAAC,QAAA,EAAU,UAAU,CAAC,CAAA;AAExE,SAAS,SAAS,KAAA,EAA4D;AAC5E,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA;AAChD;AAEA,SAAS,WAAA,CAAY,MAAc,IAAA,EAAyB;AAC1D,EAAA,KAAA,MAAW,KAAA,IAAS,IAAA,CAAK,QAAA,CAAS,WAAW,CAAA,EAAG;AAC9C,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,CAAC,CAAA,IAAK,EAAA;AACzB,IAAA,IAAI,iBAAA,CAAkB,GAAA,CAAI,IAAI,CAAA,EAAG;AAC/B,MAAA,IAAA,CAAK,IAAI,IAAI,CAAA;AAAA,IACf;AAAA,EACF;AACF;AAEA,SAAS,WAAA,CAAY,MAAyC,IAAA,EAAyB;AACrF,EAAA,IAAI,KAAK,IAAA,KAAS,WAAA,IAAe,OAAO,IAAA,CAAK,SAAS,QAAA,EAAU;AAC9D,IAAA,IAAI,iBAAA,CAAkB,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,EAAG;AACpC,MAAA,IAAA,CAAK,GAAA,CAAI,KAAK,IAAI,CAAA;AAAA,IACpB;AAAA,EACF,CAAA,MAAA,IAAA,CACG,IAAA,CAAK,IAAA,KAAS,KAAA,IAAS,IAAA,CAAK,SAAS,gBAAA,KACtC,OAAO,IAAA,CAAK,IAAA,KAAS,QAAA,EACrB;AACA,IAAA,WAAA,CAAY,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,EAC7B;AACF;AAEA,SAAS,KAAA,CAAM,OAAgB,IAAA,EAAyB;AACtD,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,KAAA,CAAM,MAAM,IAAI,CAAA;AAAA,IAClB;AACA,IAAA;AAAA,EACF;AACA,EAAA,IAAI,CAAC,QAAA,CAAS,KAAK,CAAA,EAAG;AACpB,IAAA;AAAA,EACF;AACA,EAAA,WAAA,CAAY,OAAO,IAAI,CAAA;AACvB,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAChD,IAAA,IAAI,CAAC,YAAA,CAAa,GAAA,CAAI,GAAG,CAAA,EAAG;AAC1B,MAAA,KAAA,CAAM,OAAO,IAAI,CAAA;AAAA,IACnB;AAAA,EACF;AACF;AAGO,SAAS,qBAAqB,YAAA,EAAqD;AACxF,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,KAAA,CAAM,cAAc,IAAI,CAAA;AACxB,EAAA,OAAO,IAAA;AACT;;"}
@@ -0,0 +1,61 @@
1
+ const GLOBAL_TYPE_NAMES = /* @__PURE__ */ new Set([
2
+ "Array",
3
+ "Blob",
4
+ "Exclude",
5
+ "Extract",
6
+ "NonNullable",
7
+ "Omit",
8
+ "Partial",
9
+ "Pick",
10
+ "Readonly",
11
+ "ReadonlyArray",
12
+ "Record",
13
+ "Required"
14
+ ]);
15
+ const GENERIC_USE = /\b([A-Z][A-Za-z]*)\s*</g;
16
+ const SKIPPED_KEYS = /* @__PURE__ */ new Set(["origin", "comments"]);
17
+ function isObject(value) {
18
+ return typeof value === "object" && value !== null;
19
+ }
20
+ function addTextUses(text, used) {
21
+ for (const match of text.matchAll(GENERIC_USE)) {
22
+ const name = match[1] ?? "";
23
+ if (GLOBAL_TYPE_NAMES.has(name)) {
24
+ used.add(name);
25
+ }
26
+ }
27
+ }
28
+ function addNodeUses(node, used) {
29
+ if (node.kind === "reference" && typeof node.name === "string") {
30
+ if (GLOBAL_TYPE_NAMES.has(node.name)) {
31
+ used.add(node.name);
32
+ }
33
+ } else if ((node.kind === "raw" || node.kind === "rawDeclaration") && typeof node.text === "string") {
34
+ addTextUses(node.text, used);
35
+ }
36
+ }
37
+ function visit(value, used) {
38
+ if (Array.isArray(value)) {
39
+ for (const item of value) {
40
+ visit(item, used);
41
+ }
42
+ return;
43
+ }
44
+ if (!isObject(value)) {
45
+ return;
46
+ }
47
+ addNodeUses(value, used);
48
+ for (const [key, child] of Object.entries(value)) {
49
+ if (!SKIPPED_KEYS.has(key)) {
50
+ visit(child, used);
51
+ }
52
+ }
53
+ }
54
+ function globalTypeReferences(declarations) {
55
+ const used = /* @__PURE__ */ new Set();
56
+ visit(declarations, used);
57
+ return used;
58
+ }
59
+
60
+ export { globalTypeReferences };
61
+ //# sourceMappingURL=global-type-references.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-type-references.mjs","sources":["../../../../src/application/transform/document/global-type-references.ts"],"sourcesContent":["import type { IrDeclaration } from \"../../../domain/ir/nodes.js\";\n\n/**\n * The TypeScript global types that generated code can refer to: in references (`Record<string,\n * never>`, `Omit<…>`, the `Blob` of `--binary-as-blob`) and in the text of footer helpers\n * (`Exclude<…>`, `Readonly<…>`). A module declaration of the same name shadows the global: every\n * use of it then fails to compile, or silently names the module's type (`Blob`).\n */\nconst GLOBAL_TYPE_NAMES: ReadonlySet<string> = new Set([\n \"Array\",\n \"Blob\",\n \"Exclude\",\n \"Extract\",\n \"NonNullable\",\n \"Omit\",\n \"Partial\",\n \"Pick\",\n \"Readonly\",\n \"ReadonlyArray\",\n \"Record\",\n \"Required\",\n]);\n\nconst GENERIC_USE = /\\b([A-Z][A-Za-z]*)\\s*</g;\n\n/** `origin` holds the outside node a raw type was printed from; it is not part of the output. */\nconst SKIPPED_KEYS: ReadonlySet<string> = new Set([\"origin\", \"comments\"]);\n\nfunction isObject(value: unknown): value is Readonly<Record<string, unknown>> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction addTextUses(text: string, used: Set<string>): void {\n for (const match of text.matchAll(GENERIC_USE)) {\n const name = match[1] ?? \"\";\n if (GLOBAL_TYPE_NAMES.has(name)) {\n used.add(name);\n }\n }\n}\n\nfunction addNodeUses(node: Readonly<Record<string, unknown>>, used: Set<string>): void {\n if (node.kind === \"reference\" && typeof node.name === \"string\") {\n if (GLOBAL_TYPE_NAMES.has(node.name)) {\n used.add(node.name);\n }\n } else if (\n (node.kind === \"raw\" || node.kind === \"rawDeclaration\") &&\n typeof node.text === \"string\"\n ) {\n addTextUses(node.text, used);\n }\n}\n\nfunction visit(value: unknown, used: Set<string>): void {\n if (Array.isArray(value)) {\n for (const item of value) {\n visit(item, used);\n }\n return;\n }\n if (!isObject(value)) {\n return;\n }\n addNodeUses(value, used);\n for (const [key, child] of Object.entries(value)) {\n if (!SKIPPED_KEYS.has(key)) {\n visit(child, used);\n }\n }\n}\n\n/** The TypeScript global type names that the declarations refer to. */\nexport function globalTypeReferences(declarations: readonly IrDeclaration[]): Set<string> {\n const used = new Set<string>();\n visit(declarations, used);\n return used;\n}\n"],"names":[],"mappings":"AAQA,MAAM,iBAAA,uBAA6C,GAAA,CAAI;AAAA,EACrD,OAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,aAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA,eAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,MAAM,WAAA,GAAc,yBAAA;AAGpB,MAAM,+BAAoC,IAAI,GAAA,CAAI,CAAC,QAAA,EAAU,UAAU,CAAC,CAAA;AAExE,SAAS,SAAS,KAAA,EAA4D;AAC5E,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA;AAChD;AAEA,SAAS,WAAA,CAAY,MAAc,IAAA,EAAyB;AAC1D,EAAA,KAAA,MAAW,KAAA,IAAS,IAAA,CAAK,QAAA,CAAS,WAAW,CAAA,EAAG;AAC9C,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,CAAC,CAAA,IAAK,EAAA;AACzB,IAAA,IAAI,iBAAA,CAAkB,GAAA,CAAI,IAAI,CAAA,EAAG;AAC/B,MAAA,IAAA,CAAK,IAAI,IAAI,CAAA;AAAA,IACf;AAAA,EACF;AACF;AAEA,SAAS,WAAA,CAAY,MAAyC,IAAA,EAAyB;AACrF,EAAA,IAAI,KAAK,IAAA,KAAS,WAAA,IAAe,OAAO,IAAA,CAAK,SAAS,QAAA,EAAU;AAC9D,IAAA,IAAI,iBAAA,CAAkB,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,EAAG;AACpC,MAAA,IAAA,CAAK,GAAA,CAAI,KAAK,IAAI,CAAA;AAAA,IACpB;AAAA,EACF,CAAA,MAAA,IAAA,CACG,IAAA,CAAK,IAAA,KAAS,KAAA,IAAS,IAAA,CAAK,SAAS,gBAAA,KACtC,OAAO,IAAA,CAAK,IAAA,KAAS,QAAA,EACrB;AACA,IAAA,WAAA,CAAY,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,EAC7B;AACF;AAEA,SAAS,KAAA,CAAM,OAAgB,IAAA,EAAyB;AACtD,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,KAAA,CAAM,MAAM,IAAI,CAAA;AAAA,IAClB;AACA,IAAA;AAAA,EACF;AACA,EAAA,IAAI,CAAC,QAAA,CAAS,KAAK,CAAA,EAAG;AACpB,IAAA;AAAA,EACF;AACA,EAAA,WAAA,CAAY,OAAO,IAAI,CAAA;AACvB,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAChD,IAAA,IAAI,CAAC,YAAA,CAAa,GAAA,CAAI,GAAG,CAAA,EAAG;AAC1B,MAAA,KAAA,CAAM,OAAO,IAAI,CAAA;AAAA,IACnB;AAAA,EACF;AACF;AAGO,SAAS,qBAAqB,YAAA,EAAqD;AACxF,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,KAAA,CAAM,cAAc,IAAI,CAAA;AACxB,EAAA,OAAO,IAAA;AACT;;"}
@@ -0,0 +1,27 @@
1
+ 'use strict';
2
+
3
+ const constructors = require('../../../domain/ir/constructors.cjs');
4
+ const jsonPointer = require('../../../domain/openapi/json-pointer.cjs');
5
+ const documentEntries = require('../document-entries.cjs');
6
+ const schemaTransform = require('../schema/schema-transform.cjs');
7
+ const sharedTypes = require('../shared-types.cjs');
8
+ const documentMember = require('./document-member.cjs');
9
+ const mediaType = require('./media-type.cjs');
10
+
11
+ function headerType(header, location, context) {
12
+ if (header.schema) {
13
+ return schemaTransform.transformSchema(header.schema, location, context);
14
+ }
15
+ if (!header.content) {
16
+ return sharedTypes.UNKNOWN_TYPE;
17
+ }
18
+ const members = documentEntries.documentEntries(header.content, context.options).map(([contentType, entry]) => {
19
+ const path = `${location.path ?? "#"}/${jsonPointer.escapePointerSegment(contentType)}`;
20
+ const type = mediaType.contentEntryType(entry, { ...location, path }, context);
21
+ return documentMember.documentMember(contentType, type, entry, { isReadonly: context.options.immutable });
22
+ });
23
+ return constructors.irObject(members);
24
+ }
25
+
26
+ exports.headerType = headerType;
27
+ //# sourceMappingURL=header.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header.cjs","sources":["../../../../src/application/transform/document/header.ts"],"sourcesContent":["import { irObject } from \"../../../domain/ir/constructors.js\";\nimport type { IrType } from \"../../../domain/ir/nodes.js\";\nimport type { HeaderObject } from \"../../../domain/openapi/header-object.js\";\nimport { escapePointerSegment } from \"../../../domain/openapi/json-pointer.js\";\nimport { documentEntries } from \"../document-entries.js\";\nimport type { SchemaContext, SchemaLocation } from \"../schema/schema-context.js\";\nimport { transformSchema } from \"../schema/schema-transform.js\";\nimport { UNKNOWN_TYPE } from \"../shared-types.js\";\nimport { documentMember } from \"./document-member.js\";\nimport { contentEntryType } from \"./media-type.js\";\n\n/**\n * A header's type (OpenAPI 3.1 §4.8.21): its schema, else an object with one property per media\n * type in `content`, else `unknown`.\n */\nexport function headerType(\n header: HeaderObject,\n location: SchemaLocation,\n context: SchemaContext,\n): IrType {\n if (header.schema) {\n return transformSchema(header.schema, location, context);\n }\n if (!header.content) {\n return UNKNOWN_TYPE;\n }\n const members = documentEntries(header.content, context.options).map(([contentType, entry]) => {\n // Unlike other content maps, the original joins this path by hand: a missing path is `#`.\n const path = `${location.path ?? \"#\"}/${escapePointerSegment(contentType)}`;\n const type = contentEntryType(entry, { ...location, path }, context);\n return documentMember(contentType, type, entry, { isReadonly: context.options.immutable });\n });\n return irObject(members);\n}\n"],"names":["transformSchema","UNKNOWN_TYPE","documentEntries","escapePointerSegment","contentEntryType","documentMember","irObject"],"mappings":";;;;;;;;;;AAeO,SAAS,UAAA,CACd,MAAA,EACA,QAAA,EACA,OAAA,EACQ;AACR,EAAA,IAAI,OAAO,MAAA,EAAQ;AACjB,IAAA,OAAOA,+BAAA,CAAgB,MAAA,CAAO,MAAA,EAAQ,QAAA,EAAU,OAAO,CAAA;AAAA,EACzD;AACA,EAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,IAAA,OAAOC,wBAAA;AAAA,EACT;AACA,EAAA,MAAM,OAAA,GAAUC,+BAAA,CAAgB,MAAA,CAAO,OAAA,EAAS,OAAA,CAAQ,OAAO,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,WAAA,EAAa,KAAK,CAAA,KAAM;AAE7F,IAAA,MAAM,IAAA,GAAO,GAAG,QAAA,CAAS,IAAA,IAAQ,GAAG,CAAA,CAAA,EAAIC,gCAAA,CAAqB,WAAW,CAAC,CAAA,CAAA;AACzE,IAAA,MAAM,IAAA,GAAOC,2BAAiB,KAAA,EAAO,EAAE,GAAG,QAAA,EAAU,IAAA,IAAQ,OAAO,CAAA;AACnE,IAAA,OAAOC,6BAAA,CAAe,aAAa,IAAA,EAAM,KAAA,EAAO,EAAE,UAAA,EAAY,OAAA,CAAQ,OAAA,CAAQ,SAAA,EAAW,CAAA;AAAA,EAC3F,CAAC,CAAA;AACD,EAAA,OAAOC,sBAAS,OAAO,CAAA;AACzB;;"}
@@ -0,0 +1,25 @@
1
+ import { irObject } from '../../../domain/ir/constructors.mjs';
2
+ import { escapePointerSegment } from '../../../domain/openapi/json-pointer.mjs';
3
+ import { documentEntries } from '../document-entries.mjs';
4
+ import { transformSchema } from '../schema/schema-transform.mjs';
5
+ import { UNKNOWN_TYPE } from '../shared-types.mjs';
6
+ import { documentMember } from './document-member.mjs';
7
+ import { contentEntryType } from './media-type.mjs';
8
+
9
+ function headerType(header, location, context) {
10
+ if (header.schema) {
11
+ return transformSchema(header.schema, location, context);
12
+ }
13
+ if (!header.content) {
14
+ return UNKNOWN_TYPE;
15
+ }
16
+ const members = documentEntries(header.content, context.options).map(([contentType, entry]) => {
17
+ const path = `${location.path ?? "#"}/${escapePointerSegment(contentType)}`;
18
+ const type = contentEntryType(entry, { ...location, path }, context);
19
+ return documentMember(contentType, type, entry, { isReadonly: context.options.immutable });
20
+ });
21
+ return irObject(members);
22
+ }
23
+
24
+ export { headerType };
25
+ //# sourceMappingURL=header.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header.mjs","sources":["../../../../src/application/transform/document/header.ts"],"sourcesContent":["import { irObject } from \"../../../domain/ir/constructors.js\";\nimport type { IrType } from \"../../../domain/ir/nodes.js\";\nimport type { HeaderObject } from \"../../../domain/openapi/header-object.js\";\nimport { escapePointerSegment } from \"../../../domain/openapi/json-pointer.js\";\nimport { documentEntries } from \"../document-entries.js\";\nimport type { SchemaContext, SchemaLocation } from \"../schema/schema-context.js\";\nimport { transformSchema } from \"../schema/schema-transform.js\";\nimport { UNKNOWN_TYPE } from \"../shared-types.js\";\nimport { documentMember } from \"./document-member.js\";\nimport { contentEntryType } from \"./media-type.js\";\n\n/**\n * A header's type (OpenAPI 3.1 §4.8.21): its schema, else an object with one property per media\n * type in `content`, else `unknown`.\n */\nexport function headerType(\n header: HeaderObject,\n location: SchemaLocation,\n context: SchemaContext,\n): IrType {\n if (header.schema) {\n return transformSchema(header.schema, location, context);\n }\n if (!header.content) {\n return UNKNOWN_TYPE;\n }\n const members = documentEntries(header.content, context.options).map(([contentType, entry]) => {\n // Unlike other content maps, the original joins this path by hand: a missing path is `#`.\n const path = `${location.path ?? \"#\"}/${escapePointerSegment(contentType)}`;\n const type = contentEntryType(entry, { ...location, path }, context);\n return documentMember(contentType, type, entry, { isReadonly: context.options.immutable });\n });\n return irObject(members);\n}\n"],"names":[],"mappings":";;;;;;;;AAeO,SAAS,UAAA,CACd,MAAA,EACA,QAAA,EACA,OAAA,EACQ;AACR,EAAA,IAAI,OAAO,MAAA,EAAQ;AACjB,IAAA,OAAO,eAAA,CAAgB,MAAA,CAAO,MAAA,EAAQ,QAAA,EAAU,OAAO,CAAA;AAAA,EACzD;AACA,EAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,IAAA,OAAO,YAAA;AAAA,EACT;AACA,EAAA,MAAM,OAAA,GAAU,eAAA,CAAgB,MAAA,CAAO,OAAA,EAAS,OAAA,CAAQ,OAAO,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,WAAA,EAAa,KAAK,CAAA,KAAM;AAE7F,IAAA,MAAM,IAAA,GAAO,GAAG,QAAA,CAAS,IAAA,IAAQ,GAAG,CAAA,CAAA,EAAI,oBAAA,CAAqB,WAAW,CAAC,CAAA,CAAA;AACzE,IAAA,MAAM,IAAA,GAAO,iBAAiB,KAAA,EAAO,EAAE,GAAG,QAAA,EAAU,IAAA,IAAQ,OAAO,CAAA;AACnE,IAAA,OAAO,cAAA,CAAe,aAAa,IAAA,EAAM,KAAA,EAAO,EAAE,UAAA,EAAY,OAAA,CAAQ,OAAA,CAAQ,SAAA,EAAW,CAAA;AAAA,EAC3F,CAAC,CAAA;AACD,EAAA,OAAO,SAAS,OAAO,CAAA;AACzB;;"}
@@ -0,0 +1,96 @@
1
+ 'use strict';
2
+
3
+ const componentsObject = require('../../../domain/openapi/components-object.cjs');
4
+ const documentEntries = require('../document-entries.cjs');
5
+
6
+ const UNTYPED_KEYS = /* @__PURE__ */ new Set([
7
+ "callbacks",
8
+ "discriminator",
9
+ "example",
10
+ "examples",
11
+ "externalDocs",
12
+ "links",
13
+ "security",
14
+ "securitySchemes",
15
+ "servers",
16
+ "xml"
17
+ ]);
18
+ const EXTENSION_PREFIX = "x-";
19
+ const RESOLVED_ENTRY_KEYS = /* @__PURE__ */ new Set([
20
+ "properties",
21
+ "parameters",
22
+ "get",
23
+ "put",
24
+ "post",
25
+ "delete",
26
+ "options",
27
+ "head",
28
+ "patch",
29
+ "trace",
30
+ "query"
31
+ ]);
32
+ const COMPONENTS_PREFIX = "#/components/";
33
+ function isObject(value) {
34
+ return typeof value === "object" && value !== null;
35
+ }
36
+ function refOf(value) {
37
+ return isObject(value) && typeof value.$ref === "string" ? value.$ref : void 0;
38
+ }
39
+ function isDroppedEntry(value, scan) {
40
+ const ref = refOf(value);
41
+ return documentEntries.isDeprecated(value) || ref !== void 0 && documentEntries.isDeprecated(scan.refs.resolve(ref));
42
+ }
43
+ function visitRef(ref, scan) {
44
+ const target = ref.startsWith(COMPONENTS_PREFIX) ? scan.refs.resolve(ref) : void 0;
45
+ if (isObject(target) && documentEntries.isDeprecated(target) && !scan.kept.has(target)) {
46
+ scan.kept.add(target);
47
+ visitContents(target, scan);
48
+ }
49
+ }
50
+ function visitEntries(value, scan) {
51
+ for (const entry of Array.isArray(value) ? value : Object.values(value)) {
52
+ if (!isDroppedEntry(entry, scan)) {
53
+ visit(entry, scan);
54
+ }
55
+ }
56
+ }
57
+ function visit(node, scan) {
58
+ if (Array.isArray(node)) {
59
+ for (const item of node) {
60
+ visit(item, scan);
61
+ }
62
+ } else if (isObject(node) && !documentEntries.isDeprecated(node)) {
63
+ visitContents(node, scan);
64
+ }
65
+ }
66
+ function visitContents(node, scan) {
67
+ const ref = refOf(node);
68
+ if (ref !== void 0) {
69
+ visitRef(ref, scan);
70
+ }
71
+ for (const [key, value] of Object.entries(node)) {
72
+ if (UNTYPED_KEYS.has(key) || key.startsWith(EXTENSION_PREFIX) || !isObject(value)) {
73
+ continue;
74
+ }
75
+ if (RESOLVED_ENTRY_KEYS.has(key)) {
76
+ visitEntries(key === "properties" || key === "parameters" ? value : [value], scan);
77
+ } else {
78
+ visit(value, scan);
79
+ }
80
+ }
81
+ }
82
+ function keptComponentEntries(components) {
83
+ const kinds = [...componentsObject.COMPONENT_KINDS, ...componentsObject.DECLARED_COMPONENT_KINDS];
84
+ return kinds.flatMap(
85
+ (kind) => Object.values(components?.[kind] ?? {}).filter((item) => !documentEntries.isDeprecated(item))
86
+ );
87
+ }
88
+ function keptDeprecatedComponents(document, refs) {
89
+ const scan = { refs, kept: /* @__PURE__ */ new Set() };
90
+ visit([document.paths, document.webhooks, document.$defs], scan);
91
+ visit(keptComponentEntries(document.components), scan);
92
+ return scan.kept;
93
+ }
94
+
95
+ exports.keptDeprecatedComponents = keptDeprecatedComponents;
96
+ //# sourceMappingURL=kept-deprecated.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kept-deprecated.cjs","sources":["../../../../src/application/transform/document/kept-deprecated.ts"],"sourcesContent":["import {\n COMPONENT_KINDS,\n type ComponentsObject,\n DECLARED_COMPONENT_KINDS,\n} from \"../../../domain/openapi/components-object.js\";\nimport type { DocumentObject } from \"../../../domain/openapi/document-object.js\";\nimport { isDeprecated } from \"../document-entries.js\";\nimport type { RefResolver } from \"../schema/schema-context.js\";\n\n/**\n * `--exclude-deprecated` and references (roadmap R10.3, backlog 29). A deprecated component is\n * left out, but a kept schema may still point to it (an array's `items`, say), and the output then\n * names a missing `components` key. This scan finds the deprecated components that the kept output\n * references, so they are kept too. It follows the generator's rules: a property, parameter or\n * operation whose (resolved) object is deprecated is dropped, so its `$ref` does not count. Keys\n * that are not typed are not followed, so a component they name stays out, as before.\n */\n\n/** Keys whose contents the generator does not type. */\nconst UNTYPED_KEYS: ReadonlySet<string> = new Set([\n \"callbacks\",\n \"discriminator\",\n \"example\",\n \"examples\",\n \"externalDocs\",\n \"links\",\n \"security\",\n \"securitySchemes\",\n \"servers\",\n \"xml\",\n]);\nconst EXTENSION_PREFIX = \"x-\";\n/** Keys whose entries the generator drops when the entry or its `$ref` target is deprecated. */\nconst RESOLVED_ENTRY_KEYS: ReadonlySet<string> = new Set([\n \"properties\",\n \"parameters\",\n \"get\",\n \"put\",\n \"post\",\n \"delete\",\n \"options\",\n \"head\",\n \"patch\",\n \"trace\",\n \"query\",\n]);\nconst COMPONENTS_PREFIX = \"#/components/\";\n\ninterface Scan {\n readonly refs: RefResolver;\n /** The deprecated components to keep, as the document's own objects. */\n readonly kept: Set<object>;\n}\n\nfunction isObject(value: unknown): value is Readonly<Record<string, unknown>> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction refOf(value: unknown): string | undefined {\n return isObject(value) && typeof value.$ref === \"string\" ? value.$ref : undefined;\n}\n\n/** Whether a dropped-when-deprecated entry is dropped: its own or its target's `deprecated`. */\nfunction isDroppedEntry(value: unknown, scan: Scan): boolean {\n const ref = refOf(value);\n return isDeprecated(value) || (ref !== undefined && isDeprecated(scan.refs.resolve(ref)));\n}\n\n/** A `$ref` to a deprecated component keeps it, and the component is scanned once. */\nfunction visitRef(ref: string, scan: Scan): void {\n const target = ref.startsWith(COMPONENTS_PREFIX) ? scan.refs.resolve(ref) : undefined;\n if (isObject(target) && isDeprecated(target) && !scan.kept.has(target)) {\n scan.kept.add(target);\n visitContents(target, scan);\n }\n}\n\nfunction visitEntries(value: unknown, scan: Scan): void {\n for (const entry of Array.isArray(value) ? value : Object.values(value as object)) {\n if (!isDroppedEntry(entry, scan)) {\n visit(entry, scan);\n }\n }\n}\n\n/** A node of kept output; a deprecated object here is dropped, so it is not followed. */\nfunction visit(node: unknown, scan: Scan): void {\n if (Array.isArray(node)) {\n for (const item of node) {\n visit(item, scan);\n }\n } else if (isObject(node) && !isDeprecated(node)) {\n visitContents(node, scan);\n }\n}\n\n/** The `$ref` and the typed keys of an object. */\nfunction visitContents(node: Readonly<Record<string, unknown>>, scan: Scan): void {\n const ref = refOf(node);\n if (ref !== undefined) {\n visitRef(ref, scan);\n }\n for (const [key, value] of Object.entries(node)) {\n if (UNTYPED_KEYS.has(key) || key.startsWith(EXTENSION_PREFIX) || !isObject(value)) {\n continue;\n }\n if (RESOLVED_ENTRY_KEYS.has(key)) {\n visitEntries(key === \"properties\" || key === \"parameters\" ? value : [value], scan);\n } else {\n visit(value, scan);\n }\n }\n}\n\n/** The kept (not deprecated) entries of the typed component kinds. */\nfunction keptComponentEntries(components: ComponentsObject | undefined): unknown[] {\n const kinds = [...COMPONENT_KINDS, ...DECLARED_COMPONENT_KINDS];\n return kinds.flatMap((kind) =>\n Object.values(components?.[kind] ?? {}).filter((item) => !isDeprecated(item)),\n );\n}\n\n/**\n * The deprecated components that kept output references, as the objects of `document.components`\n * (the resolver returns those), so names that need escaping in a `$ref` match too.\n */\nexport function keptDeprecatedComponents(\n document: DocumentObject,\n refs: RefResolver,\n): ReadonlySet<object> {\n const scan: Scan = { refs, kept: new Set() };\n visit([document.paths, document.webhooks, document.$defs], scan);\n visit(keptComponentEntries(document.components), scan);\n return scan.kept;\n}\n"],"names":["isDeprecated","COMPONENT_KINDS","DECLARED_COMPONENT_KINDS"],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ import { COMPONENT_KINDS, DECLARED_COMPONENT_KINDS } from '../../../domain/openapi/components-object.mjs';
2
+ import { isDeprecated } from '../document-entries.mjs';
3
+
4
+ const UNTYPED_KEYS = /* @__PURE__ */ new Set([
5
+ "callbacks",
6
+ "discriminator",
7
+ "example",
8
+ "examples",
9
+ "externalDocs",
10
+ "links",
11
+ "security",
12
+ "securitySchemes",
13
+ "servers",
14
+ "xml"
15
+ ]);
16
+ const EXTENSION_PREFIX = "x-";
17
+ const RESOLVED_ENTRY_KEYS = /* @__PURE__ */ new Set([
18
+ "properties",
19
+ "parameters",
20
+ "get",
21
+ "put",
22
+ "post",
23
+ "delete",
24
+ "options",
25
+ "head",
26
+ "patch",
27
+ "trace",
28
+ "query"
29
+ ]);
30
+ const COMPONENTS_PREFIX = "#/components/";
31
+ function isObject(value) {
32
+ return typeof value === "object" && value !== null;
33
+ }
34
+ function refOf(value) {
35
+ return isObject(value) && typeof value.$ref === "string" ? value.$ref : void 0;
36
+ }
37
+ function isDroppedEntry(value, scan) {
38
+ const ref = refOf(value);
39
+ return isDeprecated(value) || ref !== void 0 && isDeprecated(scan.refs.resolve(ref));
40
+ }
41
+ function visitRef(ref, scan) {
42
+ const target = ref.startsWith(COMPONENTS_PREFIX) ? scan.refs.resolve(ref) : void 0;
43
+ if (isObject(target) && isDeprecated(target) && !scan.kept.has(target)) {
44
+ scan.kept.add(target);
45
+ visitContents(target, scan);
46
+ }
47
+ }
48
+ function visitEntries(value, scan) {
49
+ for (const entry of Array.isArray(value) ? value : Object.values(value)) {
50
+ if (!isDroppedEntry(entry, scan)) {
51
+ visit(entry, scan);
52
+ }
53
+ }
54
+ }
55
+ function visit(node, scan) {
56
+ if (Array.isArray(node)) {
57
+ for (const item of node) {
58
+ visit(item, scan);
59
+ }
60
+ } else if (isObject(node) && !isDeprecated(node)) {
61
+ visitContents(node, scan);
62
+ }
63
+ }
64
+ function visitContents(node, scan) {
65
+ const ref = refOf(node);
66
+ if (ref !== void 0) {
67
+ visitRef(ref, scan);
68
+ }
69
+ for (const [key, value] of Object.entries(node)) {
70
+ if (UNTYPED_KEYS.has(key) || key.startsWith(EXTENSION_PREFIX) || !isObject(value)) {
71
+ continue;
72
+ }
73
+ if (RESOLVED_ENTRY_KEYS.has(key)) {
74
+ visitEntries(key === "properties" || key === "parameters" ? value : [value], scan);
75
+ } else {
76
+ visit(value, scan);
77
+ }
78
+ }
79
+ }
80
+ function keptComponentEntries(components) {
81
+ const kinds = [...COMPONENT_KINDS, ...DECLARED_COMPONENT_KINDS];
82
+ return kinds.flatMap(
83
+ (kind) => Object.values(components?.[kind] ?? {}).filter((item) => !isDeprecated(item))
84
+ );
85
+ }
86
+ function keptDeprecatedComponents(document, refs) {
87
+ const scan = { refs, kept: /* @__PURE__ */ new Set() };
88
+ visit([document.paths, document.webhooks, document.$defs], scan);
89
+ visit(keptComponentEntries(document.components), scan);
90
+ return scan.kept;
91
+ }
92
+
93
+ export { keptDeprecatedComponents };
94
+ //# sourceMappingURL=kept-deprecated.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kept-deprecated.mjs","sources":["../../../../src/application/transform/document/kept-deprecated.ts"],"sourcesContent":["import {\n COMPONENT_KINDS,\n type ComponentsObject,\n DECLARED_COMPONENT_KINDS,\n} from \"../../../domain/openapi/components-object.js\";\nimport type { DocumentObject } from \"../../../domain/openapi/document-object.js\";\nimport { isDeprecated } from \"../document-entries.js\";\nimport type { RefResolver } from \"../schema/schema-context.js\";\n\n/**\n * `--exclude-deprecated` and references (roadmap R10.3, backlog 29). A deprecated component is\n * left out, but a kept schema may still point to it (an array's `items`, say), and the output then\n * names a missing `components` key. This scan finds the deprecated components that the kept output\n * references, so they are kept too. It follows the generator's rules: a property, parameter or\n * operation whose (resolved) object is deprecated is dropped, so its `$ref` does not count. Keys\n * that are not typed are not followed, so a component they name stays out, as before.\n */\n\n/** Keys whose contents the generator does not type. */\nconst UNTYPED_KEYS: ReadonlySet<string> = new Set([\n \"callbacks\",\n \"discriminator\",\n \"example\",\n \"examples\",\n \"externalDocs\",\n \"links\",\n \"security\",\n \"securitySchemes\",\n \"servers\",\n \"xml\",\n]);\nconst EXTENSION_PREFIX = \"x-\";\n/** Keys whose entries the generator drops when the entry or its `$ref` target is deprecated. */\nconst RESOLVED_ENTRY_KEYS: ReadonlySet<string> = new Set([\n \"properties\",\n \"parameters\",\n \"get\",\n \"put\",\n \"post\",\n \"delete\",\n \"options\",\n \"head\",\n \"patch\",\n \"trace\",\n \"query\",\n]);\nconst COMPONENTS_PREFIX = \"#/components/\";\n\ninterface Scan {\n readonly refs: RefResolver;\n /** The deprecated components to keep, as the document's own objects. */\n readonly kept: Set<object>;\n}\n\nfunction isObject(value: unknown): value is Readonly<Record<string, unknown>> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction refOf(value: unknown): string | undefined {\n return isObject(value) && typeof value.$ref === \"string\" ? value.$ref : undefined;\n}\n\n/** Whether a dropped-when-deprecated entry is dropped: its own or its target's `deprecated`. */\nfunction isDroppedEntry(value: unknown, scan: Scan): boolean {\n const ref = refOf(value);\n return isDeprecated(value) || (ref !== undefined && isDeprecated(scan.refs.resolve(ref)));\n}\n\n/** A `$ref` to a deprecated component keeps it, and the component is scanned once. */\nfunction visitRef(ref: string, scan: Scan): void {\n const target = ref.startsWith(COMPONENTS_PREFIX) ? scan.refs.resolve(ref) : undefined;\n if (isObject(target) && isDeprecated(target) && !scan.kept.has(target)) {\n scan.kept.add(target);\n visitContents(target, scan);\n }\n}\n\nfunction visitEntries(value: unknown, scan: Scan): void {\n for (const entry of Array.isArray(value) ? value : Object.values(value as object)) {\n if (!isDroppedEntry(entry, scan)) {\n visit(entry, scan);\n }\n }\n}\n\n/** A node of kept output; a deprecated object here is dropped, so it is not followed. */\nfunction visit(node: unknown, scan: Scan): void {\n if (Array.isArray(node)) {\n for (const item of node) {\n visit(item, scan);\n }\n } else if (isObject(node) && !isDeprecated(node)) {\n visitContents(node, scan);\n }\n}\n\n/** The `$ref` and the typed keys of an object. */\nfunction visitContents(node: Readonly<Record<string, unknown>>, scan: Scan): void {\n const ref = refOf(node);\n if (ref !== undefined) {\n visitRef(ref, scan);\n }\n for (const [key, value] of Object.entries(node)) {\n if (UNTYPED_KEYS.has(key) || key.startsWith(EXTENSION_PREFIX) || !isObject(value)) {\n continue;\n }\n if (RESOLVED_ENTRY_KEYS.has(key)) {\n visitEntries(key === \"properties\" || key === \"parameters\" ? value : [value], scan);\n } else {\n visit(value, scan);\n }\n }\n}\n\n/** The kept (not deprecated) entries of the typed component kinds. */\nfunction keptComponentEntries(components: ComponentsObject | undefined): unknown[] {\n const kinds = [...COMPONENT_KINDS, ...DECLARED_COMPONENT_KINDS];\n return kinds.flatMap((kind) =>\n Object.values(components?.[kind] ?? {}).filter((item) => !isDeprecated(item)),\n );\n}\n\n/**\n * The deprecated components that kept output references, as the objects of `document.components`\n * (the resolver returns those), so names that need escaping in a `$ref` match too.\n */\nexport function keptDeprecatedComponents(\n document: DocumentObject,\n refs: RefResolver,\n): ReadonlySet<object> {\n const scan: Scan = { refs, kept: new Set() };\n visit([document.paths, document.webhooks, document.$defs], scan);\n visit(keptComponentEntries(document.components), scan);\n return scan.kept;\n}\n"],"names":[],"mappings":"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"}