openapi-typesafe 0.0.0 → 1.0.0-rc.0

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 (678) 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 +42 -0
  25. package/dist/adapters/redocly-loader/redocly-config-source.cjs.map +1 -0
  26. package/dist/adapters/redocly-loader/redocly-config-source.mjs +35 -0
  27. package/dist/adapters/redocly-loader/redocly-config-source.mjs.map +1 -0
  28. package/dist/adapters/redocly-loader/redocly-schema-loader.cjs +169 -0
  29. package/dist/adapters/redocly-loader/redocly-schema-loader.cjs.map +1 -0
  30. package/dist/adapters/redocly-loader/redocly-schema-loader.mjs +167 -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 +145 -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 +139 -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 +204 -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 +201 -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-enum.cjs +44 -0
  105. package/dist/api/discriminator-enum.cjs.map +1 -0
  106. package/dist/api/discriminator-enum.mjs +42 -0
  107. package/dist/api/discriminator-enum.mjs.map +1 -0
  108. package/dist/api/discriminator-scan.cjs +168 -0
  109. package/dist/api/discriminator-scan.cjs.map +1 -0
  110. package/dist/api/discriminator-scan.mjs +165 -0
  111. package/dist/api/discriminator-scan.mjs.map +1 -0
  112. package/dist/api/document-declarations.cjs +28 -0
  113. package/dist/api/document-declarations.cjs.map +1 -0
  114. package/dist/api/document-declarations.mjs +26 -0
  115. package/dist/api/document-declarations.mjs.map +1 -0
  116. package/dist/api/document-refs.cjs +53 -0
  117. package/dist/api/document-refs.cjs.map +1 -0
  118. package/dist/api/document-refs.mjs +50 -0
  119. package/dist/api/document-refs.mjs.map +1 -0
  120. package/dist/api/document-run.cjs +107 -0
  121. package/dist/api/document-run.cjs.map +1 -0
  122. package/dist/api/document-run.mjs +101 -0
  123. package/dist/api/document-run.mjs.map +1 -0
  124. package/dist/api/footer-entry.cjs +18 -0
  125. package/dist/api/footer-entry.cjs.map +1 -0
  126. package/dist/api/footer-entry.mjs +15 -0
  127. package/dist/api/footer-entry.mjs.map +1 -0
  128. package/dist/api/footer-sink.cjs +53 -0
  129. package/dist/api/footer-sink.cjs.map +1 -0
  130. package/dist/api/footer-sink.mjs +51 -0
  131. package/dist/api/footer-sink.mjs.map +1 -0
  132. package/dist/api/legacy-callback-warning.cjs +25 -0
  133. package/dist/api/legacy-callback-warning.cjs.map +1 -0
  134. package/dist/api/legacy-callback-warning.mjs +22 -0
  135. package/dist/api/legacy-callback-warning.mjs.map +1 -0
  136. package/dist/api/legacy-ts-helpers.cjs +203 -0
  137. package/dist/api/legacy-ts-helpers.cjs.map +1 -0
  138. package/dist/api/legacy-ts-helpers.mjs +187 -0
  139. package/dist/api/legacy-ts-helpers.mjs.map +1 -0
  140. package/dist/api/legacy-utils.cjs +65 -0
  141. package/dist/api/legacy-utils.cjs.map +1 -0
  142. package/dist/api/legacy-utils.mjs +50 -0
  143. package/dist/api/legacy-utils.mjs.map +1 -0
  144. package/dist/api/openapi-ts.cjs +40 -0
  145. package/dist/api/openapi-ts.cjs.map +1 -0
  146. package/dist/api/openapi-ts.mjs +34 -0
  147. package/dist/api/openapi-ts.mjs.map +1 -0
  148. package/dist/api/schema-callbacks.cjs +140 -0
  149. package/dist/api/schema-callbacks.cjs.map +1 -0
  150. package/dist/api/schema-callbacks.mjs +136 -0
  151. package/dist/api/schema-callbacks.mjs.map +1 -0
  152. package/dist/api/string-to-ast.cjs +21 -0
  153. package/dist/api/string-to-ast.cjs.map +1 -0
  154. package/dist/api/string-to-ast.mjs +18 -0
  155. package/dist/api/string-to-ast.mjs.map +1 -0
  156. package/dist/api/transform-context.cjs +82 -0
  157. package/dist/api/transform-context.cjs.map +1 -0
  158. package/dist/api/transform-context.mjs +65 -0
  159. package/dist/api/transform-context.mjs.map +1 -0
  160. package/dist/api/transform-schema.cjs +31 -0
  161. package/dist/api/transform-schema.cjs.map +1 -0
  162. package/dist/api/transform-schema.mjs +26 -0
  163. package/dist/api/transform-schema.mjs.map +1 -0
  164. package/dist/api/type-helpers.cjs +85 -0
  165. package/dist/api/type-helpers.cjs.map +1 -0
  166. package/dist/api/type-helpers.mjs +66 -0
  167. package/dist/api/type-helpers.mjs.map +1 -0
  168. package/dist/api/unsupported-feature-warnings.cjs +17 -0
  169. package/dist/api/unsupported-feature-warnings.cjs.map +1 -0
  170. package/dist/api/unsupported-feature-warnings.mjs +15 -0
  171. package/dist/api/unsupported-feature-warnings.mjs.map +1 -0
  172. package/dist/application/print/comment-writer.cjs +95 -0
  173. package/dist/application/print/comment-writer.cjs.map +1 -0
  174. package/dist/application/print/comment-writer.mjs +93 -0
  175. package/dist/application/print/comment-writer.mjs.map +1 -0
  176. package/dist/application/print/declaration-printer.cjs +83 -0
  177. package/dist/application/print/declaration-printer.cjs.map +1 -0
  178. package/dist/application/print/declaration-printer.mjs +81 -0
  179. package/dist/application/print/declaration-printer.mjs.map +1 -0
  180. package/dist/application/print/literal-text.cjs +52 -0
  181. package/dist/application/print/literal-text.cjs.map +1 -0
  182. package/dist/application/print/literal-text.mjs +48 -0
  183. package/dist/application/print/literal-text.mjs.map +1 -0
  184. package/dist/application/print/print-nodes.cjs +38 -0
  185. package/dist/application/print/print-nodes.cjs.map +1 -0
  186. package/dist/application/print/print-nodes.mjs +36 -0
  187. package/dist/application/print/print-nodes.mjs.map +1 -0
  188. package/dist/application/print/print-options.cjs +6 -0
  189. package/dist/application/print/print-options.cjs.map +1 -0
  190. package/dist/application/print/print-options.mjs +4 -0
  191. package/dist/application/print/print-options.mjs.map +1 -0
  192. package/dist/application/print/text-writer.cjs +63 -0
  193. package/dist/application/print/text-writer.cjs.map +1 -0
  194. package/dist/application/print/text-writer.mjs +60 -0
  195. package/dist/application/print/text-writer.mjs.map +1 -0
  196. package/dist/application/print/type-printer.cjs +214 -0
  197. package/dist/application/print/type-printer.cjs.map +1 -0
  198. package/dist/application/print/type-printer.mjs +210 -0
  199. package/dist/application/print/type-printer.mjs.map +1 -0
  200. package/dist/application/stack-overflow.cjs +36 -0
  201. package/dist/application/stack-overflow.cjs.map +1 -0
  202. package/dist/application/stack-overflow.mjs +31 -0
  203. package/dist/application/stack-overflow.mjs.map +1 -0
  204. package/dist/application/transform/document/components.cjs +104 -0
  205. package/dist/application/transform/document/components.cjs.map +1 -0
  206. package/dist/application/transform/document/components.mjs +102 -0
  207. package/dist/application/transform/document/components.mjs.map +1 -0
  208. package/dist/application/transform/document/defs-root.cjs +18 -0
  209. package/dist/application/transform/document/defs-root.cjs.map +1 -0
  210. package/dist/application/transform/document/defs-root.mjs +16 -0
  211. package/dist/application/transform/document/defs-root.mjs.map +1 -0
  212. package/dist/application/transform/document/document-member.cjs +13 -0
  213. package/dist/application/transform/document/document-member.cjs.map +1 -0
  214. package/dist/application/transform/document/document-member.mjs +11 -0
  215. package/dist/application/transform/document/document-member.mjs.map +1 -0
  216. package/dist/application/transform/document/document.cjs +86 -0
  217. package/dist/application/transform/document/document.cjs.map +1 -0
  218. package/dist/application/transform/document/document.mjs +83 -0
  219. package/dist/application/transform/document/document.mjs.map +1 -0
  220. package/dist/application/transform/document/header.cjs +27 -0
  221. package/dist/application/transform/document/header.cjs.map +1 -0
  222. package/dist/application/transform/document/header.mjs +25 -0
  223. package/dist/application/transform/document/header.mjs.map +1 -0
  224. package/dist/application/transform/document/kept-deprecated.cjs +96 -0
  225. package/dist/application/transform/document/kept-deprecated.cjs.map +1 -0
  226. package/dist/application/transform/document/kept-deprecated.mjs +94 -0
  227. package/dist/application/transform/document/kept-deprecated.mjs.map +1 -0
  228. package/dist/application/transform/document/media-type.cjs +42 -0
  229. package/dist/application/transform/document/media-type.cjs.map +1 -0
  230. package/dist/application/transform/document/media-type.mjs +38 -0
  231. package/dist/application/transform/document/media-type.mjs.map +1 -0
  232. package/dist/application/transform/document/operation.cjs +45 -0
  233. package/dist/application/transform/document/operation.cjs.map +1 -0
  234. package/dist/application/transform/document/operation.mjs +43 -0
  235. package/dist/application/transform/document/operation.mjs.map +1 -0
  236. package/dist/application/transform/document/parameter.cjs +25 -0
  237. package/dist/application/transform/document/parameter.cjs.map +1 -0
  238. package/dist/application/transform/document/parameter.mjs +23 -0
  239. package/dist/application/transform/document/parameter.mjs.map +1 -0
  240. package/dist/application/transform/document/parameters.cjs +114 -0
  241. package/dist/application/transform/document/parameters.cjs.map +1 -0
  242. package/dist/application/transform/document/parameters.mjs +112 -0
  243. package/dist/application/transform/document/parameters.mjs.map +1 -0
  244. package/dist/application/transform/document/path-item-conflicts.cjs +51 -0
  245. package/dist/application/transform/document/path-item-conflicts.cjs.map +1 -0
  246. package/dist/application/transform/document/path-item-conflicts.mjs +49 -0
  247. package/dist/application/transform/document/path-item-conflicts.mjs.map +1 -0
  248. package/dist/application/transform/document/path-item.cjs +82 -0
  249. package/dist/application/transform/document/path-item.cjs.map +1 -0
  250. package/dist/application/transform/document/path-item.mjs +80 -0
  251. package/dist/application/transform/document/path-item.mjs.map +1 -0
  252. package/dist/application/transform/document/path-key-overlaps.cjs +57 -0
  253. package/dist/application/transform/document/path-key-overlaps.cjs.map +1 -0
  254. package/dist/application/transform/document/path-key-overlaps.mjs +55 -0
  255. package/dist/application/transform/document/path-key-overlaps.mjs.map +1 -0
  256. package/dist/application/transform/document/paths-enum.cjs +75 -0
  257. package/dist/application/transform/document/paths-enum.cjs.map +1 -0
  258. package/dist/application/transform/document/paths-enum.mjs +72 -0
  259. package/dist/application/transform/document/paths-enum.mjs.map +1 -0
  260. package/dist/application/transform/document/paths.cjs +127 -0
  261. package/dist/application/transform/document/paths.cjs.map +1 -0
  262. package/dist/application/transform/document/paths.mjs +125 -0
  263. package/dist/application/transform/document/paths.mjs.map +1 -0
  264. package/dist/application/transform/document/request-body.cjs +36 -0
  265. package/dist/application/transform/document/request-body.cjs.map +1 -0
  266. package/dist/application/transform/document/request-body.mjs +34 -0
  267. package/dist/application/transform/document/request-body.mjs.map +1 -0
  268. package/dist/application/transform/document/response.cjs +59 -0
  269. package/dist/application/transform/document/response.cjs.map +1 -0
  270. package/dist/application/transform/document/response.mjs +57 -0
  271. package/dist/application/transform/document/response.mjs.map +1 -0
  272. package/dist/application/transform/document/responses.cjs +23 -0
  273. package/dist/application/transform/document/responses.cjs.map +1 -0
  274. package/dist/application/transform/document/responses.mjs +21 -0
  275. package/dist/application/transform/document/responses.mjs.map +1 -0
  276. package/dist/application/transform/document/root-type-aliases.cjs +69 -0
  277. package/dist/application/transform/document/root-type-aliases.cjs.map +1 -0
  278. package/dist/application/transform/document/root-type-aliases.mjs +65 -0
  279. package/dist/application/transform/document/root-type-aliases.mjs.map +1 -0
  280. package/dist/application/transform/document/webhooks.cjs +19 -0
  281. package/dist/application/transform/document/webhooks.cjs.map +1 -0
  282. package/dist/application/transform/document/webhooks.mjs +17 -0
  283. package/dist/application/transform/document/webhooks.mjs.map +1 -0
  284. package/dist/application/transform/document-entries.cjs +17 -0
  285. package/dist/application/transform/document-entries.cjs.map +1 -0
  286. package/dist/application/transform/document-entries.mjs +14 -0
  287. package/dist/application/transform/document-entries.mjs.map +1 -0
  288. package/dist/application/transform/footer/document-footer.cjs +88 -0
  289. package/dist/application/transform/footer/document-footer.cjs.map +1 -0
  290. package/dist/application/transform/footer/document-footer.mjs +86 -0
  291. package/dist/application/transform/footer/document-footer.mjs.map +1 -0
  292. package/dist/application/transform/footer/enum-naming.cjs +121 -0
  293. package/dist/application/transform/footer/enum-naming.cjs.map +1 -0
  294. package/dist/application/transform/footer/enum-naming.mjs +115 -0
  295. package/dist/application/transform/footer/enum-naming.mjs.map +1 -0
  296. package/dist/application/transform/helper-types.cjs +68 -0
  297. package/dist/application/transform/helper-types.cjs.map +1 -0
  298. package/dist/application/transform/helper-types.mjs +65 -0
  299. package/dist/application/transform/helper-types.mjs.map +1 -0
  300. package/dist/application/transform/literal-type.cjs +36 -0
  301. package/dist/application/transform/literal-type.cjs.map +1 -0
  302. package/dist/application/transform/literal-type.mjs +34 -0
  303. package/dist/application/transform/literal-type.mjs.map +1 -0
  304. package/dist/application/transform/numbered-names.cjs +18 -0
  305. package/dist/application/transform/numbered-names.cjs.map +1 -0
  306. package/dist/application/transform/numbered-names.mjs +16 -0
  307. package/dist/application/transform/numbered-names.mjs.map +1 -0
  308. package/dist/application/transform/ref-type.cjs +57 -0
  309. package/dist/application/transform/ref-type.cjs.map +1 -0
  310. package/dist/application/transform/ref-type.mjs +54 -0
  311. package/dist/application/transform/ref-type.mjs.map +1 -0
  312. package/dist/application/transform/schema/array-type.cjs +105 -0
  313. package/dist/application/transform/schema/array-type.cjs.map +1 -0
  314. package/dist/application/transform/schema/array-type.mjs +103 -0
  315. package/dist/application/transform/schema/array-type.mjs.map +1 -0
  316. package/dist/application/transform/schema/composition-type.cjs +107 -0
  317. package/dist/application/transform/schema/composition-type.cjs.map +1 -0
  318. package/dist/application/transform/schema/composition-type.mjs +105 -0
  319. package/dist/application/transform/schema/composition-type.mjs.map +1 -0
  320. package/dist/application/transform/schema/core-type.cjs +84 -0
  321. package/dist/application/transform/schema/core-type.cjs.map +1 -0
  322. package/dist/application/transform/schema/core-type.mjs +82 -0
  323. package/dist/application/transform/schema/core-type.mjs.map +1 -0
  324. package/dist/application/transform/schema/discriminator-property.cjs +21 -0
  325. package/dist/application/transform/schema/discriminator-property.cjs.map +1 -0
  326. package/dist/application/transform/schema/discriminator-property.mjs +19 -0
  327. package/dist/application/transform/schema/discriminator-property.mjs.map +1 -0
  328. package/dist/application/transform/schema/enum-rule.cjs +107 -0
  329. package/dist/application/transform/schema/enum-rule.cjs.map +1 -0
  330. package/dist/application/transform/schema/enum-rule.mjs +105 -0
  331. package/dist/application/transform/schema/enum-rule.mjs.map +1 -0
  332. package/dist/application/transform/schema/object-type.cjs +173 -0
  333. package/dist/application/transform/schema/object-type.cjs.map +1 -0
  334. package/dist/application/transform/schema/object-type.mjs +170 -0
  335. package/dist/application/transform/schema/object-type.mjs.map +1 -0
  336. package/dist/application/transform/schema/presence-members.cjs +59 -0
  337. package/dist/application/transform/schema/presence-members.cjs.map +1 -0
  338. package/dist/application/transform/schema/presence-members.mjs +57 -0
  339. package/dist/application/transform/schema/presence-members.mjs.map +1 -0
  340. package/dist/application/transform/schema/schema-transform.cjs +72 -0
  341. package/dist/application/transform/schema/schema-transform.cjs.map +1 -0
  342. package/dist/application/transform/schema/schema-transform.mjs +68 -0
  343. package/dist/application/transform/schema/schema-transform.mjs.map +1 -0
  344. package/dist/application/transform/schema/unevaluated-properties.cjs +61 -0
  345. package/dist/application/transform/schema/unevaluated-properties.cjs.map +1 -0
  346. package/dist/application/transform/schema/unevaluated-properties.mjs +59 -0
  347. package/dist/application/transform/schema/unevaluated-properties.mjs.map +1 -0
  348. package/dist/application/transform/schema-comment.cjs +84 -0
  349. package/dist/application/transform/schema-comment.cjs.map +1 -0
  350. package/dist/application/transform/schema-comment.mjs +81 -0
  351. package/dist/application/transform/schema-comment.mjs.map +1 -0
  352. package/dist/application/transform/shared-types.cjs +8 -0
  353. package/dist/application/transform/shared-types.cjs.map +1 -0
  354. package/dist/application/transform/shared-types.mjs +6 -0
  355. package/dist/application/transform/shared-types.mjs.map +1 -0
  356. package/dist/application/transform/type-combinators.cjs +49 -0
  357. package/dist/application/transform/type-combinators.cjs.map +1 -0
  358. package/dist/application/transform/type-combinators.mjs +42 -0
  359. package/dist/application/transform/type-combinators.mjs.map +1 -0
  360. package/dist/cli/cli-arguments.cjs +137 -0
  361. package/dist/cli/cli-arguments.cjs.map +1 -0
  362. package/dist/cli/cli-arguments.mjs +129 -0
  363. package/dist/cli/cli-arguments.mjs.map +1 -0
  364. package/dist/cli/cli-errors.cjs +80 -0
  365. package/dist/cli/cli-errors.cjs.map +1 -0
  366. package/dist/cli/cli-errors.mjs +76 -0
  367. package/dist/cli/cli-errors.mjs.map +1 -0
  368. package/dist/cli/cli-output.cjs +37 -0
  369. package/dist/cli/cli-output.cjs.map +1 -0
  370. package/dist/cli/cli-output.mjs +30 -0
  371. package/dist/cli/cli-output.mjs.map +1 -0
  372. package/dist/cli/docs-links.cjs +6 -0
  373. package/dist/cli/docs-links.cjs.map +1 -0
  374. package/dist/cli/docs-links.mjs +4 -0
  375. package/dist/cli/docs-links.mjs.map +1 -0
  376. package/dist/cli/fix-option.cjs +19 -0
  377. package/dist/cli/fix-option.cjs.map +1 -0
  378. package/dist/cli/fix-option.mjs +16 -0
  379. package/dist/cli/fix-option.mjs.map +1 -0
  380. package/dist/cli/help-text.cjs +44 -0
  381. package/dist/cli/help-text.cjs.map +1 -0
  382. package/dist/cli/help-text.mjs +42 -0
  383. package/dist/cli/help-text.mjs.map +1 -0
  384. package/dist/cli/main.cjs +62 -0
  385. package/dist/cli/main.cjs.map +1 -0
  386. package/dist/cli/main.d.cts +2 -0
  387. package/dist/cli/main.d.mts +2 -0
  388. package/dist/cli/main.d.ts +2 -0
  389. package/dist/cli/main.mjs +54 -0
  390. package/dist/cli/main.mjs.map +1 -0
  391. package/dist/cli/redocly-apis.cjs +65 -0
  392. package/dist/cli/redocly-apis.cjs.map +1 -0
  393. package/dist/cli/redocly-apis.mjs +62 -0
  394. package/dist/cli/redocly-apis.mjs.map +1 -0
  395. package/dist/cli/ref-limits.cjs +14 -0
  396. package/dist/cli/ref-limits.cjs.map +1 -0
  397. package/dist/cli/ref-limits.mjs +12 -0
  398. package/dist/cli/ref-limits.mjs.map +1 -0
  399. package/dist/cli/run-cli.cjs +100 -0
  400. package/dist/cli/run-cli.cjs.map +1 -0
  401. package/dist/cli/run-cli.mjs +98 -0
  402. package/dist/cli/run-cli.mjs.map +1 -0
  403. package/dist/domain/assert-never.cjs +8 -0
  404. package/dist/domain/assert-never.cjs.map +1 -0
  405. package/dist/domain/assert-never.mjs +6 -0
  406. package/dist/domain/assert-never.mjs.map +1 -0
  407. package/dist/domain/errors.cjs +50 -0
  408. package/dist/domain/errors.cjs.map +1 -0
  409. package/dist/domain/errors.mjs +46 -0
  410. package/dist/domain/errors.mjs.map +1 -0
  411. package/dist/domain/ir/constructors.cjs +89 -0
  412. package/dist/domain/ir/constructors.cjs.map +1 -0
  413. package/dist/domain/ir/constructors.mjs +71 -0
  414. package/dist/domain/ir/constructors.mjs.map +1 -0
  415. package/dist/domain/ir/identifier-text.cjs +29 -0
  416. package/dist/domain/ir/identifier-text.cjs.map +1 -0
  417. package/dist/domain/ir/identifier-text.mjs +25 -0
  418. package/dist/domain/ir/identifier-text.mjs.map +1 -0
  419. package/dist/domain/ir/newer-identifier-ranges.cjs +109 -0
  420. package/dist/domain/ir/newer-identifier-ranges.cjs.map +1 -0
  421. package/dist/domain/ir/newer-identifier-ranges.mjs +106 -0
  422. package/dist/domain/ir/newer-identifier-ranges.mjs.map +1 -0
  423. package/dist/domain/ir/normalize.cjs +32 -0
  424. package/dist/domain/ir/normalize.cjs.map +1 -0
  425. package/dist/domain/ir/normalize.mjs +29 -0
  426. package/dist/domain/ir/normalize.mjs.map +1 -0
  427. package/dist/domain/ir/property-name.cjs +19 -0
  428. package/dist/domain/ir/property-name.cjs.map +1 -0
  429. package/dist/domain/ir/property-name.mjs +16 -0
  430. package/dist/domain/ir/property-name.mjs.map +1 -0
  431. package/dist/domain/ir/raw-text-escapes.cjs +25 -0
  432. package/dist/domain/ir/raw-text-escapes.cjs.map +1 -0
  433. package/dist/domain/ir/raw-text-escapes.mjs +22 -0
  434. package/dist/domain/ir/raw-text-escapes.mjs.map +1 -0
  435. package/dist/domain/openapi/alias-expansion.cjs +50 -0
  436. package/dist/domain/openapi/alias-expansion.cjs.map +1 -0
  437. package/dist/domain/openapi/alias-expansion.mjs +45 -0
  438. package/dist/domain/openapi/alias-expansion.mjs.map +1 -0
  439. package/dist/domain/openapi/binary-content.cjs +48 -0
  440. package/dist/domain/openapi/binary-content.cjs.map +1 -0
  441. package/dist/domain/openapi/binary-content.mjs +45 -0
  442. package/dist/domain/openapi/binary-content.mjs.map +1 -0
  443. package/dist/domain/openapi/components-object.cjs +29 -0
  444. package/dist/domain/openapi/components-object.cjs.map +1 -0
  445. package/dist/domain/openapi/components-object.mjs +24 -0
  446. package/dist/domain/openapi/components-object.mjs.map +1 -0
  447. package/dist/domain/openapi/json-pointer.cjs +31 -0
  448. package/dist/domain/openapi/json-pointer.cjs.map +1 -0
  449. package/dist/domain/openapi/json-pointer.mjs +27 -0
  450. package/dist/domain/openapi/json-pointer.mjs.map +1 -0
  451. package/dist/domain/openapi/media-type-object.cjs +14 -0
  452. package/dist/domain/openapi/media-type-object.cjs.map +1 -0
  453. package/dist/domain/openapi/media-type-object.mjs +11 -0
  454. package/dist/domain/openapi/media-type-object.mjs.map +1 -0
  455. package/dist/domain/openapi/parameter-object.cjs +13 -0
  456. package/dist/domain/openapi/parameter-object.cjs.map +1 -0
  457. package/dist/domain/openapi/parameter-object.mjs +10 -0
  458. package/dist/domain/openapi/parameter-object.mjs.map +1 -0
  459. package/dist/domain/openapi/path-item-object.cjs +35 -0
  460. package/dist/domain/openapi/path-item-object.cjs.map +1 -0
  461. package/dist/domain/openapi/path-item-object.mjs +30 -0
  462. package/dist/domain/openapi/path-item-object.mjs.map +1 -0
  463. package/dist/domain/openapi/unsupported-features.cjs +87 -0
  464. package/dist/domain/openapi/unsupported-features.cjs.map +1 -0
  465. package/dist/domain/openapi/unsupported-features.mjs +84 -0
  466. package/dist/domain/openapi/unsupported-features.mjs.map +1 -0
  467. package/dist/domain/output-fixes.cjs +66 -0
  468. package/dist/domain/output-fixes.cjs.map +1 -0
  469. package/dist/domain/output-fixes.mjs +59 -0
  470. package/dist/domain/output-fixes.mjs.map +1 -0
  471. package/dist/index.cjs +98 -0
  472. package/dist/index.cjs.map +1 -0
  473. package/dist/index.d.cts +812 -0
  474. package/dist/index.d.mts +812 -0
  475. package/dist/index.d.ts +812 -0
  476. package/dist/index.mjs +27 -0
  477. package/dist/index.mjs.map +1 -0
  478. package/dist/transform/components-object.cjs +14 -0
  479. package/dist/transform/components-object.cjs.map +1 -0
  480. package/dist/transform/components-object.mjs +10 -0
  481. package/dist/transform/components-object.mjs.map +1 -0
  482. package/dist/transform/header-object.cjs +12 -0
  483. package/dist/transform/header-object.cjs.map +1 -0
  484. package/dist/transform/header-object.mjs +10 -0
  485. package/dist/transform/header-object.mjs.map +1 -0
  486. package/dist/transform/media-type-object.cjs +12 -0
  487. package/dist/transform/media-type-object.cjs.map +1 -0
  488. package/dist/transform/media-type-object.mjs +10 -0
  489. package/dist/transform/media-type-object.mjs.map +1 -0
  490. package/dist/transform/operation-object.cjs +26 -0
  491. package/dist/transform/operation-object.cjs.map +1 -0
  492. package/dist/transform/operation-object.mjs +21 -0
  493. package/dist/transform/operation-object.mjs.map +1 -0
  494. package/dist/transform/parameter-object.cjs +12 -0
  495. package/dist/transform/parameter-object.cjs.map +1 -0
  496. package/dist/transform/parameter-object.mjs +10 -0
  497. package/dist/transform/parameter-object.mjs.map +1 -0
  498. package/dist/transform/path-item-object.cjs +12 -0
  499. package/dist/transform/path-item-object.cjs.map +1 -0
  500. package/dist/transform/path-item-object.mjs +10 -0
  501. package/dist/transform/path-item-object.mjs.map +1 -0
  502. package/dist/transform/paths-object.cjs +11 -0
  503. package/dist/transform/paths-object.cjs.map +1 -0
  504. package/dist/transform/paths-object.mjs +9 -0
  505. package/dist/transform/paths-object.mjs.map +1 -0
  506. package/dist/transform/request-body-object.cjs +12 -0
  507. package/dist/transform/request-body-object.cjs.map +1 -0
  508. package/dist/transform/request-body-object.mjs +10 -0
  509. package/dist/transform/request-body-object.mjs.map +1 -0
  510. package/dist/transform/response-object.cjs +12 -0
  511. package/dist/transform/response-object.cjs.map +1 -0
  512. package/dist/transform/response-object.mjs +10 -0
  513. package/dist/transform/response-object.mjs.map +1 -0
  514. package/dist/transform/responses-object.cjs +12 -0
  515. package/dist/transform/responses-object.cjs.map +1 -0
  516. package/dist/transform/responses-object.mjs +10 -0
  517. package/dist/transform/responses-object.mjs.map +1 -0
  518. package/dist/transform/schema-object.cjs +21 -0
  519. package/dist/transform/schema-object.cjs.map +1 -0
  520. package/dist/transform/schema-object.mjs +16 -0
  521. package/dist/transform/schema-object.mjs.map +1 -0
  522. package/package.json +115 -4
  523. package/src/adapters/node-file-system/node-file-system.ts +44 -0
  524. package/src/adapters/redocly-loader/alias-limit.ts +20 -0
  525. package/src/adapters/redocly-loader/allowed-hosts.ts +62 -0
  526. package/src/adapters/redocly-loader/bundled-ref-repair.ts +65 -0
  527. package/src/adapters/redocly-loader/malformed-refs.ts +61 -0
  528. package/src/adapters/redocly-loader/redocly-config-source.ts +43 -0
  529. package/src/adapters/redocly-loader/redocly-schema-loader.ts +246 -0
  530. package/src/adapters/redocly-loader/ref-access.ts +146 -0
  531. package/src/adapters/redocly-loader/ref-holders.ts +43 -0
  532. package/src/adapters/redocly-loader/remote-fetch.ts +104 -0
  533. package/src/adapters/redocly-loader/schema-load-errors.ts +124 -0
  534. package/src/adapters/redocly-loader/schema-source.ts +151 -0
  535. package/src/adapters/redocly-loader/unsupported-keys.ts +102 -0
  536. package/src/adapters/terminal-logger/terminal-logger.ts +98 -0
  537. package/src/adapters/type-ast-bridge/footer-nodes.ts +38 -0
  538. package/src/adapters/type-ast-bridge/ir-declarations-to-typescript.ts +100 -0
  539. package/src/adapters/type-ast-bridge/ir-to-typescript.ts +220 -0
  540. package/src/adapters/type-ast-bridge/lazy-node.ts +24 -0
  541. package/src/adapters/type-ast-bridge/load-typescript.ts +84 -0
  542. package/src/adapters/type-ast-bridge/print-typescript.ts +33 -0
  543. package/src/adapters/type-ast-bridge/typescript-raw-text.ts +49 -0
  544. package/src/adapters/type-ast-bridge/typescript-to-ir.ts +280 -0
  545. package/src/adapters/type-ast-bridge/typescript-types.ts +8 -0
  546. package/src/api/ast-to-string.ts +59 -0
  547. package/src/api/comment-header.ts +7 -0
  548. package/src/api/default-ports.ts +44 -0
  549. package/src/api/discriminator-enum.ts +76 -0
  550. package/src/api/discriminator-scan.ts +272 -0
  551. package/src/api/document-declarations.ts +41 -0
  552. package/src/api/document-refs.ts +71 -0
  553. package/src/api/document-run.ts +159 -0
  554. package/src/api/footer-entry.ts +23 -0
  555. package/src/api/footer-sink.ts +67 -0
  556. package/src/api/legacy-callback-warning.ts +29 -0
  557. package/src/api/legacy-ts-helpers.ts +311 -0
  558. package/src/api/legacy-utils.ts +118 -0
  559. package/src/api/openapi-ts.ts +62 -0
  560. package/src/api/schema-callbacks.ts +211 -0
  561. package/src/api/string-to-ast.ts +27 -0
  562. package/src/api/transform-context.ts +87 -0
  563. package/src/api/transform-schema.ts +39 -0
  564. package/src/api/type-helpers.ts +130 -0
  565. package/src/api/unsupported-feature-warnings.ts +26 -0
  566. package/src/application/ports/file-system.ts +12 -0
  567. package/src/application/ports/logger.ts +16 -0
  568. package/src/application/ports/redocly-config-source.ts +16 -0
  569. package/src/application/ports/schema-loader.ts +32 -0
  570. package/src/application/print/comment-writer.ts +91 -0
  571. package/src/application/print/declaration-printer.ts +100 -0
  572. package/src/application/print/literal-text.ts +62 -0
  573. package/src/application/print/print-nodes.ts +62 -0
  574. package/src/application/print/print-options.ts +11 -0
  575. package/src/application/print/text-writer.ts +83 -0
  576. package/src/application/print/type-printer.ts +281 -0
  577. package/src/application/stack-overflow.ts +54 -0
  578. package/src/application/transform/document/components.ts +189 -0
  579. package/src/application/transform/document/defs-root.ts +25 -0
  580. package/src/application/transform/document/document-member.ts +20 -0
  581. package/src/application/transform/document/document.ts +157 -0
  582. package/src/application/transform/document/header.ts +34 -0
  583. package/src/application/transform/document/kept-deprecated.ts +135 -0
  584. package/src/application/transform/document/media-type.ts +78 -0
  585. package/src/application/transform/document/operation.ts +64 -0
  586. package/src/application/transform/document/parameter.ts +45 -0
  587. package/src/application/transform/document/parameters.ts +200 -0
  588. package/src/application/transform/document/path-item-conflicts.ts +79 -0
  589. package/src/application/transform/document/path-item.ts +168 -0
  590. package/src/application/transform/document/path-key-overlaps.ts +112 -0
  591. package/src/application/transform/document/paths-enum.ts +127 -0
  592. package/src/application/transform/document/paths.ts +211 -0
  593. package/src/application/transform/document/request-body.ts +50 -0
  594. package/src/application/transform/document/response.ts +109 -0
  595. package/src/application/transform/document/responses.ts +29 -0
  596. package/src/application/transform/document/root-type-aliases.ts +106 -0
  597. package/src/application/transform/document/webhooks.ts +22 -0
  598. package/src/application/transform/document-entries.ts +28 -0
  599. package/src/application/transform/footer/document-footer.ts +127 -0
  600. package/src/application/transform/footer/enum-naming.ts +181 -0
  601. package/src/application/transform/helper-types.ts +92 -0
  602. package/src/application/transform/literal-type.ts +54 -0
  603. package/src/application/transform/numbered-names.ts +20 -0
  604. package/src/application/transform/ref-type.ts +97 -0
  605. package/src/application/transform/schema/array-type.ts +152 -0
  606. package/src/application/transform/schema/composition-type.ts +183 -0
  607. package/src/application/transform/schema/core-type.ts +115 -0
  608. package/src/application/transform/schema/discriminator-property.ts +28 -0
  609. package/src/application/transform/schema/enum-rule.ts +157 -0
  610. package/src/application/transform/schema/object-type.ts +271 -0
  611. package/src/application/transform/schema/presence-members.ts +96 -0
  612. package/src/application/transform/schema/schema-context.ts +110 -0
  613. package/src/application/transform/schema/schema-rule.ts +29 -0
  614. package/src/application/transform/schema/schema-transform.ts +99 -0
  615. package/src/application/transform/schema/unevaluated-properties.ts +105 -0
  616. package/src/application/transform/schema-comment.ts +116 -0
  617. package/src/application/transform/shared-types.ts +9 -0
  618. package/src/application/transform/transform-context.ts +51 -0
  619. package/src/application/transform/type-combinators.ts +57 -0
  620. package/src/cli/cli-arguments.ts +198 -0
  621. package/src/cli/cli-dependencies.ts +42 -0
  622. package/src/cli/cli-errors.ts +125 -0
  623. package/src/cli/cli-output.ts +53 -0
  624. package/src/cli/docs-links.ts +6 -0
  625. package/src/cli/fix-option.ts +29 -0
  626. package/src/cli/help-text.ts +52 -0
  627. package/src/cli/main.ts +67 -0
  628. package/src/cli/redocly-apis.ts +91 -0
  629. package/src/cli/ref-limits.ts +16 -0
  630. package/src/cli/run-cli.ts +114 -0
  631. package/src/domain/assert-never.ts +8 -0
  632. package/src/domain/errors.ts +74 -0
  633. package/src/domain/ir/constructors.ts +137 -0
  634. package/src/domain/ir/identifier-text.ts +49 -0
  635. package/src/domain/ir/newer-identifier-ranges.ts +109 -0
  636. package/src/domain/ir/nodes.ts +224 -0
  637. package/src/domain/ir/normalize.ts +51 -0
  638. package/src/domain/ir/property-name.ts +28 -0
  639. package/src/domain/ir/raw-text-escapes.ts +37 -0
  640. package/src/domain/openapi/alias-expansion.ts +72 -0
  641. package/src/domain/openapi/binary-content.ts +74 -0
  642. package/src/domain/openapi/components-object.ts +52 -0
  643. package/src/domain/openapi/document-object.ts +12 -0
  644. package/src/domain/openapi/header-object.ts +9 -0
  645. package/src/domain/openapi/json-pointer.ts +46 -0
  646. package/src/domain/openapi/media-type-object.ts +26 -0
  647. package/src/domain/openapi/operation-object.ts +13 -0
  648. package/src/domain/openapi/parameter-object.ts +30 -0
  649. package/src/domain/openapi/path-item-object.ts +70 -0
  650. package/src/domain/openapi/request-body-object.ts +7 -0
  651. package/src/domain/openapi/response-object.ts +14 -0
  652. package/src/domain/openapi/schema-object.ts +59 -0
  653. package/src/domain/openapi/unsupported-features.ts +139 -0
  654. package/src/domain/output-fixes.ts +95 -0
  655. package/src/index.ts +67 -0
  656. package/src/transform/components-object.ts +25 -0
  657. package/src/transform/header-object.ts +19 -0
  658. package/src/transform/media-type-object.ts +19 -0
  659. package/src/transform/operation-object.ts +36 -0
  660. package/src/transform/parameter-object.ts +19 -0
  661. package/src/transform/parameters-array.ts +19 -0
  662. package/src/transform/path-item-object.ts +22 -0
  663. package/src/transform/paths-enum.ts +8 -0
  664. package/src/transform/paths-object.ts +15 -0
  665. package/src/transform/request-body-object.ts +19 -0
  666. package/src/transform/response-object.ts +19 -0
  667. package/src/transform/responses-object.ts +19 -0
  668. package/src/transform/schema-object.ts +36 -0
  669. package/src/transform/webhooks-object.ts +15 -0
  670. package/src/types/generator-options.ts +267 -0
  671. package/src/types/openapi-common.ts +100 -0
  672. package/src/types/openapi-document.ts +196 -0
  673. package/src/types/openapi-path-item.ts +130 -0
  674. package/src/types/openapi-request.ts +209 -0
  675. package/src/types/openapi-response.ts +81 -0
  676. package/src/types/openapi-schema.ts +169 -0
  677. package/src/types/openapi-security.ts +116 -0
  678. package/src/types.ts +12 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.mjs","sources":["../../../../src/application/transform/document/paths.ts"],"sourcesContent":["import { irIntersection, irObject, irProperty, irRaw } from \"../../../domain/ir/constructors.js\";\nimport type { IrMember, IrType } from \"../../../domain/ir/nodes.js\";\nimport { toPropertyName } from \"../../../domain/ir/property-name.js\";\nimport { escapeTemplateText } from \"../../../domain/ir/raw-text-escapes.js\";\nimport { createRef } from \"../../../domain/openapi/json-pointer.js\";\nimport type { OperationObject } from \"../../../domain/openapi/operation-object.js\";\nimport type {\n ParameterObject,\n ParameterOrReference,\n} from \"../../../domain/openapi/parameter-object.js\";\nimport {\n type PathItemObject,\n type PathsObject,\n pathItemOperations,\n} from \"../../../domain/openapi/path-item-object.js\";\nimport type { ReferenceSchema, SchemaObject } from \"../../../domain/openapi/schema-object.js\";\nimport { documentEntries } from \"../document-entries.js\";\nimport { refType } from \"../ref-type.js\";\nimport type { TransformContext } from \"../transform-context.js\";\nimport { documentMember } from \"./document-member.js\";\nimport { pathItemType } from \"./path-item.js\";\nimport { isCoveredPathItemRejected } from \"./path-item-conflicts.js\";\nimport {\n coveringTemplateKeys,\n type PathKey,\n type PathKeyPart,\n type PathPlaceholder,\n} from \"./path-key-overlaps.js\";\n\nconst PATH_PARAMETER_RE = /\\{[^}]+\\}/g;\n\n/** Placeholders by parameter schema type; anything else is a string placeholder. */\nconst PLACEHOLDERS: ReadonlyMap<unknown, PathPlaceholder> = new Map([\n [\"number\", \"number\"],\n [\"integer\", \"number\"],\n [\"boolean\", \"boolean\"],\n]);\nconst STRING_PLACEHOLDER: PathPlaceholder = \"string\";\n\n/** `${type}`: the text of a template literal type placeholder. */\nfunction placeholderText(type: PathPlaceholder): string {\n return `\\${${type}}`;\n}\n\nfunction resolvedParameter(\n parameter: ParameterOrReference,\n context: TransformContext,\n): ParameterObject | undefined {\n return \"$ref\" in parameter && parameter.$ref\n ? (context.refs.resolve(parameter.$ref) as ParameterObject | undefined)\n : (parameter as ParameterObject);\n}\n\nfunction addPathParameters(\n parameters: readonly ParameterOrReference[],\n byName: Map<string, ParameterObject>,\n context: TransformContext,\n): void {\n for (const parameter of parameters) {\n const resolved = resolvedParameter(parameter, context);\n if (resolved && resolved.in === \"path\") {\n byName.set(resolved.name, resolved);\n }\n }\n}\n\n/** Path parameters of the path item and of its operations; later definitions win. */\nfunction pathParameters(\n pathItem: PathItemObject,\n context: TransformContext,\n): Map<string, ParameterObject> {\n const byName = new Map<string, ParameterObject>();\n addPathParameters(pathItem.parameters ?? [], byName, context);\n for (const { operation: entry } of pathItemOperations(pathItem)) {\n const operation = (entry as ReferenceSchema).$ref\n ? (context.refs.resolve((entry as ReferenceSchema).$ref) as OperationObject | undefined)\n : (entry as OperationObject);\n addPathParameters(operation?.parameters ?? [], byName, context);\n }\n return byName;\n}\n\n/**\n * `--path-params-as-types`: the URL as template parts, each `{name}` replaced by a placeholder for\n * its parameter's type. Null when the URL has no complete `{…}` placeholder.\n */\nfunction pathTemplateParts(\n url: string,\n pathItem: PathItemObject,\n context: TransformContext,\n): PathKeyPart[] | null {\n const matches = url.match(PATH_PARAMETER_RE);\n if (!matches) {\n return null;\n }\n const parameters = pathParameters(pathItem, context);\n const placeholders = matches.map((match) => {\n const schema = parameters.get(match.slice(1, -1))?.schema as SchemaObject | undefined;\n return PLACEHOLDERS.get(schema?.type) ?? STRING_PLACEHOLDER;\n });\n return url.split(PATH_PARAMETER_RE).flatMap((text, index): PathKeyPart[] => {\n const type = placeholders[index];\n const textPart: PathKeyPart = { kind: \"text\", text };\n return type === undefined ? [textPart] : [textPart, { kind: \"placeholder\", type }];\n });\n}\n\n/**\n * The template literal type of the parts. The original escaped only backticks: a backslash or\n * `${` in the URL could end the literal or open a placeholder, and add code to the generated file\n * (intentional fix). So the text parts are escaped.\n */\nfunction templateText(parts: readonly PathKeyPart[]): string {\n const text = parts\n .map((part) =>\n part.kind === \"text\" ? escapeTemplateText(part.text) : placeholderText(part.type),\n )\n .join(\"\");\n return `\\`${text}\\``;\n}\n\n/** A path's member, its key and its path item type for the overlap check. */\ninterface PathMember {\n readonly member: IrMember;\n readonly key: PathKey;\n readonly type: IrType;\n}\n\nfunction pathItemMember(\n url: string,\n pathItem: PathItemObject,\n context: TransformContext,\n): PathMember {\n const isReadonly = context.options.immutable;\n const type = pathItemType(pathItem, { path: createRef([\"paths\", url]) }, context);\n const parts =\n context.options.pathParamsAsTypes && url.includes(\"{\")\n ? pathTemplateParts(url, pathItem, context)\n : null;\n if (parts === null) {\n const member = irProperty(toPropertyName(url), type, { isReadonly });\n return { member, key: literalKey(url), type };\n }\n const member: IrMember = {\n kind: \"indexSignature\",\n parameterName: \"path\",\n parameterType: irRaw(templateText(parts)),\n type,\n isReadonly,\n comments: [],\n };\n return { member, key: { kind: \"template\", parts }, type };\n}\n\nfunction literalKey(url: string): PathKey {\n return { kind: \"literal\", url };\n}\n\n/**\n * The members as one object type. When an index signature covers another key, TypeScript checks\n * the covered key's type against it. Where that check surely fails (TS2411, TS2413), each such\n * signature gets an object of its own in an intersection: an intersection does not check its parts\n * against each other, and every key has the type it had in the one object. Output that compiles\n * keeps the one object.\n */\nfunction pathsObjectType(paths: readonly PathMember[]): IrType {\n const covering = coveringTemplateKeys(\n paths.map(({ key }) => key),\n (coveringIndex, coveredIndex) => {\n const coveringPath = paths[coveringIndex];\n const coveredPath = paths[coveredIndex];\n return (\n coveringPath !== undefined &&\n coveredPath !== undefined &&\n isCoveredPathItemRejected(coveredPath.type, coveringPath.type)\n );\n },\n );\n if (covering.size === 0) {\n return irObject(paths.map(({ member }) => member));\n }\n const rest = paths.filter((_, index) => !covering.has(index)).map(({ member }) => member);\n const own = paths\n .filter((_, index) => covering.has(index))\n .map(({ member }) => irObject([member]));\n return irIntersection([irObject(rest), ...own]);\n}\n\n/** The `paths` interface body (OpenAPI 3.1 §4.8.8): one member per path, by URL. */\nexport function pathsType(paths: PathsObject, context: TransformContext): IrType {\n const members: PathMember[] = [];\n for (const [url, pathItem] of documentEntries(paths, context.options)) {\n if (!pathItem || typeof pathItem !== \"object\") {\n continue;\n }\n if (\"$ref\" in pathItem) {\n const options = { isReadonly: context.options.immutable };\n const member = documentMember(url, refType(pathItem.$ref), pathItem, options);\n members.push({ member, key: literalKey(url), type: member.type });\n continue;\n }\n const startedAt = context.diagnostics.now();\n const path = pathItemMember(url, pathItem, context);\n members.push(path);\n // The original reports only paths written as properties.\n if (path.member.kind === \"property\") {\n context.diagnostics.debug(`Transformed path \"${url}\"`, context.diagnostics.now() - startedAt);\n }\n }\n return pathsObjectType(members);\n}\n"],"names":["member"],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ 'use strict';
2
+
3
+ const constructors = require('../../../domain/ir/constructors.cjs');
4
+ const propertyName = require('../../../domain/ir/property-name.cjs');
5
+ const jsonPointer = require('../../../domain/openapi/json-pointer.cjs');
6
+ const documentEntries = require('../document-entries.cjs');
7
+ const documentMember = require('./document-member.cjs');
8
+ const mediaType = require('./media-type.cjs');
9
+
10
+ const ANY_MEDIA_TYPE = "*/*";
11
+ function contentMembers(requestBody, location, context) {
12
+ const entries = documentEntries.documentEntries(requestBody.content ?? {}, context.options);
13
+ return entries.map(([contentType, entry]) => {
14
+ const path = jsonPointer.createRef([location.path, "content", contentType]);
15
+ const type = mediaType.contentEntryType(entry, { ...location, path }, context);
16
+ return documentMember.documentMember(contentType, type, entry, { isReadonly: context.options.immutable });
17
+ });
18
+ }
19
+ function requestBodyType(requestBody, location, context) {
20
+ const members = contentMembers(requestBody, location, context);
21
+ const placeholder = constructors.irProperty(propertyName.toPropertyName(ANY_MEDIA_TYPE), constructors.irKeyword("never"), {
22
+ isOptional: true
23
+ });
24
+ const content = constructors.irObject(members.length > 0 ? members : [placeholder]);
25
+ const isReadonly = context.options.immutable;
26
+ const itemContent = mediaType.itemContentMember(requestBody.content ?? {}, location, context, {
27
+ isReadonly
28
+ });
29
+ return constructors.irObject([
30
+ constructors.irProperty(propertyName.toPropertyName("content"), content, { isReadonly }),
31
+ ...itemContent ? [itemContent] : []
32
+ ]);
33
+ }
34
+
35
+ exports.requestBodyType = requestBodyType;
36
+ //# sourceMappingURL=request-body.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-body.cjs","sources":["../../../../src/application/transform/document/request-body.ts"],"sourcesContent":["import { irKeyword, irObject, irProperty } from \"../../../domain/ir/constructors.js\";\nimport type { IrMember, IrType } from \"../../../domain/ir/nodes.js\";\nimport { toPropertyName } from \"../../../domain/ir/property-name.js\";\nimport { createRef } from \"../../../domain/openapi/json-pointer.js\";\nimport type { RequestBodyObject } from \"../../../domain/openapi/request-body-object.js\";\nimport { documentEntries } from \"../document-entries.js\";\nimport type { SchemaContext, SchemaLocation } from \"../schema/schema-context.js\";\nimport { documentMember } from \"./document-member.js\";\nimport { contentEntryType, itemContentMember } from \"./media-type.js\";\n\n/** Stands in for the media types of a body that defines none: `\"*\\/*\"?: never`. */\nconst ANY_MEDIA_TYPE = \"*/*\";\n\nfunction contentMembers(\n requestBody: RequestBodyObject,\n location: SchemaLocation,\n context: SchemaContext,\n): IrMember[] {\n const entries = documentEntries(requestBody.content ?? {}, context.options);\n return entries.map(([contentType, entry]) => {\n const path = createRef([location.path, \"content\", contentType]);\n const type = contentEntryType(entry, { ...location, path }, context);\n return documentMember(contentType, type, entry, { isReadonly: context.options.immutable });\n });\n}\n\n/**\n * A request body (OpenAPI 3.2 §4.8.13): `{ content: { [mediaType]: T } }`, and `itemContent` when a\n * media type has an `itemSchema`.\n */\nexport function requestBodyType(\n requestBody: RequestBodyObject,\n location: SchemaLocation,\n context: SchemaContext,\n): IrType {\n const members = contentMembers(requestBody, location, context);\n // The placeholder is never readonly, even with --immutable, as in the original.\n const placeholder = irProperty(toPropertyName(ANY_MEDIA_TYPE), irKeyword(\"never\"), {\n isOptional: true,\n });\n const content = irObject(members.length > 0 ? members : [placeholder]);\n const isReadonly = context.options.immutable;\n const itemContent = itemContentMember(requestBody.content ?? {}, location, context, {\n isReadonly,\n });\n return irObject([\n irProperty(toPropertyName(\"content\"), content, { isReadonly }),\n ...(itemContent ? [itemContent] : []),\n ]);\n}\n"],"names":["documentEntries","createRef","contentEntryType","documentMember","irProperty","toPropertyName","irKeyword","irObject","itemContentMember"],"mappings":";;;;;;;;;AAWA,MAAM,cAAA,GAAiB,KAAA;AAEvB,SAAS,cAAA,CACP,WAAA,EACA,QAAA,EACA,OAAA,EACY;AACZ,EAAA,MAAM,UAAUA,+BAAA,CAAgB,WAAA,CAAY,WAAW,EAAC,EAAG,QAAQ,OAAO,CAAA;AAC1E,EAAA,OAAO,QAAQ,GAAA,CAAI,CAAC,CAAC,WAAA,EAAa,KAAK,CAAA,KAAM;AAC3C,IAAA,MAAM,OAAOC,qBAAA,CAAU,CAAC,SAAS,IAAA,EAAM,SAAA,EAAW,WAAW,CAAC,CAAA;AAC9D,IAAA,MAAM,IAAA,GAAOC,2BAAiB,KAAA,EAAO,EAAE,GAAG,QAAA,EAAU,IAAA,IAAQ,OAAO,CAAA;AACnE,IAAA,OAAOC,6BAAA,CAAe,aAAa,IAAA,EAAM,KAAA,EAAO,EAAE,UAAA,EAAY,OAAA,CAAQ,OAAA,CAAQ,SAAA,EAAW,CAAA;AAAA,EAC3F,CAAC,CAAA;AACH;AAMO,SAAS,eAAA,CACd,WAAA,EACA,QAAA,EACA,OAAA,EACQ;AACR,EAAA,MAAM,OAAA,GAAU,cAAA,CAAe,WAAA,EAAa,QAAA,EAAU,OAAO,CAAA;AAE7D,EAAA,MAAM,cAAcC,uBAAA,CAAWC,2BAAA,CAAe,cAAc,CAAA,EAAGC,sBAAA,CAAU,OAAO,CAAA,EAAG;AAAA,IACjF,UAAA,EAAY;AAAA,GACb,CAAA;AACD,EAAA,MAAM,OAAA,GAAUC,sBAAS,OAAA,CAAQ,MAAA,GAAS,IAAI,OAAA,GAAU,CAAC,WAAW,CAAC,CAAA;AACrE,EAAA,MAAM,UAAA,GAAa,QAAQ,OAAA,CAAQ,SAAA;AACnC,EAAA,MAAM,cAAcC,2BAAA,CAAkB,WAAA,CAAY,WAAW,EAAC,EAAG,UAAU,OAAA,EAAS;AAAA,IAClF;AAAA,GACD,CAAA;AACD,EAAA,OAAOD,qBAAA,CAAS;AAAA,IACdH,wBAAWC,2BAAA,CAAe,SAAS,GAAG,OAAA,EAAS,EAAE,YAAY,CAAA;AAAA,IAC7D,GAAI,WAAA,GAAc,CAAC,WAAW,IAAI;AAAC,GACpC,CAAA;AACH;;"}
@@ -0,0 +1,34 @@
1
+ import { irProperty, irKeyword, irObject } from '../../../domain/ir/constructors.mjs';
2
+ import { toPropertyName } from '../../../domain/ir/property-name.mjs';
3
+ import { createRef } from '../../../domain/openapi/json-pointer.mjs';
4
+ import { documentEntries } from '../document-entries.mjs';
5
+ import { documentMember } from './document-member.mjs';
6
+ import { itemContentMember, contentEntryType } from './media-type.mjs';
7
+
8
+ const ANY_MEDIA_TYPE = "*/*";
9
+ function contentMembers(requestBody, location, context) {
10
+ const entries = documentEntries(requestBody.content ?? {}, context.options);
11
+ return entries.map(([contentType, entry]) => {
12
+ const path = createRef([location.path, "content", contentType]);
13
+ const type = contentEntryType(entry, { ...location, path }, context);
14
+ return documentMember(contentType, type, entry, { isReadonly: context.options.immutable });
15
+ });
16
+ }
17
+ function requestBodyType(requestBody, location, context) {
18
+ const members = contentMembers(requestBody, location, context);
19
+ const placeholder = irProperty(toPropertyName(ANY_MEDIA_TYPE), irKeyword("never"), {
20
+ isOptional: true
21
+ });
22
+ const content = irObject(members.length > 0 ? members : [placeholder]);
23
+ const isReadonly = context.options.immutable;
24
+ const itemContent = itemContentMember(requestBody.content ?? {}, location, context, {
25
+ isReadonly
26
+ });
27
+ return irObject([
28
+ irProperty(toPropertyName("content"), content, { isReadonly }),
29
+ ...itemContent ? [itemContent] : []
30
+ ]);
31
+ }
32
+
33
+ export { requestBodyType };
34
+ //# sourceMappingURL=request-body.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-body.mjs","sources":["../../../../src/application/transform/document/request-body.ts"],"sourcesContent":["import { irKeyword, irObject, irProperty } from \"../../../domain/ir/constructors.js\";\nimport type { IrMember, IrType } from \"../../../domain/ir/nodes.js\";\nimport { toPropertyName } from \"../../../domain/ir/property-name.js\";\nimport { createRef } from \"../../../domain/openapi/json-pointer.js\";\nimport type { RequestBodyObject } from \"../../../domain/openapi/request-body-object.js\";\nimport { documentEntries } from \"../document-entries.js\";\nimport type { SchemaContext, SchemaLocation } from \"../schema/schema-context.js\";\nimport { documentMember } from \"./document-member.js\";\nimport { contentEntryType, itemContentMember } from \"./media-type.js\";\n\n/** Stands in for the media types of a body that defines none: `\"*\\/*\"?: never`. */\nconst ANY_MEDIA_TYPE = \"*/*\";\n\nfunction contentMembers(\n requestBody: RequestBodyObject,\n location: SchemaLocation,\n context: SchemaContext,\n): IrMember[] {\n const entries = documentEntries(requestBody.content ?? {}, context.options);\n return entries.map(([contentType, entry]) => {\n const path = createRef([location.path, \"content\", contentType]);\n const type = contentEntryType(entry, { ...location, path }, context);\n return documentMember(contentType, type, entry, { isReadonly: context.options.immutable });\n });\n}\n\n/**\n * A request body (OpenAPI 3.2 §4.8.13): `{ content: { [mediaType]: T } }`, and `itemContent` when a\n * media type has an `itemSchema`.\n */\nexport function requestBodyType(\n requestBody: RequestBodyObject,\n location: SchemaLocation,\n context: SchemaContext,\n): IrType {\n const members = contentMembers(requestBody, location, context);\n // The placeholder is never readonly, even with --immutable, as in the original.\n const placeholder = irProperty(toPropertyName(ANY_MEDIA_TYPE), irKeyword(\"never\"), {\n isOptional: true,\n });\n const content = irObject(members.length > 0 ? members : [placeholder]);\n const isReadonly = context.options.immutable;\n const itemContent = itemContentMember(requestBody.content ?? {}, location, context, {\n isReadonly,\n });\n return irObject([\n irProperty(toPropertyName(\"content\"), content, { isReadonly }),\n ...(itemContent ? [itemContent] : []),\n ]);\n}\n"],"names":[],"mappings":";;;;;;;AAWA,MAAM,cAAA,GAAiB,KAAA;AAEvB,SAAS,cAAA,CACP,WAAA,EACA,QAAA,EACA,OAAA,EACY;AACZ,EAAA,MAAM,UAAU,eAAA,CAAgB,WAAA,CAAY,WAAW,EAAC,EAAG,QAAQ,OAAO,CAAA;AAC1E,EAAA,OAAO,QAAQ,GAAA,CAAI,CAAC,CAAC,WAAA,EAAa,KAAK,CAAA,KAAM;AAC3C,IAAA,MAAM,OAAO,SAAA,CAAU,CAAC,SAAS,IAAA,EAAM,SAAA,EAAW,WAAW,CAAC,CAAA;AAC9D,IAAA,MAAM,IAAA,GAAO,iBAAiB,KAAA,EAAO,EAAE,GAAG,QAAA,EAAU,IAAA,IAAQ,OAAO,CAAA;AACnE,IAAA,OAAO,cAAA,CAAe,aAAa,IAAA,EAAM,KAAA,EAAO,EAAE,UAAA,EAAY,OAAA,CAAQ,OAAA,CAAQ,SAAA,EAAW,CAAA;AAAA,EAC3F,CAAC,CAAA;AACH;AAMO,SAAS,eAAA,CACd,WAAA,EACA,QAAA,EACA,OAAA,EACQ;AACR,EAAA,MAAM,OAAA,GAAU,cAAA,CAAe,WAAA,EAAa,QAAA,EAAU,OAAO,CAAA;AAE7D,EAAA,MAAM,cAAc,UAAA,CAAW,cAAA,CAAe,cAAc,CAAA,EAAG,SAAA,CAAU,OAAO,CAAA,EAAG;AAAA,IACjF,UAAA,EAAY;AAAA,GACb,CAAA;AACD,EAAA,MAAM,OAAA,GAAU,SAAS,OAAA,CAAQ,MAAA,GAAS,IAAI,OAAA,GAAU,CAAC,WAAW,CAAC,CAAA;AACrE,EAAA,MAAM,UAAA,GAAa,QAAQ,OAAA,CAAQ,SAAA;AACnC,EAAA,MAAM,cAAc,iBAAA,CAAkB,WAAA,CAAY,WAAW,EAAC,EAAG,UAAU,OAAA,EAAS;AAAA,IAClF;AAAA,GACD,CAAA;AACD,EAAA,OAAO,QAAA,CAAS;AAAA,IACd,WAAW,cAAA,CAAe,SAAS,GAAG,OAAA,EAAS,EAAE,YAAY,CAAA;AAAA,IAC7D,GAAI,WAAA,GAAc,CAAC,WAAW,IAAI;AAAC,GACpC,CAAA;AACH;;"}
@@ -0,0 +1,59 @@
1
+ 'use strict';
2
+
3
+ const constructors = require('../../../domain/ir/constructors.cjs');
4
+ const propertyName = require('../../../domain/ir/property-name.cjs');
5
+ const jsonPointer = require('../../../domain/openapi/json-pointer.cjs');
6
+ const mediaTypeObject = require('../../../domain/openapi/media-type-object.cjs');
7
+ const documentEntries = require('../document-entries.cjs');
8
+ const refType = require('../ref-type.cjs');
9
+ const sharedTypes = require('../shared-types.cjs');
10
+ const documentMember = require('./document-member.cjs');
11
+ const header = require('./header.cjs');
12
+ const mediaType = require('./media-type.cjs');
13
+
14
+ function headerMember(name, header$1, location, context) {
15
+ const isReference = "$ref" in header$1;
16
+ const type = isReference ? refType.refType(header$1.$ref) : header.headerType(
17
+ header$1,
18
+ { ...location, path: jsonPointer.createRef([location.path, "headers", name]) },
19
+ context
20
+ );
21
+ return documentMember.documentMember(name, type, header$1, {
22
+ isReadonly: context.options.immutable,
23
+ isOptional: !isReference && !header$1.required
24
+ });
25
+ }
26
+ function headersMember(response, location, context) {
27
+ const entries = documentEntries.documentEntries(response.headers ?? {}, context.options);
28
+ const members = entries.map(
29
+ ([name, header]) => headerMember(name, header, location, context)
30
+ );
31
+ members.push(constructors.irStringIndexSignature("name", sharedTypes.UNKNOWN_TYPE, context.options.immutable));
32
+ return constructors.irProperty(propertyName.toPropertyName("headers"), constructors.irObject(members));
33
+ }
34
+ function mediaTypeEntryType(entry, location, context) {
35
+ return "$ref" in entry && mediaTypeObject.isMediaTypeComponentRef(entry.$ref) ? mediaType.contentEntryType(entry, location, context) : mediaType.mediaTypeType(entry, location, context);
36
+ }
37
+ function contentMember(response, location, context) {
38
+ const entries = documentEntries.documentEntries(response.content ?? {}, context.options);
39
+ const members = entries.map(([contentType, entry]) => {
40
+ const path = jsonPointer.createRef([location.path, "content", contentType]);
41
+ const type = mediaTypeEntryType(entry, { ...location, path }, context);
42
+ return documentMember.documentMember(contentType, type, entry, { isReadonly: context.options.immutable });
43
+ });
44
+ const name = propertyName.toPropertyName("content");
45
+ return members.length > 0 ? constructors.irProperty(name, constructors.irObject(members)) : constructors.irProperty(name, constructors.irKeyword("never"), { isOptional: true });
46
+ }
47
+ function responseType(response, location, context) {
48
+ const itemContent = mediaType.itemContentMember(response.content ?? {}, location, context, {
49
+ isReadonly: false
50
+ });
51
+ return constructors.irObject([
52
+ headersMember(response, location, context),
53
+ contentMember(response, location, context),
54
+ ...itemContent ? [itemContent] : []
55
+ ]);
56
+ }
57
+
58
+ exports.responseType = responseType;
59
+ //# sourceMappingURL=response.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response.cjs","sources":["../../../../src/application/transform/document/response.ts"],"sourcesContent":["import {\n irKeyword,\n irObject,\n irProperty,\n irStringIndexSignature,\n} from \"../../../domain/ir/constructors.js\";\nimport type { IrMember, IrPropertySignature, IrType } from \"../../../domain/ir/nodes.js\";\nimport { toPropertyName } from \"../../../domain/ir/property-name.js\";\nimport { createRef } from \"../../../domain/openapi/json-pointer.js\";\nimport {\n isMediaTypeComponentRef,\n type MediaTypeObject,\n} from \"../../../domain/openapi/media-type-object.js\";\nimport type { ResponseObject } from \"../../../domain/openapi/response-object.js\";\nimport { documentEntries } from \"../document-entries.js\";\nimport { refType } from \"../ref-type.js\";\nimport type { SchemaContext, SchemaLocation } from \"../schema/schema-context.js\";\nimport { UNKNOWN_TYPE } from \"../shared-types.js\";\nimport { documentMember } from \"./document-member.js\";\nimport { headerType } from \"./header.js\";\nimport { contentEntryType, itemContentMember, mediaTypeType } from \"./media-type.js\";\n\ntype HeaderEntry = NonNullable<ResponseObject[\"headers\"]>[string];\n\nfunction headerMember(\n name: string,\n header: HeaderEntry,\n location: SchemaLocation,\n context: SchemaContext,\n): IrPropertySignature {\n // A referenced header counts as required: the reference does not say otherwise.\n const isReference = \"$ref\" in header;\n const type = isReference\n ? refType(header.$ref)\n : headerType(\n header,\n { ...location, path: createRef([location.path, \"headers\", name]) },\n context,\n );\n return documentMember(name, type, header, {\n isReadonly: context.options.immutable,\n isOptional: !isReference && !header.required,\n });\n}\n\n/** The listed headers, then `[name: string]: unknown`, because servers may send others. */\nfunction headersMember(\n response: ResponseObject,\n location: SchemaLocation,\n context: SchemaContext,\n): IrPropertySignature {\n const entries = documentEntries(response.headers ?? {}, context.options);\n const members: IrMember[] = entries.map(([name, header]) =>\n headerMember(name, header, location, context),\n );\n members.push(irStringIndexSignature(\"name\", UNKNOWN_TYPE, context.options.immutable));\n return irProperty(toPropertyName(\"headers\"), irObject(members));\n}\n\n/**\n * One media type of a response. The original reads a `$ref` entry as a media type without a\n * schema, so it is `unknown`; a `$ref` to an OpenAPI 3.2 media type component is typed as it.\n */\nfunction mediaTypeEntryType(\n entry: NonNullable<ResponseObject[\"content\"]>[string],\n location: SchemaLocation,\n context: SchemaContext,\n): IrType {\n return \"$ref\" in entry && isMediaTypeComponentRef(entry.$ref)\n ? contentEntryType(entry, location, context)\n : mediaTypeType(entry as MediaTypeObject, location, context);\n}\n\n/** `content` with one member per media type, or `content?: never` when there are none. */\nfunction contentMember(\n response: ResponseObject,\n location: SchemaLocation,\n context: SchemaContext,\n): IrPropertySignature {\n const entries = documentEntries(response.content ?? {}, context.options);\n const members = entries.map(([contentType, entry]) => {\n const path = createRef([location.path, \"content\", contentType]);\n const type = mediaTypeEntryType(entry, { ...location, path }, context);\n return documentMember(contentType, type, entry, { isReadonly: context.options.immutable });\n });\n const name = toPropertyName(\"content\");\n return members.length > 0\n ? irProperty(name, irObject(members))\n : irProperty(name, irKeyword(\"never\"), { isOptional: true });\n}\n\n/**\n * A response (OpenAPI 3.2 §4.8.17): `{ headers: {…}; content: {…} }`, and `itemContent` when a\n * media type has an `itemSchema`. No member is readonly, even with --immutable, as in the original.\n */\nexport function responseType(\n response: ResponseObject,\n location: SchemaLocation,\n context: SchemaContext,\n): IrType {\n const itemContent = itemContentMember(response.content ?? {}, location, context, {\n isReadonly: false,\n });\n return irObject([\n headersMember(response, location, context),\n contentMember(response, location, context),\n ...(itemContent ? [itemContent] : []),\n ]);\n}\n"],"names":["header","refType","headerType","createRef","documentMember","documentEntries","irStringIndexSignature","UNKNOWN_TYPE","irProperty","toPropertyName","irObject","isMediaTypeComponentRef","contentEntryType","mediaTypeType","irKeyword","itemContentMember"],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ import { irObject, irStringIndexSignature, irProperty, irKeyword } from '../../../domain/ir/constructors.mjs';
2
+ import { toPropertyName } from '../../../domain/ir/property-name.mjs';
3
+ import { createRef } from '../../../domain/openapi/json-pointer.mjs';
4
+ import { isMediaTypeComponentRef } from '../../../domain/openapi/media-type-object.mjs';
5
+ import { documentEntries } from '../document-entries.mjs';
6
+ import { refType } from '../ref-type.mjs';
7
+ import { UNKNOWN_TYPE } from '../shared-types.mjs';
8
+ import { documentMember } from './document-member.mjs';
9
+ import { headerType } from './header.mjs';
10
+ import { itemContentMember, contentEntryType, mediaTypeType } from './media-type.mjs';
11
+
12
+ function headerMember(name, header, location, context) {
13
+ const isReference = "$ref" in header;
14
+ const type = isReference ? refType(header.$ref) : headerType(
15
+ header,
16
+ { ...location, path: createRef([location.path, "headers", name]) },
17
+ context
18
+ );
19
+ return documentMember(name, type, header, {
20
+ isReadonly: context.options.immutable,
21
+ isOptional: !isReference && !header.required
22
+ });
23
+ }
24
+ function headersMember(response, location, context) {
25
+ const entries = documentEntries(response.headers ?? {}, context.options);
26
+ const members = entries.map(
27
+ ([name, header]) => headerMember(name, header, location, context)
28
+ );
29
+ members.push(irStringIndexSignature("name", UNKNOWN_TYPE, context.options.immutable));
30
+ return irProperty(toPropertyName("headers"), irObject(members));
31
+ }
32
+ function mediaTypeEntryType(entry, location, context) {
33
+ return "$ref" in entry && isMediaTypeComponentRef(entry.$ref) ? contentEntryType(entry, location, context) : mediaTypeType(entry, location, context);
34
+ }
35
+ function contentMember(response, location, context) {
36
+ const entries = documentEntries(response.content ?? {}, context.options);
37
+ const members = entries.map(([contentType, entry]) => {
38
+ const path = createRef([location.path, "content", contentType]);
39
+ const type = mediaTypeEntryType(entry, { ...location, path }, context);
40
+ return documentMember(contentType, type, entry, { isReadonly: context.options.immutable });
41
+ });
42
+ const name = toPropertyName("content");
43
+ return members.length > 0 ? irProperty(name, irObject(members)) : irProperty(name, irKeyword("never"), { isOptional: true });
44
+ }
45
+ function responseType(response, location, context) {
46
+ const itemContent = itemContentMember(response.content ?? {}, location, context, {
47
+ isReadonly: false
48
+ });
49
+ return irObject([
50
+ headersMember(response, location, context),
51
+ contentMember(response, location, context),
52
+ ...itemContent ? [itemContent] : []
53
+ ]);
54
+ }
55
+
56
+ export { responseType };
57
+ //# sourceMappingURL=response.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response.mjs","sources":["../../../../src/application/transform/document/response.ts"],"sourcesContent":["import {\n irKeyword,\n irObject,\n irProperty,\n irStringIndexSignature,\n} from \"../../../domain/ir/constructors.js\";\nimport type { IrMember, IrPropertySignature, IrType } from \"../../../domain/ir/nodes.js\";\nimport { toPropertyName } from \"../../../domain/ir/property-name.js\";\nimport { createRef } from \"../../../domain/openapi/json-pointer.js\";\nimport {\n isMediaTypeComponentRef,\n type MediaTypeObject,\n} from \"../../../domain/openapi/media-type-object.js\";\nimport type { ResponseObject } from \"../../../domain/openapi/response-object.js\";\nimport { documentEntries } from \"../document-entries.js\";\nimport { refType } from \"../ref-type.js\";\nimport type { SchemaContext, SchemaLocation } from \"../schema/schema-context.js\";\nimport { UNKNOWN_TYPE } from \"../shared-types.js\";\nimport { documentMember } from \"./document-member.js\";\nimport { headerType } from \"./header.js\";\nimport { contentEntryType, itemContentMember, mediaTypeType } from \"./media-type.js\";\n\ntype HeaderEntry = NonNullable<ResponseObject[\"headers\"]>[string];\n\nfunction headerMember(\n name: string,\n header: HeaderEntry,\n location: SchemaLocation,\n context: SchemaContext,\n): IrPropertySignature {\n // A referenced header counts as required: the reference does not say otherwise.\n const isReference = \"$ref\" in header;\n const type = isReference\n ? refType(header.$ref)\n : headerType(\n header,\n { ...location, path: createRef([location.path, \"headers\", name]) },\n context,\n );\n return documentMember(name, type, header, {\n isReadonly: context.options.immutable,\n isOptional: !isReference && !header.required,\n });\n}\n\n/** The listed headers, then `[name: string]: unknown`, because servers may send others. */\nfunction headersMember(\n response: ResponseObject,\n location: SchemaLocation,\n context: SchemaContext,\n): IrPropertySignature {\n const entries = documentEntries(response.headers ?? {}, context.options);\n const members: IrMember[] = entries.map(([name, header]) =>\n headerMember(name, header, location, context),\n );\n members.push(irStringIndexSignature(\"name\", UNKNOWN_TYPE, context.options.immutable));\n return irProperty(toPropertyName(\"headers\"), irObject(members));\n}\n\n/**\n * One media type of a response. The original reads a `$ref` entry as a media type without a\n * schema, so it is `unknown`; a `$ref` to an OpenAPI 3.2 media type component is typed as it.\n */\nfunction mediaTypeEntryType(\n entry: NonNullable<ResponseObject[\"content\"]>[string],\n location: SchemaLocation,\n context: SchemaContext,\n): IrType {\n return \"$ref\" in entry && isMediaTypeComponentRef(entry.$ref)\n ? contentEntryType(entry, location, context)\n : mediaTypeType(entry as MediaTypeObject, location, context);\n}\n\n/** `content` with one member per media type, or `content?: never` when there are none. */\nfunction contentMember(\n response: ResponseObject,\n location: SchemaLocation,\n context: SchemaContext,\n): IrPropertySignature {\n const entries = documentEntries(response.content ?? {}, context.options);\n const members = entries.map(([contentType, entry]) => {\n const path = createRef([location.path, \"content\", contentType]);\n const type = mediaTypeEntryType(entry, { ...location, path }, context);\n return documentMember(contentType, type, entry, { isReadonly: context.options.immutable });\n });\n const name = toPropertyName(\"content\");\n return members.length > 0\n ? irProperty(name, irObject(members))\n : irProperty(name, irKeyword(\"never\"), { isOptional: true });\n}\n\n/**\n * A response (OpenAPI 3.2 §4.8.17): `{ headers: {…}; content: {…} }`, and `itemContent` when a\n * media type has an `itemSchema`. No member is readonly, even with --immutable, as in the original.\n */\nexport function responseType(\n response: ResponseObject,\n location: SchemaLocation,\n context: SchemaContext,\n): IrType {\n const itemContent = itemContentMember(response.content ?? {}, location, context, {\n isReadonly: false,\n });\n return irObject([\n headersMember(response, location, context),\n contentMember(response, location, context),\n ...(itemContent ? [itemContent] : []),\n ]);\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ 'use strict';
2
+
3
+ const constructors = require('../../../domain/ir/constructors.cjs');
4
+ const jsonPointer = require('../../../domain/openapi/json-pointer.cjs');
5
+ const documentEntries = require('../document-entries.cjs');
6
+ const refType = require('../ref-type.cjs');
7
+ const documentMember = require('./document-member.cjs');
8
+ const response = require('./response.cjs');
9
+
10
+ function responsesType(responses, location, context) {
11
+ const members = documentEntries.documentEntries(responses, context.options).map(([code, response$1]) => {
12
+ const type = "$ref" in response$1 ? refType.refType(response$1.$ref) : response.responseType(
13
+ response$1,
14
+ { ...location, path: jsonPointer.createRef([location.path, "responses", code]) },
15
+ context
16
+ );
17
+ return documentMember.documentMember(code, type, response$1, { isReadonly: context.options.immutable });
18
+ });
19
+ return members.length > 0 ? constructors.irObject(members) : constructors.irKeyword("never");
20
+ }
21
+
22
+ exports.responsesType = responsesType;
23
+ //# sourceMappingURL=responses.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"responses.cjs","sources":["../../../../src/application/transform/document/responses.ts"],"sourcesContent":["import { irKeyword, irObject } from \"../../../domain/ir/constructors.js\";\nimport type { IrType } from \"../../../domain/ir/nodes.js\";\nimport { createRef } from \"../../../domain/openapi/json-pointer.js\";\nimport type { ResponsesObject } from \"../../../domain/openapi/response-object.js\";\nimport { documentEntries } from \"../document-entries.js\";\nimport { refType } from \"../ref-type.js\";\nimport type { SchemaContext, SchemaLocation } from \"../schema/schema-context.js\";\nimport { documentMember } from \"./document-member.js\";\nimport { responseType } from \"./response.js\";\n\n/** Responses by status code (OpenAPI 3.1 §4.8.16), or `never` when there are none. */\nexport function responsesType(\n responses: ResponsesObject,\n location: SchemaLocation,\n context: SchemaContext,\n): IrType {\n const members = documentEntries(responses, context.options).map(([code, response]) => {\n const type =\n \"$ref\" in response\n ? refType(response.$ref)\n : responseType(\n response,\n { ...location, path: createRef([location.path, \"responses\", code]) },\n context,\n );\n return documentMember(code, type, response, { isReadonly: context.options.immutable });\n });\n return members.length > 0 ? irObject(members) : irKeyword(\"never\");\n}\n"],"names":["documentEntries","response","refType","responseType","createRef","documentMember","irObject","irKeyword"],"mappings":";;;;;;;;;AAWO,SAAS,aAAA,CACd,SAAA,EACA,QAAA,EACA,OAAA,EACQ;AACR,EAAA,MAAM,OAAA,GAAUA,+BAAA,CAAgB,SAAA,EAAW,OAAA,CAAQ,OAAO,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,IAAA,EAAMC,UAAQ,CAAA,KAAM;AACpF,IAAA,MAAM,OACJ,MAAA,IAAUA,UAAA,GACNC,eAAA,CAAQD,UAAA,CAAS,IAAI,CAAA,GACrBE,qBAAA;AAAA,MACEF,UAAA;AAAA,MACA,EAAE,GAAG,QAAA,EAAU,IAAA,EAAMG,qBAAA,CAAU,CAAC,QAAA,CAAS,IAAA,EAAM,WAAA,EAAa,IAAI,CAAC,CAAA,EAAE;AAAA,MACnE;AAAA,KACF;AACN,IAAA,OAAOC,6BAAA,CAAe,MAAM,IAAA,EAAMJ,UAAA,EAAU,EAAE,UAAA,EAAY,OAAA,CAAQ,OAAA,CAAQ,SAAA,EAAW,CAAA;AAAA,EACvF,CAAC,CAAA;AACD,EAAA,OAAO,QAAQ,MAAA,GAAS,CAAA,GAAIK,sBAAS,OAAO,CAAA,GAAIC,uBAAU,OAAO,CAAA;AACnE;;"}
@@ -0,0 +1,21 @@
1
+ import { irObject, irKeyword } from '../../../domain/ir/constructors.mjs';
2
+ import { createRef } from '../../../domain/openapi/json-pointer.mjs';
3
+ import { documentEntries } from '../document-entries.mjs';
4
+ import { refType } from '../ref-type.mjs';
5
+ import { documentMember } from './document-member.mjs';
6
+ import { responseType } from './response.mjs';
7
+
8
+ function responsesType(responses, location, context) {
9
+ const members = documentEntries(responses, context.options).map(([code, response]) => {
10
+ const type = "$ref" in response ? refType(response.$ref) : responseType(
11
+ response,
12
+ { ...location, path: createRef([location.path, "responses", code]) },
13
+ context
14
+ );
15
+ return documentMember(code, type, response, { isReadonly: context.options.immutable });
16
+ });
17
+ return members.length > 0 ? irObject(members) : irKeyword("never");
18
+ }
19
+
20
+ export { responsesType };
21
+ //# sourceMappingURL=responses.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"responses.mjs","sources":["../../../../src/application/transform/document/responses.ts"],"sourcesContent":["import { irKeyword, irObject } from \"../../../domain/ir/constructors.js\";\nimport type { IrType } from \"../../../domain/ir/nodes.js\";\nimport { createRef } from \"../../../domain/openapi/json-pointer.js\";\nimport type { ResponsesObject } from \"../../../domain/openapi/response-object.js\";\nimport { documentEntries } from \"../document-entries.js\";\nimport { refType } from \"../ref-type.js\";\nimport type { SchemaContext, SchemaLocation } from \"../schema/schema-context.js\";\nimport { documentMember } from \"./document-member.js\";\nimport { responseType } from \"./response.js\";\n\n/** Responses by status code (OpenAPI 3.1 §4.8.16), or `never` when there are none. */\nexport function responsesType(\n responses: ResponsesObject,\n location: SchemaLocation,\n context: SchemaContext,\n): IrType {\n const members = documentEntries(responses, context.options).map(([code, response]) => {\n const type =\n \"$ref\" in response\n ? refType(response.$ref)\n : responseType(\n response,\n { ...location, path: createRef([location.path, \"responses\", code]) },\n context,\n );\n return documentMember(code, type, response, { isReadonly: context.options.immutable });\n });\n return members.length > 0 ? irObject(members) : irKeyword(\"never\");\n}\n"],"names":[],"mappings":";;;;;;;AAWO,SAAS,aAAA,CACd,SAAA,EACA,QAAA,EACA,OAAA,EACQ;AACR,EAAA,MAAM,OAAA,GAAU,eAAA,CAAgB,SAAA,EAAW,OAAA,CAAQ,OAAO,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,IAAA,EAAM,QAAQ,CAAA,KAAM;AACpF,IAAA,MAAM,OACJ,MAAA,IAAU,QAAA,GACN,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA,GACrB,YAAA;AAAA,MACE,QAAA;AAAA,MACA,EAAE,GAAG,QAAA,EAAU,IAAA,EAAM,SAAA,CAAU,CAAC,QAAA,CAAS,IAAA,EAAM,WAAA,EAAa,IAAI,CAAC,CAAA,EAAE;AAAA,MACnE;AAAA,KACF;AACN,IAAA,OAAO,cAAA,CAAe,MAAM,IAAA,EAAM,QAAA,EAAU,EAAE,UAAA,EAAY,OAAA,CAAQ,OAAA,CAAQ,SAAA,EAAW,CAAA;AAAA,EACvF,CAAC,CAAA;AACD,EAAA,OAAO,QAAQ,MAAA,GAAS,CAAA,GAAI,SAAS,OAAO,CAAA,GAAI,UAAU,OAAO,CAAA;AACnE;;"}
@@ -0,0 +1,69 @@
1
+ 'use strict';
2
+
3
+ const constructors = require('../../../domain/ir/constructors.cjs');
4
+ const rawTextEscapes = require('../../../domain/ir/raw-text-escapes.cjs');
5
+
6
+ const REFERENCE_PREFIX = "components['";
7
+ function rootTypeAlias(name, kind, item) {
8
+ return {
9
+ kind: "typeAlias",
10
+ name,
11
+ isExported: true,
12
+ // The original writes the reference as text, with single quotes, and did not escape the
13
+ // name: a quote in it could add code to the generated file (intentional fix).
14
+ type: constructors.irRaw(`${REFERENCE_PREFIX}${kind}']['${rawTextEscapes.escapeSingleQuotedText(item)}']`),
15
+ comments: []
16
+ };
17
+ }
18
+ function isRootTypeAlias(declaration) {
19
+ return declaration.kind === "typeAlias" && declaration.type.kind === "raw" && declaration.type.text.startsWith(REFERENCE_PREFIX);
20
+ }
21
+ function footerTypeNames(declarations) {
22
+ return new Set(
23
+ declarations.flatMap((declaration) => {
24
+ if (declaration.kind === "enum") {
25
+ return [declaration.name];
26
+ }
27
+ return declaration.kind === "rawDeclaration" && declaration.name !== void 0 ? [declaration.name] : [];
28
+ })
29
+ );
30
+ }
31
+ function declaredNames(declarations) {
32
+ return new Set(
33
+ declarations.flatMap(
34
+ (declaration) => "name" in declaration && declaration.name !== void 0 ? [declaration.name] : []
35
+ )
36
+ );
37
+ }
38
+ function freeName(name, taken) {
39
+ let candidate = `${name}_2`;
40
+ for (let counter = 3; taken.has(candidate); counter++) {
41
+ candidate = `${name}_${counter}`;
42
+ }
43
+ return candidate;
44
+ }
45
+ function numberDisplacedAliases(displaced, kept) {
46
+ const taken = new Set(kept.map((alias) => alias.name));
47
+ return displaced.map((alias) => {
48
+ const name = freeName(alias.name, taken);
49
+ taken.add(name);
50
+ return { ...alias, name };
51
+ });
52
+ }
53
+ function renameAliasesTakenByFooter(body, footer) {
54
+ const footerNames = footerTypeNames(footer);
55
+ const taken = declaredNames([...body, ...footer]);
56
+ return body.map((declaration) => {
57
+ if (!isRootTypeAlias(declaration) || !footerNames.has(declaration.name)) {
58
+ return declaration;
59
+ }
60
+ const name = freeName(declaration.name, taken);
61
+ taken.add(name);
62
+ return { ...declaration, name };
63
+ });
64
+ }
65
+
66
+ exports.numberDisplacedAliases = numberDisplacedAliases;
67
+ exports.renameAliasesTakenByFooter = renameAliasesTakenByFooter;
68
+ exports.rootTypeAlias = rootTypeAlias;
69
+ //# sourceMappingURL=root-type-aliases.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"root-type-aliases.cjs","sources":["../../../../src/application/transform/document/root-type-aliases.ts"],"sourcesContent":["import { irRaw } from \"../../../domain/ir/constructors.js\";\nimport type { IrDeclaration, IrTypeAliasDeclaration } from \"../../../domain/ir/nodes.js\";\nimport { escapeSingleQuotedText } from \"../../../domain/ir/raw-text-escapes.js\";\nimport type { ComponentKind } from \"../../../domain/openapi/components-object.js\";\n\n/** The `--root-types` aliases: `export type Pet = components['schemas']['Pet'];`. */\n\nconst REFERENCE_PREFIX = \"components['\";\n\n/** The alias of one component. */\nexport function rootTypeAlias(\n name: string,\n kind: ComponentKind,\n item: string,\n): IrTypeAliasDeclaration {\n return {\n kind: \"typeAlias\",\n name,\n isExported: true,\n // The original writes the reference as text, with single quotes, and did not escape the\n // name: a quote in it could add code to the generated file (intentional fix).\n type: irRaw(`${REFERENCE_PREFIX}${kind}']['${escapeSingleQuotedText(item)}']`),\n comments: [],\n };\n}\n\nfunction isRootTypeAlias(declaration: IrDeclaration): declaration is IrTypeAliasDeclaration {\n return (\n declaration.kind === \"typeAlias\" &&\n declaration.type.kind === \"raw\" &&\n declaration.type.text.startsWith(REFERENCE_PREFIX)\n );\n}\n\n/**\n * The type names the footer declares that an alias must not take: enums, and helper types such as\n * `WithRequired`. Value declarations (`--enum-values` arrays) live in another namespace.\n */\nfunction footerTypeNames(declarations: readonly IrDeclaration[]): Set<string> {\n return new Set(\n declarations.flatMap((declaration) => {\n if (declaration.kind === \"enum\") {\n return [declaration.name];\n }\n return declaration.kind === \"rawDeclaration\" && declaration.name !== undefined\n ? [declaration.name]\n : [];\n }),\n );\n}\n\nfunction declaredNames(declarations: readonly IrDeclaration[]): Set<string> {\n return new Set(\n declarations.flatMap((declaration) =>\n \"name\" in declaration && declaration.name !== undefined ? [declaration.name] : [],\n ),\n );\n}\n\nfunction freeName(name: string, taken: ReadonlySet<string>): string {\n let candidate = `${name}_2`;\n for (let counter = 3; taken.has(candidate); counter++) {\n candidate = `${name}_${counter}`;\n }\n return candidate;\n}\n\n/**\n * With the `root-type-numbering` fix (ADR-021, roadmap R13, backlog 30): the aliases that a later\n * schema of one exported name took the name from, numbered `Name_2`, `Name_3`, … in document order\n * with the next free number. The later schema keeps the name, so the fix only adds exports.\n */\nexport function numberDisplacedAliases(\n displaced: readonly IrTypeAliasDeclaration[],\n kept: readonly IrTypeAliasDeclaration[],\n): IrTypeAliasDeclaration[] {\n const taken = new Set(kept.map((alias) => alias.name));\n return displaced.map((alias) => {\n const name = freeName(alias.name, taken);\n taken.add(name);\n return { ...alias, name };\n });\n}\n\n/**\n * Rename each root alias whose name an enum or a helper type of the footer also declares, to the\n * next free `Name_2`, `Name_3`, … (the suffix `--root-types` uses for its own conflicts). The\n * footer keeps its names, because the generated types refer to them. Before, both were declared\n * under one name, which does not compile (enums: upstream #2099, #2341, #2206; helpers: a schema\n * named `WithRequired`, roadmap R11). Other declarations are returned unchanged.\n */\nexport function renameAliasesTakenByFooter(\n body: readonly IrDeclaration[],\n footer: readonly IrDeclaration[],\n): IrDeclaration[] {\n const footerNames = footerTypeNames(footer);\n const taken = declaredNames([...body, ...footer]);\n return body.map((declaration) => {\n if (!isRootTypeAlias(declaration) || !footerNames.has(declaration.name)) {\n return declaration;\n }\n const name = freeName(declaration.name, taken);\n taken.add(name);\n return { ...declaration, name };\n });\n}\n"],"names":["irRaw","escapeSingleQuotedText"],"mappings":";;;;;AAOA,MAAM,gBAAA,GAAmB,cAAA;AAGlB,SAAS,aAAA,CACd,IAAA,EACA,IAAA,EACA,IAAA,EACwB;AACxB,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,WAAA;AAAA,IACN,IAAA;AAAA,IACA,UAAA,EAAY,IAAA;AAAA;AAAA;AAAA,IAGZ,IAAA,EAAMA,kBAAA,CAAM,CAAA,EAAG,gBAAgB,CAAA,EAAG,IAAI,CAAA,IAAA,EAAOC,qCAAA,CAAuB,IAAI,CAAC,CAAA,EAAA,CAAI,CAAA;AAAA,IAC7E,UAAU;AAAC,GACb;AACF;AAEA,SAAS,gBAAgB,WAAA,EAAmE;AAC1F,EAAA,OACE,WAAA,CAAY,IAAA,KAAS,WAAA,IACrB,WAAA,CAAY,IAAA,CAAK,IAAA,KAAS,KAAA,IAC1B,WAAA,CAAY,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,gBAAgB,CAAA;AAErD;AAMA,SAAS,gBAAgB,YAAA,EAAqD;AAC5E,EAAA,OAAO,IAAI,GAAA;AAAA,IACT,YAAA,CAAa,OAAA,CAAQ,CAAC,WAAA,KAAgB;AACpC,MAAA,IAAI,WAAA,CAAY,SAAS,MAAA,EAAQ;AAC/B,QAAA,OAAO,CAAC,YAAY,IAAI,CAAA;AAAA,MAC1B;AACA,MAAA,OAAO,WAAA,CAAY,IAAA,KAAS,gBAAA,IAAoB,WAAA,CAAY,IAAA,KAAS,SACjE,CAAC,WAAA,CAAY,IAAI,CAAA,GACjB,EAAC;AAAA,IACP,CAAC;AAAA,GACH;AACF;AAEA,SAAS,cAAc,YAAA,EAAqD;AAC1E,EAAA,OAAO,IAAI,GAAA;AAAA,IACT,YAAA,CAAa,OAAA;AAAA,MAAQ,CAAC,WAAA,KACpB,MAAA,IAAU,WAAA,IAAe,WAAA,CAAY,IAAA,KAAS,MAAA,GAAY,CAAC,WAAA,CAAY,IAAI,CAAA,GAAI;AAAC;AAClF,GACF;AACF;AAEA,SAAS,QAAA,CAAS,MAAc,KAAA,EAAoC;AAClE,EAAA,IAAI,SAAA,GAAY,GAAG,IAAI,CAAA,EAAA,CAAA;AACvB,EAAA,KAAA,IAAS,UAAU,CAAA,EAAG,KAAA,CAAM,GAAA,CAAI,SAAS,GAAG,OAAA,EAAA,EAAW;AACrD,IAAA,SAAA,GAAY,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA;AAAA,EAChC;AACA,EAAA,OAAO,SAAA;AACT;AAOO,SAAS,sBAAA,CACd,WACA,IAAA,EAC0B;AAC1B,EAAA,MAAM,KAAA,GAAQ,IAAI,GAAA,CAAI,IAAA,CAAK,IAAI,CAAC,KAAA,KAAU,KAAA,CAAM,IAAI,CAAC,CAAA;AACrD,EAAA,OAAO,SAAA,CAAU,GAAA,CAAI,CAAC,KAAA,KAAU;AAC9B,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,KAAA,CAAM,IAAA,EAAM,KAAK,CAAA;AACvC,IAAA,KAAA,CAAM,IAAI,IAAI,CAAA;AACd,IAAA,OAAO,EAAE,GAAG,KAAA,EAAO,IAAA,EAAK;AAAA,EAC1B,CAAC,CAAA;AACH;AASO,SAAS,0BAAA,CACd,MACA,MAAA,EACiB;AACjB,EAAA,MAAM,WAAA,GAAc,gBAAgB,MAAM,CAAA;AAC1C,EAAA,MAAM,QAAQ,aAAA,CAAc,CAAC,GAAG,IAAA,EAAM,GAAG,MAAM,CAAC,CAAA;AAChD,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAC,WAAA,KAAgB;AAC/B,IAAA,IAAI,CAAC,gBAAgB,WAAW,CAAA,IAAK,CAAC,WAAA,CAAY,GAAA,CAAI,WAAA,CAAY,IAAI,CAAA,EAAG;AACvE,MAAA,OAAO,WAAA;AAAA,IACT;AACA,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,WAAA,CAAY,IAAA,EAAM,KAAK,CAAA;AAC7C,IAAA,KAAA,CAAM,IAAI,IAAI,CAAA;AACd,IAAA,OAAO,EAAE,GAAG,WAAA,EAAa,IAAA,EAAK;AAAA,EAChC,CAAC,CAAA;AACH;;;;"}
@@ -0,0 +1,65 @@
1
+ import { irRaw } from '../../../domain/ir/constructors.mjs';
2
+ import { escapeSingleQuotedText } from '../../../domain/ir/raw-text-escapes.mjs';
3
+
4
+ const REFERENCE_PREFIX = "components['";
5
+ function rootTypeAlias(name, kind, item) {
6
+ return {
7
+ kind: "typeAlias",
8
+ name,
9
+ isExported: true,
10
+ // The original writes the reference as text, with single quotes, and did not escape the
11
+ // name: a quote in it could add code to the generated file (intentional fix).
12
+ type: irRaw(`${REFERENCE_PREFIX}${kind}']['${escapeSingleQuotedText(item)}']`),
13
+ comments: []
14
+ };
15
+ }
16
+ function isRootTypeAlias(declaration) {
17
+ return declaration.kind === "typeAlias" && declaration.type.kind === "raw" && declaration.type.text.startsWith(REFERENCE_PREFIX);
18
+ }
19
+ function footerTypeNames(declarations) {
20
+ return new Set(
21
+ declarations.flatMap((declaration) => {
22
+ if (declaration.kind === "enum") {
23
+ return [declaration.name];
24
+ }
25
+ return declaration.kind === "rawDeclaration" && declaration.name !== void 0 ? [declaration.name] : [];
26
+ })
27
+ );
28
+ }
29
+ function declaredNames(declarations) {
30
+ return new Set(
31
+ declarations.flatMap(
32
+ (declaration) => "name" in declaration && declaration.name !== void 0 ? [declaration.name] : []
33
+ )
34
+ );
35
+ }
36
+ function freeName(name, taken) {
37
+ let candidate = `${name}_2`;
38
+ for (let counter = 3; taken.has(candidate); counter++) {
39
+ candidate = `${name}_${counter}`;
40
+ }
41
+ return candidate;
42
+ }
43
+ function numberDisplacedAliases(displaced, kept) {
44
+ const taken = new Set(kept.map((alias) => alias.name));
45
+ return displaced.map((alias) => {
46
+ const name = freeName(alias.name, taken);
47
+ taken.add(name);
48
+ return { ...alias, name };
49
+ });
50
+ }
51
+ function renameAliasesTakenByFooter(body, footer) {
52
+ const footerNames = footerTypeNames(footer);
53
+ const taken = declaredNames([...body, ...footer]);
54
+ return body.map((declaration) => {
55
+ if (!isRootTypeAlias(declaration) || !footerNames.has(declaration.name)) {
56
+ return declaration;
57
+ }
58
+ const name = freeName(declaration.name, taken);
59
+ taken.add(name);
60
+ return { ...declaration, name };
61
+ });
62
+ }
63
+
64
+ export { numberDisplacedAliases, renameAliasesTakenByFooter, rootTypeAlias };
65
+ //# sourceMappingURL=root-type-aliases.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"root-type-aliases.mjs","sources":["../../../../src/application/transform/document/root-type-aliases.ts"],"sourcesContent":["import { irRaw } from \"../../../domain/ir/constructors.js\";\nimport type { IrDeclaration, IrTypeAliasDeclaration } from \"../../../domain/ir/nodes.js\";\nimport { escapeSingleQuotedText } from \"../../../domain/ir/raw-text-escapes.js\";\nimport type { ComponentKind } from \"../../../domain/openapi/components-object.js\";\n\n/** The `--root-types` aliases: `export type Pet = components['schemas']['Pet'];`. */\n\nconst REFERENCE_PREFIX = \"components['\";\n\n/** The alias of one component. */\nexport function rootTypeAlias(\n name: string,\n kind: ComponentKind,\n item: string,\n): IrTypeAliasDeclaration {\n return {\n kind: \"typeAlias\",\n name,\n isExported: true,\n // The original writes the reference as text, with single quotes, and did not escape the\n // name: a quote in it could add code to the generated file (intentional fix).\n type: irRaw(`${REFERENCE_PREFIX}${kind}']['${escapeSingleQuotedText(item)}']`),\n comments: [],\n };\n}\n\nfunction isRootTypeAlias(declaration: IrDeclaration): declaration is IrTypeAliasDeclaration {\n return (\n declaration.kind === \"typeAlias\" &&\n declaration.type.kind === \"raw\" &&\n declaration.type.text.startsWith(REFERENCE_PREFIX)\n );\n}\n\n/**\n * The type names the footer declares that an alias must not take: enums, and helper types such as\n * `WithRequired`. Value declarations (`--enum-values` arrays) live in another namespace.\n */\nfunction footerTypeNames(declarations: readonly IrDeclaration[]): Set<string> {\n return new Set(\n declarations.flatMap((declaration) => {\n if (declaration.kind === \"enum\") {\n return [declaration.name];\n }\n return declaration.kind === \"rawDeclaration\" && declaration.name !== undefined\n ? [declaration.name]\n : [];\n }),\n );\n}\n\nfunction declaredNames(declarations: readonly IrDeclaration[]): Set<string> {\n return new Set(\n declarations.flatMap((declaration) =>\n \"name\" in declaration && declaration.name !== undefined ? [declaration.name] : [],\n ),\n );\n}\n\nfunction freeName(name: string, taken: ReadonlySet<string>): string {\n let candidate = `${name}_2`;\n for (let counter = 3; taken.has(candidate); counter++) {\n candidate = `${name}_${counter}`;\n }\n return candidate;\n}\n\n/**\n * With the `root-type-numbering` fix (ADR-021, roadmap R13, backlog 30): the aliases that a later\n * schema of one exported name took the name from, numbered `Name_2`, `Name_3`, … in document order\n * with the next free number. The later schema keeps the name, so the fix only adds exports.\n */\nexport function numberDisplacedAliases(\n displaced: readonly IrTypeAliasDeclaration[],\n kept: readonly IrTypeAliasDeclaration[],\n): IrTypeAliasDeclaration[] {\n const taken = new Set(kept.map((alias) => alias.name));\n return displaced.map((alias) => {\n const name = freeName(alias.name, taken);\n taken.add(name);\n return { ...alias, name };\n });\n}\n\n/**\n * Rename each root alias whose name an enum or a helper type of the footer also declares, to the\n * next free `Name_2`, `Name_3`, … (the suffix `--root-types` uses for its own conflicts). The\n * footer keeps its names, because the generated types refer to them. Before, both were declared\n * under one name, which does not compile (enums: upstream #2099, #2341, #2206; helpers: a schema\n * named `WithRequired`, roadmap R11). Other declarations are returned unchanged.\n */\nexport function renameAliasesTakenByFooter(\n body: readonly IrDeclaration[],\n footer: readonly IrDeclaration[],\n): IrDeclaration[] {\n const footerNames = footerTypeNames(footer);\n const taken = declaredNames([...body, ...footer]);\n return body.map((declaration) => {\n if (!isRootTypeAlias(declaration) || !footerNames.has(declaration.name)) {\n return declaration;\n }\n const name = freeName(declaration.name, taken);\n taken.add(name);\n return { ...declaration, name };\n });\n}\n"],"names":[],"mappings":";;;AAOA,MAAM,gBAAA,GAAmB,cAAA;AAGlB,SAAS,aAAA,CACd,IAAA,EACA,IAAA,EACA,IAAA,EACwB;AACxB,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,WAAA;AAAA,IACN,IAAA;AAAA,IACA,UAAA,EAAY,IAAA;AAAA;AAAA;AAAA,IAGZ,IAAA,EAAM,KAAA,CAAM,CAAA,EAAG,gBAAgB,CAAA,EAAG,IAAI,CAAA,IAAA,EAAO,sBAAA,CAAuB,IAAI,CAAC,CAAA,EAAA,CAAI,CAAA;AAAA,IAC7E,UAAU;AAAC,GACb;AACF;AAEA,SAAS,gBAAgB,WAAA,EAAmE;AAC1F,EAAA,OACE,WAAA,CAAY,IAAA,KAAS,WAAA,IACrB,WAAA,CAAY,IAAA,CAAK,IAAA,KAAS,KAAA,IAC1B,WAAA,CAAY,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,gBAAgB,CAAA;AAErD;AAMA,SAAS,gBAAgB,YAAA,EAAqD;AAC5E,EAAA,OAAO,IAAI,GAAA;AAAA,IACT,YAAA,CAAa,OAAA,CAAQ,CAAC,WAAA,KAAgB;AACpC,MAAA,IAAI,WAAA,CAAY,SAAS,MAAA,EAAQ;AAC/B,QAAA,OAAO,CAAC,YAAY,IAAI,CAAA;AAAA,MAC1B;AACA,MAAA,OAAO,WAAA,CAAY,IAAA,KAAS,gBAAA,IAAoB,WAAA,CAAY,IAAA,KAAS,SACjE,CAAC,WAAA,CAAY,IAAI,CAAA,GACjB,EAAC;AAAA,IACP,CAAC;AAAA,GACH;AACF;AAEA,SAAS,cAAc,YAAA,EAAqD;AAC1E,EAAA,OAAO,IAAI,GAAA;AAAA,IACT,YAAA,CAAa,OAAA;AAAA,MAAQ,CAAC,WAAA,KACpB,MAAA,IAAU,WAAA,IAAe,WAAA,CAAY,IAAA,KAAS,MAAA,GAAY,CAAC,WAAA,CAAY,IAAI,CAAA,GAAI;AAAC;AAClF,GACF;AACF;AAEA,SAAS,QAAA,CAAS,MAAc,KAAA,EAAoC;AAClE,EAAA,IAAI,SAAA,GAAY,GAAG,IAAI,CAAA,EAAA,CAAA;AACvB,EAAA,KAAA,IAAS,UAAU,CAAA,EAAG,KAAA,CAAM,GAAA,CAAI,SAAS,GAAG,OAAA,EAAA,EAAW;AACrD,IAAA,SAAA,GAAY,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA;AAAA,EAChC;AACA,EAAA,OAAO,SAAA;AACT;AAOO,SAAS,sBAAA,CACd,WACA,IAAA,EAC0B;AAC1B,EAAA,MAAM,KAAA,GAAQ,IAAI,GAAA,CAAI,IAAA,CAAK,IAAI,CAAC,KAAA,KAAU,KAAA,CAAM,IAAI,CAAC,CAAA;AACrD,EAAA,OAAO,SAAA,CAAU,GAAA,CAAI,CAAC,KAAA,KAAU;AAC9B,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,KAAA,CAAM,IAAA,EAAM,KAAK,CAAA;AACvC,IAAA,KAAA,CAAM,IAAI,IAAI,CAAA;AACd,IAAA,OAAO,EAAE,GAAG,KAAA,EAAO,IAAA,EAAK;AAAA,EAC1B,CAAC,CAAA;AACH;AASO,SAAS,0BAAA,CACd,MACA,MAAA,EACiB;AACjB,EAAA,MAAM,WAAA,GAAc,gBAAgB,MAAM,CAAA;AAC1C,EAAA,MAAM,QAAQ,aAAA,CAAc,CAAC,GAAG,IAAA,EAAM,GAAG,MAAM,CAAC,CAAA;AAChD,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAC,WAAA,KAAgB;AAC/B,IAAA,IAAI,CAAC,gBAAgB,WAAW,CAAA,IAAK,CAAC,WAAA,CAAY,GAAA,CAAI,WAAA,CAAY,IAAI,CAAA,EAAG;AACvE,MAAA,OAAO,WAAA;AAAA,IACT;AACA,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,WAAA,CAAY,IAAA,EAAM,KAAK,CAAA;AAC7C,IAAA,KAAA,CAAM,IAAI,IAAI,CAAA;AACd,IAAA,OAAO,EAAE,GAAG,WAAA,EAAa,IAAA,EAAK;AAAA,EAChC,CAAC,CAAA;AACH;;"}
@@ -0,0 +1,19 @@
1
+ 'use strict';
2
+
3
+ const constructors = require('../../../domain/ir/constructors.cjs');
4
+ const propertyName = require('../../../domain/ir/property-name.cjs');
5
+ const jsonPointer = require('../../../domain/openapi/json-pointer.cjs');
6
+ const documentEntries = require('../document-entries.cjs');
7
+ const pathItem = require('./path-item.cjs');
8
+
9
+ function webhooksType(webhooks, context) {
10
+ const members = documentEntries.documentEntries(webhooks, context.options).map(([name, pathItem$1]) => {
11
+ const location = { path: jsonPointer.createRef(["webhooks", name]) };
12
+ const type = pathItem.pathItemType(pathItem$1, location, context);
13
+ return constructors.irProperty(propertyName.toPropertyName(name), type, { isReadonly: context.options.immutable });
14
+ });
15
+ return constructors.irObject(members);
16
+ }
17
+
18
+ exports.webhooksType = webhooksType;
19
+ //# sourceMappingURL=webhooks.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhooks.cjs","sources":["../../../../src/application/transform/document/webhooks.ts"],"sourcesContent":["import { irObject, irProperty } from \"../../../domain/ir/constructors.js\";\nimport type { IrType } from \"../../../domain/ir/nodes.js\";\nimport { toPropertyName } from \"../../../domain/ir/property-name.js\";\nimport { createRef } from \"../../../domain/openapi/json-pointer.js\";\nimport type { PathItemObject, PathsObject } from \"../../../domain/openapi/path-item-object.js\";\nimport { documentEntries } from \"../document-entries.js\";\nimport type { TransformContext } from \"../transform-context.js\";\nimport { pathItemType } from \"./path-item.js\";\n\n/**\n * The `webhooks` interface body (OpenAPI 3.1 §4.8.1): one path item per webhook name. Unlike\n * `paths`, a `$ref` entry is read as a path item (so every method is `never`), as in the original,\n * and members carry no JSDoc.\n */\nexport function webhooksType(webhooks: PathsObject, context: TransformContext): IrType {\n const members = documentEntries(webhooks, context.options).map(([name, pathItem]) => {\n const location = { path: createRef([\"webhooks\", name]) };\n const type = pathItemType(pathItem as PathItemObject, location, context);\n return irProperty(toPropertyName(name), type, { isReadonly: context.options.immutable });\n });\n return irObject(members);\n}\n"],"names":["documentEntries","pathItem","createRef","pathItemType","irProperty","toPropertyName","irObject"],"mappings":";;;;;;;;AAcO,SAAS,YAAA,CAAa,UAAuB,OAAA,EAAmC;AACrF,EAAA,MAAM,OAAA,GAAUA,+BAAA,CAAgB,QAAA,EAAU,OAAA,CAAQ,OAAO,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,IAAA,EAAMC,UAAQ,CAAA,KAAM;AACnF,IAAA,MAAM,QAAA,GAAW,EAAE,IAAA,EAAMC,qBAAA,CAAU,CAAC,UAAA,EAAY,IAAI,CAAC,CAAA,EAAE;AACvD,IAAA,MAAM,IAAA,GAAOC,qBAAA,CAAaF,UAAA,EAA4B,QAAA,EAAU,OAAO,CAAA;AACvE,IAAA,OAAOG,uBAAA,CAAWC,2BAAA,CAAe,IAAI,CAAA,EAAG,IAAA,EAAM,EAAE,UAAA,EAAY,OAAA,CAAQ,OAAA,CAAQ,SAAA,EAAW,CAAA;AAAA,EACzF,CAAC,CAAA;AACD,EAAA,OAAOC,sBAAS,OAAO,CAAA;AACzB;;"}
@@ -0,0 +1,17 @@
1
+ import { irProperty, irObject } from '../../../domain/ir/constructors.mjs';
2
+ import { toPropertyName } from '../../../domain/ir/property-name.mjs';
3
+ import { createRef } from '../../../domain/openapi/json-pointer.mjs';
4
+ import { documentEntries } from '../document-entries.mjs';
5
+ import { pathItemType } from './path-item.mjs';
6
+
7
+ function webhooksType(webhooks, context) {
8
+ const members = documentEntries(webhooks, context.options).map(([name, pathItem]) => {
9
+ const location = { path: createRef(["webhooks", name]) };
10
+ const type = pathItemType(pathItem, location, context);
11
+ return irProperty(toPropertyName(name), type, { isReadonly: context.options.immutable });
12
+ });
13
+ return irObject(members);
14
+ }
15
+
16
+ export { webhooksType };
17
+ //# sourceMappingURL=webhooks.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhooks.mjs","sources":["../../../../src/application/transform/document/webhooks.ts"],"sourcesContent":["import { irObject, irProperty } from \"../../../domain/ir/constructors.js\";\nimport type { IrType } from \"../../../domain/ir/nodes.js\";\nimport { toPropertyName } from \"../../../domain/ir/property-name.js\";\nimport { createRef } from \"../../../domain/openapi/json-pointer.js\";\nimport type { PathItemObject, PathsObject } from \"../../../domain/openapi/path-item-object.js\";\nimport { documentEntries } from \"../document-entries.js\";\nimport type { TransformContext } from \"../transform-context.js\";\nimport { pathItemType } from \"./path-item.js\";\n\n/**\n * The `webhooks` interface body (OpenAPI 3.1 §4.8.1): one path item per webhook name. Unlike\n * `paths`, a `$ref` entry is read as a path item (so every method is `never`), as in the original,\n * and members carry no JSDoc.\n */\nexport function webhooksType(webhooks: PathsObject, context: TransformContext): IrType {\n const members = documentEntries(webhooks, context.options).map(([name, pathItem]) => {\n const location = { path: createRef([\"webhooks\", name]) };\n const type = pathItemType(pathItem as PathItemObject, location, context);\n return irProperty(toPropertyName(name), type, { isReadonly: context.options.immutable });\n });\n return irObject(members);\n}\n"],"names":[],"mappings":";;;;;;AAcO,SAAS,YAAA,CAAa,UAAuB,OAAA,EAAmC;AACrF,EAAA,MAAM,OAAA,GAAU,eAAA,CAAgB,QAAA,EAAU,OAAA,CAAQ,OAAO,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,IAAA,EAAM,QAAQ,CAAA,KAAM;AACnF,IAAA,MAAM,QAAA,GAAW,EAAE,IAAA,EAAM,SAAA,CAAU,CAAC,UAAA,EAAY,IAAI,CAAC,CAAA,EAAE;AACvD,IAAA,MAAM,IAAA,GAAO,YAAA,CAAa,QAAA,EAA4B,QAAA,EAAU,OAAO,CAAA;AACvE,IAAA,OAAO,UAAA,CAAW,cAAA,CAAe,IAAI,CAAA,EAAG,IAAA,EAAM,EAAE,UAAA,EAAY,OAAA,CAAQ,OAAA,CAAQ,SAAA,EAAW,CAAA;AAAA,EACzF,CAAC,CAAA;AACD,EAAA,OAAO,SAAS,OAAO,CAAA;AACzB;;"}
@@ -0,0 +1,17 @@
1
+ 'use strict';
2
+
3
+ const normalize = require('../../domain/ir/normalize.cjs');
4
+
5
+ function isDeprecated(value) {
6
+ return Boolean(value && typeof value === "object" && "deprecated" in value && value.deprecated);
7
+ }
8
+ const KEEPS_NONE = () => false;
9
+ function documentEntries(record, options, isKept = KEEPS_NONE) {
10
+ const entries = Object.entries(record);
11
+ const sorted = options.alphabetize ? normalize.sortEntriesByKey(entries) : entries;
12
+ return options.excludeDeprecated ? sorted.filter(([, value]) => !isDeprecated(value) || isKept(value)) : sorted;
13
+ }
14
+
15
+ exports.documentEntries = documentEntries;
16
+ exports.isDeprecated = isDeprecated;
17
+ //# sourceMappingURL=document-entries.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-entries.cjs","sources":["../../../src/application/transform/document-entries.ts"],"sourcesContent":["import { sortEntriesByKey } from \"../../domain/ir/normalize.js\";\nimport type { SchemaOptions } from \"./schema/schema-context.js\";\n\n/** Whether a document object has `deprecated: true` (`--exclude-deprecated` drops it). */\nexport function isDeprecated(value: unknown): boolean {\n return Boolean(value && typeof value === \"object\" && \"deprecated\" in value && value.deprecated);\n}\n\n/** Whether a deprecated entry is still needed, so `--exclude-deprecated` keeps it. */\nexport type DeprecatedEntryFilter = (value: unknown) => boolean;\n\nconst KEEPS_NONE: DeprecatedEntryFilter = () => false;\n\n/**\n * `Object.entries` of a document map (the original `getEntries`): sorted for `--alphabetize`,\n * without deprecated entries for `--exclude-deprecated`, except those `isKept` names.\n */\nexport function documentEntries<T>(\n record: Readonly<Record<string, T>>,\n options: Pick<SchemaOptions, \"alphabetize\" | \"excludeDeprecated\">,\n isKept: DeprecatedEntryFilter = KEEPS_NONE,\n): [string, T][] {\n const entries = Object.entries(record);\n const sorted = options.alphabetize ? sortEntriesByKey(entries) : entries;\n return options.excludeDeprecated\n ? sorted.filter(([, value]) => !isDeprecated(value) || isKept(value))\n : sorted;\n}\n"],"names":["sortEntriesByKey"],"mappings":";;;;AAIO,SAAS,aAAa,KAAA,EAAyB;AACpD,EAAA,OAAO,OAAA,CAAQ,SAAS,OAAO,KAAA,KAAU,YAAY,YAAA,IAAgB,KAAA,IAAS,MAAM,UAAU,CAAA;AAChG;AAKA,MAAM,aAAoC,MAAM,KAAA;AAMzC,SAAS,eAAA,CACd,MAAA,EACA,OAAA,EACA,MAAA,GAAgC,UAAA,EACjB;AACf,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA;AACrC,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,WAAA,GAAcA,0BAAA,CAAiB,OAAO,CAAA,GAAI,OAAA;AACjE,EAAA,OAAO,QAAQ,iBAAA,GACX,MAAA,CAAO,MAAA,CAAO,CAAC,GAAG,KAAK,CAAA,KAAM,CAAC,aAAa,KAAK,CAAA,IAAK,MAAA,CAAO,KAAK,CAAC,CAAA,GAClE,MAAA;AACN;;;"}
@@ -0,0 +1,14 @@
1
+ import { sortEntriesByKey } from '../../domain/ir/normalize.mjs';
2
+
3
+ function isDeprecated(value) {
4
+ return Boolean(value && typeof value === "object" && "deprecated" in value && value.deprecated);
5
+ }
6
+ const KEEPS_NONE = () => false;
7
+ function documentEntries(record, options, isKept = KEEPS_NONE) {
8
+ const entries = Object.entries(record);
9
+ const sorted = options.alphabetize ? sortEntriesByKey(entries) : entries;
10
+ return options.excludeDeprecated ? sorted.filter(([, value]) => !isDeprecated(value) || isKept(value)) : sorted;
11
+ }
12
+
13
+ export { documentEntries, isDeprecated };
14
+ //# sourceMappingURL=document-entries.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-entries.mjs","sources":["../../../src/application/transform/document-entries.ts"],"sourcesContent":["import { sortEntriesByKey } from \"../../domain/ir/normalize.js\";\nimport type { SchemaOptions } from \"./schema/schema-context.js\";\n\n/** Whether a document object has `deprecated: true` (`--exclude-deprecated` drops it). */\nexport function isDeprecated(value: unknown): boolean {\n return Boolean(value && typeof value === \"object\" && \"deprecated\" in value && value.deprecated);\n}\n\n/** Whether a deprecated entry is still needed, so `--exclude-deprecated` keeps it. */\nexport type DeprecatedEntryFilter = (value: unknown) => boolean;\n\nconst KEEPS_NONE: DeprecatedEntryFilter = () => false;\n\n/**\n * `Object.entries` of a document map (the original `getEntries`): sorted for `--alphabetize`,\n * without deprecated entries for `--exclude-deprecated`, except those `isKept` names.\n */\nexport function documentEntries<T>(\n record: Readonly<Record<string, T>>,\n options: Pick<SchemaOptions, \"alphabetize\" | \"excludeDeprecated\">,\n isKept: DeprecatedEntryFilter = KEEPS_NONE,\n): [string, T][] {\n const entries = Object.entries(record);\n const sorted = options.alphabetize ? sortEntriesByKey(entries) : entries;\n return options.excludeDeprecated\n ? sorted.filter(([, value]) => !isDeprecated(value) || isKept(value))\n : sorted;\n}\n"],"names":[],"mappings":";;AAIO,SAAS,aAAa,KAAA,EAAyB;AACpD,EAAA,OAAO,OAAA,CAAQ,SAAS,OAAO,KAAA,KAAU,YAAY,YAAA,IAAgB,KAAA,IAAS,MAAM,UAAU,CAAA;AAChG;AAKA,MAAM,aAAoC,MAAM,KAAA;AAMzC,SAAS,eAAA,CACd,MAAA,EACA,OAAA,EACA,MAAA,GAAgC,UAAA,EACjB;AACf,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA;AACrC,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,WAAA,GAAc,gBAAA,CAAiB,OAAO,CAAA,GAAI,OAAA;AACjE,EAAA,OAAO,QAAQ,iBAAA,GACX,MAAA,CAAO,MAAA,CAAO,CAAC,GAAG,KAAK,CAAA,KAAM,CAAC,aAAa,KAAK,CAAA,IAAK,MAAA,CAAO,KAAK,CAAC,CAAA,GAClE,MAAA;AACN;;"}