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,124 @@
1
+ 'use strict';
2
+
3
+ const constructors = require('../../../domain/ir/constructors.cjs');
4
+ const refType = require('../ref-type.cjs');
5
+ const generatedShape = require('./generated-shape.cjs');
6
+ const pointerWalk = require('./pointer-walk.cjs');
7
+
8
+ const DEFS_KEYWORD = "$defs";
9
+ function present(walk) {
10
+ return walk.presence === "present" ? walk.type : constructors.irReference("NonNullable", [walk.type]);
11
+ }
12
+ function indexEntries(walk, key, keyword, refs) {
13
+ const owner = generatedShape.followRefs(walk.node, refs);
14
+ const child = generatedShape.isJsonObject(owner) ? owner[keyword] : void 0;
15
+ return {
16
+ ...walk,
17
+ type: constructors.irIndexedAccess(present(walk), constructors.irKeyword(key)),
18
+ node: child,
19
+ presence: generatedShape.schemaPresence(child, refs)
20
+ };
21
+ }
22
+ function nameStep(walk, name, isLast, input) {
23
+ const owner = generatedShape.followRefs(walk.node, input.refs);
24
+ const properties = generatedShape.isJsonObject(owner) && generatedShape.isJsonObject(owner.properties) ? owner.properties : {};
25
+ const type = walk.presence === "present" ? refType.indexKeyword(walk.type, name, isLast) : refType.indexBy(present(walk), name);
26
+ return {
27
+ ...walk,
28
+ type,
29
+ node: properties[name],
30
+ isName: false,
31
+ presence: generatedShape.propertyPresence(walk.node, name, input.options, input.refs)
32
+ };
33
+ }
34
+ function defsStep(walk, owner, isLast) {
35
+ const defs = generatedShape.isJsonObject(owner) && generatedShape.isJsonObject(owner[DEFS_KEYWORD]) ? owner[DEFS_KEYWORD] : {};
36
+ return {
37
+ ...walk,
38
+ type: refType.indexKeyword(present(walk), DEFS_KEYWORD, isLast),
39
+ node: { properties: defs, required: Object.keys(defs) },
40
+ isName: true,
41
+ presence: "present"
42
+ };
43
+ }
44
+ const SHAPED_KEYWORDS = /* @__PURE__ */ new Set([
45
+ "properties",
46
+ "items",
47
+ "additionalProperties"
48
+ ]);
49
+ function hasKeywordMember(owner, segment) {
50
+ if (!SHAPED_KEYWORDS.has(segment) || !generatedShape.isJsonObject(owner)) {
51
+ return true;
52
+ }
53
+ return segment === "items" ? generatedShape.isArrayShape(owner) : generatedShape.isObjectShape(owner);
54
+ }
55
+ function keywordStep(walk, segment, isLast, input) {
56
+ const owner = generatedShape.followRefs(walk.node, input.refs);
57
+ if (!hasKeywordMember(owner, segment)) {
58
+ return null;
59
+ }
60
+ switch (segment) {
61
+ case "properties":
62
+ return { ...walk, isName: true };
63
+ case "items":
64
+ return indexEntries(walk, "number", "items", input.refs);
65
+ case "additionalProperties":
66
+ return indexEntries(walk, "string", "additionalProperties", input.refs);
67
+ case DEFS_KEYWORD:
68
+ return defsStep(walk, owner, isLast);
69
+ default:
70
+ return null;
71
+ }
72
+ }
73
+ function containerStep(walk, index, input) {
74
+ const segment = input.pointer.segments[index];
75
+ const owner = generatedShape.followRefs(walk.node, input.refs);
76
+ const isOptional = segment === "requestBody" && pointerWalk.isOptionalRequestBody(owner, input.refs) || pointerWalk.isOptionalHeader(input.pointer, index, owner);
77
+ return {
78
+ ...walk,
79
+ type: refType.indexBy(present(walk), segment),
80
+ node: generatedShape.isJsonObject(owner) ? owner[segment] : void 0,
81
+ presence: isOptional ? "absent" : "present"
82
+ };
83
+ }
84
+ function step(walk, index, input) {
85
+ const { segments } = input.pointer;
86
+ const segment = segments[index];
87
+ const isLast = index === segments.length - 1;
88
+ if (walk.isSchema) {
89
+ return walk.isName ? nameStep(walk, segment, isLast, input) : keywordStep(walk, segment, isLast, input);
90
+ }
91
+ if (segment === "schema" && pointerWalk.isTypedAsSchema(input.pointer, index)) {
92
+ const owner = generatedShape.followRefs(walk.node, input.refs);
93
+ const schema = generatedShape.isJsonObject(owner) ? owner.schema : void 0;
94
+ const presence = walk.presence === "absent" ? "absent" : generatedShape.schemaPresence(schema, input.refs);
95
+ return { ...walk, node: schema, isSchema: true, presence };
96
+ }
97
+ return pointerWalk.isParameterList(input.pointer, index) ? null : containerStep(walk, index, input);
98
+ }
99
+ function typedWalk(input) {
100
+ const { pointer } = input;
101
+ const node = pointerWalk.leadingNode(pointer, input.refs);
102
+ const isSchema = pointerWalk.startsInSchema(pointer);
103
+ let walk = {
104
+ type: refType.indexBy(
105
+ refType.rootType(pointer.rootSegment, false),
106
+ ...pointer.segments.slice(0, pointerWalk.leadingSegmentsOf(pointer))
107
+ ),
108
+ node,
109
+ isSchema,
110
+ isName: false,
111
+ presence: isSchema ? generatedShape.schemaPresence(node, input.refs) : "present"
112
+ };
113
+ for (let index = pointerWalk.leadingSegmentsOf(pointer); index < pointer.segments.length; index++) {
114
+ const next = step(walk, index, input);
115
+ if (next === null) {
116
+ return { kind: "untyped", index };
117
+ }
118
+ walk = next;
119
+ }
120
+ return { kind: "typed", walk };
121
+ }
122
+
123
+ exports.typedWalk = typedWalk;
124
+ //# sourceMappingURL=typed-walk.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typed-walk.cjs","sources":["../../../../src/application/transform/ref-pointer/typed-walk.ts"],"sourcesContent":["import { irIndexedAccess, irKeyword, irReference } from \"../../../domain/ir/constructors.js\";\nimport type { IrKeyword, IrType } from \"../../../domain/ir/nodes.js\";\nimport { indexBy, indexKeyword, rootType } from \"../ref-type.js\";\nimport type { RefResolver, SchemaOptions } from \"../schema/schema-context.js\";\nimport {\n followRefs,\n isArrayShape,\n isJsonObject,\n isObjectShape,\n type Presence,\n propertyPresence,\n schemaPresence,\n} from \"./generated-shape.js\";\nimport {\n isOptionalHeader,\n isOptionalRequestBody,\n isParameterList,\n isTypedAsSchema,\n leadingNode,\n leadingSegmentsOf,\n type RefPointer,\n startsInSchema,\n} from \"./pointer-walk.js\";\n\n/**\n * The type of a `$ref` pointer as the generated types have it: the `schema` of a media type,\n * header or component parameter is its type, `items` is indexed by `number`,\n * `additionalProperties` by `string`, and a value that may be `undefined` or `null` is wrapped in\n * `NonNullable` before it is indexed. The walk stops at a segment with no type of its own\n * (`allOf/0`, `definitions/A`, operation `parameters/0`): the caller types the target itself.\n */\n\nconst DEFS_KEYWORD = \"$defs\";\n\nexport interface TypedWalk {\n readonly type: IrType;\n /** The document node the type stands for (not followed through a `$ref`). */\n readonly node: unknown;\n readonly isSchema: boolean;\n /** The segment is a property or `$defs` name, not a keyword. */\n readonly isName: boolean;\n readonly presence: Presence;\n}\n\nexport interface TypedWalkInput {\n readonly pointer: RefPointer;\n readonly options: SchemaOptions;\n readonly refs: RefResolver;\n}\n\n/** The walk result: a type, or the index of the first segment that has no type. */\nexport type TypedWalkResult =\n | { readonly kind: \"typed\"; readonly walk: TypedWalk }\n | { readonly kind: \"untyped\"; readonly index: number };\n\nfunction present(walk: TypedWalk): IrType {\n return walk.presence === \"present\" ? walk.type : irReference(\"NonNullable\", [walk.type]);\n}\n\nfunction indexEntries(walk: TypedWalk, key: IrKeyword, keyword: string, refs: RefResolver) {\n const owner = followRefs(walk.node, refs);\n const child = isJsonObject(owner) ? owner[keyword] : undefined;\n return {\n ...walk,\n type: irIndexedAccess(present(walk), irKeyword(key)),\n node: child,\n presence: schemaPresence(child, refs),\n };\n}\n\nfunction nameStep(walk: TypedWalk, name: string, isLast: boolean, input: TypedWalkInput) {\n const owner = followRefs(walk.node, input.refs);\n const properties = isJsonObject(owner) && isJsonObject(owner.properties) ? owner.properties : {};\n const type =\n walk.presence === \"present\"\n ? indexKeyword(walk.type, name, isLast)\n : indexBy(present(walk), name);\n return {\n ...walk,\n type,\n node: properties[name],\n isName: false,\n presence: propertyPresence(walk.node, name, input.options, input.refs),\n };\n}\n\n/** `$defs` is optional (`NonNullable` when more follows); its members are present. */\nfunction defsStep(walk: TypedWalk, owner: unknown, isLast: boolean): TypedWalk {\n const defs = isJsonObject(owner) && isJsonObject(owner[DEFS_KEYWORD]) ? owner[DEFS_KEYWORD] : {};\n return {\n ...walk,\n type: indexKeyword(present(walk), DEFS_KEYWORD, isLast),\n node: { properties: defs, required: Object.keys(defs) },\n isName: true,\n presence: \"present\",\n };\n}\n\nconst SHAPED_KEYWORDS: ReadonlySet<string> = new Set([\n \"properties\",\n \"items\",\n \"additionalProperties\",\n]);\n\n/**\n * Whether the keyword gives the owner's generated type a member: `items` only an array,\n * `properties` and `additionalProperties` only an object (`type: string` ignores them). A node\n * that is not in the document is indexed as the keyword says.\n */\nfunction hasKeywordMember(owner: unknown, segment: string): boolean {\n if (!SHAPED_KEYWORDS.has(segment) || !isJsonObject(owner)) {\n return true;\n }\n return segment === \"items\" ? isArrayShape(owner) : isObjectShape(owner);\n}\n\nfunction keywordStep(walk: TypedWalk, segment: string, isLast: boolean, input: TypedWalkInput) {\n const owner = followRefs(walk.node, input.refs);\n if (!hasKeywordMember(owner, segment)) {\n return null;\n }\n switch (segment) {\n case \"properties\":\n return { ...walk, isName: true };\n case \"items\":\n return indexEntries(walk, \"number\", \"items\", input.refs);\n case \"additionalProperties\":\n return indexEntries(walk, \"string\", \"additionalProperties\", input.refs);\n case DEFS_KEYWORD:\n return defsStep(walk, owner, isLast);\n default:\n return null;\n }\n}\n\nfunction containerStep(walk: TypedWalk, index: number, input: TypedWalkInput): TypedWalk {\n const segment = input.pointer.segments[index] as string;\n const owner = followRefs(walk.node, input.refs);\n const isOptional =\n (segment === \"requestBody\" && isOptionalRequestBody(owner, input.refs)) ||\n isOptionalHeader(input.pointer, index, owner);\n return {\n ...walk,\n type: indexBy(present(walk), segment),\n node: isJsonObject(owner) ? owner[segment] : undefined,\n presence: isOptional ? \"absent\" : \"present\",\n };\n}\n\nfunction step(walk: TypedWalk, index: number, input: TypedWalkInput): TypedWalk | null {\n const { segments } = input.pointer;\n const segment = segments[index] as string;\n const isLast = index === segments.length - 1;\n if (walk.isSchema) {\n return walk.isName\n ? nameStep(walk, segment, isLast, input)\n : keywordStep(walk, segment, isLast, input);\n }\n if (segment === \"schema\" && isTypedAsSchema(input.pointer, index)) {\n const owner = followRefs(walk.node, input.refs);\n const schema = isJsonObject(owner) ? owner.schema : undefined;\n // The container's type is its schema's type: an optional header stays optional.\n const presence = walk.presence === \"absent\" ? \"absent\" : schemaPresence(schema, input.refs);\n return { ...walk, node: schema, isSchema: true, presence };\n }\n return isParameterList(input.pointer, index) ? null : containerStep(walk, index, input);\n}\n\n/** Walk the whole pointer; see the module comment. */\nexport function typedWalk(input: TypedWalkInput): TypedWalkResult {\n const { pointer } = input;\n const node = leadingNode(pointer, input.refs);\n const isSchema = startsInSchema(pointer);\n let walk: TypedWalk = {\n type: indexBy(\n rootType(pointer.rootSegment, false),\n ...pointer.segments.slice(0, leadingSegmentsOf(pointer)),\n ),\n node,\n isSchema,\n isName: false,\n presence: isSchema ? schemaPresence(node, input.refs) : \"present\",\n };\n for (let index = leadingSegmentsOf(pointer); index < pointer.segments.length; index++) {\n const next = step(walk, index, input);\n if (next === null) {\n return { kind: \"untyped\", index };\n }\n walk = next;\n }\n return { kind: \"typed\", walk };\n}\n"],"names":["irReference","followRefs","isJsonObject","irIndexedAccess","irKeyword","schemaPresence","indexKeyword","indexBy","propertyPresence","isArrayShape","isObjectShape","isOptionalRequestBody","isOptionalHeader","isTypedAsSchema","isParameterList","leadingNode","startsInSchema","rootType","leadingSegmentsOf"],"mappings":"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"}
@@ -0,0 +1,122 @@
1
+ import { irReference, irIndexedAccess, irKeyword } from '../../../domain/ir/constructors.mjs';
2
+ import { indexBy, rootType, indexKeyword } from '../ref-type.mjs';
3
+ import { schemaPresence, followRefs, isJsonObject, propertyPresence, isArrayShape, isObjectShape } from './generated-shape.mjs';
4
+ import { leadingNode, startsInSchema, leadingSegmentsOf, isTypedAsSchema, isParameterList, isOptionalRequestBody, isOptionalHeader } from './pointer-walk.mjs';
5
+
6
+ const DEFS_KEYWORD = "$defs";
7
+ function present(walk) {
8
+ return walk.presence === "present" ? walk.type : irReference("NonNullable", [walk.type]);
9
+ }
10
+ function indexEntries(walk, key, keyword, refs) {
11
+ const owner = followRefs(walk.node, refs);
12
+ const child = isJsonObject(owner) ? owner[keyword] : void 0;
13
+ return {
14
+ ...walk,
15
+ type: irIndexedAccess(present(walk), irKeyword(key)),
16
+ node: child,
17
+ presence: schemaPresence(child, refs)
18
+ };
19
+ }
20
+ function nameStep(walk, name, isLast, input) {
21
+ const owner = followRefs(walk.node, input.refs);
22
+ const properties = isJsonObject(owner) && isJsonObject(owner.properties) ? owner.properties : {};
23
+ const type = walk.presence === "present" ? indexKeyword(walk.type, name, isLast) : indexBy(present(walk), name);
24
+ return {
25
+ ...walk,
26
+ type,
27
+ node: properties[name],
28
+ isName: false,
29
+ presence: propertyPresence(walk.node, name, input.options, input.refs)
30
+ };
31
+ }
32
+ function defsStep(walk, owner, isLast) {
33
+ const defs = isJsonObject(owner) && isJsonObject(owner[DEFS_KEYWORD]) ? owner[DEFS_KEYWORD] : {};
34
+ return {
35
+ ...walk,
36
+ type: indexKeyword(present(walk), DEFS_KEYWORD, isLast),
37
+ node: { properties: defs, required: Object.keys(defs) },
38
+ isName: true,
39
+ presence: "present"
40
+ };
41
+ }
42
+ const SHAPED_KEYWORDS = /* @__PURE__ */ new Set([
43
+ "properties",
44
+ "items",
45
+ "additionalProperties"
46
+ ]);
47
+ function hasKeywordMember(owner, segment) {
48
+ if (!SHAPED_KEYWORDS.has(segment) || !isJsonObject(owner)) {
49
+ return true;
50
+ }
51
+ return segment === "items" ? isArrayShape(owner) : isObjectShape(owner);
52
+ }
53
+ function keywordStep(walk, segment, isLast, input) {
54
+ const owner = followRefs(walk.node, input.refs);
55
+ if (!hasKeywordMember(owner, segment)) {
56
+ return null;
57
+ }
58
+ switch (segment) {
59
+ case "properties":
60
+ return { ...walk, isName: true };
61
+ case "items":
62
+ return indexEntries(walk, "number", "items", input.refs);
63
+ case "additionalProperties":
64
+ return indexEntries(walk, "string", "additionalProperties", input.refs);
65
+ case DEFS_KEYWORD:
66
+ return defsStep(walk, owner, isLast);
67
+ default:
68
+ return null;
69
+ }
70
+ }
71
+ function containerStep(walk, index, input) {
72
+ const segment = input.pointer.segments[index];
73
+ const owner = followRefs(walk.node, input.refs);
74
+ const isOptional = segment === "requestBody" && isOptionalRequestBody(owner, input.refs) || isOptionalHeader(input.pointer, index, owner);
75
+ return {
76
+ ...walk,
77
+ type: indexBy(present(walk), segment),
78
+ node: isJsonObject(owner) ? owner[segment] : void 0,
79
+ presence: isOptional ? "absent" : "present"
80
+ };
81
+ }
82
+ function step(walk, index, input) {
83
+ const { segments } = input.pointer;
84
+ const segment = segments[index];
85
+ const isLast = index === segments.length - 1;
86
+ if (walk.isSchema) {
87
+ return walk.isName ? nameStep(walk, segment, isLast, input) : keywordStep(walk, segment, isLast, input);
88
+ }
89
+ if (segment === "schema" && isTypedAsSchema(input.pointer, index)) {
90
+ const owner = followRefs(walk.node, input.refs);
91
+ const schema = isJsonObject(owner) ? owner.schema : void 0;
92
+ const presence = walk.presence === "absent" ? "absent" : schemaPresence(schema, input.refs);
93
+ return { ...walk, node: schema, isSchema: true, presence };
94
+ }
95
+ return isParameterList(input.pointer, index) ? null : containerStep(walk, index, input);
96
+ }
97
+ function typedWalk(input) {
98
+ const { pointer } = input;
99
+ const node = leadingNode(pointer, input.refs);
100
+ const isSchema = startsInSchema(pointer);
101
+ let walk = {
102
+ type: indexBy(
103
+ rootType(pointer.rootSegment, false),
104
+ ...pointer.segments.slice(0, leadingSegmentsOf(pointer))
105
+ ),
106
+ node,
107
+ isSchema,
108
+ isName: false,
109
+ presence: isSchema ? schemaPresence(node, input.refs) : "present"
110
+ };
111
+ for (let index = leadingSegmentsOf(pointer); index < pointer.segments.length; index++) {
112
+ const next = step(walk, index, input);
113
+ if (next === null) {
114
+ return { kind: "untyped", index };
115
+ }
116
+ walk = next;
117
+ }
118
+ return { kind: "typed", walk };
119
+ }
120
+
121
+ export { typedWalk };
122
+ //# sourceMappingURL=typed-walk.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typed-walk.mjs","sources":["../../../../src/application/transform/ref-pointer/typed-walk.ts"],"sourcesContent":["import { irIndexedAccess, irKeyword, irReference } from \"../../../domain/ir/constructors.js\";\nimport type { IrKeyword, IrType } from \"../../../domain/ir/nodes.js\";\nimport { indexBy, indexKeyword, rootType } from \"../ref-type.js\";\nimport type { RefResolver, SchemaOptions } from \"../schema/schema-context.js\";\nimport {\n followRefs,\n isArrayShape,\n isJsonObject,\n isObjectShape,\n type Presence,\n propertyPresence,\n schemaPresence,\n} from \"./generated-shape.js\";\nimport {\n isOptionalHeader,\n isOptionalRequestBody,\n isParameterList,\n isTypedAsSchema,\n leadingNode,\n leadingSegmentsOf,\n type RefPointer,\n startsInSchema,\n} from \"./pointer-walk.js\";\n\n/**\n * The type of a `$ref` pointer as the generated types have it: the `schema` of a media type,\n * header or component parameter is its type, `items` is indexed by `number`,\n * `additionalProperties` by `string`, and a value that may be `undefined` or `null` is wrapped in\n * `NonNullable` before it is indexed. The walk stops at a segment with no type of its own\n * (`allOf/0`, `definitions/A`, operation `parameters/0`): the caller types the target itself.\n */\n\nconst DEFS_KEYWORD = \"$defs\";\n\nexport interface TypedWalk {\n readonly type: IrType;\n /** The document node the type stands for (not followed through a `$ref`). */\n readonly node: unknown;\n readonly isSchema: boolean;\n /** The segment is a property or `$defs` name, not a keyword. */\n readonly isName: boolean;\n readonly presence: Presence;\n}\n\nexport interface TypedWalkInput {\n readonly pointer: RefPointer;\n readonly options: SchemaOptions;\n readonly refs: RefResolver;\n}\n\n/** The walk result: a type, or the index of the first segment that has no type. */\nexport type TypedWalkResult =\n | { readonly kind: \"typed\"; readonly walk: TypedWalk }\n | { readonly kind: \"untyped\"; readonly index: number };\n\nfunction present(walk: TypedWalk): IrType {\n return walk.presence === \"present\" ? walk.type : irReference(\"NonNullable\", [walk.type]);\n}\n\nfunction indexEntries(walk: TypedWalk, key: IrKeyword, keyword: string, refs: RefResolver) {\n const owner = followRefs(walk.node, refs);\n const child = isJsonObject(owner) ? owner[keyword] : undefined;\n return {\n ...walk,\n type: irIndexedAccess(present(walk), irKeyword(key)),\n node: child,\n presence: schemaPresence(child, refs),\n };\n}\n\nfunction nameStep(walk: TypedWalk, name: string, isLast: boolean, input: TypedWalkInput) {\n const owner = followRefs(walk.node, input.refs);\n const properties = isJsonObject(owner) && isJsonObject(owner.properties) ? owner.properties : {};\n const type =\n walk.presence === \"present\"\n ? indexKeyword(walk.type, name, isLast)\n : indexBy(present(walk), name);\n return {\n ...walk,\n type,\n node: properties[name],\n isName: false,\n presence: propertyPresence(walk.node, name, input.options, input.refs),\n };\n}\n\n/** `$defs` is optional (`NonNullable` when more follows); its members are present. */\nfunction defsStep(walk: TypedWalk, owner: unknown, isLast: boolean): TypedWalk {\n const defs = isJsonObject(owner) && isJsonObject(owner[DEFS_KEYWORD]) ? owner[DEFS_KEYWORD] : {};\n return {\n ...walk,\n type: indexKeyword(present(walk), DEFS_KEYWORD, isLast),\n node: { properties: defs, required: Object.keys(defs) },\n isName: true,\n presence: \"present\",\n };\n}\n\nconst SHAPED_KEYWORDS: ReadonlySet<string> = new Set([\n \"properties\",\n \"items\",\n \"additionalProperties\",\n]);\n\n/**\n * Whether the keyword gives the owner's generated type a member: `items` only an array,\n * `properties` and `additionalProperties` only an object (`type: string` ignores them). A node\n * that is not in the document is indexed as the keyword says.\n */\nfunction hasKeywordMember(owner: unknown, segment: string): boolean {\n if (!SHAPED_KEYWORDS.has(segment) || !isJsonObject(owner)) {\n return true;\n }\n return segment === \"items\" ? isArrayShape(owner) : isObjectShape(owner);\n}\n\nfunction keywordStep(walk: TypedWalk, segment: string, isLast: boolean, input: TypedWalkInput) {\n const owner = followRefs(walk.node, input.refs);\n if (!hasKeywordMember(owner, segment)) {\n return null;\n }\n switch (segment) {\n case \"properties\":\n return { ...walk, isName: true };\n case \"items\":\n return indexEntries(walk, \"number\", \"items\", input.refs);\n case \"additionalProperties\":\n return indexEntries(walk, \"string\", \"additionalProperties\", input.refs);\n case DEFS_KEYWORD:\n return defsStep(walk, owner, isLast);\n default:\n return null;\n }\n}\n\nfunction containerStep(walk: TypedWalk, index: number, input: TypedWalkInput): TypedWalk {\n const segment = input.pointer.segments[index] as string;\n const owner = followRefs(walk.node, input.refs);\n const isOptional =\n (segment === \"requestBody\" && isOptionalRequestBody(owner, input.refs)) ||\n isOptionalHeader(input.pointer, index, owner);\n return {\n ...walk,\n type: indexBy(present(walk), segment),\n node: isJsonObject(owner) ? owner[segment] : undefined,\n presence: isOptional ? \"absent\" : \"present\",\n };\n}\n\nfunction step(walk: TypedWalk, index: number, input: TypedWalkInput): TypedWalk | null {\n const { segments } = input.pointer;\n const segment = segments[index] as string;\n const isLast = index === segments.length - 1;\n if (walk.isSchema) {\n return walk.isName\n ? nameStep(walk, segment, isLast, input)\n : keywordStep(walk, segment, isLast, input);\n }\n if (segment === \"schema\" && isTypedAsSchema(input.pointer, index)) {\n const owner = followRefs(walk.node, input.refs);\n const schema = isJsonObject(owner) ? owner.schema : undefined;\n // The container's type is its schema's type: an optional header stays optional.\n const presence = walk.presence === \"absent\" ? \"absent\" : schemaPresence(schema, input.refs);\n return { ...walk, node: schema, isSchema: true, presence };\n }\n return isParameterList(input.pointer, index) ? null : containerStep(walk, index, input);\n}\n\n/** Walk the whole pointer; see the module comment. */\nexport function typedWalk(input: TypedWalkInput): TypedWalkResult {\n const { pointer } = input;\n const node = leadingNode(pointer, input.refs);\n const isSchema = startsInSchema(pointer);\n let walk: TypedWalk = {\n type: indexBy(\n rootType(pointer.rootSegment, false),\n ...pointer.segments.slice(0, leadingSegmentsOf(pointer)),\n ),\n node,\n isSchema,\n isName: false,\n presence: isSchema ? schemaPresence(node, input.refs) : \"present\",\n };\n for (let index = leadingSegmentsOf(pointer); index < pointer.segments.length; index++) {\n const next = step(walk, index, input);\n if (next === null) {\n return { kind: \"untyped\", index };\n }\n walk = next;\n }\n return { kind: \"typed\", walk };\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ 'use strict';
2
+
3
+ const errors = require('../../domain/errors.cjs');
4
+ const constructors = require('../../domain/ir/constructors.cjs');
5
+ const propertyName = require('../../domain/ir/property-name.cjs');
6
+ const jsonPointer = require('../../domain/openapi/json-pointer.cjs');
7
+
8
+ class InvalidRefError extends errors.OpenAPITypesafeError {
9
+ constructor(ref) {
10
+ super({
11
+ code: errors.ERROR_CODES.SCHEMA_REF_INVALID,
12
+ message: `Error parsing $ref: ${ref}. Is this a valid $ref?`,
13
+ details: { ref }
14
+ });
15
+ this.name = "InvalidRefError";
16
+ }
17
+ }
18
+ function indexBy(type, ...segments) {
19
+ return segments.reduce(
20
+ (object, segment) => constructors.irIndexedAccess(object, constructors.irString(segment, "escaped")),
21
+ type
22
+ );
23
+ }
24
+ function extractVariantsWith(type, propertyName$1) {
25
+ const probe = constructors.irProperty(propertyName.toPropertyName(propertyName$1), constructors.irKeyword("unknown"));
26
+ return constructors.irReference("Extract", [type, constructors.irObject([probe])]);
27
+ }
28
+ const DEFS_KEYWORD = "$defs";
29
+ function indexKeyword(type, segment, isLast) {
30
+ const indexed = indexBy(type, segment);
31
+ return segment === DEFS_KEYWORD && !isLast ? constructors.irReference("NonNullable", [indexed]) : indexed;
32
+ }
33
+ function rootType(rootSegment, isDeep) {
34
+ return constructors.irReference(isDeep ? `FlattenedDeepRequired<${rootSegment}>` : rootSegment);
35
+ }
36
+ function refType(ref, options = {}) {
37
+ const [rootSegment, ...pointer] = jsonPointer.parseRefPointer(ref);
38
+ if (rootSegment === void 0) {
39
+ throw new InvalidRefError(ref);
40
+ }
41
+ const extracted = new Set(options.extractProperties ?? []);
42
+ const lastIndex = pointer.length - 1;
43
+ const leading = indexBy(rootType(rootSegment, options.isDeep ?? false), ...pointer.slice(0, 2));
44
+ return pointer.slice(2).reduce((type, segment, offset) => {
45
+ if (segment === "properties") {
46
+ return type;
47
+ }
48
+ if (options.parameter && offset + 2 === lastIndex) {
49
+ return indexBy(type, options.parameter.in, options.parameter.name);
50
+ }
51
+ const isLast = offset + 2 === lastIndex;
52
+ return extracted.has(segment) ? indexBy(extractVariantsWith(type, segment), segment) : indexKeyword(type, segment, isLast);
53
+ }, leading);
54
+ }
55
+
56
+ exports.InvalidRefError = InvalidRefError;
57
+ exports.extractVariantsWith = extractVariantsWith;
58
+ exports.indexBy = indexBy;
59
+ exports.indexKeyword = indexKeyword;
60
+ exports.refType = refType;
61
+ exports.rootType = rootType;
62
+ //# sourceMappingURL=ref-type.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ref-type.cjs","sources":["../../../src/application/transform/ref-type.ts"],"sourcesContent":["import { ERROR_CODES, OpenAPITypesafeError } from \"../../domain/errors.js\";\nimport {\n irIndexedAccess,\n irKeyword,\n irObject,\n irProperty,\n irReference,\n irString,\n} from \"../../domain/ir/constructors.js\";\nimport type { IrType } from \"../../domain/ir/nodes.js\";\nimport { toPropertyName } from \"../../domain/ir/property-name.js\";\nimport { parseRefPointer } from \"../../domain/openapi/json-pointer.js\";\n\n/** Where a referenced parameter lives in the generated `parameters` type. */\nexport interface RefParameterTarget {\n readonly in: string;\n readonly name: string;\n}\n\nexport interface RefTypeOptions {\n /** Wrap the root in `FlattenedDeepRequired<…>`. */\n readonly isDeep?: boolean;\n /** Segments to narrow with `Extract<T, { segment: unknown }>` before indexing. */\n readonly extractProperties?: readonly string[];\n /** Set when the `$ref` resolves to a parameter object: its last segment indexes `in`, `name`. */\n readonly parameter?: RefParameterTarget | null;\n}\n\nexport class InvalidRefError extends OpenAPITypesafeError {\n constructor(ref: string) {\n super({\n code: ERROR_CODES.SCHEMA_REF_INVALID,\n message: `Error parsing $ref: ${ref}. Is this a valid $ref?`,\n details: { ref },\n });\n this.name = \"InvalidRefError\";\n }\n}\n\n/** Segments that index into the root type, always as escaped string literal types. */\nexport function indexBy(type: IrType, ...segments: readonly string[]): IrType {\n return segments.reduce<IrType>(\n (object, segment) => irIndexedAccess(object, irString(segment, \"escaped\")),\n type,\n );\n}\n\n/**\n * `Extract<T, { name: unknown }>`. The original wrote the name as an identifier even when it is\n * not one (`{ content-type: unknown }`), which is a syntax error; it is now quoted like any other\n * property name, and an identifier stays as it was.\n */\nexport function extractVariantsWith(type: IrType, propertyName: string): IrType {\n const probe = irProperty(toPropertyName(propertyName), irKeyword(\"unknown\"));\n return irReference(\"Extract\", [type, irObject([probe])]);\n}\n\nconst DEFS_KEYWORD = \"$defs\";\n\n/**\n * Index by `segment`. A `$defs` member is optional (it is a keyword, not data), so when more\n * segments follow it is wrapped in `NonNullable<…>` first; otherwise the next index fails on\n * `undefined` (upstream #2664).\n */\nexport function indexKeyword(type: IrType, segment: string, isLast: boolean): IrType {\n const indexed = indexBy(type, segment);\n return segment === DEFS_KEYWORD && !isLast ? irReference(\"NonNullable\", [indexed]) : indexed;\n}\n\nexport function rootType(rootSegment: string, isDeep: boolean): IrType {\n return irReference(isDeep ? `FlattenedDeepRequired<${rootSegment}>` : rootSegment);\n}\n\n/**\n * The indexed-access type of a `$ref` into the generated types (the original `oapiRef`), for\n * example `components[\"schemas\"][\"Foo\"]`. The first three segments index directly. After them,\n * `properties` segments are skipped (objects are flattened, upstream issue 1742), a parameter's\n * last segment becomes `[in][name]`, and listed segments are narrowed with `Extract` first.\n *\n * Throws InvalidRefError when the `$ref` has no pointer.\n */\nexport function refType(ref: string, options: RefTypeOptions = {}): IrType {\n const [rootSegment, ...pointer] = parseRefPointer(ref);\n if (rootSegment === undefined) {\n throw new InvalidRefError(ref);\n }\n const extracted = new Set(options.extractProperties ?? []);\n const lastIndex = pointer.length - 1;\n const leading = indexBy(rootType(rootSegment, options.isDeep ?? false), ...pointer.slice(0, 2));\n return pointer.slice(2).reduce<IrType>((type, segment, offset) => {\n if (segment === \"properties\") {\n return type;\n }\n if (options.parameter && offset + 2 === lastIndex) {\n return indexBy(type, options.parameter.in, options.parameter.name);\n }\n const isLast = offset + 2 === lastIndex;\n return extracted.has(segment)\n ? indexBy(extractVariantsWith(type, segment), segment)\n : indexKeyword(type, segment, isLast);\n }, leading);\n}\n"],"names":["OpenAPITypesafeError","ERROR_CODES","irIndexedAccess","irString","propertyName","irProperty","toPropertyName","irKeyword","irReference","irObject","parseRefPointer"],"mappings":";;;;;;;AA4BO,MAAM,wBAAwBA,2BAAA,CAAqB;AAAA,EACxD,YAAY,GAAA,EAAa;AACvB,IAAA,KAAA,CAAM;AAAA,MACJ,MAAMC,kBAAA,CAAY,kBAAA;AAAA,MAClB,OAAA,EAAS,uBAAuB,GAAG,CAAA,uBAAA,CAAA;AAAA,MACnC,OAAA,EAAS,EAAE,GAAA;AAAI,KAChB,CAAA;AACD,IAAA,IAAA,CAAK,IAAA,GAAO,iBAAA;AAAA,EACd;AACF;AAGO,SAAS,OAAA,CAAQ,SAAiB,QAAA,EAAqC;AAC5E,EAAA,OAAO,QAAA,CAAS,MAAA;AAAA,IACd,CAAC,QAAQ,OAAA,KAAYC,4BAAA,CAAgB,QAAQC,qBAAA,CAAS,OAAA,EAAS,SAAS,CAAC,CAAA;AAAA,IACzE;AAAA,GACF;AACF;AAOO,SAAS,mBAAA,CAAoB,MAAcC,cAAA,EAA8B;AAC9E,EAAA,MAAM,QAAQC,uBAAA,CAAWC,2BAAA,CAAeF,cAAY,CAAA,EAAGG,sBAAA,CAAU,SAAS,CAAC,CAAA;AAC3E,EAAA,OAAOC,wBAAA,CAAY,WAAW,CAAC,IAAA,EAAMC,sBAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AACzD;AAEA,MAAM,YAAA,GAAe,OAAA;AAOd,SAAS,YAAA,CAAa,IAAA,EAAc,OAAA,EAAiB,MAAA,EAAyB;AACnF,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,IAAA,EAAM,OAAO,CAAA;AACrC,EAAA,OAAO,OAAA,KAAY,gBAAgB,CAAC,MAAA,GAASD,yBAAY,aAAA,EAAe,CAAC,OAAO,CAAC,CAAA,GAAI,OAAA;AACvF;AAEO,SAAS,QAAA,CAAS,aAAqB,MAAA,EAAyB;AACrE,EAAA,OAAOA,wBAAA,CAAY,MAAA,GAAS,CAAA,sBAAA,EAAyB,WAAW,MAAM,WAAW,CAAA;AACnF;AAUO,SAAS,OAAA,CAAQ,GAAA,EAAa,OAAA,GAA0B,EAAC,EAAW;AACzE,EAAA,MAAM,CAAC,WAAA,EAAa,GAAG,OAAO,CAAA,GAAIE,4BAAgB,GAAG,CAAA;AACrD,EAAA,IAAI,gBAAgB,MAAA,EAAW;AAC7B,IAAA,MAAM,IAAI,gBAAgB,GAAG,CAAA;AAAA,EAC/B;AACA,EAAA,MAAM,YAAY,IAAI,GAAA,CAAI,OAAA,CAAQ,iBAAA,IAAqB,EAAE,CAAA;AACzD,EAAA,MAAM,SAAA,GAAY,QAAQ,MAAA,GAAS,CAAA;AACnC,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,QAAA,CAAS,WAAA,EAAa,OAAA,CAAQ,MAAA,IAAU,KAAK,CAAA,EAAG,GAAG,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA;AAC9F,EAAA,OAAO,OAAA,CAAQ,MAAM,CAAC,CAAA,CAAE,OAAe,CAAC,IAAA,EAAM,SAAS,MAAA,KAAW;AAChE,IAAA,IAAI,YAAY,YAAA,EAAc;AAC5B,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAI,OAAA,CAAQ,SAAA,IAAa,MAAA,GAAS,CAAA,KAAM,SAAA,EAAW;AACjD,MAAA,OAAO,QAAQ,IAAA,EAAM,OAAA,CAAQ,UAAU,EAAA,EAAI,OAAA,CAAQ,UAAU,IAAI,CAAA;AAAA,IACnE;AACA,IAAA,MAAM,MAAA,GAAS,SAAS,CAAA,KAAM,SAAA;AAC9B,IAAA,OAAO,SAAA,CAAU,GAAA,CAAI,OAAO,CAAA,GACxB,QAAQ,mBAAA,CAAoB,IAAA,EAAM,OAAO,CAAA,EAAG,OAAO,CAAA,GACnD,YAAA,CAAa,IAAA,EAAM,SAAS,MAAM,CAAA;AAAA,EACxC,GAAG,OAAO,CAAA;AACZ;;;;;;;"}
@@ -0,0 +1,55 @@
1
+ import { OpenAPITypesafeError, ERROR_CODES } from '../../domain/errors.mjs';
2
+ import { irIndexedAccess, irReference, irProperty, irKeyword, irObject, irString } from '../../domain/ir/constructors.mjs';
3
+ import { toPropertyName } from '../../domain/ir/property-name.mjs';
4
+ import { parseRefPointer } from '../../domain/openapi/json-pointer.mjs';
5
+
6
+ class InvalidRefError extends OpenAPITypesafeError {
7
+ constructor(ref) {
8
+ super({
9
+ code: ERROR_CODES.SCHEMA_REF_INVALID,
10
+ message: `Error parsing $ref: ${ref}. Is this a valid $ref?`,
11
+ details: { ref }
12
+ });
13
+ this.name = "InvalidRefError";
14
+ }
15
+ }
16
+ function indexBy(type, ...segments) {
17
+ return segments.reduce(
18
+ (object, segment) => irIndexedAccess(object, irString(segment, "escaped")),
19
+ type
20
+ );
21
+ }
22
+ function extractVariantsWith(type, propertyName) {
23
+ const probe = irProperty(toPropertyName(propertyName), irKeyword("unknown"));
24
+ return irReference("Extract", [type, irObject([probe])]);
25
+ }
26
+ const DEFS_KEYWORD = "$defs";
27
+ function indexKeyword(type, segment, isLast) {
28
+ const indexed = indexBy(type, segment);
29
+ return segment === DEFS_KEYWORD && !isLast ? irReference("NonNullable", [indexed]) : indexed;
30
+ }
31
+ function rootType(rootSegment, isDeep) {
32
+ return irReference(isDeep ? `FlattenedDeepRequired<${rootSegment}>` : rootSegment);
33
+ }
34
+ function refType(ref, options = {}) {
35
+ const [rootSegment, ...pointer] = parseRefPointer(ref);
36
+ if (rootSegment === void 0) {
37
+ throw new InvalidRefError(ref);
38
+ }
39
+ const extracted = new Set(options.extractProperties ?? []);
40
+ const lastIndex = pointer.length - 1;
41
+ const leading = indexBy(rootType(rootSegment, options.isDeep ?? false), ...pointer.slice(0, 2));
42
+ return pointer.slice(2).reduce((type, segment, offset) => {
43
+ if (segment === "properties") {
44
+ return type;
45
+ }
46
+ if (options.parameter && offset + 2 === lastIndex) {
47
+ return indexBy(type, options.parameter.in, options.parameter.name);
48
+ }
49
+ const isLast = offset + 2 === lastIndex;
50
+ return extracted.has(segment) ? indexBy(extractVariantsWith(type, segment), segment) : indexKeyword(type, segment, isLast);
51
+ }, leading);
52
+ }
53
+
54
+ export { InvalidRefError, extractVariantsWith, indexBy, indexKeyword, refType, rootType };
55
+ //# sourceMappingURL=ref-type.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ref-type.mjs","sources":["../../../src/application/transform/ref-type.ts"],"sourcesContent":["import { ERROR_CODES, OpenAPITypesafeError } from \"../../domain/errors.js\";\nimport {\n irIndexedAccess,\n irKeyword,\n irObject,\n irProperty,\n irReference,\n irString,\n} from \"../../domain/ir/constructors.js\";\nimport type { IrType } from \"../../domain/ir/nodes.js\";\nimport { toPropertyName } from \"../../domain/ir/property-name.js\";\nimport { parseRefPointer } from \"../../domain/openapi/json-pointer.js\";\n\n/** Where a referenced parameter lives in the generated `parameters` type. */\nexport interface RefParameterTarget {\n readonly in: string;\n readonly name: string;\n}\n\nexport interface RefTypeOptions {\n /** Wrap the root in `FlattenedDeepRequired<…>`. */\n readonly isDeep?: boolean;\n /** Segments to narrow with `Extract<T, { segment: unknown }>` before indexing. */\n readonly extractProperties?: readonly string[];\n /** Set when the `$ref` resolves to a parameter object: its last segment indexes `in`, `name`. */\n readonly parameter?: RefParameterTarget | null;\n}\n\nexport class InvalidRefError extends OpenAPITypesafeError {\n constructor(ref: string) {\n super({\n code: ERROR_CODES.SCHEMA_REF_INVALID,\n message: `Error parsing $ref: ${ref}. Is this a valid $ref?`,\n details: { ref },\n });\n this.name = \"InvalidRefError\";\n }\n}\n\n/** Segments that index into the root type, always as escaped string literal types. */\nexport function indexBy(type: IrType, ...segments: readonly string[]): IrType {\n return segments.reduce<IrType>(\n (object, segment) => irIndexedAccess(object, irString(segment, \"escaped\")),\n type,\n );\n}\n\n/**\n * `Extract<T, { name: unknown }>`. The original wrote the name as an identifier even when it is\n * not one (`{ content-type: unknown }`), which is a syntax error; it is now quoted like any other\n * property name, and an identifier stays as it was.\n */\nexport function extractVariantsWith(type: IrType, propertyName: string): IrType {\n const probe = irProperty(toPropertyName(propertyName), irKeyword(\"unknown\"));\n return irReference(\"Extract\", [type, irObject([probe])]);\n}\n\nconst DEFS_KEYWORD = \"$defs\";\n\n/**\n * Index by `segment`. A `$defs` member is optional (it is a keyword, not data), so when more\n * segments follow it is wrapped in `NonNullable<…>` first; otherwise the next index fails on\n * `undefined` (upstream #2664).\n */\nexport function indexKeyword(type: IrType, segment: string, isLast: boolean): IrType {\n const indexed = indexBy(type, segment);\n return segment === DEFS_KEYWORD && !isLast ? irReference(\"NonNullable\", [indexed]) : indexed;\n}\n\nexport function rootType(rootSegment: string, isDeep: boolean): IrType {\n return irReference(isDeep ? `FlattenedDeepRequired<${rootSegment}>` : rootSegment);\n}\n\n/**\n * The indexed-access type of a `$ref` into the generated types (the original `oapiRef`), for\n * example `components[\"schemas\"][\"Foo\"]`. The first three segments index directly. After them,\n * `properties` segments are skipped (objects are flattened, upstream issue 1742), a parameter's\n * last segment becomes `[in][name]`, and listed segments are narrowed with `Extract` first.\n *\n * Throws InvalidRefError when the `$ref` has no pointer.\n */\nexport function refType(ref: string, options: RefTypeOptions = {}): IrType {\n const [rootSegment, ...pointer] = parseRefPointer(ref);\n if (rootSegment === undefined) {\n throw new InvalidRefError(ref);\n }\n const extracted = new Set(options.extractProperties ?? []);\n const lastIndex = pointer.length - 1;\n const leading = indexBy(rootType(rootSegment, options.isDeep ?? false), ...pointer.slice(0, 2));\n return pointer.slice(2).reduce<IrType>((type, segment, offset) => {\n if (segment === \"properties\") {\n return type;\n }\n if (options.parameter && offset + 2 === lastIndex) {\n return indexBy(type, options.parameter.in, options.parameter.name);\n }\n const isLast = offset + 2 === lastIndex;\n return extracted.has(segment)\n ? indexBy(extractVariantsWith(type, segment), segment)\n : indexKeyword(type, segment, isLast);\n }, leading);\n}\n"],"names":[],"mappings":";;;;;AA4BO,MAAM,wBAAwB,oBAAA,CAAqB;AAAA,EACxD,YAAY,GAAA,EAAa;AACvB,IAAA,KAAA,CAAM;AAAA,MACJ,MAAM,WAAA,CAAY,kBAAA;AAAA,MAClB,OAAA,EAAS,uBAAuB,GAAG,CAAA,uBAAA,CAAA;AAAA,MACnC,OAAA,EAAS,EAAE,GAAA;AAAI,KAChB,CAAA;AACD,IAAA,IAAA,CAAK,IAAA,GAAO,iBAAA;AAAA,EACd;AACF;AAGO,SAAS,OAAA,CAAQ,SAAiB,QAAA,EAAqC;AAC5E,EAAA,OAAO,QAAA,CAAS,MAAA;AAAA,IACd,CAAC,QAAQ,OAAA,KAAY,eAAA,CAAgB,QAAQ,QAAA,CAAS,OAAA,EAAS,SAAS,CAAC,CAAA;AAAA,IACzE;AAAA,GACF;AACF;AAOO,SAAS,mBAAA,CAAoB,MAAc,YAAA,EAA8B;AAC9E,EAAA,MAAM,QAAQ,UAAA,CAAW,cAAA,CAAe,YAAY,CAAA,EAAG,SAAA,CAAU,SAAS,CAAC,CAAA;AAC3E,EAAA,OAAO,WAAA,CAAY,WAAW,CAAC,IAAA,EAAM,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AACzD;AAEA,MAAM,YAAA,GAAe,OAAA;AAOd,SAAS,YAAA,CAAa,IAAA,EAAc,OAAA,EAAiB,MAAA,EAAyB;AACnF,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,IAAA,EAAM,OAAO,CAAA;AACrC,EAAA,OAAO,OAAA,KAAY,gBAAgB,CAAC,MAAA,GAAS,YAAY,aAAA,EAAe,CAAC,OAAO,CAAC,CAAA,GAAI,OAAA;AACvF;AAEO,SAAS,QAAA,CAAS,aAAqB,MAAA,EAAyB;AACrE,EAAA,OAAO,WAAA,CAAY,MAAA,GAAS,CAAA,sBAAA,EAAyB,WAAW,MAAM,WAAW,CAAA;AACnF;AAUO,SAAS,OAAA,CAAQ,GAAA,EAAa,OAAA,GAA0B,EAAC,EAAW;AACzE,EAAA,MAAM,CAAC,WAAA,EAAa,GAAG,OAAO,CAAA,GAAI,gBAAgB,GAAG,CAAA;AACrD,EAAA,IAAI,gBAAgB,MAAA,EAAW;AAC7B,IAAA,MAAM,IAAI,gBAAgB,GAAG,CAAA;AAAA,EAC/B;AACA,EAAA,MAAM,YAAY,IAAI,GAAA,CAAI,OAAA,CAAQ,iBAAA,IAAqB,EAAE,CAAA;AACzD,EAAA,MAAM,SAAA,GAAY,QAAQ,MAAA,GAAS,CAAA;AACnC,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,QAAA,CAAS,WAAA,EAAa,OAAA,CAAQ,MAAA,IAAU,KAAK,CAAA,EAAG,GAAG,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA;AAC9F,EAAA,OAAO,OAAA,CAAQ,MAAM,CAAC,CAAA,CAAE,OAAe,CAAC,IAAA,EAAM,SAAS,MAAA,KAAW;AAChE,IAAA,IAAI,YAAY,YAAA,EAAc;AAC5B,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAI,OAAA,CAAQ,SAAA,IAAa,MAAA,GAAS,CAAA,KAAM,SAAA,EAAW;AACjD,MAAA,OAAO,QAAQ,IAAA,EAAM,OAAA,CAAQ,UAAU,EAAA,EAAI,OAAA,CAAQ,UAAU,IAAI,CAAA;AAAA,IACnE;AACA,IAAA,MAAM,MAAA,GAAS,SAAS,CAAA,KAAM,SAAA;AAC9B,IAAA,OAAO,SAAA,CAAU,GAAA,CAAI,OAAO,CAAA,GACxB,QAAQ,mBAAA,CAAoB,IAAA,EAAM,OAAO,CAAA,EAAG,OAAO,CAAA,GACnD,YAAA,CAAa,IAAA,EAAM,SAAS,MAAM,CAAA;AAAA,EACxC,GAAG,OAAO,CAAA;AACZ;;"}
@@ -0,0 +1,38 @@
1
+ 'use strict';
2
+
3
+ const outputFixes = require('../../../domain/output-fixes.cjs');
4
+
5
+ const NO_FLAGS = { isReadOnly: false, isWriteOnly: false };
6
+ function ownFlags(schema) {
7
+ return { isReadOnly: Boolean(schema.readOnly), isWriteOnly: Boolean(schema.writeOnly) };
8
+ }
9
+ function merged(left, right) {
10
+ return {
11
+ isReadOnly: left.isReadOnly || right.isReadOnly,
12
+ isWriteOnly: left.isWriteOnly || right.isWriteOnly
13
+ };
14
+ }
15
+ function appliedFlags(schema, context, seen) {
16
+ if (typeof schema !== "object" || schema === null || seen.has(schema)) {
17
+ return NO_FLAGS;
18
+ }
19
+ const inner = /* @__PURE__ */ new Set([...seen, schema]);
20
+ const object = schema;
21
+ const target = typeof object.$ref === "string" ? context.refs.resolve(object.$ref) : void 0;
22
+ return (object.allOf ?? []).reduce(
23
+ (flags, member) => merged(flags, appliedFlags(member, context, inner)),
24
+ merged(ownFlags(object), appliedFlags(target, context, inner))
25
+ );
26
+ }
27
+ function propertyAccessFlags(value, context) {
28
+ if (typeof value !== "object") {
29
+ return NO_FLAGS;
30
+ }
31
+ if (!context.options.fixes.has(outputFixes.OutputFix.READ_WRITE_REFS)) {
32
+ return ownFlags(value);
33
+ }
34
+ return appliedFlags(value, context, /* @__PURE__ */ new Set());
35
+ }
36
+
37
+ exports.propertyAccessFlags = propertyAccessFlags;
38
+ //# sourceMappingURL=access-flags.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"access-flags.cjs","sources":["../../../../src/application/transform/schema/access-flags.ts"],"sourcesContent":["import type { Schema, SchemaObject } from \"../../../domain/openapi/schema-object.js\";\nimport { OutputFix } from \"../../../domain/output-fixes.js\";\nimport type { SchemaContext } from \"./schema-context.js\";\n\n/** Whether a property is `readOnly` or `writeOnly` (JSON Schema 2020-12 Validation §9.4). */\nexport interface AccessFlags {\n readonly isReadOnly: boolean;\n readonly isWriteOnly: boolean;\n}\n\nconst NO_FLAGS: AccessFlags = { isReadOnly: false, isWriteOnly: false };\n\nfunction ownFlags(schema: SchemaObject): AccessFlags {\n return { isReadOnly: Boolean(schema.readOnly), isWriteOnly: Boolean(schema.writeOnly) };\n}\n\nfunction merged(left: AccessFlags, right: AccessFlags): AccessFlags {\n return {\n isReadOnly: left.isReadOnly || right.isReadOnly,\n isWriteOnly: left.isWriteOnly || right.isWriteOnly,\n };\n}\n\n/**\n * The flags of a schema and of the schemas that always apply to the same value: the one its\n * `$ref` names and its `allOf` members, followed until a schema repeats. `readOnly` is an\n * annotation, and the annotations of those schemas are the value's (2020-12 Core §7.7.1); in\n * OpenAPI 3.0 a referenced schema is the property's definition. `anyOf` and `oneOf` members apply\n * only when they match, which the type cannot tell, so they are not read.\n */\nfunction appliedFlags(\n schema: Schema | undefined,\n context: SchemaContext,\n seen: ReadonlySet<Schema>,\n): AccessFlags {\n if (typeof schema !== \"object\" || schema === null || seen.has(schema)) {\n return NO_FLAGS;\n }\n const inner = new Set([...seen, schema]);\n // `readOnly` next to a `$ref` is read too, as the generator always has.\n const object = schema as SchemaObject & { readonly $ref?: unknown };\n const target =\n typeof object.$ref === \"string\" ? (context.refs.resolve(object.$ref) as Schema) : undefined;\n return (object.allOf ?? []).reduce<AccessFlags>(\n (flags, member) => merged(flags, appliedFlags(member, context, inner)),\n merged(ownFlags(object), appliedFlags(target, context, inner)),\n );\n}\n\n/**\n * The flags of a property schema. Without the `read-write-refs` fix only the keywords written on\n * it count, as in openapi-typescript; with it, also those of the schemas its `$ref` and `allOf`\n * apply (upstream #1938).\n */\nexport function propertyAccessFlags(value: Schema, context: SchemaContext): AccessFlags {\n if (typeof value !== \"object\") {\n return NO_FLAGS;\n }\n if (!context.options.fixes.has(OutputFix.READ_WRITE_REFS)) {\n return ownFlags(value as SchemaObject);\n }\n return appliedFlags(value, context, new Set());\n}\n"],"names":["OutputFix"],"mappings":";;;;AAUA,MAAM,QAAA,GAAwB,EAAE,UAAA,EAAY,KAAA,EAAO,aAAa,KAAA,EAAM;AAEtE,SAAS,SAAS,MAAA,EAAmC;AACnD,EAAA,OAAO,EAAE,UAAA,EAAY,OAAA,CAAQ,MAAA,CAAO,QAAQ,GAAG,WAAA,EAAa,OAAA,CAAQ,MAAA,CAAO,SAAS,CAAA,EAAE;AACxF;AAEA,SAAS,MAAA,CAAO,MAAmB,KAAA,EAAiC;AAClE,EAAA,OAAO;AAAA,IACL,UAAA,EAAY,IAAA,CAAK,UAAA,IAAc,KAAA,CAAM,UAAA;AAAA,IACrC,WAAA,EAAa,IAAA,CAAK,WAAA,IAAe,KAAA,CAAM;AAAA,GACzC;AACF;AASA,SAAS,YAAA,CACP,MAAA,EACA,OAAA,EACA,IAAA,EACa;AACb,EAAA,IAAI,OAAO,WAAW,QAAA,IAAY,MAAA,KAAW,QAAQ,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,EAAG;AACrE,IAAA,OAAO,QAAA;AAAA,EACT;AACA,EAAA,MAAM,wBAAQ,IAAI,GAAA,CAAI,CAAC,GAAG,IAAA,EAAM,MAAM,CAAC,CAAA;AAEvC,EAAA,MAAM,MAAA,GAAS,MAAA;AACf,EAAA,MAAM,MAAA,GACJ,OAAO,MAAA,CAAO,IAAA,KAAS,QAAA,GAAY,QAAQ,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,IAAI,CAAA,GAAe,MAAA;AACpF,EAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,IAAS,EAAC,EAAG,MAAA;AAAA,IAC1B,CAAC,OAAO,MAAA,KAAW,MAAA,CAAO,OAAO,YAAA,CAAa,MAAA,EAAQ,OAAA,EAAS,KAAK,CAAC,CAAA;AAAA,IACrE,MAAA,CAAO,SAAS,MAAM,CAAA,EAAG,aAAa,MAAA,EAAQ,OAAA,EAAS,KAAK,CAAC;AAAA,GAC/D;AACF;AAOO,SAAS,mBAAA,CAAoB,OAAe,OAAA,EAAqC;AACtF,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,QAAA;AAAA,EACT;AACA,EAAA,IAAI,CAAC,OAAA,CAAQ,OAAA,CAAQ,MAAM,GAAA,CAAIA,qBAAA,CAAU,eAAe,CAAA,EAAG;AACzD,IAAA,OAAO,SAAS,KAAqB,CAAA;AAAA,EACvC;AACA,EAAA,OAAO,YAAA,CAAa,KAAA,EAAO,OAAA,kBAAS,IAAI,KAAK,CAAA;AAC/C;;"}
@@ -0,0 +1,36 @@
1
+ import { OutputFix } from '../../../domain/output-fixes.mjs';
2
+
3
+ const NO_FLAGS = { isReadOnly: false, isWriteOnly: false };
4
+ function ownFlags(schema) {
5
+ return { isReadOnly: Boolean(schema.readOnly), isWriteOnly: Boolean(schema.writeOnly) };
6
+ }
7
+ function merged(left, right) {
8
+ return {
9
+ isReadOnly: left.isReadOnly || right.isReadOnly,
10
+ isWriteOnly: left.isWriteOnly || right.isWriteOnly
11
+ };
12
+ }
13
+ function appliedFlags(schema, context, seen) {
14
+ if (typeof schema !== "object" || schema === null || seen.has(schema)) {
15
+ return NO_FLAGS;
16
+ }
17
+ const inner = /* @__PURE__ */ new Set([...seen, schema]);
18
+ const object = schema;
19
+ const target = typeof object.$ref === "string" ? context.refs.resolve(object.$ref) : void 0;
20
+ return (object.allOf ?? []).reduce(
21
+ (flags, member) => merged(flags, appliedFlags(member, context, inner)),
22
+ merged(ownFlags(object), appliedFlags(target, context, inner))
23
+ );
24
+ }
25
+ function propertyAccessFlags(value, context) {
26
+ if (typeof value !== "object") {
27
+ return NO_FLAGS;
28
+ }
29
+ if (!context.options.fixes.has(OutputFix.READ_WRITE_REFS)) {
30
+ return ownFlags(value);
31
+ }
32
+ return appliedFlags(value, context, /* @__PURE__ */ new Set());
33
+ }
34
+
35
+ export { propertyAccessFlags };
36
+ //# sourceMappingURL=access-flags.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"access-flags.mjs","sources":["../../../../src/application/transform/schema/access-flags.ts"],"sourcesContent":["import type { Schema, SchemaObject } from \"../../../domain/openapi/schema-object.js\";\nimport { OutputFix } from \"../../../domain/output-fixes.js\";\nimport type { SchemaContext } from \"./schema-context.js\";\n\n/** Whether a property is `readOnly` or `writeOnly` (JSON Schema 2020-12 Validation §9.4). */\nexport interface AccessFlags {\n readonly isReadOnly: boolean;\n readonly isWriteOnly: boolean;\n}\n\nconst NO_FLAGS: AccessFlags = { isReadOnly: false, isWriteOnly: false };\n\nfunction ownFlags(schema: SchemaObject): AccessFlags {\n return { isReadOnly: Boolean(schema.readOnly), isWriteOnly: Boolean(schema.writeOnly) };\n}\n\nfunction merged(left: AccessFlags, right: AccessFlags): AccessFlags {\n return {\n isReadOnly: left.isReadOnly || right.isReadOnly,\n isWriteOnly: left.isWriteOnly || right.isWriteOnly,\n };\n}\n\n/**\n * The flags of a schema and of the schemas that always apply to the same value: the one its\n * `$ref` names and its `allOf` members, followed until a schema repeats. `readOnly` is an\n * annotation, and the annotations of those schemas are the value's (2020-12 Core §7.7.1); in\n * OpenAPI 3.0 a referenced schema is the property's definition. `anyOf` and `oneOf` members apply\n * only when they match, which the type cannot tell, so they are not read.\n */\nfunction appliedFlags(\n schema: Schema | undefined,\n context: SchemaContext,\n seen: ReadonlySet<Schema>,\n): AccessFlags {\n if (typeof schema !== \"object\" || schema === null || seen.has(schema)) {\n return NO_FLAGS;\n }\n const inner = new Set([...seen, schema]);\n // `readOnly` next to a `$ref` is read too, as the generator always has.\n const object = schema as SchemaObject & { readonly $ref?: unknown };\n const target =\n typeof object.$ref === \"string\" ? (context.refs.resolve(object.$ref) as Schema) : undefined;\n return (object.allOf ?? []).reduce<AccessFlags>(\n (flags, member) => merged(flags, appliedFlags(member, context, inner)),\n merged(ownFlags(object), appliedFlags(target, context, inner)),\n );\n}\n\n/**\n * The flags of a property schema. Without the `read-write-refs` fix only the keywords written on\n * it count, as in openapi-typescript; with it, also those of the schemas its `$ref` and `allOf`\n * apply (upstream #1938).\n */\nexport function propertyAccessFlags(value: Schema, context: SchemaContext): AccessFlags {\n if (typeof value !== \"object\") {\n return NO_FLAGS;\n }\n if (!context.options.fixes.has(OutputFix.READ_WRITE_REFS)) {\n return ownFlags(value as SchemaObject);\n }\n return appliedFlags(value, context, new Set());\n}\n"],"names":[],"mappings":";;AAUA,MAAM,QAAA,GAAwB,EAAE,UAAA,EAAY,KAAA,EAAO,aAAa,KAAA,EAAM;AAEtE,SAAS,SAAS,MAAA,EAAmC;AACnD,EAAA,OAAO,EAAE,UAAA,EAAY,OAAA,CAAQ,MAAA,CAAO,QAAQ,GAAG,WAAA,EAAa,OAAA,CAAQ,MAAA,CAAO,SAAS,CAAA,EAAE;AACxF;AAEA,SAAS,MAAA,CAAO,MAAmB,KAAA,EAAiC;AAClE,EAAA,OAAO;AAAA,IACL,UAAA,EAAY,IAAA,CAAK,UAAA,IAAc,KAAA,CAAM,UAAA;AAAA,IACrC,WAAA,EAAa,IAAA,CAAK,WAAA,IAAe,KAAA,CAAM;AAAA,GACzC;AACF;AASA,SAAS,YAAA,CACP,MAAA,EACA,OAAA,EACA,IAAA,EACa;AACb,EAAA,IAAI,OAAO,WAAW,QAAA,IAAY,MAAA,KAAW,QAAQ,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,EAAG;AACrE,IAAA,OAAO,QAAA;AAAA,EACT;AACA,EAAA,MAAM,wBAAQ,IAAI,GAAA,CAAI,CAAC,GAAG,IAAA,EAAM,MAAM,CAAC,CAAA;AAEvC,EAAA,MAAM,MAAA,GAAS,MAAA;AACf,EAAA,MAAM,MAAA,GACJ,OAAO,MAAA,CAAO,IAAA,KAAS,QAAA,GAAY,QAAQ,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,IAAI,CAAA,GAAe,MAAA;AACpF,EAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,IAAS,EAAC,EAAG,MAAA;AAAA,IAC1B,CAAC,OAAO,MAAA,KAAW,MAAA,CAAO,OAAO,YAAA,CAAa,MAAA,EAAQ,OAAA,EAAS,KAAK,CAAC,CAAA;AAAA,IACrE,MAAA,CAAO,SAAS,MAAM,CAAA,EAAG,aAAa,MAAA,EAAQ,OAAA,EAAS,KAAK,CAAC;AAAA,GAC/D;AACF;AAOO,SAAS,mBAAA,CAAoB,OAAe,OAAA,EAAqC;AACtF,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,QAAA;AAAA,EACT;AACA,EAAA,IAAI,CAAC,OAAA,CAAQ,OAAA,CAAQ,MAAM,GAAA,CAAI,SAAA,CAAU,eAAe,CAAA,EAAG;AACzD,IAAA,OAAO,SAAS,KAAqB,CAAA;AAAA,EACvC;AACA,EAAA,OAAO,YAAA,CAAa,KAAA,EAAO,OAAA,kBAAS,IAAI,KAAK,CAAA;AAC/C;;"}