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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (596) hide show
  1. package/CHANGELOG.md +1972 -0
  2. package/dist/adapters/node-file-system/file-claims.cjs +105 -0
  3. package/dist/adapters/node-file-system/file-claims.cjs.map +1 -0
  4. package/dist/adapters/node-file-system/file-claims.mjs +95 -0
  5. package/dist/adapters/node-file-system/file-claims.mjs.map +1 -0
  6. package/dist/adapters/node-file-system/file-identity.cjs +82 -0
  7. package/dist/adapters/node-file-system/file-identity.cjs.map +1 -0
  8. package/dist/adapters/node-file-system/file-identity.mjs +74 -0
  9. package/dist/adapters/node-file-system/file-identity.mjs.map +1 -0
  10. package/dist/adapters/node-file-system/node-file-system.cjs +97 -14
  11. package/dist/adapters/node-file-system/node-file-system.cjs.map +1 -1
  12. package/dist/adapters/node-file-system/node-file-system.mjs +97 -14
  13. package/dist/adapters/node-file-system/node-file-system.mjs.map +1 -1
  14. package/dist/adapters/pipe-safe-writer/pipe-safe-writer.cjs +19 -0
  15. package/dist/adapters/pipe-safe-writer/pipe-safe-writer.cjs.map +1 -0
  16. package/dist/adapters/pipe-safe-writer/pipe-safe-writer.mjs +17 -0
  17. package/dist/adapters/pipe-safe-writer/pipe-safe-writer.mjs.map +1 -0
  18. package/dist/adapters/redocly-loader/bundled-mapping-copies.cjs +48 -0
  19. package/dist/adapters/redocly-loader/bundled-mapping-copies.cjs.map +1 -0
  20. package/dist/adapters/redocly-loader/bundled-mapping-copies.mjs +45 -0
  21. package/dist/adapters/redocly-loader/bundled-mapping-copies.mjs.map +1 -0
  22. package/dist/adapters/redocly-loader/bundled-ref-repair.cjs +1 -1
  23. package/dist/adapters/redocly-loader/bundled-ref-repair.cjs.map +1 -1
  24. package/dist/adapters/redocly-loader/bundled-ref-repair.mjs +2 -2
  25. package/dist/adapters/redocly-loader/bundled-ref-repair.mjs.map +1 -1
  26. package/dist/adapters/redocly-loader/component-schemas.cjs +17 -0
  27. package/dist/adapters/redocly-loader/component-schemas.cjs.map +1 -0
  28. package/dist/adapters/redocly-loader/component-schemas.mjs +14 -0
  29. package/dist/adapters/redocly-loader/component-schemas.mjs.map +1 -0
  30. package/dist/adapters/redocly-loader/loaded-documents.cjs +28 -0
  31. package/dist/adapters/redocly-loader/loaded-documents.cjs.map +1 -0
  32. package/dist/adapters/redocly-loader/loaded-documents.mjs +21 -0
  33. package/dist/adapters/redocly-loader/loaded-documents.mjs.map +1 -0
  34. package/dist/adapters/redocly-loader/mapping-schema-names.cjs +22 -0
  35. package/dist/adapters/redocly-loader/mapping-schema-names.cjs.map +1 -0
  36. package/dist/adapters/redocly-loader/mapping-schema-names.mjs +20 -0
  37. package/dist/adapters/redocly-loader/mapping-schema-names.mjs.map +1 -0
  38. package/dist/adapters/redocly-loader/query-named-components.cjs +137 -0
  39. package/dist/adapters/redocly-loader/query-named-components.cjs.map +1 -0
  40. package/dist/adapters/redocly-loader/query-named-components.mjs +134 -0
  41. package/dist/adapters/redocly-loader/query-named-components.mjs.map +1 -0
  42. package/dist/adapters/redocly-loader/redocly-schema-loader.cjs +40 -29
  43. package/dist/adapters/redocly-loader/redocly-schema-loader.cjs.map +1 -1
  44. package/dist/adapters/redocly-loader/redocly-schema-loader.mjs +38 -27
  45. package/dist/adapters/redocly-loader/redocly-schema-loader.mjs.map +1 -1
  46. package/dist/adapters/redocly-loader/ref-access.cjs +45 -4
  47. package/dist/adapters/redocly-loader/ref-access.cjs.map +1 -1
  48. package/dist/adapters/redocly-loader/ref-access.mjs +45 -4
  49. package/dist/adapters/redocly-loader/ref-access.mjs.map +1 -1
  50. package/dist/adapters/redocly-loader/ref-holders.cjs +52 -10
  51. package/dist/adapters/redocly-loader/ref-holders.cjs.map +1 -1
  52. package/dist/adapters/redocly-loader/ref-holders.mjs +53 -12
  53. package/dist/adapters/redocly-loader/ref-holders.mjs.map +1 -1
  54. package/dist/adapters/redocly-loader/remote-body-limit.cjs +50 -0
  55. package/dist/adapters/redocly-loader/remote-body-limit.cjs.map +1 -0
  56. package/dist/adapters/redocly-loader/remote-body-limit.mjs +48 -0
  57. package/dist/adapters/redocly-loader/remote-body-limit.mjs.map +1 -0
  58. package/dist/adapters/redocly-loader/remote-fetch.cjs +40 -9
  59. package/dist/adapters/redocly-loader/remote-fetch.cjs.map +1 -1
  60. package/dist/adapters/redocly-loader/remote-fetch.mjs +40 -9
  61. package/dist/adapters/redocly-loader/remote-fetch.mjs.map +1 -1
  62. package/dist/adapters/redocly-loader/remote-node-limit.cjs +61 -0
  63. package/dist/adapters/redocly-loader/remote-node-limit.cjs.map +1 -0
  64. package/dist/adapters/redocly-loader/remote-node-limit.mjs +58 -0
  65. package/dist/adapters/redocly-loader/remote-node-limit.mjs.map +1 -0
  66. package/dist/adapters/redocly-loader/schema-load-errors.cjs +32 -8
  67. package/dist/adapters/redocly-loader/schema-load-errors.cjs.map +1 -1
  68. package/dist/adapters/redocly-loader/schema-load-errors.mjs +32 -9
  69. package/dist/adapters/redocly-loader/schema-load-errors.mjs.map +1 -1
  70. package/dist/adapters/redocly-loader/schema-source.cjs +18 -9
  71. package/dist/adapters/redocly-loader/schema-source.cjs.map +1 -1
  72. package/dist/adapters/redocly-loader/schema-source.mjs +20 -11
  73. package/dist/adapters/redocly-loader/schema-source.mjs.map +1 -1
  74. package/dist/adapters/redocly-loader/unsupported-keys.cjs +3 -5
  75. package/dist/adapters/redocly-loader/unsupported-keys.cjs.map +1 -1
  76. package/dist/adapters/redocly-loader/unsupported-keys.mjs +3 -5
  77. package/dist/adapters/redocly-loader/unsupported-keys.mjs.map +1 -1
  78. package/dist/adapters/terminal-logger/terminal-logger.cjs +10 -4
  79. package/dist/adapters/terminal-logger/terminal-logger.cjs.map +1 -1
  80. package/dist/adapters/terminal-logger/terminal-logger.mjs +10 -4
  81. package/dist/adapters/terminal-logger/terminal-logger.mjs.map +1 -1
  82. package/dist/api/default-ports.cjs +14 -2
  83. package/dist/api/default-ports.cjs.map +1 -1
  84. package/dist/api/default-ports.mjs +14 -2
  85. package/dist/api/default-ports.mjs.map +1 -1
  86. package/dist/api/discriminator-enum-parent.cjs +2 -2
  87. package/dist/api/discriminator-enum-parent.cjs.map +1 -1
  88. package/dist/api/discriminator-enum-parent.mjs +3 -3
  89. package/dist/api/discriminator-enum-parent.mjs.map +1 -1
  90. package/dist/api/discriminator-other-owners.cjs +5 -3
  91. package/dist/api/discriminator-other-owners.cjs.map +1 -1
  92. package/dist/api/discriminator-other-owners.mjs +5 -3
  93. package/dist/api/discriminator-other-owners.mjs.map +1 -1
  94. package/dist/api/discriminator-patch.cjs +5 -1
  95. package/dist/api/discriminator-patch.cjs.map +1 -1
  96. package/dist/api/discriminator-patch.mjs +5 -1
  97. package/dist/api/discriminator-patch.mjs.map +1 -1
  98. package/dist/api/discriminator-scan.cjs +15 -8
  99. package/dist/api/discriminator-scan.cjs.map +1 -1
  100. package/dist/api/discriminator-scan.mjs +15 -8
  101. package/dist/api/discriminator-scan.mjs.map +1 -1
  102. package/dist/api/document-refs.cjs +16 -1
  103. package/dist/api/document-refs.cjs.map +1 -1
  104. package/dist/api/document-refs.mjs +16 -1
  105. package/dist/api/document-refs.mjs.map +1 -1
  106. package/dist/api/document-run.cjs +6 -12
  107. package/dist/api/document-run.cjs.map +1 -1
  108. package/dist/api/document-run.mjs +6 -12
  109. package/dist/api/document-run.mjs.map +1 -1
  110. package/dist/api/legacy-utils.cjs.map +1 -1
  111. package/dist/api/legacy-utils.mjs.map +1 -1
  112. package/dist/api/openapi-ts.cjs +9 -6
  113. package/dist/api/openapi-ts.cjs.map +1 -1
  114. package/dist/api/openapi-ts.mjs +10 -8
  115. package/dist/api/openapi-ts.mjs.map +1 -1
  116. package/dist/api/ref-limit-options.cjs +63 -0
  117. package/dist/api/ref-limit-options.cjs.map +1 -0
  118. package/dist/api/ref-limit-options.mjs +57 -0
  119. package/dist/api/ref-limit-options.mjs.map +1 -0
  120. package/dist/api/schema-callbacks.cjs +36 -12
  121. package/dist/api/schema-callbacks.cjs.map +1 -1
  122. package/dist/api/schema-callbacks.mjs +36 -12
  123. package/dist/api/schema-callbacks.mjs.map +1 -1
  124. package/dist/api/transform-context.cjs +7 -3
  125. package/dist/api/transform-context.cjs.map +1 -1
  126. package/dist/api/transform-context.mjs +7 -3
  127. package/dist/api/transform-context.mjs.map +1 -1
  128. package/dist/api/transform-schema.cjs +47 -10
  129. package/dist/api/transform-schema.cjs.map +1 -1
  130. package/dist/api/transform-schema.mjs +48 -11
  131. package/dist/api/transform-schema.mjs.map +1 -1
  132. package/dist/application/print/text-writer.cjs +10 -3
  133. package/dist/application/print/text-writer.cjs.map +1 -1
  134. package/dist/application/print/text-writer.mjs +10 -3
  135. package/dist/application/print/text-writer.mjs.map +1 -1
  136. package/dist/application/stack-overflow.cjs +2 -1
  137. package/dist/application/stack-overflow.cjs.map +1 -1
  138. package/dist/application/stack-overflow.mjs +2 -1
  139. package/dist/application/stack-overflow.mjs.map +1 -1
  140. package/dist/application/transform/declared-value-types.cjs +36 -0
  141. package/dist/application/transform/declared-value-types.cjs.map +1 -0
  142. package/dist/application/transform/declared-value-types.mjs +34 -0
  143. package/dist/application/transform/declared-value-types.mjs.map +1 -0
  144. package/dist/application/transform/document/components.cjs +1 -1
  145. package/dist/application/transform/document/components.cjs.map +1 -1
  146. package/dist/application/transform/document/components.mjs +2 -2
  147. package/dist/application/transform/document/components.mjs.map +1 -1
  148. package/dist/application/transform/document/declared-type-names.cjs +23 -0
  149. package/dist/application/transform/document/declared-type-names.cjs.map +1 -0
  150. package/dist/application/transform/document/declared-type-names.mjs +20 -0
  151. package/dist/application/transform/document/declared-type-names.mjs.map +1 -0
  152. package/dist/application/transform/document/defs-root.cjs +1 -1
  153. package/dist/application/transform/document/defs-root.cjs.map +1 -1
  154. package/dist/application/transform/document/defs-root.mjs +2 -2
  155. package/dist/application/transform/document/defs-root.mjs.map +1 -1
  156. package/dist/application/transform/document/document.cjs +7 -2
  157. package/dist/application/transform/document/document.cjs.map +1 -1
  158. package/dist/application/transform/document/document.mjs +6 -3
  159. package/dist/application/transform/document/document.mjs.map +1 -1
  160. package/dist/application/transform/document/enum-names-given-back.cjs +62 -0
  161. package/dist/application/transform/document/enum-names-given-back.cjs.map +1 -0
  162. package/dist/application/transform/document/enum-names-given-back.mjs +58 -0
  163. package/dist/application/transform/document/enum-names-given-back.mjs.map +1 -0
  164. package/dist/application/transform/document/exploded-query-values.cjs +63 -0
  165. package/dist/application/transform/document/exploded-query-values.cjs.map +1 -0
  166. package/dist/application/transform/document/exploded-query-values.mjs +59 -0
  167. package/dist/application/transform/document/exploded-query-values.mjs.map +1 -0
  168. package/dist/application/transform/document/global-type-references.cjs +1 -0
  169. package/dist/application/transform/document/global-type-references.cjs.map +1 -1
  170. package/dist/application/transform/document/global-type-references.mjs +1 -1
  171. package/dist/application/transform/document/global-type-references.mjs.map +1 -1
  172. package/dist/application/transform/document/header.cjs +11 -3
  173. package/dist/application/transform/document/header.cjs.map +1 -1
  174. package/dist/application/transform/document/header.mjs +10 -2
  175. package/dist/application/transform/document/header.mjs.map +1 -1
  176. package/dist/application/transform/document/media-type.cjs +2 -2
  177. package/dist/application/transform/document/media-type.cjs.map +1 -1
  178. package/dist/application/transform/document/media-type.mjs +3 -3
  179. package/dist/application/transform/document/media-type.mjs.map +1 -1
  180. package/dist/application/transform/document/operation-keys-written.cjs +26 -0
  181. package/dist/application/transform/document/operation-keys-written.cjs.map +1 -0
  182. package/dist/application/transform/document/operation-keys-written.mjs +24 -0
  183. package/dist/application/transform/document/operation-keys-written.mjs.map +1 -0
  184. package/dist/application/transform/document/operation.cjs +1 -1
  185. package/dist/application/transform/document/operation.cjs.map +1 -1
  186. package/dist/application/transform/document/operation.mjs +2 -2
  187. package/dist/application/transform/document/operation.mjs.map +1 -1
  188. package/dist/application/transform/document/parameter-entries.cjs +34 -0
  189. package/dist/application/transform/document/parameter-entries.cjs.map +1 -0
  190. package/dist/application/transform/document/parameter-entries.mjs +30 -0
  191. package/dist/application/transform/document/parameter-entries.mjs.map +1 -0
  192. package/dist/application/transform/document/parameter.cjs +12 -4
  193. package/dist/application/transform/document/parameter.cjs.map +1 -1
  194. package/dist/application/transform/document/parameter.mjs +13 -5
  195. package/dist/application/transform/document/parameter.mjs.map +1 -1
  196. package/dist/application/transform/document/parameters.cjs +29 -34
  197. package/dist/application/transform/document/parameters.cjs.map +1 -1
  198. package/dist/application/transform/document/parameters.mjs +29 -34
  199. package/dist/application/transform/document/parameters.mjs.map +1 -1
  200. package/dist/application/transform/document/path-item.cjs +15 -17
  201. package/dist/application/transform/document/path-item.cjs.map +1 -1
  202. package/dist/application/transform/document/path-item.mjs +15 -19
  203. package/dist/application/transform/document/path-item.mjs.map +1 -1
  204. package/dist/application/transform/document/path-template-key.cjs +84 -0
  205. package/dist/application/transform/document/path-template-key.cjs.map +1 -0
  206. package/dist/application/transform/document/path-template-key.mjs +79 -0
  207. package/dist/application/transform/document/path-template-key.mjs.map +1 -0
  208. package/dist/application/transform/document/path-template-refs.cjs +70 -0
  209. package/dist/application/transform/document/path-template-refs.cjs.map +1 -0
  210. package/dist/application/transform/document/path-template-refs.mjs +67 -0
  211. package/dist/application/transform/document/path-template-refs.mjs.map +1 -0
  212. package/dist/application/transform/document/paths-enum.cjs +8 -6
  213. package/dist/application/transform/document/paths-enum.cjs.map +1 -1
  214. package/dist/application/transform/document/paths-enum.mjs +8 -7
  215. package/dist/application/transform/document/paths-enum.mjs.map +1 -1
  216. package/dist/application/transform/document/paths.cjs +43 -67
  217. package/dist/application/transform/document/paths.cjs.map +1 -1
  218. package/dist/application/transform/document/paths.mjs +42 -68
  219. package/dist/application/transform/document/paths.mjs.map +1 -1
  220. package/dist/application/transform/document/referenced-parameter.cjs +80 -0
  221. package/dist/application/transform/document/referenced-parameter.cjs.map +1 -0
  222. package/dist/application/transform/document/referenced-parameter.mjs +78 -0
  223. package/dist/application/transform/document/referenced-parameter.mjs.map +1 -0
  224. package/dist/application/transform/document/request-body.cjs +1 -1
  225. package/dist/application/transform/document/request-body.cjs.map +1 -1
  226. package/dist/application/transform/document/request-body.mjs +2 -2
  227. package/dist/application/transform/document/request-body.mjs.map +1 -1
  228. package/dist/application/transform/document/response.cjs +2 -2
  229. package/dist/application/transform/document/response.cjs.map +1 -1
  230. package/dist/application/transform/document/response.mjs +3 -3
  231. package/dist/application/transform/document/response.mjs.map +1 -1
  232. package/dist/application/transform/document/responses.cjs +1 -1
  233. package/dist/application/transform/document/responses.cjs.map +1 -1
  234. package/dist/application/transform/document/responses.mjs +2 -2
  235. package/dist/application/transform/document/responses.mjs.map +1 -1
  236. package/dist/application/transform/document/root-type-aliases.cjs +8 -23
  237. package/dist/application/transform/document/root-type-aliases.cjs.map +1 -1
  238. package/dist/application/transform/document/root-type-aliases.mjs +8 -24
  239. package/dist/application/transform/document/root-type-aliases.mjs.map +1 -1
  240. package/dist/application/transform/document/type-resolution.cjs +3 -1
  241. package/dist/application/transform/document/type-resolution.cjs.map +1 -1
  242. package/dist/application/transform/document/type-resolution.mjs +3 -1
  243. package/dist/application/transform/document/type-resolution.mjs.map +1 -1
  244. package/dist/application/transform/document/webhooks.cjs +10 -3
  245. package/dist/application/transform/document/webhooks.cjs.map +1 -1
  246. package/dist/application/transform/document/webhooks.mjs +10 -3
  247. package/dist/application/transform/document/webhooks.mjs.map +1 -1
  248. package/dist/application/transform/footer/document-footer.cjs +16 -5
  249. package/dist/application/transform/footer/document-footer.cjs.map +1 -1
  250. package/dist/application/transform/footer/document-footer.mjs +16 -5
  251. package/dist/application/transform/footer/document-footer.mjs.map +1 -1
  252. package/dist/application/transform/footer/enum-name-claims.cjs +48 -0
  253. package/dist/application/transform/footer/enum-name-claims.cjs.map +1 -0
  254. package/dist/application/transform/footer/enum-name-claims.mjs +46 -0
  255. package/dist/application/transform/footer/enum-name-claims.mjs.map +1 -0
  256. package/dist/application/transform/footer/operation-keys.cjs +23 -0
  257. package/dist/application/transform/footer/operation-keys.cjs.map +1 -0
  258. package/dist/application/transform/footer/operation-keys.mjs +21 -0
  259. package/dist/application/transform/footer/operation-keys.mjs.map +1 -0
  260. package/dist/application/transform/footer/type-evaluation.cjs +4 -4
  261. package/dist/application/transform/footer/type-evaluation.cjs.map +1 -1
  262. package/dist/application/transform/footer/type-evaluation.mjs +4 -4
  263. package/dist/application/transform/footer/type-evaluation.mjs.map +1 -1
  264. package/dist/application/transform/helper-types.cjs +3 -3
  265. package/dist/application/transform/helper-types.cjs.map +1 -1
  266. package/dist/application/transform/helper-types.mjs +3 -3
  267. package/dist/application/transform/helper-types.mjs.map +1 -1
  268. package/dist/application/transform/numbered-names.cjs +9 -0
  269. package/dist/application/transform/numbered-names.cjs.map +1 -1
  270. package/dist/application/transform/numbered-names.mjs +9 -1
  271. package/dist/application/transform/numbered-names.mjs.map +1 -1
  272. package/dist/application/transform/ref-pointer/generated-location.cjs +5 -5
  273. package/dist/application/transform/ref-pointer/generated-location.cjs.map +1 -1
  274. package/dist/application/transform/ref-pointer/generated-location.mjs +3 -3
  275. package/dist/application/transform/ref-pointer/generated-location.mjs.map +1 -1
  276. package/dist/application/transform/ref-pointer/generated-shape.cjs +47 -66
  277. package/dist/application/transform/ref-pointer/generated-shape.cjs.map +1 -1
  278. package/dist/application/transform/ref-pointer/generated-shape.mjs +36 -50
  279. package/dist/application/transform/ref-pointer/generated-shape.mjs.map +1 -1
  280. package/dist/application/transform/ref-pointer/inline-cycles.cjs +2 -2
  281. package/dist/application/transform/ref-pointer/inline-cycles.cjs.map +1 -1
  282. package/dist/application/transform/ref-pointer/inline-cycles.mjs +1 -1
  283. package/dist/application/transform/ref-pointer/inline-cycles.mjs.map +1 -1
  284. package/dist/application/transform/ref-pointer/located-node.cjs +23 -0
  285. package/dist/application/transform/ref-pointer/located-node.cjs.map +1 -0
  286. package/dist/application/transform/ref-pointer/located-node.mjs +18 -0
  287. package/dist/application/transform/ref-pointer/located-node.mjs.map +1 -0
  288. package/dist/application/transform/ref-pointer/original-index.cjs +68 -13
  289. package/dist/application/transform/ref-pointer/original-index.cjs.map +1 -1
  290. package/dist/application/transform/ref-pointer/original-index.mjs +70 -15
  291. package/dist/application/transform/ref-pointer/original-index.mjs.map +1 -1
  292. package/dist/application/transform/ref-pointer/pointer-type.cjs +2 -2
  293. package/dist/application/transform/ref-pointer/pointer-type.cjs.map +1 -1
  294. package/dist/application/transform/ref-pointer/pointer-type.mjs +1 -1
  295. package/dist/application/transform/ref-pointer/pointer-type.mjs.map +1 -1
  296. package/dist/application/transform/ref-pointer/pointer-walk.cjs +54 -13
  297. package/dist/application/transform/ref-pointer/pointer-walk.cjs.map +1 -1
  298. package/dist/application/transform/ref-pointer/pointer-walk.mjs +46 -7
  299. package/dist/application/transform/ref-pointer/pointer-walk.mjs.map +1 -1
  300. package/dist/application/transform/ref-pointer/property-shape.cjs +52 -0
  301. package/dist/application/transform/ref-pointer/property-shape.cjs.map +1 -0
  302. package/dist/application/transform/ref-pointer/property-shape.mjs +45 -0
  303. package/dist/application/transform/ref-pointer/property-shape.mjs.map +1 -0
  304. package/dist/application/transform/ref-pointer/typed-walk.cjs +79 -21
  305. package/dist/application/transform/ref-pointer/typed-walk.cjs.map +1 -1
  306. package/dist/application/transform/ref-pointer/typed-walk.mjs +76 -18
  307. package/dist/application/transform/ref-pointer/typed-walk.mjs.map +1 -1
  308. package/dist/application/transform/ref-type.cjs +2 -1
  309. package/dist/application/transform/ref-type.cjs.map +1 -1
  310. package/dist/application/transform/ref-type.mjs +2 -1
  311. package/dist/application/transform/ref-type.mjs.map +1 -1
  312. package/dist/application/transform/schema/access-flags.cjs.map +1 -1
  313. package/dist/application/transform/schema/access-flags.mjs.map +1 -1
  314. package/dist/application/transform/schema/composition-type.cjs +1 -1
  315. package/dist/application/transform/schema/composition-type.cjs.map +1 -1
  316. package/dist/application/transform/schema/composition-type.mjs +2 -2
  317. package/dist/application/transform/schema/composition-type.mjs.map +1 -1
  318. package/dist/application/transform/schema/enum-rule.cjs +1 -1
  319. package/dist/application/transform/schema/enum-rule.cjs.map +1 -1
  320. package/dist/application/transform/schema/enum-rule.mjs +2 -2
  321. package/dist/application/transform/schema/enum-rule.mjs.map +1 -1
  322. package/dist/application/transform/schema/index-signature-type.cjs +21 -0
  323. package/dist/application/transform/schema/index-signature-type.cjs.map +1 -0
  324. package/dist/application/transform/schema/index-signature-type.mjs +19 -0
  325. package/dist/application/transform/schema/index-signature-type.mjs.map +1 -0
  326. package/dist/application/transform/schema/input-location.cjs +23 -0
  327. package/dist/application/transform/schema/input-location.cjs.map +1 -0
  328. package/dist/application/transform/schema/input-location.mjs +21 -0
  329. package/dist/application/transform/schema/input-location.mjs.map +1 -0
  330. package/dist/application/transform/schema/object-type.cjs +18 -8
  331. package/dist/application/transform/schema/object-type.cjs.map +1 -1
  332. package/dist/application/transform/schema/object-type.mjs +19 -9
  333. package/dist/application/transform/schema/object-type.mjs.map +1 -1
  334. package/dist/application/transform/schema/ref-siblings.cjs +47 -0
  335. package/dist/application/transform/schema/ref-siblings.cjs.map +1 -0
  336. package/dist/application/transform/schema/ref-siblings.mjs +45 -0
  337. package/dist/application/transform/schema/ref-siblings.mjs.map +1 -0
  338. package/dist/application/transform/schema/schema-transform.cjs +6 -3
  339. package/dist/application/transform/schema/schema-transform.cjs.map +1 -1
  340. package/dist/application/transform/schema/schema-transform.mjs +6 -3
  341. package/dist/application/transform/schema/schema-transform.mjs.map +1 -1
  342. package/dist/application/transform/schema/unevaluated-properties.cjs +2 -30
  343. package/dist/application/transform/schema/unevaluated-properties.cjs.map +1 -1
  344. package/dist/application/transform/schema/unevaluated-properties.mjs +3 -31
  345. package/dist/application/transform/schema/unevaluated-properties.mjs.map +1 -1
  346. package/dist/application/transform/schema-comment.cjs +5 -1
  347. package/dist/application/transform/schema-comment.cjs.map +1 -1
  348. package/dist/application/transform/schema-comment.mjs +5 -1
  349. package/dist/application/transform/schema-comment.mjs.map +1 -1
  350. package/dist/cli/api-logger.cjs +13 -0
  351. package/dist/cli/api-logger.cjs.map +1 -0
  352. package/dist/cli/api-logger.mjs +11 -0
  353. package/dist/cli/api-logger.mjs.map +1 -0
  354. package/dist/cli/api-settings.cjs +57 -9
  355. package/dist/cli/api-settings.cjs.map +1 -1
  356. package/dist/cli/api-settings.mjs +56 -11
  357. package/dist/cli/api-settings.mjs.map +1 -1
  358. package/dist/cli/api-writes.cjs +72 -0
  359. package/dist/cli/api-writes.cjs.map +1 -0
  360. package/dist/cli/api-writes.mjs +69 -0
  361. package/dist/cli/api-writes.mjs.map +1 -0
  362. package/dist/cli/cli-arguments.cjs +51 -11
  363. package/dist/cli/cli-arguments.cjs.map +1 -1
  364. package/dist/cli/cli-arguments.mjs +51 -11
  365. package/dist/cli/cli-arguments.mjs.map +1 -1
  366. package/dist/cli/cli-errors.cjs +29 -1
  367. package/dist/cli/cli-errors.cjs.map +1 -1
  368. package/dist/cli/cli-errors.mjs +29 -2
  369. package/dist/cli/cli-errors.mjs.map +1 -1
  370. package/dist/cli/cli-output.cjs +111 -4
  371. package/dist/cli/cli-output.cjs.map +1 -1
  372. package/dist/cli/cli-output.mjs +104 -5
  373. package/dist/cli/cli-output.mjs.map +1 -1
  374. package/dist/cli/main.cjs +13 -3
  375. package/dist/cli/main.cjs.map +1 -1
  376. package/dist/cli/main.mjs +14 -4
  377. package/dist/cli/main.mjs.map +1 -1
  378. package/dist/cli/redocly-apis.cjs +94 -37
  379. package/dist/cli/redocly-apis.cjs.map +1 -1
  380. package/dist/cli/redocly-apis.mjs +99 -42
  381. package/dist/cli/redocly-apis.mjs.map +1 -1
  382. package/dist/cli/ref-limits.cjs +15 -1
  383. package/dist/cli/ref-limits.cjs.map +1 -1
  384. package/dist/cli/ref-limits.mjs +15 -2
  385. package/dist/cli/ref-limits.mjs.map +1 -1
  386. package/dist/cli/run-cli.cjs +37 -14
  387. package/dist/cli/run-cli.cjs.map +1 -1
  388. package/dist/cli/run-cli.mjs +39 -16
  389. package/dist/cli/run-cli.mjs.map +1 -1
  390. package/dist/domain/append-all.cjs +10 -0
  391. package/dist/domain/append-all.cjs.map +1 -0
  392. package/dist/domain/append-all.mjs +8 -0
  393. package/dist/domain/append-all.mjs.map +1 -0
  394. package/dist/domain/cause-secrets.cjs +52 -0
  395. package/dist/domain/cause-secrets.cjs.map +1 -0
  396. package/dist/domain/cause-secrets.mjs +50 -0
  397. package/dist/domain/cause-secrets.mjs.map +1 -0
  398. package/dist/domain/errors.cjs +11 -3
  399. package/dist/domain/errors.cjs.map +1 -1
  400. package/dist/domain/errors.mjs +11 -3
  401. package/dist/domain/errors.mjs.map +1 -1
  402. package/dist/domain/ir/identifier-text.cjs.map +1 -1
  403. package/dist/domain/ir/identifier-text.mjs +1 -1
  404. package/dist/domain/ir/identifier-text.mjs.map +1 -1
  405. package/dist/domain/ir/ir-shape.cjs +187 -0
  406. package/dist/domain/ir/ir-shape.cjs.map +1 -0
  407. package/dist/domain/ir/ir-shape.mjs +184 -0
  408. package/dist/domain/ir/ir-shape.mjs.map +1 -0
  409. package/dist/domain/ir/newer-identifier-ranges.cjs +182 -29
  410. package/dist/domain/ir/newer-identifier-ranges.cjs.map +1 -1
  411. package/dist/domain/ir/newer-identifier-ranges.mjs +182 -29
  412. package/dist/domain/ir/newer-identifier-ranges.mjs.map +1 -1
  413. package/dist/domain/location-text.cjs +9 -0
  414. package/dist/domain/location-text.cjs.map +1 -0
  415. package/dist/domain/location-text.mjs +7 -0
  416. package/dist/domain/location-text.mjs.map +1 -0
  417. package/dist/domain/openapi/alias-expansion.cjs +3 -1
  418. package/dist/domain/openapi/alias-expansion.cjs.map +1 -1
  419. package/dist/domain/openapi/alias-expansion.mjs +3 -1
  420. package/dist/domain/openapi/alias-expansion.mjs.map +1 -1
  421. package/dist/domain/openapi/discriminated-union.cjs +3 -3
  422. package/dist/domain/openapi/discriminated-union.cjs.map +1 -1
  423. package/dist/domain/openapi/discriminated-union.mjs +4 -4
  424. package/dist/domain/openapi/discriminated-union.mjs.map +1 -1
  425. package/dist/domain/openapi/discriminator-conflicts.cjs +10 -6
  426. package/dist/domain/openapi/discriminator-conflicts.cjs.map +1 -1
  427. package/dist/domain/openapi/discriminator-conflicts.mjs +11 -7
  428. package/dist/domain/openapi/discriminator-conflicts.mjs.map +1 -1
  429. package/dist/domain/openapi/document-places.cjs +55 -0
  430. package/dist/domain/openapi/document-places.cjs.map +1 -0
  431. package/dist/domain/openapi/document-places.mjs +53 -0
  432. package/dist/domain/openapi/document-places.mjs.map +1 -0
  433. package/dist/domain/openapi/json-pointer.cjs +43 -1
  434. package/dist/domain/openapi/json-pointer.cjs.map +1 -1
  435. package/dist/domain/openapi/json-pointer.mjs +40 -2
  436. package/dist/domain/openapi/json-pointer.mjs.map +1 -1
  437. package/dist/domain/openapi/schema-dialect.cjs +15 -0
  438. package/dist/domain/openapi/schema-dialect.cjs.map +1 -0
  439. package/dist/domain/openapi/schema-dialect.mjs +12 -0
  440. package/dist/domain/openapi/schema-dialect.mjs.map +1 -0
  441. package/dist/domain/openapi/unsupported-features.cjs +1 -1
  442. package/dist/domain/openapi/unsupported-features.cjs.map +1 -1
  443. package/dist/domain/openapi/unsupported-features.mjs +2 -2
  444. package/dist/domain/openapi/unsupported-features.mjs.map +1 -1
  445. package/dist/domain/output-fixes.cjs +20 -0
  446. package/dist/domain/output-fixes.cjs.map +1 -1
  447. package/dist/domain/output-fixes.mjs +20 -0
  448. package/dist/domain/output-fixes.mjs.map +1 -1
  449. package/dist/domain/terminal-text.cjs +31 -0
  450. package/dist/domain/terminal-text.cjs.map +1 -0
  451. package/dist/domain/terminal-text.mjs +29 -0
  452. package/dist/domain/terminal-text.mjs.map +1 -0
  453. package/dist/domain/url-secrets.cjs +48 -0
  454. package/dist/domain/url-secrets.cjs.map +1 -0
  455. package/dist/domain/url-secrets.mjs +45 -0
  456. package/dist/domain/url-secrets.mjs.map +1 -0
  457. package/dist/domain/warnings.cjs +1 -0
  458. package/dist/domain/warnings.cjs.map +1 -1
  459. package/dist/domain/warnings.mjs +1 -0
  460. package/dist/domain/warnings.mjs.map +1 -1
  461. package/dist/index.d.cts +46 -20
  462. package/dist/index.d.mts +46 -20
  463. package/dist/index.d.ts +46 -20
  464. package/package.json +4 -5
  465. package/src/adapters/node-file-system/file-claims.ts +138 -0
  466. package/src/adapters/node-file-system/file-identity.ts +137 -0
  467. package/src/adapters/node-file-system/node-file-system.ts +158 -18
  468. package/src/adapters/pipe-safe-writer/pipe-safe-writer.ts +29 -0
  469. package/src/adapters/redocly-loader/bundled-mapping-copies.ts +60 -0
  470. package/src/adapters/redocly-loader/bundled-ref-repair.ts +2 -2
  471. package/src/adapters/redocly-loader/component-schemas.ts +19 -0
  472. package/src/adapters/redocly-loader/loaded-documents.ts +46 -0
  473. package/src/adapters/redocly-loader/mapping-schema-names.ts +25 -0
  474. package/src/adapters/redocly-loader/query-named-components.ts +201 -0
  475. package/src/adapters/redocly-loader/redocly-schema-loader.ts +64 -38
  476. package/src/adapters/redocly-loader/ref-access.ts +51 -4
  477. package/src/adapters/redocly-loader/ref-holders.ts +76 -15
  478. package/src/adapters/redocly-loader/remote-body-limit.ts +66 -0
  479. package/src/adapters/redocly-loader/remote-fetch.ts +85 -13
  480. package/src/adapters/redocly-loader/remote-node-limit.ts +102 -0
  481. package/src/adapters/redocly-loader/schema-load-errors.ts +52 -13
  482. package/src/adapters/redocly-loader/schema-source.ts +35 -11
  483. package/src/adapters/redocly-loader/unsupported-keys.ts +3 -7
  484. package/src/adapters/terminal-logger/terminal-logger.ts +17 -6
  485. package/src/api/default-ports.ts +33 -4
  486. package/src/api/discriminator-enum-parent.ts +3 -3
  487. package/src/api/discriminator-other-owners.ts +5 -3
  488. package/src/api/discriminator-patch.ts +5 -1
  489. package/src/api/discriminator-scan.ts +16 -8
  490. package/src/api/document-refs.ts +29 -1
  491. package/src/api/document-run.ts +10 -19
  492. package/src/api/legacy-utils.ts +5 -1
  493. package/src/api/openapi-ts.ts +26 -8
  494. package/src/api/ref-limit-options.ts +76 -0
  495. package/src/api/run-context.ts +3 -0
  496. package/src/api/schema-callbacks.ts +60 -17
  497. package/src/api/transform-context.ts +7 -3
  498. package/src/api/transform-schema.ts +79 -12
  499. package/src/application/ports/file-system.ts +47 -0
  500. package/src/application/ports/schema-loader.ts +11 -1
  501. package/src/application/print/text-writer.ts +10 -3
  502. package/src/application/stack-overflow.ts +9 -5
  503. package/src/application/transform/declared-value-types.ts +42 -0
  504. package/src/application/transform/document/components.ts +2 -2
  505. package/src/application/transform/document/declared-type-names.ts +36 -0
  506. package/src/application/transform/document/defs-root.ts +2 -2
  507. package/src/application/transform/document/document.ts +8 -5
  508. package/src/application/transform/document/enum-names-given-back.ts +91 -0
  509. package/src/application/transform/document/exploded-query-values.ts +88 -0
  510. package/src/application/transform/document/global-type-references.ts +1 -1
  511. package/src/application/transform/document/header.ts +25 -5
  512. package/src/application/transform/document/media-type.ts +4 -3
  513. package/src/application/transform/document/operation-keys-written.ts +27 -0
  514. package/src/application/transform/document/operation.ts +2 -2
  515. package/src/application/transform/document/parameter-entries.ts +70 -0
  516. package/src/application/transform/document/parameter.ts +21 -9
  517. package/src/application/transform/document/parameters.ts +56 -66
  518. package/src/application/transform/document/path-item.ts +16 -34
  519. package/src/application/transform/document/path-template-key.ts +152 -0
  520. package/src/application/transform/document/path-template-refs.ts +106 -0
  521. package/src/application/transform/document/paths-enum.ts +24 -10
  522. package/src/application/transform/document/paths.ts +59 -125
  523. package/src/application/transform/document/referenced-parameter.ts +146 -0
  524. package/src/application/transform/document/request-body.ts +2 -2
  525. package/src/application/transform/document/response.ts +3 -3
  526. package/src/application/transform/document/responses.ts +2 -2
  527. package/src/application/transform/document/root-type-aliases.ts +17 -38
  528. package/src/application/transform/document/type-resolution.ts +2 -1
  529. package/src/application/transform/document/webhooks.ts +19 -6
  530. package/src/application/transform/footer/document-footer.ts +36 -9
  531. package/src/application/transform/footer/enum-name-claims.ts +62 -0
  532. package/src/application/transform/footer/operation-keys.ts +28 -0
  533. package/src/application/transform/footer/type-evaluation.ts +4 -4
  534. package/src/application/transform/helper-types.ts +8 -7
  535. package/src/application/transform/numbered-names.ts +15 -0
  536. package/src/application/transform/ref-pointer/generated-location.ts +3 -3
  537. package/src/application/transform/ref-pointer/generated-shape.ts +67 -78
  538. package/src/application/transform/ref-pointer/inline-cycles.ts +1 -1
  539. package/src/application/transform/ref-pointer/located-node.ts +38 -0
  540. package/src/application/transform/ref-pointer/original-index.ts +100 -17
  541. package/src/application/transform/ref-pointer/pointer-type.ts +1 -1
  542. package/src/application/transform/ref-pointer/pointer-walk.ts +82 -8
  543. package/src/application/transform/ref-pointer/property-shape.ts +97 -0
  544. package/src/application/transform/ref-pointer/typed-walk.ts +117 -25
  545. package/src/application/transform/ref-type.ts +2 -1
  546. package/src/application/transform/schema/access-flags.ts +5 -2
  547. package/src/application/transform/schema/composition-type.ts +2 -2
  548. package/src/application/transform/schema/enum-rule.ts +6 -2
  549. package/src/application/transform/schema/index-signature-type.ts +31 -0
  550. package/src/application/transform/schema/input-location.ts +35 -0
  551. package/src/application/transform/schema/object-type.ts +22 -12
  552. package/src/application/transform/schema/ref-siblings.ts +76 -0
  553. package/src/application/transform/schema/schema-context.ts +3 -0
  554. package/src/application/transform/schema/schema-transform.ts +6 -3
  555. package/src/application/transform/schema/unevaluated-properties.ts +4 -44
  556. package/src/application/transform/schema-comment.ts +5 -1
  557. package/src/application/transform/transform-context.ts +5 -0
  558. package/src/cli/api-logger.ts +17 -0
  559. package/src/cli/api-settings.ts +80 -13
  560. package/src/cli/api-writes.ts +117 -0
  561. package/src/cli/cli-arguments.ts +90 -14
  562. package/src/cli/cli-dependencies.ts +26 -4
  563. package/src/cli/cli-errors.ts +42 -1
  564. package/src/cli/cli-output.ts +195 -15
  565. package/src/cli/main.ts +14 -5
  566. package/src/cli/redocly-apis.ts +177 -52
  567. package/src/cli/ref-limits.ts +21 -2
  568. package/src/cli/run-cli.ts +76 -15
  569. package/src/domain/append-all.ts +10 -0
  570. package/src/domain/cause-secrets.ts +86 -0
  571. package/src/domain/errors.ts +16 -5
  572. package/src/domain/ir/identifier-text.ts +6 -5
  573. package/src/domain/ir/ir-shape.ts +299 -0
  574. package/src/domain/ir/newer-identifier-ranges.ts +183 -30
  575. package/src/domain/location-text.ts +12 -0
  576. package/src/domain/openapi/alias-expansion.ts +4 -1
  577. package/src/domain/openapi/discriminated-union.ts +6 -4
  578. package/src/domain/openapi/discriminator-conflicts.ts +21 -7
  579. package/src/domain/openapi/document-object.ts +2 -0
  580. package/src/domain/openapi/document-places.ts +78 -0
  581. package/src/domain/openapi/json-pointer.ts +96 -7
  582. package/src/domain/openapi/schema-dialect.ts +22 -0
  583. package/src/domain/openapi/unsupported-features.ts +2 -2
  584. package/src/domain/output-fixes.ts +28 -2
  585. package/src/domain/terminal-text.ts +44 -0
  586. package/src/domain/url-secrets.ts +72 -0
  587. package/src/domain/warnings.ts +1 -0
  588. package/src/types/generator-options.ts +1 -1
  589. package/dist/cli/main.d.cts +0 -2
  590. package/dist/cli/main.d.mts +0 -2
  591. package/dist/cli/main.d.ts +0 -2
  592. package/dist/domain/url-credentials.cjs +0 -10
  593. package/dist/domain/url-credentials.cjs.map +0 -1
  594. package/dist/domain/url-credentials.mjs +0 -8
  595. package/dist/domain/url-credentials.mjs.map +0 -1
  596. package/src/domain/url-credentials.ts +0 -18
@@ -1,6 +1,6 @@
1
1
  import { irKeyword, irRecord } from "../../../domain/ir/constructors.js";
2
2
  import type { IrType } from "../../../domain/ir/nodes.js";
3
- import { createRef } from "../../../domain/openapi/json-pointer.js";
3
+ import { appendPointer } from "../../../domain/openapi/json-pointer.js";
4
4
  import type { Schema, SchemaObject } from "../../../domain/openapi/schema-object.js";
5
5
  import { FIX } from "../../../domain/output-fixes.js";
6
6
  import { requirableRefType } from "../ref-pointer/pointer-type.js";
@@ -29,7 +29,7 @@ function variantTypes(
29
29
  return variants.map((variant, index) =>
30
30
  request.transformNested(variant, {
31
31
  ...request.location,
32
- path: createRef([request.location.path, keyword, String(index)]),
32
+ path: appendPointer(request.location.path, [keyword, index]),
33
33
  }),
34
34
  );
35
35
  }
@@ -6,7 +6,11 @@ import {
6
6
  irString,
7
7
  } from "../../../domain/ir/constructors.js";
8
8
  import type { IrType } from "../../../domain/ir/nodes.js";
9
- import { createRef, parseRefPointer } from "../../../domain/openapi/json-pointer.js";
9
+ import {
10
+ appendPointer,
11
+ parseRefPointer,
12
+ ROOT_POINTER,
13
+ } from "../../../domain/openapi/json-pointer.js";
10
14
  import type { SchemaObject } from "../../../domain/openapi/schema-object.js";
11
15
  import { FIX } from "../../../domain/output-fixes.js";
12
16
  import { literalType } from "../literal-type.js";
@@ -228,7 +232,7 @@ function enumValuesPointer(path: string | undefined): { ref: string; extract: st
228
232
  : pointer
229
233
  .slice(firstVariantStart)
230
234
  .filter((segment) => !UNION_KEYWORDS.has(segment) && !INDEX_RE.test(segment));
231
- return { ref: createRef(kept), extract };
235
+ return { ref: appendPointer(ROOT_POINTER, kept), extract };
232
236
  }
233
237
 
234
238
  function addEnumValues(schema: SchemaObject, request: SchemaRequest): void {
@@ -0,0 +1,31 @@
1
+ import type { IrType } from "../../../domain/ir/nodes.js";
2
+ import { NO_DECLARED_TYPES } from "../document/declared-types.js";
3
+ import { assignabilityProof } from "../document/type-assignability.js";
4
+ import { unionOf } from "../type-combinators.js";
5
+
6
+ /**
7
+ * The index signature type with the property types it does not admit. TypeScript checks an index
8
+ * signature against every key of a value, declared ones too, so `{ total: number } & { [key:
9
+ * string]: string }` admits no value with `total` (with a required `total`, none at all). The
10
+ * signature takes those property types too, as `unevaluated-properties` does. A property type
11
+ * proven assignable adds nothing, so output that admitted its values stays; one the proof cannot
12
+ * decide (a `$ref`) is added, member by member, so the union stays flat. `$defs` is a keyword, not
13
+ * data, so it is not read.
14
+ */
15
+ export function withPropertyTypes(indexType: IrType, propertyTypes: readonly IrType[]): IrType {
16
+ const relate = assignabilityProof(NO_DECLARED_TYPES);
17
+ const members = unionMembers(indexType);
18
+ const added: IrType[] = [];
19
+ // Each member of a property type joins the union on its own, unless the union admits it
20
+ // already: `(string | null) | (string | null)` is written `string | null`.
21
+ for (const member of propertyTypes.flatMap(unionMembers)) {
22
+ if (relate(member, unionOf([...members, ...added])) !== "assignable") {
23
+ added.push(member);
24
+ }
25
+ }
26
+ // Without an added member the index type stays as printed before, repeats and all.
27
+ return added.length === 0 ? indexType : unionOf([...members, ...added]);
28
+ }
29
+
30
+ const unionMembers = (type: IrType): readonly IrType[] =>
31
+ type.kind === "union" ? type.types : [type];
@@ -0,0 +1,35 @@
1
+ import { placeOf } from "../../../domain/openapi/document-places.js";
2
+ import { parseRefPointer } from "../../../domain/openapi/json-pointer.js";
3
+ import { FIX, type OutputFix } from "../../../domain/output-fixes.js";
4
+
5
+ /** The words that mark an input anywhere in a location, as the original reads them. */
6
+ const ORIGINAL_INPUT_WORDS = ["parameters", "requestBody", "requestBodies"] as const;
7
+
8
+ /**
9
+ * Whether a schema location describes an input: a parameter or a request body. A client may
10
+ * leave out an input property that has a `default`, so the default makes no such property
11
+ * required. The original tests the location text for a word, so a schema or path that is only
12
+ * named so (`#/components/schemas/Job/properties/parameters`, `/system-parameters`) counts as an
13
+ * input too. The `default-input-locations` fix reads a pointer into the document by the
14
+ * document's structure instead (ADR-021).
15
+ */
16
+ export function isInputLocation(path: string | undefined, fixes: ReadonlySet<OutputFix>): boolean {
17
+ if (path === undefined) {
18
+ return false;
19
+ }
20
+ return fixes.has(FIX.DEFAULT_INPUT_LOCATIONS) ? isStructuralInput(path) : namesInput(path);
21
+ }
22
+
23
+ function namesInput(path: string): boolean {
24
+ return ORIGINAL_INPUT_WORDS.some((word) => path.includes(word));
25
+ }
26
+
27
+ /**
28
+ * Whether the document's structure makes the pointer an input. A path an exported transformer was
29
+ * given that is no pointer into the document (`/items/{id}`) has no known structure, so the
30
+ * original's words still mark an input there.
31
+ */
32
+ function isStructuralInput(path: string): boolean {
33
+ const place = placeOf(parseRefPointer(path));
34
+ return place === "outside" ? namesInput(path) : place === "input";
35
+ }
@@ -7,7 +7,7 @@ import {
7
7
  } from "../../../domain/ir/constructors.js";
8
8
  import type { IrMember, IrPropertySignature, IrType } from "../../../domain/ir/nodes.js";
9
9
  import { toPropertyName } from "../../../domain/ir/property-name.js";
10
- import { createRef } from "../../../domain/openapi/json-pointer.js";
10
+ import { appendPointer } from "../../../domain/openapi/json-pointer.js";
11
11
  import type { Schema, SchemaObject } from "../../../domain/openapi/schema-object.js";
12
12
  import { documentEntries } from "../document-entries.js";
13
13
  import { schemaRefType } from "../ref-pointer/pointer-type.js";
@@ -15,13 +15,13 @@ import { schemaCommentOptionsOf, withSchemaComment } from "../schema-comment.js"
15
15
  import { UNKNOWN_TYPE } from "../shared-types.js";
16
16
  import { intersectionOf, unionOf } from "../type-combinators.js";
17
17
  import { type AccessFlags, propertyAccessFlags } from "./access-flags.js";
18
+ import { withPropertyTypes } from "./index-signature-type.js";
18
19
  import { discriminatorMember, inheritedDiscriminator } from "./inherited-discriminator.js";
20
+ import { isInputLocation } from "./input-location.js";
21
+ import { refWithSiblingsAsAllOf } from "./ref-siblings.js";
19
22
  import type { SchemaOptions } from "./schema-context.js";
20
23
  import type { SchemaRequest } from "./schema-rule.js";
21
24
 
22
- /** Path parts where a default value cannot make a property required (inputs may omit it). */
23
- const INPUT_PATH_PARTS = ["parameters", "requestBody", "requestBodies"] as const;
24
-
25
25
  export class InvalidPropertyError extends OpenAPITypesafeError {
26
26
  constructor(path: string | undefined, key: string, value: unknown) {
27
27
  const received = Array.isArray(value) ? "Array" : typeof value;
@@ -85,11 +85,10 @@ function isOptionalProperty(
85
85
  request: SchemaRequest,
86
86
  ): boolean {
87
87
  const { options } = request.context;
88
- const path = request.location.path;
89
88
  const isDefaultRequired =
90
89
  facts.hasDefault &&
91
90
  options.defaultNonNullable &&
92
- !INPUT_PATH_PARTS.some((part) => path?.includes(part));
91
+ !isInputLocation(request.location.path, options.fixes);
93
92
  const isRequired =
94
93
  schema.required?.includes(key) ||
95
94
  (schema.required === undefined && options.propertiesRequiredByDefault) ||
@@ -111,15 +110,22 @@ interface CustomResult {
111
110
  readonly isOptional: true | null;
112
111
  }
113
112
 
113
+ /** A `$ref` with siblings that `ref-siblings` types as an `allOf` is typed as a schema. */
114
+ function plainRef({ ref }: PropertyFacts, value: Schema, request: SchemaRequest) {
115
+ const isAllOf = ref && refWithSiblingsAsAllOf(value as SchemaObject, request.context.options);
116
+ return isAllOf ? undefined : ref;
117
+ }
118
+
114
119
  function propertyType(
115
120
  key: string,
116
121
  value: Schema,
117
122
  facts: PropertyFacts,
118
123
  request: SchemaRequest,
119
124
  ): CustomResult {
120
- const path = createRef([request.location.path, key]);
121
- const type = facts.ref
122
- ? schemaRefType(facts.ref, request)
125
+ const path = appendPointer(request.location.path, [key]);
126
+ const ref = plainRef(facts, value, request);
127
+ const type = ref
128
+ ? schemaRefType(ref, request)
123
129
  : request.transformNested(value, { ...request.location, path });
124
130
  const custom = request.context.callbacks.transform(value, request.location);
125
131
  return custom === null
@@ -151,7 +157,7 @@ function propertyMember(
151
157
  isReadonly: options.immutable || (!options.readWriteMarkers && facts.flags.isReadOnly),
152
158
  },
153
159
  );
154
- return finishProperty(property, value, createRef([request.location.path, key]), request);
160
+ return finishProperty(property, value, appendPointer(request.location.path, [key]), request);
155
161
  }
156
162
 
157
163
  function propertyMembers(schema: SchemaObject, request: SchemaRequest): IrMember[] {
@@ -176,7 +182,7 @@ function defsMember(
176
182
  ): IrMember {
177
183
  const { options } = request.context;
178
184
  const members = Object.entries(defs).map(([key, value]) => {
179
- const path = createRef([request.location.path, "$defs", key]);
185
+ const path = appendPointer(request.location.path, ["$defs", key]);
180
186
  const flags = propertyAccessFlags(value, request.context);
181
187
  const type = withReadWriteMarker(
182
188
  request.transformNested(value, { ...request.location, path }),
@@ -270,6 +276,9 @@ export function objectType(schema: SchemaObject, request: SchemaRequest): IrType
270
276
  return inherited ? irObject([discriminatorMember(inherited, request)]) : null;
271
277
  }
272
278
  const members = discriminatorAndPropertyMembers(schema, request);
279
+ const propertyTypes = members.flatMap((member) =>
280
+ member.kind === "property" ? [member.type] : [],
281
+ );
273
282
  // As in the original, a null `$defs` throws here (Object.keys) instead of being skipped.
274
283
  if (
275
284
  "$defs" in schema &&
@@ -282,8 +291,9 @@ export function objectType(schema: SchemaObject, request: SchemaRequest): IrType
282
291
  if (valueTypes.length === 0) {
283
292
  return members.length > 0 ? irObject(members) : null;
284
293
  }
294
+ const indexType = withPropertyTypes(unionOf(valueTypes), propertyTypes);
285
295
  const index = irObject([
286
- irStringIndexSignature("key", unionOf(valueTypes), request.context.options.immutable),
296
+ irStringIndexSignature("key", indexType, request.context.options.immutable),
287
297
  ]);
288
298
  return intersectionOf([...(members.length > 0 ? [irObject(members)] : []), index]);
289
299
  }
@@ -0,0 +1,76 @@
1
+ import { SCHEMA_DIALECTS } from "../../../domain/openapi/schema-dialect.js";
2
+ import type {
3
+ ReferenceSchema,
4
+ Schema,
5
+ SchemaObject,
6
+ } from "../../../domain/openapi/schema-object.js";
7
+ import { FIX } from "../../../domain/output-fixes.js";
8
+ import type { SchemaOptions } from "./schema-context.js";
9
+
10
+ /**
11
+ * The `ref-siblings` fix (ADR-021 amendment 2, RC4 G16): in JSON Schema 2020-12 (OpenAPI 3.1 and
12
+ * 3.2) the keywords next to a `$ref` apply too, so `{ $ref: Base, required: [extra], properties:
13
+ * { extra } }` is a `Base` that also has a required `extra`. That is what `allOf: [{ $ref: Base }]`
14
+ * next to the same keywords means, so the schema is typed as that `allOf`, with every rule the
15
+ * generator has for `allOf` and its siblings (`WithRequired`, intersections).
16
+ */
17
+
18
+ /**
19
+ * Keywords that only annotate (JSON Schema 2020-12 meta-data, format-annotation and content
20
+ * vocabularies, OpenAPI fixed fields), or that change no type on their own (`discriminator`
21
+ * without `oneOf`). Next to a `$ref` they stay where they were, so the output keeps the plain
22
+ * reference with its comment. Extension keywords (`x-…`) count as annotations too.
23
+ */
24
+ const ANNOTATION_KEYWORDS: ReadonlySet<string> = new Set([
25
+ "$anchor",
26
+ "$comment",
27
+ "$defs",
28
+ "$dynamicAnchor",
29
+ "$id",
30
+ "$ref",
31
+ "$schema",
32
+ "contentEncoding",
33
+ "contentMediaType",
34
+ "default",
35
+ "deprecated",
36
+ "description",
37
+ "discriminator",
38
+ "example",
39
+ "examples",
40
+ "externalDocs",
41
+ "format",
42
+ "readOnly",
43
+ "title",
44
+ "writeOnly",
45
+ "xml",
46
+ ]);
47
+
48
+ const EXTENSION_PREFIX = "x-";
49
+
50
+ function hasRef(schema: SchemaObject): schema is SchemaObject & ReferenceSchema {
51
+ return typeof (schema as Partial<ReferenceSchema>).$ref === "string";
52
+ }
53
+
54
+ function isTypeKeyword(keyword: string): boolean {
55
+ return !ANNOTATION_KEYWORDS.has(keyword) && !keyword.startsWith(EXTENSION_PREFIX);
56
+ }
57
+
58
+ /**
59
+ * A `$ref` schema as the `allOf` it means, or null where nothing changes: a schema without `$ref`,
60
+ * no fix, an OpenAPI 3.0 document, or no sibling that changes the type. The result has no
61
+ * `$ref`, so the shape rules type it as `enum`, `const` or a composition.
62
+ */
63
+ export function refWithSiblingsAsAllOf(
64
+ schema: SchemaObject,
65
+ options: SchemaOptions,
66
+ ): SchemaObject | null {
67
+ const isApplied =
68
+ options.fixes.has(FIX.REF_SIBLINGS) &&
69
+ options.schemaDialect === SCHEMA_DIALECTS.JSON_SCHEMA_2020_12;
70
+ if (!isApplied || !hasRef(schema) || !Object.keys(schema).some(isTypeKeyword)) {
71
+ return null;
72
+ }
73
+ const { $ref, allOf = [], ...siblings } = schema;
74
+ const members: readonly Schema[] = [{ $ref }, ...allOf];
75
+ return { ...siblings, allOf: members };
76
+ }
@@ -1,4 +1,5 @@
1
1
  import type { IrPropertySignature, IrType } from "../../../domain/ir/nodes.js";
2
+ import type { SchemaDialect } from "../../../domain/openapi/schema-dialect.js";
2
3
  import type { SchemaObject } from "../../../domain/openapi/schema-object.js";
3
4
  import type { OutputFix } from "../../../domain/output-fixes.js";
4
5
 
@@ -27,6 +28,8 @@ export interface SchemaOptions {
27
28
  readonly immutable: boolean;
28
29
  readonly propertiesRequiredByDefault: boolean;
29
30
  readonly readWriteMarkers: boolean;
31
+ /** Whether keywords next to a `$ref` apply (OpenAPI 3.1 and 3.2) or not (3.0). */
32
+ readonly schemaDialect: SchemaDialect;
30
33
  }
31
34
 
32
35
  /**
@@ -7,6 +7,7 @@ import { schemaRefType } from "../ref-pointer/pointer-type.js";
7
7
  import { UNKNOWN_TYPE } from "../shared-types.js";
8
8
  import { compositionType } from "./composition-type.js";
9
9
  import { enumRule } from "./enum-rule.js";
10
+ import { refWithSiblingsAsAllOf } from "./ref-siblings.js";
10
11
  import type { SchemaContext, SchemaLocation } from "./schema-context.js";
11
12
  import type { SchemaRequest, SchemaRule } from "./schema-rule.js";
12
13
 
@@ -31,7 +32,8 @@ const SHAPE_RULES: readonly SchemaRule[] = [
31
32
  },
32
33
  {
33
34
  name: "const",
34
- matches: (schema) => schema.const !== null && schema.const !== undefined,
35
+ // `const: null` is the value null (JSON Schema §6.1.3); the original read it as no `const`.
36
+ matches: (schema) => schema.const !== undefined,
35
37
  transform: (schema) => literalType(schema.const),
36
38
  },
37
39
  enumRule,
@@ -83,8 +85,9 @@ export function transformSchemaShape(
83
85
  return checked.type;
84
86
  }
85
87
  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
+ const shaped = refWithSiblingsAsAllOf(checked.schema, context.options) ?? checked.schema;
89
+ const rule = SHAPE_RULES.find((candidate) => candidate.matches(shaped));
90
+ return rule ? rule.transform(shaped, current) : compositionType(shaped, current);
88
91
  }
89
92
 
90
93
  /** Transform a schema to IR, then apply `postTransform` (the original `transformSchemaObject`). */
@@ -1,13 +1,8 @@
1
- import {
2
- irKeyword,
3
- irObject,
4
- irReference,
5
- irStringIndexSignature,
6
- } from "../../../domain/ir/constructors.js";
7
- import type { IrMember, IrType } from "../../../domain/ir/nodes.js";
1
+ import { irObject, irStringIndexSignature } from "../../../domain/ir/constructors.js";
2
+ import type { IrType } from "../../../domain/ir/nodes.js";
8
3
  import type { Schema, SchemaObject } from "../../../domain/openapi/schema-object.js";
9
4
  import { FIX } from "../../../domain/output-fixes.js";
10
- import { HELPER_TYPES } from "../helper-types.js";
5
+ import { declaredValueTypes } from "../declared-value-types.js";
11
6
  import { UNKNOWN_TYPE } from "../shared-types.js";
12
7
  import { unionOf } from "../type-combinators.js";
13
8
  import type { SchemaRequest } from "./schema-rule.js";
@@ -46,41 +41,6 @@ function isAnySchema(schema: Schema): boolean {
46
41
  return schema === true || (typeof schema === "object" && Object.keys(schema).length === 0);
47
42
  }
48
43
 
49
- function memberValueTypes(member: IrMember): IrType[] {
50
- if (member.kind === "indexSignature") {
51
- return [member.type];
52
- }
53
- return member.isOptional ? [member.type, irKeyword("undefined")] : [member.type];
54
- }
55
-
56
- /**
57
- * The value types a key of the composed type can have, read from its IR: the members of object
58
- * types, through unions and intersections. A reference (a `$ref`, `Omit`, `WithRequired`) or a raw
59
- * type is read with `PropertyValues`. Primitives, literals and arrays declare no keys.
60
- */
61
- function declaredValueTypes(type: IrType, request: SchemaRequest): IrType[] {
62
- switch (type.kind) {
63
- case "object":
64
- return type.members.flatMap(memberValueTypes);
65
- case "union":
66
- case "intersection":
67
- return type.types.flatMap((member) => declaredValueTypes(member, request));
68
- case "reference":
69
- case "indexedAccess":
70
- case "raw":
71
- request.context.footer.requirePropertyValues();
72
- return [irReference(HELPER_TYPES.propertyValues.name, [type])];
73
- case "keyword":
74
- case "stringLiteral":
75
- case "numberLiteral":
76
- case "booleanLiteral":
77
- case "array":
78
- case "tuple":
79
- case "readonly":
80
- return [];
81
- }
82
- }
83
-
84
44
  /**
85
45
  * The index signature object for `unevaluatedProperties`, given the composed type of the other
86
46
  * keywords (null when there is none). Null when the fix is off or the keyword does not apply.
@@ -98,7 +58,7 @@ export function unevaluatedPropertiesType(
98
58
  ? [UNKNOWN_TYPE]
99
59
  : [
100
60
  request.transformNested(unevaluated, request.location, true),
101
- ...(composed === null ? [] : declaredValueTypes(composed, request)),
61
+ ...(composed === null ? [] : declaredValueTypes(composed, request.context.footer)),
102
62
  ];
103
63
  const { immutable } = request.context.options;
104
64
  return irObject([irStringIndexSignature("key", unionOf(valueTypes), immutable)]);
@@ -1,3 +1,4 @@
1
+ import { appendAll } from "../../domain/append-all.js";
1
2
  import type { IrComment, IrPropertySignature } from "../../domain/ir/nodes.js";
2
3
  import { FIX, type OutputFix } from "../../domain/output-fixes.js";
3
4
 
@@ -80,7 +81,10 @@ function valueTagLines(schema: AnnotatedSchema): string[] {
80
81
  lines.push(`@${tag} ${formatValue(value)}`);
81
82
  }
82
83
  if (Array.isArray(schema.examples)) {
83
- lines.push(...schema.examples.map((example: unknown) => `@example ${formatValue(example)}`));
84
+ appendAll(
85
+ lines,
86
+ schema.examples.map((example: unknown) => `@example ${formatValue(example)}`),
87
+ );
84
88
  }
85
89
  return lines;
86
90
  }
@@ -33,6 +33,11 @@ export interface DocumentFooter extends FooterDeclarations {
33
33
  * it comes before any declaration the operation adds, as in the original.
34
34
  */
35
35
  addOperation(build: () => IrPropertySignature): void;
36
+ /**
37
+ * The key in `operations` of the next operation with this (normalized) `operationId`: the ID,
38
+ * or for a repeated ID a numbered one (`OperationKeys`).
39
+ */
40
+ operationKey(operationId: string): string;
36
41
  }
37
42
 
38
43
  /** Debug output for slow parts of a run (`DEBUG=openapi-ts:*`). */
@@ -0,0 +1,17 @@
1
+ import type { DebugGroup, Logger } from "../application/ports/logger.js";
2
+
3
+ /**
4
+ * A logger whose lines name the API they are about. With several APIs in `redocly.yaml`, each is
5
+ * loaded and linted in turn, and a problem line such as "Can't resolve $ref" is the same for
6
+ * each, so without the name the user cannot tell which API it belongs to. The summary of a
7
+ * failed API names it the same way (`API a: …`).
8
+ */
9
+ export function apiLogger(logger: Logger, apiName: string): Logger {
10
+ const prefix = `API ${apiName}: `;
11
+ return {
12
+ debug: (message: string, group?: DebugGroup, durationMs?: number) =>
13
+ logger.debug(`${prefix}${message}`, group, durationMs),
14
+ warn: (message: string) => logger.warn(`${prefix}${message}`),
15
+ error: (message: string) => logger.error(`${prefix}${message}`),
16
+ };
17
+ }
@@ -1,9 +1,10 @@
1
1
  import { kebabCase } from "scule";
2
+ import type { OutputFixName } from "../domain/output-fixes.js";
2
3
  import { WARNING_CODES, warningText } from "../domain/warnings.js";
3
- import { GENERATOR_FLAGS, hostList } from "./cli-arguments.js";
4
- import { cliError } from "./cli-errors.js";
5
- import { resolveLocationUrl } from "./cli-output.js";
6
- import type { RefLimitOptions } from "./ref-limits.js";
4
+ import { GENERATOR_FLAGS, type GeneratorFlags, hostList } from "./cli-arguments.js";
5
+ import { ApiFailure, cliError } from "./cli-errors.js";
6
+ import { fixNamesOf } from "./fix-option.js";
7
+ import { localRootUrl, type RefLimitOptions } from "./ref-limits.js";
7
8
 
8
9
  /**
9
10
  * The settings of one API in `redocly.yaml` (`apis.<name>.x-openapi-ts`). A setting has the name
@@ -20,6 +21,7 @@ export const OUTPUT_SETTING = "output";
20
21
  export const FIX_SETTING = "fix";
21
22
 
22
23
  const LOCAL_REF_ROOT_SETTING = "localRefRoot";
24
+ const LOCAL_ROOT_EXPECTED = "a directory path or a file: URL";
23
25
  const REMOTE_REF_HOSTS_SETTING = "remoteRefHosts";
24
26
 
25
27
  /** `--content-never` is accepted and has no effect, as on the command line. */
@@ -51,32 +53,97 @@ export function unknownSettingWarnings(apiName: string, settings: ApiSettings):
51
53
  );
52
54
  }
53
55
 
56
+ /** The key a setting is written with: camelCase, else kebab-case; undefined when it is absent. */
57
+ function settingKey(settings: ApiSettings, name: string): string | undefined {
58
+ if (name in settings) {
59
+ return name;
60
+ }
61
+ const kebabName = kebabCase(name);
62
+ return kebabName in settings ? kebabName : undefined;
63
+ }
64
+
54
65
  /** The value of a setting in camelCase, else in kebab-case; `undefined` when it is absent. */
55
66
  function settingValue(settings: ApiSettings, name: string): unknown {
56
- return name in settings ? settings[name] : settings[kebabCase(name)];
67
+ const key = settingKey(settings, name);
68
+ return key === undefined ? undefined : settings[key];
57
69
  }
58
70
 
59
71
  function hasSetting(settings: ApiSettings, name: string): boolean {
60
- return name in settings || kebabCase(name) in settings;
72
+ return settingKey(settings, name) !== undefined;
61
73
  }
62
74
 
63
- function invalidSetting(apiName: string, name: string, expected: string): Error {
75
+ /** `CLI_CONFIG_INVALID` for the setting `name` of an API, named as the user wrote it. */
76
+ function invalidSetting(apiName: string, settings: ApiSettings, name: string, expected: string) {
77
+ const key = settingKey(settings, name) ?? kebabCase(name);
64
78
  return cliError(
65
79
  "CLI_CONFIG_INVALID",
66
- `API ${apiName}: \`${kebabCase(name)}\` in x-openapi-ts must be ${expected}`,
80
+ `API ${apiName}: \`${key}\` in x-openapi-ts must be ${expected}`,
67
81
  );
68
82
  }
69
83
 
70
- /** `local-ref-root: dir`, relative to the config file; empty means the config file's directory. */
84
+ /**
85
+ * The boolean flags an API sets, in camelCase or kebab-case; they win over the CLI's flags. A
86
+ * value of another type (`root-types: "true"`) fails with `CLI_CONFIG_INVALID`: ignoring it
87
+ * would generate other types than the config asks for, without a word.
88
+ */
89
+ export function apiFlags(apiName: string, settings: ApiSettings): GeneratorFlags {
90
+ const flags: Partial<Record<(typeof GENERATOR_FLAGS)[number], boolean>> = {};
91
+ for (const name of GENERATOR_FLAGS) {
92
+ const value = settingValue(settings, name);
93
+ if (typeof value === "boolean") {
94
+ flags[name] = value;
95
+ } else if (hasSetting(settings, name)) {
96
+ throw invalidSetting(apiName, settings, name, "true or false");
97
+ }
98
+ }
99
+ return flags;
100
+ }
101
+
102
+ /** The API's `output` file as written; fails with `CLI_CONFIG_INVALID` when it is not text. */
103
+ export function apiOutputOf(apiName: string, settings: ApiSettings): string {
104
+ const output = settings[OUTPUT_SETTING];
105
+ if (typeof output !== "string") {
106
+ throw invalidSetting(apiName, settings, OUTPUT_SETTING, "a file path");
107
+ }
108
+ return output;
109
+ }
110
+
111
+ /**
112
+ * The API's `fix` names, which replace the CLI's `--fix` (ADR-021). An entry that is not text
113
+ * fails with `CLI_CONFIG_INVALID`; an unknown name with `OPTION_FIX_UNKNOWN`, naming the API.
114
+ */
115
+ export function apiFixNames(
116
+ apiName: string,
117
+ settings: ApiSettings,
118
+ ): readonly OutputFixName[] | undefined {
119
+ if (!hasSetting(settings, FIX_SETTING)) {
120
+ return undefined;
121
+ }
122
+ const entries = [settingValue(settings, FIX_SETTING)].flat();
123
+ if (entries.some((entry) => typeof entry !== "string")) {
124
+ throw invalidSetting(apiName, settings, FIX_SETTING, "a list of fix names or a comma list");
125
+ }
126
+ try {
127
+ return fixNamesOf(entries);
128
+ } catch (error) {
129
+ throw new ApiFailure(apiName, error);
130
+ }
131
+ }
132
+
133
+ /**
134
+ * `local-ref-root: dir`, relative to the config file; empty means the config file's directory. A
135
+ * value that is no text or a URL of another protocol fails with `CLI_CONFIG_INVALID`.
136
+ */
71
137
  function localRefRootOf(apiName: string, settings: ApiSettings, configRoot: URL): RefLimitOptions {
72
138
  if (!hasSetting(settings, LOCAL_REF_ROOT_SETTING)) {
73
139
  return {};
74
140
  }
75
141
  const value = settingValue(settings, LOCAL_REF_ROOT_SETTING) ?? "";
76
- if (typeof value !== "string") {
77
- throw invalidSetting(apiName, LOCAL_REF_ROOT_SETTING, "a directory path");
142
+ const localRoot = typeof value === "string" ? localRootUrl(value, configRoot) : undefined;
143
+ if (localRoot === undefined) {
144
+ throw invalidSetting(apiName, settings, LOCAL_REF_ROOT_SETTING, LOCAL_ROOT_EXPECTED);
78
145
  }
79
- return { localRefRoot: resolveLocationUrl(value === "" ? "." : value, configRoot) };
146
+ return { localRefRoot: localRoot };
80
147
  }
81
148
 
82
149
  /** `remote-ref-hosts: [a, b]` or `a,b`; an empty list or value allows no host. */
@@ -87,7 +154,7 @@ function remoteRefHostsOf(apiName: string, settings: ApiSettings): RefLimitOptio
87
154
  const value = settingValue(settings, REMOTE_REF_HOSTS_SETTING) ?? [];
88
155
  const entries = [value].flat();
89
156
  if (entries.some((entry) => typeof entry !== "string")) {
90
- throw invalidSetting(apiName, REMOTE_REF_HOSTS_SETTING, "a host list");
157
+ throw invalidSetting(apiName, settings, REMOTE_REF_HOSTS_SETTING, "a host list");
91
158
  }
92
159
  return { remoteRefHosts: hostList(entries) ?? [] };
93
160
  }