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,104 @@
1
+ 'use strict';
2
+
3
+ const constructors = require('../../../domain/ir/constructors.cjs');
4
+ const identifierText = require('../../../domain/ir/identifier-text.cjs');
5
+ const propertyName = require('../../../domain/ir/property-name.cjs');
6
+ const componentsObject = require('../../../domain/openapi/components-object.cjs');
7
+ const jsonPointer = require('../../../domain/openapi/json-pointer.cjs');
8
+ const outputFixes = require('../../../domain/output-fixes.cjs');
9
+ const documentEntries = require('../document-entries.cjs');
10
+ const schemaTransform = require('../schema/schema-transform.cjs');
11
+ const schemaComment = require('../schema-comment.cjs');
12
+ const header = require('./header.cjs');
13
+ const mediaType = require('./media-type.cjs');
14
+ const parameter = require('./parameter.cjs');
15
+ const pathItem = require('./path-item.cjs');
16
+ const requestBody = require('./request-body.cjs');
17
+ const response = require('./response.cjs');
18
+ const rootTypeAliases = require('./root-type-aliases.cjs');
19
+
20
+ const COMPONENT_TRANSFORMS = {
21
+ schemas: schemaTransform.transformSchema,
22
+ responses: response.responseType,
23
+ parameters: parameter.parameterType,
24
+ requestBodies: requestBody.requestBodyType,
25
+ headers: header.headerType,
26
+ pathItems: pathItem.pathItemType,
27
+ mediaTypes: mediaType.contentEntryType
28
+ };
29
+ function componentMember(kind, name, item, context) {
30
+ const location = { path: jsonPointer.createRef(["components", kind, name]), schema: item };
31
+ const type = COMPONENT_TRANSFORMS[kind](item, location, context);
32
+ const custom = context.callbacks.transform(item, location);
33
+ const property = constructors.irProperty(propertyName.toPropertyName(name), custom?.type ?? type, {
34
+ isOptional: custom?.isOptional ?? false,
35
+ isReadonly: context.options.immutable
36
+ });
37
+ return schemaComment.withSchemaComment(property, item);
38
+ }
39
+ function rootTypeName(kind, name, aliases, context) {
40
+ const { options, casing } = context;
41
+ const prefix = casing.pascalCase(componentsObject.singularizeComponentKind(kind));
42
+ const isSchema = kind === "schemas";
43
+ const base = identifierText.withIdentifierParts(
44
+ options.rootTypesKeepCasing && isSchema ? name : casing.pascalCase(name)
45
+ );
46
+ const exportedName = (alias2) => {
47
+ const unprefixed = alias2.replace(prefix, "");
48
+ const isUnprefixed = options.rootTypesNoSchemaPrefix && isSchema;
49
+ const isTypeName = identifierText.hasIdentifierStart(unprefixed) && !identifierText.isReservedTypeName(unprefixed);
50
+ return isUnprefixed && isTypeName ? unprefixed : alias2;
51
+ };
52
+ let alias = `${prefix}${base}`;
53
+ for (let counter = 2; aliases[alias] !== void 0; counter++) {
54
+ alias = `${prefix}${base}_${counter}`;
55
+ }
56
+ return exportedName(alias);
57
+ }
58
+ function addRootAlias(request, alias) {
59
+ const { aliases, displaced } = request;
60
+ const previous = aliases[alias.name];
61
+ if (previous !== void 0 && displaced !== null) {
62
+ displaced.push(previous);
63
+ }
64
+ aliases[alias.name] = alias;
65
+ }
66
+ function hasRootType(kind, item, context) {
67
+ const { options } = context;
68
+ return options.rootTypes && !(options.enum && kind === "schemas" && componentsObject.isEnumSchema(item));
69
+ }
70
+ function kindMember(kind, request, context) {
71
+ const { components, isKept, aliases } = request;
72
+ const startedAt = context.diagnostics.now();
73
+ const items = [];
74
+ for (const [name, item] of documentEntries.documentEntries(components[kind] ?? {}, context.options, isKept)) {
75
+ items.push(componentMember(kind, name, item, context));
76
+ if (hasRootType(kind, item, context)) {
77
+ addRootAlias(request, rootTypeAliases.rootTypeAlias(rootTypeName(kind, name, aliases, context), kind, name));
78
+ }
79
+ }
80
+ const type = items.length > 0 ? constructors.irObject(items) : constructors.irKeyword("never");
81
+ context.diagnostics.debug(
82
+ `Transformed components \u2192 ${kind}`,
83
+ context.diagnostics.now() - startedAt
84
+ );
85
+ return constructors.irProperty(propertyName.toPropertyName(kind), type);
86
+ }
87
+ function componentsType(components, context, kept = /* @__PURE__ */ new Set()) {
88
+ const aliases = {};
89
+ const displaced = context.options.fixes.has(outputFixes.OutputFix.ROOT_TYPE_NUMBERING) ? [] : null;
90
+ const isKept = (item) => kept.has(item);
91
+ const request = { components, isKept, aliases, displaced };
92
+ const declaredKinds = componentsObject.DECLARED_COMPONENT_KINDS.filter((kind) => components[kind] !== void 0);
93
+ const members = [...componentsObject.COMPONENT_KINDS, ...declaredKinds].map(
94
+ (kind) => kindMember(kind, request, context)
95
+ );
96
+ const rootTypes = Object.values(aliases);
97
+ return {
98
+ type: constructors.irObject(members),
99
+ rootTypes: [...rootTypes, ...rootTypeAliases.numberDisplacedAliases(displaced ?? [], rootTypes)]
100
+ };
101
+ }
102
+
103
+ exports.componentsType = componentsType;
104
+ //# sourceMappingURL=components.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"components.cjs","sources":["../../../../src/application/transform/document/components.ts"],"sourcesContent":["import { irKeyword, irObject, irProperty } from \"../../../domain/ir/constructors.js\";\nimport {\n hasIdentifierStart,\n isReservedTypeName,\n withIdentifierParts,\n} from \"../../../domain/ir/identifier-text.js\";\nimport type {\n IrPropertySignature,\n IrType,\n IrTypeAliasDeclaration,\n} from \"../../../domain/ir/nodes.js\";\nimport { toPropertyName } from \"../../../domain/ir/property-name.js\";\nimport {\n COMPONENT_KINDS,\n type ComponentKind,\n type ComponentsObject,\n DECLARED_COMPONENT_KINDS,\n isEnumSchema,\n singularizeComponentKind,\n} from \"../../../domain/openapi/components-object.js\";\nimport { createRef } from \"../../../domain/openapi/json-pointer.js\";\nimport { OutputFix } from \"../../../domain/output-fixes.js\";\nimport { type DeprecatedEntryFilter, documentEntries } from \"../document-entries.js\";\nimport type { SchemaLocation } from \"../schema/schema-context.js\";\nimport { transformSchema } from \"../schema/schema-transform.js\";\nimport { withSchemaComment } from \"../schema-comment.js\";\nimport type { TransformContext } from \"../transform-context.js\";\nimport { headerType } from \"./header.js\";\nimport { contentEntryType } from \"./media-type.js\";\nimport { parameterType } from \"./parameter.js\";\nimport { pathItemType } from \"./path-item.js\";\nimport { requestBodyType } from \"./request-body.js\";\nimport { responseType } from \"./response.js\";\nimport { numberDisplacedAliases, rootTypeAlias } from \"./root-type-aliases.js\";\n\ntype ComponentTransform = (\n item: never,\n location: SchemaLocation,\n context: TransformContext,\n) => IrType;\n\nconst COMPONENT_TRANSFORMS: Readonly<Record<ComponentKind, ComponentTransform>> = {\n schemas: transformSchema,\n responses: responseType,\n parameters: parameterType,\n requestBodies: requestBodyType,\n headers: headerType,\n pathItems: pathItemType,\n mediaTypes: contentEntryType,\n};\n\n/** The `components` type and the `--root-types` aliases. */\nexport interface ComponentsResult {\n readonly type: IrType;\n readonly rootTypes: readonly IrTypeAliasDeclaration[];\n}\n\n/** One component; the `transform` callback may replace its type, as for nested schemas. */\nfunction componentMember(\n kind: ComponentKind,\n name: string,\n item: unknown,\n context: TransformContext,\n): IrPropertySignature {\n const location = { path: createRef([\"components\", kind, name]), schema: item };\n const type = COMPONENT_TRANSFORMS[kind](item as never, location, context);\n const custom = context.callbacks.transform(item, location);\n const property = irProperty(toPropertyName(name), custom?.type ?? type, {\n isOptional: custom?.isOptional ?? false,\n isReadonly: context.options.immutable,\n });\n return withSchemaComment(property, item);\n}\n\n/**\n * The root alias name: `SchemaPet`, `ResponseNotFound`, … A taken name gets `_2`, `_3`, … The\n * original checks for conflicts before it removes the schema prefix, and so does this; for a clash\n * of exported names see `addRootAlias`.\n *\n * The original could build a name that is no identifier, so the generated file did not parse\n * (research/legacy-bugs.md, item 16): a kept casing keeps spaces and symbols, which become `_`;\n * and a name without the prefix can start with a digit, so it keeps the prefix (`Schema1`). A\n * kept casing without the prefix can also give a reserved name (`void`, `class`), which keeps the\n * prefix too (`Schemavoid`).\n */\nfunction rootTypeName(\n kind: ComponentKind,\n name: string,\n aliases: Readonly<Record<string, IrTypeAliasDeclaration>>,\n context: TransformContext,\n): string {\n const { options, casing } = context;\n const prefix = casing.pascalCase(singularizeComponentKind(kind));\n const isSchema = kind === \"schemas\";\n const base = withIdentifierParts(\n options.rootTypesKeepCasing && isSchema ? name : casing.pascalCase(name),\n );\n const exportedName = (alias: string): string => {\n const unprefixed = alias.replace(prefix, \"\");\n const isUnprefixed = options.rootTypesNoSchemaPrefix && isSchema;\n const isTypeName = hasIdentifierStart(unprefixed) && !isReservedTypeName(unprefixed);\n return isUnprefixed && isTypeName ? unprefixed : alias;\n };\n let alias = `${prefix}${base}`;\n for (let counter = 2; aliases[alias] !== undefined; counter++) {\n alias = `${prefix}${base}_${counter}`;\n }\n return exportedName(alias);\n}\n\n/**\n * Add a root alias. When its exported name is taken (two schemas of one PascalCase name without\n * the prefix), the later schema takes the name, as in the original. Without the\n * `root-type-numbering` fix the earlier one then has no alias: that output is valid, so a number\n * for it would change it (backlog 30). With the fix the earlier alias is kept aside and numbered\n * at the end.\n */\nfunction addRootAlias(request: ComponentsRequest, alias: IrTypeAliasDeclaration): void {\n const { aliases, displaced } = request;\n const previous = aliases[alias.name];\n if (previous !== undefined && displaced !== null) {\n displaced.push(previous);\n }\n aliases[alias.name] = alias;\n}\n\n/** `--root-types` skips enum schemas under `--enum`: the enum itself is exported. */\nfunction hasRootType(kind: ComponentKind, item: unknown, context: TransformContext): boolean {\n const { options } = context;\n return options.rootTypes && !(options.enum && kind === \"schemas\" && isEnumSchema(item));\n}\n\n/** The components of one run, and the deprecated ones that kept output still references. */\ninterface ComponentsRequest {\n readonly components: ComponentsObject;\n readonly isKept: DeprecatedEntryFilter;\n readonly aliases: Record<string, IrTypeAliasDeclaration>;\n /** With the `root-type-numbering` fix: the aliases a later schema took the name of, in order. */\n readonly displaced: IrTypeAliasDeclaration[] | null;\n}\n\nfunction kindMember(\n kind: ComponentKind,\n request: ComponentsRequest,\n context: TransformContext,\n): IrPropertySignature {\n const { components, isKept, aliases } = request;\n const startedAt = context.diagnostics.now();\n const items: IrPropertySignature[] = [];\n for (const [name, item] of documentEntries(components[kind] ?? {}, context.options, isKept)) {\n items.push(componentMember(kind, name, item, context));\n if (hasRootType(kind, item, context)) {\n addRootAlias(request, rootTypeAlias(rootTypeName(kind, name, aliases, context), kind, name));\n }\n }\n const type = items.length > 0 ? irObject(items) : irKeyword(\"never\");\n context.diagnostics.debug(\n `Transformed components → ${kind}`,\n context.diagnostics.now() - startedAt,\n );\n return irProperty(toPropertyName(kind), type);\n}\n\n/**\n * The `components` interface body (OpenAPI 3.1 §4.8.7), one member per component kind. With\n * `--exclude-deprecated`, `kept` holds the deprecated components that kept output references\n * (`keptDeprecatedComponents`); they stay, so no reference names a missing key.\n */\nexport function componentsType(\n components: ComponentsObject,\n context: TransformContext,\n kept: ReadonlySet<object> = new Set(),\n): ComponentsResult {\n // A plain object, as in the original: its key order (integer-like names first) is the\n // output order.\n const aliases: Record<string, IrTypeAliasDeclaration> = {};\n const displaced = context.options.fixes.has(OutputFix.ROOT_TYPE_NUMBERING) ? [] : null;\n const isKept = (item: unknown) => kept.has(item as object);\n const request = { components, isKept, aliases, displaced };\n const declaredKinds = DECLARED_COMPONENT_KINDS.filter((kind) => components[kind] !== undefined);\n const members = [...COMPONENT_KINDS, ...declaredKinds].map((kind) =>\n kindMember(kind, request, context),\n );\n const rootTypes = Object.values(aliases);\n return {\n type: irObject(members),\n rootTypes: [...rootTypes, ...numberDisplacedAliases(displaced ?? [], rootTypes)],\n };\n}\n"],"names":["transformSchema","responseType","parameterType","requestBodyType","headerType","pathItemType","contentEntryType","createRef","irProperty","toPropertyName","withSchemaComment","singularizeComponentKind","withIdentifierParts","alias","hasIdentifierStart","isReservedTypeName","isEnumSchema","documentEntries","rootTypeAlias","irObject","irKeyword","OutputFix","DECLARED_COMPONENT_KINDS","COMPONENT_KINDS","numberDisplacedAliases"],"mappings":"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"}
@@ -0,0 +1,102 @@
1
+ import { irObject, irProperty, irKeyword } from '../../../domain/ir/constructors.mjs';
2
+ import { withIdentifierParts, hasIdentifierStart, isReservedTypeName } from '../../../domain/ir/identifier-text.mjs';
3
+ import { toPropertyName } from '../../../domain/ir/property-name.mjs';
4
+ import { DECLARED_COMPONENT_KINDS, COMPONENT_KINDS, isEnumSchema, singularizeComponentKind } from '../../../domain/openapi/components-object.mjs';
5
+ import { createRef } from '../../../domain/openapi/json-pointer.mjs';
6
+ import { OutputFix } from '../../../domain/output-fixes.mjs';
7
+ import { documentEntries } from '../document-entries.mjs';
8
+ import { transformSchema } from '../schema/schema-transform.mjs';
9
+ import { withSchemaComment } from '../schema-comment.mjs';
10
+ import { headerType } from './header.mjs';
11
+ import { contentEntryType } from './media-type.mjs';
12
+ import { parameterType } from './parameter.mjs';
13
+ import { pathItemType } from './path-item.mjs';
14
+ import { requestBodyType } from './request-body.mjs';
15
+ import { responseType } from './response.mjs';
16
+ import { numberDisplacedAliases, rootTypeAlias } from './root-type-aliases.mjs';
17
+
18
+ const COMPONENT_TRANSFORMS = {
19
+ schemas: transformSchema,
20
+ responses: responseType,
21
+ parameters: parameterType,
22
+ requestBodies: requestBodyType,
23
+ headers: headerType,
24
+ pathItems: pathItemType,
25
+ mediaTypes: contentEntryType
26
+ };
27
+ function componentMember(kind, name, item, context) {
28
+ const location = { path: createRef(["components", kind, name]), schema: item };
29
+ const type = COMPONENT_TRANSFORMS[kind](item, location, context);
30
+ const custom = context.callbacks.transform(item, location);
31
+ const property = irProperty(toPropertyName(name), custom?.type ?? type, {
32
+ isOptional: custom?.isOptional ?? false,
33
+ isReadonly: context.options.immutable
34
+ });
35
+ return withSchemaComment(property, item);
36
+ }
37
+ function rootTypeName(kind, name, aliases, context) {
38
+ const { options, casing } = context;
39
+ const prefix = casing.pascalCase(singularizeComponentKind(kind));
40
+ const isSchema = kind === "schemas";
41
+ const base = withIdentifierParts(
42
+ options.rootTypesKeepCasing && isSchema ? name : casing.pascalCase(name)
43
+ );
44
+ const exportedName = (alias2) => {
45
+ const unprefixed = alias2.replace(prefix, "");
46
+ const isUnprefixed = options.rootTypesNoSchemaPrefix && isSchema;
47
+ const isTypeName = hasIdentifierStart(unprefixed) && !isReservedTypeName(unprefixed);
48
+ return isUnprefixed && isTypeName ? unprefixed : alias2;
49
+ };
50
+ let alias = `${prefix}${base}`;
51
+ for (let counter = 2; aliases[alias] !== void 0; counter++) {
52
+ alias = `${prefix}${base}_${counter}`;
53
+ }
54
+ return exportedName(alias);
55
+ }
56
+ function addRootAlias(request, alias) {
57
+ const { aliases, displaced } = request;
58
+ const previous = aliases[alias.name];
59
+ if (previous !== void 0 && displaced !== null) {
60
+ displaced.push(previous);
61
+ }
62
+ aliases[alias.name] = alias;
63
+ }
64
+ function hasRootType(kind, item, context) {
65
+ const { options } = context;
66
+ return options.rootTypes && !(options.enum && kind === "schemas" && isEnumSchema(item));
67
+ }
68
+ function kindMember(kind, request, context) {
69
+ const { components, isKept, aliases } = request;
70
+ const startedAt = context.diagnostics.now();
71
+ const items = [];
72
+ for (const [name, item] of documentEntries(components[kind] ?? {}, context.options, isKept)) {
73
+ items.push(componentMember(kind, name, item, context));
74
+ if (hasRootType(kind, item, context)) {
75
+ addRootAlias(request, rootTypeAlias(rootTypeName(kind, name, aliases, context), kind, name));
76
+ }
77
+ }
78
+ const type = items.length > 0 ? irObject(items) : irKeyword("never");
79
+ context.diagnostics.debug(
80
+ `Transformed components \u2192 ${kind}`,
81
+ context.diagnostics.now() - startedAt
82
+ );
83
+ return irProperty(toPropertyName(kind), type);
84
+ }
85
+ function componentsType(components, context, kept = /* @__PURE__ */ new Set()) {
86
+ const aliases = {};
87
+ const displaced = context.options.fixes.has(OutputFix.ROOT_TYPE_NUMBERING) ? [] : null;
88
+ const isKept = (item) => kept.has(item);
89
+ const request = { components, isKept, aliases, displaced };
90
+ const declaredKinds = DECLARED_COMPONENT_KINDS.filter((kind) => components[kind] !== void 0);
91
+ const members = [...COMPONENT_KINDS, ...declaredKinds].map(
92
+ (kind) => kindMember(kind, request, context)
93
+ );
94
+ const rootTypes = Object.values(aliases);
95
+ return {
96
+ type: irObject(members),
97
+ rootTypes: [...rootTypes, ...numberDisplacedAliases(displaced ?? [], rootTypes)]
98
+ };
99
+ }
100
+
101
+ export { componentsType };
102
+ //# sourceMappingURL=components.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"components.mjs","sources":["../../../../src/application/transform/document/components.ts"],"sourcesContent":["import { irKeyword, irObject, irProperty } from \"../../../domain/ir/constructors.js\";\nimport {\n hasIdentifierStart,\n isReservedTypeName,\n withIdentifierParts,\n} from \"../../../domain/ir/identifier-text.js\";\nimport type {\n IrPropertySignature,\n IrType,\n IrTypeAliasDeclaration,\n} from \"../../../domain/ir/nodes.js\";\nimport { toPropertyName } from \"../../../domain/ir/property-name.js\";\nimport {\n COMPONENT_KINDS,\n type ComponentKind,\n type ComponentsObject,\n DECLARED_COMPONENT_KINDS,\n isEnumSchema,\n singularizeComponentKind,\n} from \"../../../domain/openapi/components-object.js\";\nimport { createRef } from \"../../../domain/openapi/json-pointer.js\";\nimport { OutputFix } from \"../../../domain/output-fixes.js\";\nimport { type DeprecatedEntryFilter, documentEntries } from \"../document-entries.js\";\nimport type { SchemaLocation } from \"../schema/schema-context.js\";\nimport { transformSchema } from \"../schema/schema-transform.js\";\nimport { withSchemaComment } from \"../schema-comment.js\";\nimport type { TransformContext } from \"../transform-context.js\";\nimport { headerType } from \"./header.js\";\nimport { contentEntryType } from \"./media-type.js\";\nimport { parameterType } from \"./parameter.js\";\nimport { pathItemType } from \"./path-item.js\";\nimport { requestBodyType } from \"./request-body.js\";\nimport { responseType } from \"./response.js\";\nimport { numberDisplacedAliases, rootTypeAlias } from \"./root-type-aliases.js\";\n\ntype ComponentTransform = (\n item: never,\n location: SchemaLocation,\n context: TransformContext,\n) => IrType;\n\nconst COMPONENT_TRANSFORMS: Readonly<Record<ComponentKind, ComponentTransform>> = {\n schemas: transformSchema,\n responses: responseType,\n parameters: parameterType,\n requestBodies: requestBodyType,\n headers: headerType,\n pathItems: pathItemType,\n mediaTypes: contentEntryType,\n};\n\n/** The `components` type and the `--root-types` aliases. */\nexport interface ComponentsResult {\n readonly type: IrType;\n readonly rootTypes: readonly IrTypeAliasDeclaration[];\n}\n\n/** One component; the `transform` callback may replace its type, as for nested schemas. */\nfunction componentMember(\n kind: ComponentKind,\n name: string,\n item: unknown,\n context: TransformContext,\n): IrPropertySignature {\n const location = { path: createRef([\"components\", kind, name]), schema: item };\n const type = COMPONENT_TRANSFORMS[kind](item as never, location, context);\n const custom = context.callbacks.transform(item, location);\n const property = irProperty(toPropertyName(name), custom?.type ?? type, {\n isOptional: custom?.isOptional ?? false,\n isReadonly: context.options.immutable,\n });\n return withSchemaComment(property, item);\n}\n\n/**\n * The root alias name: `SchemaPet`, `ResponseNotFound`, … A taken name gets `_2`, `_3`, … The\n * original checks for conflicts before it removes the schema prefix, and so does this; for a clash\n * of exported names see `addRootAlias`.\n *\n * The original could build a name that is no identifier, so the generated file did not parse\n * (research/legacy-bugs.md, item 16): a kept casing keeps spaces and symbols, which become `_`;\n * and a name without the prefix can start with a digit, so it keeps the prefix (`Schema1`). A\n * kept casing without the prefix can also give a reserved name (`void`, `class`), which keeps the\n * prefix too (`Schemavoid`).\n */\nfunction rootTypeName(\n kind: ComponentKind,\n name: string,\n aliases: Readonly<Record<string, IrTypeAliasDeclaration>>,\n context: TransformContext,\n): string {\n const { options, casing } = context;\n const prefix = casing.pascalCase(singularizeComponentKind(kind));\n const isSchema = kind === \"schemas\";\n const base = withIdentifierParts(\n options.rootTypesKeepCasing && isSchema ? name : casing.pascalCase(name),\n );\n const exportedName = (alias: string): string => {\n const unprefixed = alias.replace(prefix, \"\");\n const isUnprefixed = options.rootTypesNoSchemaPrefix && isSchema;\n const isTypeName = hasIdentifierStart(unprefixed) && !isReservedTypeName(unprefixed);\n return isUnprefixed && isTypeName ? unprefixed : alias;\n };\n let alias = `${prefix}${base}`;\n for (let counter = 2; aliases[alias] !== undefined; counter++) {\n alias = `${prefix}${base}_${counter}`;\n }\n return exportedName(alias);\n}\n\n/**\n * Add a root alias. When its exported name is taken (two schemas of one PascalCase name without\n * the prefix), the later schema takes the name, as in the original. Without the\n * `root-type-numbering` fix the earlier one then has no alias: that output is valid, so a number\n * for it would change it (backlog 30). With the fix the earlier alias is kept aside and numbered\n * at the end.\n */\nfunction addRootAlias(request: ComponentsRequest, alias: IrTypeAliasDeclaration): void {\n const { aliases, displaced } = request;\n const previous = aliases[alias.name];\n if (previous !== undefined && displaced !== null) {\n displaced.push(previous);\n }\n aliases[alias.name] = alias;\n}\n\n/** `--root-types` skips enum schemas under `--enum`: the enum itself is exported. */\nfunction hasRootType(kind: ComponentKind, item: unknown, context: TransformContext): boolean {\n const { options } = context;\n return options.rootTypes && !(options.enum && kind === \"schemas\" && isEnumSchema(item));\n}\n\n/** The components of one run, and the deprecated ones that kept output still references. */\ninterface ComponentsRequest {\n readonly components: ComponentsObject;\n readonly isKept: DeprecatedEntryFilter;\n readonly aliases: Record<string, IrTypeAliasDeclaration>;\n /** With the `root-type-numbering` fix: the aliases a later schema took the name of, in order. */\n readonly displaced: IrTypeAliasDeclaration[] | null;\n}\n\nfunction kindMember(\n kind: ComponentKind,\n request: ComponentsRequest,\n context: TransformContext,\n): IrPropertySignature {\n const { components, isKept, aliases } = request;\n const startedAt = context.diagnostics.now();\n const items: IrPropertySignature[] = [];\n for (const [name, item] of documentEntries(components[kind] ?? {}, context.options, isKept)) {\n items.push(componentMember(kind, name, item, context));\n if (hasRootType(kind, item, context)) {\n addRootAlias(request, rootTypeAlias(rootTypeName(kind, name, aliases, context), kind, name));\n }\n }\n const type = items.length > 0 ? irObject(items) : irKeyword(\"never\");\n context.diagnostics.debug(\n `Transformed components → ${kind}`,\n context.diagnostics.now() - startedAt,\n );\n return irProperty(toPropertyName(kind), type);\n}\n\n/**\n * The `components` interface body (OpenAPI 3.1 §4.8.7), one member per component kind. With\n * `--exclude-deprecated`, `kept` holds the deprecated components that kept output references\n * (`keptDeprecatedComponents`); they stay, so no reference names a missing key.\n */\nexport function componentsType(\n components: ComponentsObject,\n context: TransformContext,\n kept: ReadonlySet<object> = new Set(),\n): ComponentsResult {\n // A plain object, as in the original: its key order (integer-like names first) is the\n // output order.\n const aliases: Record<string, IrTypeAliasDeclaration> = {};\n const displaced = context.options.fixes.has(OutputFix.ROOT_TYPE_NUMBERING) ? [] : null;\n const isKept = (item: unknown) => kept.has(item as object);\n const request = { components, isKept, aliases, displaced };\n const declaredKinds = DECLARED_COMPONENT_KINDS.filter((kind) => components[kind] !== undefined);\n const members = [...COMPONENT_KINDS, ...declaredKinds].map((kind) =>\n kindMember(kind, request, context),\n );\n const rootTypes = Object.values(aliases);\n return {\n type: irObject(members),\n rootTypes: [...rootTypes, ...numberDisplacedAliases(displaced ?? [], rootTypes)],\n };\n}\n"],"names":["alias"],"mappings":"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"}
@@ -0,0 +1,18 @@
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 schemaTransform = require('../schema/schema-transform.cjs');
7
+
8
+ function defsRootType(defs, context) {
9
+ const members = Object.entries(defs).map(([name, schema]) => {
10
+ const location = { path: jsonPointer.createRef(["$defs", name]), schema };
11
+ const type = schemaTransform.transformSchema(schema, location, context);
12
+ return constructors.irProperty(propertyName.toPropertyName(name), type, { isReadonly: context.options.immutable });
13
+ });
14
+ return constructors.irObject(members);
15
+ }
16
+
17
+ exports.defsRootType = defsRootType;
18
+ //# sourceMappingURL=defs-root.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defs-root.cjs","sources":["../../../../src/application/transform/document/defs-root.ts"],"sourcesContent":["import { irObject, irProperty } from \"../../../domain/ir/constructors.js\";\nimport type { IrObjectType } from \"../../../domain/ir/nodes.js\";\nimport { toPropertyName } from \"../../../domain/ir/property-name.js\";\nimport { createRef } from \"../../../domain/openapi/json-pointer.js\";\nimport type { Schema } from \"../../../domain/openapi/schema-object.js\";\nimport { transformSchema } from \"../schema/schema-transform.js\";\nimport type { TransformContext } from \"../transform-context.js\";\n\n/**\n * The root `$defs` type: one required member per named subschema, so `#/$defs/<name>` refs\n * (`$defs[\"<name>\"]`) resolve. The original transformed the whole `$defs` map as one schema,\n * which gave `Record<string, never>` and made every such ref `never` (research/legacy-bugs.md,\n * item 18).\n */\nexport function defsRootType(\n defs: Readonly<Record<string, Schema>>,\n context: TransformContext,\n): IrObjectType {\n const members = Object.entries(defs).map(([name, schema]) => {\n const location = { path: createRef([\"$defs\", name]), schema };\n const type = transformSchema(schema, location, context);\n return irProperty(toPropertyName(name), type, { isReadonly: context.options.immutable });\n });\n return irObject(members);\n}\n"],"names":["createRef","transformSchema","irProperty","toPropertyName","irObject"],"mappings":";;;;;;;AAcO,SAAS,YAAA,CACd,MACA,OAAA,EACc;AACd,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,CAAE,IAAI,CAAC,CAAC,IAAA,EAAM,MAAM,CAAA,KAAM;AAC3D,IAAA,MAAM,QAAA,GAAW,EAAE,IAAA,EAAMA,qBAAA,CAAU,CAAC,OAAA,EAAS,IAAI,CAAC,CAAA,EAAG,MAAA,EAAO;AAC5D,IAAA,MAAM,IAAA,GAAOC,+BAAA,CAAgB,MAAA,EAAQ,QAAA,EAAU,OAAO,CAAA;AACtD,IAAA,OAAOC,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,16 @@
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 { transformSchema } from '../schema/schema-transform.mjs';
5
+
6
+ function defsRootType(defs, context) {
7
+ const members = Object.entries(defs).map(([name, schema]) => {
8
+ const location = { path: createRef(["$defs", name]), schema };
9
+ const type = transformSchema(schema, location, context);
10
+ return irProperty(toPropertyName(name), type, { isReadonly: context.options.immutable });
11
+ });
12
+ return irObject(members);
13
+ }
14
+
15
+ export { defsRootType };
16
+ //# sourceMappingURL=defs-root.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defs-root.mjs","sources":["../../../../src/application/transform/document/defs-root.ts"],"sourcesContent":["import { irObject, irProperty } from \"../../../domain/ir/constructors.js\";\nimport type { IrObjectType } from \"../../../domain/ir/nodes.js\";\nimport { toPropertyName } from \"../../../domain/ir/property-name.js\";\nimport { createRef } from \"../../../domain/openapi/json-pointer.js\";\nimport type { Schema } from \"../../../domain/openapi/schema-object.js\";\nimport { transformSchema } from \"../schema/schema-transform.js\";\nimport type { TransformContext } from \"../transform-context.js\";\n\n/**\n * The root `$defs` type: one required member per named subschema, so `#/$defs/<name>` refs\n * (`$defs[\"<name>\"]`) resolve. The original transformed the whole `$defs` map as one schema,\n * which gave `Record<string, never>` and made every such ref `never` (research/legacy-bugs.md,\n * item 18).\n */\nexport function defsRootType(\n defs: Readonly<Record<string, Schema>>,\n context: TransformContext,\n): IrObjectType {\n const members = Object.entries(defs).map(([name, schema]) => {\n const location = { path: createRef([\"$defs\", name]), schema };\n const type = transformSchema(schema, location, context);\n return irProperty(toPropertyName(name), type, { isReadonly: context.options.immutable });\n });\n return irObject(members);\n}\n"],"names":[],"mappings":";;;;;AAcO,SAAS,YAAA,CACd,MACA,OAAA,EACc;AACd,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,CAAE,IAAI,CAAC,CAAC,IAAA,EAAM,MAAM,CAAA,KAAM;AAC3D,IAAA,MAAM,QAAA,GAAW,EAAE,IAAA,EAAM,SAAA,CAAU,CAAC,OAAA,EAAS,IAAI,CAAC,CAAA,EAAG,MAAA,EAAO;AAC5D,IAAA,MAAM,IAAA,GAAO,eAAA,CAAgB,MAAA,EAAQ,QAAA,EAAU,OAAO,CAAA;AACtD,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,13 @@
1
+ 'use strict';
2
+
3
+ const constructors = require('../../../domain/ir/constructors.cjs');
4
+ const propertyName = require('../../../domain/ir/property-name.cjs');
5
+ const schemaComment = require('../schema-comment.cjs');
6
+
7
+ function documentMember(name, type, entry, flags) {
8
+ const property = constructors.irProperty(propertyName.toPropertyName(name), type, flags);
9
+ return schemaComment.withSchemaComment(property, entry);
10
+ }
11
+
12
+ exports.documentMember = documentMember;
13
+ //# sourceMappingURL=document-member.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-member.cjs","sources":["../../../../src/application/transform/document/document-member.ts"],"sourcesContent":["import { irProperty } from \"../../../domain/ir/constructors.js\";\nimport type { IrPropertySignature, IrType } from \"../../../domain/ir/nodes.js\";\nimport { toPropertyName } from \"../../../domain/ir/property-name.js\";\nimport { withSchemaComment } from \"../schema-comment.js\";\n\nexport interface DocumentMemberFlags {\n readonly isReadonly: boolean;\n readonly isOptional?: boolean;\n}\n\n/** A member named by a document map key (media type, header, status code), with its JSDoc. */\nexport function documentMember(\n name: string,\n type: IrType,\n entry: unknown,\n flags: DocumentMemberFlags,\n): IrPropertySignature {\n const property = irProperty(toPropertyName(name), type, flags);\n return withSchemaComment(property, entry);\n}\n"],"names":["irProperty","toPropertyName","withSchemaComment"],"mappings":";;;;;;AAWO,SAAS,cAAA,CACd,IAAA,EACA,IAAA,EACA,KAAA,EACA,KAAA,EACqB;AACrB,EAAA,MAAM,WAAWA,uBAAA,CAAWC,2BAAA,CAAe,IAAI,CAAA,EAAG,MAAM,KAAK,CAAA;AAC7D,EAAA,OAAOC,+BAAA,CAAkB,UAAU,KAAK,CAAA;AAC1C;;"}
@@ -0,0 +1,11 @@
1
+ import { irProperty } from '../../../domain/ir/constructors.mjs';
2
+ import { toPropertyName } from '../../../domain/ir/property-name.mjs';
3
+ import { withSchemaComment } from '../schema-comment.mjs';
4
+
5
+ function documentMember(name, type, entry, flags) {
6
+ const property = irProperty(toPropertyName(name), type, flags);
7
+ return withSchemaComment(property, entry);
8
+ }
9
+
10
+ export { documentMember };
11
+ //# sourceMappingURL=document-member.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-member.mjs","sources":["../../../../src/application/transform/document/document-member.ts"],"sourcesContent":["import { irProperty } from \"../../../domain/ir/constructors.js\";\nimport type { IrPropertySignature, IrType } from \"../../../domain/ir/nodes.js\";\nimport { toPropertyName } from \"../../../domain/ir/property-name.js\";\nimport { withSchemaComment } from \"../schema-comment.js\";\n\nexport interface DocumentMemberFlags {\n readonly isReadonly: boolean;\n readonly isOptional?: boolean;\n}\n\n/** A member named by a document map key (media type, header, status code), with its JSDoc. */\nexport function documentMember(\n name: string,\n type: IrType,\n entry: unknown,\n flags: DocumentMemberFlags,\n): IrPropertySignature {\n const property = irProperty(toPropertyName(name), type, flags);\n return withSchemaComment(property, entry);\n}\n"],"names":[],"mappings":";;;;AAWO,SAAS,cAAA,CACd,IAAA,EACA,IAAA,EACA,KAAA,EACA,KAAA,EACqB;AACrB,EAAA,MAAM,WAAW,UAAA,CAAW,cAAA,CAAe,IAAI,CAAA,EAAG,MAAM,KAAK,CAAA;AAC7D,EAAA,OAAO,iBAAA,CAAkB,UAAU,KAAK,CAAA;AAC1C;;"}
@@ -0,0 +1,86 @@
1
+ 'use strict';
2
+
3
+ const constructors = require('../../../domain/ir/constructors.cjs');
4
+ const helperTypes = require('../helper-types.cjs');
5
+ const components = require('./components.cjs');
6
+ const defsRoot = require('./defs-root.cjs');
7
+ const keptDeprecated$1 = require('./kept-deprecated.cjs');
8
+ const paths = require('./paths.cjs');
9
+ const pathsEnum = require('./paths-enum.cjs');
10
+ const webhooks = require('./webhooks.cjs');
11
+
12
+ const ROOT_KEYS = Object.freeze(["paths", "webhooks", "components", "$defs"]);
13
+ const OPERATIONS_NAME = "operations";
14
+ const EMPTY_ROOT_TYPE = constructors.irRecord(constructors.irKeyword("string"), constructors.irKeyword("never"));
15
+ function keptDeprecated(document, context) {
16
+ return context.options.excludeDeprecated ? keptDeprecated$1.keptDeprecatedComponents(document, context.refs) : /* @__PURE__ */ new Set();
17
+ }
18
+ const ROOT_TRANSFORMS = {
19
+ paths: (node, context) => ({ type: paths.pathsType(node, context), aliases: [] }),
20
+ webhooks: (node, context) => ({ type: webhooks.webhooksType(node, context), aliases: [] }),
21
+ components: (node, context, document) => {
22
+ const kept = keptDeprecated(document, context);
23
+ const { type, rootTypes } = components.componentsType(node, context, kept);
24
+ return { type, aliases: rootTypes };
25
+ },
26
+ $defs: (node, context) => ({
27
+ type: defsRoot.defsRootType(node, context),
28
+ aliases: []
29
+ })
30
+ };
31
+ function emptyAlias(name) {
32
+ return { kind: "typeAlias", name, isExported: true, type: EMPTY_ROOT_TYPE, comments: [] };
33
+ }
34
+ function isRootBody(type) {
35
+ return type.kind === "object" && type.members.length > 0 || type.kind === "intersection";
36
+ }
37
+ function rootDeclaration(name, type, options) {
38
+ return options.exportType || type.kind === "intersection" ? { kind: "typeAlias", name, isExported: true, type, comments: [] } : { kind: "interface", name, isExported: true, members: type.members, comments: [] };
39
+ }
40
+ function rootDeclarations(root, document, context) {
41
+ const node = document[root];
42
+ if (!node || typeof node !== "object") {
43
+ context.diagnostics.debug(`${root} done (skipped)`, 0);
44
+ return [emptyAlias(root)];
45
+ }
46
+ const startedAt = context.diagnostics.now();
47
+ const { type, aliases } = ROOT_TRANSFORMS[root](node, context, document);
48
+ if (!isRootBody(type)) {
49
+ context.diagnostics.debug(`${root} done (skipped)`, 0);
50
+ return [emptyAlias(root), ...aliases];
51
+ }
52
+ const declaration = rootDeclaration(root, type, context.options);
53
+ context.diagnostics.debug(`${root} done`, context.diagnostics.now() - startedAt);
54
+ return [declaration, ...aliases];
55
+ }
56
+ function withoutBlankLinesAround(text) {
57
+ return text.replace(/^(?:[ \t]*\r?\n)+/, "").trimEnd();
58
+ }
59
+ function documentBody(document, context) {
60
+ const declarations = [];
61
+ if (context.options.readWriteMarkers) {
62
+ declarations.push({ kind: "rawDeclaration", text: helperTypes.READ_WRITE_MARKER_TYPES });
63
+ }
64
+ const inject = withoutBlankLinesAround(context.options.inject ?? "");
65
+ if (inject !== "") {
66
+ declarations.push({ kind: "rawDeclaration", text: inject });
67
+ }
68
+ for (const root of ROOT_KEYS) {
69
+ declarations.push(...rootDeclarations(root, document, context));
70
+ }
71
+ return declarations;
72
+ }
73
+ function documentClosing(document, context, hasOperations) {
74
+ const declarations = [];
75
+ if (!hasOperations) {
76
+ declarations.push(emptyAlias(OPERATIONS_NAME));
77
+ }
78
+ if (context.options.makePathsEnum && document.paths) {
79
+ declarations.push(pathsEnum.apiPathsEnumDeclaration(document.paths));
80
+ }
81
+ return declarations;
82
+ }
83
+
84
+ exports.documentBody = documentBody;
85
+ exports.documentClosing = documentClosing;
86
+ //# sourceMappingURL=document.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document.cjs","sources":["../../../../src/application/transform/document/document.ts"],"sourcesContent":["import { irKeyword, irRecord } from \"../../../domain/ir/constructors.js\";\nimport type {\n IrDeclaration,\n IrIntersectionType,\n IrObjectType,\n IrType,\n IrTypeAliasDeclaration,\n} from \"../../../domain/ir/nodes.js\";\nimport type { ComponentsObject } from \"../../../domain/openapi/components-object.js\";\nimport type { DocumentObject } from \"../../../domain/openapi/document-object.js\";\nimport type { PathsObject } from \"../../../domain/openapi/path-item-object.js\";\nimport { READ_WRITE_MARKER_TYPES } from \"../helper-types.js\";\nimport type { TransformContext, TransformOptions } from \"../transform-context.js\";\nimport { componentsType } from \"./components.js\";\nimport { defsRootType } from \"./defs-root.js\";\nimport { keptDeprecatedComponents } from \"./kept-deprecated.js\";\nimport { pathsType } from \"./paths.js\";\nimport { apiPathsEnumDeclaration } from \"./paths-enum.js\";\nimport { webhooksType } from \"./webhooks.js\";\n\n/** The root types, in output order. */\nconst ROOT_KEYS = Object.freeze([\"paths\", \"webhooks\", \"components\", \"$defs\"] as const);\ntype RootKey = (typeof ROOT_KEYS)[number];\n\nconst OPERATIONS_NAME = \"operations\";\n/** The type of a root without members: `Record<string, never>`. */\nconst EMPTY_ROOT_TYPE = irRecord(irKeyword(\"string\"), irKeyword(\"never\"));\n\n/** A root's type and the declarations that follow it (the `--root-types` aliases). */\ninterface RootResult {\n readonly type: IrType;\n readonly aliases: readonly IrTypeAliasDeclaration[];\n}\n\ntype RootTransform = (\n node: object,\n context: TransformContext,\n document: DocumentObject,\n) => RootResult;\n\n/** Without `--exclude-deprecated` nothing is left out, so the scan is skipped. */\nfunction keptDeprecated(document: DocumentObject, context: TransformContext): ReadonlySet<object> {\n return context.options.excludeDeprecated\n ? keptDeprecatedComponents(document, context.refs)\n : new Set();\n}\n\nconst ROOT_TRANSFORMS: Readonly<Record<RootKey, RootTransform>> = {\n paths: (node, context) => ({ type: pathsType(node as PathsObject, context), aliases: [] }),\n webhooks: (node, context) => ({ type: webhooksType(node as PathsObject, context), aliases: [] }),\n components: (node, context, document) => {\n const kept = keptDeprecated(document, context);\n const { type, rootTypes } = componentsType(node as ComponentsObject, context, kept);\n return { type, aliases: rootTypes };\n },\n $defs: (node, context) => ({\n type: defsRootType(node as NonNullable<DocumentObject[\"$defs\"]>, context),\n aliases: [],\n }),\n};\n\nfunction emptyAlias(name: string): IrTypeAliasDeclaration {\n return { kind: \"typeAlias\", name, isExported: true, type: EMPTY_ROOT_TYPE, comments: [] };\n}\n\n/** A root type that declares something: an object with members, or an intersection of them. */\ntype RootBodyType = IrObjectType | IrIntersectionType;\n\nfunction isRootBody(type: IrType): type is RootBodyType {\n return (type.kind === \"object\" && type.members.length > 0) || type.kind === \"intersection\";\n}\n\n/**\n * A root with members: an interface, or a type alias with `--export-type`. An intersection (the\n * `paths` of overlapping `--path-params-as-types` keys) can only be a type alias.\n */\nfunction rootDeclaration(\n name: RootKey,\n type: RootBodyType,\n options: TransformOptions,\n): IrDeclaration {\n return options.exportType || type.kind === \"intersection\"\n ? { kind: \"typeAlias\", name, isExported: true, type, comments: [] }\n : { kind: \"interface\", name, isExported: true, members: type.members, comments: [] };\n}\n\n/**\n * The declarations of one root. A root that is missing, or whose type has no members, is\n * `Record<string, never>`. Only an object type (or the `paths` intersection) counts as having\n * members: a callback type the IR keeps as raw text does not (ADR-004).\n */\nfunction rootDeclarations(\n root: RootKey,\n document: DocumentObject,\n context: TransformContext,\n): IrDeclaration[] {\n const node: unknown = document[root];\n if (!node || typeof node !== \"object\") {\n context.diagnostics.debug(`${root} done (skipped)`, 0);\n return [emptyAlias(root)];\n }\n const startedAt = context.diagnostics.now();\n const { type, aliases } = ROOT_TRANSFORMS[root](node, context, document);\n if (!isRootBody(type)) {\n context.diagnostics.debug(`${root} done (skipped)`, 0);\n return [emptyAlias(root), ...aliases];\n }\n const declaration = rootDeclaration(root, type, context.options);\n context.diagnostics.debug(`${root} done`, context.diagnostics.now() - startedAt);\n return [declaration, ...aliases];\n}\n\n/**\n * The `inject` text as written (ADR-010, decision 4), without the blank lines around it. The\n * original reprinted it with the TypeScript printer; text without code printed nothing then.\n */\nfunction withoutBlankLinesAround(text: string): string {\n return text.replace(/^(?:[ \\t]*\\r?\\n)+/, \"\").trimEnd();\n}\n\n/**\n * The document's declarations before the footer: helper types, injected code, then one root type\n * per root key with the aliases that follow it.\n */\nexport function documentBody(document: DocumentObject, context: TransformContext): IrDeclaration[] {\n const declarations: IrDeclaration[] = [];\n if (context.options.readWriteMarkers) {\n declarations.push({ kind: \"rawDeclaration\", text: READ_WRITE_MARKER_TYPES });\n }\n const inject = withoutBlankLinesAround(context.options.inject ?? \"\");\n if (inject !== \"\") {\n declarations.push({ kind: \"rawDeclaration\", text: inject });\n }\n for (const root of ROOT_KEYS) {\n declarations.push(...rootDeclarations(root, document, context));\n }\n return declarations;\n}\n\n/**\n * The declarations after the footer: an empty `operations` type when the footer has no\n * operations, and the `--make-paths-enum` enum.\n */\nexport function documentClosing(\n document: DocumentObject,\n context: TransformContext,\n hasOperations: boolean,\n): IrDeclaration[] {\n const declarations: IrDeclaration[] = [];\n if (!hasOperations) {\n declarations.push(emptyAlias(OPERATIONS_NAME));\n }\n if (context.options.makePathsEnum && document.paths) {\n declarations.push(apiPathsEnumDeclaration(document.paths));\n }\n return declarations;\n}\n"],"names":["irRecord","irKeyword","keptDeprecatedComponents","pathsType","webhooksType","componentsType","defsRootType","READ_WRITE_MARKER_TYPES","apiPathsEnumDeclaration"],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ import { irRecord, irKeyword } from '../../../domain/ir/constructors.mjs';
2
+ import { READ_WRITE_MARKER_TYPES } from '../helper-types.mjs';
3
+ import { componentsType } from './components.mjs';
4
+ import { defsRootType } from './defs-root.mjs';
5
+ import { keptDeprecatedComponents } from './kept-deprecated.mjs';
6
+ import { pathsType } from './paths.mjs';
7
+ import { apiPathsEnumDeclaration } from './paths-enum.mjs';
8
+ import { webhooksType } from './webhooks.mjs';
9
+
10
+ const ROOT_KEYS = Object.freeze(["paths", "webhooks", "components", "$defs"]);
11
+ const OPERATIONS_NAME = "operations";
12
+ const EMPTY_ROOT_TYPE = irRecord(irKeyword("string"), irKeyword("never"));
13
+ function keptDeprecated(document, context) {
14
+ return context.options.excludeDeprecated ? keptDeprecatedComponents(document, context.refs) : /* @__PURE__ */ new Set();
15
+ }
16
+ const ROOT_TRANSFORMS = {
17
+ paths: (node, context) => ({ type: pathsType(node, context), aliases: [] }),
18
+ webhooks: (node, context) => ({ type: webhooksType(node, context), aliases: [] }),
19
+ components: (node, context, document) => {
20
+ const kept = keptDeprecated(document, context);
21
+ const { type, rootTypes } = componentsType(node, context, kept);
22
+ return { type, aliases: rootTypes };
23
+ },
24
+ $defs: (node, context) => ({
25
+ type: defsRootType(node, context),
26
+ aliases: []
27
+ })
28
+ };
29
+ function emptyAlias(name) {
30
+ return { kind: "typeAlias", name, isExported: true, type: EMPTY_ROOT_TYPE, comments: [] };
31
+ }
32
+ function isRootBody(type) {
33
+ return type.kind === "object" && type.members.length > 0 || type.kind === "intersection";
34
+ }
35
+ function rootDeclaration(name, type, options) {
36
+ return options.exportType || type.kind === "intersection" ? { kind: "typeAlias", name, isExported: true, type, comments: [] } : { kind: "interface", name, isExported: true, members: type.members, comments: [] };
37
+ }
38
+ function rootDeclarations(root, document, context) {
39
+ const node = document[root];
40
+ if (!node || typeof node !== "object") {
41
+ context.diagnostics.debug(`${root} done (skipped)`, 0);
42
+ return [emptyAlias(root)];
43
+ }
44
+ const startedAt = context.diagnostics.now();
45
+ const { type, aliases } = ROOT_TRANSFORMS[root](node, context, document);
46
+ if (!isRootBody(type)) {
47
+ context.diagnostics.debug(`${root} done (skipped)`, 0);
48
+ return [emptyAlias(root), ...aliases];
49
+ }
50
+ const declaration = rootDeclaration(root, type, context.options);
51
+ context.diagnostics.debug(`${root} done`, context.diagnostics.now() - startedAt);
52
+ return [declaration, ...aliases];
53
+ }
54
+ function withoutBlankLinesAround(text) {
55
+ return text.replace(/^(?:[ \t]*\r?\n)+/, "").trimEnd();
56
+ }
57
+ function documentBody(document, context) {
58
+ const declarations = [];
59
+ if (context.options.readWriteMarkers) {
60
+ declarations.push({ kind: "rawDeclaration", text: READ_WRITE_MARKER_TYPES });
61
+ }
62
+ const inject = withoutBlankLinesAround(context.options.inject ?? "");
63
+ if (inject !== "") {
64
+ declarations.push({ kind: "rawDeclaration", text: inject });
65
+ }
66
+ for (const root of ROOT_KEYS) {
67
+ declarations.push(...rootDeclarations(root, document, context));
68
+ }
69
+ return declarations;
70
+ }
71
+ function documentClosing(document, context, hasOperations) {
72
+ const declarations = [];
73
+ if (!hasOperations) {
74
+ declarations.push(emptyAlias(OPERATIONS_NAME));
75
+ }
76
+ if (context.options.makePathsEnum && document.paths) {
77
+ declarations.push(apiPathsEnumDeclaration(document.paths));
78
+ }
79
+ return declarations;
80
+ }
81
+
82
+ export { documentBody, documentClosing };
83
+ //# sourceMappingURL=document.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document.mjs","sources":["../../../../src/application/transform/document/document.ts"],"sourcesContent":["import { irKeyword, irRecord } from \"../../../domain/ir/constructors.js\";\nimport type {\n IrDeclaration,\n IrIntersectionType,\n IrObjectType,\n IrType,\n IrTypeAliasDeclaration,\n} from \"../../../domain/ir/nodes.js\";\nimport type { ComponentsObject } from \"../../../domain/openapi/components-object.js\";\nimport type { DocumentObject } from \"../../../domain/openapi/document-object.js\";\nimport type { PathsObject } from \"../../../domain/openapi/path-item-object.js\";\nimport { READ_WRITE_MARKER_TYPES } from \"../helper-types.js\";\nimport type { TransformContext, TransformOptions } from \"../transform-context.js\";\nimport { componentsType } from \"./components.js\";\nimport { defsRootType } from \"./defs-root.js\";\nimport { keptDeprecatedComponents } from \"./kept-deprecated.js\";\nimport { pathsType } from \"./paths.js\";\nimport { apiPathsEnumDeclaration } from \"./paths-enum.js\";\nimport { webhooksType } from \"./webhooks.js\";\n\n/** The root types, in output order. */\nconst ROOT_KEYS = Object.freeze([\"paths\", \"webhooks\", \"components\", \"$defs\"] as const);\ntype RootKey = (typeof ROOT_KEYS)[number];\n\nconst OPERATIONS_NAME = \"operations\";\n/** The type of a root without members: `Record<string, never>`. */\nconst EMPTY_ROOT_TYPE = irRecord(irKeyword(\"string\"), irKeyword(\"never\"));\n\n/** A root's type and the declarations that follow it (the `--root-types` aliases). */\ninterface RootResult {\n readonly type: IrType;\n readonly aliases: readonly IrTypeAliasDeclaration[];\n}\n\ntype RootTransform = (\n node: object,\n context: TransformContext,\n document: DocumentObject,\n) => RootResult;\n\n/** Without `--exclude-deprecated` nothing is left out, so the scan is skipped. */\nfunction keptDeprecated(document: DocumentObject, context: TransformContext): ReadonlySet<object> {\n return context.options.excludeDeprecated\n ? keptDeprecatedComponents(document, context.refs)\n : new Set();\n}\n\nconst ROOT_TRANSFORMS: Readonly<Record<RootKey, RootTransform>> = {\n paths: (node, context) => ({ type: pathsType(node as PathsObject, context), aliases: [] }),\n webhooks: (node, context) => ({ type: webhooksType(node as PathsObject, context), aliases: [] }),\n components: (node, context, document) => {\n const kept = keptDeprecated(document, context);\n const { type, rootTypes } = componentsType(node as ComponentsObject, context, kept);\n return { type, aliases: rootTypes };\n },\n $defs: (node, context) => ({\n type: defsRootType(node as NonNullable<DocumentObject[\"$defs\"]>, context),\n aliases: [],\n }),\n};\n\nfunction emptyAlias(name: string): IrTypeAliasDeclaration {\n return { kind: \"typeAlias\", name, isExported: true, type: EMPTY_ROOT_TYPE, comments: [] };\n}\n\n/** A root type that declares something: an object with members, or an intersection of them. */\ntype RootBodyType = IrObjectType | IrIntersectionType;\n\nfunction isRootBody(type: IrType): type is RootBodyType {\n return (type.kind === \"object\" && type.members.length > 0) || type.kind === \"intersection\";\n}\n\n/**\n * A root with members: an interface, or a type alias with `--export-type`. An intersection (the\n * `paths` of overlapping `--path-params-as-types` keys) can only be a type alias.\n */\nfunction rootDeclaration(\n name: RootKey,\n type: RootBodyType,\n options: TransformOptions,\n): IrDeclaration {\n return options.exportType || type.kind === \"intersection\"\n ? { kind: \"typeAlias\", name, isExported: true, type, comments: [] }\n : { kind: \"interface\", name, isExported: true, members: type.members, comments: [] };\n}\n\n/**\n * The declarations of one root. A root that is missing, or whose type has no members, is\n * `Record<string, never>`. Only an object type (or the `paths` intersection) counts as having\n * members: a callback type the IR keeps as raw text does not (ADR-004).\n */\nfunction rootDeclarations(\n root: RootKey,\n document: DocumentObject,\n context: TransformContext,\n): IrDeclaration[] {\n const node: unknown = document[root];\n if (!node || typeof node !== \"object\") {\n context.diagnostics.debug(`${root} done (skipped)`, 0);\n return [emptyAlias(root)];\n }\n const startedAt = context.diagnostics.now();\n const { type, aliases } = ROOT_TRANSFORMS[root](node, context, document);\n if (!isRootBody(type)) {\n context.diagnostics.debug(`${root} done (skipped)`, 0);\n return [emptyAlias(root), ...aliases];\n }\n const declaration = rootDeclaration(root, type, context.options);\n context.diagnostics.debug(`${root} done`, context.diagnostics.now() - startedAt);\n return [declaration, ...aliases];\n}\n\n/**\n * The `inject` text as written (ADR-010, decision 4), without the blank lines around it. The\n * original reprinted it with the TypeScript printer; text without code printed nothing then.\n */\nfunction withoutBlankLinesAround(text: string): string {\n return text.replace(/^(?:[ \\t]*\\r?\\n)+/, \"\").trimEnd();\n}\n\n/**\n * The document's declarations before the footer: helper types, injected code, then one root type\n * per root key with the aliases that follow it.\n */\nexport function documentBody(document: DocumentObject, context: TransformContext): IrDeclaration[] {\n const declarations: IrDeclaration[] = [];\n if (context.options.readWriteMarkers) {\n declarations.push({ kind: \"rawDeclaration\", text: READ_WRITE_MARKER_TYPES });\n }\n const inject = withoutBlankLinesAround(context.options.inject ?? \"\");\n if (inject !== \"\") {\n declarations.push({ kind: \"rawDeclaration\", text: inject });\n }\n for (const root of ROOT_KEYS) {\n declarations.push(...rootDeclarations(root, document, context));\n }\n return declarations;\n}\n\n/**\n * The declarations after the footer: an empty `operations` type when the footer has no\n * operations, and the `--make-paths-enum` enum.\n */\nexport function documentClosing(\n document: DocumentObject,\n context: TransformContext,\n hasOperations: boolean,\n): IrDeclaration[] {\n const declarations: IrDeclaration[] = [];\n if (!hasOperations) {\n declarations.push(emptyAlias(OPERATIONS_NAME));\n }\n if (context.options.makePathsEnum && document.paths) {\n declarations.push(apiPathsEnumDeclaration(document.paths));\n }\n return declarations;\n}\n"],"names":[],"mappings":";;;;;;;;;AAqBA,MAAM,SAAA,GAAY,OAAO,MAAA,CAAO,CAAC,SAAS,UAAA,EAAY,YAAA,EAAc,OAAO,CAAU,CAAA;AAGrF,MAAM,eAAA,GAAkB,YAAA;AAExB,MAAM,kBAAkB,QAAA,CAAS,SAAA,CAAU,QAAQ,CAAA,EAAG,SAAA,CAAU,OAAO,CAAC,CAAA;AAexE,SAAS,cAAA,CAAe,UAA0B,OAAA,EAAgD;AAChG,EAAA,OAAO,OAAA,CAAQ,QAAQ,iBAAA,GACnB,wBAAA,CAAyB,UAAU,OAAA,CAAQ,IAAI,CAAA,mBAC/C,IAAI,GAAA,EAAI;AACd;AAEA,MAAM,eAAA,GAA4D;AAAA,EAChE,KAAA,EAAO,CAAC,IAAA,EAAM,OAAA,MAAa,EAAE,IAAA,EAAM,SAAA,CAAU,IAAA,EAAqB,OAAO,CAAA,EAAG,OAAA,EAAS,EAAC,EAAE,CAAA;AAAA,EACxF,QAAA,EAAU,CAAC,IAAA,EAAM,OAAA,MAAa,EAAE,IAAA,EAAM,YAAA,CAAa,IAAA,EAAqB,OAAO,CAAA,EAAG,OAAA,EAAS,EAAC,EAAE,CAAA;AAAA,EAC9F,UAAA,EAAY,CAAC,IAAA,EAAM,OAAA,EAAS,QAAA,KAAa;AACvC,IAAA,MAAM,IAAA,GAAO,cAAA,CAAe,QAAA,EAAU,OAAO,CAAA;AAC7C,IAAA,MAAM,EAAE,IAAA,EAAM,SAAA,KAAc,cAAA,CAAe,IAAA,EAA0B,SAAS,IAAI,CAAA;AAClF,IAAA,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,SAAA,EAAU;AAAA,EACpC,CAAA;AAAA,EACA,KAAA,EAAO,CAAC,IAAA,EAAM,OAAA,MAAa;AAAA,IACzB,IAAA,EAAM,YAAA,CAAa,IAAA,EAA8C,OAAO,CAAA;AAAA,IACxE,SAAS;AAAC,GACZ;AACF,CAAA;AAEA,SAAS,WAAW,IAAA,EAAsC;AACxD,EAAA,OAAO,EAAE,IAAA,EAAM,WAAA,EAAa,IAAA,EAAM,UAAA,EAAY,MAAM,IAAA,EAAM,eAAA,EAAiB,QAAA,EAAU,EAAC,EAAE;AAC1F;AAKA,SAAS,WAAW,IAAA,EAAoC;AACtD,EAAA,OAAQ,IAAA,CAAK,SAAS,QAAA,IAAY,IAAA,CAAK,QAAQ,MAAA,GAAS,CAAA,IAAM,KAAK,IAAA,KAAS,cAAA;AAC9E;AAMA,SAAS,eAAA,CACP,IAAA,EACA,IAAA,EACA,OAAA,EACe;AACf,EAAA,OAAO,OAAA,CAAQ,UAAA,IAAc,IAAA,CAAK,IAAA,KAAS,cAAA,GACvC,EAAE,IAAA,EAAM,WAAA,EAAa,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,IAAA,EAAM,QAAA,EAAU,EAAC,EAAE,GAChE,EAAE,IAAA,EAAM,WAAA,EAAa,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,OAAA,EAAS,IAAA,CAAK,OAAA,EAAS,QAAA,EAAU,EAAC,EAAE;AACvF;AAOA,SAAS,gBAAA,CACP,IAAA,EACA,QAAA,EACA,OAAA,EACiB;AACjB,EAAA,MAAM,IAAA,GAAgB,SAAS,IAAI,CAAA;AACnC,EAAA,IAAI,CAAC,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,EAAU;AACrC,IAAA,OAAA,CAAQ,WAAA,CAAY,KAAA,CAAM,CAAA,EAAG,IAAI,mBAAmB,CAAC,CAAA;AACrD,IAAA,OAAO,CAAC,UAAA,CAAW,IAAI,CAAC,CAAA;AAAA,EAC1B;AACA,EAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,WAAA,CAAY,GAAA,EAAI;AAC1C,EAAA,MAAM,EAAE,MAAM,OAAA,EAAQ,GAAI,gBAAgB,IAAI,CAAA,CAAE,IAAA,EAAM,OAAA,EAAS,QAAQ,CAAA;AACvE,EAAA,IAAI,CAAC,UAAA,CAAW,IAAI,CAAA,EAAG;AACrB,IAAA,OAAA,CAAQ,WAAA,CAAY,KAAA,CAAM,CAAA,EAAG,IAAI,mBAAmB,CAAC,CAAA;AACrD,IAAA,OAAO,CAAC,UAAA,CAAW,IAAI,CAAA,EAAG,GAAG,OAAO,CAAA;AAAA,EACtC;AACA,EAAA,MAAM,WAAA,GAAc,eAAA,CAAgB,IAAA,EAAM,IAAA,EAAM,QAAQ,OAAO,CAAA;AAC/D,EAAA,OAAA,CAAQ,WAAA,CAAY,MAAM,CAAA,EAAG,IAAI,SAAS,OAAA,CAAQ,WAAA,CAAY,GAAA,EAAI,GAAI,SAAS,CAAA;AAC/E,EAAA,OAAO,CAAC,WAAA,EAAa,GAAG,OAAO,CAAA;AACjC;AAMA,SAAS,wBAAwB,IAAA,EAAsB;AACrD,EAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,mBAAA,EAAqB,EAAE,EAAE,OAAA,EAAQ;AACvD;AAMO,SAAS,YAAA,CAAa,UAA0B,OAAA,EAA4C;AACjG,EAAA,MAAM,eAAgC,EAAC;AACvC,EAAA,IAAI,OAAA,CAAQ,QAAQ,gBAAA,EAAkB;AACpC,IAAA,YAAA,CAAa,KAAK,EAAE,IAAA,EAAM,gBAAA,EAAkB,IAAA,EAAM,yBAAyB,CAAA;AAAA,EAC7E;AACA,EAAA,MAAM,MAAA,GAAS,uBAAA,CAAwB,OAAA,CAAQ,OAAA,CAAQ,UAAU,EAAE,CAAA;AACnE,EAAA,IAAI,WAAW,EAAA,EAAI;AACjB,IAAA,YAAA,CAAa,KAAK,EAAE,IAAA,EAAM,gBAAA,EAAkB,IAAA,EAAM,QAAQ,CAAA;AAAA,EAC5D;AACA,EAAA,KAAA,MAAW,QAAQ,SAAA,EAAW;AAC5B,IAAA,YAAA,CAAa,KAAK,GAAG,gBAAA,CAAiB,IAAA,EAAM,QAAA,EAAU,OAAO,CAAC,CAAA;AAAA,EAChE;AACA,EAAA,OAAO,YAAA;AACT;AAMO,SAAS,eAAA,CACd,QAAA,EACA,OAAA,EACA,aAAA,EACiB;AACjB,EAAA,MAAM,eAAgC,EAAC;AACvC,EAAA,IAAI,CAAC,aAAA,EAAe;AAClB,IAAA,YAAA,CAAa,IAAA,CAAK,UAAA,CAAW,eAAe,CAAC,CAAA;AAAA,EAC/C;AACA,EAAA,IAAI,OAAA,CAAQ,OAAA,CAAQ,aAAA,IAAiB,QAAA,CAAS,KAAA,EAAO;AACnD,IAAA,YAAA,CAAa,IAAA,CAAK,uBAAA,CAAwB,QAAA,CAAS,KAAK,CAAC,CAAA;AAAA,EAC3D;AACA,EAAA,OAAO,YAAA;AACT;;"}
@@ -0,0 +1,27 @@
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 schemaTransform = require('../schema/schema-transform.cjs');
7
+ const sharedTypes = require('../shared-types.cjs');
8
+ const documentMember = require('./document-member.cjs');
9
+ const mediaType = require('./media-type.cjs');
10
+
11
+ function headerType(header, location, context) {
12
+ if (header.schema) {
13
+ return schemaTransform.transformSchema(header.schema, location, context);
14
+ }
15
+ if (!header.content) {
16
+ return sharedTypes.UNKNOWN_TYPE;
17
+ }
18
+ const members = documentEntries.documentEntries(header.content, context.options).map(([contentType, entry]) => {
19
+ const path = `${location.path ?? "#"}/${jsonPointer.escapePointerSegment(contentType)}`;
20
+ const type = mediaType.contentEntryType(entry, { ...location, path }, context);
21
+ return documentMember.documentMember(contentType, type, entry, { isReadonly: context.options.immutable });
22
+ });
23
+ return constructors.irObject(members);
24
+ }
25
+
26
+ exports.headerType = headerType;
27
+ //# sourceMappingURL=header.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header.cjs","sources":["../../../../src/application/transform/document/header.ts"],"sourcesContent":["import { irObject } from \"../../../domain/ir/constructors.js\";\nimport type { IrType } from \"../../../domain/ir/nodes.js\";\nimport type { HeaderObject } from \"../../../domain/openapi/header-object.js\";\nimport { escapePointerSegment } from \"../../../domain/openapi/json-pointer.js\";\nimport { documentEntries } from \"../document-entries.js\";\nimport type { SchemaContext, SchemaLocation } from \"../schema/schema-context.js\";\nimport { transformSchema } from \"../schema/schema-transform.js\";\nimport { UNKNOWN_TYPE } from \"../shared-types.js\";\nimport { documentMember } from \"./document-member.js\";\nimport { contentEntryType } from \"./media-type.js\";\n\n/**\n * A header's type (OpenAPI 3.1 §4.8.21): its schema, else an object with one property per media\n * type in `content`, else `unknown`.\n */\nexport function headerType(\n header: HeaderObject,\n location: SchemaLocation,\n context: SchemaContext,\n): IrType {\n if (header.schema) {\n return transformSchema(header.schema, location, context);\n }\n if (!header.content) {\n return UNKNOWN_TYPE;\n }\n const members = documentEntries(header.content, context.options).map(([contentType, entry]) => {\n // Unlike other content maps, the original joins this path by hand: a missing path is `#`.\n const path = `${location.path ?? \"#\"}/${escapePointerSegment(contentType)}`;\n const type = contentEntryType(entry, { ...location, path }, context);\n return documentMember(contentType, type, entry, { isReadonly: context.options.immutable });\n });\n return irObject(members);\n}\n"],"names":["transformSchema","UNKNOWN_TYPE","documentEntries","escapePointerSegment","contentEntryType","documentMember","irObject"],"mappings":";;;;;;;;;;AAeO,SAAS,UAAA,CACd,MAAA,EACA,QAAA,EACA,OAAA,EACQ;AACR,EAAA,IAAI,OAAO,MAAA,EAAQ;AACjB,IAAA,OAAOA,+BAAA,CAAgB,MAAA,CAAO,MAAA,EAAQ,QAAA,EAAU,OAAO,CAAA;AAAA,EACzD;AACA,EAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,IAAA,OAAOC,wBAAA;AAAA,EACT;AACA,EAAA,MAAM,OAAA,GAAUC,+BAAA,CAAgB,MAAA,CAAO,OAAA,EAAS,OAAA,CAAQ,OAAO,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,WAAA,EAAa,KAAK,CAAA,KAAM;AAE7F,IAAA,MAAM,IAAA,GAAO,GAAG,QAAA,CAAS,IAAA,IAAQ,GAAG,CAAA,CAAA,EAAIC,gCAAA,CAAqB,WAAW,CAAC,CAAA,CAAA;AACzE,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;AACD,EAAA,OAAOC,sBAAS,OAAO,CAAA;AACzB;;"}