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,186 @@
1
+ 'use strict';
2
+
3
+ const errors = require('../../../domain/errors.cjs');
4
+ const constructors = require('../../../domain/ir/constructors.cjs');
5
+ const propertyName = require('../../../domain/ir/property-name.cjs');
6
+ const jsonPointer = require('../../../domain/openapi/json-pointer.cjs');
7
+ const documentEntries = require('../document-entries.cjs');
8
+ const pointerType = require('../ref-pointer/pointer-type.cjs');
9
+ const schemaComment = require('../schema-comment.cjs');
10
+ const sharedTypes = require('../shared-types.cjs');
11
+ const typeCombinators = require('../type-combinators.cjs');
12
+ const accessFlags = require('./access-flags.cjs');
13
+ const inheritedDiscriminator = require('./inherited-discriminator.cjs');
14
+
15
+ const INPUT_PATH_PARTS = ["parameters", "requestBody", "requestBodies"];
16
+ class InvalidPropertyError extends errors.OpenAPITypesafeError {
17
+ constructor(path, key, value) {
18
+ const received = Array.isArray(value) ? "Array" : typeof value;
19
+ super({
20
+ code: errors.ERROR_CODES.SCHEMA_PROPERTY_INVALID,
21
+ message: `${path}: invalid property ${key}. Expected Schema Object or boolean, got ${received}`,
22
+ details: { path, property: key, received }
23
+ });
24
+ this.name = "InvalidPropertyError";
25
+ }
26
+ }
27
+ function withReadWriteMarker(type, flags, options) {
28
+ if (!options.readWriteMarkers || flags.isReadOnly === flags.isWriteOnly) {
29
+ return type;
30
+ }
31
+ return constructors.irReference(flags.isReadOnly ? "$Read" : "$Write", [type]);
32
+ }
33
+ function finishProperty(property, schema, path, request) {
34
+ const location = { ...request.location, path };
35
+ const transformed = request.context.callbacks.transformProperty(property, schema, location) ?? property;
36
+ return schemaComment.withSchemaComment(
37
+ transformed,
38
+ schema,
39
+ schemaComment.schemaCommentOptionsOf(request.context.options.fixes)
40
+ );
41
+ }
42
+ function propertyFacts(value, request) {
43
+ if (typeof value !== "object") {
44
+ return { ref: void 0, flags: { isReadOnly: false, isWriteOnly: false }, hasDefault: false };
45
+ }
46
+ const ref = "$ref" in value && value.$ref ? value.$ref : void 0;
47
+ const flags = accessFlags.propertyAccessFlags(value, request.context);
48
+ return { ref, flags, hasDefault: "default" in value && value.default !== void 0 };
49
+ }
50
+ function isOptionalProperty(key, facts, schema, request) {
51
+ const { options } = request.context;
52
+ const path = request.location.path;
53
+ const isDefaultRequired = facts.hasDefault && options.defaultNonNullable && !INPUT_PATH_PARTS.some((part) => path?.includes(part));
54
+ const isRequired = schema.required?.includes(key) || schema.required === void 0 && options.propertiesRequiredByDefault || isDefaultRequired;
55
+ return !isRequired;
56
+ }
57
+ function isExcluded(value, facts, request) {
58
+ if (!request.context.options.excludeDeprecated) {
59
+ return false;
60
+ }
61
+ const resolved = facts.ref ? request.context.refs.resolve(facts.ref) : value;
62
+ return Boolean(resolved?.deprecated);
63
+ }
64
+ function propertyType(key, value, facts, request) {
65
+ const path = jsonPointer.createRef([request.location.path, key]);
66
+ const type = facts.ref ? pointerType.schemaRefType(facts.ref, request) : request.transformNested(value, { ...request.location, path });
67
+ const custom = request.context.callbacks.transform(value, request.location);
68
+ return custom === null ? { type, isOptional: null } : { type: custom.type, isOptional: custom.isOptional || null };
69
+ }
70
+ function propertyMember(key, value, schema, request) {
71
+ if (typeof value !== "object" && typeof value !== "boolean" || Array.isArray(value)) {
72
+ throw new InvalidPropertyError(request.location.path, key, value);
73
+ }
74
+ const facts = propertyFacts(value, request);
75
+ if (isExcluded(value, facts, request)) {
76
+ return null;
77
+ }
78
+ const { options } = request.context;
79
+ const isOptional = isOptionalProperty(key, facts, schema, request);
80
+ const result = propertyType(key, value, facts, request);
81
+ const property = constructors.irProperty(
82
+ propertyName.toPropertyName(key),
83
+ withReadWriteMarker(result.type, facts.flags, options),
84
+ {
85
+ isOptional: result.isOptional ?? isOptional,
86
+ isReadonly: options.immutable || !options.readWriteMarkers && facts.flags.isReadOnly
87
+ }
88
+ );
89
+ return finishProperty(property, value, jsonPointer.createRef([request.location.path, key]), request);
90
+ }
91
+ function propertyMembers(schema, request) {
92
+ const members = [];
93
+ for (const [key, value] of documentEntries.documentEntries(schema.properties ?? {}, request.context.options)) {
94
+ const member = propertyMember(key, value, schema, request);
95
+ if (member !== null) {
96
+ members.push(member);
97
+ }
98
+ }
99
+ return members;
100
+ }
101
+ function defsMember(defs, request) {
102
+ const { options } = request.context;
103
+ const members = Object.entries(defs).map(([key, value]) => {
104
+ const path = jsonPointer.createRef([request.location.path, "$defs", key]);
105
+ const flags = accessFlags.propertyAccessFlags(value, request.context);
106
+ const type = withReadWriteMarker(
107
+ request.transformNested(value, { ...request.location, path }),
108
+ flags,
109
+ options
110
+ );
111
+ const property = constructors.irProperty(propertyName.toPropertyName(key), type, {
112
+ isReadonly: options.immutable || !options.readWriteMarkers && flags.isReadOnly
113
+ });
114
+ return finishProperty(property, value, path, request);
115
+ });
116
+ return constructors.irProperty(propertyName.toPropertyName("$defs"), constructors.irObject(members), { isOptional: true });
117
+ }
118
+ function hasObjectKeywords(schema) {
119
+ const hasProperties = Boolean(schema.properties && Object.keys(schema.properties).length);
120
+ return hasProperties || Boolean(schema.additionalProperties || schema.patternProperties || schema.$defs);
121
+ }
122
+ function indexValueTypes(schema, request) {
123
+ const { additionalProperties } = schema;
124
+ const isObject = typeof additionalProperties === "object";
125
+ const hasExplicit = isObject && Object.keys(additionalProperties).length > 0;
126
+ const hasImplicit = additionalProperties === true || isObject && Object.keys(additionalProperties).length === 0;
127
+ const types = [];
128
+ if (hasExplicit) {
129
+ types.push(request.transformNested(additionalProperties, request.location, true));
130
+ }
131
+ if (hasImplicit || !additionalProperties && request.context.options.additionalProperties) {
132
+ types.push(sharedTypes.UNKNOWN_TYPE);
133
+ }
134
+ const patterns = schema.patternProperties;
135
+ if (typeof patterns === "object" && patterns !== null && Object.keys(patterns).length > 0) {
136
+ for (const [, value] of documentEntries.documentEntries(patterns, request.context.options)) {
137
+ types.push(request.transformNested(value, request.location));
138
+ }
139
+ }
140
+ return types;
141
+ }
142
+ function isKeptProperty(schema, key, request) {
143
+ const properties = schema.properties ?? {};
144
+ if (!Object.hasOwn(properties, key)) {
145
+ return false;
146
+ }
147
+ const value = properties[key];
148
+ const isExcludable = request.context.options.excludeDeprecated && typeof value === "object";
149
+ return !isExcludable || !isExcluded(value, propertyFacts(value, request), request);
150
+ }
151
+ function discriminatorAndPropertyMembers(schema, request) {
152
+ const inherited = inheritedDiscriminator.inheritedDiscriminator(schema, request);
153
+ if (inherited === void 0) {
154
+ return propertyMembers(schema, request);
155
+ }
156
+ const name = inherited.discriminator.propertyName;
157
+ if (!isKeptProperty(schema, name, request)) {
158
+ return [inheritedDiscriminator.discriminatorMember(inherited, request), ...propertyMembers(schema, request)];
159
+ }
160
+ const isAllRequired = schema.required === void 0 && request.context.options.propertiesRequiredByDefault;
161
+ const required = isAllRequired ? void 0 : [...schema.required ?? [], name];
162
+ return propertyMembers({ ...schema, required }, request);
163
+ }
164
+ function objectType(schema, request) {
165
+ if (!hasObjectKeywords(schema)) {
166
+ const inherited = inheritedDiscriminator.inheritedDiscriminator(schema, request);
167
+ return inherited ? constructors.irObject([inheritedDiscriminator.discriminatorMember(inherited, request)]) : null;
168
+ }
169
+ const members = discriminatorAndPropertyMembers(schema, request);
170
+ if ("$defs" in schema && typeof schema.$defs === "object" && Object.keys(schema.$defs).length > 0) {
171
+ members.push(defsMember(schema.$defs, request));
172
+ }
173
+ const valueTypes = indexValueTypes(schema, request);
174
+ if (valueTypes.length === 0) {
175
+ return members.length > 0 ? constructors.irObject(members) : null;
176
+ }
177
+ const index = constructors.irObject([
178
+ constructors.irStringIndexSignature("key", typeCombinators.unionOf(valueTypes), request.context.options.immutable)
179
+ ]);
180
+ return typeCombinators.intersectionOf([...members.length > 0 ? [constructors.irObject(members)] : [], index]);
181
+ }
182
+
183
+ exports.InvalidPropertyError = InvalidPropertyError;
184
+ exports.isKeptProperty = isKeptProperty;
185
+ exports.objectType = objectType;
186
+ //# sourceMappingURL=object-type.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object-type.cjs","sources":["../../../../src/application/transform/schema/object-type.ts"],"sourcesContent":["import { ERROR_CODES, OpenAPITypesafeError } from \"../../../domain/errors.js\";\nimport {\n irObject,\n irProperty,\n irReference,\n irStringIndexSignature,\n} from \"../../../domain/ir/constructors.js\";\nimport type { IrMember, IrPropertySignature, IrType } from \"../../../domain/ir/nodes.js\";\nimport { toPropertyName } from \"../../../domain/ir/property-name.js\";\nimport { createRef } from \"../../../domain/openapi/json-pointer.js\";\nimport type { Schema, SchemaObject } from \"../../../domain/openapi/schema-object.js\";\nimport { documentEntries } from \"../document-entries.js\";\nimport { schemaRefType } from \"../ref-pointer/pointer-type.js\";\nimport { schemaCommentOptionsOf, withSchemaComment } from \"../schema-comment.js\";\nimport { UNKNOWN_TYPE } from \"../shared-types.js\";\nimport { intersectionOf, unionOf } from \"../type-combinators.js\";\nimport { type AccessFlags, propertyAccessFlags } from \"./access-flags.js\";\nimport { discriminatorMember, inheritedDiscriminator } from \"./inherited-discriminator.js\";\nimport type { SchemaOptions } from \"./schema-context.js\";\nimport type { SchemaRequest } from \"./schema-rule.js\";\n\n/** Path parts where a default value cannot make a property required (inputs may omit it). */\nconst INPUT_PATH_PARTS = [\"parameters\", \"requestBody\", \"requestBodies\"] as const;\n\nexport class InvalidPropertyError extends OpenAPITypesafeError {\n constructor(path: string | undefined, key: string, value: unknown) {\n const received = Array.isArray(value) ? \"Array\" : typeof value;\n super({\n code: ERROR_CODES.SCHEMA_PROPERTY_INVALID,\n message:\n `${path}: invalid property ${key}. ` + `Expected Schema Object or boolean, got ${received}`,\n details: { path, property: key, received },\n });\n this.name = \"InvalidPropertyError\";\n }\n}\n\n/** `--read-write-markers`: `$Read<T>` / `$Write<T>`, unless the property is both or neither. */\nfunction withReadWriteMarker(type: IrType, flags: AccessFlags, options: SchemaOptions): IrType {\n if (!options.readWriteMarkers || flags.isReadOnly === flags.isWriteOnly) {\n return type;\n }\n return irReference(flags.isReadOnly ? \"$Read\" : \"$Write\", [type]);\n}\n\n/** Apply `transformProperty`, then the schema's JSDoc. */\nfunction finishProperty(\n property: IrPropertySignature,\n schema: Schema,\n path: string,\n request: SchemaRequest,\n): IrPropertySignature {\n const location = { ...request.location, path };\n const transformed =\n request.context.callbacks.transformProperty(property, schema, location) ?? property;\n // The original adds the schema's comment after any comment the callback set.\n return withSchemaComment(\n transformed,\n schema,\n schemaCommentOptionsOf(request.context.options.fixes),\n );\n}\n\n/** What the property loop reads from a property schema, in the original order. */\ninterface PropertyFacts {\n readonly ref: string | undefined;\n readonly flags: AccessFlags;\n readonly hasDefault: boolean;\n}\n\nfunction propertyFacts(value: Schema, request: SchemaRequest): PropertyFacts {\n if (typeof value !== \"object\") {\n return { ref: undefined, flags: { isReadOnly: false, isWriteOnly: false }, hasDefault: false };\n }\n // `in` throws for a null value, as in the original (which also reads `$ref` first).\n const ref = \"$ref\" in value && value.$ref ? value.$ref : undefined;\n const flags = propertyAccessFlags(value, request.context);\n return { ref, flags, hasDefault: \"default\" in value && value.default !== undefined };\n}\n\nfunction isOptionalProperty(\n key: string,\n facts: PropertyFacts,\n schema: SchemaObject,\n request: SchemaRequest,\n): boolean {\n const { options } = request.context;\n const path = request.location.path;\n const isDefaultRequired =\n facts.hasDefault &&\n options.defaultNonNullable &&\n !INPUT_PATH_PARTS.some((part) => path?.includes(part));\n const isRequired =\n schema.required?.includes(key) ||\n (schema.required === undefined && options.propertiesRequiredByDefault) ||\n isDefaultRequired;\n return !isRequired;\n}\n\nfunction isExcluded(value: Schema, facts: PropertyFacts, request: SchemaRequest): boolean {\n if (!request.context.options.excludeDeprecated) {\n return false;\n }\n const resolved = facts.ref ? request.context.refs.resolve(facts.ref) : value;\n return Boolean((resolved as SchemaObject | undefined)?.deprecated);\n}\n\n/** A type, and whether a callback forced the property optional (null: no override). */\ninterface CustomResult {\n readonly type: IrType;\n readonly isOptional: true | null;\n}\n\nfunction propertyType(\n key: string,\n value: Schema,\n facts: PropertyFacts,\n request: SchemaRequest,\n): CustomResult {\n const path = createRef([request.location.path, key]);\n const type = facts.ref\n ? schemaRefType(facts.ref, request)\n : request.transformNested(value, { ...request.location, path });\n const custom = request.context.callbacks.transform(value, request.location);\n return custom === null\n ? { type, isOptional: null }\n : { type: custom.type, isOptional: custom.isOptional || null };\n}\n\nfunction propertyMember(\n key: string,\n value: Schema,\n schema: SchemaObject,\n request: SchemaRequest,\n): IrMember | null {\n if ((typeof value !== \"object\" && typeof value !== \"boolean\") || Array.isArray(value)) {\n throw new InvalidPropertyError(request.location.path, key, value);\n }\n const facts = propertyFacts(value, request);\n if (isExcluded(value, facts, request)) {\n return null;\n }\n const { options } = request.context;\n const isOptional = isOptionalProperty(key, facts, schema, request);\n const result = propertyType(key, value, facts, request);\n const property = irProperty(\n toPropertyName(key),\n withReadWriteMarker(result.type, facts.flags, options),\n {\n isOptional: result.isOptional ?? isOptional,\n isReadonly: options.immutable || (!options.readWriteMarkers && facts.flags.isReadOnly),\n },\n );\n return finishProperty(property, value, createRef([request.location.path, key]), request);\n}\n\nfunction propertyMembers(schema: SchemaObject, request: SchemaRequest): IrMember[] {\n const members: IrMember[] = [];\n for (const [key, value] of documentEntries(schema.properties ?? {}, request.context.options)) {\n const member = propertyMember(key, value, schema, request);\n if (member !== null) {\n members.push(member);\n }\n }\n return members;\n}\n\n/**\n * `$defs` as a nested `$defs?: { … }` member, in document order (never alphabetized). It is\n * optional because `$defs` is a schema keyword, not data: the original made it required, so a\n * value of the type needed a `$defs` key (research/legacy-bugs.md, item 17, upstream #2664).\n */\nfunction defsMember(\n defs: Readonly<Record<string, SchemaObject>>,\n request: SchemaRequest,\n): IrMember {\n const { options } = request.context;\n const members = Object.entries(defs).map(([key, value]) => {\n const path = createRef([request.location.path, \"$defs\", key]);\n const flags = propertyAccessFlags(value, request.context);\n const type = withReadWriteMarker(\n request.transformNested(value, { ...request.location, path }),\n flags,\n options,\n );\n const property = irProperty(toPropertyName(key), type, {\n isReadonly: options.immutable || (!options.readWriteMarkers && flags.isReadOnly),\n });\n return finishProperty(property, value, path, request);\n });\n return irProperty(toPropertyName(\"$defs\"), irObject(members), { isOptional: true });\n}\n\nfunction hasObjectKeywords(schema: SchemaObject): boolean {\n const hasProperties = Boolean(schema.properties && Object.keys(schema.properties).length);\n return (\n hasProperties ||\n Boolean(schema.additionalProperties || schema.patternProperties || schema.$defs)\n );\n}\n\n/** Value types of the `[key: string]` index signature, in the original order. */\nfunction indexValueTypes(schema: SchemaObject, request: SchemaRequest): IrType[] {\n const { additionalProperties } = schema;\n const isObject = typeof additionalProperties === \"object\";\n const hasExplicit = isObject && Object.keys(additionalProperties).length > 0;\n const hasImplicit =\n additionalProperties === true || (isObject && Object.keys(additionalProperties).length === 0);\n const types: IrType[] = [];\n if (hasExplicit) {\n types.push(request.transformNested(additionalProperties as Schema, request.location, true));\n }\n if (hasImplicit || (!additionalProperties && request.context.options.additionalProperties)) {\n types.push(UNKNOWN_TYPE);\n }\n const patterns = schema.patternProperties;\n if (typeof patterns === \"object\" && patterns !== null && Object.keys(patterns).length > 0) {\n for (const [, value] of documentEntries(patterns, request.context.options)) {\n types.push(request.transformNested(value, request.location));\n }\n }\n return types;\n}\n\n/**\n * Whether the schema declares property `key` and the type keeps it: `--exclude-deprecated` drops\n * a deprecated one.\n */\nexport function isKeptProperty(schema: SchemaObject, key: string, request: SchemaRequest): boolean {\n const properties = schema.properties ?? {};\n if (!Object.hasOwn(properties, key)) {\n return false;\n }\n const value = properties[key] as Schema;\n const isExcludable = request.context.options.excludeDeprecated && typeof value === \"object\";\n return !isExcludable || !isExcluded(value, propertyFacts(value, request), request);\n}\n\n/**\n * The members for the discriminator and `properties`. A schema that declares the discriminator\n * property itself keeps its own declaration, required as the discriminator needs: both in one\n * object type do not compile (TS2300, the Apple SiriKit Cloud Media API). A declaration that\n * `--exclude-deprecated` drops does not count, so the discriminator property stays.\n */\nfunction discriminatorAndPropertyMembers(schema: SchemaObject, request: SchemaRequest): IrMember[] {\n const inherited = inheritedDiscriminator(schema, request);\n if (inherited === undefined) {\n return propertyMembers(schema, request);\n }\n const name = inherited.discriminator.propertyName;\n if (!isKeptProperty(schema, name, request)) {\n return [discriminatorMember(inherited, request), ...propertyMembers(schema, request)];\n }\n // Without `required`, `--properties-required-by-default` requires every property already; a\n // list of one would make the others optional.\n const isAllRequired =\n schema.required === undefined && request.context.options.propertiesRequiredByDefault;\n const required = isAllRequired ? undefined : [...(schema.required ?? []), name];\n return propertyMembers({ ...schema, required } as SchemaObject, request);\n}\n\n/**\n * Object keywords: discriminator, `properties`, `$defs`, and an index signature for\n * `additionalProperties` / `patternProperties` (or `--additional-properties`). Null when the schema\n * has none of them.\n */\nexport function objectType(schema: SchemaObject, request: SchemaRequest): IrType | null {\n if (!hasObjectKeywords(schema)) {\n const inherited = inheritedDiscriminator(schema, request);\n return inherited ? irObject([discriminatorMember(inherited, request)]) : null;\n }\n const members = discriminatorAndPropertyMembers(schema, request);\n // As in the original, a null `$defs` throws here (Object.keys) instead of being skipped.\n if (\n \"$defs\" in schema &&\n typeof schema.$defs === \"object\" &&\n Object.keys(schema.$defs).length > 0\n ) {\n members.push(defsMember(schema.$defs, request));\n }\n const valueTypes = indexValueTypes(schema, request);\n if (valueTypes.length === 0) {\n return members.length > 0 ? irObject(members) : null;\n }\n const index = irObject([\n irStringIndexSignature(\"key\", unionOf(valueTypes), request.context.options.immutable),\n ]);\n return intersectionOf([...(members.length > 0 ? [irObject(members)] : []), index]);\n}\n"],"names":["OpenAPITypesafeError","ERROR_CODES","irReference","withSchemaComment","schemaCommentOptionsOf","propertyAccessFlags","createRef","schemaRefType","irProperty","toPropertyName","documentEntries","irObject","UNKNOWN_TYPE","inheritedDiscriminator","discriminatorMember","irStringIndexSignature","unionOf","intersectionOf"],"mappings":"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"}
@@ -0,0 +1,182 @@
1
+ import { OpenAPITypesafeError, ERROR_CODES } from '../../../domain/errors.mjs';
2
+ import { irObject, irStringIndexSignature, irProperty, irReference } from '../../../domain/ir/constructors.mjs';
3
+ import { toPropertyName } from '../../../domain/ir/property-name.mjs';
4
+ import { createRef } from '../../../domain/openapi/json-pointer.mjs';
5
+ import { documentEntries } from '../document-entries.mjs';
6
+ import { schemaRefType } from '../ref-pointer/pointer-type.mjs';
7
+ import { withSchemaComment, schemaCommentOptionsOf } from '../schema-comment.mjs';
8
+ import { UNKNOWN_TYPE } from '../shared-types.mjs';
9
+ import { unionOf, intersectionOf } from '../type-combinators.mjs';
10
+ import { propertyAccessFlags } from './access-flags.mjs';
11
+ import { inheritedDiscriminator, discriminatorMember } from './inherited-discriminator.mjs';
12
+
13
+ const INPUT_PATH_PARTS = ["parameters", "requestBody", "requestBodies"];
14
+ class InvalidPropertyError extends OpenAPITypesafeError {
15
+ constructor(path, key, value) {
16
+ const received = Array.isArray(value) ? "Array" : typeof value;
17
+ super({
18
+ code: ERROR_CODES.SCHEMA_PROPERTY_INVALID,
19
+ message: `${path}: invalid property ${key}. Expected Schema Object or boolean, got ${received}`,
20
+ details: { path, property: key, received }
21
+ });
22
+ this.name = "InvalidPropertyError";
23
+ }
24
+ }
25
+ function withReadWriteMarker(type, flags, options) {
26
+ if (!options.readWriteMarkers || flags.isReadOnly === flags.isWriteOnly) {
27
+ return type;
28
+ }
29
+ return irReference(flags.isReadOnly ? "$Read" : "$Write", [type]);
30
+ }
31
+ function finishProperty(property, schema, path, request) {
32
+ const location = { ...request.location, path };
33
+ const transformed = request.context.callbacks.transformProperty(property, schema, location) ?? property;
34
+ return withSchemaComment(
35
+ transformed,
36
+ schema,
37
+ schemaCommentOptionsOf(request.context.options.fixes)
38
+ );
39
+ }
40
+ function propertyFacts(value, request) {
41
+ if (typeof value !== "object") {
42
+ return { ref: void 0, flags: { isReadOnly: false, isWriteOnly: false }, hasDefault: false };
43
+ }
44
+ const ref = "$ref" in value && value.$ref ? value.$ref : void 0;
45
+ const flags = propertyAccessFlags(value, request.context);
46
+ return { ref, flags, hasDefault: "default" in value && value.default !== void 0 };
47
+ }
48
+ function isOptionalProperty(key, facts, schema, request) {
49
+ const { options } = request.context;
50
+ const path = request.location.path;
51
+ const isDefaultRequired = facts.hasDefault && options.defaultNonNullable && !INPUT_PATH_PARTS.some((part) => path?.includes(part));
52
+ const isRequired = schema.required?.includes(key) || schema.required === void 0 && options.propertiesRequiredByDefault || isDefaultRequired;
53
+ return !isRequired;
54
+ }
55
+ function isExcluded(value, facts, request) {
56
+ if (!request.context.options.excludeDeprecated) {
57
+ return false;
58
+ }
59
+ const resolved = facts.ref ? request.context.refs.resolve(facts.ref) : value;
60
+ return Boolean(resolved?.deprecated);
61
+ }
62
+ function propertyType(key, value, facts, request) {
63
+ const path = createRef([request.location.path, key]);
64
+ const type = facts.ref ? schemaRefType(facts.ref, request) : request.transformNested(value, { ...request.location, path });
65
+ const custom = request.context.callbacks.transform(value, request.location);
66
+ return custom === null ? { type, isOptional: null } : { type: custom.type, isOptional: custom.isOptional || null };
67
+ }
68
+ function propertyMember(key, value, schema, request) {
69
+ if (typeof value !== "object" && typeof value !== "boolean" || Array.isArray(value)) {
70
+ throw new InvalidPropertyError(request.location.path, key, value);
71
+ }
72
+ const facts = propertyFacts(value, request);
73
+ if (isExcluded(value, facts, request)) {
74
+ return null;
75
+ }
76
+ const { options } = request.context;
77
+ const isOptional = isOptionalProperty(key, facts, schema, request);
78
+ const result = propertyType(key, value, facts, request);
79
+ const property = irProperty(
80
+ toPropertyName(key),
81
+ withReadWriteMarker(result.type, facts.flags, options),
82
+ {
83
+ isOptional: result.isOptional ?? isOptional,
84
+ isReadonly: options.immutable || !options.readWriteMarkers && facts.flags.isReadOnly
85
+ }
86
+ );
87
+ return finishProperty(property, value, createRef([request.location.path, key]), request);
88
+ }
89
+ function propertyMembers(schema, request) {
90
+ const members = [];
91
+ for (const [key, value] of documentEntries(schema.properties ?? {}, request.context.options)) {
92
+ const member = propertyMember(key, value, schema, request);
93
+ if (member !== null) {
94
+ members.push(member);
95
+ }
96
+ }
97
+ return members;
98
+ }
99
+ function defsMember(defs, request) {
100
+ const { options } = request.context;
101
+ const members = Object.entries(defs).map(([key, value]) => {
102
+ const path = createRef([request.location.path, "$defs", key]);
103
+ const flags = propertyAccessFlags(value, request.context);
104
+ const type = withReadWriteMarker(
105
+ request.transformNested(value, { ...request.location, path }),
106
+ flags,
107
+ options
108
+ );
109
+ const property = irProperty(toPropertyName(key), type, {
110
+ isReadonly: options.immutable || !options.readWriteMarkers && flags.isReadOnly
111
+ });
112
+ return finishProperty(property, value, path, request);
113
+ });
114
+ return irProperty(toPropertyName("$defs"), irObject(members), { isOptional: true });
115
+ }
116
+ function hasObjectKeywords(schema) {
117
+ const hasProperties = Boolean(schema.properties && Object.keys(schema.properties).length);
118
+ return hasProperties || Boolean(schema.additionalProperties || schema.patternProperties || schema.$defs);
119
+ }
120
+ function indexValueTypes(schema, request) {
121
+ const { additionalProperties } = schema;
122
+ const isObject = typeof additionalProperties === "object";
123
+ const hasExplicit = isObject && Object.keys(additionalProperties).length > 0;
124
+ const hasImplicit = additionalProperties === true || isObject && Object.keys(additionalProperties).length === 0;
125
+ const types = [];
126
+ if (hasExplicit) {
127
+ types.push(request.transformNested(additionalProperties, request.location, true));
128
+ }
129
+ if (hasImplicit || !additionalProperties && request.context.options.additionalProperties) {
130
+ types.push(UNKNOWN_TYPE);
131
+ }
132
+ const patterns = schema.patternProperties;
133
+ if (typeof patterns === "object" && patterns !== null && Object.keys(patterns).length > 0) {
134
+ for (const [, value] of documentEntries(patterns, request.context.options)) {
135
+ types.push(request.transformNested(value, request.location));
136
+ }
137
+ }
138
+ return types;
139
+ }
140
+ function isKeptProperty(schema, key, request) {
141
+ const properties = schema.properties ?? {};
142
+ if (!Object.hasOwn(properties, key)) {
143
+ return false;
144
+ }
145
+ const value = properties[key];
146
+ const isExcludable = request.context.options.excludeDeprecated && typeof value === "object";
147
+ return !isExcludable || !isExcluded(value, propertyFacts(value, request), request);
148
+ }
149
+ function discriminatorAndPropertyMembers(schema, request) {
150
+ const inherited = inheritedDiscriminator(schema, request);
151
+ if (inherited === void 0) {
152
+ return propertyMembers(schema, request);
153
+ }
154
+ const name = inherited.discriminator.propertyName;
155
+ if (!isKeptProperty(schema, name, request)) {
156
+ return [discriminatorMember(inherited, request), ...propertyMembers(schema, request)];
157
+ }
158
+ const isAllRequired = schema.required === void 0 && request.context.options.propertiesRequiredByDefault;
159
+ const required = isAllRequired ? void 0 : [...schema.required ?? [], name];
160
+ return propertyMembers({ ...schema, required }, request);
161
+ }
162
+ function objectType(schema, request) {
163
+ if (!hasObjectKeywords(schema)) {
164
+ const inherited = inheritedDiscriminator(schema, request);
165
+ return inherited ? irObject([discriminatorMember(inherited, request)]) : null;
166
+ }
167
+ const members = discriminatorAndPropertyMembers(schema, request);
168
+ if ("$defs" in schema && typeof schema.$defs === "object" && Object.keys(schema.$defs).length > 0) {
169
+ members.push(defsMember(schema.$defs, request));
170
+ }
171
+ const valueTypes = indexValueTypes(schema, request);
172
+ if (valueTypes.length === 0) {
173
+ return members.length > 0 ? irObject(members) : null;
174
+ }
175
+ const index = irObject([
176
+ irStringIndexSignature("key", unionOf(valueTypes), request.context.options.immutable)
177
+ ]);
178
+ return intersectionOf([...members.length > 0 ? [irObject(members)] : [], index]);
179
+ }
180
+
181
+ export { InvalidPropertyError, isKeptProperty, objectType };
182
+ //# sourceMappingURL=object-type.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object-type.mjs","sources":["../../../../src/application/transform/schema/object-type.ts"],"sourcesContent":["import { ERROR_CODES, OpenAPITypesafeError } from \"../../../domain/errors.js\";\nimport {\n irObject,\n irProperty,\n irReference,\n irStringIndexSignature,\n} from \"../../../domain/ir/constructors.js\";\nimport type { IrMember, IrPropertySignature, IrType } from \"../../../domain/ir/nodes.js\";\nimport { toPropertyName } from \"../../../domain/ir/property-name.js\";\nimport { createRef } from \"../../../domain/openapi/json-pointer.js\";\nimport type { Schema, SchemaObject } from \"../../../domain/openapi/schema-object.js\";\nimport { documentEntries } from \"../document-entries.js\";\nimport { schemaRefType } from \"../ref-pointer/pointer-type.js\";\nimport { schemaCommentOptionsOf, withSchemaComment } from \"../schema-comment.js\";\nimport { UNKNOWN_TYPE } from \"../shared-types.js\";\nimport { intersectionOf, unionOf } from \"../type-combinators.js\";\nimport { type AccessFlags, propertyAccessFlags } from \"./access-flags.js\";\nimport { discriminatorMember, inheritedDiscriminator } from \"./inherited-discriminator.js\";\nimport type { SchemaOptions } from \"./schema-context.js\";\nimport type { SchemaRequest } from \"./schema-rule.js\";\n\n/** Path parts where a default value cannot make a property required (inputs may omit it). */\nconst INPUT_PATH_PARTS = [\"parameters\", \"requestBody\", \"requestBodies\"] as const;\n\nexport class InvalidPropertyError extends OpenAPITypesafeError {\n constructor(path: string | undefined, key: string, value: unknown) {\n const received = Array.isArray(value) ? \"Array\" : typeof value;\n super({\n code: ERROR_CODES.SCHEMA_PROPERTY_INVALID,\n message:\n `${path}: invalid property ${key}. ` + `Expected Schema Object or boolean, got ${received}`,\n details: { path, property: key, received },\n });\n this.name = \"InvalidPropertyError\";\n }\n}\n\n/** `--read-write-markers`: `$Read<T>` / `$Write<T>`, unless the property is both or neither. */\nfunction withReadWriteMarker(type: IrType, flags: AccessFlags, options: SchemaOptions): IrType {\n if (!options.readWriteMarkers || flags.isReadOnly === flags.isWriteOnly) {\n return type;\n }\n return irReference(flags.isReadOnly ? \"$Read\" : \"$Write\", [type]);\n}\n\n/** Apply `transformProperty`, then the schema's JSDoc. */\nfunction finishProperty(\n property: IrPropertySignature,\n schema: Schema,\n path: string,\n request: SchemaRequest,\n): IrPropertySignature {\n const location = { ...request.location, path };\n const transformed =\n request.context.callbacks.transformProperty(property, schema, location) ?? property;\n // The original adds the schema's comment after any comment the callback set.\n return withSchemaComment(\n transformed,\n schema,\n schemaCommentOptionsOf(request.context.options.fixes),\n );\n}\n\n/** What the property loop reads from a property schema, in the original order. */\ninterface PropertyFacts {\n readonly ref: string | undefined;\n readonly flags: AccessFlags;\n readonly hasDefault: boolean;\n}\n\nfunction propertyFacts(value: Schema, request: SchemaRequest): PropertyFacts {\n if (typeof value !== \"object\") {\n return { ref: undefined, flags: { isReadOnly: false, isWriteOnly: false }, hasDefault: false };\n }\n // `in` throws for a null value, as in the original (which also reads `$ref` first).\n const ref = \"$ref\" in value && value.$ref ? value.$ref : undefined;\n const flags = propertyAccessFlags(value, request.context);\n return { ref, flags, hasDefault: \"default\" in value && value.default !== undefined };\n}\n\nfunction isOptionalProperty(\n key: string,\n facts: PropertyFacts,\n schema: SchemaObject,\n request: SchemaRequest,\n): boolean {\n const { options } = request.context;\n const path = request.location.path;\n const isDefaultRequired =\n facts.hasDefault &&\n options.defaultNonNullable &&\n !INPUT_PATH_PARTS.some((part) => path?.includes(part));\n const isRequired =\n schema.required?.includes(key) ||\n (schema.required === undefined && options.propertiesRequiredByDefault) ||\n isDefaultRequired;\n return !isRequired;\n}\n\nfunction isExcluded(value: Schema, facts: PropertyFacts, request: SchemaRequest): boolean {\n if (!request.context.options.excludeDeprecated) {\n return false;\n }\n const resolved = facts.ref ? request.context.refs.resolve(facts.ref) : value;\n return Boolean((resolved as SchemaObject | undefined)?.deprecated);\n}\n\n/** A type, and whether a callback forced the property optional (null: no override). */\ninterface CustomResult {\n readonly type: IrType;\n readonly isOptional: true | null;\n}\n\nfunction propertyType(\n key: string,\n value: Schema,\n facts: PropertyFacts,\n request: SchemaRequest,\n): CustomResult {\n const path = createRef([request.location.path, key]);\n const type = facts.ref\n ? schemaRefType(facts.ref, request)\n : request.transformNested(value, { ...request.location, path });\n const custom = request.context.callbacks.transform(value, request.location);\n return custom === null\n ? { type, isOptional: null }\n : { type: custom.type, isOptional: custom.isOptional || null };\n}\n\nfunction propertyMember(\n key: string,\n value: Schema,\n schema: SchemaObject,\n request: SchemaRequest,\n): IrMember | null {\n if ((typeof value !== \"object\" && typeof value !== \"boolean\") || Array.isArray(value)) {\n throw new InvalidPropertyError(request.location.path, key, value);\n }\n const facts = propertyFacts(value, request);\n if (isExcluded(value, facts, request)) {\n return null;\n }\n const { options } = request.context;\n const isOptional = isOptionalProperty(key, facts, schema, request);\n const result = propertyType(key, value, facts, request);\n const property = irProperty(\n toPropertyName(key),\n withReadWriteMarker(result.type, facts.flags, options),\n {\n isOptional: result.isOptional ?? isOptional,\n isReadonly: options.immutable || (!options.readWriteMarkers && facts.flags.isReadOnly),\n },\n );\n return finishProperty(property, value, createRef([request.location.path, key]), request);\n}\n\nfunction propertyMembers(schema: SchemaObject, request: SchemaRequest): IrMember[] {\n const members: IrMember[] = [];\n for (const [key, value] of documentEntries(schema.properties ?? {}, request.context.options)) {\n const member = propertyMember(key, value, schema, request);\n if (member !== null) {\n members.push(member);\n }\n }\n return members;\n}\n\n/**\n * `$defs` as a nested `$defs?: { … }` member, in document order (never alphabetized). It is\n * optional because `$defs` is a schema keyword, not data: the original made it required, so a\n * value of the type needed a `$defs` key (research/legacy-bugs.md, item 17, upstream #2664).\n */\nfunction defsMember(\n defs: Readonly<Record<string, SchemaObject>>,\n request: SchemaRequest,\n): IrMember {\n const { options } = request.context;\n const members = Object.entries(defs).map(([key, value]) => {\n const path = createRef([request.location.path, \"$defs\", key]);\n const flags = propertyAccessFlags(value, request.context);\n const type = withReadWriteMarker(\n request.transformNested(value, { ...request.location, path }),\n flags,\n options,\n );\n const property = irProperty(toPropertyName(key), type, {\n isReadonly: options.immutable || (!options.readWriteMarkers && flags.isReadOnly),\n });\n return finishProperty(property, value, path, request);\n });\n return irProperty(toPropertyName(\"$defs\"), irObject(members), { isOptional: true });\n}\n\nfunction hasObjectKeywords(schema: SchemaObject): boolean {\n const hasProperties = Boolean(schema.properties && Object.keys(schema.properties).length);\n return (\n hasProperties ||\n Boolean(schema.additionalProperties || schema.patternProperties || schema.$defs)\n );\n}\n\n/** Value types of the `[key: string]` index signature, in the original order. */\nfunction indexValueTypes(schema: SchemaObject, request: SchemaRequest): IrType[] {\n const { additionalProperties } = schema;\n const isObject = typeof additionalProperties === \"object\";\n const hasExplicit = isObject && Object.keys(additionalProperties).length > 0;\n const hasImplicit =\n additionalProperties === true || (isObject && Object.keys(additionalProperties).length === 0);\n const types: IrType[] = [];\n if (hasExplicit) {\n types.push(request.transformNested(additionalProperties as Schema, request.location, true));\n }\n if (hasImplicit || (!additionalProperties && request.context.options.additionalProperties)) {\n types.push(UNKNOWN_TYPE);\n }\n const patterns = schema.patternProperties;\n if (typeof patterns === \"object\" && patterns !== null && Object.keys(patterns).length > 0) {\n for (const [, value] of documentEntries(patterns, request.context.options)) {\n types.push(request.transformNested(value, request.location));\n }\n }\n return types;\n}\n\n/**\n * Whether the schema declares property `key` and the type keeps it: `--exclude-deprecated` drops\n * a deprecated one.\n */\nexport function isKeptProperty(schema: SchemaObject, key: string, request: SchemaRequest): boolean {\n const properties = schema.properties ?? {};\n if (!Object.hasOwn(properties, key)) {\n return false;\n }\n const value = properties[key] as Schema;\n const isExcludable = request.context.options.excludeDeprecated && typeof value === \"object\";\n return !isExcludable || !isExcluded(value, propertyFacts(value, request), request);\n}\n\n/**\n * The members for the discriminator and `properties`. A schema that declares the discriminator\n * property itself keeps its own declaration, required as the discriminator needs: both in one\n * object type do not compile (TS2300, the Apple SiriKit Cloud Media API). A declaration that\n * `--exclude-deprecated` drops does not count, so the discriminator property stays.\n */\nfunction discriminatorAndPropertyMembers(schema: SchemaObject, request: SchemaRequest): IrMember[] {\n const inherited = inheritedDiscriminator(schema, request);\n if (inherited === undefined) {\n return propertyMembers(schema, request);\n }\n const name = inherited.discriminator.propertyName;\n if (!isKeptProperty(schema, name, request)) {\n return [discriminatorMember(inherited, request), ...propertyMembers(schema, request)];\n }\n // Without `required`, `--properties-required-by-default` requires every property already; a\n // list of one would make the others optional.\n const isAllRequired =\n schema.required === undefined && request.context.options.propertiesRequiredByDefault;\n const required = isAllRequired ? undefined : [...(schema.required ?? []), name];\n return propertyMembers({ ...schema, required } as SchemaObject, request);\n}\n\n/**\n * Object keywords: discriminator, `properties`, `$defs`, and an index signature for\n * `additionalProperties` / `patternProperties` (or `--additional-properties`). Null when the schema\n * has none of them.\n */\nexport function objectType(schema: SchemaObject, request: SchemaRequest): IrType | null {\n if (!hasObjectKeywords(schema)) {\n const inherited = inheritedDiscriminator(schema, request);\n return inherited ? irObject([discriminatorMember(inherited, request)]) : null;\n }\n const members = discriminatorAndPropertyMembers(schema, request);\n // As in the original, a null `$defs` throws here (Object.keys) instead of being skipped.\n if (\n \"$defs\" in schema &&\n typeof schema.$defs === \"object\" &&\n Object.keys(schema.$defs).length > 0\n ) {\n members.push(defsMember(schema.$defs, request));\n }\n const valueTypes = indexValueTypes(schema, request);\n if (valueTypes.length === 0) {\n return members.length > 0 ? irObject(members) : null;\n }\n const index = irObject([\n irStringIndexSignature(\"key\", unionOf(valueTypes), request.context.options.immutable),\n ]);\n return intersectionOf([...(members.length > 0 ? [irObject(members)] : []), index]);\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ 'use strict';
2
+
3
+ const outputFixes = require('../../../domain/output-fixes.cjs');
4
+
5
+ const PRESENCE_KEYWORDS = /* @__PURE__ */ new Set([
6
+ "$comment",
7
+ "deprecated",
8
+ "description",
9
+ "example",
10
+ "examples",
11
+ "required",
12
+ "title",
13
+ "type"
14
+ ]);
15
+ const EXTENSION_PREFIX = "x-";
16
+ const OBJECT_TYPE = "object";
17
+ function isStringList(value) {
18
+ return Array.isArray(value) && value.every((entry) => typeof entry === "string");
19
+ }
20
+ function isPresenceKeyword([key, value]) {
21
+ if (key === "type") {
22
+ return value === OBJECT_TYPE;
23
+ }
24
+ if (key === "required") {
25
+ return isStringList(value);
26
+ }
27
+ return PRESENCE_KEYWORDS.has(key) || key.startsWith(EXTENSION_PREFIX);
28
+ }
29
+ function isPresenceObject(schema) {
30
+ return typeof schema === "object" && schema !== null && !Array.isArray(schema) && !("$ref" in schema) && Object.entries(schema).every(isPresenceKeyword);
31
+ }
32
+ function memberSchema(member, request) {
33
+ if (typeof member !== "object" || member === null || !("$ref" in member)) {
34
+ return member;
35
+ }
36
+ const ref = member.$ref;
37
+ if (typeof ref !== "string" || Object.keys(member).length !== 1) {
38
+ return void 0;
39
+ }
40
+ return request.context.refs.resolve(ref);
41
+ }
42
+ function allOfMembers(members, request) {
43
+ const unchanged = { members, required: [] };
44
+ if (!request.context.options.fixes.has(outputFixes.OutputFix.ALLOF_REQUIRED)) {
45
+ return unchanged;
46
+ }
47
+ const schemas = members.map((member) => memberSchema(member, request));
48
+ const kept = members.filter((_, index) => !isPresenceObject(schemas[index]));
49
+ if (kept.length === 0 || kept.length === members.length) {
50
+ return unchanged;
51
+ }
52
+ const required = schemas.flatMap(
53
+ (schema) => isPresenceObject(schema) ? schema.required ?? [] : []
54
+ );
55
+ return { members: kept, required };
56
+ }
57
+
58
+ exports.allOfMembers = allOfMembers;
59
+ //# sourceMappingURL=presence-members.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presence-members.cjs","sources":["../../../../src/application/transform/schema/presence-members.ts"],"sourcesContent":["import type { Schema, SchemaObject } from \"../../../domain/openapi/schema-object.js\";\nimport { OutputFix } from \"../../../domain/output-fixes.js\";\nimport type { SchemaRequest } from \"./schema-rule.js\";\n\n/**\n * The `allof-required` fix (ADR-021, roadmap R6). An `allOf` member such as `{ required: [name] }`\n * or `{ type: object }` says nothing about the shape of the object; it only asks that keys are\n * present. Typed as an object of its own, it adds `& Record<string, never>` or `& unknown`. With\n * the fix, such members are left out and their keys are made required in the other members, the\n * same way the parent's `required` is (upstream #1474, #1520, #2165).\n */\n\n/**\n * Keywords that do not change the shape: `type: object`, `required`, and annotations that the\n * generator does not read on an `allOf` member. `default`, `readOnly` and `writeOnly` are left out:\n * they change types elsewhere.\n */\nconst PRESENCE_KEYWORDS: ReadonlySet<string> = new Set([\n \"$comment\",\n \"deprecated\",\n \"description\",\n \"example\",\n \"examples\",\n \"required\",\n \"title\",\n \"type\",\n]);\n\nconst EXTENSION_PREFIX = \"x-\";\nconst OBJECT_TYPE = \"object\";\n\nfunction isStringList(value: unknown): value is readonly string[] {\n return Array.isArray(value) && value.every((entry) => typeof entry === \"string\");\n}\n\nfunction isPresenceKeyword([key, value]: readonly [string, unknown]): boolean {\n if (key === \"type\") {\n return value === OBJECT_TYPE;\n }\n if (key === \"required\") {\n return isStringList(value);\n }\n return PRESENCE_KEYWORDS.has(key) || key.startsWith(EXTENSION_PREFIX);\n}\n\nfunction isPresenceObject(schema: unknown): schema is SchemaObject {\n return (\n typeof schema === \"object\" &&\n schema !== null &&\n !Array.isArray(schema) &&\n !(\"$ref\" in schema) &&\n Object.entries(schema).every(isPresenceKeyword)\n );\n}\n\n/**\n * The schema a member stands for: itself, or the target of a `$ref` with no sibling keywords. The\n * discriminator scan has already added the discriminator property to a mapped target, so such a\n * target is never presence-only.\n */\nfunction memberSchema(member: Schema, request: SchemaRequest): unknown {\n if (typeof member !== \"object\" || member === null || !(\"$ref\" in member)) {\n return member;\n }\n const ref = (member as { readonly $ref: unknown }).$ref;\n if (typeof ref !== \"string\" || Object.keys(member).length !== 1) {\n return undefined;\n }\n return request.context.refs.resolve(ref);\n}\n\n/** The `allOf` members to type, and the keys the left-out members make required. */\nexport interface AllOfMembers {\n readonly members: readonly Schema[];\n readonly required: readonly string[];\n}\n\n/**\n * The members of `allOf` with presence-only ones left out, when the fix is on and another member\n * is left to carry the keys; otherwise the members as they are.\n */\nexport function allOfMembers(members: readonly Schema[], request: SchemaRequest): AllOfMembers {\n const unchanged = { members, required: [] };\n if (!request.context.options.fixes.has(OutputFix.ALLOF_REQUIRED)) {\n return unchanged;\n }\n const schemas = members.map((member) => memberSchema(member, request));\n const kept = members.filter((_, index) => !isPresenceObject(schemas[index]));\n if (kept.length === 0 || kept.length === members.length) {\n return unchanged;\n }\n const required = schemas.flatMap((schema) =>\n isPresenceObject(schema) ? (schema.required ?? []) : [],\n );\n return { members: kept, required };\n}\n"],"names":["OutputFix"],"mappings":";;;;AAiBA,MAAM,iBAAA,uBAA6C,GAAA,CAAI;AAAA,EACrD,UAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,MAAM,gBAAA,GAAmB,IAAA;AACzB,MAAM,WAAA,GAAc,QAAA;AAEpB,SAAS,aAAa,KAAA,EAA4C;AAChE,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,IAAK,KAAA,CAAM,MAAM,CAAC,KAAA,KAAU,OAAO,KAAA,KAAU,QAAQ,CAAA;AACjF;AAEA,SAAS,iBAAA,CAAkB,CAAC,GAAA,EAAK,KAAK,CAAA,EAAwC;AAC5E,EAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,IAAA,OAAO,KAAA,KAAU,WAAA;AAAA,EACnB;AACA,EAAA,IAAI,QAAQ,UAAA,EAAY;AACtB,IAAA,OAAO,aAAa,KAAK,CAAA;AAAA,EAC3B;AACA,EAAA,OAAO,kBAAkB,GAAA,CAAI,GAAG,CAAA,IAAK,GAAA,CAAI,WAAW,gBAAgB,CAAA;AACtE;AAEA,SAAS,iBAAiB,MAAA,EAAyC;AACjE,EAAA,OACE,OAAO,MAAA,KAAW,QAAA,IAClB,WAAW,IAAA,IACX,CAAC,MAAM,OAAA,CAAQ,MAAM,CAAA,IACrB,EAAE,UAAU,MAAA,CAAA,IACZ,MAAA,CAAO,QAAQ,MAAM,CAAA,CAAE,MAAM,iBAAiB,CAAA;AAElD;AAOA,SAAS,YAAA,CAAa,QAAgB,OAAA,EAAiC;AACrE,EAAA,IAAI,OAAO,MAAA,KAAW,QAAA,IAAY,WAAW,IAAA,IAAQ,EAAE,UAAU,MAAA,CAAA,EAAS;AACxE,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,MAAM,MAAO,MAAA,CAAsC,IAAA;AACnD,EAAA,IAAI,OAAO,QAAQ,QAAA,IAAY,MAAA,CAAO,KAAK,MAAM,CAAA,CAAE,WAAW,CAAA,EAAG;AAC/D,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,OAAA,CAAQ,OAAA,CAAQ,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA;AACzC;AAYO,SAAS,YAAA,CAAa,SAA4B,OAAA,EAAsC;AAC7F,EAAA,MAAM,SAAA,GAAY,EAAE,OAAA,EAAS,QAAA,EAAU,EAAC,EAAE;AAC1C,EAAA,IAAI,CAAC,QAAQ,OAAA,CAAQ,OAAA,CAAQ,MAAM,GAAA,CAAIA,qBAAA,CAAU,cAAc,CAAA,EAAG;AAChE,IAAA,OAAO,SAAA;AAAA,EACT;AACA,EAAA,MAAM,OAAA,GAAU,QAAQ,GAAA,CAAI,CAAC,WAAW,YAAA,CAAa,MAAA,EAAQ,OAAO,CAAC,CAAA;AACrE,EAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,EAAG,KAAA,KAAU,CAAC,gBAAA,CAAiB,OAAA,CAAQ,KAAK,CAAC,CAAC,CAAA;AAC3E,EAAA,IAAI,KAAK,MAAA,KAAW,CAAA,IAAK,IAAA,CAAK,MAAA,KAAW,QAAQ,MAAA,EAAQ;AACvD,IAAA,OAAO,SAAA;AAAA,EACT;AACA,EAAA,MAAM,WAAW,OAAA,CAAQ,OAAA;AAAA,IAAQ,CAAC,WAChC,gBAAA,CAAiB,MAAM,IAAK,MAAA,CAAO,QAAA,IAAY,EAAC,GAAK;AAAC,GACxD;AACA,EAAA,OAAO,EAAE,OAAA,EAAS,IAAA,EAAM,QAAA,EAAS;AACnC;;"}
@@ -0,0 +1,57 @@
1
+ import { OutputFix } from '../../../domain/output-fixes.mjs';
2
+
3
+ const PRESENCE_KEYWORDS = /* @__PURE__ */ new Set([
4
+ "$comment",
5
+ "deprecated",
6
+ "description",
7
+ "example",
8
+ "examples",
9
+ "required",
10
+ "title",
11
+ "type"
12
+ ]);
13
+ const EXTENSION_PREFIX = "x-";
14
+ const OBJECT_TYPE = "object";
15
+ function isStringList(value) {
16
+ return Array.isArray(value) && value.every((entry) => typeof entry === "string");
17
+ }
18
+ function isPresenceKeyword([key, value]) {
19
+ if (key === "type") {
20
+ return value === OBJECT_TYPE;
21
+ }
22
+ if (key === "required") {
23
+ return isStringList(value);
24
+ }
25
+ return PRESENCE_KEYWORDS.has(key) || key.startsWith(EXTENSION_PREFIX);
26
+ }
27
+ function isPresenceObject(schema) {
28
+ return typeof schema === "object" && schema !== null && !Array.isArray(schema) && !("$ref" in schema) && Object.entries(schema).every(isPresenceKeyword);
29
+ }
30
+ function memberSchema(member, request) {
31
+ if (typeof member !== "object" || member === null || !("$ref" in member)) {
32
+ return member;
33
+ }
34
+ const ref = member.$ref;
35
+ if (typeof ref !== "string" || Object.keys(member).length !== 1) {
36
+ return void 0;
37
+ }
38
+ return request.context.refs.resolve(ref);
39
+ }
40
+ function allOfMembers(members, request) {
41
+ const unchanged = { members, required: [] };
42
+ if (!request.context.options.fixes.has(OutputFix.ALLOF_REQUIRED)) {
43
+ return unchanged;
44
+ }
45
+ const schemas = members.map((member) => memberSchema(member, request));
46
+ const kept = members.filter((_, index) => !isPresenceObject(schemas[index]));
47
+ if (kept.length === 0 || kept.length === members.length) {
48
+ return unchanged;
49
+ }
50
+ const required = schemas.flatMap(
51
+ (schema) => isPresenceObject(schema) ? schema.required ?? [] : []
52
+ );
53
+ return { members: kept, required };
54
+ }
55
+
56
+ export { allOfMembers };
57
+ //# sourceMappingURL=presence-members.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presence-members.mjs","sources":["../../../../src/application/transform/schema/presence-members.ts"],"sourcesContent":["import type { Schema, SchemaObject } from \"../../../domain/openapi/schema-object.js\";\nimport { OutputFix } from \"../../../domain/output-fixes.js\";\nimport type { SchemaRequest } from \"./schema-rule.js\";\n\n/**\n * The `allof-required` fix (ADR-021, roadmap R6). An `allOf` member such as `{ required: [name] }`\n * or `{ type: object }` says nothing about the shape of the object; it only asks that keys are\n * present. Typed as an object of its own, it adds `& Record<string, never>` or `& unknown`. With\n * the fix, such members are left out and their keys are made required in the other members, the\n * same way the parent's `required` is (upstream #1474, #1520, #2165).\n */\n\n/**\n * Keywords that do not change the shape: `type: object`, `required`, and annotations that the\n * generator does not read on an `allOf` member. `default`, `readOnly` and `writeOnly` are left out:\n * they change types elsewhere.\n */\nconst PRESENCE_KEYWORDS: ReadonlySet<string> = new Set([\n \"$comment\",\n \"deprecated\",\n \"description\",\n \"example\",\n \"examples\",\n \"required\",\n \"title\",\n \"type\",\n]);\n\nconst EXTENSION_PREFIX = \"x-\";\nconst OBJECT_TYPE = \"object\";\n\nfunction isStringList(value: unknown): value is readonly string[] {\n return Array.isArray(value) && value.every((entry) => typeof entry === \"string\");\n}\n\nfunction isPresenceKeyword([key, value]: readonly [string, unknown]): boolean {\n if (key === \"type\") {\n return value === OBJECT_TYPE;\n }\n if (key === \"required\") {\n return isStringList(value);\n }\n return PRESENCE_KEYWORDS.has(key) || key.startsWith(EXTENSION_PREFIX);\n}\n\nfunction isPresenceObject(schema: unknown): schema is SchemaObject {\n return (\n typeof schema === \"object\" &&\n schema !== null &&\n !Array.isArray(schema) &&\n !(\"$ref\" in schema) &&\n Object.entries(schema).every(isPresenceKeyword)\n );\n}\n\n/**\n * The schema a member stands for: itself, or the target of a `$ref` with no sibling keywords. The\n * discriminator scan has already added the discriminator property to a mapped target, so such a\n * target is never presence-only.\n */\nfunction memberSchema(member: Schema, request: SchemaRequest): unknown {\n if (typeof member !== \"object\" || member === null || !(\"$ref\" in member)) {\n return member;\n }\n const ref = (member as { readonly $ref: unknown }).$ref;\n if (typeof ref !== \"string\" || Object.keys(member).length !== 1) {\n return undefined;\n }\n return request.context.refs.resolve(ref);\n}\n\n/** The `allOf` members to type, and the keys the left-out members make required. */\nexport interface AllOfMembers {\n readonly members: readonly Schema[];\n readonly required: readonly string[];\n}\n\n/**\n * The members of `allOf` with presence-only ones left out, when the fix is on and another member\n * is left to carry the keys; otherwise the members as they are.\n */\nexport function allOfMembers(members: readonly Schema[], request: SchemaRequest): AllOfMembers {\n const unchanged = { members, required: [] };\n if (!request.context.options.fixes.has(OutputFix.ALLOF_REQUIRED)) {\n return unchanged;\n }\n const schemas = members.map((member) => memberSchema(member, request));\n const kept = members.filter((_, index) => !isPresenceObject(schemas[index]));\n if (kept.length === 0 || kept.length === members.length) {\n return unchanged;\n }\n const required = schemas.flatMap((schema) =>\n isPresenceObject(schema) ? (schema.required ?? []) : [],\n );\n return { members: kept, required };\n}\n"],"names":[],"mappings":";;AAiBA,MAAM,iBAAA,uBAA6C,GAAA,CAAI;AAAA,EACrD,UAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,MAAM,gBAAA,GAAmB,IAAA;AACzB,MAAM,WAAA,GAAc,QAAA;AAEpB,SAAS,aAAa,KAAA,EAA4C;AAChE,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,IAAK,KAAA,CAAM,MAAM,CAAC,KAAA,KAAU,OAAO,KAAA,KAAU,QAAQ,CAAA;AACjF;AAEA,SAAS,iBAAA,CAAkB,CAAC,GAAA,EAAK,KAAK,CAAA,EAAwC;AAC5E,EAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,IAAA,OAAO,KAAA,KAAU,WAAA;AAAA,EACnB;AACA,EAAA,IAAI,QAAQ,UAAA,EAAY;AACtB,IAAA,OAAO,aAAa,KAAK,CAAA;AAAA,EAC3B;AACA,EAAA,OAAO,kBAAkB,GAAA,CAAI,GAAG,CAAA,IAAK,GAAA,CAAI,WAAW,gBAAgB,CAAA;AACtE;AAEA,SAAS,iBAAiB,MAAA,EAAyC;AACjE,EAAA,OACE,OAAO,MAAA,KAAW,QAAA,IAClB,WAAW,IAAA,IACX,CAAC,MAAM,OAAA,CAAQ,MAAM,CAAA,IACrB,EAAE,UAAU,MAAA,CAAA,IACZ,MAAA,CAAO,QAAQ,MAAM,CAAA,CAAE,MAAM,iBAAiB,CAAA;AAElD;AAOA,SAAS,YAAA,CAAa,QAAgB,OAAA,EAAiC;AACrE,EAAA,IAAI,OAAO,MAAA,KAAW,QAAA,IAAY,WAAW,IAAA,IAAQ,EAAE,UAAU,MAAA,CAAA,EAAS;AACxE,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,MAAM,MAAO,MAAA,CAAsC,IAAA;AACnD,EAAA,IAAI,OAAO,QAAQ,QAAA,IAAY,MAAA,CAAO,KAAK,MAAM,CAAA,CAAE,WAAW,CAAA,EAAG;AAC/D,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,OAAA,CAAQ,OAAA,CAAQ,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA;AACzC;AAYO,SAAS,YAAA,CAAa,SAA4B,OAAA,EAAsC;AAC7F,EAAA,MAAM,SAAA,GAAY,EAAE,OAAA,EAAS,QAAA,EAAU,EAAC,EAAE;AAC1C,EAAA,IAAI,CAAC,QAAQ,OAAA,CAAQ,OAAA,CAAQ,MAAM,GAAA,CAAI,SAAA,CAAU,cAAc,CAAA,EAAG;AAChE,IAAA,OAAO,SAAA;AAAA,EACT;AACA,EAAA,MAAM,OAAA,GAAU,QAAQ,GAAA,CAAI,CAAC,WAAW,YAAA,CAAa,MAAA,EAAQ,OAAO,CAAC,CAAA;AACrE,EAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,EAAG,KAAA,KAAU,CAAC,gBAAA,CAAiB,OAAA,CAAQ,KAAK,CAAC,CAAC,CAAA;AAC3E,EAAA,IAAI,KAAK,MAAA,KAAW,CAAA,IAAK,IAAA,CAAK,MAAA,KAAW,QAAQ,MAAA,EAAQ;AACvD,IAAA,OAAO,SAAA;AAAA,EACT;AACA,EAAA,MAAM,WAAW,OAAA,CAAQ,OAAA;AAAA,IAAQ,CAAC,WAChC,gBAAA,CAAiB,MAAM,IAAK,MAAA,CAAO,QAAA,IAAY,EAAC,GAAK;AAAC,GACxD;AACA,EAAA,OAAO,EAAE,OAAA,EAAS,IAAA,EAAM,QAAA,EAAS;AACnC;;"}