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,115 @@
1
+ import type {
2
+ DiscriminatorObject,
3
+ ObjectSubtype,
4
+ ReferenceObject,
5
+ SchemaObject,
6
+ } from "../types.js";
7
+
8
+ /**
9
+ * The in-place patch of the discriminator pre-pass: a mapped schema gets a required enum property
10
+ * with its discriminator values, so that TypeScript can narrow the generated union.
11
+ */
12
+
13
+ /** One mapped schema to patch: `ref` is the schema; `discriminatorRef` owns the discriminator. */
14
+ export interface EnumPatch {
15
+ readonly ref: string;
16
+ readonly values: string[];
17
+ readonly discriminator: DiscriminatorObject;
18
+ readonly discriminatorRef: string;
19
+ }
20
+
21
+ function discriminatorEnum(values: string[], previous?: SchemaObject): SchemaObject {
22
+ return {
23
+ type: "string",
24
+ enum: values,
25
+ description: previous?.description
26
+ ? `${previous.description} (enum property replaced by openapi-typesafe)`
27
+ : "discriminator enum property added by openapi-typesafe",
28
+ };
29
+ }
30
+
31
+ /** An `allOf` schema gets one more item that holds the required enum property. */
32
+ function patchAllOf(allOf: (SchemaObject | ReferenceObject)[], patch: EnumPatch): SchemaObject {
33
+ const added = discriminatorEnum(patch.values);
34
+ allOf.push({
35
+ type: "object",
36
+ required: [patch.discriminator.propertyName],
37
+ properties: { [patch.discriminator.propertyName]: added },
38
+ });
39
+ return added;
40
+ }
41
+
42
+ /** An object schema gets the enum property, which is always required, added or replaced. */
43
+ function patchObjectSchema(schema: SchemaObject & ObjectSubtype, patch: EnumPatch): SchemaObject {
44
+ const name = patch.discriminator.propertyName;
45
+ if (!schema.properties) {
46
+ schema.properties = {};
47
+ }
48
+ if (!schema.required) {
49
+ schema.required = [name];
50
+ } else if (!schema.required.includes(name)) {
51
+ schema.required.push(name);
52
+ }
53
+ const added = discriminatorEnum(patch.values, schema.properties[name] as SchemaObject);
54
+ schema.properties[name] = added;
55
+ return added;
56
+ }
57
+
58
+ function isObjectSchema(schema: unknown): schema is SchemaObject & ObjectSubtype {
59
+ return (
60
+ typeof schema === "object" && schema !== null && "type" in schema && schema.type === "object"
61
+ );
62
+ }
63
+
64
+ /** The values a property schema allows, from `const` or `enum`; null when it lists none. */
65
+ function listedValues(property: unknown): readonly unknown[] | null {
66
+ if (typeof property !== "object" || property === null) {
67
+ return null;
68
+ }
69
+ const { const: constant, enum: values } = property as SchemaObject;
70
+ if (constant !== undefined) {
71
+ return [constant];
72
+ }
73
+ return Array.isArray(values) ? values : null;
74
+ }
75
+
76
+ /** Whether one schema object requires the property and allows exactly the values. */
77
+ function requiresValues(schema: unknown, name: string, values: readonly string[]): boolean {
78
+ if (typeof schema !== "object" || schema === null || "$ref" in schema) {
79
+ return false;
80
+ }
81
+ const { required, properties } = schema as SchemaObject & ObjectSubtype;
82
+ const listed = listedValues(properties?.[name]);
83
+ return (
84
+ Boolean(required?.includes(name)) &&
85
+ listed !== null &&
86
+ listed.length === values.length &&
87
+ values.every((value) => listed.includes(value))
88
+ );
89
+ }
90
+
91
+ /**
92
+ * Whether `schema`, or an inline `allOf` item of it, already requires the discriminator property
93
+ * with exactly the patch's values (the `discriminator-values` fix). Then a patch would
94
+ * only repeat it (#2124).
95
+ */
96
+ export function declaresValues(schema: SchemaObject | undefined, patch: EnumPatch): boolean {
97
+ const name = patch.discriminator.propertyName;
98
+ return [schema, ...(schema?.allOf ?? [])].some((item) =>
99
+ requiresValues(item, name, patch.values),
100
+ );
101
+ }
102
+
103
+ /**
104
+ * Add or replace the enum property in `schema`, an `allOf` or object schema. Returns the added
105
+ * enum schema, or null for another kind of schema, which is left as it is.
106
+ */
107
+ export function addEnumProperty(
108
+ schema: SchemaObject | undefined,
109
+ patch: EnumPatch,
110
+ ): SchemaObject | null {
111
+ if (schema?.allOf) {
112
+ return patchAllOf(schema.allOf, patch);
113
+ }
114
+ return isObjectSchema(schema) ? patchObjectSchema(schema, patch) : null;
115
+ }
@@ -0,0 +1,97 @@
1
+ import type { DiscriminatorObject, ReferenceObject, SchemaObject } from "../types.js";
2
+ import type { EnumPatch } from "./discriminator-enum.js";
3
+ import { enumKey, patchDiscriminatorEnum, type ScanState } from "./discriminator-patch.js";
4
+ import { resolveDocumentRef } from "./document-refs.js";
5
+
6
+ /**
7
+ * The `discriminator-values` fix: a schema inherits one discriminator per property. A schema that
8
+ * owns a discriminator keeps its own (#2200), so the scan does not record the one it inherits for
9
+ * another property (`Content` owns `subtype` and `allOf`s `Element`, which owns `contentType`).
10
+ * Its members (`Video`) still get a value of that property, found here from the owners above.
11
+ */
12
+
13
+ /** A discriminator and the schema that defines it. */
14
+ interface OtherOwner {
15
+ readonly discriminator: DiscriminatorObject;
16
+ readonly ownerRef: string;
17
+ }
18
+
19
+ /** The `$ref`s of a schema's `allOf` items. */
20
+ function allOfRefs(state: ScanState, ref: string): string[] {
21
+ const { silent, logger } = state;
22
+ const schema = resolveDocumentRef<SchemaObject>(state.schema, ref, { silent, logger });
23
+ const items = (schema?.allOf ?? []) as (SchemaObject | ReferenceObject)[];
24
+ return items.flatMap((item) =>
25
+ "$ref" in item && typeof item.$ref === "string" ? [item.$ref] : [],
26
+ );
27
+ }
28
+
29
+ /**
30
+ * The owners' discriminators that the schema at `parentRef` and its `allOf` parents define, the
31
+ * nearest one per property, except the property of `parentRef`'s own discriminator.
32
+ */
33
+ function otherOwners(state: ScanState, parentRef: string): OtherOwner[] {
34
+ const own = state.objects[parentRef]?.propertyName;
35
+ const found = new Map<string, OtherOwner>();
36
+ const visited = new Set<string>();
37
+ const queue = [parentRef];
38
+ for (let ref = queue.shift(); ref !== undefined; ref = queue.shift()) {
39
+ if (visited.has(ref)) {
40
+ continue;
41
+ }
42
+ visited.add(ref);
43
+ const discriminator = state.owners.has(ref) ? state.objects[ref] : undefined;
44
+ const name = discriminator?.propertyName;
45
+ if (discriminator && name !== undefined && name !== own && !found.has(name)) {
46
+ found.set(name, { discriminator, ownerRef: ref });
47
+ }
48
+ queue.push(...allOfRefs(state, ref));
49
+ }
50
+ return [...found.values()];
51
+ }
52
+
53
+ /**
54
+ * The child redefines this property, so its `allOf` items omit it: a parent may have a value of
55
+ * its own, as `Content` has when `Element`'s mapping names it.
56
+ */
57
+ function recordOtherProperty(state: ScanState, ref: string, propertyName: string): void {
58
+ const names = state.otherProperties[ref] ?? [];
59
+ if (!names.includes(propertyName)) {
60
+ names.push(propertyName);
61
+ }
62
+ state.otherProperties[ref] = names;
63
+ }
64
+
65
+ /**
66
+ * The child at `ref` of the schema at `parentRef` gets a value of each other property: a mapped
67
+ * one at once, else its schema name after both passes, where no mapping gives one. The schema's
68
+ * own discriminator property is still added, so these patches do not mark it handled.
69
+ */
70
+ export function inheritOtherOwners(state: ScanState, parentRef: string, ref: string): void {
71
+ const childProperty = state.objects[ref]?.propertyName;
72
+ for (const { discriminator, ownerRef } of otherOwners(state, parentRef)) {
73
+ if (discriminator.propertyName === childProperty) {
74
+ continue;
75
+ }
76
+ recordOtherProperty(state, ref, discriminator.propertyName);
77
+ const mapped = Object.entries(discriminator.mapping ?? {})
78
+ .filter(([, target]) => target === ref)
79
+ .map(([value]) => value);
80
+ const name = ref.slice(ref.lastIndexOf("/") + 1);
81
+ const patch: EnumPatch = { ref, values: mapped, discriminator, discriminatorRef: ownerRef };
82
+ if (mapped.length > 0) {
83
+ patchDiscriminatorEnum(state, patch);
84
+ } else {
85
+ state.otherInferredPatches.push({ ...patch, values: [name] });
86
+ }
87
+ }
88
+ }
89
+
90
+ /** The deferred schema-name values of other properties; see `inheritOtherOwners`. */
91
+ export function applyOtherInferredPatches(state: ScanState, mapped: ReadonlySet<string>): void {
92
+ for (const patch of state.otherInferredPatches) {
93
+ if (!mapped.has(enumKey(patch))) {
94
+ patchDiscriminatorEnum(state, patch);
95
+ }
96
+ }
97
+ }
@@ -0,0 +1,147 @@
1
+ import type { Logger } from "../application/ports/logger.js";
2
+ import { OutputFix } from "../domain/output-fixes.js";
3
+ import type { DiscriminatorObject, OpenAPI3, SchemaObject } from "../types.js";
4
+ import { addEnumProperty, declaresValues, type EnumPatch } from "./discriminator-enum.js";
5
+ import {
6
+ type DiscriminatorOwner,
7
+ type EnumParent,
8
+ enumParentOf,
9
+ } from "./discriminator-enum-parent.js";
10
+ import { resolveDocumentRef } from "./document-refs.js";
11
+
12
+ /**
13
+ * The state of the discriminator pre-pass and the in-place patch of a mapped schema: the enum
14
+ * property that the generated union narrows by. Two discriminators of one property may patch one
15
+ * schema; how they combine is the `discriminator-values` fix (ADR-021, roadmap R12).
16
+ */
17
+
18
+ /** How to scan: the warnings, and the output fixes of the run (ADR-021). */
19
+ export interface DiscriminatorScanOptions {
20
+ readonly silent: boolean;
21
+ readonly logger: Logger;
22
+ readonly fixes: ReadonlySet<OutputFix>;
23
+ }
24
+
25
+ /** What the two passes share: the document they patch and what they found so far. */
26
+ export interface ScanState extends DiscriminatorScanOptions {
27
+ readonly schema: OpenAPI3;
28
+ readonly objects: Record<string, DiscriminatorObject>;
29
+ /** The schemas that define a discriminator themselves (pass 1), not by inheritance. */
30
+ readonly owners: Set<string>;
31
+ readonly refsHandled: string[];
32
+ /** With the fix: the enum added to each schema, by schema and property, so values merge. */
33
+ readonly patchedEnums: Map<string, SchemaObject>;
34
+ /** With the fix: schema-name values, applied after both passes where no mapping names one. */
35
+ readonly inferredPatches: EnumPatch[];
36
+ /** With the fix: schema-name values of other properties (`inheritOtherOwners`). */
37
+ readonly otherInferredPatches: EnumPatch[];
38
+ /** With the fix: the other properties each schema got a value of (`inheritOtherOwners`). */
39
+ readonly otherProperties: Record<string, string[]>;
40
+ /** With `discriminator-values`: the enum keys that a schema declares itself. */
41
+ readonly declaredKeys: Set<string>;
42
+ /** With `discriminator-values`: the owner's enum of each added enum, by that enum. */
43
+ readonly enumParents: Map<object, EnumParent>;
44
+ }
45
+
46
+ /** Whether `discriminator-values` is on: values of two discriminators merge into one enum. */
47
+ export function mergesValues(state: ScanState): boolean {
48
+ return state.fixes.has(OutputFix.DISCRIMINATOR_VALUES);
49
+ }
50
+
51
+ function patchedSchema(state: ScanState, patch: EnumPatch): SchemaObject | undefined {
52
+ const { silent, logger } = state;
53
+ return resolveDocumentRef<SchemaObject>(state.schema, patch.ref, { silent, logger });
54
+ }
55
+
56
+ /**
57
+ * With `discriminator-values`: the schema at `patch.ref` requires the property with
58
+ * exactly these values already, so a patch would only repeat it (#2124).
59
+ */
60
+ function isDeclared(state: ScanState, patch: EnumPatch): boolean {
61
+ return (
62
+ state.fixes.has(OutputFix.DISCRIMINATOR_VALUES) &&
63
+ declaresValues(patchedSchema(state, patch), patch)
64
+ );
65
+ }
66
+
67
+ /**
68
+ * With `discriminator-values`: the enum of the owner's property, for `key`: an enum the scan
69
+ * added, or a discriminator object that a schema inherited.
70
+ */
71
+ export function recordEnumParent(state: ScanState, owner: DiscriminatorOwner, key: object): void {
72
+ if (!state.fixes.has(OutputFix.DISCRIMINATOR_VALUES)) {
73
+ return;
74
+ }
75
+ const { silent, logger } = state;
76
+ const parent = enumParentOf(owner, (ref) =>
77
+ resolveDocumentRef(state.schema, ref, { silent, logger }),
78
+ );
79
+ if (parent !== undefined) {
80
+ state.enumParents.set(key, parent);
81
+ }
82
+ }
83
+
84
+ /** The enum the schema at `patch.ref` gets, or null (with a warning) for another kind of schema. */
85
+ function addDiscriminatorEnum(state: ScanState, patch: EnumPatch): SchemaObject | null {
86
+ const added = addEnumProperty(patchedSchema(state, patch), patch);
87
+ if (added === null) {
88
+ warnInvalidMapping(patch, state.logger);
89
+ } else {
90
+ recordEnumParent(state, patch, added);
91
+ }
92
+ return added;
93
+ }
94
+
95
+ /** One schema and discriminator property; two discriminators of one property share an enum. */
96
+ export function enumKey(patch: EnumPatch): string {
97
+ return `${patch.ref}\n${patch.discriminator.propertyName}`;
98
+ }
99
+
100
+ /** With the fix, a second discriminator of the same property adds its values to the first enum. */
101
+ function mergeIntoPatchedEnum(state: ScanState, key: string, values: readonly string[]): boolean {
102
+ const patched = state.patchedEnums.get(key);
103
+ if (patched === undefined) {
104
+ return false;
105
+ }
106
+ const merged = patched.enum as unknown[];
107
+ merged.push(...values.filter((value) => !merged.includes(value)));
108
+ return true;
109
+ }
110
+
111
+ /**
112
+ * Add or replace the discriminator enum in the schema at `patch.ref`. Returns false, with a
113
+ * warning, when that schema is neither an `allOf` nor an object schema. Without the fix every
114
+ * patch adds a property, so two discriminators with different values intersect to `never`.
115
+ */
116
+ export function patchDiscriminatorEnum(state: ScanState, patch: EnumPatch): boolean {
117
+ if (isDeclared(state, patch)) {
118
+ state.declaredKeys.add(enumKey(patch));
119
+ return true;
120
+ }
121
+ if (!mergesValues(state)) {
122
+ return addDiscriminatorEnum(state, patch) !== null;
123
+ }
124
+ const key = enumKey(patch);
125
+ if (mergeIntoPatchedEnum(state, key, patch.values)) {
126
+ return true;
127
+ }
128
+ const added = addDiscriminatorEnum(state, patch);
129
+ if (added !== null) {
130
+ state.patchedEnums.set(key, added);
131
+ }
132
+ return added !== null;
133
+ }
134
+
135
+ export function markHandled(state: ScanState, ref: string): void {
136
+ if (!state.refsHandled.includes(ref)) {
137
+ state.refsHandled.push(ref);
138
+ }
139
+ }
140
+
141
+ function warnInvalidMapping(patch: EnumPatch, logger: Logger): void {
142
+ const mapped = `${patch.ref} => ${patch.values.join(", ")}`;
143
+ logger.warn(
144
+ "Discriminator mapping has an invalid schema (neither an object schema nor an allOf array): " +
145
+ `${mapped} (Discriminator: ${patch.discriminatorRef})`,
146
+ );
147
+ }
@@ -0,0 +1,260 @@
1
+ import type { Logger } from "../application/ports/logger.js";
2
+ import { isUnionMember, unionAt } from "../domain/openapi/discriminated-union.js";
3
+ import { OutputFix } from "../domain/output-fixes.js";
4
+ import type {
5
+ DiscriminatorObject,
6
+ GeneratorOptions,
7
+ OpenAPI3,
8
+ ReferenceObject,
9
+ SchemaObject,
10
+ } from "../types.js";
11
+ import { defaultLogger } from "./default-ports.js";
12
+ import type { EnumPatch } from "./discriminator-enum.js";
13
+ import type { EnumParent } from "./discriminator-enum-parent.js";
14
+ import { applyOtherInferredPatches, inheritOtherOwners } from "./discriminator-other-owners.js";
15
+ import {
16
+ type DiscriminatorScanOptions,
17
+ enumKey,
18
+ markHandled,
19
+ mergesValues,
20
+ patchDiscriminatorEnum,
21
+ recordEnumParent,
22
+ type ScanState,
23
+ } from "./discriminator-patch.js";
24
+ import { resolveDocumentRef, walkDocument } from "./document-refs.js";
25
+ import { createRef } from "./legacy-utils.js";
26
+
27
+ /**
28
+ * The inherited discriminator pre-pass. It finds every discriminator in the bundled document and
29
+ * patches the mapped schemas in place with a required enum property, so that TypeScript can narrow
30
+ * the generated union. The behavior and the warning text match the original `scanDiscriminators`.
31
+ */
32
+
33
+ type DiscriminatorMapping = Record<string, { inferred?: string; defined?: string[] }>;
34
+
35
+ /** The schema name at the end of each `oneOf` `$ref` is the inferred discriminator value. */
36
+ function inferredMapping(oneOf: (SchemaObject | ReferenceObject)[]): DiscriminatorMapping {
37
+ const mapping: DiscriminatorMapping = {};
38
+ for (const item of oneOf) {
39
+ if (!("$ref" in item)) {
40
+ continue;
41
+ }
42
+ const value = item.$ref.split("/").pop();
43
+ if (value) {
44
+ mapping[item.$ref] = { ...mapping[item.$ref], inferred: value };
45
+ }
46
+ }
47
+ return mapping;
48
+ }
49
+
50
+ /** Values defined in `discriminator.mapping` replace inferred ones for the same schema. */
51
+ function addDefinedMapping(
52
+ mapping: DiscriminatorMapping,
53
+ defined: Readonly<Record<string, string>>,
54
+ ): void {
55
+ for (const [mappedValue, mappedRef] of Object.entries(defined)) {
56
+ if (!mappedRef) {
57
+ continue;
58
+ }
59
+ if (!mapping[mappedRef]?.defined) {
60
+ mapping[mappedRef] = { defined: [] };
61
+ }
62
+ mapping[mappedRef].defined?.push(mappedValue);
63
+ }
64
+ }
65
+
66
+ function patchMappedSchemas(
67
+ state: ScanState,
68
+ mapping: DiscriminatorMapping,
69
+ discriminator: Omit<EnumPatch, "ref" | "values">,
70
+ ): void {
71
+ for (const [ref, { inferred, defined }] of Object.entries(mapping)) {
72
+ const isSkipped = !mergesValues(state) && state.refsHandled.includes(ref);
73
+ if (isSkipped || (!inferred && !defined)) {
74
+ continue;
75
+ }
76
+ // A defined value wins: the schema name may not be the value the API sends.
77
+ const values = defined ?? [inferred as string];
78
+ if (mergesValues(state) && defined === undefined) {
79
+ // A mapping found later, in this pass or the next, may name the schema.
80
+ state.inferredPatches.push({ ...discriminator, ref, values });
81
+ } else if (patchDiscriminatorEnum(state, { ...discriminator, ref, values })) {
82
+ markHandled(state, ref);
83
+ }
84
+ }
85
+ }
86
+
87
+ /** Pass 1: collect every discriminator; patch the schemas of a discriminator + `oneOf`. */
88
+ function collectDiscriminator(
89
+ state: ScanState,
90
+ value: Record<string, unknown>,
91
+ path: (string | number)[],
92
+ ): void {
93
+ const discriminator = value.discriminator as DiscriminatorObject | undefined;
94
+ if (!discriminator?.propertyName) {
95
+ return;
96
+ }
97
+ const discriminatorRef = createRef(path);
98
+ state.objects[discriminatorRef] = discriminator;
99
+ state.owners.add(discriminatorRef);
100
+ if (!Array.isArray(value.oneOf)) {
101
+ return;
102
+ }
103
+ const mapping = inferredMapping(value.oneOf);
104
+ if (discriminator.mapping) {
105
+ addDefinedMapping(mapping, discriminator.mapping);
106
+ }
107
+ patchMappedSchemas(state, mapping, { discriminator, discriminatorRef });
108
+ }
109
+
110
+ /** The mapping keys of `discriminator` that point at `ref`. */
111
+ function valuesMappedTo(discriminator: DiscriminatorObject, ref: string): string[] {
112
+ return Object.entries(discriminator.mapping ?? {})
113
+ .filter(([, mappedRef]) => mappedRef === ref)
114
+ .map(([mappedValue]) => mappedValue);
115
+ }
116
+
117
+ /**
118
+ * Whether the schema at `ref` takes the discriminator of its `allOf` parent at `parentRef`. With
119
+ * `allof-discriminated-union`, a schema that `allOf`s a discriminated union that does not contain
120
+ * it is that union, not one of its members, so it gets no value of its own (#1464, #1690). A
121
+ * schema that the union's mapping names is a member.
122
+ */
123
+ function inheritsDiscriminator(state: ScanState, parentRef: string, ref: string): boolean {
124
+ if (!state.fixes.has(OutputFix.ALLOF_DISCRIMINATED_UNION)) {
125
+ return true;
126
+ }
127
+ const resolve = (target: string) => resolveDocumentRef(state.schema, target, state);
128
+ const union = unionAt(parentRef, resolve);
129
+ return union === undefined || isUnionMember(union, ref, resolve);
130
+ }
131
+
132
+ /**
133
+ * The schema at `ref` inherits `discriminator`. With `discriminator-values`, a schema that
134
+ * defines a discriminator keeps it: the inherited one replaced its mapping, so the members walked
135
+ * after this schema got their schema name instead of the mapped value (#2200). `ownerRef` is the
136
+ * schema that declares the discriminator property, whose enum `--enum` values use (#1700).
137
+ */
138
+ function recordInherited(
139
+ state: ScanState,
140
+ ref: string,
141
+ discriminator: DiscriminatorObject,
142
+ ownerRef: string,
143
+ ): void {
144
+ if (state.fixes.has(OutputFix.DISCRIMINATOR_VALUES) && state.owners.has(ref)) {
145
+ return;
146
+ }
147
+ const inherited = { ...discriminator };
148
+ state.objects[ref] = inherited;
149
+ recordEnumParent(state, { discriminator, discriminatorRef: ownerRef }, inherited);
150
+ }
151
+
152
+ /**
153
+ * An `allOf` item that is a `$ref` to a discriminator owner: the schema at `ref` inherits the
154
+ * discriminator, and gets its enum when the parent's mapping names it. Returns false when the
155
+ * `$ref` owns no discriminator, which ends the scan of this `allOf` (as in the original).
156
+ */
157
+ function inheritFromRef(state: ScanState, parentRef: string, ref: string): boolean {
158
+ const discriminator = state.objects[parentRef];
159
+ if (!discriminator) {
160
+ return false;
161
+ }
162
+ const values = valuesMappedTo(discriminator, ref);
163
+ const patch = { ref, values, discriminator, discriminatorRef: parentRef };
164
+ if (values.length > 0 && patchDiscriminatorEnum(state, patch)) {
165
+ markHandled(state, ref);
166
+ }
167
+ if (inheritsDiscriminator(state, parentRef, ref)) {
168
+ recordInherited(state, ref, discriminator, parentRef);
169
+ if (mergesValues(state)) {
170
+ inheritOtherOwners(state, parentRef, ref);
171
+ }
172
+ }
173
+ return true;
174
+ }
175
+
176
+ /** Pass 2: a schema whose `allOf` holds a discriminator, or a `$ref` to one, inherits it. */
177
+ function inheritDiscriminators(
178
+ state: ScanState,
179
+ value: Record<string, unknown>,
180
+ path: (string | number)[],
181
+ ): void {
182
+ if (!Array.isArray(value.allOf)) {
183
+ return;
184
+ }
185
+ for (const item of value.allOf as (SchemaObject | ReferenceObject)[]) {
186
+ if ("$ref" in item) {
187
+ if (!inheritFromRef(state, item.$ref, createRef(path))) {
188
+ return;
189
+ }
190
+ } else if (item.discriminator?.propertyName) {
191
+ // The inline item is typed at the schema's own location.
192
+ recordInherited(state, createRef(path), item.discriminator, createRef(path));
193
+ }
194
+ }
195
+ }
196
+
197
+ /** The discriminators of a bundled document, after patching the mapped schemas in place. */
198
+ export interface DiscriminatorScan {
199
+ objects: Record<string, DiscriminatorObject>;
200
+ refsHandled: string[];
201
+ /** With `discriminator-values`: the owner's enum of each enum the scan added. */
202
+ enumParents: ReadonlyMap<object, EnumParent>;
203
+ /** With `discriminator-values`: the properties of the other discriminators a schema inherits. */
204
+ otherProperties: Readonly<Record<string, readonly string[]>>;
205
+ }
206
+
207
+ /**
208
+ * With the fix: a schema-name value, only for a schema and property that no mapping gave a value.
209
+ * Every enum patched so far came from a mapping, since schema-name values wait for this step.
210
+ */
211
+ function applyInferredPatches(state: ScanState): void {
212
+ // A value that a schema declares itself came from a mapping as well.
213
+ const mapped = new Set([...state.patchedEnums.keys(), ...state.declaredKeys]);
214
+ for (const patch of state.inferredPatches) {
215
+ if (!mapped.has(enumKey(patch)) && patchDiscriminatorEnum(state, patch)) {
216
+ markHandled(state, patch.ref);
217
+ }
218
+ }
219
+ applyOtherInferredPatches(state, mapped);
220
+ }
221
+
222
+ /** Find every discriminator in `schema`; warnings go to `logger` unless `silent`. */
223
+ export function findDiscriminators(
224
+ schema: OpenAPI3,
225
+ options: DiscriminatorScanOptions,
226
+ ): DiscriminatorScan {
227
+ const state: ScanState = {
228
+ ...options,
229
+ schema,
230
+ objects: {},
231
+ owners: new Set(),
232
+ refsHandled: [],
233
+ patchedEnums: new Map(),
234
+ inferredPatches: [],
235
+ otherInferredPatches: [],
236
+ otherProperties: {},
237
+ declaredKeys: new Set(),
238
+ enumParents: new Map(),
239
+ };
240
+ walkDocument(schema, (value, path) => collectDiscriminator(state, value, path));
241
+ // A second pass, because an `allOf` may name a discriminator that is defined later.
242
+ walkDocument(schema, (value, path) => inheritDiscriminators(state, value, path));
243
+ applyInferredPatches(state);
244
+ const { objects, refsHandled, enumParents, otherProperties } = state;
245
+ return { objects, refsHandled, enumParents, otherProperties };
246
+ }
247
+
248
+ /**
249
+ * Return a key–value map of discriminator objects found in a schema. Warnings go to `logger`;
250
+ * without one, to the default terminal logger, as the original did.
251
+ * @deprecated Kept for 1.x; removed in 2.0 (ADR-004, decision 9).
252
+ */
253
+ export function scanDiscriminators(
254
+ schema: OpenAPI3,
255
+ options: GeneratorOptions,
256
+ logger: Logger = defaultLogger(options.silent ?? false),
257
+ ): DiscriminatorScan {
258
+ const silent = options.silent ?? false;
259
+ return findDiscriminators(schema, { silent, logger, fixes: new Set() });
260
+ }
@@ -0,0 +1,41 @@
1
+ import { loadTypeScript } from "../adapters/type-ast-bridge/load-typescript.js";
2
+ import { printWithTypeScript } from "../adapters/type-ast-bridge/print-typescript.js";
3
+ import type { ts } from "../adapters/type-ast-bridge/typescript-types.js";
4
+ import type { IrDeclaration } from "../domain/ir/nodes.js";
5
+ import { type FooterEntry, isIrDeclaration } from "./footer-entry.js";
6
+
7
+ /** The document in three parts; the footer may hold TypeScript nodes from user code. */
8
+ export interface TransformedDocument {
9
+ readonly body: readonly IrDeclaration[];
10
+ readonly footer: readonly FooterEntry[];
11
+ readonly closing: readonly IrDeclaration[];
12
+ }
13
+
14
+ /** The TypeScript printer ends the file with a line break; a raw declaration's text has none. */
15
+ function withoutFinalLineBreak(text: string): string {
16
+ return text.endsWith("\n") ? text.slice(0, -1) : text;
17
+ }
18
+
19
+ /** A TypeScript node from user code, as the TypeScript printer prints it. */
20
+ function printedNode(node: ts.Node): IrDeclaration {
21
+ return {
22
+ kind: "rawDeclaration",
23
+ text: withoutFinalLineBreak(printWithTypeScript(loadTypeScript(), [node])),
24
+ };
25
+ }
26
+
27
+ function entryDeclaration(entry: FooterEntry): IrDeclaration {
28
+ return isIrDeclaration(entry) ? entry : printedNode(entry);
29
+ }
30
+
31
+ /**
32
+ * The document as IR declarations in output order. Footer TypeScript nodes from user code become
33
+ * raw text through the bridge; raw text is printed as written (ADR-010, decision 4).
34
+ */
35
+ export function documentDeclarations({
36
+ body,
37
+ footer,
38
+ closing,
39
+ }: TransformedDocument): IrDeclaration[] {
40
+ return [...body, ...footer.map(entryDeclaration), ...closing];
41
+ }