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,271 @@
1
+ import { ERROR_CODES, OpenAPITypesafeError } from "../../../domain/errors.js";
2
+ import {
3
+ irObject,
4
+ irProperty,
5
+ irReference,
6
+ irStringIndexSignature,
7
+ } from "../../../domain/ir/constructors.js";
8
+ import type { IrMember, IrPropertySignature, IrType } from "../../../domain/ir/nodes.js";
9
+ import { toPropertyName } from "../../../domain/ir/property-name.js";
10
+ import { createRef } from "../../../domain/openapi/json-pointer.js";
11
+ import type { Schema, SchemaObject } from "../../../domain/openapi/schema-object.js";
12
+ import { documentEntries } from "../document-entries.js";
13
+ import { refType } from "../ref-type.js";
14
+ import { withSchemaComment } from "../schema-comment.js";
15
+ import { UNKNOWN_TYPE } from "../shared-types.js";
16
+ import { intersectionOf, unionOf } from "../type-combinators.js";
17
+ import { discriminatorProperty } from "./discriminator-property.js";
18
+ import type { SchemaOptions } from "./schema-context.js";
19
+ import type { SchemaRequest } from "./schema-rule.js";
20
+
21
+ /** Path parts where a default value cannot make a property required (inputs may omit it). */
22
+ const INPUT_PATH_PARTS = ["parameters", "requestBody", "requestBodies"] as const;
23
+
24
+ export class InvalidPropertyError extends OpenAPITypesafeError {
25
+ constructor(path: string | undefined, key: string, value: unknown) {
26
+ const received = Array.isArray(value) ? "Array" : typeof value;
27
+ super({
28
+ code: ERROR_CODES.SCHEMA_PROPERTY_INVALID,
29
+ message:
30
+ `${path}: invalid property ${key}. ` + `Expected Schema Object or boolean, got ${received}`,
31
+ details: { path, property: key, received },
32
+ });
33
+ this.name = "InvalidPropertyError";
34
+ }
35
+ }
36
+
37
+ /** `--read-write-markers`: `$Read<T>` / `$Write<T>`, unless the property is both or neither. */
38
+ function withReadWriteMarker(type: IrType, flags: AccessFlags, options: SchemaOptions): IrType {
39
+ if (!options.readWriteMarkers || flags.isReadOnly === flags.isWriteOnly) {
40
+ return type;
41
+ }
42
+ return irReference(flags.isReadOnly ? "$Read" : "$Write", [type]);
43
+ }
44
+
45
+ interface AccessFlags {
46
+ readonly isReadOnly: boolean;
47
+ readonly isWriteOnly: boolean;
48
+ }
49
+
50
+ /** Apply `transformProperty`, then the schema's JSDoc. */
51
+ function finishProperty(
52
+ property: IrPropertySignature,
53
+ schema: Schema,
54
+ path: string,
55
+ request: SchemaRequest,
56
+ ): IrPropertySignature {
57
+ const location = { ...request.location, path };
58
+ const transformed =
59
+ request.context.callbacks.transformProperty(property, schema, location) ?? property;
60
+ // The original adds the schema's comment after any comment the callback set.
61
+ return withSchemaComment(transformed, schema);
62
+ }
63
+
64
+ /** What the property loop reads from a property schema, in the original order. */
65
+ interface PropertyFacts {
66
+ readonly ref: string | undefined;
67
+ readonly flags: AccessFlags;
68
+ readonly hasDefault: boolean;
69
+ }
70
+
71
+ function propertyFacts(value: Schema): PropertyFacts {
72
+ if (typeof value !== "object") {
73
+ return { ref: undefined, flags: { isReadOnly: false, isWriteOnly: false }, hasDefault: false };
74
+ }
75
+ // `in` throws for a null value, as in the original (which also reads `$ref` first).
76
+ const ref = "$ref" in value && value.$ref ? value.$ref : undefined;
77
+ const flags = {
78
+ isReadOnly: Boolean("readOnly" in value && value.readOnly),
79
+ isWriteOnly: Boolean("writeOnly" in value && value.writeOnly),
80
+ };
81
+ return { ref, flags, hasDefault: "default" in value && value.default !== undefined };
82
+ }
83
+
84
+ function isOptionalProperty(
85
+ key: string,
86
+ facts: PropertyFacts,
87
+ schema: SchemaObject,
88
+ request: SchemaRequest,
89
+ ): boolean {
90
+ const { options } = request.context;
91
+ const path = request.location.path;
92
+ const isDefaultRequired =
93
+ facts.hasDefault &&
94
+ options.defaultNonNullable &&
95
+ !INPUT_PATH_PARTS.some((part) => path?.includes(part));
96
+ const isRequired =
97
+ schema.required?.includes(key) ||
98
+ (schema.required === undefined && options.propertiesRequiredByDefault) ||
99
+ isDefaultRequired;
100
+ return !isRequired;
101
+ }
102
+
103
+ function isExcluded(value: Schema, facts: PropertyFacts, request: SchemaRequest): boolean {
104
+ if (!request.context.options.excludeDeprecated) {
105
+ return false;
106
+ }
107
+ const resolved = facts.ref ? request.context.refs.resolve(facts.ref) : value;
108
+ return Boolean((resolved as SchemaObject | undefined)?.deprecated);
109
+ }
110
+
111
+ /** A type, and whether a callback forced the property optional (null: no override). */
112
+ interface CustomResult {
113
+ readonly type: IrType;
114
+ readonly isOptional: true | null;
115
+ }
116
+
117
+ function propertyType(
118
+ key: string,
119
+ value: Schema,
120
+ facts: PropertyFacts,
121
+ request: SchemaRequest,
122
+ ): CustomResult {
123
+ const path = createRef([request.location.path, key]);
124
+ const type = facts.ref
125
+ ? refType(facts.ref)
126
+ : request.transformNested(value, { ...request.location, path });
127
+ const custom = request.context.callbacks.transform(value, request.location);
128
+ return custom === null
129
+ ? { type, isOptional: null }
130
+ : { type: custom.type, isOptional: custom.isOptional || null };
131
+ }
132
+
133
+ function propertyMember(
134
+ key: string,
135
+ value: Schema,
136
+ schema: SchemaObject,
137
+ request: SchemaRequest,
138
+ ): IrMember | null {
139
+ if ((typeof value !== "object" && typeof value !== "boolean") || Array.isArray(value)) {
140
+ throw new InvalidPropertyError(request.location.path, key, value);
141
+ }
142
+ const facts = propertyFacts(value);
143
+ if (isExcluded(value, facts, request)) {
144
+ return null;
145
+ }
146
+ const { options } = request.context;
147
+ const isOptional = isOptionalProperty(key, facts, schema, request);
148
+ const result = propertyType(key, value, facts, request);
149
+ const property = irProperty(
150
+ toPropertyName(key),
151
+ withReadWriteMarker(result.type, facts.flags, options),
152
+ {
153
+ isOptional: result.isOptional ?? isOptional,
154
+ isReadonly: options.immutable || (!options.readWriteMarkers && facts.flags.isReadOnly),
155
+ },
156
+ );
157
+ return finishProperty(property, value, createRef([request.location.path, key]), request);
158
+ }
159
+
160
+ function propertyMembers(schema: SchemaObject, request: SchemaRequest): IrMember[] {
161
+ const members: IrMember[] = [];
162
+ for (const [key, value] of documentEntries(schema.properties ?? {}, request.context.options)) {
163
+ const member = propertyMember(key, value, schema, request);
164
+ if (member !== null) {
165
+ members.push(member);
166
+ }
167
+ }
168
+ return members;
169
+ }
170
+
171
+ /**
172
+ * `$defs` as a nested `$defs?: { … }` member, in document order (never alphabetized). It is
173
+ * optional because `$defs` is a schema keyword, not data: the original made it required, so a
174
+ * value of the type needed a `$defs` key (research/legacy-bugs.md, item 17, upstream #2664).
175
+ */
176
+ function defsMember(
177
+ defs: Readonly<Record<string, SchemaObject>>,
178
+ request: SchemaRequest,
179
+ ): IrMember {
180
+ const { options } = request.context;
181
+ const members = Object.entries(defs).map(([key, value]) => {
182
+ const path = createRef([request.location.path, "$defs", key]);
183
+ const flags = {
184
+ isReadOnly: "readOnly" in value && !!value.readOnly,
185
+ isWriteOnly: "writeOnly" in value && !!value.writeOnly,
186
+ };
187
+ const type = withReadWriteMarker(
188
+ request.transformNested(value, { ...request.location, path }),
189
+ flags,
190
+ options,
191
+ );
192
+ const property = irProperty(toPropertyName(key), type, {
193
+ isReadonly: options.immutable || (!options.readWriteMarkers && flags.isReadOnly),
194
+ });
195
+ return finishProperty(property, value, path, request);
196
+ });
197
+ return irProperty(toPropertyName("$defs"), irObject(members), { isOptional: true });
198
+ }
199
+
200
+ function hasObjectKeywords(schema: SchemaObject): boolean {
201
+ const hasProperties = Boolean(schema.properties && Object.keys(schema.properties).length);
202
+ return (
203
+ hasProperties ||
204
+ Boolean(schema.additionalProperties || schema.patternProperties || schema.$defs)
205
+ );
206
+ }
207
+
208
+ /** Value types of the `[key: string]` index signature, in the original order. */
209
+ function indexValueTypes(schema: SchemaObject, request: SchemaRequest): IrType[] {
210
+ const { additionalProperties } = schema;
211
+ const isObject = typeof additionalProperties === "object";
212
+ const hasExplicit = isObject && Object.keys(additionalProperties).length > 0;
213
+ const hasImplicit =
214
+ additionalProperties === true || (isObject && Object.keys(additionalProperties).length === 0);
215
+ const types: IrType[] = [];
216
+ if (hasExplicit) {
217
+ types.push(request.transformNested(additionalProperties as Schema, request.location, true));
218
+ }
219
+ if (hasImplicit || (!additionalProperties && request.context.options.additionalProperties)) {
220
+ types.push(UNKNOWN_TYPE);
221
+ }
222
+ const patterns = schema.patternProperties;
223
+ if (typeof patterns === "object" && patterns !== null && Object.keys(patterns).length > 0) {
224
+ for (const [, value] of documentEntries(patterns, request.context.options)) {
225
+ types.push(request.transformNested(value, request.location));
226
+ }
227
+ }
228
+ return types;
229
+ }
230
+
231
+ /** The discriminator property that a parent's mapping implies for this schema, if any. */
232
+ function discriminatorMembers(schema: SchemaObject, request: SchemaRequest): IrMember[] {
233
+ if (!schema.allOf && !schema.anyOf) {
234
+ return [];
235
+ }
236
+ const path = request.location.path ?? "";
237
+ const { discriminators, options } = request.context;
238
+ // A schema does not get the discriminator it defines for its children, nor one added already.
239
+ const discriminator =
240
+ !schema.discriminator && !discriminators.isHandled(path) && discriminators.objectAt(path);
241
+ return discriminator ? [discriminatorProperty(discriminator, path, options.immutable)] : [];
242
+ }
243
+
244
+ /**
245
+ * Object keywords: discriminator, `properties`, `$defs`, and an index signature for
246
+ * `additionalProperties` / `patternProperties` (or `--additional-properties`). Null when the schema
247
+ * has none of them.
248
+ */
249
+ export function objectType(schema: SchemaObject, request: SchemaRequest): IrType | null {
250
+ const members = discriminatorMembers(schema, request);
251
+ if (!hasObjectKeywords(schema)) {
252
+ return members.length > 0 ? irObject(members) : null;
253
+ }
254
+ members.push(...propertyMembers(schema, request));
255
+ // As in the original, a null `$defs` throws here (Object.keys) instead of being skipped.
256
+ if (
257
+ "$defs" in schema &&
258
+ typeof schema.$defs === "object" &&
259
+ Object.keys(schema.$defs).length > 0
260
+ ) {
261
+ members.push(defsMember(schema.$defs, request));
262
+ }
263
+ const valueTypes = indexValueTypes(schema, request);
264
+ if (valueTypes.length === 0) {
265
+ return members.length > 0 ? irObject(members) : null;
266
+ }
267
+ const index = irObject([
268
+ irStringIndexSignature("key", unionOf(valueTypes), request.context.options.immutable),
269
+ ]);
270
+ return intersectionOf([...(members.length > 0 ? [irObject(members)] : []), index]);
271
+ }
@@ -0,0 +1,96 @@
1
+ import type { Schema, SchemaObject } from "../../../domain/openapi/schema-object.js";
2
+ import { OutputFix } from "../../../domain/output-fixes.js";
3
+ import type { SchemaRequest } from "./schema-rule.js";
4
+
5
+ /**
6
+ * The `allof-required` fix (ADR-021, roadmap R6). An `allOf` member such as `{ required: [name] }`
7
+ * or `{ type: object }` says nothing about the shape of the object; it only asks that keys are
8
+ * present. Typed as an object of its own, it adds `& Record<string, never>` or `& unknown`. With
9
+ * the fix, such members are left out and their keys are made required in the other members, the
10
+ * same way the parent's `required` is (upstream #1474, #1520, #2165).
11
+ */
12
+
13
+ /**
14
+ * Keywords that do not change the shape: `type: object`, `required`, and annotations that the
15
+ * generator does not read on an `allOf` member. `default`, `readOnly` and `writeOnly` are left out:
16
+ * they change types elsewhere.
17
+ */
18
+ const PRESENCE_KEYWORDS: ReadonlySet<string> = new Set([
19
+ "$comment",
20
+ "deprecated",
21
+ "description",
22
+ "example",
23
+ "examples",
24
+ "required",
25
+ "title",
26
+ "type",
27
+ ]);
28
+
29
+ const EXTENSION_PREFIX = "x-";
30
+ const OBJECT_TYPE = "object";
31
+
32
+ function isStringList(value: unknown): value is readonly string[] {
33
+ return Array.isArray(value) && value.every((entry) => typeof entry === "string");
34
+ }
35
+
36
+ function isPresenceKeyword([key, value]: readonly [string, unknown]): boolean {
37
+ if (key === "type") {
38
+ return value === OBJECT_TYPE;
39
+ }
40
+ if (key === "required") {
41
+ return isStringList(value);
42
+ }
43
+ return PRESENCE_KEYWORDS.has(key) || key.startsWith(EXTENSION_PREFIX);
44
+ }
45
+
46
+ function isPresenceObject(schema: unknown): schema is SchemaObject {
47
+ return (
48
+ typeof schema === "object" &&
49
+ schema !== null &&
50
+ !Array.isArray(schema) &&
51
+ !("$ref" in schema) &&
52
+ Object.entries(schema).every(isPresenceKeyword)
53
+ );
54
+ }
55
+
56
+ /**
57
+ * The schema a member stands for: itself, or the target of a `$ref` with no sibling keywords. The
58
+ * discriminator scan has already added the discriminator property to a mapped target, so such a
59
+ * target is never presence-only.
60
+ */
61
+ function memberSchema(member: Schema, request: SchemaRequest): unknown {
62
+ if (typeof member !== "object" || member === null || !("$ref" in member)) {
63
+ return member;
64
+ }
65
+ const ref = (member as { readonly $ref: unknown }).$ref;
66
+ if (typeof ref !== "string" || Object.keys(member).length !== 1) {
67
+ return undefined;
68
+ }
69
+ return request.context.refs.resolve(ref);
70
+ }
71
+
72
+ /** The `allOf` members to type, and the keys the left-out members make required. */
73
+ export interface AllOfMembers {
74
+ readonly members: readonly Schema[];
75
+ readonly required: readonly string[];
76
+ }
77
+
78
+ /**
79
+ * The members of `allOf` with presence-only ones left out, when the fix is on and another member
80
+ * is left to carry the keys; otherwise the members as they are.
81
+ */
82
+ export function allOfMembers(members: readonly Schema[], request: SchemaRequest): AllOfMembers {
83
+ const unchanged = { members, required: [] };
84
+ if (!request.context.options.fixes.has(OutputFix.ALLOF_REQUIRED)) {
85
+ return unchanged;
86
+ }
87
+ const schemas = members.map((member) => memberSchema(member, request));
88
+ const kept = members.filter((_, index) => !isPresenceObject(schemas[index]));
89
+ if (kept.length === 0 || kept.length === members.length) {
90
+ return unchanged;
91
+ }
92
+ const required = schemas.flatMap((schema) =>
93
+ isPresenceObject(schema) ? (schema.required ?? []) : [],
94
+ );
95
+ return { members: kept, required };
96
+ }
@@ -0,0 +1,110 @@
1
+ import type { IrPropertySignature, IrType } from "../../../domain/ir/nodes.js";
2
+ import type { OutputFix } from "../../../domain/output-fixes.js";
3
+
4
+ /**
5
+ * Everything the schema transformer needs from outside, as explicit dependencies (ENGINEERING_PLAN
6
+ * §4.4): options, `$ref` resolution, discriminators, declarations added to the file footer, and the
7
+ * user callbacks. The transformer is pure given these; there is no module-level state.
8
+ */
9
+
10
+ /** Generator options that change schema output. */
11
+ export interface SchemaOptions {
12
+ readonly additionalProperties: boolean;
13
+ readonly alphabetize: boolean;
14
+ readonly arrayLength: boolean;
15
+ /** `--binary-as-blob`: raw binary strings become `Blob`. */
16
+ readonly binaryAsBlob: boolean;
17
+ readonly conditionalEnums: boolean;
18
+ readonly dedupeEnums: boolean;
19
+ readonly defaultNonNullable: boolean;
20
+ readonly emptyObjectsUnknown: boolean;
21
+ readonly enum: boolean;
22
+ readonly enumValues: boolean;
23
+ readonly excludeDeprecated: boolean;
24
+ /** `--fix`: the opt-in output fixes of this run (ADR-021). */
25
+ readonly fixes: ReadonlySet<OutputFix>;
26
+ readonly immutable: boolean;
27
+ readonly propertiesRequiredByDefault: boolean;
28
+ readonly readWriteMarkers: boolean;
29
+ }
30
+
31
+ /**
32
+ * Where the transformer is in the document. `schema` is whatever the caller passed along; it is
33
+ * only handed to user callbacks, as the original does.
34
+ */
35
+ export interface SchemaLocation {
36
+ readonly path?: string | undefined;
37
+ readonly schema?: unknown;
38
+ }
39
+
40
+ /** A discriminator object, as far as the transformer reads it. */
41
+ export interface Discriminator {
42
+ readonly propertyName: string;
43
+ readonly mapping?: Readonly<Record<string, string>> | undefined;
44
+ }
45
+
46
+ export interface Discriminators {
47
+ /** The discriminator that applies to the schema at this `$ref`, if any. */
48
+ objectAt(ref: string): Discriminator | undefined;
49
+ /** Whether the discriminator property of this `$ref` was already added. */
50
+ isHandled(ref: string): boolean;
51
+ }
52
+
53
+ export interface RefResolver {
54
+ resolve(ref: string): unknown;
55
+ }
56
+
57
+ /** `x-enum-varnames` / `x-enum-descriptions` entry of one enum value. */
58
+ export interface EnumMemberMetadata {
59
+ readonly name: string | undefined;
60
+ readonly description: string | undefined;
61
+ }
62
+
63
+ export interface EnumDeclarationRequest {
64
+ readonly name: string;
65
+ readonly values: readonly (string | number)[];
66
+ readonly metadata: readonly EnumMemberMetadata[];
67
+ }
68
+
69
+ export interface EnumValuesRequest {
70
+ readonly name: string;
71
+ readonly type: IrType;
72
+ readonly values: readonly (string | number)[];
73
+ }
74
+
75
+ /** Declarations the transformer adds once per file, after the main interfaces. */
76
+ export interface FooterDeclarations {
77
+ /** Add (or reuse) an enum declaration and return the name it was declared with. */
78
+ addEnum(request: EnumDeclarationRequest): string;
79
+ /** Add an exported, readonly array of enum values (`--enum-values`). */
80
+ addEnumValues(request: EnumValuesRequest): void;
81
+ /** Make sure the `WithRequired` helper type is declared. */
82
+ requireWithRequired(): void;
83
+ /** Make sure the `PropertyValues` helper type is declared (`unevaluated-properties`). */
84
+ requirePropertyValues(): void;
85
+ }
86
+
87
+ /** A type returned by the `transform` callback; `isOptional` is its `questionToken`. */
88
+ export interface CustomType {
89
+ readonly type: IrType;
90
+ readonly isOptional: boolean;
91
+ }
92
+
93
+ /** User callbacks. A callback that is not set returns null. */
94
+ export interface SchemaCallbacks {
95
+ transform(schema: unknown, location: SchemaLocation): CustomType | null;
96
+ postTransform(type: IrType, location: SchemaLocation): IrType | null;
97
+ transformProperty(
98
+ property: IrPropertySignature,
99
+ schema: unknown,
100
+ location: SchemaLocation,
101
+ ): IrPropertySignature | null;
102
+ }
103
+
104
+ export interface SchemaContext {
105
+ readonly options: SchemaOptions;
106
+ readonly refs: RefResolver;
107
+ readonly discriminators: Discriminators;
108
+ readonly footer: FooterDeclarations;
109
+ readonly callbacks: SchemaCallbacks;
110
+ }
@@ -0,0 +1,29 @@
1
+ import type { IrType } from "../../../domain/ir/nodes.js";
2
+ import type { Schema, SchemaObject } from "../../../domain/openapi/schema-object.js";
3
+ import type { SchemaContext, SchemaLocation } from "./schema-context.js";
4
+
5
+ /** Transform a nested schema, with `postTransform` applied (the recursion entry point). */
6
+ export type TransformNested = (
7
+ schema: Schema,
8
+ location: SchemaLocation,
9
+ isFromAdditionalProperties?: boolean,
10
+ ) => IrType;
11
+
12
+ /** One call of the schema transformer. */
13
+ export interface SchemaRequest {
14
+ readonly location: SchemaLocation;
15
+ readonly context: SchemaContext;
16
+ /** Set for `additionalProperties` schemas: `--enum-values` arrays then index by `string`. */
17
+ readonly isFromAdditionalProperties: boolean;
18
+ readonly transformNested: TransformNested;
19
+ }
20
+
21
+ /**
22
+ * One schema shape (ENGINEERING_PLAN §4.4). Rules are tried in a fixed order and the first match
23
+ * transforms the schema; the order is the original precedence. Internal, not a plugin point.
24
+ */
25
+ export interface SchemaRule {
26
+ readonly name: string;
27
+ matches(schema: SchemaObject): boolean;
28
+ transform(schema: SchemaObject, request: SchemaRequest): IrType;
29
+ }
@@ -0,0 +1,99 @@
1
+ import { ERROR_CODES, OpenAPITypesafeError } from "../../../domain/errors.js";
2
+ import { irKeyword } from "../../../domain/ir/constructors.js";
3
+ import type { IrType } from "../../../domain/ir/nodes.js";
4
+ import type { Schema, SchemaObject } from "../../../domain/openapi/schema-object.js";
5
+ import { literalType } from "../literal-type.js";
6
+ import { refType } from "../ref-type.js";
7
+ import { UNKNOWN_TYPE } from "../shared-types.js";
8
+ import { compositionType } from "./composition-type.js";
9
+ import { enumRule } from "./enum-rule.js";
10
+ import type { SchemaContext, SchemaLocation } from "./schema-context.js";
11
+ import type { SchemaRequest, SchemaRule } from "./schema-rule.js";
12
+
13
+ export class InvalidSchemaError extends OpenAPITypesafeError {
14
+ constructor(schema: unknown, path: string | undefined) {
15
+ const received = Array.isArray(schema) ? "Array" : typeof schema;
16
+ super({
17
+ code: ERROR_CODES.SCHEMA_OBJECT_INVALID,
18
+ message: `Expected SchemaObject, received ${received} at ${path}`,
19
+ details: { path, received },
20
+ });
21
+ this.name = "InvalidSchemaError";
22
+ }
23
+ }
24
+
25
+ /** Shape rules in the original precedence; composition handles everything they do not match. */
26
+ const SHAPE_RULES: readonly SchemaRule[] = [
27
+ {
28
+ name: "$ref",
29
+ matches: (schema) => "$ref" in schema,
30
+ transform: (schema) => refType((schema as { $ref: string }).$ref),
31
+ },
32
+ {
33
+ name: "const",
34
+ matches: (schema) => schema.const !== null && schema.const !== undefined,
35
+ transform: (schema) => literalType(schema.const),
36
+ },
37
+ enumRule,
38
+ ];
39
+
40
+ /** A schema checked for its input shape, or the type of a non-object schema. */
41
+ type CheckedSchema = { readonly type: IrType } | { readonly schema: SchemaObject };
42
+
43
+ /** A missing schema is `never`; `true` allows anything; other non-objects are invalid. */
44
+ function checkSchema(schema: unknown, path: string | undefined): CheckedSchema {
45
+ if (!schema) {
46
+ return { type: irKeyword("never") };
47
+ }
48
+ if (schema === true) {
49
+ return { type: UNKNOWN_TYPE };
50
+ }
51
+ if (Array.isArray(schema) || typeof schema !== "object") {
52
+ throw new InvalidSchemaError(schema, path);
53
+ }
54
+ return { schema: schema as SchemaObject };
55
+ }
56
+
57
+ function request(
58
+ location: SchemaLocation,
59
+ context: SchemaContext,
60
+ isFromAdditionalProperties: boolean,
61
+ ): SchemaRequest {
62
+ return {
63
+ location,
64
+ context,
65
+ isFromAdditionalProperties,
66
+ transformNested: (schema, nestedLocation, isNestedFromAdditionalProperties = false) =>
67
+ transformSchema(schema, nestedLocation, context, isNestedFromAdditionalProperties),
68
+ };
69
+ }
70
+
71
+ /**
72
+ * Transform a schema without the `postTransform` callback (the original
73
+ * `transformSchemaObjectWithComposition`). Nested schemas still get `postTransform`.
74
+ */
75
+ export function transformSchemaShape(
76
+ schema: Schema | null | undefined,
77
+ location: SchemaLocation,
78
+ context: SchemaContext,
79
+ isFromAdditionalProperties = false,
80
+ ): IrType {
81
+ const checked = checkSchema(schema, location.path);
82
+ if ("type" in checked) {
83
+ return checked.type;
84
+ }
85
+ const current = request(location, context, isFromAdditionalProperties);
86
+ const rule = SHAPE_RULES.find((candidate) => candidate.matches(checked.schema));
87
+ return rule ? rule.transform(checked.schema, current) : compositionType(checked.schema, current);
88
+ }
89
+
90
+ /** Transform a schema to IR, then apply `postTransform` (the original `transformSchemaObject`). */
91
+ export function transformSchema(
92
+ schema: Schema | null | undefined,
93
+ location: SchemaLocation,
94
+ context: SchemaContext,
95
+ isFromAdditionalProperties = false,
96
+ ): IrType {
97
+ const type = transformSchemaShape(schema, location, context, isFromAdditionalProperties);
98
+ return context.callbacks.postTransform(type, location) ?? type;
99
+ }