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

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 (448) hide show
  1. package/CHANGELOG.md +1831 -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 +90 -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 +90 -14
  13. package/dist/adapters/node-file-system/node-file-system.mjs.map +1 -1
  14. package/dist/adapters/redocly-loader/bundled-mapping-copies.cjs +75 -0
  15. package/dist/adapters/redocly-loader/bundled-mapping-copies.cjs.map +1 -0
  16. package/dist/adapters/redocly-loader/bundled-mapping-copies.mjs +72 -0
  17. package/dist/adapters/redocly-loader/bundled-mapping-copies.mjs.map +1 -0
  18. package/dist/adapters/redocly-loader/bundled-ref-repair.cjs +1 -1
  19. package/dist/adapters/redocly-loader/bundled-ref-repair.cjs.map +1 -1
  20. package/dist/adapters/redocly-loader/bundled-ref-repair.mjs +2 -2
  21. package/dist/adapters/redocly-loader/bundled-ref-repair.mjs.map +1 -1
  22. package/dist/adapters/redocly-loader/loaded-documents.cjs +28 -0
  23. package/dist/adapters/redocly-loader/loaded-documents.cjs.map +1 -0
  24. package/dist/adapters/redocly-loader/loaded-documents.mjs +21 -0
  25. package/dist/adapters/redocly-loader/loaded-documents.mjs.map +1 -0
  26. package/dist/adapters/redocly-loader/redocly-schema-loader.cjs +14 -15
  27. package/dist/adapters/redocly-loader/redocly-schema-loader.cjs.map +1 -1
  28. package/dist/adapters/redocly-loader/redocly-schema-loader.mjs +12 -13
  29. package/dist/adapters/redocly-loader/redocly-schema-loader.mjs.map +1 -1
  30. package/dist/adapters/redocly-loader/ref-access.cjs +31 -3
  31. package/dist/adapters/redocly-loader/ref-access.cjs.map +1 -1
  32. package/dist/adapters/redocly-loader/ref-access.mjs +31 -3
  33. package/dist/adapters/redocly-loader/ref-access.mjs.map +1 -1
  34. package/dist/adapters/redocly-loader/ref-holders.cjs +2 -2
  35. package/dist/adapters/redocly-loader/ref-holders.cjs.map +1 -1
  36. package/dist/adapters/redocly-loader/ref-holders.mjs +3 -3
  37. package/dist/adapters/redocly-loader/ref-holders.mjs.map +1 -1
  38. package/dist/adapters/redocly-loader/remote-body-limit.cjs +50 -0
  39. package/dist/adapters/redocly-loader/remote-body-limit.cjs.map +1 -0
  40. package/dist/adapters/redocly-loader/remote-body-limit.mjs +48 -0
  41. package/dist/adapters/redocly-loader/remote-body-limit.mjs.map +1 -0
  42. package/dist/adapters/redocly-loader/remote-fetch.cjs +35 -6
  43. package/dist/adapters/redocly-loader/remote-fetch.cjs.map +1 -1
  44. package/dist/adapters/redocly-loader/remote-fetch.mjs +35 -6
  45. package/dist/adapters/redocly-loader/remote-fetch.mjs.map +1 -1
  46. package/dist/adapters/redocly-loader/remote-node-limit.cjs +47 -0
  47. package/dist/adapters/redocly-loader/remote-node-limit.cjs.map +1 -0
  48. package/dist/adapters/redocly-loader/remote-node-limit.mjs +44 -0
  49. package/dist/adapters/redocly-loader/remote-node-limit.mjs.map +1 -0
  50. package/dist/adapters/redocly-loader/schema-load-errors.cjs +32 -8
  51. package/dist/adapters/redocly-loader/schema-load-errors.cjs.map +1 -1
  52. package/dist/adapters/redocly-loader/schema-load-errors.mjs +32 -9
  53. package/dist/adapters/redocly-loader/schema-load-errors.mjs.map +1 -1
  54. package/dist/adapters/redocly-loader/schema-source.cjs +11 -7
  55. package/dist/adapters/redocly-loader/schema-source.cjs.map +1 -1
  56. package/dist/adapters/redocly-loader/schema-source.mjs +12 -8
  57. package/dist/adapters/redocly-loader/schema-source.mjs.map +1 -1
  58. package/dist/adapters/redocly-loader/unsupported-keys.cjs +3 -5
  59. package/dist/adapters/redocly-loader/unsupported-keys.cjs.map +1 -1
  60. package/dist/adapters/redocly-loader/unsupported-keys.mjs +3 -5
  61. package/dist/adapters/redocly-loader/unsupported-keys.mjs.map +1 -1
  62. package/dist/adapters/terminal-logger/terminal-logger.cjs +6 -4
  63. package/dist/adapters/terminal-logger/terminal-logger.cjs.map +1 -1
  64. package/dist/adapters/terminal-logger/terminal-logger.mjs +6 -4
  65. package/dist/adapters/terminal-logger/terminal-logger.mjs.map +1 -1
  66. package/dist/api/default-ports.cjs +14 -2
  67. package/dist/api/default-ports.cjs.map +1 -1
  68. package/dist/api/default-ports.mjs +14 -2
  69. package/dist/api/default-ports.mjs.map +1 -1
  70. package/dist/api/discriminator-enum-parent.cjs +2 -2
  71. package/dist/api/discriminator-enum-parent.cjs.map +1 -1
  72. package/dist/api/discriminator-enum-parent.mjs +3 -3
  73. package/dist/api/discriminator-enum-parent.mjs.map +1 -1
  74. package/dist/api/discriminator-other-owners.cjs +5 -3
  75. package/dist/api/discriminator-other-owners.cjs.map +1 -1
  76. package/dist/api/discriminator-other-owners.mjs +5 -3
  77. package/dist/api/discriminator-other-owners.mjs.map +1 -1
  78. package/dist/api/discriminator-patch.cjs +5 -1
  79. package/dist/api/discriminator-patch.cjs.map +1 -1
  80. package/dist/api/discriminator-patch.mjs +5 -1
  81. package/dist/api/discriminator-patch.mjs.map +1 -1
  82. package/dist/api/discriminator-scan.cjs +15 -8
  83. package/dist/api/discriminator-scan.cjs.map +1 -1
  84. package/dist/api/discriminator-scan.mjs +15 -8
  85. package/dist/api/discriminator-scan.mjs.map +1 -1
  86. package/dist/api/document-run.cjs +2 -2
  87. package/dist/api/document-run.cjs.map +1 -1
  88. package/dist/api/document-run.mjs +2 -2
  89. package/dist/api/document-run.mjs.map +1 -1
  90. package/dist/api/legacy-utils.cjs.map +1 -1
  91. package/dist/api/legacy-utils.mjs.map +1 -1
  92. package/dist/api/openapi-ts.cjs +8 -4
  93. package/dist/api/openapi-ts.cjs.map +1 -1
  94. package/dist/api/openapi-ts.mjs +8 -5
  95. package/dist/api/openapi-ts.mjs.map +1 -1
  96. package/dist/api/schema-callbacks.cjs +36 -12
  97. package/dist/api/schema-callbacks.cjs.map +1 -1
  98. package/dist/api/schema-callbacks.mjs +36 -12
  99. package/dist/api/schema-callbacks.mjs.map +1 -1
  100. package/dist/api/transform-context.cjs +7 -3
  101. package/dist/api/transform-context.cjs.map +1 -1
  102. package/dist/api/transform-context.mjs +7 -3
  103. package/dist/api/transform-context.mjs.map +1 -1
  104. package/dist/api/transform-schema.cjs +40 -10
  105. package/dist/api/transform-schema.cjs.map +1 -1
  106. package/dist/api/transform-schema.mjs +41 -11
  107. package/dist/api/transform-schema.mjs.map +1 -1
  108. package/dist/application/print/text-writer.cjs +10 -3
  109. package/dist/application/print/text-writer.cjs.map +1 -1
  110. package/dist/application/print/text-writer.mjs +10 -3
  111. package/dist/application/print/text-writer.mjs.map +1 -1
  112. package/dist/application/stack-overflow.cjs +2 -1
  113. package/dist/application/stack-overflow.cjs.map +1 -1
  114. package/dist/application/stack-overflow.mjs +2 -1
  115. package/dist/application/stack-overflow.mjs.map +1 -1
  116. package/dist/application/transform/document/components.cjs +1 -1
  117. package/dist/application/transform/document/components.cjs.map +1 -1
  118. package/dist/application/transform/document/components.mjs +2 -2
  119. package/dist/application/transform/document/components.mjs.map +1 -1
  120. package/dist/application/transform/document/declared-type-names.cjs +23 -0
  121. package/dist/application/transform/document/declared-type-names.cjs.map +1 -0
  122. package/dist/application/transform/document/declared-type-names.mjs +20 -0
  123. package/dist/application/transform/document/declared-type-names.mjs.map +1 -0
  124. package/dist/application/transform/document/defs-root.cjs +1 -1
  125. package/dist/application/transform/document/defs-root.cjs.map +1 -1
  126. package/dist/application/transform/document/defs-root.mjs +2 -2
  127. package/dist/application/transform/document/defs-root.mjs.map +1 -1
  128. package/dist/application/transform/document/document.cjs +4 -1
  129. package/dist/application/transform/document/document.cjs.map +1 -1
  130. package/dist/application/transform/document/document.mjs +3 -2
  131. package/dist/application/transform/document/document.mjs.map +1 -1
  132. package/dist/application/transform/document/enum-names-given-back.cjs +62 -0
  133. package/dist/application/transform/document/enum-names-given-back.cjs.map +1 -0
  134. package/dist/application/transform/document/enum-names-given-back.mjs +58 -0
  135. package/dist/application/transform/document/enum-names-given-back.mjs.map +1 -0
  136. package/dist/application/transform/document/global-type-references.cjs +1 -0
  137. package/dist/application/transform/document/global-type-references.cjs.map +1 -1
  138. package/dist/application/transform/document/global-type-references.mjs +1 -1
  139. package/dist/application/transform/document/global-type-references.mjs.map +1 -1
  140. package/dist/application/transform/document/media-type.cjs +2 -2
  141. package/dist/application/transform/document/media-type.cjs.map +1 -1
  142. package/dist/application/transform/document/media-type.mjs +3 -3
  143. package/dist/application/transform/document/media-type.mjs.map +1 -1
  144. package/dist/application/transform/document/operation-keys-written.cjs +26 -0
  145. package/dist/application/transform/document/operation-keys-written.cjs.map +1 -0
  146. package/dist/application/transform/document/operation-keys-written.mjs +24 -0
  147. package/dist/application/transform/document/operation-keys-written.mjs.map +1 -0
  148. package/dist/application/transform/document/operation.cjs +1 -1
  149. package/dist/application/transform/document/operation.cjs.map +1 -1
  150. package/dist/application/transform/document/operation.mjs +2 -2
  151. package/dist/application/transform/document/operation.mjs.map +1 -1
  152. package/dist/application/transform/document/parameter-entries.cjs +34 -0
  153. package/dist/application/transform/document/parameter-entries.cjs.map +1 -0
  154. package/dist/application/transform/document/parameter-entries.mjs +30 -0
  155. package/dist/application/transform/document/parameter-entries.mjs.map +1 -0
  156. package/dist/application/transform/document/parameter.cjs +12 -4
  157. package/dist/application/transform/document/parameter.cjs.map +1 -1
  158. package/dist/application/transform/document/parameter.mjs +13 -5
  159. package/dist/application/transform/document/parameter.mjs.map +1 -1
  160. package/dist/application/transform/document/parameters.cjs +6 -29
  161. package/dist/application/transform/document/parameters.cjs.map +1 -1
  162. package/dist/application/transform/document/parameters.mjs +6 -29
  163. package/dist/application/transform/document/parameters.mjs.map +1 -1
  164. package/dist/application/transform/document/path-item.cjs +11 -14
  165. package/dist/application/transform/document/path-item.cjs.map +1 -1
  166. package/dist/application/transform/document/path-item.mjs +12 -16
  167. package/dist/application/transform/document/path-item.mjs.map +1 -1
  168. package/dist/application/transform/document/paths-enum.cjs +1 -0
  169. package/dist/application/transform/document/paths-enum.cjs.map +1 -1
  170. package/dist/application/transform/document/paths-enum.mjs +1 -1
  171. package/dist/application/transform/document/paths-enum.mjs.map +1 -1
  172. package/dist/application/transform/document/paths.cjs +5 -1
  173. package/dist/application/transform/document/paths.cjs.map +1 -1
  174. package/dist/application/transform/document/paths.mjs +6 -2
  175. package/dist/application/transform/document/paths.mjs.map +1 -1
  176. package/dist/application/transform/document/referenced-parameter.cjs +80 -0
  177. package/dist/application/transform/document/referenced-parameter.cjs.map +1 -0
  178. package/dist/application/transform/document/referenced-parameter.mjs +78 -0
  179. package/dist/application/transform/document/referenced-parameter.mjs.map +1 -0
  180. package/dist/application/transform/document/request-body.cjs +1 -1
  181. package/dist/application/transform/document/request-body.cjs.map +1 -1
  182. package/dist/application/transform/document/request-body.mjs +2 -2
  183. package/dist/application/transform/document/request-body.mjs.map +1 -1
  184. package/dist/application/transform/document/response.cjs +2 -2
  185. package/dist/application/transform/document/response.cjs.map +1 -1
  186. package/dist/application/transform/document/response.mjs +3 -3
  187. package/dist/application/transform/document/response.mjs.map +1 -1
  188. package/dist/application/transform/document/responses.cjs +1 -1
  189. package/dist/application/transform/document/responses.cjs.map +1 -1
  190. package/dist/application/transform/document/responses.mjs +2 -2
  191. package/dist/application/transform/document/responses.mjs.map +1 -1
  192. package/dist/application/transform/document/root-type-aliases.cjs +8 -23
  193. package/dist/application/transform/document/root-type-aliases.cjs.map +1 -1
  194. package/dist/application/transform/document/root-type-aliases.mjs +8 -24
  195. package/dist/application/transform/document/root-type-aliases.mjs.map +1 -1
  196. package/dist/application/transform/document/type-resolution.cjs +3 -1
  197. package/dist/application/transform/document/type-resolution.cjs.map +1 -1
  198. package/dist/application/transform/document/type-resolution.mjs +3 -1
  199. package/dist/application/transform/document/type-resolution.mjs.map +1 -1
  200. package/dist/application/transform/document/webhooks.cjs +1 -1
  201. package/dist/application/transform/document/webhooks.cjs.map +1 -1
  202. package/dist/application/transform/document/webhooks.mjs +2 -2
  203. package/dist/application/transform/document/webhooks.mjs.map +1 -1
  204. package/dist/application/transform/footer/document-footer.cjs +10 -2
  205. package/dist/application/transform/footer/document-footer.cjs.map +1 -1
  206. package/dist/application/transform/footer/document-footer.mjs +10 -2
  207. package/dist/application/transform/footer/document-footer.mjs.map +1 -1
  208. package/dist/application/transform/footer/enum-name-claims.cjs +48 -0
  209. package/dist/application/transform/footer/enum-name-claims.cjs.map +1 -0
  210. package/dist/application/transform/footer/enum-name-claims.mjs +46 -0
  211. package/dist/application/transform/footer/enum-name-claims.mjs.map +1 -0
  212. package/dist/application/transform/footer/operation-keys.cjs +23 -0
  213. package/dist/application/transform/footer/operation-keys.cjs.map +1 -0
  214. package/dist/application/transform/footer/operation-keys.mjs +21 -0
  215. package/dist/application/transform/footer/operation-keys.mjs.map +1 -0
  216. package/dist/application/transform/footer/type-evaluation.cjs +4 -4
  217. package/dist/application/transform/footer/type-evaluation.cjs.map +1 -1
  218. package/dist/application/transform/footer/type-evaluation.mjs +4 -4
  219. package/dist/application/transform/footer/type-evaluation.mjs.map +1 -1
  220. package/dist/application/transform/helper-types.cjs +1 -1
  221. package/dist/application/transform/helper-types.cjs.map +1 -1
  222. package/dist/application/transform/helper-types.mjs +1 -1
  223. package/dist/application/transform/helper-types.mjs.map +1 -1
  224. package/dist/application/transform/numbered-names.cjs +9 -0
  225. package/dist/application/transform/numbered-names.cjs.map +1 -1
  226. package/dist/application/transform/numbered-names.mjs +9 -1
  227. package/dist/application/transform/numbered-names.mjs.map +1 -1
  228. package/dist/application/transform/ref-pointer/generated-location.cjs +1 -1
  229. package/dist/application/transform/ref-pointer/generated-location.cjs.map +1 -1
  230. package/dist/application/transform/ref-pointer/generated-location.mjs +2 -2
  231. package/dist/application/transform/ref-pointer/generated-location.mjs.map +1 -1
  232. package/dist/application/transform/ref-type.cjs +2 -1
  233. package/dist/application/transform/ref-type.cjs.map +1 -1
  234. package/dist/application/transform/ref-type.mjs +2 -1
  235. package/dist/application/transform/ref-type.mjs.map +1 -1
  236. package/dist/application/transform/schema/composition-type.cjs +1 -1
  237. package/dist/application/transform/schema/composition-type.cjs.map +1 -1
  238. package/dist/application/transform/schema/composition-type.mjs +2 -2
  239. package/dist/application/transform/schema/composition-type.mjs.map +1 -1
  240. package/dist/application/transform/schema/enum-rule.cjs +1 -1
  241. package/dist/application/transform/schema/enum-rule.cjs.map +1 -1
  242. package/dist/application/transform/schema/enum-rule.mjs +2 -2
  243. package/dist/application/transform/schema/enum-rule.mjs.map +1 -1
  244. package/dist/application/transform/schema/object-type.cjs +3 -3
  245. package/dist/application/transform/schema/object-type.cjs.map +1 -1
  246. package/dist/application/transform/schema/object-type.mjs +4 -4
  247. package/dist/application/transform/schema/object-type.mjs.map +1 -1
  248. package/dist/application/transform/schema/ref-siblings.cjs +47 -0
  249. package/dist/application/transform/schema/ref-siblings.cjs.map +1 -0
  250. package/dist/application/transform/schema/ref-siblings.mjs +45 -0
  251. package/dist/application/transform/schema/ref-siblings.mjs.map +1 -0
  252. package/dist/application/transform/schema/schema-transform.cjs +4 -2
  253. package/dist/application/transform/schema/schema-transform.cjs.map +1 -1
  254. package/dist/application/transform/schema/schema-transform.mjs +4 -2
  255. package/dist/application/transform/schema/schema-transform.mjs.map +1 -1
  256. package/dist/application/transform/schema-comment.cjs +5 -1
  257. package/dist/application/transform/schema-comment.cjs.map +1 -1
  258. package/dist/application/transform/schema-comment.mjs +5 -1
  259. package/dist/application/transform/schema-comment.mjs.map +1 -1
  260. package/dist/cli/api-settings.cjs +62 -6
  261. package/dist/cli/api-settings.cjs.map +1 -1
  262. package/dist/cli/api-settings.mjs +60 -7
  263. package/dist/cli/api-settings.mjs.map +1 -1
  264. package/dist/cli/api-writes.cjs +72 -0
  265. package/dist/cli/api-writes.cjs.map +1 -0
  266. package/dist/cli/api-writes.mjs +69 -0
  267. package/dist/cli/api-writes.mjs.map +1 -0
  268. package/dist/cli/cli-errors.cjs +12 -1
  269. package/dist/cli/cli-errors.cjs.map +1 -1
  270. package/dist/cli/cli-errors.mjs +12 -1
  271. package/dist/cli/cli-errors.mjs.map +1 -1
  272. package/dist/cli/cli-output.cjs +106 -1
  273. package/dist/cli/cli-output.cjs.map +1 -1
  274. package/dist/cli/cli-output.mjs +99 -2
  275. package/dist/cli/cli-output.mjs.map +1 -1
  276. package/dist/cli/main.cjs +5 -1
  277. package/dist/cli/main.cjs.map +1 -1
  278. package/dist/cli/main.mjs +6 -2
  279. package/dist/cli/main.mjs.map +1 -1
  280. package/dist/cli/redocly-apis.cjs +82 -36
  281. package/dist/cli/redocly-apis.cjs.map +1 -1
  282. package/dist/cli/redocly-apis.mjs +85 -39
  283. package/dist/cli/redocly-apis.mjs.map +1 -1
  284. package/dist/cli/run-cli.cjs +13 -7
  285. package/dist/cli/run-cli.cjs.map +1 -1
  286. package/dist/cli/run-cli.mjs +14 -8
  287. package/dist/cli/run-cli.mjs.map +1 -1
  288. package/dist/domain/append-all.cjs +10 -0
  289. package/dist/domain/append-all.cjs.map +1 -0
  290. package/dist/domain/append-all.mjs +8 -0
  291. package/dist/domain/append-all.mjs.map +1 -0
  292. package/dist/domain/cause-secrets.cjs +37 -0
  293. package/dist/domain/cause-secrets.cjs.map +1 -0
  294. package/dist/domain/cause-secrets.mjs +35 -0
  295. package/dist/domain/cause-secrets.mjs.map +1 -0
  296. package/dist/domain/errors.cjs +9 -3
  297. package/dist/domain/errors.cjs.map +1 -1
  298. package/dist/domain/errors.mjs +9 -3
  299. package/dist/domain/errors.mjs.map +1 -1
  300. package/dist/domain/ir/identifier-text.cjs.map +1 -1
  301. package/dist/domain/ir/identifier-text.mjs +1 -1
  302. package/dist/domain/ir/identifier-text.mjs.map +1 -1
  303. package/dist/domain/ir/ir-shape.cjs +187 -0
  304. package/dist/domain/ir/ir-shape.cjs.map +1 -0
  305. package/dist/domain/ir/ir-shape.mjs +184 -0
  306. package/dist/domain/ir/ir-shape.mjs.map +1 -0
  307. package/dist/domain/ir/newer-identifier-ranges.cjs +182 -29
  308. package/dist/domain/ir/newer-identifier-ranges.cjs.map +1 -1
  309. package/dist/domain/ir/newer-identifier-ranges.mjs +182 -29
  310. package/dist/domain/ir/newer-identifier-ranges.mjs.map +1 -1
  311. package/dist/domain/openapi/alias-expansion.cjs +3 -1
  312. package/dist/domain/openapi/alias-expansion.cjs.map +1 -1
  313. package/dist/domain/openapi/alias-expansion.mjs +3 -1
  314. package/dist/domain/openapi/alias-expansion.mjs.map +1 -1
  315. package/dist/domain/openapi/discriminated-union.cjs +3 -3
  316. package/dist/domain/openapi/discriminated-union.cjs.map +1 -1
  317. package/dist/domain/openapi/discriminated-union.mjs +4 -4
  318. package/dist/domain/openapi/discriminated-union.mjs.map +1 -1
  319. package/dist/domain/openapi/discriminator-conflicts.cjs +10 -6
  320. package/dist/domain/openapi/discriminator-conflicts.cjs.map +1 -1
  321. package/dist/domain/openapi/discriminator-conflicts.mjs +11 -7
  322. package/dist/domain/openapi/discriminator-conflicts.mjs.map +1 -1
  323. package/dist/domain/openapi/json-pointer.cjs +43 -1
  324. package/dist/domain/openapi/json-pointer.cjs.map +1 -1
  325. package/dist/domain/openapi/json-pointer.mjs +40 -2
  326. package/dist/domain/openapi/json-pointer.mjs.map +1 -1
  327. package/dist/domain/openapi/schema-dialect.cjs +15 -0
  328. package/dist/domain/openapi/schema-dialect.cjs.map +1 -0
  329. package/dist/domain/openapi/schema-dialect.mjs +12 -0
  330. package/dist/domain/openapi/schema-dialect.mjs.map +1 -0
  331. package/dist/domain/openapi/unsupported-features.cjs +1 -1
  332. package/dist/domain/openapi/unsupported-features.cjs.map +1 -1
  333. package/dist/domain/openapi/unsupported-features.mjs +2 -2
  334. package/dist/domain/openapi/unsupported-features.mjs.map +1 -1
  335. package/dist/domain/output-fixes.cjs +14 -0
  336. package/dist/domain/output-fixes.cjs.map +1 -1
  337. package/dist/domain/output-fixes.mjs +14 -0
  338. package/dist/domain/output-fixes.mjs.map +1 -1
  339. package/dist/domain/url-secrets.cjs +48 -0
  340. package/dist/domain/url-secrets.cjs.map +1 -0
  341. package/dist/domain/url-secrets.mjs +45 -0
  342. package/dist/domain/url-secrets.mjs.map +1 -0
  343. package/dist/index.d.cts +22 -4
  344. package/dist/index.d.mts +22 -4
  345. package/dist/index.d.ts +22 -4
  346. package/package.json +4 -5
  347. package/src/adapters/node-file-system/file-claims.ts +138 -0
  348. package/src/adapters/node-file-system/file-identity.ts +137 -0
  349. package/src/adapters/node-file-system/node-file-system.ts +145 -18
  350. package/src/adapters/redocly-loader/bundled-mapping-copies.ts +95 -0
  351. package/src/adapters/redocly-loader/bundled-ref-repair.ts +2 -2
  352. package/src/adapters/redocly-loader/loaded-documents.ts +46 -0
  353. package/src/adapters/redocly-loader/redocly-schema-loader.ts +18 -24
  354. package/src/adapters/redocly-loader/ref-access.ts +37 -3
  355. package/src/adapters/redocly-loader/ref-holders.ts +3 -3
  356. package/src/adapters/redocly-loader/remote-body-limit.ts +66 -0
  357. package/src/adapters/redocly-loader/remote-fetch.ts +74 -11
  358. package/src/adapters/redocly-loader/remote-node-limit.ts +62 -0
  359. package/src/adapters/redocly-loader/schema-load-errors.ts +52 -13
  360. package/src/adapters/redocly-loader/schema-source.ts +20 -8
  361. package/src/adapters/redocly-loader/unsupported-keys.ts +3 -7
  362. package/src/adapters/terminal-logger/terminal-logger.ts +10 -5
  363. package/src/api/default-ports.ts +33 -4
  364. package/src/api/discriminator-enum-parent.ts +3 -3
  365. package/src/api/discriminator-other-owners.ts +5 -3
  366. package/src/api/discriminator-patch.ts +5 -1
  367. package/src/api/discriminator-scan.ts +16 -8
  368. package/src/api/document-run.ts +4 -3
  369. package/src/api/legacy-utils.ts +5 -1
  370. package/src/api/openapi-ts.ts +20 -5
  371. package/src/api/run-context.ts +3 -0
  372. package/src/api/schema-callbacks.ts +60 -17
  373. package/src/api/transform-context.ts +7 -3
  374. package/src/api/transform-schema.ts +64 -12
  375. package/src/application/ports/file-system.ts +39 -0
  376. package/src/application/ports/schema-loader.ts +11 -1
  377. package/src/application/print/text-writer.ts +10 -3
  378. package/src/application/stack-overflow.ts +9 -5
  379. package/src/application/transform/document/components.ts +2 -2
  380. package/src/application/transform/document/declared-type-names.ts +36 -0
  381. package/src/application/transform/document/defs-root.ts +2 -2
  382. package/src/application/transform/document/document.ts +4 -3
  383. package/src/application/transform/document/enum-names-given-back.ts +91 -0
  384. package/src/application/transform/document/global-type-references.ts +1 -1
  385. package/src/application/transform/document/media-type.ts +4 -3
  386. package/src/application/transform/document/operation-keys-written.ts +27 -0
  387. package/src/application/transform/document/operation.ts +2 -2
  388. package/src/application/transform/document/parameter-entries.ts +70 -0
  389. package/src/application/transform/document/parameter.ts +21 -9
  390. package/src/application/transform/document/parameters.ts +11 -56
  391. package/src/application/transform/document/path-item.ts +13 -31
  392. package/src/application/transform/document/paths-enum.ts +1 -1
  393. package/src/application/transform/document/paths.ts +6 -2
  394. package/src/application/transform/document/referenced-parameter.ts +146 -0
  395. package/src/application/transform/document/request-body.ts +2 -2
  396. package/src/application/transform/document/response.ts +3 -3
  397. package/src/application/transform/document/responses.ts +2 -2
  398. package/src/application/transform/document/root-type-aliases.ts +17 -38
  399. package/src/application/transform/document/type-resolution.ts +2 -1
  400. package/src/application/transform/document/webhooks.ts +2 -2
  401. package/src/application/transform/footer/document-footer.ts +18 -1
  402. package/src/application/transform/footer/enum-name-claims.ts +62 -0
  403. package/src/application/transform/footer/operation-keys.ts +28 -0
  404. package/src/application/transform/footer/type-evaluation.ts +4 -4
  405. package/src/application/transform/helper-types.ts +6 -5
  406. package/src/application/transform/numbered-names.ts +15 -0
  407. package/src/application/transform/ref-pointer/generated-location.ts +2 -2
  408. package/src/application/transform/ref-type.ts +2 -1
  409. package/src/application/transform/schema/composition-type.ts +2 -2
  410. package/src/application/transform/schema/enum-rule.ts +6 -2
  411. package/src/application/transform/schema/object-type.ts +4 -4
  412. package/src/application/transform/schema/ref-siblings.ts +76 -0
  413. package/src/application/transform/schema/schema-context.ts +3 -0
  414. package/src/application/transform/schema/schema-transform.ts +4 -2
  415. package/src/application/transform/schema-comment.ts +5 -1
  416. package/src/application/transform/transform-context.ts +5 -0
  417. package/src/cli/api-settings.ts +82 -7
  418. package/src/cli/api-writes.ts +117 -0
  419. package/src/cli/cli-dependencies.ts +21 -4
  420. package/src/cli/cli-errors.ts +20 -1
  421. package/src/cli/cli-output.ts +186 -7
  422. package/src/cli/main.ts +6 -3
  423. package/src/cli/redocly-apis.ts +153 -48
  424. package/src/cli/run-cli.ts +37 -8
  425. package/src/domain/append-all.ts +10 -0
  426. package/src/domain/cause-secrets.ts +52 -0
  427. package/src/domain/errors.ts +14 -5
  428. package/src/domain/ir/identifier-text.ts +6 -5
  429. package/src/domain/ir/ir-shape.ts +299 -0
  430. package/src/domain/ir/newer-identifier-ranges.ts +183 -30
  431. package/src/domain/openapi/alias-expansion.ts +4 -1
  432. package/src/domain/openapi/discriminated-union.ts +6 -4
  433. package/src/domain/openapi/discriminator-conflicts.ts +21 -7
  434. package/src/domain/openapi/document-object.ts +2 -0
  435. package/src/domain/openapi/json-pointer.ts +96 -7
  436. package/src/domain/openapi/schema-dialect.ts +22 -0
  437. package/src/domain/openapi/unsupported-features.ts +2 -2
  438. package/src/domain/output-fixes.ts +21 -2
  439. package/src/domain/url-secrets.ts +72 -0
  440. package/src/types/generator-options.ts +1 -1
  441. package/dist/cli/main.d.cts +0 -2
  442. package/dist/cli/main.d.mts +0 -2
  443. package/dist/cli/main.d.ts +0 -2
  444. package/dist/domain/url-credentials.cjs +0 -10
  445. package/dist/domain/url-credentials.cjs.map +0 -1
  446. package/dist/domain/url-credentials.mjs +0 -8
  447. package/dist/domain/url-credentials.mjs.map +0 -1
  448. package/src/domain/url-credentials.ts +0 -18
@@ -1,6 +1,13 @@
1
+ import { appendAll } from "../append-all.js";
1
2
  import { admittedPropertyValues, resolveLocalRef } from "./admitted-values.js";
2
3
  import { isUnionMember, unionAt } from "./discriminated-union.js";
3
- import { createRef, escapePointerSegment, parseRefPointer } from "./json-pointer.js";
4
+ import {
5
+ appendPointer,
6
+ canonicalRef,
7
+ escapePointerSegment,
8
+ parseRefPointer,
9
+ ROOT_POINTER,
10
+ } from "./json-pointer.js";
4
11
 
5
12
  /**
6
13
  * Discriminator members whose discriminator value their own property does not allow. By the
@@ -45,8 +52,11 @@ function refsOf(list: unknown): string[] {
45
52
  );
46
53
  }
47
54
 
55
+ /** A mapping value as a canonical `$ref`: Redocly writes it percent-decoded (`canonicalRef`). */
48
56
  function mappingTarget(target: string): string {
49
- return target.startsWith("#") ? target : `${COMPONENT_SCHEMAS}${escapePointerSegment(target)}`;
57
+ return target.startsWith("#")
58
+ ? canonicalRef(target)
59
+ : `${COMPONENT_SCHEMAS}${escapePointerSegment(target)}`;
50
60
  }
51
61
 
52
62
  function ownerAt(node: JsonObject, pointer: () => string): Owner | null {
@@ -76,7 +86,7 @@ function pointerOf(visit: Visit): string {
76
86
  for (let current: Visit | null = visit; current?.key != null; current = current.parent) {
77
87
  segments.unshift(current.key);
78
88
  }
79
- return createRef(segments);
89
+ return appendPointer(ROOT_POINTER, segments);
80
90
  }
81
91
 
82
92
  function childrenOf(visit: Visit): Visit[] {
@@ -101,7 +111,7 @@ function ownersIn(document: unknown): Owner[] {
101
111
  if (owner !== null) {
102
112
  found.push(owner);
103
113
  }
104
- stack.push(...childrenOf(visit).reverse());
114
+ appendAll(stack, childrenOf(visit).reverse());
105
115
  }
106
116
  return found;
107
117
  }
@@ -200,8 +210,10 @@ function membersOf(owner: Owner, search: ConflictSearch): Member[] {
200
210
  const listed = owner.memberRefs.map((ref) => ({ ref, skipped: new Set([owner.pointer]) }));
201
211
  const members = new Map<string, Member>();
202
212
  for (const member of [...listed, ...inheritingMembers(owner, search)]) {
203
- if (!members.has(member.ref)) {
204
- members.set(member.ref, member);
213
+ // A member may be listed by a `$ref` and found by its pointer: both name it canonically.
214
+ const key = canonicalRef(member.ref);
215
+ if (!members.has(key)) {
216
+ members.set(key, member);
205
217
  }
206
218
  }
207
219
  return [...members.values()];
@@ -209,7 +221,9 @@ function membersOf(owner: Owner, search: ConflictSearch): Member[] {
209
221
 
210
222
  function memberValues(owner: Owner, member: string): { values: string[]; isImplicit: boolean } {
211
223
  const values = Object.entries(owner.mapping)
212
- .filter(([, target]) => typeof target === "string" && mappingTarget(target) === member)
224
+ .filter(
225
+ ([, target]) => typeof target === "string" && mappingTarget(target) === canonicalRef(member),
226
+ )
213
227
  .map(([key]) => key);
214
228
  const name = parseRefPointer(member).pop() ?? "";
215
229
  return values.length > 0 ? { values, isImplicit: false } : { values: [name], isImplicit: true };
@@ -4,6 +4,8 @@ import type { Schema } from "./schema-object.js";
4
4
 
5
5
  /** The parts of an OpenAPI document that get a root type (OpenAPI 3.1 §4.8.1). */
6
6
  export interface DocumentObject {
7
+ /** The OpenAPI version: `3.0.x`, `3.1.x` or `3.2.x`. */
8
+ readonly openapi?: string;
7
9
  readonly paths?: PathsObject;
8
10
  readonly webhooks?: PathsObject;
9
11
  readonly components?: ComponentsObject;
@@ -18,19 +18,108 @@ function unescapePointerSegment(segment: string): string {
18
18
  }
19
19
 
20
20
  /**
21
- * Escape one segment for a JSON Pointer in a `$ref` fragment: `~` → `~0`, `/` → `~1`, and `%` →
22
- * `%25`, because reading a pointer back percent-decodes it. The original did not escape `%`, so a
23
- * name like `50%` threw URIError and `a%2Fb` read back as `a/b` (upstream #2251, #2828).
21
+ * Escape one segment for a JSON Pointer in a `$ref` fragment: `~` → `~0` and `/` → `~1` (RFC 6901),
22
+ * then `%` → `%25` and `#` → `%23`, the two characters of a key that a URI fragment cannot hold as
23
+ * written (RFC 6901 §6, RFC 3986). Reading a pointer back percent-decodes it, so the original's
24
+ * unescaped `%` threw URIError for `50%` and read `a%2Fb` as `a/b` (upstream #2251, #2828), and
25
+ * reading starts at the first `#/`, so an unescaped key `a#` cut the pointer short.
24
26
  */
25
27
  export function escapePointerSegment(segment: string): string {
26
- return segment.replaceAll("~", "~0").replaceAll("/", "~1").replaceAll("%", "%25");
28
+ return segment
29
+ .replaceAll("~", "~0")
30
+ .replaceAll("/", "~1")
31
+ .replaceAll("%", "%25")
32
+ .replaceAll("#", "%23");
33
+ }
34
+
35
+ /** The pointer of the document root. */
36
+ export const ROOT_POINTER = "#";
37
+
38
+ /** A raw pointer segment; a missing one (`undefined`, `null` or empty) is skipped. */
39
+ export type PointerSegment = string | number | null | undefined;
40
+
41
+ /**
42
+ * Extend the pointer `base` with raw segments: document keys, such as a path, a property name or a
43
+ * media type, and array indexes. Each segment is escaped and never read as a `$ref`, so a key like
44
+ * `#/%41` stays one segment and reads back unchanged with {@link parseRefPointer}. A missing
45
+ * segment, such as the absent `name` of a parameter, is skipped, as the original `createRef` did,
46
+ * and an empty one too, because `parseRefPointer` drops it.
47
+ */
48
+ export function appendPointer(
49
+ base: string | undefined,
50
+ segments: readonly PointerSegment[],
51
+ ): string {
52
+ let pointer = pointerBase(base);
53
+ for (const segment of segments) {
54
+ if (segment !== undefined && segment !== null && segment !== "") {
55
+ pointer = childPointer(pointer, String(segment));
56
+ }
57
+ }
58
+ return pointer;
59
+ }
60
+
61
+ /**
62
+ * The pointer of the child `key` of the node at `pointer`, with `key` escaped. Unlike
63
+ * {@link appendPointer}, an empty key is a child too: a document walk names every key it visits.
64
+ */
65
+ export function childPointer(pointer: string, key: string): string {
66
+ return `${pointer}/${escapePointerSegment(key)}`;
67
+ }
68
+
69
+ /**
70
+ * A local `$ref` or `mapping` value in the form {@link appendPointer} builds, so that pointers
71
+ * compare as text whatever escapes the document chose: `.../a#b` and `.../a%23b` are both
72
+ * `.../a%23b`. Redocly writes a bundled `mapping` value percent-decoded, which is no pointer for a
73
+ * key with `%` (`.../50%`), so such a text is read as written. Any other text, such as an
74
+ * external `$ref` or a bare schema name, is returned unchanged.
75
+ */
76
+ export function canonicalRef(ref: string): string {
77
+ if (!ref.startsWith(`${ROOT_POINTER}/`)) {
78
+ return ref;
79
+ }
80
+ return appendPointer(ROOT_POINTER, refSegments(ref));
81
+ }
82
+
83
+ function refSegments(ref: string): string[] {
84
+ try {
85
+ return parseRefPointer(ref);
86
+ } catch (error) {
87
+ if (!(error instanceof URIError)) {
88
+ throw error;
89
+ }
90
+ return writtenSegments(ref);
91
+ }
92
+ }
93
+
94
+ /** The segments of a pointer that is not percent-encoded: only `~1` and `~0` are escapes. */
95
+ function writtenSegments(ref: string): string[] {
96
+ return ref
97
+ .slice(ROOT_POINTER.length + 1)
98
+ .split("/")
99
+ .filter((segment) => segment.length > 0)
100
+ .map((segment) => segment.replaceAll("~1", "/").replaceAll("~0", "~"));
101
+ }
102
+
103
+ /**
104
+ * A pointer (`#` or `#/...`) is kept as written; a missing base is the root. Any other text is a
105
+ * `path` given to the exported transformers, such as `/items/{id}` or `other.yaml#/a`, which the
106
+ * original read as a `createRef` part, so it is read the same way here.
107
+ */
108
+ function pointerBase(base: string | undefined): string {
109
+ if (base === undefined || base === "") {
110
+ return ROOT_POINTER;
111
+ }
112
+ return base === ROOT_POINTER || base.startsWith(`${ROOT_POINTER}/`) ? base : createRef([base]);
27
113
  }
28
114
 
29
115
  /**
30
- * Join parts into a local `$ref` (the original `createRef`). Empty parts are skipped. A part that
31
- * is itself a `$ref` contributes its segments; any other part is one segment.
116
+ * Join parts into a local `$ref` (the original `createRef`, exported for 1.x by ADR-034). Empty
117
+ * parts are skipped. A part that contains `#/` is parsed as a `$ref` and contributes its decoded
118
+ * segments, so it throws URIError for a malformed percent escape; any other part is one segment.
119
+ * Because of that parsing, the generator does not pass document keys here: it builds pointers
120
+ * with {@link appendPointer}, which never parses a segment.
32
121
  */
33
- export function createRef(parts: readonly (string | number | null | undefined)[]): string {
122
+ export function createRef(parts: readonly PointerSegment[]): string {
34
123
  let ref = "#";
35
124
  for (const part of parts) {
36
125
  if (part === undefined || part === null || part === "") {
@@ -0,0 +1,22 @@
1
+ /**
2
+ * The schema dialect of a document. OpenAPI 3.0 Schema Objects ignore every keyword next to a
3
+ * `$ref` (OpenAPI 3.0.3, Reference Object). OpenAPI 3.1 and 3.2 use JSON Schema 2020-12, where a
4
+ * `$ref` is one keyword among the others, and all of them apply (JSON Schema Core §8.2.3.1).
5
+ */
6
+ export const SCHEMA_DIALECTS = {
7
+ OPENAPI_3_0: "openapi-3.0",
8
+ JSON_SCHEMA_2020_12: "json-schema-2020-12",
9
+ } as const;
10
+
11
+ export type SchemaDialect = (typeof SCHEMA_DIALECTS)[keyof typeof SCHEMA_DIALECTS];
12
+
13
+ const OPENAPI_3_0_RE = /^3\.0(?:\.|$)/;
14
+
15
+ /**
16
+ * The dialect of a document's `openapi` version. Without a version (a schema passed to a
17
+ * transformer on its own) it is OpenAPI 3.0, which keeps the output the original gives.
18
+ */
19
+ export function schemaDialectOf(openapiVersion: unknown): SchemaDialect {
20
+ const isOpenApi30 = typeof openapiVersion !== "string" || OPENAPI_3_0_RE.test(openapiVersion);
21
+ return isOpenApi30 ? SCHEMA_DIALECTS.OPENAPI_3_0 : SCHEMA_DIALECTS.JSON_SCHEMA_2020_12;
22
+ }
@@ -1,4 +1,4 @@
1
- import { createRef, parseRefPointer } from "./json-pointer.js";
1
+ import { appendPointer, parseRefPointer, ROOT_POINTER } from "./json-pointer.js";
2
2
  import { QUERYSTRING_LOCATION } from "./parameter-object.js";
3
3
  import { type PathItemObject, pathItemOperations } from "./path-item-object.js";
4
4
 
@@ -60,7 +60,7 @@ function locatedParameters(
60
60
  }
61
61
  return parameters.flatMap((entry, index) => {
62
62
  const parameter = resolveLocal(document, entry);
63
- const pointer = createRef([...segments, String(index)]);
63
+ const pointer = appendPointer(ROOT_POINTER, [...segments, index]);
64
64
  return isObject(parameter) ? [{ pointer, parameter }] : [];
65
65
  });
66
66
  }
@@ -33,6 +33,8 @@ export const FIX = {
33
33
  EXPLODED_QUERY_OBJECTS: "exploded-query-objects",
34
34
  /** `--enum` declares an enum that lists `null` without it, and the type adds `| null`. */
35
35
  NULLABLE_ENUMS: "nullable-enums",
36
+ /** A parameter with `content` instead of `schema` is typed by the schema of its media type. */
37
+ PARAMETER_CONTENT: "parameter-content",
36
38
  /** `--path-params-as-types` gives each `{name}` its placeholder, `{number}` included. */
37
39
  PATH_PARAM_TYPE_NAMES: "path-param-type-names",
38
40
  /** A `prefixItems` tuple is open unless `items` or `unevaluatedItems` closes it (2020-12). */
@@ -44,6 +46,11 @@ export const FIX = {
44
46
  * points at, also where the original type compiles through an index signature.
45
47
  */
46
48
  REF_POINTERS: "ref-pointers",
49
+ /**
50
+ * OpenAPI 3.1 and 3.2: keywords next to a `$ref` (`required`, `properties`) apply too, so the
51
+ * type is the reference intersected with them. OpenAPI 3.0 ignores them, as its spec says.
52
+ */
53
+ REF_SIBLINGS: "ref-siblings",
47
54
  /** Schemas of one root type name without the prefix each get an alias, the earlier numbered. */
48
55
  ROOT_TYPE_NUMBERING: "root-type-numbering",
49
56
  /** `unevaluatedProperties` types the keys no other keyword declares (an index signature). */
@@ -67,8 +74,20 @@ function isOutputFixName(value: unknown): value is OutputFixName {
67
74
  return typeof value === "string" && KNOWN_NAMES.has(value);
68
75
  }
69
76
 
70
- /** The fix names as given; fails with `OPTION_FIX_UNKNOWN` for any other value. */
71
- export function outputFixNamesOf(values: readonly unknown[]): readonly OutputFixName[] {
77
+ /**
78
+ * The fix names as given; fails with `OPTION_FIX_UNKNOWN` for any other value, and for a `fix`
79
+ * option that is no list (`fix: "all"` from JavaScript), which must not be read letter by letter.
80
+ */
81
+ export function outputFixNamesOf(values: unknown): readonly OutputFixName[] {
82
+ if (!Array.isArray(values)) {
83
+ throw new OpenAPITypesafeError({
84
+ code: ERROR_CODES.OPTION_FIX_UNKNOWN,
85
+ message:
86
+ 'The fix option must be a list of fix names, such as ["all"]. ' +
87
+ `Got ${JSON.stringify(values)}.`,
88
+ details: { unknown: [values], known: [...KNOWN_NAMES] },
89
+ });
90
+ }
72
91
  const unknown = values.filter((value) => !isOutputFixName(value));
73
92
  if (unknown.length > 0) {
74
93
  const names = unknown.map((value) => JSON.stringify(value)).join(", ");
@@ -0,0 +1,72 @@
1
+ /**
2
+ * URLs can reach a message: the CLI input, a `$ref`, a redirect. Messages end up in CI job logs, so
3
+ * the parts of a URL that carry secrets are hidden in every one (audit B2, F12): the user info
4
+ * (`https://user:token@host/…`), which fetch refuses anyway, and the query, which holds API keys
5
+ * and signatures (`?api_key=…`, `?X-Amz-Signature=…`). Which query parameters are secret cannot be
6
+ * told by their names, so the whole query is hidden; the path and the fragment (a JSON pointer)
7
+ * stay, so the message still names the document and the place in it.
8
+ */
9
+
10
+ /**
11
+ * A URL in a message, from its `://` to the first space, quote or angle bracket: a serialized URL
12
+ * percent-encodes these, and messages put them around a URL. A match takes the rest of the URL,
13
+ * also a later `://` in it, so the scan never starts again inside a URL; it stays linear. It ends
14
+ * before punctuation that closes a sentence or a parenthesis (`… x.yaml?key=1: 404`, `(… ?key=1)`),
15
+ * which the message puts after the URL; a hidden query would hide it too.
16
+ */
17
+ const URL_AFTER_SCHEME = /:\/\/[^\s"'<>]*[^\s"'<>.,:;!?)]/g;
18
+
19
+ const SCHEME_SEPARATOR = "://";
20
+ const AUTHORITY_END = /[/?#]/;
21
+ const QUERY_OR_FRAGMENT = /[?#]/;
22
+ const QUERY_START = "?";
23
+ const FRAGMENT_START = "#";
24
+ const USER_INFO_END = "@";
25
+ const HIDDEN = "***";
26
+
27
+ /** The part after `://` with the user info of its authority hidden: `***@host`. */
28
+ function withoutUserInfo(rest: string): string {
29
+ const authorityEnd = rest.search(AUTHORITY_END);
30
+ const authority = authorityEnd === -1 ? rest : rest.slice(0, authorityEnd);
31
+ const userInfoEnd = authority.lastIndexOf(USER_INFO_END);
32
+ return userInfoEnd === -1 ? rest : `${HIDDEN}${rest.slice(userInfoEnd)}`;
33
+ }
34
+
35
+ /** The part after `://` with its query hidden: `/x.yaml?***#/a`. */
36
+ function withoutQuery(rest: string): string {
37
+ const fragmentStart = rest.indexOf(FRAGMENT_START);
38
+ const beforeFragment = fragmentStart === -1 ? rest : rest.slice(0, fragmentStart);
39
+ const queryStart = beforeFragment.indexOf(QUERY_START);
40
+ if (queryStart === -1) {
41
+ return rest;
42
+ }
43
+ const fragment = fragmentStart === -1 ? "" : rest.slice(fragmentStart);
44
+ return `${rest.slice(0, queryStart + 1)}${HIDDEN}${fragment}`;
45
+ }
46
+
47
+ /** The text with the user info and the query of every URL in it replaced by `***`. */
48
+ export function redactUrlSecrets(text: string): string {
49
+ return text.replace(URL_AFTER_SCHEME, (url) => {
50
+ const rest = url.slice(SCHEME_SEPARATOR.length);
51
+ return `${SCHEME_SEPARATOR}${withoutQuery(withoutUserInfo(rest))}`;
52
+ });
53
+ }
54
+
55
+ /**
56
+ * Text that starts like a URL but does not parse as one (`http://user:a/b@host/x`), with what may
57
+ * be secret hidden. Without a parse there is no telling where the authority ends, so everything
58
+ * from the `://` to the last `@` before the query counts as user info; the query is hidden as in
59
+ * `redactUrlSecrets`.
60
+ */
61
+ export function redactUnparsedUrl(text: string): string {
62
+ const separator = text.indexOf(SCHEME_SEPARATOR);
63
+ if (separator === -1) {
64
+ return text;
65
+ }
66
+ const rest = text.slice(separator + SCHEME_SEPARATOR.length);
67
+ const queryOrFragment = rest.search(QUERY_OR_FRAGMENT);
68
+ const beforeQuery = queryOrFragment === -1 ? rest : rest.slice(0, queryOrFragment);
69
+ const userInfoEnd = beforeQuery.lastIndexOf(USER_INFO_END);
70
+ const shown = userInfoEnd === -1 ? rest : `${HIDDEN}${rest.slice(userInfoEnd)}`;
71
+ return `${text.slice(0, separator)}${SCHEME_SEPARATOR}${withoutQuery(shown)}`;
72
+ }
@@ -70,7 +70,7 @@ export interface OpenAPITSBaseOptions {
70
70
  * still fail the run.
71
71
  */
72
72
  lint?: boolean;
73
- /** (optional) Should logging be suppressed? (necessary for STDOUT) */
73
+ /** Hide warnings (default: false). Every line of the logger goes to stderr, never to stdout. */
74
74
  silent?: boolean;
75
75
  /** Accepted for compatibility with openapi-typescript; not read. */
76
76
  version?: number;
@@ -1,2 +0,0 @@
1
-
2
- export { };
@@ -1,2 +0,0 @@
1
-
2
- export { };
@@ -1,2 +0,0 @@
1
-
2
- export { };
@@ -1,10 +0,0 @@
1
- 'use strict';
2
-
3
- const URL_USER_INFO = /:\/\/[^\s/?#@]*@/g;
4
- const REDACTED_USER_INFO = "://***@";
5
- function redactUrlCredentials(text) {
6
- return text.replace(URL_USER_INFO, () => REDACTED_USER_INFO);
7
- }
8
-
9
- exports.redactUrlCredentials = redactUrlCredentials;
10
- //# sourceMappingURL=url-credentials.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"url-credentials.cjs","sources":["../../src/domain/url-credentials.ts"],"sourcesContent":["/**\n * URLs with user info (`https://user:token@host/…`) can reach a message: the CLI input, a `$ref`,\n * a redirect. Messages end up in CI job logs, so the user info is hidden in every one (audit B2,\n * F12). Fetch refuses such URLs anyway, so a message never needs the credentials.\n */\n\n/**\n * The user info after a scheme: everything up to an `@` that comes before the end of the\n * authority. The class stops at `/`, so a scan never runs past the next `://`; it stays linear.\n */\nconst URL_USER_INFO = /:\\/\\/[^\\s/?#@]*@/g;\n\nconst REDACTED_USER_INFO = \"://***@\";\n\n/** The text with the user info of every URL in it replaced by `***`. */\nexport function redactUrlCredentials(text: string): string {\n return text.replace(URL_USER_INFO, () => REDACTED_USER_INFO);\n}\n"],"names":[],"mappings":";;AAUA,MAAM,aAAA,GAAgB,mBAAA;AAEtB,MAAM,kBAAA,GAAqB,SAAA;AAGpB,SAAS,qBAAqB,IAAA,EAAsB;AACzD,EAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,aAAA,EAAe,MAAM,kBAAkB,CAAA;AAC7D;;"}
@@ -1,8 +0,0 @@
1
- const URL_USER_INFO = /:\/\/[^\s/?#@]*@/g;
2
- const REDACTED_USER_INFO = "://***@";
3
- function redactUrlCredentials(text) {
4
- return text.replace(URL_USER_INFO, () => REDACTED_USER_INFO);
5
- }
6
-
7
- export { redactUrlCredentials };
8
- //# sourceMappingURL=url-credentials.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"url-credentials.mjs","sources":["../../src/domain/url-credentials.ts"],"sourcesContent":["/**\n * URLs with user info (`https://user:token@host/…`) can reach a message: the CLI input, a `$ref`,\n * a redirect. Messages end up in CI job logs, so the user info is hidden in every one (audit B2,\n * F12). Fetch refuses such URLs anyway, so a message never needs the credentials.\n */\n\n/**\n * The user info after a scheme: everything up to an `@` that comes before the end of the\n * authority. The class stops at `/`, so a scan never runs past the next `://`; it stays linear.\n */\nconst URL_USER_INFO = /:\\/\\/[^\\s/?#@]*@/g;\n\nconst REDACTED_USER_INFO = \"://***@\";\n\n/** The text with the user info of every URL in it replaced by `***`. */\nexport function redactUrlCredentials(text: string): string {\n return text.replace(URL_USER_INFO, () => REDACTED_USER_INFO);\n}\n"],"names":[],"mappings":"AAUA,MAAM,aAAA,GAAgB,mBAAA;AAEtB,MAAM,kBAAA,GAAqB,SAAA;AAGpB,SAAS,qBAAqB,IAAA,EAAsB;AACzD,EAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,aAAA,EAAe,MAAM,kBAAkB,CAAA;AAC7D;;"}
@@ -1,18 +0,0 @@
1
- /**
2
- * URLs with user info (`https://user:token@host/…`) can reach a message: the CLI input, a `$ref`,
3
- * a redirect. Messages end up in CI job logs, so the user info is hidden in every one (audit B2,
4
- * F12). Fetch refuses such URLs anyway, so a message never needs the credentials.
5
- */
6
-
7
- /**
8
- * The user info after a scheme: everything up to an `@` that comes before the end of the
9
- * authority. The class stops at `/`, so a scan never runs past the next `://`; it stays linear.
10
- */
11
- const URL_USER_INFO = /:\/\/[^\s/?#@]*@/g;
12
-
13
- const REDACTED_USER_INFO = "://***@";
14
-
15
- /** The text with the user info of every URL in it replaced by `***`. */
16
- export function redactUrlCredentials(text: string): string {
17
- return text.replace(URL_USER_INFO, () => REDACTED_USER_INFO);
18
- }