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,36 @@
1
+ 'use strict';
2
+
3
+ const errors = require('../domain/errors.cjs');
4
+
5
+ const STACK_OVERFLOW_MESSAGE = /maximum call stack size exceeded/i;
6
+ function isStackOverflowError(error) {
7
+ return error instanceof RangeError && STACK_OVERFLOW_MESSAGE.test(error.message);
8
+ }
9
+ function schemaTooDeepError(step, cause) {
10
+ return new errors.OpenAPITypesafeError({
11
+ code: errors.ERROR_CODES.SCHEMA_TOO_DEEP,
12
+ message: `The schema is nested too deeply to ${step}: the call stack ran out. Both inline schemas and chains of $ref (each schema referring to the next) count; shorten the deepest.`,
13
+ details: { step },
14
+ cause
15
+ });
16
+ }
17
+ function withStackOverflowReported(step, run) {
18
+ try {
19
+ return run();
20
+ } catch (error) {
21
+ throw isStackOverflowError(error) ? schemaTooDeepError(step, error) : error;
22
+ }
23
+ }
24
+ async function withStackOverflowReportedAsync(step, run) {
25
+ try {
26
+ return await run();
27
+ } catch (error) {
28
+ throw isStackOverflowError(error) ? schemaTooDeepError(step, error) : error;
29
+ }
30
+ }
31
+
32
+ exports.isStackOverflowError = isStackOverflowError;
33
+ exports.schemaTooDeepError = schemaTooDeepError;
34
+ exports.withStackOverflowReported = withStackOverflowReported;
35
+ exports.withStackOverflowReportedAsync = withStackOverflowReportedAsync;
36
+ //# sourceMappingURL=stack-overflow.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stack-overflow.cjs","sources":["../../src/application/stack-overflow.ts"],"sourcesContent":["import { ERROR_CODES, OpenAPITypesafeError } from \"../domain/errors.js\";\n\n/**\n * Deeply nested schemas (ENGINEERING_PLAN 8.5). Loading, bundling, transforming and printing walk\n * schemas recursively, and Redocly follows each `$ref` inside the walk. On the default Node.js\n * stack, about 550 levels of inline schemas or a chain of about 900 `$ref`s (each schema refers to\n * the next) run out of call stack. Real documents stay far below: every YAML or JSON file goes\n * through the YAML parser, which stops at 100 levels, and the whole corpus passes. The overflow is\n * reported as a typed error instead of a `RangeError` with a stack trace.\n */\n\n/** The step that ran out of call stack; named in the message and the details. */\nexport type DeepSchemaStep = \"load\" | \"transform\" | \"print\";\n\n/** V8 and JavaScriptCore (Node.js, Deno, Bun) throw a `RangeError` with this message. */\nconst STACK_OVERFLOW_MESSAGE = /maximum call stack size exceeded/i;\n\n/** Whether a thrown value is a call stack overflow. */\nexport function isStackOverflowError(error: unknown): boolean {\n return error instanceof RangeError && STACK_OVERFLOW_MESSAGE.test(error.message);\n}\n\n/** The typed error for a document nested too deeply for the call stack. */\nexport function schemaTooDeepError(step: DeepSchemaStep, cause: unknown): OpenAPITypesafeError {\n return new OpenAPITypesafeError({\n code: ERROR_CODES.SCHEMA_TOO_DEEP,\n message:\n `The schema is nested too deeply to ${step}: the call stack ran out. Both inline ` +\n \"schemas and chains of $ref (each schema referring to the next) count; shorten the deepest.\",\n details: { step },\n cause,\n });\n}\n\n/** Run a step and report a stack overflow in it as SCHEMA_TOO_DEEP; other errors pass through. */\nexport function withStackOverflowReported<T>(step: DeepSchemaStep, run: () => T): T {\n try {\n return run();\n } catch (error) {\n throw isStackOverflowError(error) ? schemaTooDeepError(step, error) : error;\n }\n}\n\n/** The asynchronous form of `withStackOverflowReported`. */\nexport async function withStackOverflowReportedAsync<T>(\n step: DeepSchemaStep,\n run: () => Promise<T>,\n): Promise<T> {\n try {\n return await run();\n } catch (error) {\n throw isStackOverflowError(error) ? schemaTooDeepError(step, error) : error;\n }\n}\n"],"names":["OpenAPITypesafeError","ERROR_CODES"],"mappings":";;;;AAeA,MAAM,sBAAA,GAAyB,mCAAA;AAGxB,SAAS,qBAAqB,KAAA,EAAyB;AAC5D,EAAA,OAAO,KAAA,YAAiB,UAAA,IAAc,sBAAA,CAAuB,IAAA,CAAK,MAAM,OAAO,CAAA;AACjF;AAGO,SAAS,kBAAA,CAAmB,MAAsB,KAAA,EAAsC;AAC7F,EAAA,OAAO,IAAIA,2BAAA,CAAqB;AAAA,IAC9B,MAAMC,kBAAA,CAAY,eAAA;AAAA,IAClB,OAAA,EACE,sCAAsC,IAAI,CAAA,gIAAA,CAAA;AAAA,IAE5C,OAAA,EAAS,EAAE,IAAA,EAAK;AAAA,IAChB;AAAA,GACD,CAAA;AACH;AAGO,SAAS,yBAAA,CAA6B,MAAsB,GAAA,EAAiB;AAClF,EAAA,IAAI;AACF,IAAA,OAAO,GAAA,EAAI;AAAA,EACb,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,qBAAqB,KAAK,CAAA,GAAI,kBAAA,CAAmB,IAAA,EAAM,KAAK,CAAA,GAAI,KAAA;AAAA,EACxE;AACF;AAGA,eAAsB,8BAAA,CACpB,MACA,GAAA,EACY;AACZ,EAAA,IAAI;AACF,IAAA,OAAO,MAAM,GAAA,EAAI;AAAA,EACnB,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,qBAAqB,KAAK,CAAA,GAAI,kBAAA,CAAmB,IAAA,EAAM,KAAK,CAAA,GAAI,KAAA;AAAA,EACxE;AACF;;;;;"}
@@ -0,0 +1,31 @@
1
+ import { OpenAPITypesafeError, ERROR_CODES } from '../domain/errors.mjs';
2
+
3
+ const STACK_OVERFLOW_MESSAGE = /maximum call stack size exceeded/i;
4
+ function isStackOverflowError(error) {
5
+ return error instanceof RangeError && STACK_OVERFLOW_MESSAGE.test(error.message);
6
+ }
7
+ function schemaTooDeepError(step, cause) {
8
+ return new OpenAPITypesafeError({
9
+ code: ERROR_CODES.SCHEMA_TOO_DEEP,
10
+ message: `The schema is nested too deeply to ${step}: the call stack ran out. Both inline schemas and chains of $ref (each schema referring to the next) count; shorten the deepest.`,
11
+ details: { step },
12
+ cause
13
+ });
14
+ }
15
+ function withStackOverflowReported(step, run) {
16
+ try {
17
+ return run();
18
+ } catch (error) {
19
+ throw isStackOverflowError(error) ? schemaTooDeepError(step, error) : error;
20
+ }
21
+ }
22
+ async function withStackOverflowReportedAsync(step, run) {
23
+ try {
24
+ return await run();
25
+ } catch (error) {
26
+ throw isStackOverflowError(error) ? schemaTooDeepError(step, error) : error;
27
+ }
28
+ }
29
+
30
+ export { isStackOverflowError, schemaTooDeepError, withStackOverflowReported, withStackOverflowReportedAsync };
31
+ //# sourceMappingURL=stack-overflow.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stack-overflow.mjs","sources":["../../src/application/stack-overflow.ts"],"sourcesContent":["import { ERROR_CODES, OpenAPITypesafeError } from \"../domain/errors.js\";\n\n/**\n * Deeply nested schemas (ENGINEERING_PLAN 8.5). Loading, bundling, transforming and printing walk\n * schemas recursively, and Redocly follows each `$ref` inside the walk. On the default Node.js\n * stack, about 550 levels of inline schemas or a chain of about 900 `$ref`s (each schema refers to\n * the next) run out of call stack. Real documents stay far below: every YAML or JSON file goes\n * through the YAML parser, which stops at 100 levels, and the whole corpus passes. The overflow is\n * reported as a typed error instead of a `RangeError` with a stack trace.\n */\n\n/** The step that ran out of call stack; named in the message and the details. */\nexport type DeepSchemaStep = \"load\" | \"transform\" | \"print\";\n\n/** V8 and JavaScriptCore (Node.js, Deno, Bun) throw a `RangeError` with this message. */\nconst STACK_OVERFLOW_MESSAGE = /maximum call stack size exceeded/i;\n\n/** Whether a thrown value is a call stack overflow. */\nexport function isStackOverflowError(error: unknown): boolean {\n return error instanceof RangeError && STACK_OVERFLOW_MESSAGE.test(error.message);\n}\n\n/** The typed error for a document nested too deeply for the call stack. */\nexport function schemaTooDeepError(step: DeepSchemaStep, cause: unknown): OpenAPITypesafeError {\n return new OpenAPITypesafeError({\n code: ERROR_CODES.SCHEMA_TOO_DEEP,\n message:\n `The schema is nested too deeply to ${step}: the call stack ran out. Both inline ` +\n \"schemas and chains of $ref (each schema referring to the next) count; shorten the deepest.\",\n details: { step },\n cause,\n });\n}\n\n/** Run a step and report a stack overflow in it as SCHEMA_TOO_DEEP; other errors pass through. */\nexport function withStackOverflowReported<T>(step: DeepSchemaStep, run: () => T): T {\n try {\n return run();\n } catch (error) {\n throw isStackOverflowError(error) ? schemaTooDeepError(step, error) : error;\n }\n}\n\n/** The asynchronous form of `withStackOverflowReported`. */\nexport async function withStackOverflowReportedAsync<T>(\n step: DeepSchemaStep,\n run: () => Promise<T>,\n): Promise<T> {\n try {\n return await run();\n } catch (error) {\n throw isStackOverflowError(error) ? schemaTooDeepError(step, error) : error;\n }\n}\n"],"names":[],"mappings":";;AAeA,MAAM,sBAAA,GAAyB,mCAAA;AAGxB,SAAS,qBAAqB,KAAA,EAAyB;AAC5D,EAAA,OAAO,KAAA,YAAiB,UAAA,IAAc,sBAAA,CAAuB,IAAA,CAAK,MAAM,OAAO,CAAA;AACjF;AAGO,SAAS,kBAAA,CAAmB,MAAsB,KAAA,EAAsC;AAC7F,EAAA,OAAO,IAAI,oBAAA,CAAqB;AAAA,IAC9B,MAAM,WAAA,CAAY,eAAA;AAAA,IAClB,OAAA,EACE,sCAAsC,IAAI,CAAA,gIAAA,CAAA;AAAA,IAE5C,OAAA,EAAS,EAAE,IAAA,EAAK;AAAA,IAChB;AAAA,GACD,CAAA;AACH;AAGO,SAAS,yBAAA,CAA6B,MAAsB,GAAA,EAAiB;AAClF,EAAA,IAAI;AACF,IAAA,OAAO,GAAA,EAAI;AAAA,EACb,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,qBAAqB,KAAK,CAAA,GAAI,kBAAA,CAAmB,IAAA,EAAM,KAAK,CAAA,GAAI,KAAA;AAAA,EACxE;AACF;AAGA,eAAsB,8BAAA,CACpB,MACA,GAAA,EACY;AACZ,EAAA,IAAI;AACF,IAAA,OAAO,MAAM,GAAA,EAAI;AAAA,EACnB,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,qBAAqB,KAAK,CAAA,GAAI,kBAAA,CAAmB,IAAA,EAAM,KAAK,CAAA,GAAI,KAAA;AAAA,EACxE;AACF;;"}
@@ -0,0 +1,144 @@
1
+ 'use strict';
2
+
3
+ const typeResolution = require('./type-resolution.cjs');
4
+
5
+ function everyOf(items, relate) {
6
+ let result = "assignable";
7
+ for (const [index, item] of items.entries()) {
8
+ const each = relate(item, index);
9
+ if (each === "rejected") {
10
+ return "rejected";
11
+ }
12
+ if (each === "undecided") {
13
+ result = "undecided";
14
+ }
15
+ }
16
+ return result;
17
+ }
18
+ function someOf(items, relate) {
19
+ let result = "rejected";
20
+ for (const item of items) {
21
+ const each = relate(item);
22
+ if (each === "assignable") {
23
+ return "assignable";
24
+ }
25
+ if (each === "undecided") {
26
+ result = "undecided";
27
+ }
28
+ }
29
+ return result;
30
+ }
31
+ function provenBy(condition) {
32
+ return condition ? "assignable" : "rejected";
33
+ }
34
+ function categoryOf(type) {
35
+ switch (type.kind) {
36
+ case "keyword":
37
+ case "stringLiteral":
38
+ case "numberLiteral":
39
+ case "booleanLiteral":
40
+ return "primitive";
41
+ case "array":
42
+ case "tuple":
43
+ case "readonly":
44
+ return "list";
45
+ case "object":
46
+ return "object";
47
+ default:
48
+ return "opaque";
49
+ }
50
+ }
51
+ const NO_OBJECT_KEYWORDS = /* @__PURE__ */ new Set(["null", "undefined", "unknown", "never"]);
52
+ const ARRAY_MEMBER_NAMES = /* @__PURE__ */ new Set([
53
+ "length",
54
+ "toString",
55
+ "toLocaleString",
56
+ "pop",
57
+ "push",
58
+ "concat",
59
+ "join",
60
+ "reverse",
61
+ "shift",
62
+ "slice",
63
+ "sort",
64
+ "splice",
65
+ "unshift",
66
+ "indexOf",
67
+ "lastIndexOf",
68
+ "every",
69
+ "some",
70
+ "forEach",
71
+ "map",
72
+ "filter",
73
+ "reduce",
74
+ "reduceRight",
75
+ "find",
76
+ "findIndex",
77
+ "fill",
78
+ "copyWithin",
79
+ "entries",
80
+ "keys",
81
+ "values",
82
+ "includes",
83
+ "flatMap",
84
+ "flat",
85
+ "at",
86
+ "findLast",
87
+ "findLastIndex",
88
+ "toReversed",
89
+ "toSorted",
90
+ "toSpliced",
91
+ "with"
92
+ ]);
93
+ const ARRAY_LENGTH = "length";
94
+ const ELEMENT_NAME_RE = /^\d+$/;
95
+ function isListMemberName(name) {
96
+ return ARRAY_MEMBER_NAMES.has(name) || ELEMENT_NAME_RE.test(name);
97
+ }
98
+ function listToObject(target) {
99
+ const properties = [...typeResolution.propertiesOf(target).values()];
100
+ const isForeign = (property) => !isListMemberName(typeResolution.nameOf(property));
101
+ const needsForeign = properties.some((property) => !property.isOptional && isForeign(property));
102
+ const isWeak = properties.length > 0 && typeResolution.indexSignaturesOf(target).length === 0 && properties.every((property) => property.isOptional);
103
+ return needsForeign || isWeak && properties.every(isForeign) ? "rejected" : "undecided";
104
+ }
105
+ function primitiveToObject(source) {
106
+ const isNoObject = source.kind === "keyword" && NO_OBJECT_KEYWORDS.has(source.keyword);
107
+ return isNoObject ? "rejected" : "undecided";
108
+ }
109
+ function objectToList(source) {
110
+ return typeResolution.propertiesOf(source).has(ARRAY_LENGTH) ? "undecided" : "rejected";
111
+ }
112
+ function crossCategoryRelation(source, target) {
113
+ const from = categoryOf(source);
114
+ const to = categoryOf(target);
115
+ if (from === "opaque" || to === "opaque") {
116
+ return "undecided";
117
+ }
118
+ if (from === to) {
119
+ return null;
120
+ }
121
+ if (to !== "object") {
122
+ return source.kind === "object" && to === "list" ? objectToList(source) : "rejected";
123
+ }
124
+ return from === "primitive" ? primitiveToObject(source) : listToObject(target);
125
+ }
126
+ const LITERAL_KEYWORDS = {
127
+ stringLiteral: "string",
128
+ numberLiteral: "number",
129
+ booleanLiteral: "boolean"
130
+ };
131
+ function primitiveRelation(source, target) {
132
+ if (target.kind !== "keyword" || source.kind === "keyword") {
133
+ return "rejected";
134
+ }
135
+ const keyword = LITERAL_KEYWORDS[source.kind];
136
+ return provenBy(keyword === target.keyword);
137
+ }
138
+
139
+ exports.crossCategoryRelation = crossCategoryRelation;
140
+ exports.everyOf = everyOf;
141
+ exports.primitiveRelation = primitiveRelation;
142
+ exports.provenBy = provenBy;
143
+ exports.someOf = someOf;
144
+ //# sourceMappingURL=assignability.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assignability.cjs","sources":["../../../../src/application/transform/document/assignability.ts"],"sourcesContent":["import type { IrObjectType, IrPropertySignature, IrType } from \"../../../domain/ir/nodes.js\";\nimport { indexSignaturesOf, nameOf, propertiesOf } from \"./type-resolution.js\";\n\n/**\n * What the `--path-params-as-types` overlap check knows about one type where another is expected.\n * `assignable` and `rejected` are proofs of what TypeScript decides (`strict`, without\n * `exactOptionalPropertyTypes`); `undecided` is a pair the check does not model, such as a utility\n * type or raw text. Only a rejection changes the output, so an undecided pair keeps the original.\n */\nexport type Assignability = \"assignable\" | \"rejected\" | \"undecided\";\n\n/**\n * All of the relations: rejected when one is, assignable when each is. The relations are computed\n * lazily, so a rejection stops the rest.\n */\nexport function everyOf<T>(\n items: readonly T[],\n relate: (item: T, index: number) => Assignability,\n): Assignability {\n let result: Assignability = \"assignable\";\n for (const [index, item] of items.entries()) {\n const each = relate(item, index);\n if (each === \"rejected\") {\n return \"rejected\";\n }\n if (each === \"undecided\") {\n result = \"undecided\";\n }\n }\n return result;\n}\n\n/** One of the relations: assignable when one is, rejected when each is. */\nexport function someOf<T>(items: readonly T[], relate: (item: T) => Assignability): Assignability {\n let result: Assignability = \"rejected\";\n for (const item of items) {\n const each = relate(item);\n if (each === \"assignable\") {\n return \"assignable\";\n }\n if (each === \"undecided\") {\n result = \"undecided\";\n }\n }\n return result;\n}\n\n/** Assignable when the condition holds, rejected when it does not. */\nexport function provenBy(condition: boolean): Assignability {\n return condition ? \"assignable\" : \"rejected\";\n}\n\n/**\n * The kinds of resolved types the check tells apart. A type of one kind is never assignable to a\n * type of another, except that a primitive or a list may fit an object type (`string` fits\n * `{ length: number }`), which the check models only in part. `opaque` is any type it cannot\n * read.\n */\ntype TypeCategory = \"primitive\" | \"list\" | \"object\" | \"opaque\";\n\nfunction categoryOf(type: IrType): TypeCategory {\n switch (type.kind) {\n case \"keyword\":\n case \"stringLiteral\":\n case \"numberLiteral\":\n case \"booleanLiteral\":\n return \"primitive\";\n case \"array\":\n case \"tuple\":\n case \"readonly\":\n return \"list\";\n case \"object\":\n return \"object\";\n default:\n return \"opaque\";\n }\n}\n\n/** Keywords that are no object: `{}` rejects them under `strictNullChecks`. */\nconst NO_OBJECT_KEYWORDS: ReadonlySet<string> = new Set([\"null\", \"undefined\", \"unknown\", \"never\"]);\n\n/**\n * The members of `ReadonlyArray` and `Array` in the TypeScript libraries up to ESNext. An object\n * type that needs a property of another name is no list; a numeric name may be a tuple element.\n */\nconst ARRAY_MEMBER_NAMES: ReadonlySet<string> = new Set([\n \"length\",\n \"toString\",\n \"toLocaleString\",\n \"pop\",\n \"push\",\n \"concat\",\n \"join\",\n \"reverse\",\n \"shift\",\n \"slice\",\n \"sort\",\n \"splice\",\n \"unshift\",\n \"indexOf\",\n \"lastIndexOf\",\n \"every\",\n \"some\",\n \"forEach\",\n \"map\",\n \"filter\",\n \"reduce\",\n \"reduceRight\",\n \"find\",\n \"findIndex\",\n \"fill\",\n \"copyWithin\",\n \"entries\",\n \"keys\",\n \"values\",\n \"includes\",\n \"flatMap\",\n \"flat\",\n \"at\",\n \"findLast\",\n \"findLastIndex\",\n \"toReversed\",\n \"toSorted\",\n \"toSpliced\",\n \"with\",\n]);\n\nconst ARRAY_LENGTH = \"length\";\n/** A tuple element's name: `\"0\"`, `\"1\"`. */\nconst ELEMENT_NAME_RE = /^\\d+$/;\n\nfunction isListMemberName(name: string): boolean {\n return ARRAY_MEMBER_NAMES.has(name) || ELEMENT_NAME_RE.test(name);\n}\n\n/**\n * Whether a list fits an object type. It does not when the object needs a property no list has\n * (TS2741), or when the object is a weak type and no list has one of its properties (TS2559).\n */\nfunction listToObject(target: IrObjectType): Assignability {\n const properties = [...propertiesOf(target).values()];\n const isForeign = (property: IrPropertySignature) => !isListMemberName(nameOf(property));\n const needsForeign = properties.some((property) => !property.isOptional && isForeign(property));\n const isWeak =\n properties.length > 0 &&\n indexSignaturesOf(target).length === 0 &&\n properties.every((property) => property.isOptional);\n return needsForeign || (isWeak && properties.every(isForeign)) ? \"rejected\" : \"undecided\";\n}\n\n/**\n * Whether a primitive fits an object type: `null`, `undefined` and `unknown` never do; any other\n * may (`{}`, `{ length: number }`), which is not modelled.\n */\nfunction primitiveToObject(source: IrType): Assignability {\n const isNoObject = source.kind === \"keyword\" && NO_OBJECT_KEYWORDS.has(source.keyword);\n return isNoObject ? \"rejected\" : \"undecided\";\n}\n\n/** An object type fits an array only with all of its members; `length` is the first it needs. */\nfunction objectToList(source: IrObjectType): Assignability {\n return propertiesOf(source).has(ARRAY_LENGTH) ? \"undecided\" : \"rejected\";\n}\n\n/**\n * The relation of two types of different categories, or null when they are of the same one.\n * Primitive and list targets accept nothing of another category; see `TypeCategory`.\n */\nexport function crossCategoryRelation(source: IrType, target: IrType): Assignability | null {\n const from = categoryOf(source);\n const to = categoryOf(target);\n if (from === \"opaque\" || to === \"opaque\") {\n return \"undecided\";\n }\n if (from === to) {\n return null;\n }\n if (to !== \"object\") {\n return source.kind === \"object\" && to === \"list\" ? objectToList(source) : \"rejected\";\n }\n return from === \"primitive\" ? primitiveToObject(source) : listToObject(target as IrObjectType);\n}\n\n/** The keyword a literal type belongs to. */\nconst LITERAL_KEYWORDS = {\n stringLiteral: \"string\",\n numberLiteral: \"number\",\n booleanLiteral: \"boolean\",\n} as const;\n\n/**\n * The relation of two primitive types written differently (the same text is assignable). A\n * literal fits its keyword; any other pair is rejected: different keywords, different literals,\n * a keyword for one literal (a union of literals is compared in `type-assignability.ts`), and\n * anything for `never`.\n */\nexport function primitiveRelation(source: IrType, target: IrType): Assignability {\n if (target.kind !== \"keyword\" || source.kind === \"keyword\") {\n return \"rejected\";\n }\n const keyword = (LITERAL_KEYWORDS as Partial<Record<IrType[\"kind\"], string>>)[source.kind];\n return provenBy(keyword === target.keyword);\n}\n"],"names":["propertiesOf","nameOf","indexSignaturesOf"],"mappings":";;;;AAeO,SAAS,OAAA,CACd,OACA,MAAA,EACe;AACf,EAAA,IAAI,MAAA,GAAwB,YAAA;AAC5B,EAAA,KAAA,MAAW,CAAC,KAAA,EAAO,IAAI,CAAA,IAAK,KAAA,CAAM,SAAQ,EAAG;AAC3C,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,EAAM,KAAK,CAAA;AAC/B,IAAA,IAAI,SAAS,UAAA,EAAY;AACvB,MAAA,OAAO,UAAA;AAAA,IACT;AACA,IAAA,IAAI,SAAS,WAAA,EAAa;AACxB,MAAA,MAAA,GAAS,WAAA;AAAA,IACX;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAGO,SAAS,MAAA,CAAU,OAAqB,MAAA,EAAmD;AAChG,EAAA,IAAI,MAAA,GAAwB,UAAA;AAC5B,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,IAAA,GAAO,OAAO,IAAI,CAAA;AACxB,IAAA,IAAI,SAAS,YAAA,EAAc;AACzB,MAAA,OAAO,YAAA;AAAA,IACT;AACA,IAAA,IAAI,SAAS,WAAA,EAAa;AACxB,MAAA,MAAA,GAAS,WAAA;AAAA,IACX;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAGO,SAAS,SAAS,SAAA,EAAmC;AAC1D,EAAA,OAAO,YAAY,YAAA,GAAe,UAAA;AACpC;AAUA,SAAS,WAAW,IAAA,EAA4B;AAC9C,EAAA,QAAQ,KAAK,IAAA;AAAM,IACjB,KAAK,SAAA;AAAA,IACL,KAAK,eAAA;AAAA,IACL,KAAK,eAAA;AAAA,IACL,KAAK,gBAAA;AACH,MAAA,OAAO,WAAA;AAAA,IACT,KAAK,OAAA;AAAA,IACL,KAAK,OAAA;AAAA,IACL,KAAK,UAAA;AACH,MAAA,OAAO,MAAA;AAAA,IACT,KAAK,QAAA;AACH,MAAA,OAAO,QAAA;AAAA,IACT;AACE,MAAA,OAAO,QAAA;AAAA;AAEb;AAGA,MAAM,kBAAA,uBAA8C,GAAA,CAAI,CAAC,QAAQ,WAAA,EAAa,SAAA,EAAW,OAAO,CAAC,CAAA;AAMjG,MAAM,kBAAA,uBAA8C,GAAA,CAAI;AAAA,EACtD,QAAA;AAAA,EACA,UAAA;AAAA,EACA,gBAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,aAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,aAAA;AAAA,EACA,MAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AAAA,EACA,UAAA;AAAA,EACA,eAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,MAAM,YAAA,GAAe,QAAA;AAErB,MAAM,eAAA,GAAkB,OAAA;AAExB,SAAS,iBAAiB,IAAA,EAAuB;AAC/C,EAAA,OAAO,mBAAmB,GAAA,CAAI,IAAI,CAAA,IAAK,eAAA,CAAgB,KAAK,IAAI,CAAA;AAClE;AAMA,SAAS,aAAa,MAAA,EAAqC;AACzD,EAAA,MAAM,aAAa,CAAC,GAAGA,4BAAa,MAAM,CAAA,CAAE,QAAQ,CAAA;AACpD,EAAA,MAAM,YAAY,CAAC,QAAA,KAAkC,CAAC,gBAAA,CAAiBC,qBAAA,CAAO,QAAQ,CAAC,CAAA;AACvF,EAAA,MAAM,YAAA,GAAe,UAAA,CAAW,IAAA,CAAK,CAAC,QAAA,KAAa,CAAC,QAAA,CAAS,UAAA,IAAc,SAAA,CAAU,QAAQ,CAAC,CAAA;AAC9F,EAAA,MAAM,MAAA,GACJ,UAAA,CAAW,MAAA,GAAS,CAAA,IACpBC,iCAAkB,MAAM,CAAA,CAAE,MAAA,KAAW,CAAA,IACrC,UAAA,CAAW,KAAA,CAAM,CAAC,QAAA,KAAa,SAAS,UAAU,CAAA;AACpD,EAAA,OAAO,gBAAiB,MAAA,IAAU,UAAA,CAAW,KAAA,CAAM,SAAS,IAAK,UAAA,GAAa,WAAA;AAChF;AAMA,SAAS,kBAAkB,MAAA,EAA+B;AACxD,EAAA,MAAM,aAAa,MAAA,CAAO,IAAA,KAAS,aAAa,kBAAA,CAAmB,GAAA,CAAI,OAAO,OAAO,CAAA;AACrF,EAAA,OAAO,aAAa,UAAA,GAAa,WAAA;AACnC;AAGA,SAAS,aAAa,MAAA,EAAqC;AACzD,EAAA,OAAOF,4BAAa,MAAM,CAAA,CAAE,GAAA,CAAI,YAAY,IAAI,WAAA,GAAc,UAAA;AAChE;AAMO,SAAS,qBAAA,CAAsB,QAAgB,MAAA,EAAsC;AAC1F,EAAA,MAAM,IAAA,GAAO,WAAW,MAAM,CAAA;AAC9B,EAAA,MAAM,EAAA,GAAK,WAAW,MAAM,CAAA;AAC5B,EAAA,IAAI,IAAA,KAAS,QAAA,IAAY,EAAA,KAAO,QAAA,EAAU;AACxC,IAAA,OAAO,WAAA;AAAA,EACT;AACA,EAAA,IAAI,SAAS,EAAA,EAAI;AACf,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,OAAO,QAAA,EAAU;AACnB,IAAA,OAAO,OAAO,IAAA,KAAS,QAAA,IAAY,OAAO,MAAA,GAAS,YAAA,CAAa,MAAM,CAAA,GAAI,UAAA;AAAA,EAC5E;AACA,EAAA,OAAO,SAAS,WAAA,GAAc,iBAAA,CAAkB,MAAM,CAAA,GAAI,aAAa,MAAsB,CAAA;AAC/F;AAGA,MAAM,gBAAA,GAAmB;AAAA,EACvB,aAAA,EAAe,QAAA;AAAA,EACf,aAAA,EAAe,QAAA;AAAA,EACf,cAAA,EAAgB;AAClB,CAAA;AAQO,SAAS,iBAAA,CAAkB,QAAgB,MAAA,EAA+B;AAC/E,EAAA,IAAI,MAAA,CAAO,IAAA,KAAS,SAAA,IAAa,MAAA,CAAO,SAAS,SAAA,EAAW;AAC1D,IAAA,OAAO,UAAA;AAAA,EACT;AACA,EAAA,MAAM,OAAA,GAAW,gBAAA,CAA6D,MAAA,CAAO,IAAI,CAAA;AACzF,EAAA,OAAO,QAAA,CAAS,OAAA,KAAY,MAAA,CAAO,OAAO,CAAA;AAC5C;;;;;;"}
@@ -0,0 +1,138 @@
1
+ import { propertiesOf, indexSignaturesOf, nameOf } from './type-resolution.mjs';
2
+
3
+ function everyOf(items, relate) {
4
+ let result = "assignable";
5
+ for (const [index, item] of items.entries()) {
6
+ const each = relate(item, index);
7
+ if (each === "rejected") {
8
+ return "rejected";
9
+ }
10
+ if (each === "undecided") {
11
+ result = "undecided";
12
+ }
13
+ }
14
+ return result;
15
+ }
16
+ function someOf(items, relate) {
17
+ let result = "rejected";
18
+ for (const item of items) {
19
+ const each = relate(item);
20
+ if (each === "assignable") {
21
+ return "assignable";
22
+ }
23
+ if (each === "undecided") {
24
+ result = "undecided";
25
+ }
26
+ }
27
+ return result;
28
+ }
29
+ function provenBy(condition) {
30
+ return condition ? "assignable" : "rejected";
31
+ }
32
+ function categoryOf(type) {
33
+ switch (type.kind) {
34
+ case "keyword":
35
+ case "stringLiteral":
36
+ case "numberLiteral":
37
+ case "booleanLiteral":
38
+ return "primitive";
39
+ case "array":
40
+ case "tuple":
41
+ case "readonly":
42
+ return "list";
43
+ case "object":
44
+ return "object";
45
+ default:
46
+ return "opaque";
47
+ }
48
+ }
49
+ const NO_OBJECT_KEYWORDS = /* @__PURE__ */ new Set(["null", "undefined", "unknown", "never"]);
50
+ const ARRAY_MEMBER_NAMES = /* @__PURE__ */ new Set([
51
+ "length",
52
+ "toString",
53
+ "toLocaleString",
54
+ "pop",
55
+ "push",
56
+ "concat",
57
+ "join",
58
+ "reverse",
59
+ "shift",
60
+ "slice",
61
+ "sort",
62
+ "splice",
63
+ "unshift",
64
+ "indexOf",
65
+ "lastIndexOf",
66
+ "every",
67
+ "some",
68
+ "forEach",
69
+ "map",
70
+ "filter",
71
+ "reduce",
72
+ "reduceRight",
73
+ "find",
74
+ "findIndex",
75
+ "fill",
76
+ "copyWithin",
77
+ "entries",
78
+ "keys",
79
+ "values",
80
+ "includes",
81
+ "flatMap",
82
+ "flat",
83
+ "at",
84
+ "findLast",
85
+ "findLastIndex",
86
+ "toReversed",
87
+ "toSorted",
88
+ "toSpliced",
89
+ "with"
90
+ ]);
91
+ const ARRAY_LENGTH = "length";
92
+ const ELEMENT_NAME_RE = /^\d+$/;
93
+ function isListMemberName(name) {
94
+ return ARRAY_MEMBER_NAMES.has(name) || ELEMENT_NAME_RE.test(name);
95
+ }
96
+ function listToObject(target) {
97
+ const properties = [...propertiesOf(target).values()];
98
+ const isForeign = (property) => !isListMemberName(nameOf(property));
99
+ const needsForeign = properties.some((property) => !property.isOptional && isForeign(property));
100
+ const isWeak = properties.length > 0 && indexSignaturesOf(target).length === 0 && properties.every((property) => property.isOptional);
101
+ return needsForeign || isWeak && properties.every(isForeign) ? "rejected" : "undecided";
102
+ }
103
+ function primitiveToObject(source) {
104
+ const isNoObject = source.kind === "keyword" && NO_OBJECT_KEYWORDS.has(source.keyword);
105
+ return isNoObject ? "rejected" : "undecided";
106
+ }
107
+ function objectToList(source) {
108
+ return propertiesOf(source).has(ARRAY_LENGTH) ? "undecided" : "rejected";
109
+ }
110
+ function crossCategoryRelation(source, target) {
111
+ const from = categoryOf(source);
112
+ const to = categoryOf(target);
113
+ if (from === "opaque" || to === "opaque") {
114
+ return "undecided";
115
+ }
116
+ if (from === to) {
117
+ return null;
118
+ }
119
+ if (to !== "object") {
120
+ return source.kind === "object" && to === "list" ? objectToList(source) : "rejected";
121
+ }
122
+ return from === "primitive" ? primitiveToObject(source) : listToObject(target);
123
+ }
124
+ const LITERAL_KEYWORDS = {
125
+ stringLiteral: "string",
126
+ numberLiteral: "number",
127
+ booleanLiteral: "boolean"
128
+ };
129
+ function primitiveRelation(source, target) {
130
+ if (target.kind !== "keyword" || source.kind === "keyword") {
131
+ return "rejected";
132
+ }
133
+ const keyword = LITERAL_KEYWORDS[source.kind];
134
+ return provenBy(keyword === target.keyword);
135
+ }
136
+
137
+ export { crossCategoryRelation, everyOf, primitiveRelation, provenBy, someOf };
138
+ //# sourceMappingURL=assignability.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assignability.mjs","sources":["../../../../src/application/transform/document/assignability.ts"],"sourcesContent":["import type { IrObjectType, IrPropertySignature, IrType } from \"../../../domain/ir/nodes.js\";\nimport { indexSignaturesOf, nameOf, propertiesOf } from \"./type-resolution.js\";\n\n/**\n * What the `--path-params-as-types` overlap check knows about one type where another is expected.\n * `assignable` and `rejected` are proofs of what TypeScript decides (`strict`, without\n * `exactOptionalPropertyTypes`); `undecided` is a pair the check does not model, such as a utility\n * type or raw text. Only a rejection changes the output, so an undecided pair keeps the original.\n */\nexport type Assignability = \"assignable\" | \"rejected\" | \"undecided\";\n\n/**\n * All of the relations: rejected when one is, assignable when each is. The relations are computed\n * lazily, so a rejection stops the rest.\n */\nexport function everyOf<T>(\n items: readonly T[],\n relate: (item: T, index: number) => Assignability,\n): Assignability {\n let result: Assignability = \"assignable\";\n for (const [index, item] of items.entries()) {\n const each = relate(item, index);\n if (each === \"rejected\") {\n return \"rejected\";\n }\n if (each === \"undecided\") {\n result = \"undecided\";\n }\n }\n return result;\n}\n\n/** One of the relations: assignable when one is, rejected when each is. */\nexport function someOf<T>(items: readonly T[], relate: (item: T) => Assignability): Assignability {\n let result: Assignability = \"rejected\";\n for (const item of items) {\n const each = relate(item);\n if (each === \"assignable\") {\n return \"assignable\";\n }\n if (each === \"undecided\") {\n result = \"undecided\";\n }\n }\n return result;\n}\n\n/** Assignable when the condition holds, rejected when it does not. */\nexport function provenBy(condition: boolean): Assignability {\n return condition ? \"assignable\" : \"rejected\";\n}\n\n/**\n * The kinds of resolved types the check tells apart. A type of one kind is never assignable to a\n * type of another, except that a primitive or a list may fit an object type (`string` fits\n * `{ length: number }`), which the check models only in part. `opaque` is any type it cannot\n * read.\n */\ntype TypeCategory = \"primitive\" | \"list\" | \"object\" | \"opaque\";\n\nfunction categoryOf(type: IrType): TypeCategory {\n switch (type.kind) {\n case \"keyword\":\n case \"stringLiteral\":\n case \"numberLiteral\":\n case \"booleanLiteral\":\n return \"primitive\";\n case \"array\":\n case \"tuple\":\n case \"readonly\":\n return \"list\";\n case \"object\":\n return \"object\";\n default:\n return \"opaque\";\n }\n}\n\n/** Keywords that are no object: `{}` rejects them under `strictNullChecks`. */\nconst NO_OBJECT_KEYWORDS: ReadonlySet<string> = new Set([\"null\", \"undefined\", \"unknown\", \"never\"]);\n\n/**\n * The members of `ReadonlyArray` and `Array` in the TypeScript libraries up to ESNext. An object\n * type that needs a property of another name is no list; a numeric name may be a tuple element.\n */\nconst ARRAY_MEMBER_NAMES: ReadonlySet<string> = new Set([\n \"length\",\n \"toString\",\n \"toLocaleString\",\n \"pop\",\n \"push\",\n \"concat\",\n \"join\",\n \"reverse\",\n \"shift\",\n \"slice\",\n \"sort\",\n \"splice\",\n \"unshift\",\n \"indexOf\",\n \"lastIndexOf\",\n \"every\",\n \"some\",\n \"forEach\",\n \"map\",\n \"filter\",\n \"reduce\",\n \"reduceRight\",\n \"find\",\n \"findIndex\",\n \"fill\",\n \"copyWithin\",\n \"entries\",\n \"keys\",\n \"values\",\n \"includes\",\n \"flatMap\",\n \"flat\",\n \"at\",\n \"findLast\",\n \"findLastIndex\",\n \"toReversed\",\n \"toSorted\",\n \"toSpliced\",\n \"with\",\n]);\n\nconst ARRAY_LENGTH = \"length\";\n/** A tuple element's name: `\"0\"`, `\"1\"`. */\nconst ELEMENT_NAME_RE = /^\\d+$/;\n\nfunction isListMemberName(name: string): boolean {\n return ARRAY_MEMBER_NAMES.has(name) || ELEMENT_NAME_RE.test(name);\n}\n\n/**\n * Whether a list fits an object type. It does not when the object needs a property no list has\n * (TS2741), or when the object is a weak type and no list has one of its properties (TS2559).\n */\nfunction listToObject(target: IrObjectType): Assignability {\n const properties = [...propertiesOf(target).values()];\n const isForeign = (property: IrPropertySignature) => !isListMemberName(nameOf(property));\n const needsForeign = properties.some((property) => !property.isOptional && isForeign(property));\n const isWeak =\n properties.length > 0 &&\n indexSignaturesOf(target).length === 0 &&\n properties.every((property) => property.isOptional);\n return needsForeign || (isWeak && properties.every(isForeign)) ? \"rejected\" : \"undecided\";\n}\n\n/**\n * Whether a primitive fits an object type: `null`, `undefined` and `unknown` never do; any other\n * may (`{}`, `{ length: number }`), which is not modelled.\n */\nfunction primitiveToObject(source: IrType): Assignability {\n const isNoObject = source.kind === \"keyword\" && NO_OBJECT_KEYWORDS.has(source.keyword);\n return isNoObject ? \"rejected\" : \"undecided\";\n}\n\n/** An object type fits an array only with all of its members; `length` is the first it needs. */\nfunction objectToList(source: IrObjectType): Assignability {\n return propertiesOf(source).has(ARRAY_LENGTH) ? \"undecided\" : \"rejected\";\n}\n\n/**\n * The relation of two types of different categories, or null when they are of the same one.\n * Primitive and list targets accept nothing of another category; see `TypeCategory`.\n */\nexport function crossCategoryRelation(source: IrType, target: IrType): Assignability | null {\n const from = categoryOf(source);\n const to = categoryOf(target);\n if (from === \"opaque\" || to === \"opaque\") {\n return \"undecided\";\n }\n if (from === to) {\n return null;\n }\n if (to !== \"object\") {\n return source.kind === \"object\" && to === \"list\" ? objectToList(source) : \"rejected\";\n }\n return from === \"primitive\" ? primitiveToObject(source) : listToObject(target as IrObjectType);\n}\n\n/** The keyword a literal type belongs to. */\nconst LITERAL_KEYWORDS = {\n stringLiteral: \"string\",\n numberLiteral: \"number\",\n booleanLiteral: \"boolean\",\n} as const;\n\n/**\n * The relation of two primitive types written differently (the same text is assignable). A\n * literal fits its keyword; any other pair is rejected: different keywords, different literals,\n * a keyword for one literal (a union of literals is compared in `type-assignability.ts`), and\n * anything for `never`.\n */\nexport function primitiveRelation(source: IrType, target: IrType): Assignability {\n if (target.kind !== \"keyword\" || source.kind === \"keyword\") {\n return \"rejected\";\n }\n const keyword = (LITERAL_KEYWORDS as Partial<Record<IrType[\"kind\"], string>>)[source.kind];\n return provenBy(keyword === target.keyword);\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,104 @@
1
+ 'use strict';
2
+
3
+ const constructors = require('../../../domain/ir/constructors.cjs');
4
+ const identifierText = require('../../../domain/ir/identifier-text.cjs');
5
+ const propertyName = require('../../../domain/ir/property-name.cjs');
6
+ const componentsObject = require('../../../domain/openapi/components-object.cjs');
7
+ const jsonPointer = require('../../../domain/openapi/json-pointer.cjs');
8
+ const outputFixes = require('../../../domain/output-fixes.cjs');
9
+ const documentEntries = require('../document-entries.cjs');
10
+ const schemaTransform = require('../schema/schema-transform.cjs');
11
+ const schemaComment = require('../schema-comment.cjs');
12
+ const header = require('./header.cjs');
13
+ const mediaType = require('./media-type.cjs');
14
+ const parameter = require('./parameter.cjs');
15
+ const pathItem = require('./path-item.cjs');
16
+ const requestBody = require('./request-body.cjs');
17
+ const response = require('./response.cjs');
18
+ const rootTypeAliases = require('./root-type-aliases.cjs');
19
+
20
+ const COMPONENT_TRANSFORMS = {
21
+ schemas: schemaTransform.transformSchema,
22
+ responses: response.responseType,
23
+ parameters: parameter.parameterType,
24
+ requestBodies: requestBody.requestBodyType,
25
+ headers: header.headerType,
26
+ pathItems: pathItem.pathItemType,
27
+ mediaTypes: mediaType.contentEntryType
28
+ };
29
+ function componentMember(kind, name, item, context) {
30
+ const location = { path: jsonPointer.createRef(["components", kind, name]), schema: item };
31
+ const type = COMPONENT_TRANSFORMS[kind](item, location, context);
32
+ const custom = context.callbacks.transform(item, location);
33
+ const property = constructors.irProperty(propertyName.toPropertyName(name), custom?.type ?? type, {
34
+ isOptional: custom?.isOptional ?? false,
35
+ isReadonly: context.options.immutable
36
+ });
37
+ return schemaComment.withSchemaComment(property, item, schemaComment.schemaCommentOptionsOf(context.options.fixes));
38
+ }
39
+ function rootTypeName(kind, name, aliases, context) {
40
+ const { options, casing } = context;
41
+ const prefix = casing.pascalCase(componentsObject.singularizeComponentKind(kind));
42
+ const isSchema = kind === "schemas";
43
+ const base = identifierText.withIdentifierParts(
44
+ options.rootTypesKeepCasing && isSchema ? name : casing.pascalCase(name)
45
+ );
46
+ const exportedName = (alias2) => {
47
+ const unprefixed = alias2.replace(prefix, "");
48
+ const isUnprefixed = options.rootTypesNoSchemaPrefix && isSchema;
49
+ const isTypeName = identifierText.hasIdentifierStart(unprefixed) && !identifierText.isReservedTypeName(unprefixed);
50
+ return isUnprefixed && isTypeName ? unprefixed : alias2;
51
+ };
52
+ let alias = `${prefix}${base}`;
53
+ for (let counter = 2; aliases[alias] !== void 0; counter++) {
54
+ alias = `${prefix}${base}_${counter}`;
55
+ }
56
+ return exportedName(alias);
57
+ }
58
+ function addRootAlias(request, alias) {
59
+ const { aliases, displaced } = request;
60
+ const previous = aliases[alias.name];
61
+ if (previous !== void 0 && displaced !== null) {
62
+ displaced.push(previous);
63
+ }
64
+ aliases[alias.name] = alias;
65
+ }
66
+ function hasRootType(kind, item, context) {
67
+ const { options } = context;
68
+ return options.rootTypes && !(options.enum && kind === "schemas" && componentsObject.isEnumSchema(item));
69
+ }
70
+ function kindMember(kind, request, context) {
71
+ const { components, isKept, aliases } = request;
72
+ const startedAt = context.diagnostics.now();
73
+ const items = [];
74
+ for (const [name, item] of documentEntries.documentEntries(components[kind] ?? {}, context.options, isKept)) {
75
+ items.push(componentMember(kind, name, item, context));
76
+ if (hasRootType(kind, item, context)) {
77
+ addRootAlias(request, rootTypeAliases.rootTypeAlias(rootTypeName(kind, name, aliases, context), kind, name));
78
+ }
79
+ }
80
+ const type = items.length > 0 ? constructors.irObject(items) : constructors.irKeyword("never");
81
+ context.diagnostics.debug(
82
+ `Transformed components \u2192 ${kind}`,
83
+ context.diagnostics.now() - startedAt
84
+ );
85
+ return constructors.irProperty(propertyName.toPropertyName(kind), type);
86
+ }
87
+ function componentsType(components, context, kept = /* @__PURE__ */ new Set()) {
88
+ const aliases = {};
89
+ const displaced = context.options.fixes.has(outputFixes.OutputFix.ROOT_TYPE_NUMBERING) ? [] : null;
90
+ const isKept = (item) => kept.has(item);
91
+ const request = { components, isKept, aliases, displaced };
92
+ const declaredKinds = componentsObject.DECLARED_COMPONENT_KINDS.filter((kind) => components[kind] !== void 0);
93
+ const members = [...componentsObject.COMPONENT_KINDS, ...declaredKinds].map(
94
+ (kind) => kindMember(kind, request, context)
95
+ );
96
+ const rootTypes = Object.values(aliases);
97
+ return {
98
+ type: constructors.irObject(members),
99
+ rootTypes: [...rootTypes, ...displaced ?? []]
100
+ };
101
+ }
102
+
103
+ exports.componentsType = componentsType;
104
+ //# sourceMappingURL=components.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"components.cjs","sources":["../../../../src/application/transform/document/components.ts"],"sourcesContent":["import { irKeyword, irObject, irProperty } from \"../../../domain/ir/constructors.js\";\nimport {\n hasIdentifierStart,\n isReservedTypeName,\n withIdentifierParts,\n} from \"../../../domain/ir/identifier-text.js\";\nimport type {\n IrPropertySignature,\n IrType,\n IrTypeAliasDeclaration,\n} from \"../../../domain/ir/nodes.js\";\nimport { toPropertyName } from \"../../../domain/ir/property-name.js\";\nimport {\n COMPONENT_KINDS,\n type ComponentKind,\n type ComponentsObject,\n DECLARED_COMPONENT_KINDS,\n isEnumSchema,\n singularizeComponentKind,\n} from \"../../../domain/openapi/components-object.js\";\nimport { createRef } from \"../../../domain/openapi/json-pointer.js\";\nimport { OutputFix } from \"../../../domain/output-fixes.js\";\nimport { type DeprecatedEntryFilter, documentEntries } from \"../document-entries.js\";\nimport type { SchemaLocation } from \"../schema/schema-context.js\";\nimport { transformSchema } from \"../schema/schema-transform.js\";\nimport { schemaCommentOptionsOf, withSchemaComment } from \"../schema-comment.js\";\nimport type { TransformContext } from \"../transform-context.js\";\nimport { headerType } from \"./header.js\";\nimport { contentEntryType } from \"./media-type.js\";\nimport { parameterType } from \"./parameter.js\";\nimport { pathItemType } from \"./path-item.js\";\nimport { requestBodyType } from \"./request-body.js\";\nimport { responseType } from \"./response.js\";\nimport { rootTypeAlias } from \"./root-type-aliases.js\";\n\ntype ComponentTransform = (\n item: never,\n location: SchemaLocation,\n context: TransformContext,\n) => IrType;\n\nconst COMPONENT_TRANSFORMS: Readonly<Record<ComponentKind, ComponentTransform>> = {\n schemas: transformSchema,\n responses: responseType,\n parameters: parameterType,\n requestBodies: requestBodyType,\n headers: headerType,\n pathItems: pathItemType,\n mediaTypes: contentEntryType,\n};\n\n/** The `components` type and the `--root-types` aliases. */\nexport interface ComponentsResult {\n readonly type: IrType;\n readonly rootTypes: readonly IrTypeAliasDeclaration[];\n}\n\n/** One component; the `transform` callback may replace its type, as for nested schemas. */\nfunction componentMember(\n kind: ComponentKind,\n name: string,\n item: unknown,\n context: TransformContext,\n): IrPropertySignature {\n const location = { path: createRef([\"components\", kind, name]), schema: item };\n const type = COMPONENT_TRANSFORMS[kind](item as never, location, context);\n const custom = context.callbacks.transform(item, location);\n const property = irProperty(toPropertyName(name), custom?.type ?? type, {\n isOptional: custom?.isOptional ?? false,\n isReadonly: context.options.immutable,\n });\n return withSchemaComment(property, item, schemaCommentOptionsOf(context.options.fixes));\n}\n\n/**\n * The root alias name: `SchemaPet`, `ResponseNotFound`, … A taken name gets `_2`, `_3`, … The\n * original checks for conflicts before it removes the schema prefix, and so does this; for a clash\n * of exported names see `addRootAlias`.\n *\n * The original could build a name that is no identifier, so the generated file did not parse\n * (research/legacy-bugs.md, item 16): a kept casing keeps spaces and symbols, which become `_`;\n * and a name without the prefix can start with a digit, so it keeps the prefix (`Schema1`). A\n * kept casing without the prefix can also give a reserved name (`void`, `class`), which keeps the\n * prefix too (`Schemavoid`).\n */\nfunction rootTypeName(\n kind: ComponentKind,\n name: string,\n aliases: Readonly<Record<string, IrTypeAliasDeclaration>>,\n context: TransformContext,\n): string {\n const { options, casing } = context;\n const prefix = casing.pascalCase(singularizeComponentKind(kind));\n const isSchema = kind === \"schemas\";\n const base = withIdentifierParts(\n options.rootTypesKeepCasing && isSchema ? name : casing.pascalCase(name),\n );\n const exportedName = (alias: string): string => {\n const unprefixed = alias.replace(prefix, \"\");\n const isUnprefixed = options.rootTypesNoSchemaPrefix && isSchema;\n const isTypeName = hasIdentifierStart(unprefixed) && !isReservedTypeName(unprefixed);\n return isUnprefixed && isTypeName ? unprefixed : alias;\n };\n let alias = `${prefix}${base}`;\n for (let counter = 2; aliases[alias] !== undefined; counter++) {\n alias = `${prefix}${base}_${counter}`;\n }\n return exportedName(alias);\n}\n\n/**\n * Add a root alias. When its exported name is taken (two schemas of one PascalCase name without\n * the prefix), the later schema takes the name, as in the original. Without the\n * `root-type-numbering` fix the earlier one then has no alias: that output is valid, so a number\n * for it would change it (backlog 30). With the fix the earlier alias is kept aside and follows\n * the others under the same name; `renameTakenAliases` numbers it once every name is known.\n */\nfunction addRootAlias(request: ComponentsRequest, alias: IrTypeAliasDeclaration): void {\n const { aliases, displaced } = request;\n const previous = aliases[alias.name];\n if (previous !== undefined && displaced !== null) {\n displaced.push(previous);\n }\n aliases[alias.name] = alias;\n}\n\n/** `--root-types` skips enum schemas under `--enum`: the enum itself is exported. */\nfunction hasRootType(kind: ComponentKind, item: unknown, context: TransformContext): boolean {\n const { options } = context;\n return options.rootTypes && !(options.enum && kind === \"schemas\" && isEnumSchema(item));\n}\n\n/** The components of one run, and the deprecated ones that kept output still references. */\ninterface ComponentsRequest {\n readonly components: ComponentsObject;\n readonly isKept: DeprecatedEntryFilter;\n readonly aliases: Record<string, IrTypeAliasDeclaration>;\n /** With the `root-type-numbering` fix: the aliases a later schema took the name of, in order. */\n readonly displaced: IrTypeAliasDeclaration[] | null;\n}\n\nfunction kindMember(\n kind: ComponentKind,\n request: ComponentsRequest,\n context: TransformContext,\n): IrPropertySignature {\n const { components, isKept, aliases } = request;\n const startedAt = context.diagnostics.now();\n const items: IrPropertySignature[] = [];\n for (const [name, item] of documentEntries(components[kind] ?? {}, context.options, isKept)) {\n items.push(componentMember(kind, name, item, context));\n if (hasRootType(kind, item, context)) {\n addRootAlias(request, rootTypeAlias(rootTypeName(kind, name, aliases, context), kind, name));\n }\n }\n const type = items.length > 0 ? irObject(items) : irKeyword(\"never\");\n context.diagnostics.debug(\n `Transformed components → ${kind}`,\n context.diagnostics.now() - startedAt,\n );\n return irProperty(toPropertyName(kind), type);\n}\n\n/**\n * The `components` interface body (OpenAPI 3.1 §4.8.7), one member per component kind. With\n * `--exclude-deprecated`, `kept` holds the deprecated components that kept output references\n * (`keptDeprecatedComponents`); they stay, so no reference names a missing key.\n */\nexport function componentsType(\n components: ComponentsObject,\n context: TransformContext,\n kept: ReadonlySet<object> = new Set(),\n): ComponentsResult {\n // A plain object, as in the original: its key order (integer-like names first) is the\n // output order.\n const aliases: Record<string, IrTypeAliasDeclaration> = {};\n const displaced = context.options.fixes.has(OutputFix.ROOT_TYPE_NUMBERING) ? [] : null;\n const isKept = (item: unknown) => kept.has(item as object);\n const request = { components, isKept, aliases, displaced };\n const declaredKinds = DECLARED_COMPONENT_KINDS.filter((kind) => components[kind] !== undefined);\n const members = [...COMPONENT_KINDS, ...declaredKinds].map((kind) =>\n kindMember(kind, request, context),\n );\n const rootTypes = Object.values(aliases);\n return {\n type: irObject(members),\n rootTypes: [...rootTypes, ...(displaced ?? [])],\n };\n}\n"],"names":["transformSchema","responseType","parameterType","requestBodyType","headerType","pathItemType","contentEntryType","createRef","irProperty","toPropertyName","withSchemaComment","schemaCommentOptionsOf","singularizeComponentKind","withIdentifierParts","alias","hasIdentifierStart","isReservedTypeName","isEnumSchema","documentEntries","rootTypeAlias","irObject","irKeyword","OutputFix","DECLARED_COMPONENT_KINDS","COMPONENT_KINDS"],"mappings":";;;;;;;;;;;;;;;;;;;AAyCA,MAAM,oBAAA,GAA4E;AAAA,EAChF,OAAA,EAASA,+BAAA;AAAA,EACT,SAAA,EAAWC,qBAAA;AAAA,EACX,UAAA,EAAYC,uBAAA;AAAA,EACZ,aAAA,EAAeC,2BAAA;AAAA,EACf,OAAA,EAASC,iBAAA;AAAA,EACT,SAAA,EAAWC,qBAAA;AAAA,EACX,UAAA,EAAYC;AACd,CAAA;AASA,SAAS,eAAA,CACP,IAAA,EACA,IAAA,EACA,IAAA,EACA,OAAA,EACqB;AACrB,EAAA,MAAM,QAAA,GAAW,EAAE,IAAA,EAAMC,qBAAA,CAAU,CAAC,YAAA,EAAc,IAAA,EAAM,IAAI,CAAC,CAAA,EAAG,MAAA,EAAQ,IAAA,EAAK;AAC7E,EAAA,MAAM,OAAO,oBAAA,CAAqB,IAAI,CAAA,CAAE,IAAA,EAAe,UAAU,OAAO,CAAA;AACxE,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,SAAA,CAAU,SAAA,CAAU,MAAM,QAAQ,CAAA;AACzD,EAAA,MAAM,WAAWC,uBAAA,CAAWC,2BAAA,CAAe,IAAI,CAAA,EAAG,MAAA,EAAQ,QAAQ,IAAA,EAAM;AAAA,IACtE,UAAA,EAAY,QAAQ,UAAA,IAAc,KAAA;AAAA,IAClC,UAAA,EAAY,QAAQ,OAAA,CAAQ;AAAA,GAC7B,CAAA;AACD,EAAA,OAAOC,gCAAkB,QAAA,EAAU,IAAA,EAAMC,qCAAuB,OAAA,CAAQ,OAAA,CAAQ,KAAK,CAAC,CAAA;AACxF;AAaA,SAAS,YAAA,CACP,IAAA,EACA,IAAA,EACA,OAAA,EACA,OAAA,EACQ;AACR,EAAA,MAAM,EAAE,OAAA,EAAS,MAAA,EAAO,GAAI,OAAA;AAC5B,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,UAAA,CAAWC,yCAAA,CAAyB,IAAI,CAAC,CAAA;AAC/D,EAAA,MAAM,WAAW,IAAA,KAAS,SAAA;AAC1B,EAAA,MAAM,IAAA,GAAOC,kCAAA;AAAA,IACX,QAAQ,mBAAA,IAAuB,QAAA,GAAW,IAAA,GAAO,MAAA,CAAO,WAAW,IAAI;AAAA,GACzE;AACA,EAAA,MAAM,YAAA,GAAe,CAACC,MAAAA,KAA0B;AAC9C,IAAA,MAAM,UAAA,GAAaA,MAAAA,CAAM,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAA;AAC3C,IAAA,MAAM,YAAA,GAAe,QAAQ,uBAAA,IAA2B,QAAA;AACxD,IAAA,MAAM,aAAaC,iCAAA,CAAmB,UAAU,CAAA,IAAK,CAACC,kCAAmB,UAAU,CAAA;AACnF,IAAA,OAAO,YAAA,IAAgB,aAAa,UAAA,GAAaF,MAAAA;AAAA,EACnD,CAAA;AACA,EAAA,IAAI,KAAA,GAAQ,CAAA,EAAG,MAAM,CAAA,EAAG,IAAI,CAAA,CAAA;AAC5B,EAAA,KAAA,IAAS,UAAU,CAAA,EAAG,OAAA,CAAQ,KAAK,CAAA,KAAM,QAAW,OAAA,EAAA,EAAW;AAC7D,IAAA,KAAA,GAAQ,CAAA,EAAG,MAAM,CAAA,EAAG,IAAI,IAAI,OAAO,CAAA,CAAA;AAAA,EACrC;AACA,EAAA,OAAO,aAAa,KAAK,CAAA;AAC3B;AASA,SAAS,YAAA,CAAa,SAA4B,KAAA,EAAqC;AACrF,EAAA,MAAM,EAAE,OAAA,EAAS,SAAA,EAAU,GAAI,OAAA;AAC/B,EAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA;AACnC,EAAA,IAAI,QAAA,KAAa,MAAA,IAAa,SAAA,KAAc,IAAA,EAAM;AAChD,IAAA,SAAA,CAAU,KAAK,QAAQ,CAAA;AAAA,EACzB;AACA,EAAA,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA,GAAI,KAAA;AACxB;AAGA,SAAS,WAAA,CAAY,IAAA,EAAqB,IAAA,EAAe,OAAA,EAAoC;AAC3F,EAAA,MAAM,EAAE,SAAQ,GAAI,OAAA;AACpB,EAAA,OAAO,OAAA,CAAQ,aAAa,EAAE,OAAA,CAAQ,QAAQ,IAAA,KAAS,SAAA,IAAaG,8BAAa,IAAI,CAAA,CAAA;AACvF;AAWA,SAAS,UAAA,CACP,IAAA,EACA,OAAA,EACA,OAAA,EACqB;AACrB,EAAA,MAAM,EAAE,UAAA,EAAY,MAAA,EAAQ,OAAA,EAAQ,GAAI,OAAA;AACxC,EAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,WAAA,CAAY,GAAA,EAAI;AAC1C,EAAA,MAAM,QAA+B,EAAC;AACtC,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,CAAA,IAAKC,+BAAA,CAAgB,UAAA,CAAW,IAAI,CAAA,IAAK,EAAC,EAAG,OAAA,CAAQ,OAAA,EAAS,MAAM,CAAA,EAAG;AAC3F,IAAA,KAAA,CAAM,KAAK,eAAA,CAAgB,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,OAAO,CAAC,CAAA;AACrD,IAAA,IAAI,WAAA,CAAY,IAAA,EAAM,IAAA,EAAM,OAAO,CAAA,EAAG;AACpC,MAAA,YAAA,CAAa,OAAA,EAASC,6BAAA,CAAc,YAAA,CAAa,IAAA,EAAM,IAAA,EAAM,SAAS,OAAO,CAAA,EAAG,IAAA,EAAM,IAAI,CAAC,CAAA;AAAA,IAC7F;AAAA,EACF;AACA,EAAA,MAAM,IAAA,GAAO,MAAM,MAAA,GAAS,CAAA,GAAIC,sBAAS,KAAK,CAAA,GAAIC,uBAAU,OAAO,CAAA;AACnE,EAAA,OAAA,CAAQ,WAAA,CAAY,KAAA;AAAA,IAClB,iCAA4B,IAAI,CAAA,CAAA;AAAA,IAChC,OAAA,CAAQ,WAAA,CAAY,GAAA,EAAI,GAAI;AAAA,GAC9B;AACA,EAAA,OAAOb,uBAAA,CAAWC,2BAAA,CAAe,IAAI,CAAA,EAAG,IAAI,CAAA;AAC9C;AAOO,SAAS,eACd,UAAA,EACA,OAAA,EACA,IAAA,mBAA4B,IAAI,KAAI,EAClB;AAGlB,EAAA,MAAM,UAAkD,EAAC;AACzD,EAAA,MAAM,SAAA,GAAY,QAAQ,OAAA,CAAQ,KAAA,CAAM,IAAIa,qBAAA,CAAU,mBAAmB,CAAA,GAAI,EAAC,GAAI,IAAA;AAClF,EAAA,MAAM,MAAA,GAAS,CAAC,IAAA,KAAkB,IAAA,CAAK,IAAI,IAAc,CAAA;AACzD,EAAA,MAAM,OAAA,GAAU,EAAE,UAAA,EAAY,MAAA,EAAQ,SAAS,SAAA,EAAU;AACzD,EAAA,MAAM,aAAA,GAAgBC,0CAAyB,MAAA,CAAO,CAAC,SAAS,UAAA,CAAW,IAAI,MAAM,MAAS,CAAA;AAC9F,EAAA,MAAM,UAAU,CAAC,GAAGC,gCAAA,EAAiB,GAAG,aAAa,CAAA,CAAE,GAAA;AAAA,IAAI,CAAC,IAAA,KAC1D,UAAA,CAAW,IAAA,EAAM,SAAS,OAAO;AAAA,GACnC;AACA,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,MAAA,CAAO,OAAO,CAAA;AACvC,EAAA,OAAO;AAAA,IACL,IAAA,EAAMJ,sBAAS,OAAO,CAAA;AAAA,IACtB,WAAW,CAAC,GAAG,WAAW,GAAI,SAAA,IAAa,EAAG;AAAA,GAChD;AACF;;"}