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,82 @@
1
+ import { OutputFix } from '../domain/output-fixes.mjs';
2
+ import { declaresValues, addEnumProperty } from './discriminator-enum.mjs';
3
+ import { enumParentOf } from './discriminator-enum-parent.mjs';
4
+ import { resolveDocumentRef } from './document-refs.mjs';
5
+
6
+ function mergesValues(state) {
7
+ return state.fixes.has(OutputFix.DISCRIMINATOR_VALUES);
8
+ }
9
+ function patchedSchema(state, patch) {
10
+ const { silent, logger } = state;
11
+ return resolveDocumentRef(state.schema, patch.ref, { silent, logger });
12
+ }
13
+ function isDeclared(state, patch) {
14
+ return state.fixes.has(OutputFix.DISCRIMINATOR_VALUES) && declaresValues(patchedSchema(state, patch), patch);
15
+ }
16
+ function recordEnumParent(state, owner, key) {
17
+ if (!state.fixes.has(OutputFix.DISCRIMINATOR_VALUES)) {
18
+ return;
19
+ }
20
+ const { silent, logger } = state;
21
+ const parent = enumParentOf(
22
+ owner,
23
+ (ref) => resolveDocumentRef(state.schema, ref, { silent, logger })
24
+ );
25
+ if (parent !== void 0) {
26
+ state.enumParents.set(key, parent);
27
+ }
28
+ }
29
+ function addDiscriminatorEnum(state, patch) {
30
+ const added = addEnumProperty(patchedSchema(state, patch), patch);
31
+ if (added === null) {
32
+ warnInvalidMapping(patch, state.logger);
33
+ } else {
34
+ recordEnumParent(state, patch, added);
35
+ }
36
+ return added;
37
+ }
38
+ function enumKey(patch) {
39
+ return `${patch.ref}
40
+ ${patch.discriminator.propertyName}`;
41
+ }
42
+ function mergeIntoPatchedEnum(state, key, values) {
43
+ const patched = state.patchedEnums.get(key);
44
+ if (patched === void 0) {
45
+ return false;
46
+ }
47
+ const merged = patched.enum;
48
+ merged.push(...values.filter((value) => !merged.includes(value)));
49
+ return true;
50
+ }
51
+ function patchDiscriminatorEnum(state, patch) {
52
+ if (isDeclared(state, patch)) {
53
+ state.declaredKeys.add(enumKey(patch));
54
+ return true;
55
+ }
56
+ if (!mergesValues(state)) {
57
+ return addDiscriminatorEnum(state, patch) !== null;
58
+ }
59
+ const key = enumKey(patch);
60
+ if (mergeIntoPatchedEnum(state, key, patch.values)) {
61
+ return true;
62
+ }
63
+ const added = addDiscriminatorEnum(state, patch);
64
+ if (added !== null) {
65
+ state.patchedEnums.set(key, added);
66
+ }
67
+ return added !== null;
68
+ }
69
+ function markHandled(state, ref) {
70
+ if (!state.refsHandled.includes(ref)) {
71
+ state.refsHandled.push(ref);
72
+ }
73
+ }
74
+ function warnInvalidMapping(patch, logger) {
75
+ const mapped = `${patch.ref} => ${patch.values.join(", ")}`;
76
+ logger.warn(
77
+ `Discriminator mapping has an invalid schema (neither an object schema nor an allOf array): ${mapped} (Discriminator: ${patch.discriminatorRef})`
78
+ );
79
+ }
80
+
81
+ export { enumKey, markHandled, mergesValues, patchDiscriminatorEnum, recordEnumParent };
82
+ //# sourceMappingURL=discriminator-patch.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discriminator-patch.mjs","sources":["../../src/api/discriminator-patch.ts"],"sourcesContent":["import type { Logger } from \"../application/ports/logger.js\";\nimport { OutputFix } from \"../domain/output-fixes.js\";\nimport type { DiscriminatorObject, OpenAPI3, SchemaObject } from \"../types.js\";\nimport { addEnumProperty, declaresValues, type EnumPatch } from \"./discriminator-enum.js\";\nimport {\n type DiscriminatorOwner,\n type EnumParent,\n enumParentOf,\n} from \"./discriminator-enum-parent.js\";\nimport { resolveDocumentRef } from \"./document-refs.js\";\n\n/**\n * The state of the discriminator pre-pass and the in-place patch of a mapped schema: the enum\n * property that the generated union narrows by. Two discriminators of one property may patch one\n * schema; how they combine is the `discriminator-values` fix (ADR-021, roadmap R12).\n */\n\n/** How to scan: the warnings, and the output fixes of the run (ADR-021). */\nexport interface DiscriminatorScanOptions {\n readonly silent: boolean;\n readonly logger: Logger;\n readonly fixes: ReadonlySet<OutputFix>;\n}\n\n/** What the two passes share: the document they patch and what they found so far. */\nexport interface ScanState extends DiscriminatorScanOptions {\n readonly schema: OpenAPI3;\n readonly objects: Record<string, DiscriminatorObject>;\n /** The schemas that define a discriminator themselves (pass 1), not by inheritance. */\n readonly owners: Set<string>;\n readonly refsHandled: string[];\n /** With the fix: the enum added to each schema, by schema and property, so values merge. */\n readonly patchedEnums: Map<string, SchemaObject>;\n /** With the fix: schema-name values, applied after both passes where no mapping names one. */\n readonly inferredPatches: EnumPatch[];\n /** With the fix: schema-name values of other properties (`inheritOtherOwners`). */\n readonly otherInferredPatches: EnumPatch[];\n /** With the fix: the other properties each schema got a value of (`inheritOtherOwners`). */\n readonly otherProperties: Record<string, string[]>;\n /** With `discriminator-values`: the enum keys that a schema declares itself. */\n readonly declaredKeys: Set<string>;\n /** With `discriminator-values`: the owner's enum of each added enum, by that enum. */\n readonly enumParents: Map<object, EnumParent>;\n}\n\n/** Whether `discriminator-values` is on: values of two discriminators merge into one enum. */\nexport function mergesValues(state: ScanState): boolean {\n return state.fixes.has(OutputFix.DISCRIMINATOR_VALUES);\n}\n\nfunction patchedSchema(state: ScanState, patch: EnumPatch): SchemaObject | undefined {\n const { silent, logger } = state;\n return resolveDocumentRef<SchemaObject>(state.schema, patch.ref, { silent, logger });\n}\n\n/**\n * With `discriminator-values`: the schema at `patch.ref` requires the property with\n * exactly these values already, so a patch would only repeat it (#2124).\n */\nfunction isDeclared(state: ScanState, patch: EnumPatch): boolean {\n return (\n state.fixes.has(OutputFix.DISCRIMINATOR_VALUES) &&\n declaresValues(patchedSchema(state, patch), patch)\n );\n}\n\n/**\n * With `discriminator-values`: the enum of the owner's property, for `key`: an enum the scan\n * added, or a discriminator object that a schema inherited.\n */\nexport function recordEnumParent(state: ScanState, owner: DiscriminatorOwner, key: object): void {\n if (!state.fixes.has(OutputFix.DISCRIMINATOR_VALUES)) {\n return;\n }\n const { silent, logger } = state;\n const parent = enumParentOf(owner, (ref) =>\n resolveDocumentRef(state.schema, ref, { silent, logger }),\n );\n if (parent !== undefined) {\n state.enumParents.set(key, parent);\n }\n}\n\n/** The enum the schema at `patch.ref` gets, or null (with a warning) for another kind of schema. */\nfunction addDiscriminatorEnum(state: ScanState, patch: EnumPatch): SchemaObject | null {\n const added = addEnumProperty(patchedSchema(state, patch), patch);\n if (added === null) {\n warnInvalidMapping(patch, state.logger);\n } else {\n recordEnumParent(state, patch, added);\n }\n return added;\n}\n\n/** One schema and discriminator property; two discriminators of one property share an enum. */\nexport function enumKey(patch: EnumPatch): string {\n return `${patch.ref}\\n${patch.discriminator.propertyName}`;\n}\n\n/** With the fix, a second discriminator of the same property adds its values to the first enum. */\nfunction mergeIntoPatchedEnum(state: ScanState, key: string, values: readonly string[]): boolean {\n const patched = state.patchedEnums.get(key);\n if (patched === undefined) {\n return false;\n }\n const merged = patched.enum as unknown[];\n merged.push(...values.filter((value) => !merged.includes(value)));\n return true;\n}\n\n/**\n * Add or replace the discriminator enum in the schema at `patch.ref`. Returns false, with a\n * warning, when that schema is neither an `allOf` nor an object schema. Without the fix every\n * patch adds a property, so two discriminators with different values intersect to `never`.\n */\nexport function patchDiscriminatorEnum(state: ScanState, patch: EnumPatch): boolean {\n if (isDeclared(state, patch)) {\n state.declaredKeys.add(enumKey(patch));\n return true;\n }\n if (!mergesValues(state)) {\n return addDiscriminatorEnum(state, patch) !== null;\n }\n const key = enumKey(patch);\n if (mergeIntoPatchedEnum(state, key, patch.values)) {\n return true;\n }\n const added = addDiscriminatorEnum(state, patch);\n if (added !== null) {\n state.patchedEnums.set(key, added);\n }\n return added !== null;\n}\n\nexport function markHandled(state: ScanState, ref: string): void {\n if (!state.refsHandled.includes(ref)) {\n state.refsHandled.push(ref);\n }\n}\n\nfunction warnInvalidMapping(patch: EnumPatch, logger: Logger): void {\n const mapped = `${patch.ref} => ${patch.values.join(\", \")}`;\n logger.warn(\n \"Discriminator mapping has an invalid schema (neither an object schema nor an allOf array): \" +\n `${mapped} (Discriminator: ${patch.discriminatorRef})`,\n );\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,153 @@
1
+ 'use strict';
2
+
3
+ const discriminatedUnion = require('../domain/openapi/discriminated-union.cjs');
4
+ const outputFixes = require('../domain/output-fixes.cjs');
5
+ const defaultPorts = require('./default-ports.cjs');
6
+ const discriminatorOtherOwners = require('./discriminator-other-owners.cjs');
7
+ const discriminatorPatch = require('./discriminator-patch.cjs');
8
+ const documentRefs = require('./document-refs.cjs');
9
+ const legacyUtils = require('./legacy-utils.cjs');
10
+
11
+ function inferredMapping(oneOf) {
12
+ const mapping = {};
13
+ for (const item of oneOf) {
14
+ if (!("$ref" in item)) {
15
+ continue;
16
+ }
17
+ const value = item.$ref.split("/").pop();
18
+ if (value) {
19
+ mapping[item.$ref] = { ...mapping[item.$ref], inferred: value };
20
+ }
21
+ }
22
+ return mapping;
23
+ }
24
+ function addDefinedMapping(mapping, defined) {
25
+ for (const [mappedValue, mappedRef] of Object.entries(defined)) {
26
+ if (!mappedRef) {
27
+ continue;
28
+ }
29
+ if (!mapping[mappedRef]?.defined) {
30
+ mapping[mappedRef] = { defined: [] };
31
+ }
32
+ mapping[mappedRef].defined?.push(mappedValue);
33
+ }
34
+ }
35
+ function patchMappedSchemas(state, mapping, discriminator) {
36
+ for (const [ref, { inferred, defined }] of Object.entries(mapping)) {
37
+ const isSkipped = !discriminatorPatch.mergesValues(state) && state.refsHandled.includes(ref);
38
+ if (isSkipped || !inferred && !defined) {
39
+ continue;
40
+ }
41
+ const values = defined ?? [inferred];
42
+ if (discriminatorPatch.mergesValues(state) && defined === void 0) {
43
+ state.inferredPatches.push({ ...discriminator, ref, values });
44
+ } else if (discriminatorPatch.patchDiscriminatorEnum(state, { ...discriminator, ref, values })) {
45
+ discriminatorPatch.markHandled(state, ref);
46
+ }
47
+ }
48
+ }
49
+ function collectDiscriminator(state, value, path) {
50
+ const discriminator = value.discriminator;
51
+ if (!discriminator?.propertyName) {
52
+ return;
53
+ }
54
+ const discriminatorRef = legacyUtils.createRef(path);
55
+ state.objects[discriminatorRef] = discriminator;
56
+ state.owners.add(discriminatorRef);
57
+ if (!Array.isArray(value.oneOf)) {
58
+ return;
59
+ }
60
+ const mapping = inferredMapping(value.oneOf);
61
+ if (discriminator.mapping) {
62
+ addDefinedMapping(mapping, discriminator.mapping);
63
+ }
64
+ patchMappedSchemas(state, mapping, { discriminator, discriminatorRef });
65
+ }
66
+ function valuesMappedTo(discriminator, ref) {
67
+ return Object.entries(discriminator.mapping ?? {}).filter(([, mappedRef]) => mappedRef === ref).map(([mappedValue]) => mappedValue);
68
+ }
69
+ function inheritsDiscriminator(state, parentRef, ref) {
70
+ if (!state.fixes.has(outputFixes.OutputFix.ALLOF_DISCRIMINATED_UNION)) {
71
+ return true;
72
+ }
73
+ const resolve = (target) => documentRefs.resolveDocumentRef(state.schema, target, state);
74
+ const union = discriminatedUnion.unionAt(parentRef, resolve);
75
+ return union === void 0 || discriminatedUnion.isUnionMember(union, ref, resolve);
76
+ }
77
+ function recordInherited(state, ref, discriminator, ownerRef) {
78
+ if (state.fixes.has(outputFixes.OutputFix.DISCRIMINATOR_VALUES) && state.owners.has(ref)) {
79
+ return;
80
+ }
81
+ const inherited = { ...discriminator };
82
+ state.objects[ref] = inherited;
83
+ discriminatorPatch.recordEnumParent(state, { discriminator, discriminatorRef: ownerRef }, inherited);
84
+ }
85
+ function inheritFromRef(state, parentRef, ref) {
86
+ const discriminator = state.objects[parentRef];
87
+ if (!discriminator) {
88
+ return false;
89
+ }
90
+ const values = valuesMappedTo(discriminator, ref);
91
+ const patch = { ref, values, discriminator, discriminatorRef: parentRef };
92
+ if (values.length > 0 && discriminatorPatch.patchDiscriminatorEnum(state, patch)) {
93
+ discriminatorPatch.markHandled(state, ref);
94
+ }
95
+ if (inheritsDiscriminator(state, parentRef, ref)) {
96
+ recordInherited(state, ref, discriminator, parentRef);
97
+ if (discriminatorPatch.mergesValues(state)) {
98
+ discriminatorOtherOwners.inheritOtherOwners(state, parentRef, ref);
99
+ }
100
+ }
101
+ return true;
102
+ }
103
+ function inheritDiscriminators(state, value, path) {
104
+ if (!Array.isArray(value.allOf)) {
105
+ return;
106
+ }
107
+ for (const item of value.allOf) {
108
+ if ("$ref" in item) {
109
+ if (!inheritFromRef(state, item.$ref, legacyUtils.createRef(path))) {
110
+ return;
111
+ }
112
+ } else if (item.discriminator?.propertyName) {
113
+ recordInherited(state, legacyUtils.createRef(path), item.discriminator, legacyUtils.createRef(path));
114
+ }
115
+ }
116
+ }
117
+ function applyInferredPatches(state) {
118
+ const mapped = /* @__PURE__ */ new Set([...state.patchedEnums.keys(), ...state.declaredKeys]);
119
+ for (const patch of state.inferredPatches) {
120
+ if (!mapped.has(discriminatorPatch.enumKey(patch)) && discriminatorPatch.patchDiscriminatorEnum(state, patch)) {
121
+ discriminatorPatch.markHandled(state, patch.ref);
122
+ }
123
+ }
124
+ discriminatorOtherOwners.applyOtherInferredPatches(state, mapped);
125
+ }
126
+ function findDiscriminators(schema, options) {
127
+ const state = {
128
+ ...options,
129
+ schema,
130
+ objects: {},
131
+ owners: /* @__PURE__ */ new Set(),
132
+ refsHandled: [],
133
+ patchedEnums: /* @__PURE__ */ new Map(),
134
+ inferredPatches: [],
135
+ otherInferredPatches: [],
136
+ otherProperties: {},
137
+ declaredKeys: /* @__PURE__ */ new Set(),
138
+ enumParents: /* @__PURE__ */ new Map()
139
+ };
140
+ documentRefs.walkDocument(schema, (value, path) => collectDiscriminator(state, value, path));
141
+ documentRefs.walkDocument(schema, (value, path) => inheritDiscriminators(state, value, path));
142
+ applyInferredPatches(state);
143
+ const { objects, refsHandled, enumParents, otherProperties } = state;
144
+ return { objects, refsHandled, enumParents, otherProperties };
145
+ }
146
+ function scanDiscriminators(schema, options, logger = defaultPorts.defaultLogger(options.silent ?? false)) {
147
+ const silent = options.silent ?? false;
148
+ return findDiscriminators(schema, { silent, logger, fixes: /* @__PURE__ */ new Set() });
149
+ }
150
+
151
+ exports.findDiscriminators = findDiscriminators;
152
+ exports.scanDiscriminators = scanDiscriminators;
153
+ //# sourceMappingURL=discriminator-scan.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discriminator-scan.cjs","sources":["../../src/api/discriminator-scan.ts"],"sourcesContent":["import type { Logger } from \"../application/ports/logger.js\";\nimport { isUnionMember, unionAt } from \"../domain/openapi/discriminated-union.js\";\nimport { OutputFix } from \"../domain/output-fixes.js\";\nimport type {\n DiscriminatorObject,\n GeneratorOptions,\n OpenAPI3,\n ReferenceObject,\n SchemaObject,\n} from \"../types.js\";\nimport { defaultLogger } from \"./default-ports.js\";\nimport type { EnumPatch } from \"./discriminator-enum.js\";\nimport type { EnumParent } from \"./discriminator-enum-parent.js\";\nimport { applyOtherInferredPatches, inheritOtherOwners } from \"./discriminator-other-owners.js\";\nimport {\n type DiscriminatorScanOptions,\n enumKey,\n markHandled,\n mergesValues,\n patchDiscriminatorEnum,\n recordEnumParent,\n type ScanState,\n} from \"./discriminator-patch.js\";\nimport { resolveDocumentRef, walkDocument } from \"./document-refs.js\";\nimport { createRef } from \"./legacy-utils.js\";\n\n/**\n * The inherited discriminator pre-pass. It finds every discriminator in the bundled document and\n * patches the mapped schemas in place with a required enum property, so that TypeScript can narrow\n * the generated union. The behavior and the warning text match the original `scanDiscriminators`.\n */\n\ntype DiscriminatorMapping = Record<string, { inferred?: string; defined?: string[] }>;\n\n/** The schema name at the end of each `oneOf` `$ref` is the inferred discriminator value. */\nfunction inferredMapping(oneOf: (SchemaObject | ReferenceObject)[]): DiscriminatorMapping {\n const mapping: DiscriminatorMapping = {};\n for (const item of oneOf) {\n if (!(\"$ref\" in item)) {\n continue;\n }\n const value = item.$ref.split(\"/\").pop();\n if (value) {\n mapping[item.$ref] = { ...mapping[item.$ref], inferred: value };\n }\n }\n return mapping;\n}\n\n/** Values defined in `discriminator.mapping` replace inferred ones for the same schema. */\nfunction addDefinedMapping(\n mapping: DiscriminatorMapping,\n defined: Readonly<Record<string, string>>,\n): void {\n for (const [mappedValue, mappedRef] of Object.entries(defined)) {\n if (!mappedRef) {\n continue;\n }\n if (!mapping[mappedRef]?.defined) {\n mapping[mappedRef] = { defined: [] };\n }\n mapping[mappedRef].defined?.push(mappedValue);\n }\n}\n\nfunction patchMappedSchemas(\n state: ScanState,\n mapping: DiscriminatorMapping,\n discriminator: Omit<EnumPatch, \"ref\" | \"values\">,\n): void {\n for (const [ref, { inferred, defined }] of Object.entries(mapping)) {\n const isSkipped = !mergesValues(state) && state.refsHandled.includes(ref);\n if (isSkipped || (!inferred && !defined)) {\n continue;\n }\n // A defined value wins: the schema name may not be the value the API sends.\n const values = defined ?? [inferred as string];\n if (mergesValues(state) && defined === undefined) {\n // A mapping found later, in this pass or the next, may name the schema.\n state.inferredPatches.push({ ...discriminator, ref, values });\n } else if (patchDiscriminatorEnum(state, { ...discriminator, ref, values })) {\n markHandled(state, ref);\n }\n }\n}\n\n/** Pass 1: collect every discriminator; patch the schemas of a discriminator + `oneOf`. */\nfunction collectDiscriminator(\n state: ScanState,\n value: Record<string, unknown>,\n path: (string | number)[],\n): void {\n const discriminator = value.discriminator as DiscriminatorObject | undefined;\n if (!discriminator?.propertyName) {\n return;\n }\n const discriminatorRef = createRef(path);\n state.objects[discriminatorRef] = discriminator;\n state.owners.add(discriminatorRef);\n if (!Array.isArray(value.oneOf)) {\n return;\n }\n const mapping = inferredMapping(value.oneOf);\n if (discriminator.mapping) {\n addDefinedMapping(mapping, discriminator.mapping);\n }\n patchMappedSchemas(state, mapping, { discriminator, discriminatorRef });\n}\n\n/** The mapping keys of `discriminator` that point at `ref`. */\nfunction valuesMappedTo(discriminator: DiscriminatorObject, ref: string): string[] {\n return Object.entries(discriminator.mapping ?? {})\n .filter(([, mappedRef]) => mappedRef === ref)\n .map(([mappedValue]) => mappedValue);\n}\n\n/**\n * Whether the schema at `ref` takes the discriminator of its `allOf` parent at `parentRef`. With\n * `allof-discriminated-union`, a schema that `allOf`s a discriminated union that does not contain\n * it is that union, not one of its members, so it gets no value of its own (#1464, #1690). A\n * schema that the union's mapping names is a member.\n */\nfunction inheritsDiscriminator(state: ScanState, parentRef: string, ref: string): boolean {\n if (!state.fixes.has(OutputFix.ALLOF_DISCRIMINATED_UNION)) {\n return true;\n }\n const resolve = (target: string) => resolveDocumentRef(state.schema, target, state);\n const union = unionAt(parentRef, resolve);\n return union === undefined || isUnionMember(union, ref, resolve);\n}\n\n/**\n * The schema at `ref` inherits `discriminator`. With `discriminator-values`, a schema that\n * defines a discriminator keeps it: the inherited one replaced its mapping, so the members walked\n * after this schema got their schema name instead of the mapped value (#2200). `ownerRef` is the\n * schema that declares the discriminator property, whose enum `--enum` values use (#1700).\n */\nfunction recordInherited(\n state: ScanState,\n ref: string,\n discriminator: DiscriminatorObject,\n ownerRef: string,\n): void {\n if (state.fixes.has(OutputFix.DISCRIMINATOR_VALUES) && state.owners.has(ref)) {\n return;\n }\n const inherited = { ...discriminator };\n state.objects[ref] = inherited;\n recordEnumParent(state, { discriminator, discriminatorRef: ownerRef }, inherited);\n}\n\n/**\n * An `allOf` item that is a `$ref` to a discriminator owner: the schema at `ref` inherits the\n * discriminator, and gets its enum when the parent's mapping names it. Returns false when the\n * `$ref` owns no discriminator, which ends the scan of this `allOf` (as in the original).\n */\nfunction inheritFromRef(state: ScanState, parentRef: string, ref: string): boolean {\n const discriminator = state.objects[parentRef];\n if (!discriminator) {\n return false;\n }\n const values = valuesMappedTo(discriminator, ref);\n const patch = { ref, values, discriminator, discriminatorRef: parentRef };\n if (values.length > 0 && patchDiscriminatorEnum(state, patch)) {\n markHandled(state, ref);\n }\n if (inheritsDiscriminator(state, parentRef, ref)) {\n recordInherited(state, ref, discriminator, parentRef);\n if (mergesValues(state)) {\n inheritOtherOwners(state, parentRef, ref);\n }\n }\n return true;\n}\n\n/** Pass 2: a schema whose `allOf` holds a discriminator, or a `$ref` to one, inherits it. */\nfunction inheritDiscriminators(\n state: ScanState,\n value: Record<string, unknown>,\n path: (string | number)[],\n): void {\n if (!Array.isArray(value.allOf)) {\n return;\n }\n for (const item of value.allOf as (SchemaObject | ReferenceObject)[]) {\n if (\"$ref\" in item) {\n if (!inheritFromRef(state, item.$ref, createRef(path))) {\n return;\n }\n } else if (item.discriminator?.propertyName) {\n // The inline item is typed at the schema's own location.\n recordInherited(state, createRef(path), item.discriminator, createRef(path));\n }\n }\n}\n\n/** The discriminators of a bundled document, after patching the mapped schemas in place. */\nexport interface DiscriminatorScan {\n objects: Record<string, DiscriminatorObject>;\n refsHandled: string[];\n /** With `discriminator-values`: the owner's enum of each enum the scan added. */\n enumParents: ReadonlyMap<object, EnumParent>;\n /** With `discriminator-values`: the properties of the other discriminators a schema inherits. */\n otherProperties: Readonly<Record<string, readonly string[]>>;\n}\n\n/**\n * With the fix: a schema-name value, only for a schema and property that no mapping gave a value.\n * Every enum patched so far came from a mapping, since schema-name values wait for this step.\n */\nfunction applyInferredPatches(state: ScanState): void {\n // A value that a schema declares itself came from a mapping as well.\n const mapped = new Set([...state.patchedEnums.keys(), ...state.declaredKeys]);\n for (const patch of state.inferredPatches) {\n if (!mapped.has(enumKey(patch)) && patchDiscriminatorEnum(state, patch)) {\n markHandled(state, patch.ref);\n }\n }\n applyOtherInferredPatches(state, mapped);\n}\n\n/** Find every discriminator in `schema`; warnings go to `logger` unless `silent`. */\nexport function findDiscriminators(\n schema: OpenAPI3,\n options: DiscriminatorScanOptions,\n): DiscriminatorScan {\n const state: ScanState = {\n ...options,\n schema,\n objects: {},\n owners: new Set(),\n refsHandled: [],\n patchedEnums: new Map(),\n inferredPatches: [],\n otherInferredPatches: [],\n otherProperties: {},\n declaredKeys: new Set(),\n enumParents: new Map(),\n };\n walkDocument(schema, (value, path) => collectDiscriminator(state, value, path));\n // A second pass, because an `allOf` may name a discriminator that is defined later.\n walkDocument(schema, (value, path) => inheritDiscriminators(state, value, path));\n applyInferredPatches(state);\n const { objects, refsHandled, enumParents, otherProperties } = state;\n return { objects, refsHandled, enumParents, otherProperties };\n}\n\n/**\n * Return a key–value map of discriminator objects found in a schema. Warnings go to `logger`;\n * without one, to the default terminal logger, as the original did.\n * @deprecated Kept for 1.x; removed in 2.0 (ADR-004, decision 9).\n */\nexport function scanDiscriminators(\n schema: OpenAPI3,\n options: GeneratorOptions,\n logger: Logger = defaultLogger(options.silent ?? false),\n): DiscriminatorScan {\n const silent = options.silent ?? false;\n return findDiscriminators(schema, { silent, logger, fixes: new Set() });\n}\n"],"names":["mergesValues","patchDiscriminatorEnum","markHandled","createRef","OutputFix","resolveDocumentRef","unionAt","isUnionMember","recordEnumParent","inheritOtherOwners","enumKey","applyOtherInferredPatches","walkDocument","defaultLogger"],"mappings":"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"}
@@ -0,0 +1,150 @@
1
+ import { unionAt, isUnionMember } from '../domain/openapi/discriminated-union.mjs';
2
+ import { OutputFix } from '../domain/output-fixes.mjs';
3
+ import { defaultLogger } from './default-ports.mjs';
4
+ import { applyOtherInferredPatches, inheritOtherOwners } from './discriminator-other-owners.mjs';
5
+ import { enumKey, patchDiscriminatorEnum, markHandled, mergesValues, recordEnumParent } from './discriminator-patch.mjs';
6
+ import { walkDocument, resolveDocumentRef } from './document-refs.mjs';
7
+ import { createRef } from './legacy-utils.mjs';
8
+
9
+ function inferredMapping(oneOf) {
10
+ const mapping = {};
11
+ for (const item of oneOf) {
12
+ if (!("$ref" in item)) {
13
+ continue;
14
+ }
15
+ const value = item.$ref.split("/").pop();
16
+ if (value) {
17
+ mapping[item.$ref] = { ...mapping[item.$ref], inferred: value };
18
+ }
19
+ }
20
+ return mapping;
21
+ }
22
+ function addDefinedMapping(mapping, defined) {
23
+ for (const [mappedValue, mappedRef] of Object.entries(defined)) {
24
+ if (!mappedRef) {
25
+ continue;
26
+ }
27
+ if (!mapping[mappedRef]?.defined) {
28
+ mapping[mappedRef] = { defined: [] };
29
+ }
30
+ mapping[mappedRef].defined?.push(mappedValue);
31
+ }
32
+ }
33
+ function patchMappedSchemas(state, mapping, discriminator) {
34
+ for (const [ref, { inferred, defined }] of Object.entries(mapping)) {
35
+ const isSkipped = !mergesValues(state) && state.refsHandled.includes(ref);
36
+ if (isSkipped || !inferred && !defined) {
37
+ continue;
38
+ }
39
+ const values = defined ?? [inferred];
40
+ if (mergesValues(state) && defined === void 0) {
41
+ state.inferredPatches.push({ ...discriminator, ref, values });
42
+ } else if (patchDiscriminatorEnum(state, { ...discriminator, ref, values })) {
43
+ markHandled(state, ref);
44
+ }
45
+ }
46
+ }
47
+ function collectDiscriminator(state, value, path) {
48
+ const discriminator = value.discriminator;
49
+ if (!discriminator?.propertyName) {
50
+ return;
51
+ }
52
+ const discriminatorRef = createRef(path);
53
+ state.objects[discriminatorRef] = discriminator;
54
+ state.owners.add(discriminatorRef);
55
+ if (!Array.isArray(value.oneOf)) {
56
+ return;
57
+ }
58
+ const mapping = inferredMapping(value.oneOf);
59
+ if (discriminator.mapping) {
60
+ addDefinedMapping(mapping, discriminator.mapping);
61
+ }
62
+ patchMappedSchemas(state, mapping, { discriminator, discriminatorRef });
63
+ }
64
+ function valuesMappedTo(discriminator, ref) {
65
+ return Object.entries(discriminator.mapping ?? {}).filter(([, mappedRef]) => mappedRef === ref).map(([mappedValue]) => mappedValue);
66
+ }
67
+ function inheritsDiscriminator(state, parentRef, ref) {
68
+ if (!state.fixes.has(OutputFix.ALLOF_DISCRIMINATED_UNION)) {
69
+ return true;
70
+ }
71
+ const resolve = (target) => resolveDocumentRef(state.schema, target, state);
72
+ const union = unionAt(parentRef, resolve);
73
+ return union === void 0 || isUnionMember(union, ref, resolve);
74
+ }
75
+ function recordInherited(state, ref, discriminator, ownerRef) {
76
+ if (state.fixes.has(OutputFix.DISCRIMINATOR_VALUES) && state.owners.has(ref)) {
77
+ return;
78
+ }
79
+ const inherited = { ...discriminator };
80
+ state.objects[ref] = inherited;
81
+ recordEnumParent(state, { discriminator, discriminatorRef: ownerRef }, inherited);
82
+ }
83
+ function inheritFromRef(state, parentRef, ref) {
84
+ const discriminator = state.objects[parentRef];
85
+ if (!discriminator) {
86
+ return false;
87
+ }
88
+ const values = valuesMappedTo(discriminator, ref);
89
+ const patch = { ref, values, discriminator, discriminatorRef: parentRef };
90
+ if (values.length > 0 && patchDiscriminatorEnum(state, patch)) {
91
+ markHandled(state, ref);
92
+ }
93
+ if (inheritsDiscriminator(state, parentRef, ref)) {
94
+ recordInherited(state, ref, discriminator, parentRef);
95
+ if (mergesValues(state)) {
96
+ inheritOtherOwners(state, parentRef, ref);
97
+ }
98
+ }
99
+ return true;
100
+ }
101
+ function inheritDiscriminators(state, value, path) {
102
+ if (!Array.isArray(value.allOf)) {
103
+ return;
104
+ }
105
+ for (const item of value.allOf) {
106
+ if ("$ref" in item) {
107
+ if (!inheritFromRef(state, item.$ref, createRef(path))) {
108
+ return;
109
+ }
110
+ } else if (item.discriminator?.propertyName) {
111
+ recordInherited(state, createRef(path), item.discriminator, createRef(path));
112
+ }
113
+ }
114
+ }
115
+ function applyInferredPatches(state) {
116
+ const mapped = /* @__PURE__ */ new Set([...state.patchedEnums.keys(), ...state.declaredKeys]);
117
+ for (const patch of state.inferredPatches) {
118
+ if (!mapped.has(enumKey(patch)) && patchDiscriminatorEnum(state, patch)) {
119
+ markHandled(state, patch.ref);
120
+ }
121
+ }
122
+ applyOtherInferredPatches(state, mapped);
123
+ }
124
+ function findDiscriminators(schema, options) {
125
+ const state = {
126
+ ...options,
127
+ schema,
128
+ objects: {},
129
+ owners: /* @__PURE__ */ new Set(),
130
+ refsHandled: [],
131
+ patchedEnums: /* @__PURE__ */ new Map(),
132
+ inferredPatches: [],
133
+ otherInferredPatches: [],
134
+ otherProperties: {},
135
+ declaredKeys: /* @__PURE__ */ new Set(),
136
+ enumParents: /* @__PURE__ */ new Map()
137
+ };
138
+ walkDocument(schema, (value, path) => collectDiscriminator(state, value, path));
139
+ walkDocument(schema, (value, path) => inheritDiscriminators(state, value, path));
140
+ applyInferredPatches(state);
141
+ const { objects, refsHandled, enumParents, otherProperties } = state;
142
+ return { objects, refsHandled, enumParents, otherProperties };
143
+ }
144
+ function scanDiscriminators(schema, options, logger = defaultLogger(options.silent ?? false)) {
145
+ const silent = options.silent ?? false;
146
+ return findDiscriminators(schema, { silent, logger, fixes: /* @__PURE__ */ new Set() });
147
+ }
148
+
149
+ export { findDiscriminators, scanDiscriminators };
150
+ //# sourceMappingURL=discriminator-scan.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discriminator-scan.mjs","sources":["../../src/api/discriminator-scan.ts"],"sourcesContent":["import type { Logger } from \"../application/ports/logger.js\";\nimport { isUnionMember, unionAt } from \"../domain/openapi/discriminated-union.js\";\nimport { OutputFix } from \"../domain/output-fixes.js\";\nimport type {\n DiscriminatorObject,\n GeneratorOptions,\n OpenAPI3,\n ReferenceObject,\n SchemaObject,\n} from \"../types.js\";\nimport { defaultLogger } from \"./default-ports.js\";\nimport type { EnumPatch } from \"./discriminator-enum.js\";\nimport type { EnumParent } from \"./discriminator-enum-parent.js\";\nimport { applyOtherInferredPatches, inheritOtherOwners } from \"./discriminator-other-owners.js\";\nimport {\n type DiscriminatorScanOptions,\n enumKey,\n markHandled,\n mergesValues,\n patchDiscriminatorEnum,\n recordEnumParent,\n type ScanState,\n} from \"./discriminator-patch.js\";\nimport { resolveDocumentRef, walkDocument } from \"./document-refs.js\";\nimport { createRef } from \"./legacy-utils.js\";\n\n/**\n * The inherited discriminator pre-pass. It finds every discriminator in the bundled document and\n * patches the mapped schemas in place with a required enum property, so that TypeScript can narrow\n * the generated union. The behavior and the warning text match the original `scanDiscriminators`.\n */\n\ntype DiscriminatorMapping = Record<string, { inferred?: string; defined?: string[] }>;\n\n/** The schema name at the end of each `oneOf` `$ref` is the inferred discriminator value. */\nfunction inferredMapping(oneOf: (SchemaObject | ReferenceObject)[]): DiscriminatorMapping {\n const mapping: DiscriminatorMapping = {};\n for (const item of oneOf) {\n if (!(\"$ref\" in item)) {\n continue;\n }\n const value = item.$ref.split(\"/\").pop();\n if (value) {\n mapping[item.$ref] = { ...mapping[item.$ref], inferred: value };\n }\n }\n return mapping;\n}\n\n/** Values defined in `discriminator.mapping` replace inferred ones for the same schema. */\nfunction addDefinedMapping(\n mapping: DiscriminatorMapping,\n defined: Readonly<Record<string, string>>,\n): void {\n for (const [mappedValue, mappedRef] of Object.entries(defined)) {\n if (!mappedRef) {\n continue;\n }\n if (!mapping[mappedRef]?.defined) {\n mapping[mappedRef] = { defined: [] };\n }\n mapping[mappedRef].defined?.push(mappedValue);\n }\n}\n\nfunction patchMappedSchemas(\n state: ScanState,\n mapping: DiscriminatorMapping,\n discriminator: Omit<EnumPatch, \"ref\" | \"values\">,\n): void {\n for (const [ref, { inferred, defined }] of Object.entries(mapping)) {\n const isSkipped = !mergesValues(state) && state.refsHandled.includes(ref);\n if (isSkipped || (!inferred && !defined)) {\n continue;\n }\n // A defined value wins: the schema name may not be the value the API sends.\n const values = defined ?? [inferred as string];\n if (mergesValues(state) && defined === undefined) {\n // A mapping found later, in this pass or the next, may name the schema.\n state.inferredPatches.push({ ...discriminator, ref, values });\n } else if (patchDiscriminatorEnum(state, { ...discriminator, ref, values })) {\n markHandled(state, ref);\n }\n }\n}\n\n/** Pass 1: collect every discriminator; patch the schemas of a discriminator + `oneOf`. */\nfunction collectDiscriminator(\n state: ScanState,\n value: Record<string, unknown>,\n path: (string | number)[],\n): void {\n const discriminator = value.discriminator as DiscriminatorObject | undefined;\n if (!discriminator?.propertyName) {\n return;\n }\n const discriminatorRef = createRef(path);\n state.objects[discriminatorRef] = discriminator;\n state.owners.add(discriminatorRef);\n if (!Array.isArray(value.oneOf)) {\n return;\n }\n const mapping = inferredMapping(value.oneOf);\n if (discriminator.mapping) {\n addDefinedMapping(mapping, discriminator.mapping);\n }\n patchMappedSchemas(state, mapping, { discriminator, discriminatorRef });\n}\n\n/** The mapping keys of `discriminator` that point at `ref`. */\nfunction valuesMappedTo(discriminator: DiscriminatorObject, ref: string): string[] {\n return Object.entries(discriminator.mapping ?? {})\n .filter(([, mappedRef]) => mappedRef === ref)\n .map(([mappedValue]) => mappedValue);\n}\n\n/**\n * Whether the schema at `ref` takes the discriminator of its `allOf` parent at `parentRef`. With\n * `allof-discriminated-union`, a schema that `allOf`s a discriminated union that does not contain\n * it is that union, not one of its members, so it gets no value of its own (#1464, #1690). A\n * schema that the union's mapping names is a member.\n */\nfunction inheritsDiscriminator(state: ScanState, parentRef: string, ref: string): boolean {\n if (!state.fixes.has(OutputFix.ALLOF_DISCRIMINATED_UNION)) {\n return true;\n }\n const resolve = (target: string) => resolveDocumentRef(state.schema, target, state);\n const union = unionAt(parentRef, resolve);\n return union === undefined || isUnionMember(union, ref, resolve);\n}\n\n/**\n * The schema at `ref` inherits `discriminator`. With `discriminator-values`, a schema that\n * defines a discriminator keeps it: the inherited one replaced its mapping, so the members walked\n * after this schema got their schema name instead of the mapped value (#2200). `ownerRef` is the\n * schema that declares the discriminator property, whose enum `--enum` values use (#1700).\n */\nfunction recordInherited(\n state: ScanState,\n ref: string,\n discriminator: DiscriminatorObject,\n ownerRef: string,\n): void {\n if (state.fixes.has(OutputFix.DISCRIMINATOR_VALUES) && state.owners.has(ref)) {\n return;\n }\n const inherited = { ...discriminator };\n state.objects[ref] = inherited;\n recordEnumParent(state, { discriminator, discriminatorRef: ownerRef }, inherited);\n}\n\n/**\n * An `allOf` item that is a `$ref` to a discriminator owner: the schema at `ref` inherits the\n * discriminator, and gets its enum when the parent's mapping names it. Returns false when the\n * `$ref` owns no discriminator, which ends the scan of this `allOf` (as in the original).\n */\nfunction inheritFromRef(state: ScanState, parentRef: string, ref: string): boolean {\n const discriminator = state.objects[parentRef];\n if (!discriminator) {\n return false;\n }\n const values = valuesMappedTo(discriminator, ref);\n const patch = { ref, values, discriminator, discriminatorRef: parentRef };\n if (values.length > 0 && patchDiscriminatorEnum(state, patch)) {\n markHandled(state, ref);\n }\n if (inheritsDiscriminator(state, parentRef, ref)) {\n recordInherited(state, ref, discriminator, parentRef);\n if (mergesValues(state)) {\n inheritOtherOwners(state, parentRef, ref);\n }\n }\n return true;\n}\n\n/** Pass 2: a schema whose `allOf` holds a discriminator, or a `$ref` to one, inherits it. */\nfunction inheritDiscriminators(\n state: ScanState,\n value: Record<string, unknown>,\n path: (string | number)[],\n): void {\n if (!Array.isArray(value.allOf)) {\n return;\n }\n for (const item of value.allOf as (SchemaObject | ReferenceObject)[]) {\n if (\"$ref\" in item) {\n if (!inheritFromRef(state, item.$ref, createRef(path))) {\n return;\n }\n } else if (item.discriminator?.propertyName) {\n // The inline item is typed at the schema's own location.\n recordInherited(state, createRef(path), item.discriminator, createRef(path));\n }\n }\n}\n\n/** The discriminators of a bundled document, after patching the mapped schemas in place. */\nexport interface DiscriminatorScan {\n objects: Record<string, DiscriminatorObject>;\n refsHandled: string[];\n /** With `discriminator-values`: the owner's enum of each enum the scan added. */\n enumParents: ReadonlyMap<object, EnumParent>;\n /** With `discriminator-values`: the properties of the other discriminators a schema inherits. */\n otherProperties: Readonly<Record<string, readonly string[]>>;\n}\n\n/**\n * With the fix: a schema-name value, only for a schema and property that no mapping gave a value.\n * Every enum patched so far came from a mapping, since schema-name values wait for this step.\n */\nfunction applyInferredPatches(state: ScanState): void {\n // A value that a schema declares itself came from a mapping as well.\n const mapped = new Set([...state.patchedEnums.keys(), ...state.declaredKeys]);\n for (const patch of state.inferredPatches) {\n if (!mapped.has(enumKey(patch)) && patchDiscriminatorEnum(state, patch)) {\n markHandled(state, patch.ref);\n }\n }\n applyOtherInferredPatches(state, mapped);\n}\n\n/** Find every discriminator in `schema`; warnings go to `logger` unless `silent`. */\nexport function findDiscriminators(\n schema: OpenAPI3,\n options: DiscriminatorScanOptions,\n): DiscriminatorScan {\n const state: ScanState = {\n ...options,\n schema,\n objects: {},\n owners: new Set(),\n refsHandled: [],\n patchedEnums: new Map(),\n inferredPatches: [],\n otherInferredPatches: [],\n otherProperties: {},\n declaredKeys: new Set(),\n enumParents: new Map(),\n };\n walkDocument(schema, (value, path) => collectDiscriminator(state, value, path));\n // A second pass, because an `allOf` may name a discriminator that is defined later.\n walkDocument(schema, (value, path) => inheritDiscriminators(state, value, path));\n applyInferredPatches(state);\n const { objects, refsHandled, enumParents, otherProperties } = state;\n return { objects, refsHandled, enumParents, otherProperties };\n}\n\n/**\n * Return a key–value map of discriminator objects found in a schema. Warnings go to `logger`;\n * without one, to the default terminal logger, as the original did.\n * @deprecated Kept for 1.x; removed in 2.0 (ADR-004, decision 9).\n */\nexport function scanDiscriminators(\n schema: OpenAPI3,\n options: GeneratorOptions,\n logger: Logger = defaultLogger(options.silent ?? false),\n): DiscriminatorScan {\n const silent = options.silent ?? false;\n return findDiscriminators(schema, { silent, logger, fixes: new Set() });\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ 'use strict';
2
+
3
+ const loadTypescript = require('../adapters/type-ast-bridge/load-typescript.cjs');
4
+ const printTypescript = require('../adapters/type-ast-bridge/print-typescript.cjs');
5
+ const footerEntry = require('./footer-entry.cjs');
6
+
7
+ function withoutFinalLineBreak(text) {
8
+ return text.endsWith("\n") ? text.slice(0, -1) : text;
9
+ }
10
+ function printedNode(node) {
11
+ return {
12
+ kind: "rawDeclaration",
13
+ text: withoutFinalLineBreak(printTypescript.printWithTypeScript(loadTypescript.loadTypeScript(), [node]))
14
+ };
15
+ }
16
+ function entryDeclaration(entry) {
17
+ return footerEntry.isIrDeclaration(entry) ? entry : printedNode(entry);
18
+ }
19
+ function documentDeclarations({
20
+ body,
21
+ footer,
22
+ closing
23
+ }) {
24
+ return [...body, ...footer.map(entryDeclaration), ...closing];
25
+ }
26
+
27
+ exports.documentDeclarations = documentDeclarations;
28
+ //# sourceMappingURL=document-declarations.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-declarations.cjs","sources":["../../src/api/document-declarations.ts"],"sourcesContent":["import { loadTypeScript } from \"../adapters/type-ast-bridge/load-typescript.js\";\nimport { printWithTypeScript } from \"../adapters/type-ast-bridge/print-typescript.js\";\nimport type { ts } from \"../adapters/type-ast-bridge/typescript-types.js\";\nimport type { IrDeclaration } from \"../domain/ir/nodes.js\";\nimport { type FooterEntry, isIrDeclaration } from \"./footer-entry.js\";\n\n/** The document in three parts; the footer may hold TypeScript nodes from user code. */\nexport interface TransformedDocument {\n readonly body: readonly IrDeclaration[];\n readonly footer: readonly FooterEntry[];\n readonly closing: readonly IrDeclaration[];\n}\n\n/** The TypeScript printer ends the file with a line break; a raw declaration's text has none. */\nfunction withoutFinalLineBreak(text: string): string {\n return text.endsWith(\"\\n\") ? text.slice(0, -1) : text;\n}\n\n/** A TypeScript node from user code, as the TypeScript printer prints it. */\nfunction printedNode(node: ts.Node): IrDeclaration {\n return {\n kind: \"rawDeclaration\",\n text: withoutFinalLineBreak(printWithTypeScript(loadTypeScript(), [node])),\n };\n}\n\nfunction entryDeclaration(entry: FooterEntry): IrDeclaration {\n return isIrDeclaration(entry) ? entry : printedNode(entry);\n}\n\n/**\n * The document as IR declarations in output order. Footer TypeScript nodes from user code become\n * raw text through the bridge; raw text is printed as written (ADR-010, decision 4).\n */\nexport function documentDeclarations({\n body,\n footer,\n closing,\n}: TransformedDocument): IrDeclaration[] {\n return [...body, ...footer.map(entryDeclaration), ...closing];\n}\n"],"names":["printWithTypeScript","loadTypeScript","isIrDeclaration"],"mappings":";;;;;;AAcA,SAAS,sBAAsB,IAAA,EAAsB;AACnD,EAAA,OAAO,IAAA,CAAK,SAAS,IAAI,CAAA,GAAI,KAAK,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,GAAI,IAAA;AACnD;AAGA,SAAS,YAAY,IAAA,EAA8B;AACjD,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,gBAAA;AAAA,IACN,IAAA,EAAM,sBAAsBA,mCAAA,CAAoBC,6BAAA,IAAkB,CAAC,IAAI,CAAC,CAAC;AAAA,GAC3E;AACF;AAEA,SAAS,iBAAiB,KAAA,EAAmC;AAC3D,EAAA,OAAOC,2BAAA,CAAgB,KAAK,CAAA,GAAI,KAAA,GAAQ,YAAY,KAAK,CAAA;AAC3D;AAMO,SAAS,oBAAA,CAAqB;AAAA,EACnC,IAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAAyC;AACvC,EAAA,OAAO,CAAC,GAAG,IAAA,EAAM,GAAG,OAAO,GAAA,CAAI,gBAAgB,CAAA,EAAG,GAAG,OAAO,CAAA;AAC9D;;"}
@@ -0,0 +1,26 @@
1
+ import { loadTypeScript } from '../adapters/type-ast-bridge/load-typescript.mjs';
2
+ import { printWithTypeScript } from '../adapters/type-ast-bridge/print-typescript.mjs';
3
+ import { isIrDeclaration } from './footer-entry.mjs';
4
+
5
+ function withoutFinalLineBreak(text) {
6
+ return text.endsWith("\n") ? text.slice(0, -1) : text;
7
+ }
8
+ function printedNode(node) {
9
+ return {
10
+ kind: "rawDeclaration",
11
+ text: withoutFinalLineBreak(printWithTypeScript(loadTypeScript(), [node]))
12
+ };
13
+ }
14
+ function entryDeclaration(entry) {
15
+ return isIrDeclaration(entry) ? entry : printedNode(entry);
16
+ }
17
+ function documentDeclarations({
18
+ body,
19
+ footer,
20
+ closing
21
+ }) {
22
+ return [...body, ...footer.map(entryDeclaration), ...closing];
23
+ }
24
+
25
+ export { documentDeclarations };
26
+ //# sourceMappingURL=document-declarations.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-declarations.mjs","sources":["../../src/api/document-declarations.ts"],"sourcesContent":["import { loadTypeScript } from \"../adapters/type-ast-bridge/load-typescript.js\";\nimport { printWithTypeScript } from \"../adapters/type-ast-bridge/print-typescript.js\";\nimport type { ts } from \"../adapters/type-ast-bridge/typescript-types.js\";\nimport type { IrDeclaration } from \"../domain/ir/nodes.js\";\nimport { type FooterEntry, isIrDeclaration } from \"./footer-entry.js\";\n\n/** The document in three parts; the footer may hold TypeScript nodes from user code. */\nexport interface TransformedDocument {\n readonly body: readonly IrDeclaration[];\n readonly footer: readonly FooterEntry[];\n readonly closing: readonly IrDeclaration[];\n}\n\n/** The TypeScript printer ends the file with a line break; a raw declaration's text has none. */\nfunction withoutFinalLineBreak(text: string): string {\n return text.endsWith(\"\\n\") ? text.slice(0, -1) : text;\n}\n\n/** A TypeScript node from user code, as the TypeScript printer prints it. */\nfunction printedNode(node: ts.Node): IrDeclaration {\n return {\n kind: \"rawDeclaration\",\n text: withoutFinalLineBreak(printWithTypeScript(loadTypeScript(), [node])),\n };\n}\n\nfunction entryDeclaration(entry: FooterEntry): IrDeclaration {\n return isIrDeclaration(entry) ? entry : printedNode(entry);\n}\n\n/**\n * The document as IR declarations in output order. Footer TypeScript nodes from user code become\n * raw text through the bridge; raw text is printed as written (ADR-010, decision 4).\n */\nexport function documentDeclarations({\n body,\n footer,\n closing,\n}: TransformedDocument): IrDeclaration[] {\n return [...body, ...footer.map(entryDeclaration), ...closing];\n}\n"],"names":[],"mappings":";;;;AAcA,SAAS,sBAAsB,IAAA,EAAsB;AACnD,EAAA,OAAO,IAAA,CAAK,SAAS,IAAI,CAAA,GAAI,KAAK,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,GAAI,IAAA;AACnD;AAGA,SAAS,YAAY,IAAA,EAA8B;AACjD,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,gBAAA;AAAA,IACN,IAAA,EAAM,sBAAsB,mBAAA,CAAoB,cAAA,IAAkB,CAAC,IAAI,CAAC,CAAC;AAAA,GAC3E;AACF;AAEA,SAAS,iBAAiB,KAAA,EAAmC;AAC3D,EAAA,OAAO,eAAA,CAAgB,KAAK,CAAA,GAAI,KAAA,GAAQ,YAAY,KAAK,CAAA;AAC3D;AAMO,SAAS,oBAAA,CAAqB;AAAA,EACnC,IAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAAyC;AACvC,EAAA,OAAO,CAAC,GAAG,IAAA,EAAM,GAAG,OAAO,GAAA,CAAI,gBAAgB,CAAA,EAAG,GAAG,OAAO,CAAA;AAC9D;;"}
@@ -0,0 +1,53 @@
1
+ 'use strict';
2
+
3
+ const refUtils_js = require('@redocly/openapi-core/lib/ref-utils.js');
4
+ const defaultPorts = require('./default-ports.cjs');
5
+
6
+ function resolveDocumentRef(schema, $ref, options) {
7
+ const { visited = [] } = options;
8
+ const logger = options.logger ?? defaultPorts.defaultLogger(options.silent ?? false);
9
+ const { pointer } = refUtils_js.parseRef($ref);
10
+ if (!pointer.length) {
11
+ return void 0;
12
+ }
13
+ let node = schema;
14
+ for (const key of pointer) {
15
+ if (node && typeof node === "object" && node[key]) {
16
+ node = node[key];
17
+ } else {
18
+ logger.warn(`Could not resolve $ref "${$ref}"`);
19
+ return void 0;
20
+ }
21
+ }
22
+ if (node && typeof node === "object" && node.$ref) {
23
+ if (visited.includes(node.$ref)) {
24
+ logger.warn(`Could not resolve circular $ref "${$ref}"`);
25
+ return void 0;
26
+ }
27
+ return resolveDocumentRef(schema, node.$ref, {
28
+ ...options,
29
+ logger,
30
+ visited: [...visited, node.$ref]
31
+ });
32
+ }
33
+ return node;
34
+ }
35
+ function walkDocument(obj, cb, path = []) {
36
+ if (!obj || typeof obj !== "object") {
37
+ return;
38
+ }
39
+ if (Array.isArray(obj)) {
40
+ for (let i = 0; i < obj.length; i++) {
41
+ walkDocument(obj[i], cb, path.concat(i));
42
+ }
43
+ return;
44
+ }
45
+ cb(obj, path);
46
+ for (const k of Object.keys(obj)) {
47
+ walkDocument(obj[k], cb, path.concat(k));
48
+ }
49
+ }
50
+
51
+ exports.resolveDocumentRef = resolveDocumentRef;
52
+ exports.walkDocument = walkDocument;
53
+ //# sourceMappingURL=document-refs.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-refs.cjs","sources":["../../src/api/document-refs.ts"],"sourcesContent":["import { parseRef } from \"@redocly/openapi-core/lib/ref-utils.js\";\nimport type { Logger } from \"../application/ports/logger.js\";\nimport { defaultLogger } from \"./default-ports.js\";\n\n/** `$ref` resolution and the document walk that the generator's pre-pass uses. */\n\nexport interface ResolveRefOptions {\n silent: boolean;\n visited?: string[];\n /** @internal Where warnings go; the default terminal logger (respecting `silent`) if absent. */\n logger?: Logger;\n}\n\n/** Resolve a `$ref` in a document; warns and returns undefined when it cannot. */\nexport function resolveDocumentRef<T>(\n schema: any,\n $ref: string,\n options: ResolveRefOptions,\n): T | undefined {\n const { visited = [] } = options;\n const logger = options.logger ?? defaultLogger(options.silent ?? false);\n const { pointer } = parseRef($ref);\n if (!pointer.length) {\n return undefined;\n }\n let node = schema;\n for (const key of pointer) {\n if (node && typeof node === \"object\" && node[key]) {\n node = node[key];\n } else {\n logger.warn(`Could not resolve $ref \"${$ref}\"`);\n return undefined;\n }\n }\n\n // if this is also a $ref, keep tracing\n if (node && typeof node === \"object\" && node.$ref) {\n if (visited.includes(node.$ref)) {\n logger.warn(`Could not resolve circular $ref \"${$ref}\"`);\n return undefined;\n }\n return resolveDocumentRef(schema, node.$ref, {\n ...options,\n logger,\n visited: [...visited, node.$ref],\n });\n }\n\n return node;\n}\n\n/** Call `cb` for every object in a JSON-serializable (non-circular) value, depth first. */\nexport function walkDocument(\n obj: unknown,\n cb: (value: Record<string, unknown>, path: (string | number)[]) => void,\n path: (string | number)[] = [],\n): void {\n if (!obj || typeof obj !== \"object\") {\n return;\n }\n if (Array.isArray(obj)) {\n for (let i = 0; i < obj.length; i++) {\n walkDocument(obj[i], cb, path.concat(i));\n }\n return;\n }\n cb(obj as Record<string, unknown>, path);\n for (const k of Object.keys(obj)) {\n walkDocument((obj as Record<string, unknown>)[k], cb, path.concat(k));\n }\n}\n"],"names":["defaultLogger","parseRef"],"mappings":";;;;;AAcO,SAAS,kBAAA,CACd,MAAA,EACA,IAAA,EACA,OAAA,EACe;AACf,EAAA,MAAM,EAAE,OAAA,GAAU,EAAC,EAAE,GAAI,OAAA;AACzB,EAAA,MAAM,SAAS,OAAA,CAAQ,MAAA,IAAUA,0BAAA,CAAc,OAAA,CAAQ,UAAU,KAAK,CAAA;AACtE,EAAA,MAAM,EAAE,OAAA,EAAQ,GAAIC,oBAAA,CAAS,IAAI,CAAA;AACjC,EAAA,IAAI,CAAC,QAAQ,MAAA,EAAQ;AACnB,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI,IAAA,GAAO,MAAA;AACX,EAAA,KAAA,MAAW,OAAO,OAAA,EAAS;AACzB,IAAA,IAAI,QAAQ,OAAO,IAAA,KAAS,QAAA,IAAY,IAAA,CAAK,GAAG,CAAA,EAAG;AACjD,MAAA,IAAA,GAAO,KAAK,GAAG,CAAA;AAAA,IACjB,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,IAAA,CAAK,CAAA,wBAAA,EAA2B,IAAI,CAAA,CAAA,CAAG,CAAA;AAC9C,MAAA,OAAO,MAAA;AAAA,IACT;AAAA,EACF;AAGA,EAAA,IAAI,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,IAAY,KAAK,IAAA,EAAM;AACjD,IAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA,EAAG;AAC/B,MAAA,MAAA,CAAO,IAAA,CAAK,CAAA,iCAAA,EAAoC,IAAI,CAAA,CAAA,CAAG,CAAA;AACvD,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,OAAO,kBAAA,CAAmB,MAAA,EAAQ,IAAA,CAAK,IAAA,EAAM;AAAA,MAC3C,GAAG,OAAA;AAAA,MACH,MAAA;AAAA,MACA,OAAA,EAAS,CAAC,GAAG,OAAA,EAAS,KAAK,IAAI;AAAA,KAChC,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,IAAA;AACT;AAGO,SAAS,YAAA,CACd,GAAA,EACA,EAAA,EACA,IAAA,GAA4B,EAAC,EACvB;AACN,EAAA,IAAI,CAAC,GAAA,IAAO,OAAO,GAAA,KAAQ,QAAA,EAAU;AACnC,IAAA;AAAA,EACF;AACA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,EAAG;AACtB,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,QAAQ,CAAA,EAAA,EAAK;AACnC,MAAA,YAAA,CAAa,IAAI,CAAC,CAAA,EAAG,IAAI,IAAA,CAAK,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,IACzC;AACA,IAAA;AAAA,EACF;AACA,EAAA,EAAA,CAAG,KAAgC,IAAI,CAAA;AACvC,EAAA,KAAA,MAAW,CAAA,IAAK,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,EAAG;AAChC,IAAA,YAAA,CAAc,IAAgC,CAAC,CAAA,EAAG,IAAI,IAAA,CAAK,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,EACtE;AACF;;;"}