openapi-typesafe 1.0.0-rc.3 → 1.0.0-rc.5

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 (596) hide show
  1. package/CHANGELOG.md +1972 -0
  2. package/dist/adapters/node-file-system/file-claims.cjs +105 -0
  3. package/dist/adapters/node-file-system/file-claims.cjs.map +1 -0
  4. package/dist/adapters/node-file-system/file-claims.mjs +95 -0
  5. package/dist/adapters/node-file-system/file-claims.mjs.map +1 -0
  6. package/dist/adapters/node-file-system/file-identity.cjs +82 -0
  7. package/dist/adapters/node-file-system/file-identity.cjs.map +1 -0
  8. package/dist/adapters/node-file-system/file-identity.mjs +74 -0
  9. package/dist/adapters/node-file-system/file-identity.mjs.map +1 -0
  10. package/dist/adapters/node-file-system/node-file-system.cjs +97 -14
  11. package/dist/adapters/node-file-system/node-file-system.cjs.map +1 -1
  12. package/dist/adapters/node-file-system/node-file-system.mjs +97 -14
  13. package/dist/adapters/node-file-system/node-file-system.mjs.map +1 -1
  14. package/dist/adapters/pipe-safe-writer/pipe-safe-writer.cjs +19 -0
  15. package/dist/adapters/pipe-safe-writer/pipe-safe-writer.cjs.map +1 -0
  16. package/dist/adapters/pipe-safe-writer/pipe-safe-writer.mjs +17 -0
  17. package/dist/adapters/pipe-safe-writer/pipe-safe-writer.mjs.map +1 -0
  18. package/dist/adapters/redocly-loader/bundled-mapping-copies.cjs +48 -0
  19. package/dist/adapters/redocly-loader/bundled-mapping-copies.cjs.map +1 -0
  20. package/dist/adapters/redocly-loader/bundled-mapping-copies.mjs +45 -0
  21. package/dist/adapters/redocly-loader/bundled-mapping-copies.mjs.map +1 -0
  22. package/dist/adapters/redocly-loader/bundled-ref-repair.cjs +1 -1
  23. package/dist/adapters/redocly-loader/bundled-ref-repair.cjs.map +1 -1
  24. package/dist/adapters/redocly-loader/bundled-ref-repair.mjs +2 -2
  25. package/dist/adapters/redocly-loader/bundled-ref-repair.mjs.map +1 -1
  26. package/dist/adapters/redocly-loader/component-schemas.cjs +17 -0
  27. package/dist/adapters/redocly-loader/component-schemas.cjs.map +1 -0
  28. package/dist/adapters/redocly-loader/component-schemas.mjs +14 -0
  29. package/dist/adapters/redocly-loader/component-schemas.mjs.map +1 -0
  30. package/dist/adapters/redocly-loader/loaded-documents.cjs +28 -0
  31. package/dist/adapters/redocly-loader/loaded-documents.cjs.map +1 -0
  32. package/dist/adapters/redocly-loader/loaded-documents.mjs +21 -0
  33. package/dist/adapters/redocly-loader/loaded-documents.mjs.map +1 -0
  34. package/dist/adapters/redocly-loader/mapping-schema-names.cjs +22 -0
  35. package/dist/adapters/redocly-loader/mapping-schema-names.cjs.map +1 -0
  36. package/dist/adapters/redocly-loader/mapping-schema-names.mjs +20 -0
  37. package/dist/adapters/redocly-loader/mapping-schema-names.mjs.map +1 -0
  38. package/dist/adapters/redocly-loader/query-named-components.cjs +137 -0
  39. package/dist/adapters/redocly-loader/query-named-components.cjs.map +1 -0
  40. package/dist/adapters/redocly-loader/query-named-components.mjs +134 -0
  41. package/dist/adapters/redocly-loader/query-named-components.mjs.map +1 -0
  42. package/dist/adapters/redocly-loader/redocly-schema-loader.cjs +40 -29
  43. package/dist/adapters/redocly-loader/redocly-schema-loader.cjs.map +1 -1
  44. package/dist/adapters/redocly-loader/redocly-schema-loader.mjs +38 -27
  45. package/dist/adapters/redocly-loader/redocly-schema-loader.mjs.map +1 -1
  46. package/dist/adapters/redocly-loader/ref-access.cjs +45 -4
  47. package/dist/adapters/redocly-loader/ref-access.cjs.map +1 -1
  48. package/dist/adapters/redocly-loader/ref-access.mjs +45 -4
  49. package/dist/adapters/redocly-loader/ref-access.mjs.map +1 -1
  50. package/dist/adapters/redocly-loader/ref-holders.cjs +52 -10
  51. package/dist/adapters/redocly-loader/ref-holders.cjs.map +1 -1
  52. package/dist/adapters/redocly-loader/ref-holders.mjs +53 -12
  53. package/dist/adapters/redocly-loader/ref-holders.mjs.map +1 -1
  54. package/dist/adapters/redocly-loader/remote-body-limit.cjs +50 -0
  55. package/dist/adapters/redocly-loader/remote-body-limit.cjs.map +1 -0
  56. package/dist/adapters/redocly-loader/remote-body-limit.mjs +48 -0
  57. package/dist/adapters/redocly-loader/remote-body-limit.mjs.map +1 -0
  58. package/dist/adapters/redocly-loader/remote-fetch.cjs +40 -9
  59. package/dist/adapters/redocly-loader/remote-fetch.cjs.map +1 -1
  60. package/dist/adapters/redocly-loader/remote-fetch.mjs +40 -9
  61. package/dist/adapters/redocly-loader/remote-fetch.mjs.map +1 -1
  62. package/dist/adapters/redocly-loader/remote-node-limit.cjs +61 -0
  63. package/dist/adapters/redocly-loader/remote-node-limit.cjs.map +1 -0
  64. package/dist/adapters/redocly-loader/remote-node-limit.mjs +58 -0
  65. package/dist/adapters/redocly-loader/remote-node-limit.mjs.map +1 -0
  66. package/dist/adapters/redocly-loader/schema-load-errors.cjs +32 -8
  67. package/dist/adapters/redocly-loader/schema-load-errors.cjs.map +1 -1
  68. package/dist/adapters/redocly-loader/schema-load-errors.mjs +32 -9
  69. package/dist/adapters/redocly-loader/schema-load-errors.mjs.map +1 -1
  70. package/dist/adapters/redocly-loader/schema-source.cjs +18 -9
  71. package/dist/adapters/redocly-loader/schema-source.cjs.map +1 -1
  72. package/dist/adapters/redocly-loader/schema-source.mjs +20 -11
  73. package/dist/adapters/redocly-loader/schema-source.mjs.map +1 -1
  74. package/dist/adapters/redocly-loader/unsupported-keys.cjs +3 -5
  75. package/dist/adapters/redocly-loader/unsupported-keys.cjs.map +1 -1
  76. package/dist/adapters/redocly-loader/unsupported-keys.mjs +3 -5
  77. package/dist/adapters/redocly-loader/unsupported-keys.mjs.map +1 -1
  78. package/dist/adapters/terminal-logger/terminal-logger.cjs +10 -4
  79. package/dist/adapters/terminal-logger/terminal-logger.cjs.map +1 -1
  80. package/dist/adapters/terminal-logger/terminal-logger.mjs +10 -4
  81. package/dist/adapters/terminal-logger/terminal-logger.mjs.map +1 -1
  82. package/dist/api/default-ports.cjs +14 -2
  83. package/dist/api/default-ports.cjs.map +1 -1
  84. package/dist/api/default-ports.mjs +14 -2
  85. package/dist/api/default-ports.mjs.map +1 -1
  86. package/dist/api/discriminator-enum-parent.cjs +2 -2
  87. package/dist/api/discriminator-enum-parent.cjs.map +1 -1
  88. package/dist/api/discriminator-enum-parent.mjs +3 -3
  89. package/dist/api/discriminator-enum-parent.mjs.map +1 -1
  90. package/dist/api/discriminator-other-owners.cjs +5 -3
  91. package/dist/api/discriminator-other-owners.cjs.map +1 -1
  92. package/dist/api/discriminator-other-owners.mjs +5 -3
  93. package/dist/api/discriminator-other-owners.mjs.map +1 -1
  94. package/dist/api/discriminator-patch.cjs +5 -1
  95. package/dist/api/discriminator-patch.cjs.map +1 -1
  96. package/dist/api/discriminator-patch.mjs +5 -1
  97. package/dist/api/discriminator-patch.mjs.map +1 -1
  98. package/dist/api/discriminator-scan.cjs +15 -8
  99. package/dist/api/discriminator-scan.cjs.map +1 -1
  100. package/dist/api/discriminator-scan.mjs +15 -8
  101. package/dist/api/discriminator-scan.mjs.map +1 -1
  102. package/dist/api/document-refs.cjs +16 -1
  103. package/dist/api/document-refs.cjs.map +1 -1
  104. package/dist/api/document-refs.mjs +16 -1
  105. package/dist/api/document-refs.mjs.map +1 -1
  106. package/dist/api/document-run.cjs +6 -12
  107. package/dist/api/document-run.cjs.map +1 -1
  108. package/dist/api/document-run.mjs +6 -12
  109. package/dist/api/document-run.mjs.map +1 -1
  110. package/dist/api/legacy-utils.cjs.map +1 -1
  111. package/dist/api/legacy-utils.mjs.map +1 -1
  112. package/dist/api/openapi-ts.cjs +9 -6
  113. package/dist/api/openapi-ts.cjs.map +1 -1
  114. package/dist/api/openapi-ts.mjs +10 -8
  115. package/dist/api/openapi-ts.mjs.map +1 -1
  116. package/dist/api/ref-limit-options.cjs +63 -0
  117. package/dist/api/ref-limit-options.cjs.map +1 -0
  118. package/dist/api/ref-limit-options.mjs +57 -0
  119. package/dist/api/ref-limit-options.mjs.map +1 -0
  120. package/dist/api/schema-callbacks.cjs +36 -12
  121. package/dist/api/schema-callbacks.cjs.map +1 -1
  122. package/dist/api/schema-callbacks.mjs +36 -12
  123. package/dist/api/schema-callbacks.mjs.map +1 -1
  124. package/dist/api/transform-context.cjs +7 -3
  125. package/dist/api/transform-context.cjs.map +1 -1
  126. package/dist/api/transform-context.mjs +7 -3
  127. package/dist/api/transform-context.mjs.map +1 -1
  128. package/dist/api/transform-schema.cjs +47 -10
  129. package/dist/api/transform-schema.cjs.map +1 -1
  130. package/dist/api/transform-schema.mjs +48 -11
  131. package/dist/api/transform-schema.mjs.map +1 -1
  132. package/dist/application/print/text-writer.cjs +10 -3
  133. package/dist/application/print/text-writer.cjs.map +1 -1
  134. package/dist/application/print/text-writer.mjs +10 -3
  135. package/dist/application/print/text-writer.mjs.map +1 -1
  136. package/dist/application/stack-overflow.cjs +2 -1
  137. package/dist/application/stack-overflow.cjs.map +1 -1
  138. package/dist/application/stack-overflow.mjs +2 -1
  139. package/dist/application/stack-overflow.mjs.map +1 -1
  140. package/dist/application/transform/declared-value-types.cjs +36 -0
  141. package/dist/application/transform/declared-value-types.cjs.map +1 -0
  142. package/dist/application/transform/declared-value-types.mjs +34 -0
  143. package/dist/application/transform/declared-value-types.mjs.map +1 -0
  144. package/dist/application/transform/document/components.cjs +1 -1
  145. package/dist/application/transform/document/components.cjs.map +1 -1
  146. package/dist/application/transform/document/components.mjs +2 -2
  147. package/dist/application/transform/document/components.mjs.map +1 -1
  148. package/dist/application/transform/document/declared-type-names.cjs +23 -0
  149. package/dist/application/transform/document/declared-type-names.cjs.map +1 -0
  150. package/dist/application/transform/document/declared-type-names.mjs +20 -0
  151. package/dist/application/transform/document/declared-type-names.mjs.map +1 -0
  152. package/dist/application/transform/document/defs-root.cjs +1 -1
  153. package/dist/application/transform/document/defs-root.cjs.map +1 -1
  154. package/dist/application/transform/document/defs-root.mjs +2 -2
  155. package/dist/application/transform/document/defs-root.mjs.map +1 -1
  156. package/dist/application/transform/document/document.cjs +7 -2
  157. package/dist/application/transform/document/document.cjs.map +1 -1
  158. package/dist/application/transform/document/document.mjs +6 -3
  159. package/dist/application/transform/document/document.mjs.map +1 -1
  160. package/dist/application/transform/document/enum-names-given-back.cjs +62 -0
  161. package/dist/application/transform/document/enum-names-given-back.cjs.map +1 -0
  162. package/dist/application/transform/document/enum-names-given-back.mjs +58 -0
  163. package/dist/application/transform/document/enum-names-given-back.mjs.map +1 -0
  164. package/dist/application/transform/document/exploded-query-values.cjs +63 -0
  165. package/dist/application/transform/document/exploded-query-values.cjs.map +1 -0
  166. package/dist/application/transform/document/exploded-query-values.mjs +59 -0
  167. package/dist/application/transform/document/exploded-query-values.mjs.map +1 -0
  168. package/dist/application/transform/document/global-type-references.cjs +1 -0
  169. package/dist/application/transform/document/global-type-references.cjs.map +1 -1
  170. package/dist/application/transform/document/global-type-references.mjs +1 -1
  171. package/dist/application/transform/document/global-type-references.mjs.map +1 -1
  172. package/dist/application/transform/document/header.cjs +11 -3
  173. package/dist/application/transform/document/header.cjs.map +1 -1
  174. package/dist/application/transform/document/header.mjs +10 -2
  175. package/dist/application/transform/document/header.mjs.map +1 -1
  176. package/dist/application/transform/document/media-type.cjs +2 -2
  177. package/dist/application/transform/document/media-type.cjs.map +1 -1
  178. package/dist/application/transform/document/media-type.mjs +3 -3
  179. package/dist/application/transform/document/media-type.mjs.map +1 -1
  180. package/dist/application/transform/document/operation-keys-written.cjs +26 -0
  181. package/dist/application/transform/document/operation-keys-written.cjs.map +1 -0
  182. package/dist/application/transform/document/operation-keys-written.mjs +24 -0
  183. package/dist/application/transform/document/operation-keys-written.mjs.map +1 -0
  184. package/dist/application/transform/document/operation.cjs +1 -1
  185. package/dist/application/transform/document/operation.cjs.map +1 -1
  186. package/dist/application/transform/document/operation.mjs +2 -2
  187. package/dist/application/transform/document/operation.mjs.map +1 -1
  188. package/dist/application/transform/document/parameter-entries.cjs +34 -0
  189. package/dist/application/transform/document/parameter-entries.cjs.map +1 -0
  190. package/dist/application/transform/document/parameter-entries.mjs +30 -0
  191. package/dist/application/transform/document/parameter-entries.mjs.map +1 -0
  192. package/dist/application/transform/document/parameter.cjs +12 -4
  193. package/dist/application/transform/document/parameter.cjs.map +1 -1
  194. package/dist/application/transform/document/parameter.mjs +13 -5
  195. package/dist/application/transform/document/parameter.mjs.map +1 -1
  196. package/dist/application/transform/document/parameters.cjs +29 -34
  197. package/dist/application/transform/document/parameters.cjs.map +1 -1
  198. package/dist/application/transform/document/parameters.mjs +29 -34
  199. package/dist/application/transform/document/parameters.mjs.map +1 -1
  200. package/dist/application/transform/document/path-item.cjs +15 -17
  201. package/dist/application/transform/document/path-item.cjs.map +1 -1
  202. package/dist/application/transform/document/path-item.mjs +15 -19
  203. package/dist/application/transform/document/path-item.mjs.map +1 -1
  204. package/dist/application/transform/document/path-template-key.cjs +84 -0
  205. package/dist/application/transform/document/path-template-key.cjs.map +1 -0
  206. package/dist/application/transform/document/path-template-key.mjs +79 -0
  207. package/dist/application/transform/document/path-template-key.mjs.map +1 -0
  208. package/dist/application/transform/document/path-template-refs.cjs +70 -0
  209. package/dist/application/transform/document/path-template-refs.cjs.map +1 -0
  210. package/dist/application/transform/document/path-template-refs.mjs +67 -0
  211. package/dist/application/transform/document/path-template-refs.mjs.map +1 -0
  212. package/dist/application/transform/document/paths-enum.cjs +8 -6
  213. package/dist/application/transform/document/paths-enum.cjs.map +1 -1
  214. package/dist/application/transform/document/paths-enum.mjs +8 -7
  215. package/dist/application/transform/document/paths-enum.mjs.map +1 -1
  216. package/dist/application/transform/document/paths.cjs +43 -67
  217. package/dist/application/transform/document/paths.cjs.map +1 -1
  218. package/dist/application/transform/document/paths.mjs +42 -68
  219. package/dist/application/transform/document/paths.mjs.map +1 -1
  220. package/dist/application/transform/document/referenced-parameter.cjs +80 -0
  221. package/dist/application/transform/document/referenced-parameter.cjs.map +1 -0
  222. package/dist/application/transform/document/referenced-parameter.mjs +78 -0
  223. package/dist/application/transform/document/referenced-parameter.mjs.map +1 -0
  224. package/dist/application/transform/document/request-body.cjs +1 -1
  225. package/dist/application/transform/document/request-body.cjs.map +1 -1
  226. package/dist/application/transform/document/request-body.mjs +2 -2
  227. package/dist/application/transform/document/request-body.mjs.map +1 -1
  228. package/dist/application/transform/document/response.cjs +2 -2
  229. package/dist/application/transform/document/response.cjs.map +1 -1
  230. package/dist/application/transform/document/response.mjs +3 -3
  231. package/dist/application/transform/document/response.mjs.map +1 -1
  232. package/dist/application/transform/document/responses.cjs +1 -1
  233. package/dist/application/transform/document/responses.cjs.map +1 -1
  234. package/dist/application/transform/document/responses.mjs +2 -2
  235. package/dist/application/transform/document/responses.mjs.map +1 -1
  236. package/dist/application/transform/document/root-type-aliases.cjs +8 -23
  237. package/dist/application/transform/document/root-type-aliases.cjs.map +1 -1
  238. package/dist/application/transform/document/root-type-aliases.mjs +8 -24
  239. package/dist/application/transform/document/root-type-aliases.mjs.map +1 -1
  240. package/dist/application/transform/document/type-resolution.cjs +3 -1
  241. package/dist/application/transform/document/type-resolution.cjs.map +1 -1
  242. package/dist/application/transform/document/type-resolution.mjs +3 -1
  243. package/dist/application/transform/document/type-resolution.mjs.map +1 -1
  244. package/dist/application/transform/document/webhooks.cjs +10 -3
  245. package/dist/application/transform/document/webhooks.cjs.map +1 -1
  246. package/dist/application/transform/document/webhooks.mjs +10 -3
  247. package/dist/application/transform/document/webhooks.mjs.map +1 -1
  248. package/dist/application/transform/footer/document-footer.cjs +16 -5
  249. package/dist/application/transform/footer/document-footer.cjs.map +1 -1
  250. package/dist/application/transform/footer/document-footer.mjs +16 -5
  251. package/dist/application/transform/footer/document-footer.mjs.map +1 -1
  252. package/dist/application/transform/footer/enum-name-claims.cjs +48 -0
  253. package/dist/application/transform/footer/enum-name-claims.cjs.map +1 -0
  254. package/dist/application/transform/footer/enum-name-claims.mjs +46 -0
  255. package/dist/application/transform/footer/enum-name-claims.mjs.map +1 -0
  256. package/dist/application/transform/footer/operation-keys.cjs +23 -0
  257. package/dist/application/transform/footer/operation-keys.cjs.map +1 -0
  258. package/dist/application/transform/footer/operation-keys.mjs +21 -0
  259. package/dist/application/transform/footer/operation-keys.mjs.map +1 -0
  260. package/dist/application/transform/footer/type-evaluation.cjs +4 -4
  261. package/dist/application/transform/footer/type-evaluation.cjs.map +1 -1
  262. package/dist/application/transform/footer/type-evaluation.mjs +4 -4
  263. package/dist/application/transform/footer/type-evaluation.mjs.map +1 -1
  264. package/dist/application/transform/helper-types.cjs +3 -3
  265. package/dist/application/transform/helper-types.cjs.map +1 -1
  266. package/dist/application/transform/helper-types.mjs +3 -3
  267. package/dist/application/transform/helper-types.mjs.map +1 -1
  268. package/dist/application/transform/numbered-names.cjs +9 -0
  269. package/dist/application/transform/numbered-names.cjs.map +1 -1
  270. package/dist/application/transform/numbered-names.mjs +9 -1
  271. package/dist/application/transform/numbered-names.mjs.map +1 -1
  272. package/dist/application/transform/ref-pointer/generated-location.cjs +5 -5
  273. package/dist/application/transform/ref-pointer/generated-location.cjs.map +1 -1
  274. package/dist/application/transform/ref-pointer/generated-location.mjs +3 -3
  275. package/dist/application/transform/ref-pointer/generated-location.mjs.map +1 -1
  276. package/dist/application/transform/ref-pointer/generated-shape.cjs +47 -66
  277. package/dist/application/transform/ref-pointer/generated-shape.cjs.map +1 -1
  278. package/dist/application/transform/ref-pointer/generated-shape.mjs +36 -50
  279. package/dist/application/transform/ref-pointer/generated-shape.mjs.map +1 -1
  280. package/dist/application/transform/ref-pointer/inline-cycles.cjs +2 -2
  281. package/dist/application/transform/ref-pointer/inline-cycles.cjs.map +1 -1
  282. package/dist/application/transform/ref-pointer/inline-cycles.mjs +1 -1
  283. package/dist/application/transform/ref-pointer/inline-cycles.mjs.map +1 -1
  284. package/dist/application/transform/ref-pointer/located-node.cjs +23 -0
  285. package/dist/application/transform/ref-pointer/located-node.cjs.map +1 -0
  286. package/dist/application/transform/ref-pointer/located-node.mjs +18 -0
  287. package/dist/application/transform/ref-pointer/located-node.mjs.map +1 -0
  288. package/dist/application/transform/ref-pointer/original-index.cjs +68 -13
  289. package/dist/application/transform/ref-pointer/original-index.cjs.map +1 -1
  290. package/dist/application/transform/ref-pointer/original-index.mjs +70 -15
  291. package/dist/application/transform/ref-pointer/original-index.mjs.map +1 -1
  292. package/dist/application/transform/ref-pointer/pointer-type.cjs +2 -2
  293. package/dist/application/transform/ref-pointer/pointer-type.cjs.map +1 -1
  294. package/dist/application/transform/ref-pointer/pointer-type.mjs +1 -1
  295. package/dist/application/transform/ref-pointer/pointer-type.mjs.map +1 -1
  296. package/dist/application/transform/ref-pointer/pointer-walk.cjs +54 -13
  297. package/dist/application/transform/ref-pointer/pointer-walk.cjs.map +1 -1
  298. package/dist/application/transform/ref-pointer/pointer-walk.mjs +46 -7
  299. package/dist/application/transform/ref-pointer/pointer-walk.mjs.map +1 -1
  300. package/dist/application/transform/ref-pointer/property-shape.cjs +52 -0
  301. package/dist/application/transform/ref-pointer/property-shape.cjs.map +1 -0
  302. package/dist/application/transform/ref-pointer/property-shape.mjs +45 -0
  303. package/dist/application/transform/ref-pointer/property-shape.mjs.map +1 -0
  304. package/dist/application/transform/ref-pointer/typed-walk.cjs +79 -21
  305. package/dist/application/transform/ref-pointer/typed-walk.cjs.map +1 -1
  306. package/dist/application/transform/ref-pointer/typed-walk.mjs +76 -18
  307. package/dist/application/transform/ref-pointer/typed-walk.mjs.map +1 -1
  308. package/dist/application/transform/ref-type.cjs +2 -1
  309. package/dist/application/transform/ref-type.cjs.map +1 -1
  310. package/dist/application/transform/ref-type.mjs +2 -1
  311. package/dist/application/transform/ref-type.mjs.map +1 -1
  312. package/dist/application/transform/schema/access-flags.cjs.map +1 -1
  313. package/dist/application/transform/schema/access-flags.mjs.map +1 -1
  314. package/dist/application/transform/schema/composition-type.cjs +1 -1
  315. package/dist/application/transform/schema/composition-type.cjs.map +1 -1
  316. package/dist/application/transform/schema/composition-type.mjs +2 -2
  317. package/dist/application/transform/schema/composition-type.mjs.map +1 -1
  318. package/dist/application/transform/schema/enum-rule.cjs +1 -1
  319. package/dist/application/transform/schema/enum-rule.cjs.map +1 -1
  320. package/dist/application/transform/schema/enum-rule.mjs +2 -2
  321. package/dist/application/transform/schema/enum-rule.mjs.map +1 -1
  322. package/dist/application/transform/schema/index-signature-type.cjs +21 -0
  323. package/dist/application/transform/schema/index-signature-type.cjs.map +1 -0
  324. package/dist/application/transform/schema/index-signature-type.mjs +19 -0
  325. package/dist/application/transform/schema/index-signature-type.mjs.map +1 -0
  326. package/dist/application/transform/schema/input-location.cjs +23 -0
  327. package/dist/application/transform/schema/input-location.cjs.map +1 -0
  328. package/dist/application/transform/schema/input-location.mjs +21 -0
  329. package/dist/application/transform/schema/input-location.mjs.map +1 -0
  330. package/dist/application/transform/schema/object-type.cjs +18 -8
  331. package/dist/application/transform/schema/object-type.cjs.map +1 -1
  332. package/dist/application/transform/schema/object-type.mjs +19 -9
  333. package/dist/application/transform/schema/object-type.mjs.map +1 -1
  334. package/dist/application/transform/schema/ref-siblings.cjs +47 -0
  335. package/dist/application/transform/schema/ref-siblings.cjs.map +1 -0
  336. package/dist/application/transform/schema/ref-siblings.mjs +45 -0
  337. package/dist/application/transform/schema/ref-siblings.mjs.map +1 -0
  338. package/dist/application/transform/schema/schema-transform.cjs +6 -3
  339. package/dist/application/transform/schema/schema-transform.cjs.map +1 -1
  340. package/dist/application/transform/schema/schema-transform.mjs +6 -3
  341. package/dist/application/transform/schema/schema-transform.mjs.map +1 -1
  342. package/dist/application/transform/schema/unevaluated-properties.cjs +2 -30
  343. package/dist/application/transform/schema/unevaluated-properties.cjs.map +1 -1
  344. package/dist/application/transform/schema/unevaluated-properties.mjs +3 -31
  345. package/dist/application/transform/schema/unevaluated-properties.mjs.map +1 -1
  346. package/dist/application/transform/schema-comment.cjs +5 -1
  347. package/dist/application/transform/schema-comment.cjs.map +1 -1
  348. package/dist/application/transform/schema-comment.mjs +5 -1
  349. package/dist/application/transform/schema-comment.mjs.map +1 -1
  350. package/dist/cli/api-logger.cjs +13 -0
  351. package/dist/cli/api-logger.cjs.map +1 -0
  352. package/dist/cli/api-logger.mjs +11 -0
  353. package/dist/cli/api-logger.mjs.map +1 -0
  354. package/dist/cli/api-settings.cjs +57 -9
  355. package/dist/cli/api-settings.cjs.map +1 -1
  356. package/dist/cli/api-settings.mjs +56 -11
  357. package/dist/cli/api-settings.mjs.map +1 -1
  358. package/dist/cli/api-writes.cjs +72 -0
  359. package/dist/cli/api-writes.cjs.map +1 -0
  360. package/dist/cli/api-writes.mjs +69 -0
  361. package/dist/cli/api-writes.mjs.map +1 -0
  362. package/dist/cli/cli-arguments.cjs +51 -11
  363. package/dist/cli/cli-arguments.cjs.map +1 -1
  364. package/dist/cli/cli-arguments.mjs +51 -11
  365. package/dist/cli/cli-arguments.mjs.map +1 -1
  366. package/dist/cli/cli-errors.cjs +29 -1
  367. package/dist/cli/cli-errors.cjs.map +1 -1
  368. package/dist/cli/cli-errors.mjs +29 -2
  369. package/dist/cli/cli-errors.mjs.map +1 -1
  370. package/dist/cli/cli-output.cjs +111 -4
  371. package/dist/cli/cli-output.cjs.map +1 -1
  372. package/dist/cli/cli-output.mjs +104 -5
  373. package/dist/cli/cli-output.mjs.map +1 -1
  374. package/dist/cli/main.cjs +13 -3
  375. package/dist/cli/main.cjs.map +1 -1
  376. package/dist/cli/main.mjs +14 -4
  377. package/dist/cli/main.mjs.map +1 -1
  378. package/dist/cli/redocly-apis.cjs +94 -37
  379. package/dist/cli/redocly-apis.cjs.map +1 -1
  380. package/dist/cli/redocly-apis.mjs +99 -42
  381. package/dist/cli/redocly-apis.mjs.map +1 -1
  382. package/dist/cli/ref-limits.cjs +15 -1
  383. package/dist/cli/ref-limits.cjs.map +1 -1
  384. package/dist/cli/ref-limits.mjs +15 -2
  385. package/dist/cli/ref-limits.mjs.map +1 -1
  386. package/dist/cli/run-cli.cjs +37 -14
  387. package/dist/cli/run-cli.cjs.map +1 -1
  388. package/dist/cli/run-cli.mjs +39 -16
  389. package/dist/cli/run-cli.mjs.map +1 -1
  390. package/dist/domain/append-all.cjs +10 -0
  391. package/dist/domain/append-all.cjs.map +1 -0
  392. package/dist/domain/append-all.mjs +8 -0
  393. package/dist/domain/append-all.mjs.map +1 -0
  394. package/dist/domain/cause-secrets.cjs +52 -0
  395. package/dist/domain/cause-secrets.cjs.map +1 -0
  396. package/dist/domain/cause-secrets.mjs +50 -0
  397. package/dist/domain/cause-secrets.mjs.map +1 -0
  398. package/dist/domain/errors.cjs +11 -3
  399. package/dist/domain/errors.cjs.map +1 -1
  400. package/dist/domain/errors.mjs +11 -3
  401. package/dist/domain/errors.mjs.map +1 -1
  402. package/dist/domain/ir/identifier-text.cjs.map +1 -1
  403. package/dist/domain/ir/identifier-text.mjs +1 -1
  404. package/dist/domain/ir/identifier-text.mjs.map +1 -1
  405. package/dist/domain/ir/ir-shape.cjs +187 -0
  406. package/dist/domain/ir/ir-shape.cjs.map +1 -0
  407. package/dist/domain/ir/ir-shape.mjs +184 -0
  408. package/dist/domain/ir/ir-shape.mjs.map +1 -0
  409. package/dist/domain/ir/newer-identifier-ranges.cjs +182 -29
  410. package/dist/domain/ir/newer-identifier-ranges.cjs.map +1 -1
  411. package/dist/domain/ir/newer-identifier-ranges.mjs +182 -29
  412. package/dist/domain/ir/newer-identifier-ranges.mjs.map +1 -1
  413. package/dist/domain/location-text.cjs +9 -0
  414. package/dist/domain/location-text.cjs.map +1 -0
  415. package/dist/domain/location-text.mjs +7 -0
  416. package/dist/domain/location-text.mjs.map +1 -0
  417. package/dist/domain/openapi/alias-expansion.cjs +3 -1
  418. package/dist/domain/openapi/alias-expansion.cjs.map +1 -1
  419. package/dist/domain/openapi/alias-expansion.mjs +3 -1
  420. package/dist/domain/openapi/alias-expansion.mjs.map +1 -1
  421. package/dist/domain/openapi/discriminated-union.cjs +3 -3
  422. package/dist/domain/openapi/discriminated-union.cjs.map +1 -1
  423. package/dist/domain/openapi/discriminated-union.mjs +4 -4
  424. package/dist/domain/openapi/discriminated-union.mjs.map +1 -1
  425. package/dist/domain/openapi/discriminator-conflicts.cjs +10 -6
  426. package/dist/domain/openapi/discriminator-conflicts.cjs.map +1 -1
  427. package/dist/domain/openapi/discriminator-conflicts.mjs +11 -7
  428. package/dist/domain/openapi/discriminator-conflicts.mjs.map +1 -1
  429. package/dist/domain/openapi/document-places.cjs +55 -0
  430. package/dist/domain/openapi/document-places.cjs.map +1 -0
  431. package/dist/domain/openapi/document-places.mjs +53 -0
  432. package/dist/domain/openapi/document-places.mjs.map +1 -0
  433. package/dist/domain/openapi/json-pointer.cjs +43 -1
  434. package/dist/domain/openapi/json-pointer.cjs.map +1 -1
  435. package/dist/domain/openapi/json-pointer.mjs +40 -2
  436. package/dist/domain/openapi/json-pointer.mjs.map +1 -1
  437. package/dist/domain/openapi/schema-dialect.cjs +15 -0
  438. package/dist/domain/openapi/schema-dialect.cjs.map +1 -0
  439. package/dist/domain/openapi/schema-dialect.mjs +12 -0
  440. package/dist/domain/openapi/schema-dialect.mjs.map +1 -0
  441. package/dist/domain/openapi/unsupported-features.cjs +1 -1
  442. package/dist/domain/openapi/unsupported-features.cjs.map +1 -1
  443. package/dist/domain/openapi/unsupported-features.mjs +2 -2
  444. package/dist/domain/openapi/unsupported-features.mjs.map +1 -1
  445. package/dist/domain/output-fixes.cjs +20 -0
  446. package/dist/domain/output-fixes.cjs.map +1 -1
  447. package/dist/domain/output-fixes.mjs +20 -0
  448. package/dist/domain/output-fixes.mjs.map +1 -1
  449. package/dist/domain/terminal-text.cjs +31 -0
  450. package/dist/domain/terminal-text.cjs.map +1 -0
  451. package/dist/domain/terminal-text.mjs +29 -0
  452. package/dist/domain/terminal-text.mjs.map +1 -0
  453. package/dist/domain/url-secrets.cjs +48 -0
  454. package/dist/domain/url-secrets.cjs.map +1 -0
  455. package/dist/domain/url-secrets.mjs +45 -0
  456. package/dist/domain/url-secrets.mjs.map +1 -0
  457. package/dist/domain/warnings.cjs +1 -0
  458. package/dist/domain/warnings.cjs.map +1 -1
  459. package/dist/domain/warnings.mjs +1 -0
  460. package/dist/domain/warnings.mjs.map +1 -1
  461. package/dist/index.d.cts +46 -20
  462. package/dist/index.d.mts +46 -20
  463. package/dist/index.d.ts +46 -20
  464. package/package.json +4 -5
  465. package/src/adapters/node-file-system/file-claims.ts +138 -0
  466. package/src/adapters/node-file-system/file-identity.ts +137 -0
  467. package/src/adapters/node-file-system/node-file-system.ts +158 -18
  468. package/src/adapters/pipe-safe-writer/pipe-safe-writer.ts +29 -0
  469. package/src/adapters/redocly-loader/bundled-mapping-copies.ts +60 -0
  470. package/src/adapters/redocly-loader/bundled-ref-repair.ts +2 -2
  471. package/src/adapters/redocly-loader/component-schemas.ts +19 -0
  472. package/src/adapters/redocly-loader/loaded-documents.ts +46 -0
  473. package/src/adapters/redocly-loader/mapping-schema-names.ts +25 -0
  474. package/src/adapters/redocly-loader/query-named-components.ts +201 -0
  475. package/src/adapters/redocly-loader/redocly-schema-loader.ts +64 -38
  476. package/src/adapters/redocly-loader/ref-access.ts +51 -4
  477. package/src/adapters/redocly-loader/ref-holders.ts +76 -15
  478. package/src/adapters/redocly-loader/remote-body-limit.ts +66 -0
  479. package/src/adapters/redocly-loader/remote-fetch.ts +85 -13
  480. package/src/adapters/redocly-loader/remote-node-limit.ts +102 -0
  481. package/src/adapters/redocly-loader/schema-load-errors.ts +52 -13
  482. package/src/adapters/redocly-loader/schema-source.ts +35 -11
  483. package/src/adapters/redocly-loader/unsupported-keys.ts +3 -7
  484. package/src/adapters/terminal-logger/terminal-logger.ts +17 -6
  485. package/src/api/default-ports.ts +33 -4
  486. package/src/api/discriminator-enum-parent.ts +3 -3
  487. package/src/api/discriminator-other-owners.ts +5 -3
  488. package/src/api/discriminator-patch.ts +5 -1
  489. package/src/api/discriminator-scan.ts +16 -8
  490. package/src/api/document-refs.ts +29 -1
  491. package/src/api/document-run.ts +10 -19
  492. package/src/api/legacy-utils.ts +5 -1
  493. package/src/api/openapi-ts.ts +26 -8
  494. package/src/api/ref-limit-options.ts +76 -0
  495. package/src/api/run-context.ts +3 -0
  496. package/src/api/schema-callbacks.ts +60 -17
  497. package/src/api/transform-context.ts +7 -3
  498. package/src/api/transform-schema.ts +79 -12
  499. package/src/application/ports/file-system.ts +47 -0
  500. package/src/application/ports/schema-loader.ts +11 -1
  501. package/src/application/print/text-writer.ts +10 -3
  502. package/src/application/stack-overflow.ts +9 -5
  503. package/src/application/transform/declared-value-types.ts +42 -0
  504. package/src/application/transform/document/components.ts +2 -2
  505. package/src/application/transform/document/declared-type-names.ts +36 -0
  506. package/src/application/transform/document/defs-root.ts +2 -2
  507. package/src/application/transform/document/document.ts +8 -5
  508. package/src/application/transform/document/enum-names-given-back.ts +91 -0
  509. package/src/application/transform/document/exploded-query-values.ts +88 -0
  510. package/src/application/transform/document/global-type-references.ts +1 -1
  511. package/src/application/transform/document/header.ts +25 -5
  512. package/src/application/transform/document/media-type.ts +4 -3
  513. package/src/application/transform/document/operation-keys-written.ts +27 -0
  514. package/src/application/transform/document/operation.ts +2 -2
  515. package/src/application/transform/document/parameter-entries.ts +70 -0
  516. package/src/application/transform/document/parameter.ts +21 -9
  517. package/src/application/transform/document/parameters.ts +56 -66
  518. package/src/application/transform/document/path-item.ts +16 -34
  519. package/src/application/transform/document/path-template-key.ts +152 -0
  520. package/src/application/transform/document/path-template-refs.ts +106 -0
  521. package/src/application/transform/document/paths-enum.ts +24 -10
  522. package/src/application/transform/document/paths.ts +59 -125
  523. package/src/application/transform/document/referenced-parameter.ts +146 -0
  524. package/src/application/transform/document/request-body.ts +2 -2
  525. package/src/application/transform/document/response.ts +3 -3
  526. package/src/application/transform/document/responses.ts +2 -2
  527. package/src/application/transform/document/root-type-aliases.ts +17 -38
  528. package/src/application/transform/document/type-resolution.ts +2 -1
  529. package/src/application/transform/document/webhooks.ts +19 -6
  530. package/src/application/transform/footer/document-footer.ts +36 -9
  531. package/src/application/transform/footer/enum-name-claims.ts +62 -0
  532. package/src/application/transform/footer/operation-keys.ts +28 -0
  533. package/src/application/transform/footer/type-evaluation.ts +4 -4
  534. package/src/application/transform/helper-types.ts +8 -7
  535. package/src/application/transform/numbered-names.ts +15 -0
  536. package/src/application/transform/ref-pointer/generated-location.ts +3 -3
  537. package/src/application/transform/ref-pointer/generated-shape.ts +67 -78
  538. package/src/application/transform/ref-pointer/inline-cycles.ts +1 -1
  539. package/src/application/transform/ref-pointer/located-node.ts +38 -0
  540. package/src/application/transform/ref-pointer/original-index.ts +100 -17
  541. package/src/application/transform/ref-pointer/pointer-type.ts +1 -1
  542. package/src/application/transform/ref-pointer/pointer-walk.ts +82 -8
  543. package/src/application/transform/ref-pointer/property-shape.ts +97 -0
  544. package/src/application/transform/ref-pointer/typed-walk.ts +117 -25
  545. package/src/application/transform/ref-type.ts +2 -1
  546. package/src/application/transform/schema/access-flags.ts +5 -2
  547. package/src/application/transform/schema/composition-type.ts +2 -2
  548. package/src/application/transform/schema/enum-rule.ts +6 -2
  549. package/src/application/transform/schema/index-signature-type.ts +31 -0
  550. package/src/application/transform/schema/input-location.ts +35 -0
  551. package/src/application/transform/schema/object-type.ts +22 -12
  552. package/src/application/transform/schema/ref-siblings.ts +76 -0
  553. package/src/application/transform/schema/schema-context.ts +3 -0
  554. package/src/application/transform/schema/schema-transform.ts +6 -3
  555. package/src/application/transform/schema/unevaluated-properties.ts +4 -44
  556. package/src/application/transform/schema-comment.ts +5 -1
  557. package/src/application/transform/transform-context.ts +5 -0
  558. package/src/cli/api-logger.ts +17 -0
  559. package/src/cli/api-settings.ts +80 -13
  560. package/src/cli/api-writes.ts +117 -0
  561. package/src/cli/cli-arguments.ts +90 -14
  562. package/src/cli/cli-dependencies.ts +26 -4
  563. package/src/cli/cli-errors.ts +42 -1
  564. package/src/cli/cli-output.ts +195 -15
  565. package/src/cli/main.ts +14 -5
  566. package/src/cli/redocly-apis.ts +177 -52
  567. package/src/cli/ref-limits.ts +21 -2
  568. package/src/cli/run-cli.ts +76 -15
  569. package/src/domain/append-all.ts +10 -0
  570. package/src/domain/cause-secrets.ts +86 -0
  571. package/src/domain/errors.ts +16 -5
  572. package/src/domain/ir/identifier-text.ts +6 -5
  573. package/src/domain/ir/ir-shape.ts +299 -0
  574. package/src/domain/ir/newer-identifier-ranges.ts +183 -30
  575. package/src/domain/location-text.ts +12 -0
  576. package/src/domain/openapi/alias-expansion.ts +4 -1
  577. package/src/domain/openapi/discriminated-union.ts +6 -4
  578. package/src/domain/openapi/discriminator-conflicts.ts +21 -7
  579. package/src/domain/openapi/document-object.ts +2 -0
  580. package/src/domain/openapi/document-places.ts +78 -0
  581. package/src/domain/openapi/json-pointer.ts +96 -7
  582. package/src/domain/openapi/schema-dialect.ts +22 -0
  583. package/src/domain/openapi/unsupported-features.ts +2 -2
  584. package/src/domain/output-fixes.ts +28 -2
  585. package/src/domain/terminal-text.ts +44 -0
  586. package/src/domain/url-secrets.ts +72 -0
  587. package/src/domain/warnings.ts +1 -0
  588. package/src/types/generator-options.ts +1 -1
  589. package/dist/cli/main.d.cts +0 -2
  590. package/dist/cli/main.d.mts +0 -2
  591. package/dist/cli/main.d.ts +0 -2
  592. package/dist/domain/url-credentials.cjs +0 -10
  593. package/dist/domain/url-credentials.cjs.map +0 -1
  594. package/dist/domain/url-credentials.mjs +0 -8
  595. package/dist/domain/url-credentials.mjs.map +0 -1
  596. package/src/domain/url-credentials.ts +0 -18
@@ -9,10 +9,10 @@ import type {
9
9
  } from "../application/transform/schema/schema-context.js";
10
10
  import { ERROR_CODES, OpenAPITypesafeError } from "../domain/errors.js";
11
11
  import { irRaw } from "../domain/ir/constructors.js";
12
+ import { isPrintableIrProperty, isPrintableIrType } from "../domain/ir/ir-shape.js";
12
13
  import type { IrPropertySignature, IrType } from "../domain/ir/nodes.js";
13
14
  import type {
14
15
  GlobalContext,
15
- IrCallbackType,
16
16
  IrPostTransform,
17
17
  IrTransform,
18
18
  IrTransformProperty,
@@ -29,13 +29,15 @@ import { toIrType } from "./type-helpers.js";
29
29
  * their results are read by the bridge.
30
30
  */
31
31
 
32
+ /** What a legacy `transformProperty` result fails to be. */
33
+ const LEGACY_PROPERTY_PROBLEM = "a property with syntax the generator cannot read";
34
+
35
+ /** A `transformProperty` result the generator cannot print as a property. */
32
36
  export class UnreadablePropertyError extends OpenAPITypesafeError {
33
- constructor(path: string | undefined) {
37
+ constructor(path: string | undefined, problem = LEGACY_PROPERTY_PROBLEM) {
34
38
  super({
35
39
  code: ERROR_CODES.CALLBACK_RESULT_UNREADABLE,
36
- message:
37
- `transformProperty at ${path} returned a property ` +
38
- "with syntax the generator cannot read",
40
+ message: `transformProperty at ${path} returned ${problem}`,
39
41
  details: { callback: "transformProperty", path },
40
42
  });
41
43
  this.name = "UnreadablePropertyError";
@@ -44,16 +46,26 @@ export class UnreadablePropertyError extends OpenAPITypesafeError {
44
46
 
45
47
  /** A `transform` or `postTransform` result that is neither IR nor a TypeScript node. */
46
48
  export class UnreadableTypeError extends OpenAPITypesafeError {
47
- constructor(callback: "transform" | "postTransform", path: string | undefined) {
49
+ constructor(
50
+ callback: "transform" | "postTransform",
51
+ path: string | undefined,
52
+ expected = "a TypeScript node",
53
+ ) {
48
54
  super({
49
55
  code: ERROR_CODES.CALLBACK_RESULT_UNREADABLE,
50
- message: `${callback} at ${path} returned a value that is not a TypeScript node`,
56
+ message: `${callback} at ${path} returned a value that is not ${expected}`,
51
57
  details: { callback, path },
52
58
  });
53
59
  this.name = "UnreadableTypeError";
54
60
  }
55
61
  }
56
62
 
63
+ /** What an IR type result must be (docs/node.md, IR callbacks). */
64
+ const IR_TYPE_EXPECTED = "an IR type or non-empty type text";
65
+
66
+ /** What an IR property result must be. */
67
+ const IR_PROPERTY_PROBLEM = "a value that is not an IR property the generator can print";
68
+
57
69
  function nodeOptions(ctx: GlobalContext, location: SchemaLocation): TransformNodeOptions {
58
70
  return { ...location, ctx } as TransformNodeOptions;
59
71
  }
@@ -63,24 +75,50 @@ export function schemaCallbacks(ctx: GlobalContext): SchemaCallbacks {
63
75
  return ctx.irCallbacks ? irSchemaCallbacks(ctx) : legacySchemaCallbacks(ctx);
64
76
  }
65
77
 
66
- /** An IR callback type; text is a raw type, printed as written. */
67
- function fromCallbackType(type: IrCallbackType): IrType {
68
- return typeof type === "string" ? irRaw(type) : type;
78
+ /**
79
+ * An IR callback type; text is a raw type, printed as written. Any other value, and IR the
80
+ * printer cannot write as TypeScript, fails with `CALLBACK_RESULT_UNREADABLE` (`ir-shape.ts`).
81
+ */
82
+ function fromCallbackType(
83
+ callback: "transform" | "postTransform",
84
+ type: unknown,
85
+ location: SchemaLocation,
86
+ ): IrType {
87
+ const candidate = typeof type === "string" ? irRaw(type) : type;
88
+ if (!isPrintableIrType(candidate)) {
89
+ throw new UnreadableTypeError(callback, location.path, IR_TYPE_EXPECTED);
90
+ }
91
+ return candidate;
69
92
  }
70
93
 
71
- function irCustomType(result: ReturnType<IrTransform>): CustomType | null {
94
+ function irCustomType(result: unknown, location: SchemaLocation): CustomType | null {
72
95
  if (result === undefined || result === null) {
73
96
  return null;
74
97
  }
75
98
  if (typeof result === "object" && "schema" in result) {
76
- return { type: fromCallbackType(result.schema), isOptional: Boolean(result.questionToken) };
99
+ const { schema, questionToken } = result as { schema: unknown; questionToken?: unknown };
100
+ return {
101
+ type: fromCallbackType("transform", schema, location),
102
+ isOptional: Boolean(questionToken),
103
+ };
77
104
  }
78
- return { type: fromCallbackType(result), isOptional: false };
105
+ return { type: fromCallbackType("transform", result, location), isOptional: false };
106
+ }
107
+
108
+ function irProperty(result: unknown, location: SchemaLocation): IrPropertySignature | null {
109
+ if (result === undefined || result === null) {
110
+ return null;
111
+ }
112
+ if (!isPrintableIrProperty(result)) {
113
+ throw new UnreadablePropertyError(location.path, IR_PROPERTY_PROBLEM);
114
+ }
115
+ return result;
79
116
  }
80
117
 
81
118
  /**
82
119
  * The context fields hold either callback form; `irCallbacks` says which one, so the casts below
83
- * only name the form the user declared with `OpenAPITSIrOptions`.
120
+ * only name the form the user declared with `OpenAPITSIrOptions`. The results are checked, since
121
+ * JavaScript callers can return any value.
84
122
  */
85
123
  function irSchemaCallbacks(ctx: GlobalContext): SchemaCallbacks {
86
124
  const transform = ctx.transform as IrTransform | undefined;
@@ -89,14 +127,19 @@ function irSchemaCallbacks(ctx: GlobalContext): SchemaCallbacks {
89
127
  return {
90
128
  transform: (schema, location) =>
91
129
  transform
92
- ? irCustomType(transform(schema as SchemaObject, nodeOptions(ctx, location)))
130
+ ? irCustomType(transform(schema as SchemaObject, nodeOptions(ctx, location)), location)
93
131
  : null,
94
132
  postTransform(type, location) {
95
133
  const result = postTransform?.(type, nodeOptions(ctx, location));
96
- return result === undefined ? null : fromCallbackType(result);
134
+ return result === undefined ? null : fromCallbackType("postTransform", result, location);
97
135
  },
98
136
  transformProperty: (property, schema, location) =>
99
- transformProperty?.(property, schema as SchemaObject, nodeOptions(ctx, location)) ?? null,
137
+ transformProperty
138
+ ? irProperty(
139
+ transformProperty(property, schema as SchemaObject, nodeOptions(ctx, location)),
140
+ location,
141
+ )
142
+ : null,
100
143
  };
101
144
  }
102
145
 
@@ -11,6 +11,8 @@ import type {
11
11
  TransformDiagnostics,
12
12
  TransformOptions,
13
13
  } from "../application/transform/transform-context.js";
14
+ import { canonicalRef } from "../domain/openapi/json-pointer.js";
15
+ import { SCHEMA_DIALECTS } from "../domain/openapi/schema-dialect.js";
14
16
  import type { TransformNodeOptions } from "../types.js";
15
17
  import { defaultLogger, monotonicNow } from "./default-ports.js";
16
18
  import { ContextFooterSink } from "./footer-sink.js";
@@ -40,6 +42,7 @@ function transformOptions(ctx: RunContext): TransformOptions {
40
42
  immutable: ctx.immutable,
41
43
  propertiesRequiredByDefault: ctx.propertiesRequiredByDefault,
42
44
  readWriteMarkers: ctx.readWriteMarkers,
45
+ schemaDialect: ctx.schemaDialect ?? SCHEMA_DIALECTS.OPENAPI_3_0,
43
46
  generatePathParams: ctx.generatePathParams,
44
47
  pathParamsAsTypes: ctx.pathParamsAsTypes,
45
48
  rootTypes: ctx.rootTypes,
@@ -76,9 +79,10 @@ export function createTransformContext(ctx: RunContext): TransformContext {
76
79
  options: transformOptions(ctx),
77
80
  refs: { resolve: (ref) => ctx.resolve(ref) },
78
81
  discriminators: {
79
- objectAt: (ref) => ctx.discriminators.objects[ref],
80
- isHandled: (ref) => ctx.discriminators.refsHandled.includes(ref),
81
- otherPropertiesAt: (ref) => ctx.discriminators.otherProperties?.[ref] ?? [],
82
+ // The scan keys pointers canonically; a caller may pass a `$ref` as the document writes it.
83
+ objectAt: (ref) => ctx.discriminators.objects[canonicalRef(ref)],
84
+ isHandled: (ref) => ctx.discriminators.refsHandled.includes(canonicalRef(ref)),
85
+ otherPropertiesAt: (ref) => ctx.discriminators.otherProperties?.[canonicalRef(ref)] ?? [],
82
86
  enumParentOf: (schema) =>
83
87
  ctx.discriminators.enumParents?.get(schema) as DiscriminatorEnumParent | undefined,
84
88
  },
@@ -1,14 +1,28 @@
1
1
  import type { ts } from "../adapters/type-ast-bridge/typescript-types.js";
2
2
  import { documentBody, documentClosing } from "../application/transform/document/document.js";
3
+ import {
4
+ NAMES_THE_OUTPUT_MAY_NEED,
5
+ namesTheOutputNeeds,
6
+ withEnumsRenamed,
7
+ } from "../application/transform/document/enum-names-given-back.js";
8
+ import { operationKeysWritten } from "../application/transform/document/operation-keys-written.js";
9
+ import {
10
+ unmatchedTemplateKeys,
11
+ withTemplatePathRefs,
12
+ } from "../application/transform/document/path-template-refs.js";
3
13
  import { renameTakenAliases } from "../application/transform/document/root-type-aliases.js";
4
- import { RunFooter } from "../application/transform/footer/document-footer.js";
14
+ import { RunFooter, type RunFooterNames } from "../application/transform/footer/document-footer.js";
15
+ import { EnumNameClaims } from "../application/transform/footer/enum-name-claims.js";
5
16
  import { checkedEnumValues } from "../application/transform/footer/enum-values-check.js";
17
+ import { OperationKeys } from "../application/transform/footer/operation-keys.js";
6
18
  import {
19
+ FIRST_SCHEMA_NAMES,
7
20
  SharedEnumNameRecorder,
8
21
  type SharedEnumNames,
9
22
  } from "../application/transform/footer/shared-enum-names.js";
10
23
  import type { IrDeclaration } from "../domain/ir/nodes.js";
11
24
  import type { DocumentObject } from "../domain/openapi/document-object.js";
25
+ import { schemaDialectOf } from "../domain/openapi/schema-dialect.js";
12
26
  import { FIX } from "../domain/output-fixes.js";
13
27
  import type { GlobalContext, OpenAPI3 } from "../types.js";
14
28
  import { FirstSchemaNameRecorder } from "./discriminator-enum-names.js";
@@ -71,14 +85,46 @@ function enumNameRecorderOf(ctx: GlobalContext): EnumNameRecorder | null {
71
85
  return ctx.fix?.includes(FIX.DISCRIMINATOR_VALUES) ? new FirstSchemaNameRecorder() : null;
72
86
  }
73
87
 
74
- /** With a naming fix, `--enum` and `--dedupe-enums`, the run's footer names shared enums. */
75
- function withSharedEnumNames(document: DocumentObject, ctx: RunContext): void {
76
- const recorder = ctx.runFooter === undefined ? enumNameRecorderOf(ctx) : null;
77
- if (recorder === null || !ctx.enum || !ctx.dedupeEnums) {
88
+ /**
89
+ * The run's footer: with a naming fix, `--enum` and `--dedupe-enums` it names shared enums. A
90
+ * footer that a call before created on the context is kept.
91
+ */
92
+ function withRunFooter(document: DocumentObject, ctx: RunContext, names: RunFooterNames): void {
93
+ if (ctx.runFooter !== undefined) {
78
94
  return;
79
95
  }
80
- const names = sharedEnumNamesOf(document, ctx, recorder);
81
- ctx.runFooter = new RunFooter(new ContextFooterSink(ctx.injectFooter), true, names);
96
+ const recorder = enumNameRecorderOf(ctx);
97
+ const shared =
98
+ recorder === null || !ctx.enum || !ctx.dedupeEnums
99
+ ? null
100
+ : sharedEnumNamesOf(document, ctx, recorder);
101
+ const sink = new ContextFooterSink(ctx.injectFooter);
102
+ ctx.runFooter =
103
+ shared === null
104
+ ? new RunFooter(sink, ctx.dedupeEnums, FIRST_SCHEMA_NAMES, names)
105
+ : new RunFooter(sink, true, shared, names);
106
+ }
107
+
108
+ /**
109
+ * The document with the enums renamed that gave way to a name the output turned out not to need
110
+ * (`EnumNameClaims`): they get that name back, as before.
111
+ */
112
+ function withEnumNamesGivenBack(
113
+ parts: TransformedDocument,
114
+ names: RunFooterNames,
115
+ ): TransformedDocument {
116
+ const footer = parts.footer.filter(isIrDeclaration);
117
+ const renames = names.enums.givenBack(namesTheOutputNeeds({ ...parts, footer }));
118
+ if (renames.size === 0) {
119
+ return parts;
120
+ }
121
+ return {
122
+ body: withEnumsRenamed(parts.body, renames),
123
+ footer: parts.footer.map((entry) =>
124
+ isIrDeclaration(entry) ? (withEnumsRenamed([entry], renames)[0] ?? entry) : entry,
125
+ ),
126
+ closing: withEnumsRenamed(parts.closing, renames),
127
+ };
82
128
  }
83
129
 
84
130
  /**
@@ -102,17 +148,38 @@ function enumValuesChecked(
102
148
  return checked.footer;
103
149
  }
104
150
 
151
+ /** The document with its references into templated paths indexed by their templates. */
152
+ function withTemplateRefs(
153
+ { body, footer, closing }: TransformedDocument,
154
+ keys: ReadonlyMap<string, string>,
155
+ ): TransformedDocument {
156
+ return {
157
+ body: withTemplatePathRefs(body, keys),
158
+ footer: footer.map((entry) =>
159
+ isIrDeclaration(entry) ? (withTemplatePathRefs([entry], keys)[0] ?? entry) : entry,
160
+ ),
161
+ closing: withTemplatePathRefs(closing, keys),
162
+ };
163
+ }
164
+
105
165
  /** @internal Root types, the footer, then the closing declarations (Phase 5, step 6). */
106
166
  export function transformDocument(schema: OpenAPI3, ctx: RunContext): TransformedDocument {
107
167
  const document = schema as DocumentObject;
108
- withSharedEnumNames(document, ctx);
168
+ ctx.schemaDialect = schemaDialectOf(document.openapi);
169
+ const names: RunFooterNames = {
170
+ enums: new EnumNameClaims(NAMES_THE_OUTPUT_MAY_NEED),
171
+ operations: new OperationKeys(operationKeysWritten(document)),
172
+ };
173
+ withRunFooter(document, ctx, names);
109
174
  const context = createTransformContext(ctx);
110
175
  // documentBody registers the enums in the footer, so the footer is read after it.
111
176
  const rawBody = documentBody(document, context, () => ctx.injectFooter.filter(isIrDeclaration));
112
- const footer = enumValuesChecked(rawBody, [...ctx.injectFooter], ctx);
113
- const closing = documentClosing(document, context, footer.some(isOperations));
114
- const body = renameTakenAliases(rawBody, footer.filter(isIrDeclaration), closing);
115
- return { body, footer, closing };
177
+ const rawFooter = enumValuesChecked(rawBody, [...ctx.injectFooter], ctx);
178
+ const rawClosing = documentClosing(document, context, rawFooter.some(isOperations));
179
+ const parts = { body: rawBody, footer: rawFooter, closing: rawClosing };
180
+ const { body, footer, closing } = withEnumNamesGivenBack(parts, names);
181
+ const named = { body: renameTakenAliases(body, footer.filter(isIrDeclaration), closing), footer };
182
+ return withTemplateRefs({ ...named, closing }, unmatchedTemplateKeys(document.paths, context));
116
183
  }
117
184
 
118
185
  /**
@@ -10,3 +10,50 @@ export interface FileReader {
10
10
  export interface FileWriter {
11
11
  writeText(file: URL, contents: string): void;
12
12
  }
13
+
14
+ /**
15
+ * Whether two `file:` locations name one file: also through a symbolic link, a hard link, or
16
+ * another letter case on a case-insensitive file system, and also when the file does not exist
17
+ * yet. The CLI asks before it writes, so that an output path never replaces a file the run reads
18
+ * (`CLI_OUTPUT_IS_INPUT`) nor another API's output (`CLI_OUTPUT_DUPLICATE`).
19
+ */
20
+ export interface FileIdentity {
21
+ isSameFile(left: URL, right: URL): boolean;
22
+ }
23
+
24
+ /**
25
+ * Whether a `file:` location is an existing directory. An output there is no file the CLI can
26
+ * write, so it fails with `CLI_OUTPUT_INVALID` before anything is generated.
27
+ */
28
+ export interface DirectoryCheck {
29
+ isDirectory(file: URL): boolean;
30
+ }
31
+
32
+ /**
33
+ * Whether a `file:` location is an existing file. A schema argument with a `*` is a glob pattern
34
+ * only when no file has that name.
35
+ */
36
+ export interface FileCheck {
37
+ isFile(file: URL): boolean;
38
+ }
39
+
40
+ /**
41
+ * An output file that exists before its content is written: the claim created it, empty, when it
42
+ * was missing, so the file system has given it its own identity.
43
+ */
44
+ export interface ClaimedFile {
45
+ /** The file system's identity of the file: equal for two paths that name one file. */
46
+ readonly identity: string;
47
+ /** Remove what the claim created (the file and its new directories); existing ones stay. */
48
+ release(): void;
49
+ }
50
+
51
+ /**
52
+ * Claim output files before writing to them. Names cannot prove that two missing files are two:
53
+ * the file system may ignore Unicode normalization, fold `ß` to `SS`, ignore letter case where
54
+ * nothing can be probed, or follow a link to a directory that does not exist yet. Once each file
55
+ * exists, its identity is the file system's own. Fails with `OUTPUT_WRITE_FAILED`.
56
+ */
57
+ export interface FileClaims {
58
+ claimFile(file: URL): ClaimedFile;
59
+ }
@@ -20,6 +20,16 @@ export interface SchemaLoadRequest {
20
20
  readonly refAccess: RefAccess;
21
21
  }
22
22
 
23
+ /** A bundled document, and the local files read to build it. */
24
+ export interface LoadedSchema {
25
+ readonly document: OpenAPI3;
26
+ /**
27
+ * The root, when it is a local file, and every local file a `$ref` loaded. The CLI keeps its
28
+ * output from replacing any of them (`CLI_OUTPUT_IS_INPUT`).
29
+ */
30
+ readonly localFiles: readonly URL[];
31
+ }
32
+
23
33
  /**
24
34
  * Read, validate and bundle an OpenAPI 3 document into one document (ENGINEERING_PLAN 4.5).
25
35
  * Fails with a typed error (ADR-011): `SCHEMA_SOURCE_*`, `SCHEMA_LOAD_FAILED`,
@@ -28,5 +38,5 @@ export interface SchemaLoadRequest {
28
38
  * `SCHEMA_TOO_DEEP` or `SCHEMA_KEY_UNSUPPORTED`.
29
39
  */
30
40
  export interface SchemaLoader {
31
- load(request: SchemaLoadRequest): Promise<OpenAPI3>;
41
+ load(request: SchemaLoadRequest): Promise<LoadedSchema>;
32
42
  }
@@ -22,7 +22,12 @@ export function isLineBreak(code: number): boolean {
22
22
  */
23
23
  export class TextWriter {
24
24
  readonly #options: PrintOptions;
25
- #output = "";
25
+ /**
26
+ * The written parts, joined once at the end. A string built with `+=` is kept by V8 as a tree
27
+ * of its parts, several times the size of the text, for as long as the text is kept (until the
28
+ * CLI writes it); `join` gives one flat string.
29
+ */
30
+ #parts: string[] = [];
26
31
  #indent = 0;
27
32
  #isAtLineStart = true;
28
33
 
@@ -39,7 +44,9 @@ export class TextWriter {
39
44
  }
40
45
 
41
46
  get text(): string {
42
- return this.#output;
47
+ const text = this.#parts.join("");
48
+ this.#parts = [text];
49
+ return text;
43
50
  }
44
51
 
45
52
  increaseIndent(): void {
@@ -61,7 +68,7 @@ export class TextWriter {
61
68
 
62
69
  /** Write text exactly as given. */
63
70
  rawWrite(text: string): void {
64
- this.#output += text;
71
+ this.#parts.push(text);
65
72
  this.#updateLineStart(text);
66
73
  }
67
74
 
@@ -4,9 +4,11 @@ import { ERROR_CODES, OpenAPITypesafeError } from "../domain/errors.js";
4
4
  * Deeply nested schemas (ENGINEERING_PLAN 8.5). Loading, bundling, transforming and printing walk
5
5
  * schemas recursively, and Redocly follows each `$ref` inside the walk. On the default Node.js
6
6
  * stack, about 550 levels of inline schemas or a chain of about 900 `$ref`s (each schema refers to
7
- * the next) run out of call stack. Real documents stay far below: every YAML or JSON file goes
8
- * through the YAML parser, which stops at 100 levels, and the whole corpus passes. The overflow is
9
- * reported as a typed error instead of a `RangeError` with a stack trace.
7
+ * the next) run out of call stack. Redocly's walk also passes the keys of an object to one call as
8
+ * arguments, so a single object with more than about 100,000 keys runs out of it while loading.
9
+ * Real documents stay far below: every YAML or JSON file goes through the YAML parser, which stops
10
+ * at 100 levels, and the whole corpus passes. The overflow is reported as a typed error instead of
11
+ * a `RangeError` with a stack trace.
10
12
  */
11
13
 
12
14
  /** The step that ran out of call stack; named in the message and the details. */
@@ -20,13 +22,15 @@ export function isStackOverflowError(error: unknown): boolean {
20
22
  return error instanceof RangeError && STACK_OVERFLOW_MESSAGE.test(error.message);
21
23
  }
22
24
 
23
- /** The typed error for a document nested too deeply for the call stack. */
25
+ /** The typed error for a document nested too deeply, or too wide, for the call stack. */
24
26
  export function schemaTooDeepError(step: DeepSchemaStep, cause: unknown): OpenAPITypesafeError {
27
+ const wide = step === "load" ? ", and so does an object with more than about 100,000 keys" : "";
25
28
  return new OpenAPITypesafeError({
26
29
  code: ERROR_CODES.SCHEMA_TOO_DEEP,
27
30
  message:
28
31
  `The schema is nested too deeply to ${step}: the call stack ran out. Both inline ` +
29
- "schemas and chains of $ref (each schema referring to the next) count; shorten the deepest.",
32
+ `schemas and chains of $ref (each schema referring to the next) count${wide}; shorten ` +
33
+ "the deepest.",
30
34
  details: { step },
31
35
  cause,
32
36
  });
@@ -0,0 +1,42 @@
1
+ import { irKeyword, irReference } from "../../domain/ir/constructors.js";
2
+ import type { IrMember, IrType } from "../../domain/ir/nodes.js";
3
+ import { HELPER_TYPES } from "./helper-types.js";
4
+ import type { FooterDeclarations } from "./schema/schema-context.js";
5
+
6
+ /** The footer part that declares the `PropertyValues` helper type. */
7
+ export type PropertyValuesFooter = Pick<FooterDeclarations, "requirePropertyValues">;
8
+
9
+ function memberValueTypes(member: IrMember): IrType[] {
10
+ if (member.kind === "indexSignature") {
11
+ return [member.type];
12
+ }
13
+ return member.isOptional ? [member.type, irKeyword("undefined")] : [member.type];
14
+ }
15
+
16
+ /**
17
+ * The value types a key of the type can have, read from its IR: the members of object types,
18
+ * through unions and intersections. A reference (a `$ref`, `Omit`, `WithRequired`) or a raw
19
+ * type is read with `PropertyValues`. Primitives, literals and arrays declare no keys.
20
+ */
21
+ export function declaredValueTypes(type: IrType, footer: PropertyValuesFooter): IrType[] {
22
+ switch (type.kind) {
23
+ case "object":
24
+ return type.members.flatMap(memberValueTypes);
25
+ case "union":
26
+ case "intersection":
27
+ return type.types.flatMap((member) => declaredValueTypes(member, footer));
28
+ case "reference":
29
+ case "indexedAccess":
30
+ case "raw":
31
+ footer.requirePropertyValues();
32
+ return [irReference(HELPER_TYPES.propertyValues.name, [type])];
33
+ case "keyword":
34
+ case "stringLiteral":
35
+ case "numberLiteral":
36
+ case "booleanLiteral":
37
+ case "array":
38
+ case "tuple":
39
+ case "readonly":
40
+ return [];
41
+ }
42
+ }
@@ -18,7 +18,7 @@ import {
18
18
  isEnumSchema,
19
19
  singularizeComponentKind,
20
20
  } from "../../../domain/openapi/components-object.js";
21
- import { createRef } from "../../../domain/openapi/json-pointer.js";
21
+ import { appendPointer, ROOT_POINTER } from "../../../domain/openapi/json-pointer.js";
22
22
  import { FIX } from "../../../domain/output-fixes.js";
23
23
  import { type DeprecatedEntryFilter, documentEntries } from "../document-entries.js";
24
24
  import type { SchemaLocation } from "../schema/schema-context.js";
@@ -62,7 +62,7 @@ function componentMember(
62
62
  item: unknown,
63
63
  context: TransformContext,
64
64
  ): IrPropertySignature {
65
- const location = { path: createRef(["components", kind, name]), schema: item };
65
+ const location = { path: appendPointer(ROOT_POINTER, ["components", kind, name]), schema: item };
66
66
  const type = COMPONENT_TRANSFORMS[kind](item as never, location, context);
67
67
  const custom = context.callbacks.transform(item, location);
68
68
  const property = irProperty(toPropertyName(name), custom?.type ?? type, {
@@ -0,0 +1,36 @@
1
+ import type { IrDeclaration } from "../../../domain/ir/nodes.js";
2
+
3
+ /**
4
+ * The type names that declarations of the output take. Two declarations of one type name do not
5
+ * compile (TS2300, TS2567), or merge into one type without an error (two enums, two interfaces).
6
+ */
7
+
8
+ /**
9
+ * A declaration at the start of a line of raw text: the helper types, the `--read-write-markers`
10
+ * types, `inject` text and footer nodes from user code. A `const` lives in the value namespace.
11
+ */
12
+ const RAW_TYPE_DECLARATION_RE =
13
+ /^(?:export\s+)?(?:declare\s+)?(?:type|interface|enum|const\s+enum|class)\s+([A-Za-z_$][\w$]*)/gm;
14
+
15
+ /** The type names that raw declaration text declares. */
16
+ export function typeNamesInText(text: string): string[] {
17
+ return [...text.matchAll(RAW_TYPE_DECLARATION_RE)].map((match) => match[1] ?? "");
18
+ }
19
+
20
+ function typeNamesOf(declaration: IrDeclaration): readonly string[] {
21
+ switch (declaration.kind) {
22
+ case "rawDeclaration":
23
+ return declaration.name === undefined
24
+ ? typeNamesInText(declaration.text)
25
+ : [declaration.name];
26
+ case "constArray":
27
+ return [];
28
+ default:
29
+ return [declaration.name];
30
+ }
31
+ }
32
+
33
+ /** Every type name the declarations take; `--enum-values` arrays are values, so they take none. */
34
+ export function typeNamesDeclaredBy(declarations: readonly IrDeclaration[]): Set<string> {
35
+ return new Set(declarations.flatMap(typeNamesOf));
36
+ }
@@ -1,7 +1,7 @@
1
1
  import { irObject, irProperty } from "../../../domain/ir/constructors.js";
2
2
  import type { IrObjectType } from "../../../domain/ir/nodes.js";
3
3
  import { toPropertyName } from "../../../domain/ir/property-name.js";
4
- import { createRef } from "../../../domain/openapi/json-pointer.js";
4
+ import { appendPointer, ROOT_POINTER } from "../../../domain/openapi/json-pointer.js";
5
5
  import type { Schema } from "../../../domain/openapi/schema-object.js";
6
6
  import { transformSchema } from "../schema/schema-transform.js";
7
7
  import type { TransformContext } from "../transform-context.js";
@@ -17,7 +17,7 @@ export function defsRootType(
17
17
  context: TransformContext,
18
18
  ): IrObjectType {
19
19
  const members = Object.entries(defs).map(([name, schema]) => {
20
- const location = { path: createRef(["$defs", name]), schema };
20
+ const location = { path: appendPointer(ROOT_POINTER, ["$defs", name]), schema };
21
21
  const type = transformSchema(schema, location, context);
22
22
  return irProperty(toPropertyName(name), type, { isReadonly: context.options.immutable });
23
23
  });
@@ -1,3 +1,4 @@
1
+ import { appendAll } from "../../../domain/append-all.js";
1
2
  import { irKeyword, irObject, irRecord } from "../../../domain/ir/constructors.js";
2
3
  import type {
3
4
  IrDeclaration,
@@ -8,22 +9,23 @@ import type {
8
9
  } from "../../../domain/ir/nodes.js";
9
10
  import type { ComponentsObject } from "../../../domain/openapi/components-object.js";
10
11
  import type { DocumentObject } from "../../../domain/openapi/document-object.js";
11
- import type { PathsObject } from "../../../domain/openapi/path-item-object.js";
12
+ import type { OperationEntry, PathsObject } from "../../../domain/openapi/path-item-object.js";
12
13
  import { READ_WRITE_MARKER_TYPES } from "../helper-types.js";
13
14
  import type { TransformContext, TransformOptions } from "../transform-context.js";
14
15
  import { componentsType } from "./components.js";
15
16
  import { type DeclaredTypeLookup, declaredTypeLookup } from "./declared-types.js";
16
17
  import { defsRootType } from "./defs-root.js";
17
18
  import { keptDeprecatedComponents } from "./kept-deprecated.js";
19
+ import { isIncludedOperation } from "./path-item.js";
18
20
  import { pathMembers, pathsObjectType } from "./paths.js";
19
21
  import { apiPathsEnumDeclaration } from "./paths-enum.js";
20
22
  import { webhooksType } from "./webhooks.js";
21
23
 
22
24
  /** The root types, in output order. */
23
- const ROOT_KEYS = Object.freeze(["paths", "webhooks", "components", "$defs"] as const);
25
+ export const ROOT_KEYS = Object.freeze(["paths", "webhooks", "components", "$defs"] as const);
24
26
  type RootKey = (typeof ROOT_KEYS)[number];
25
27
 
26
- const OPERATIONS_NAME = "operations";
28
+ export const OPERATIONS_NAME = "operations";
27
29
  /** The type of a root without members: `Record<string, never>`. */
28
30
  const EMPTY_ROOT_TYPE = irRecord(irKeyword("string"), irKeyword("never"));
29
31
 
@@ -191,7 +193,7 @@ export function documentBody(
191
193
  if (inject !== "") {
192
194
  declarations.push({ kind: "rawDeclaration", text: inject });
193
195
  }
194
- declarations.push(...rootsDeclarations(document, context, footer));
196
+ appendAll(declarations, rootsDeclarations(document, context, footer));
195
197
  return declarations;
196
198
  }
197
199
 
@@ -209,7 +211,8 @@ export function documentClosing(
209
211
  declarations.push(emptyAlias(OPERATIONS_NAME));
210
212
  }
211
213
  if (context.options.makePathsEnum && document.paths) {
212
- declarations.push(apiPathsEnumDeclaration(document.paths));
214
+ const isIncluded = (operation: OperationEntry) => isIncludedOperation(operation, context);
215
+ declarations.push(apiPathsEnumDeclaration(document.paths, isIncluded));
213
216
  }
214
217
  return declarations;
215
218
  }