openapi-typesafe 0.0.0 → 1.0.0-rc.1
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.
- package/LICENSE +22 -0
- package/README.md +71 -1
- package/bin/cli.js +4 -0
- package/dist/adapters/node-file-system/node-file-system.cjs +46 -0
- package/dist/adapters/node-file-system/node-file-system.cjs.map +1 -0
- package/dist/adapters/node-file-system/node-file-system.mjs +40 -0
- package/dist/adapters/node-file-system/node-file-system.mjs.map +1 -0
- package/dist/adapters/redocly-loader/alias-limit.cjs +16 -0
- package/dist/adapters/redocly-loader/alias-limit.cjs.map +1 -0
- package/dist/adapters/redocly-loader/alias-limit.mjs +14 -0
- package/dist/adapters/redocly-loader/alias-limit.mjs.map +1 -0
- package/dist/adapters/redocly-loader/allowed-hosts.cjs +42 -0
- package/dist/adapters/redocly-loader/allowed-hosts.cjs.map +1 -0
- package/dist/adapters/redocly-loader/allowed-hosts.mjs +40 -0
- package/dist/adapters/redocly-loader/allowed-hosts.mjs.map +1 -0
- package/dist/adapters/redocly-loader/bundled-ref-repair.cjs +53 -0
- package/dist/adapters/redocly-loader/bundled-ref-repair.cjs.map +1 -0
- package/dist/adapters/redocly-loader/bundled-ref-repair.mjs +51 -0
- package/dist/adapters/redocly-loader/bundled-ref-repair.mjs.map +1 -0
- package/dist/adapters/redocly-loader/malformed-refs.cjs +41 -0
- package/dist/adapters/redocly-loader/malformed-refs.cjs.map +1 -0
- package/dist/adapters/redocly-loader/malformed-refs.mjs +38 -0
- package/dist/adapters/redocly-loader/malformed-refs.mjs.map +1 -0
- package/dist/adapters/redocly-loader/redocly-config-source.cjs +61 -0
- package/dist/adapters/redocly-loader/redocly-config-source.cjs.map +1 -0
- package/dist/adapters/redocly-loader/redocly-config-source.mjs +54 -0
- package/dist/adapters/redocly-loader/redocly-config-source.mjs.map +1 -0
- package/dist/adapters/redocly-loader/redocly-schema-loader.cjs +179 -0
- package/dist/adapters/redocly-loader/redocly-schema-loader.cjs.map +1 -0
- package/dist/adapters/redocly-loader/redocly-schema-loader.mjs +177 -0
- package/dist/adapters/redocly-loader/redocly-schema-loader.mjs.map +1 -0
- package/dist/adapters/redocly-loader/ref-access.cjs +107 -0
- package/dist/adapters/redocly-loader/ref-access.cjs.map +1 -0
- package/dist/adapters/redocly-loader/ref-access.mjs +99 -0
- package/dist/adapters/redocly-loader/ref-access.mjs.map +1 -0
- package/dist/adapters/redocly-loader/ref-holders.cjs +31 -0
- package/dist/adapters/redocly-loader/ref-holders.cjs.map +1 -0
- package/dist/adapters/redocly-loader/ref-holders.mjs +29 -0
- package/dist/adapters/redocly-loader/ref-holders.mjs.map +1 -0
- package/dist/adapters/redocly-loader/remote-fetch.cjs +60 -0
- package/dist/adapters/redocly-loader/remote-fetch.cjs.map +1 -0
- package/dist/adapters/redocly-loader/remote-fetch.mjs +56 -0
- package/dist/adapters/redocly-loader/remote-fetch.mjs.map +1 -0
- package/dist/adapters/redocly-loader/schema-load-errors.cjs +87 -0
- package/dist/adapters/redocly-loader/schema-load-errors.cjs.map +1 -0
- package/dist/adapters/redocly-loader/schema-load-errors.mjs +77 -0
- package/dist/adapters/redocly-loader/schema-load-errors.mjs.map +1 -0
- package/dist/adapters/redocly-loader/schema-source.cjs +104 -0
- package/dist/adapters/redocly-loader/schema-source.cjs.map +1 -0
- package/dist/adapters/redocly-loader/schema-source.mjs +98 -0
- package/dist/adapters/redocly-loader/schema-source.mjs.map +1 -0
- package/dist/adapters/redocly-loader/unsupported-keys.cjs +62 -0
- package/dist/adapters/redocly-loader/unsupported-keys.cjs.map +1 -0
- package/dist/adapters/redocly-loader/unsupported-keys.mjs +58 -0
- package/dist/adapters/redocly-loader/unsupported-keys.mjs.map +1 -0
- package/dist/adapters/terminal-logger/terminal-logger.cjs +67 -0
- package/dist/adapters/terminal-logger/terminal-logger.cjs.map +1 -0
- package/dist/adapters/terminal-logger/terminal-logger.mjs +59 -0
- package/dist/adapters/terminal-logger/terminal-logger.mjs.map +1 -0
- package/dist/adapters/type-ast-bridge/footer-nodes.cjs +21 -0
- package/dist/adapters/type-ast-bridge/footer-nodes.cjs.map +1 -0
- package/dist/adapters/type-ast-bridge/footer-nodes.mjs +17 -0
- package/dist/adapters/type-ast-bridge/footer-nodes.mjs.map +1 -0
- package/dist/adapters/type-ast-bridge/ir-declarations-to-typescript.cjs +75 -0
- package/dist/adapters/type-ast-bridge/ir-declarations-to-typescript.cjs.map +1 -0
- package/dist/adapters/type-ast-bridge/ir-declarations-to-typescript.mjs +71 -0
- package/dist/adapters/type-ast-bridge/ir-declarations-to-typescript.mjs.map +1 -0
- package/dist/adapters/type-ast-bridge/ir-to-typescript.cjs +148 -0
- package/dist/adapters/type-ast-bridge/ir-to-typescript.cjs.map +1 -0
- package/dist/adapters/type-ast-bridge/ir-to-typescript.mjs +142 -0
- package/dist/adapters/type-ast-bridge/ir-to-typescript.mjs.map +1 -0
- package/dist/adapters/type-ast-bridge/lazy-node.cjs +23 -0
- package/dist/adapters/type-ast-bridge/lazy-node.cjs.map +1 -0
- package/dist/adapters/type-ast-bridge/lazy-node.mjs +21 -0
- package/dist/adapters/type-ast-bridge/lazy-node.mjs.map +1 -0
- package/dist/adapters/type-ast-bridge/load-typescript.cjs +57 -0
- package/dist/adapters/type-ast-bridge/load-typescript.cjs.map +1 -0
- package/dist/adapters/type-ast-bridge/load-typescript.mjs +51 -0
- package/dist/adapters/type-ast-bridge/load-typescript.mjs.map +1 -0
- package/dist/adapters/type-ast-bridge/print-typescript.cjs +21 -0
- package/dist/adapters/type-ast-bridge/print-typescript.cjs.map +1 -0
- package/dist/adapters/type-ast-bridge/print-typescript.mjs +19 -0
- package/dist/adapters/type-ast-bridge/print-typescript.mjs.map +1 -0
- package/dist/adapters/type-ast-bridge/typescript-raw-text.cjs +33 -0
- package/dist/adapters/type-ast-bridge/typescript-raw-text.cjs.map +1 -0
- package/dist/adapters/type-ast-bridge/typescript-raw-text.mjs +29 -0
- package/dist/adapters/type-ast-bridge/typescript-raw-text.mjs.map +1 -0
- package/dist/adapters/type-ast-bridge/typescript-to-ir.cjs +210 -0
- package/dist/adapters/type-ast-bridge/typescript-to-ir.cjs.map +1 -0
- package/dist/adapters/type-ast-bridge/typescript-to-ir.mjs +207 -0
- package/dist/adapters/type-ast-bridge/typescript-to-ir.mjs.map +1 -0
- package/dist/api/ast-to-string.cjs +39 -0
- package/dist/api/ast-to-string.cjs.map +1 -0
- package/dist/api/ast-to-string.mjs +37 -0
- package/dist/api/ast-to-string.mjs.map +1 -0
- package/dist/api/comment-header.cjs +11 -0
- package/dist/api/comment-header.cjs.map +1 -0
- package/dist/api/comment-header.mjs +9 -0
- package/dist/api/comment-header.mjs.map +1 -0
- package/dist/api/default-ports.cjs +38 -0
- package/dist/api/default-ports.cjs.map +1 -0
- package/dist/api/default-ports.mjs +28 -0
- package/dist/api/default-ports.mjs.map +1 -0
- package/dist/api/discriminator-conflict-warnings.cjs +25 -0
- package/dist/api/discriminator-conflict-warnings.cjs.map +1 -0
- package/dist/api/discriminator-conflict-warnings.mjs +23 -0
- package/dist/api/discriminator-conflict-warnings.mjs.map +1 -0
- package/dist/api/discriminator-enum-names.cjs +19 -0
- package/dist/api/discriminator-enum-names.cjs.map +1 -0
- package/dist/api/discriminator-enum-names.mjs +17 -0
- package/dist/api/discriminator-enum-names.mjs.map +1 -0
- package/dist/api/discriminator-enum-parent.cjs +59 -0
- package/dist/api/discriminator-enum-parent.cjs.map +1 -0
- package/dist/api/discriminator-enum-parent.mjs +57 -0
- package/dist/api/discriminator-enum-parent.mjs.map +1 -0
- package/dist/api/discriminator-enum.cjs +69 -0
- package/dist/api/discriminator-enum.cjs.map +1 -0
- package/dist/api/discriminator-enum.mjs +66 -0
- package/dist/api/discriminator-enum.mjs.map +1 -0
- package/dist/api/discriminator-other-owners.cjs +67 -0
- package/dist/api/discriminator-other-owners.cjs.map +1 -0
- package/dist/api/discriminator-other-owners.mjs +64 -0
- package/dist/api/discriminator-other-owners.mjs.map +1 -0
- package/dist/api/discriminator-patch.cjs +88 -0
- package/dist/api/discriminator-patch.cjs.map +1 -0
- package/dist/api/discriminator-patch.mjs +82 -0
- package/dist/api/discriminator-patch.mjs.map +1 -0
- package/dist/api/discriminator-scan.cjs +153 -0
- package/dist/api/discriminator-scan.cjs.map +1 -0
- package/dist/api/discriminator-scan.mjs +150 -0
- package/dist/api/discriminator-scan.mjs.map +1 -0
- package/dist/api/document-declarations.cjs +28 -0
- package/dist/api/document-declarations.cjs.map +1 -0
- package/dist/api/document-declarations.mjs +26 -0
- package/dist/api/document-declarations.mjs.map +1 -0
- package/dist/api/document-refs.cjs +53 -0
- package/dist/api/document-refs.cjs.map +1 -0
- package/dist/api/document-refs.mjs +50 -0
- package/dist/api/document-refs.mjs.map +1 -0
- package/dist/api/document-run.cjs +122 -0
- package/dist/api/document-run.cjs.map +1 -0
- package/dist/api/document-run.mjs +116 -0
- package/dist/api/document-run.mjs.map +1 -0
- package/dist/api/enum-values-warnings.cjs +16 -0
- package/dist/api/enum-values-warnings.cjs.map +1 -0
- package/dist/api/enum-values-warnings.mjs +14 -0
- package/dist/api/enum-values-warnings.mjs.map +1 -0
- package/dist/api/footer-entry.cjs +18 -0
- package/dist/api/footer-entry.cjs.map +1 -0
- package/dist/api/footer-entry.mjs +15 -0
- package/dist/api/footer-entry.mjs.map +1 -0
- package/dist/api/footer-sink.cjs +53 -0
- package/dist/api/footer-sink.cjs.map +1 -0
- package/dist/api/footer-sink.mjs +51 -0
- package/dist/api/footer-sink.mjs.map +1 -0
- package/dist/api/legacy-callback-warning.cjs +25 -0
- package/dist/api/legacy-callback-warning.cjs.map +1 -0
- package/dist/api/legacy-callback-warning.mjs +22 -0
- package/dist/api/legacy-callback-warning.mjs.map +1 -0
- package/dist/api/legacy-ts-helpers.cjs +203 -0
- package/dist/api/legacy-ts-helpers.cjs.map +1 -0
- package/dist/api/legacy-ts-helpers.mjs +187 -0
- package/dist/api/legacy-ts-helpers.mjs.map +1 -0
- package/dist/api/legacy-utils.cjs +65 -0
- package/dist/api/legacy-utils.cjs.map +1 -0
- package/dist/api/legacy-utils.mjs +50 -0
- package/dist/api/legacy-utils.mjs.map +1 -0
- package/dist/api/openapi-ts.cjs +40 -0
- package/dist/api/openapi-ts.cjs.map +1 -0
- package/dist/api/openapi-ts.mjs +34 -0
- package/dist/api/openapi-ts.mjs.map +1 -0
- package/dist/api/path-template-warnings.cjs +21 -0
- package/dist/api/path-template-warnings.cjs.map +1 -0
- package/dist/api/path-template-warnings.mjs +19 -0
- package/dist/api/path-template-warnings.mjs.map +1 -0
- package/dist/api/schema-callbacks.cjs +140 -0
- package/dist/api/schema-callbacks.cjs.map +1 -0
- package/dist/api/schema-callbacks.mjs +136 -0
- package/dist/api/schema-callbacks.mjs.map +1 -0
- package/dist/api/string-to-ast.cjs +21 -0
- package/dist/api/string-to-ast.cjs.map +1 -0
- package/dist/api/string-to-ast.mjs +18 -0
- package/dist/api/string-to-ast.mjs.map +1 -0
- package/dist/api/transform-context.cjs +84 -0
- package/dist/api/transform-context.cjs.map +1 -0
- package/dist/api/transform-context.mjs +67 -0
- package/dist/api/transform-context.mjs.map +1 -0
- package/dist/api/transform-schema.cjs +80 -0
- package/dist/api/transform-schema.cjs.map +1 -0
- package/dist/api/transform-schema.mjs +75 -0
- package/dist/api/transform-schema.mjs.map +1 -0
- package/dist/api/type-helpers.cjs +85 -0
- package/dist/api/type-helpers.cjs.map +1 -0
- package/dist/api/type-helpers.mjs +66 -0
- package/dist/api/type-helpers.mjs.map +1 -0
- package/dist/api/unsupported-feature-warnings.cjs +22 -0
- package/dist/api/unsupported-feature-warnings.cjs.map +1 -0
- package/dist/api/unsupported-feature-warnings.mjs +20 -0
- package/dist/api/unsupported-feature-warnings.mjs.map +1 -0
- package/dist/application/print/comment-writer.cjs +95 -0
- package/dist/application/print/comment-writer.cjs.map +1 -0
- package/dist/application/print/comment-writer.mjs +93 -0
- package/dist/application/print/comment-writer.mjs.map +1 -0
- package/dist/application/print/declaration-printer.cjs +83 -0
- package/dist/application/print/declaration-printer.cjs.map +1 -0
- package/dist/application/print/declaration-printer.mjs +81 -0
- package/dist/application/print/declaration-printer.mjs.map +1 -0
- package/dist/application/print/literal-text.cjs +52 -0
- package/dist/application/print/literal-text.cjs.map +1 -0
- package/dist/application/print/literal-text.mjs +48 -0
- package/dist/application/print/literal-text.mjs.map +1 -0
- package/dist/application/print/print-nodes.cjs +38 -0
- package/dist/application/print/print-nodes.cjs.map +1 -0
- package/dist/application/print/print-nodes.mjs +36 -0
- package/dist/application/print/print-nodes.mjs.map +1 -0
- package/dist/application/print/print-options.cjs +6 -0
- package/dist/application/print/print-options.cjs.map +1 -0
- package/dist/application/print/print-options.mjs +4 -0
- package/dist/application/print/print-options.mjs.map +1 -0
- package/dist/application/print/text-writer.cjs +63 -0
- package/dist/application/print/text-writer.cjs.map +1 -0
- package/dist/application/print/text-writer.mjs +60 -0
- package/dist/application/print/text-writer.mjs.map +1 -0
- package/dist/application/print/type-printer.cjs +219 -0
- package/dist/application/print/type-printer.cjs.map +1 -0
- package/dist/application/print/type-printer.mjs +215 -0
- package/dist/application/print/type-printer.mjs.map +1 -0
- package/dist/application/stack-overflow.cjs +36 -0
- package/dist/application/stack-overflow.cjs.map +1 -0
- package/dist/application/stack-overflow.mjs +31 -0
- package/dist/application/stack-overflow.mjs.map +1 -0
- package/dist/application/transform/document/assignability.cjs +144 -0
- package/dist/application/transform/document/assignability.cjs.map +1 -0
- package/dist/application/transform/document/assignability.mjs +138 -0
- package/dist/application/transform/document/assignability.mjs.map +1 -0
- package/dist/application/transform/document/components.cjs +104 -0
- package/dist/application/transform/document/components.cjs.map +1 -0
- package/dist/application/transform/document/components.mjs +102 -0
- package/dist/application/transform/document/components.mjs.map +1 -0
- package/dist/application/transform/document/declared-types.cjs +66 -0
- package/dist/application/transform/document/declared-types.cjs.map +1 -0
- package/dist/application/transform/document/declared-types.mjs +63 -0
- package/dist/application/transform/document/declared-types.mjs.map +1 -0
- package/dist/application/transform/document/defs-root.cjs +18 -0
- package/dist/application/transform/document/defs-root.cjs.map +1 -0
- package/dist/application/transform/document/defs-root.mjs +16 -0
- package/dist/application/transform/document/defs-root.mjs.map +1 -0
- package/dist/application/transform/document/document-member.cjs +13 -0
- package/dist/application/transform/document/document-member.cjs.map +1 -0
- package/dist/application/transform/document/document-member.mjs +11 -0
- package/dist/application/transform/document/document-member.mjs.map +1 -0
- package/dist/application/transform/document/document.cjs +109 -0
- package/dist/application/transform/document/document.cjs.map +1 -0
- package/dist/application/transform/document/document.mjs +106 -0
- package/dist/application/transform/document/document.mjs.map +1 -0
- package/dist/application/transform/document/exploded-query.cjs +46 -0
- package/dist/application/transform/document/exploded-query.cjs.map +1 -0
- package/dist/application/transform/document/exploded-query.mjs +43 -0
- package/dist/application/transform/document/exploded-query.mjs.map +1 -0
- package/dist/application/transform/document/global-type-references.cjs +63 -0
- package/dist/application/transform/document/global-type-references.cjs.map +1 -0
- package/dist/application/transform/document/global-type-references.mjs +61 -0
- package/dist/application/transform/document/global-type-references.mjs.map +1 -0
- package/dist/application/transform/document/header.cjs +27 -0
- package/dist/application/transform/document/header.cjs.map +1 -0
- package/dist/application/transform/document/header.mjs +25 -0
- package/dist/application/transform/document/header.mjs.map +1 -0
- package/dist/application/transform/document/kept-deprecated.cjs +96 -0
- package/dist/application/transform/document/kept-deprecated.cjs.map +1 -0
- package/dist/application/transform/document/kept-deprecated.mjs +94 -0
- package/dist/application/transform/document/kept-deprecated.mjs.map +1 -0
- package/dist/application/transform/document/list-assignability.cjs +54 -0
- package/dist/application/transform/document/list-assignability.cjs.map +1 -0
- package/dist/application/transform/document/list-assignability.mjs +52 -0
- package/dist/application/transform/document/list-assignability.mjs.map +1 -0
- package/dist/application/transform/document/media-type.cjs +42 -0
- package/dist/application/transform/document/media-type.cjs.map +1 -0
- package/dist/application/transform/document/media-type.mjs +38 -0
- package/dist/application/transform/document/media-type.mjs.map +1 -0
- package/dist/application/transform/document/operation.cjs +45 -0
- package/dist/application/transform/document/operation.cjs.map +1 -0
- package/dist/application/transform/document/operation.mjs +43 -0
- package/dist/application/transform/document/operation.mjs.map +1 -0
- package/dist/application/transform/document/parameter.cjs +25 -0
- package/dist/application/transform/document/parameter.cjs.map +1 -0
- package/dist/application/transform/document/parameter.mjs +23 -0
- package/dist/application/transform/document/parameter.mjs.map +1 -0
- package/dist/application/transform/document/parameters.cjs +146 -0
- package/dist/application/transform/document/parameters.cjs.map +1 -0
- package/dist/application/transform/document/parameters.mjs +144 -0
- package/dist/application/transform/document/parameters.mjs.map +1 -0
- package/dist/application/transform/document/path-item.cjs +82 -0
- package/dist/application/transform/document/path-item.cjs.map +1 -0
- package/dist/application/transform/document/path-item.mjs +80 -0
- package/dist/application/transform/document/path-item.mjs.map +1 -0
- package/dist/application/transform/document/path-key-overlaps.cjs +107 -0
- package/dist/application/transform/document/path-key-overlaps.cjs.map +1 -0
- package/dist/application/transform/document/path-key-overlaps.mjs +105 -0
- package/dist/application/transform/document/path-key-overlaps.mjs.map +1 -0
- package/dist/application/transform/document/path-template-replace.cjs +48 -0
- package/dist/application/transform/document/path-template-replace.cjs.map +1 -0
- package/dist/application/transform/document/path-template-replace.mjs +45 -0
- package/dist/application/transform/document/path-template-replace.mjs.map +1 -0
- package/dist/application/transform/document/paths-enum.cjs +75 -0
- package/dist/application/transform/document/paths-enum.cjs.map +1 -0
- package/dist/application/transform/document/paths-enum.mjs +72 -0
- package/dist/application/transform/document/paths-enum.mjs.map +1 -0
- package/dist/application/transform/document/paths.cjs +153 -0
- package/dist/application/transform/document/paths.cjs.map +1 -0
- package/dist/application/transform/document/paths.mjs +149 -0
- package/dist/application/transform/document/paths.mjs.map +1 -0
- package/dist/application/transform/document/request-body.cjs +36 -0
- package/dist/application/transform/document/request-body.cjs.map +1 -0
- package/dist/application/transform/document/request-body.mjs +34 -0
- package/dist/application/transform/document/request-body.mjs.map +1 -0
- package/dist/application/transform/document/response.cjs +59 -0
- package/dist/application/transform/document/response.cjs.map +1 -0
- package/dist/application/transform/document/response.mjs +57 -0
- package/dist/application/transform/document/response.mjs.map +1 -0
- package/dist/application/transform/document/responses.cjs +23 -0
- package/dist/application/transform/document/responses.cjs.map +1 -0
- package/dist/application/transform/document/responses.mjs +21 -0
- package/dist/application/transform/document/responses.mjs.map +1 -0
- package/dist/application/transform/document/root-type-aliases.cjs +70 -0
- package/dist/application/transform/document/root-type-aliases.cjs.map +1 -0
- package/dist/application/transform/document/root-type-aliases.mjs +67 -0
- package/dist/application/transform/document/root-type-aliases.mjs.map +1 -0
- package/dist/application/transform/document/template-key-match.cjs +128 -0
- package/dist/application/transform/document/template-key-match.cjs.map +1 -0
- package/dist/application/transform/document/template-key-match.mjs +125 -0
- package/dist/application/transform/document/template-key-match.mjs.map +1 -0
- package/dist/application/transform/document/type-assignability.cjs +192 -0
- package/dist/application/transform/document/type-assignability.cjs.map +1 -0
- package/dist/application/transform/document/type-assignability.mjs +190 -0
- package/dist/application/transform/document/type-assignability.mjs.map +1 -0
- package/dist/application/transform/document/type-key.cjs +70 -0
- package/dist/application/transform/document/type-key.cjs.map +1 -0
- package/dist/application/transform/document/type-key.mjs +68 -0
- package/dist/application/transform/document/type-key.mjs.map +1 -0
- package/dist/application/transform/document/type-resolution.cjs +131 -0
- package/dist/application/transform/document/type-resolution.cjs.map +1 -0
- package/dist/application/transform/document/type-resolution.mjs +125 -0
- package/dist/application/transform/document/type-resolution.mjs.map +1 -0
- package/dist/application/transform/document/webhooks.cjs +19 -0
- package/dist/application/transform/document/webhooks.cjs.map +1 -0
- package/dist/application/transform/document/webhooks.mjs +17 -0
- package/dist/application/transform/document/webhooks.mjs.map +1 -0
- package/dist/application/transform/document-entries.cjs +17 -0
- package/dist/application/transform/document-entries.cjs.map +1 -0
- package/dist/application/transform/document-entries.mjs +14 -0
- package/dist/application/transform/document-entries.mjs.map +1 -0
- package/dist/application/transform/footer/document-footer.cjs +150 -0
- package/dist/application/transform/footer/document-footer.cjs.map +1 -0
- package/dist/application/transform/footer/document-footer.mjs +148 -0
- package/dist/application/transform/footer/document-footer.mjs.map +1 -0
- package/dist/application/transform/footer/enum-naming.cjs +138 -0
- package/dist/application/transform/footer/enum-naming.cjs.map +1 -0
- package/dist/application/transform/footer/enum-naming.mjs +131 -0
- package/dist/application/transform/footer/enum-naming.mjs.map +1 -0
- package/dist/application/transform/footer/enum-values-check.cjs +129 -0
- package/dist/application/transform/footer/enum-values-check.cjs.map +1 -0
- package/dist/application/transform/footer/enum-values-check.mjs +127 -0
- package/dist/application/transform/footer/enum-values-check.mjs.map +1 -0
- package/dist/application/transform/footer/evaluation.cjs +33 -0
- package/dist/application/transform/footer/evaluation.cjs.map +1 -0
- package/dist/application/transform/footer/evaluation.mjs +26 -0
- package/dist/application/transform/footer/evaluation.mjs.map +1 -0
- package/dist/application/transform/footer/shared-enum-names.cjs +60 -0
- package/dist/application/transform/footer/shared-enum-names.cjs.map +1 -0
- package/dist/application/transform/footer/shared-enum-names.mjs +57 -0
- package/dist/application/transform/footer/shared-enum-names.mjs.map +1 -0
- package/dist/application/transform/footer/type-evaluation.cjs +246 -0
- package/dist/application/transform/footer/type-evaluation.cjs.map +1 -0
- package/dist/application/transform/footer/type-evaluation.mjs +244 -0
- package/dist/application/transform/footer/type-evaluation.mjs.map +1 -0
- package/dist/application/transform/footer/type-rules.cjs +172 -0
- package/dist/application/transform/footer/type-rules.cjs.map +1 -0
- package/dist/application/transform/footer/type-rules.mjs +166 -0
- package/dist/application/transform/footer/type-rules.mjs.map +1 -0
- package/dist/application/transform/helper-types.cjs +68 -0
- package/dist/application/transform/helper-types.cjs.map +1 -0
- package/dist/application/transform/helper-types.mjs +65 -0
- package/dist/application/transform/helper-types.mjs.map +1 -0
- package/dist/application/transform/literal-type.cjs +36 -0
- package/dist/application/transform/literal-type.cjs.map +1 -0
- package/dist/application/transform/literal-type.mjs +34 -0
- package/dist/application/transform/literal-type.mjs.map +1 -0
- package/dist/application/transform/numbered-names.cjs +18 -0
- package/dist/application/transform/numbered-names.cjs.map +1 -0
- package/dist/application/transform/numbered-names.mjs +16 -0
- package/dist/application/transform/numbered-names.mjs.map +1 -0
- package/dist/application/transform/ref-pointer/generated-location.cjs +138 -0
- package/dist/application/transform/ref-pointer/generated-location.cjs.map +1 -0
- package/dist/application/transform/ref-pointer/generated-location.mjs +136 -0
- package/dist/application/transform/ref-pointer/generated-location.mjs.map +1 -0
- package/dist/application/transform/ref-pointer/generated-shape.cjs +171 -0
- package/dist/application/transform/ref-pointer/generated-shape.cjs.map +1 -0
- package/dist/application/transform/ref-pointer/generated-shape.mjs +162 -0
- package/dist/application/transform/ref-pointer/generated-shape.mjs.map +1 -0
- package/dist/application/transform/ref-pointer/inline-cycles.cjs +44 -0
- package/dist/application/transform/ref-pointer/inline-cycles.cjs.map +1 -0
- package/dist/application/transform/ref-pointer/inline-cycles.mjs +42 -0
- package/dist/application/transform/ref-pointer/inline-cycles.mjs.map +1 -0
- package/dist/application/transform/ref-pointer/original-index.cjs +62 -0
- package/dist/application/transform/ref-pointer/original-index.cjs.map +1 -0
- package/dist/application/transform/ref-pointer/original-index.mjs +60 -0
- package/dist/application/transform/ref-pointer/original-index.mjs.map +1 -0
- package/dist/application/transform/ref-pointer/pointer-type.cjs +60 -0
- package/dist/application/transform/ref-pointer/pointer-type.cjs.map +1 -0
- package/dist/application/transform/ref-pointer/pointer-type.mjs +57 -0
- package/dist/application/transform/ref-pointer/pointer-type.mjs.map +1 -0
- package/dist/application/transform/ref-pointer/pointer-walk.cjs +66 -0
- package/dist/application/transform/ref-pointer/pointer-walk.cjs.map +1 -0
- package/dist/application/transform/ref-pointer/pointer-walk.mjs +56 -0
- package/dist/application/transform/ref-pointer/pointer-walk.mjs.map +1 -0
- package/dist/application/transform/ref-pointer/typed-walk.cjs +124 -0
- package/dist/application/transform/ref-pointer/typed-walk.cjs.map +1 -0
- package/dist/application/transform/ref-pointer/typed-walk.mjs +122 -0
- package/dist/application/transform/ref-pointer/typed-walk.mjs.map +1 -0
- package/dist/application/transform/ref-type.cjs +62 -0
- package/dist/application/transform/ref-type.cjs.map +1 -0
- package/dist/application/transform/ref-type.mjs +55 -0
- package/dist/application/transform/ref-type.mjs.map +1 -0
- package/dist/application/transform/schema/access-flags.cjs +38 -0
- package/dist/application/transform/schema/access-flags.cjs.map +1 -0
- package/dist/application/transform/schema/access-flags.mjs +36 -0
- package/dist/application/transform/schema/access-flags.mjs.map +1 -0
- package/dist/application/transform/schema/array-type.cjs +136 -0
- package/dist/application/transform/schema/array-type.cjs.map +1 -0
- package/dist/application/transform/schema/array-type.mjs +134 -0
- package/dist/application/transform/schema/array-type.mjs.map +1 -0
- package/dist/application/transform/schema/composition-type.cjs +142 -0
- package/dist/application/transform/schema/composition-type.cjs.map +1 -0
- package/dist/application/transform/schema/composition-type.mjs +140 -0
- package/dist/application/transform/schema/composition-type.mjs.map +1 -0
- package/dist/application/transform/schema/core-type.cjs +86 -0
- package/dist/application/transform/schema/core-type.cjs.map +1 -0
- package/dist/application/transform/schema/core-type.mjs +84 -0
- package/dist/application/transform/schema/core-type.mjs.map +1 -0
- package/dist/application/transform/schema/discriminated-union.cjs +30 -0
- package/dist/application/transform/schema/discriminated-union.cjs.map +1 -0
- package/dist/application/transform/schema/discriminated-union.mjs +27 -0
- package/dist/application/transform/schema/discriminated-union.mjs.map +1 -0
- package/dist/application/transform/schema/discriminator-property.cjs +22 -0
- package/dist/application/transform/schema/discriminator-property.cjs.map +1 -0
- package/dist/application/transform/schema/discriminator-property.mjs +20 -0
- package/dist/application/transform/schema/discriminator-property.mjs.map +1 -0
- package/dist/application/transform/schema/enum-rule.cjs +163 -0
- package/dist/application/transform/schema/enum-rule.cjs.map +1 -0
- package/dist/application/transform/schema/enum-rule.mjs +160 -0
- package/dist/application/transform/schema/enum-rule.mjs.map +1 -0
- package/dist/application/transform/schema/inherited-discriminator.cjs +29 -0
- package/dist/application/transform/schema/inherited-discriminator.cjs.map +1 -0
- package/dist/application/transform/schema/inherited-discriminator.mjs +26 -0
- package/dist/application/transform/schema/inherited-discriminator.mjs.map +1 -0
- package/dist/application/transform/schema/object-type.cjs +186 -0
- package/dist/application/transform/schema/object-type.cjs.map +1 -0
- package/dist/application/transform/schema/object-type.mjs +182 -0
- package/dist/application/transform/schema/object-type.mjs.map +1 -0
- package/dist/application/transform/schema/presence-members.cjs +59 -0
- package/dist/application/transform/schema/presence-members.cjs.map +1 -0
- package/dist/application/transform/schema/presence-members.mjs +57 -0
- package/dist/application/transform/schema/presence-members.mjs.map +1 -0
- package/dist/application/transform/schema/required-variants.cjs +45 -0
- package/dist/application/transform/schema/required-variants.cjs.map +1 -0
- package/dist/application/transform/schema/required-variants.mjs +42 -0
- package/dist/application/transform/schema/required-variants.mjs.map +1 -0
- package/dist/application/transform/schema/schema-transform.cjs +72 -0
- package/dist/application/transform/schema/schema-transform.cjs.map +1 -0
- package/dist/application/transform/schema/schema-transform.mjs +68 -0
- package/dist/application/transform/schema/schema-transform.mjs.map +1 -0
- package/dist/application/transform/schema/unevaluated-properties.cjs +61 -0
- package/dist/application/transform/schema/unevaluated-properties.cjs.map +1 -0
- package/dist/application/transform/schema/unevaluated-properties.mjs +59 -0
- package/dist/application/transform/schema/unevaluated-properties.mjs.map +1 -0
- package/dist/application/transform/schema-comment.cjs +130 -0
- package/dist/application/transform/schema-comment.cjs.map +1 -0
- package/dist/application/transform/schema-comment.mjs +125 -0
- package/dist/application/transform/schema-comment.mjs.map +1 -0
- package/dist/application/transform/shared-types.cjs +8 -0
- package/dist/application/transform/shared-types.cjs.map +1 -0
- package/dist/application/transform/shared-types.mjs +6 -0
- package/dist/application/transform/shared-types.mjs.map +1 -0
- package/dist/application/transform/type-combinators.cjs +49 -0
- package/dist/application/transform/type-combinators.cjs.map +1 -0
- package/dist/application/transform/type-combinators.mjs +42 -0
- package/dist/application/transform/type-combinators.mjs.map +1 -0
- package/dist/cli/cli-arguments.cjs +145 -0
- package/dist/cli/cli-arguments.cjs.map +1 -0
- package/dist/cli/cli-arguments.mjs +137 -0
- package/dist/cli/cli-arguments.mjs.map +1 -0
- package/dist/cli/cli-errors.cjs +81 -0
- package/dist/cli/cli-errors.cjs.map +1 -0
- package/dist/cli/cli-errors.mjs +77 -0
- package/dist/cli/cli-errors.mjs.map +1 -0
- package/dist/cli/cli-output.cjs +42 -0
- package/dist/cli/cli-output.cjs.map +1 -0
- package/dist/cli/cli-output.mjs +35 -0
- package/dist/cli/cli-output.mjs.map +1 -0
- package/dist/cli/docs-links.cjs +6 -0
- package/dist/cli/docs-links.cjs.map +1 -0
- package/dist/cli/docs-links.mjs +4 -0
- package/dist/cli/docs-links.mjs.map +1 -0
- package/dist/cli/fix-option.cjs +19 -0
- package/dist/cli/fix-option.cjs.map +1 -0
- package/dist/cli/fix-option.mjs +16 -0
- package/dist/cli/fix-option.mjs.map +1 -0
- package/dist/cli/help-text.cjs +44 -0
- package/dist/cli/help-text.cjs.map +1 -0
- package/dist/cli/help-text.mjs +42 -0
- package/dist/cli/help-text.mjs.map +1 -0
- package/dist/cli/main.cjs +67 -0
- package/dist/cli/main.cjs.map +1 -0
- package/dist/cli/main.d.cts +2 -0
- package/dist/cli/main.d.mts +2 -0
- package/dist/cli/main.d.ts +2 -0
- package/dist/cli/main.mjs +59 -0
- package/dist/cli/main.mjs.map +1 -0
- package/dist/cli/redocly-apis.cjs +69 -0
- package/dist/cli/redocly-apis.cjs.map +1 -0
- package/dist/cli/redocly-apis.mjs +66 -0
- package/dist/cli/redocly-apis.mjs.map +1 -0
- package/dist/cli/ref-limits.cjs +14 -0
- package/dist/cli/ref-limits.cjs.map +1 -0
- package/dist/cli/ref-limits.mjs +12 -0
- package/dist/cli/ref-limits.mjs.map +1 -0
- package/dist/cli/run-cli.cjs +113 -0
- package/dist/cli/run-cli.cjs.map +1 -0
- package/dist/cli/run-cli.mjs +111 -0
- package/dist/cli/run-cli.mjs.map +1 -0
- package/dist/domain/assert-never.cjs +8 -0
- package/dist/domain/assert-never.cjs.map +1 -0
- package/dist/domain/assert-never.mjs +6 -0
- package/dist/domain/assert-never.mjs.map +1 -0
- package/dist/domain/errors.cjs +52 -0
- package/dist/domain/errors.cjs.map +1 -0
- package/dist/domain/errors.mjs +48 -0
- package/dist/domain/errors.mjs.map +1 -0
- package/dist/domain/ir/constructors.cjs +93 -0
- package/dist/domain/ir/constructors.cjs.map +1 -0
- package/dist/domain/ir/constructors.mjs +74 -0
- package/dist/domain/ir/constructors.mjs.map +1 -0
- package/dist/domain/ir/identifier-text.cjs +29 -0
- package/dist/domain/ir/identifier-text.cjs.map +1 -0
- package/dist/domain/ir/identifier-text.mjs +25 -0
- package/dist/domain/ir/identifier-text.mjs.map +1 -0
- package/dist/domain/ir/newer-identifier-ranges.cjs +109 -0
- package/dist/domain/ir/newer-identifier-ranges.cjs.map +1 -0
- package/dist/domain/ir/newer-identifier-ranges.mjs +106 -0
- package/dist/domain/ir/newer-identifier-ranges.mjs.map +1 -0
- package/dist/domain/ir/normalize.cjs +32 -0
- package/dist/domain/ir/normalize.cjs.map +1 -0
- package/dist/domain/ir/normalize.mjs +29 -0
- package/dist/domain/ir/normalize.mjs.map +1 -0
- package/dist/domain/ir/property-name.cjs +19 -0
- package/dist/domain/ir/property-name.cjs.map +1 -0
- package/dist/domain/ir/property-name.mjs +16 -0
- package/dist/domain/ir/property-name.mjs.map +1 -0
- package/dist/domain/ir/raw-text-escapes.cjs +25 -0
- package/dist/domain/ir/raw-text-escapes.cjs.map +1 -0
- package/dist/domain/ir/raw-text-escapes.mjs +22 -0
- package/dist/domain/ir/raw-text-escapes.mjs.map +1 -0
- package/dist/domain/openapi/admitted-values.cjs +75 -0
- package/dist/domain/openapi/admitted-values.cjs.map +1 -0
- package/dist/domain/openapi/admitted-values.mjs +72 -0
- package/dist/domain/openapi/admitted-values.mjs.map +1 -0
- package/dist/domain/openapi/alias-expansion.cjs +50 -0
- package/dist/domain/openapi/alias-expansion.cjs.map +1 -0
- package/dist/domain/openapi/alias-expansion.mjs +45 -0
- package/dist/domain/openapi/alias-expansion.mjs.map +1 -0
- package/dist/domain/openapi/binary-content.cjs +48 -0
- package/dist/domain/openapi/binary-content.cjs.map +1 -0
- package/dist/domain/openapi/binary-content.mjs +45 -0
- package/dist/domain/openapi/binary-content.mjs.map +1 -0
- package/dist/domain/openapi/components-object.cjs +29 -0
- package/dist/domain/openapi/components-object.cjs.map +1 -0
- package/dist/domain/openapi/components-object.mjs +24 -0
- package/dist/domain/openapi/components-object.mjs.map +1 -0
- package/dist/domain/openapi/discriminated-union.cjs +68 -0
- package/dist/domain/openapi/discriminated-union.cjs.map +1 -0
- package/dist/domain/openapi/discriminated-union.mjs +62 -0
- package/dist/domain/openapi/discriminated-union.mjs.map +1 -0
- package/dist/domain/openapi/discriminator-conflicts.cjs +143 -0
- package/dist/domain/openapi/discriminator-conflicts.cjs.map +1 -0
- package/dist/domain/openapi/discriminator-conflicts.mjs +141 -0
- package/dist/domain/openapi/discriminator-conflicts.mjs.map +1 -0
- package/dist/domain/openapi/json-pointer.cjs +31 -0
- package/dist/domain/openapi/json-pointer.cjs.map +1 -0
- package/dist/domain/openapi/json-pointer.mjs +27 -0
- package/dist/domain/openapi/json-pointer.mjs.map +1 -0
- package/dist/domain/openapi/media-type-object.cjs +14 -0
- package/dist/domain/openapi/media-type-object.cjs.map +1 -0
- package/dist/domain/openapi/media-type-object.mjs +11 -0
- package/dist/domain/openapi/media-type-object.mjs.map +1 -0
- package/dist/domain/openapi/parameter-object.cjs +13 -0
- package/dist/domain/openapi/parameter-object.cjs.map +1 -0
- package/dist/domain/openapi/parameter-object.mjs +10 -0
- package/dist/domain/openapi/parameter-object.mjs.map +1 -0
- package/dist/domain/openapi/path-item-object.cjs +35 -0
- package/dist/domain/openapi/path-item-object.cjs.map +1 -0
- package/dist/domain/openapi/path-item-object.mjs +30 -0
- package/dist/domain/openapi/path-item-object.mjs.map +1 -0
- package/dist/domain/openapi/path-templates.cjs +23 -0
- package/dist/domain/openapi/path-templates.cjs.map +1 -0
- package/dist/domain/openapi/path-templates.mjs +21 -0
- package/dist/domain/openapi/path-templates.mjs.map +1 -0
- package/dist/domain/openapi/unsupported-features.cjs +87 -0
- package/dist/domain/openapi/unsupported-features.cjs.map +1 -0
- package/dist/domain/openapi/unsupported-features.mjs +84 -0
- package/dist/domain/openapi/unsupported-features.mjs.map +1 -0
- package/dist/domain/output-fixes.cjs +101 -0
- package/dist/domain/output-fixes.cjs.map +1 -0
- package/dist/domain/output-fixes.mjs +94 -0
- package/dist/domain/output-fixes.mjs.map +1 -0
- package/dist/domain/warnings.cjs +15 -0
- package/dist/domain/warnings.cjs.map +1 -0
- package/dist/domain/warnings.mjs +12 -0
- package/dist/domain/warnings.mjs.map +1 -0
- package/dist/index.cjs +98 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +841 -0
- package/dist/index.d.mts +841 -0
- package/dist/index.d.ts +841 -0
- package/dist/index.mjs +27 -0
- package/dist/index.mjs.map +1 -0
- package/dist/transform/components-object.cjs +15 -0
- package/dist/transform/components-object.cjs.map +1 -0
- package/dist/transform/components-object.mjs +11 -0
- package/dist/transform/components-object.mjs.map +1 -0
- package/dist/transform/header-object.cjs +12 -0
- package/dist/transform/header-object.cjs.map +1 -0
- package/dist/transform/header-object.mjs +10 -0
- package/dist/transform/header-object.mjs.map +1 -0
- package/dist/transform/media-type-object.cjs +12 -0
- package/dist/transform/media-type-object.cjs.map +1 -0
- package/dist/transform/media-type-object.mjs +10 -0
- package/dist/transform/media-type-object.mjs.map +1 -0
- package/dist/transform/operation-object.cjs +26 -0
- package/dist/transform/operation-object.cjs.map +1 -0
- package/dist/transform/operation-object.mjs +21 -0
- package/dist/transform/operation-object.mjs.map +1 -0
- package/dist/transform/parameter-object.cjs +12 -0
- package/dist/transform/parameter-object.cjs.map +1 -0
- package/dist/transform/parameter-object.mjs +10 -0
- package/dist/transform/parameter-object.mjs.map +1 -0
- package/dist/transform/path-item-object.cjs +12 -0
- package/dist/transform/path-item-object.cjs.map +1 -0
- package/dist/transform/path-item-object.mjs +10 -0
- package/dist/transform/path-item-object.mjs.map +1 -0
- package/dist/transform/paths-object.cjs +11 -0
- package/dist/transform/paths-object.cjs.map +1 -0
- package/dist/transform/paths-object.mjs +9 -0
- package/dist/transform/paths-object.mjs.map +1 -0
- package/dist/transform/request-body-object.cjs +12 -0
- package/dist/transform/request-body-object.cjs.map +1 -0
- package/dist/transform/request-body-object.mjs +10 -0
- package/dist/transform/request-body-object.mjs.map +1 -0
- package/dist/transform/response-object.cjs +12 -0
- package/dist/transform/response-object.cjs.map +1 -0
- package/dist/transform/response-object.mjs +10 -0
- package/dist/transform/response-object.mjs.map +1 -0
- package/dist/transform/responses-object.cjs +12 -0
- package/dist/transform/responses-object.cjs.map +1 -0
- package/dist/transform/responses-object.mjs +10 -0
- package/dist/transform/responses-object.mjs.map +1 -0
- package/dist/transform/schema-object.cjs +21 -0
- package/dist/transform/schema-object.cjs.map +1 -0
- package/dist/transform/schema-object.mjs +16 -0
- package/dist/transform/schema-object.mjs.map +1 -0
- package/package.json +115 -4
- package/src/adapters/node-file-system/node-file-system.ts +44 -0
- package/src/adapters/redocly-loader/alias-limit.ts +20 -0
- package/src/adapters/redocly-loader/allowed-hosts.ts +62 -0
- package/src/adapters/redocly-loader/bundled-ref-repair.ts +65 -0
- package/src/adapters/redocly-loader/malformed-refs.ts +61 -0
- package/src/adapters/redocly-loader/redocly-config-source.ts +78 -0
- package/src/adapters/redocly-loader/redocly-schema-loader.ts +262 -0
- package/src/adapters/redocly-loader/ref-access.ts +146 -0
- package/src/adapters/redocly-loader/ref-holders.ts +43 -0
- package/src/adapters/redocly-loader/remote-fetch.ts +104 -0
- package/src/adapters/redocly-loader/schema-load-errors.ts +124 -0
- package/src/adapters/redocly-loader/schema-source.ts +151 -0
- package/src/adapters/redocly-loader/unsupported-keys.ts +102 -0
- package/src/adapters/terminal-logger/terminal-logger.ts +98 -0
- package/src/adapters/type-ast-bridge/footer-nodes.ts +38 -0
- package/src/adapters/type-ast-bridge/ir-declarations-to-typescript.ts +100 -0
- package/src/adapters/type-ast-bridge/ir-to-typescript.ts +223 -0
- package/src/adapters/type-ast-bridge/lazy-node.ts +24 -0
- package/src/adapters/type-ast-bridge/load-typescript.ts +84 -0
- package/src/adapters/type-ast-bridge/print-typescript.ts +33 -0
- package/src/adapters/type-ast-bridge/typescript-raw-text.ts +49 -0
- package/src/adapters/type-ast-bridge/typescript-to-ir.ts +294 -0
- package/src/adapters/type-ast-bridge/typescript-types.ts +8 -0
- package/src/api/ast-to-string.ts +59 -0
- package/src/api/comment-header.ts +7 -0
- package/src/api/default-ports.ts +44 -0
- package/src/api/discriminator-conflict-warnings.ts +43 -0
- package/src/api/discriminator-enum-names.ts +26 -0
- package/src/api/discriminator-enum-parent.ts +129 -0
- package/src/api/discriminator-enum.ts +115 -0
- package/src/api/discriminator-other-owners.ts +97 -0
- package/src/api/discriminator-patch.ts +147 -0
- package/src/api/discriminator-scan.ts +260 -0
- package/src/api/document-declarations.ts +41 -0
- package/src/api/document-refs.ts +71 -0
- package/src/api/document-run.ts +177 -0
- package/src/api/enum-values-warnings.ts +21 -0
- package/src/api/footer-entry.ts +23 -0
- package/src/api/footer-sink.ts +67 -0
- package/src/api/legacy-callback-warning.ts +29 -0
- package/src/api/legacy-ts-helpers.ts +311 -0
- package/src/api/legacy-utils.ts +118 -0
- package/src/api/openapi-ts.ts +62 -0
- package/src/api/path-template-warnings.ts +27 -0
- package/src/api/schema-callbacks.ts +211 -0
- package/src/api/string-to-ast.ts +27 -0
- package/src/api/transform-context.ts +93 -0
- package/src/api/transform-schema.ts +123 -0
- package/src/api/type-helpers.ts +130 -0
- package/src/api/unsupported-feature-warnings.ts +33 -0
- package/src/application/ports/file-system.ts +12 -0
- package/src/application/ports/logger.ts +16 -0
- package/src/application/ports/redocly-config-source.ts +20 -0
- package/src/application/ports/schema-loader.ts +32 -0
- package/src/application/print/comment-writer.ts +91 -0
- package/src/application/print/declaration-printer.ts +100 -0
- package/src/application/print/literal-text.ts +62 -0
- package/src/application/print/print-nodes.ts +62 -0
- package/src/application/print/print-options.ts +11 -0
- package/src/application/print/text-writer.ts +83 -0
- package/src/application/print/type-printer.ts +287 -0
- package/src/application/stack-overflow.ts +54 -0
- package/src/application/transform/document/assignability.ts +203 -0
- package/src/application/transform/document/components.ts +189 -0
- package/src/application/transform/document/declared-types.ts +93 -0
- package/src/application/transform/document/defs-root.ts +25 -0
- package/src/application/transform/document/document-member.ts +20 -0
- package/src/application/transform/document/document.ts +215 -0
- package/src/application/transform/document/exploded-query.ts +91 -0
- package/src/application/transform/document/global-type-references.ts +78 -0
- package/src/application/transform/document/header.ts +34 -0
- package/src/application/transform/document/kept-deprecated.ts +135 -0
- package/src/application/transform/document/list-assignability.ts +87 -0
- package/src/application/transform/document/media-type.ts +78 -0
- package/src/application/transform/document/operation.ts +64 -0
- package/src/application/transform/document/parameter.ts +45 -0
- package/src/application/transform/document/parameters.ts +265 -0
- package/src/application/transform/document/path-item.ts +168 -0
- package/src/application/transform/document/path-key-overlaps.ts +201 -0
- package/src/application/transform/document/path-template-replace.ts +90 -0
- package/src/application/transform/document/paths-enum.ts +127 -0
- package/src/application/transform/document/paths.ts +273 -0
- package/src/application/transform/document/request-body.ts +50 -0
- package/src/application/transform/document/response.ts +109 -0
- package/src/application/transform/document/responses.ts +29 -0
- package/src/application/transform/document/root-type-aliases.ts +107 -0
- package/src/application/transform/document/template-key-match.ts +183 -0
- package/src/application/transform/document/type-assignability.ts +268 -0
- package/src/application/transform/document/type-key.ts +80 -0
- package/src/application/transform/document/type-resolution.ts +163 -0
- package/src/application/transform/document/webhooks.ts +22 -0
- package/src/application/transform/document-entries.ts +28 -0
- package/src/application/transform/footer/document-footer.ts +212 -0
- package/src/application/transform/footer/enum-naming.ts +210 -0
- package/src/application/transform/footer/enum-values-check.ts +171 -0
- package/src/application/transform/footer/evaluation.ts +47 -0
- package/src/application/transform/footer/shared-enum-names.ts +86 -0
- package/src/application/transform/footer/type-evaluation.ts +294 -0
- package/src/application/transform/footer/type-rules.ts +269 -0
- package/src/application/transform/helper-types.ts +92 -0
- package/src/application/transform/literal-type.ts +54 -0
- package/src/application/transform/numbered-names.ts +20 -0
- package/src/application/transform/ref-pointer/generated-location.ts +211 -0
- package/src/application/transform/ref-pointer/generated-shape.ts +275 -0
- package/src/application/transform/ref-pointer/inline-cycles.ts +56 -0
- package/src/application/transform/ref-pointer/original-index.ts +95 -0
- package/src/application/transform/ref-pointer/pointer-type.ts +92 -0
- package/src/application/transform/ref-pointer/pointer-walk.ts +96 -0
- package/src/application/transform/ref-pointer/typed-walk.ts +192 -0
- package/src/application/transform/ref-type.ts +102 -0
- package/src/application/transform/schema/access-flags.ts +63 -0
- package/src/application/transform/schema/array-type.ts +213 -0
- package/src/application/transform/schema/composition-type.ts +255 -0
- package/src/application/transform/schema/core-type.ts +119 -0
- package/src/application/transform/schema/discriminated-union.ts +58 -0
- package/src/application/transform/schema/discriminator-property.ts +33 -0
- package/src/application/transform/schema/enum-rule.ts +280 -0
- package/src/application/transform/schema/inherited-discriminator.ts +54 -0
- package/src/application/transform/schema/object-type.ts +289 -0
- package/src/application/transform/schema/presence-members.ts +96 -0
- package/src/application/transform/schema/required-variants.ts +88 -0
- package/src/application/transform/schema/schema-context.ts +136 -0
- package/src/application/transform/schema/schema-rule.ts +29 -0
- package/src/application/transform/schema/schema-transform.ts +99 -0
- package/src/application/transform/schema/unevaluated-properties.ts +105 -0
- package/src/application/transform/schema-comment.ts +196 -0
- package/src/application/transform/shared-types.ts +9 -0
- package/src/application/transform/transform-context.ts +51 -0
- package/src/application/transform/type-combinators.ts +57 -0
- package/src/cli/cli-arguments.ts +208 -0
- package/src/cli/cli-dependencies.ts +47 -0
- package/src/cli/cli-errors.ts +127 -0
- package/src/cli/cli-output.ts +67 -0
- package/src/cli/docs-links.ts +6 -0
- package/src/cli/fix-option.ts +29 -0
- package/src/cli/help-text.ts +52 -0
- package/src/cli/main.ts +73 -0
- package/src/cli/redocly-apis.ts +95 -0
- package/src/cli/ref-limits.ts +16 -0
- package/src/cli/run-cli.ts +131 -0
- package/src/domain/assert-never.ts +8 -0
- package/src/domain/errors.ts +76 -0
- package/src/domain/ir/constructors.ts +142 -0
- package/src/domain/ir/identifier-text.ts +49 -0
- package/src/domain/ir/newer-identifier-ranges.ts +109 -0
- package/src/domain/ir/nodes.ts +225 -0
- package/src/domain/ir/normalize.ts +51 -0
- package/src/domain/ir/property-name.ts +28 -0
- package/src/domain/ir/raw-text-escapes.ts +37 -0
- package/src/domain/openapi/admitted-values.ts +113 -0
- package/src/domain/openapi/alias-expansion.ts +72 -0
- package/src/domain/openapi/binary-content.ts +74 -0
- package/src/domain/openapi/components-object.ts +52 -0
- package/src/domain/openapi/discriminated-union.ts +109 -0
- package/src/domain/openapi/discriminator-conflicts.ts +251 -0
- package/src/domain/openapi/document-object.ts +12 -0
- package/src/domain/openapi/header-object.ts +9 -0
- package/src/domain/openapi/json-pointer.ts +46 -0
- package/src/domain/openapi/media-type-object.ts +26 -0
- package/src/domain/openapi/operation-object.ts +13 -0
- package/src/domain/openapi/parameter-object.ts +34 -0
- package/src/domain/openapi/path-item-object.ts +70 -0
- package/src/domain/openapi/path-templates.ts +31 -0
- package/src/domain/openapi/request-body-object.ts +7 -0
- package/src/domain/openapi/response-object.ts +14 -0
- package/src/domain/openapi/schema-object.ts +61 -0
- package/src/domain/openapi/unsupported-features.ts +139 -0
- package/src/domain/output-fixes.ts +136 -0
- package/src/domain/warnings.ts +20 -0
- package/src/index.ts +67 -0
- package/src/transform/components-object.ts +27 -0
- package/src/transform/header-object.ts +19 -0
- package/src/transform/media-type-object.ts +19 -0
- package/src/transform/operation-object.ts +36 -0
- package/src/transform/parameter-object.ts +19 -0
- package/src/transform/parameters-array.ts +19 -0
- package/src/transform/path-item-object.ts +22 -0
- package/src/transform/paths-enum.ts +8 -0
- package/src/transform/paths-object.ts +15 -0
- package/src/transform/request-body-object.ts +19 -0
- package/src/transform/response-object.ts +19 -0
- package/src/transform/responses-object.ts +19 -0
- package/src/transform/schema-object.ts +36 -0
- package/src/transform/webhooks-object.ts +15 -0
- package/src/types/generator-options.ts +278 -0
- package/src/types/openapi-common.ts +100 -0
- package/src/types/openapi-document.ts +196 -0
- package/src/types/openapi-path-item.ts +130 -0
- package/src/types/openapi-request.ts +209 -0
- package/src/types/openapi-response.ts +81 -0
- package/src/types/openapi-schema.ts +169 -0
- package/src/types/openapi-security.ts +116 -0
- package/src/types.ts +12 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Escapes for document text that the transformer writes into raw type text (threat model,
|
|
3
|
+
* docs/security/threat-model.md). Without them, a name or path from the document could end the
|
|
4
|
+
* literal early and add its own code to the generated file. Only the characters that would end or
|
|
5
|
+
* change the literal are escaped, so output for every other name stays byte-identical.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/** Line terminators end a single-quoted string; TypeScript reads U+2028 and U+2029 as such too. */
|
|
9
|
+
const SINGLE_QUOTED_ESCAPES: ReadonlyMap<string, string> = new Map([
|
|
10
|
+
["\\", "\\\\"],
|
|
11
|
+
["'", "\\'"],
|
|
12
|
+
["\n", "\\n"],
|
|
13
|
+
["\r", "\\r"],
|
|
14
|
+
["\u2028", "\\u2028"],
|
|
15
|
+
["\u2029", "\\u2029"],
|
|
16
|
+
]);
|
|
17
|
+
const SINGLE_QUOTED_SPECIAL_RE = /[\\'\n\r\u2028\u2029]/g;
|
|
18
|
+
|
|
19
|
+
/** The text between the quotes of a single-quoted string literal with this value. */
|
|
20
|
+
export function escapeSingleQuotedText(value: string): string {
|
|
21
|
+
return value.replace(SINGLE_QUOTED_SPECIAL_RE, (char) => SINGLE_QUOTED_ESCAPES.get(char) ?? char);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* A backslash, a backtick, or the `${` that would start a placeholder. A raw carriage return is
|
|
26
|
+
* read as a line feed inside a template literal, so it is written as an escape.
|
|
27
|
+
*/
|
|
28
|
+
const TEMPLATE_SPECIAL_RE = /\\|`|\$\{|\r/g;
|
|
29
|
+
|
|
30
|
+
function escapeTemplateSpecial(special: string): string {
|
|
31
|
+
return special === "\r" ? "\\r" : `\\${special}`;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/** Template literal text (between placeholders) that reads back as exactly this value. */
|
|
35
|
+
export function escapeTemplateText(value: string): string {
|
|
36
|
+
return value.replace(TEMPLATE_SPECIAL_RE, escapeTemplateSpecial);
|
|
37
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { parseRefPointer } from "./json-pointer.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* The values a schema admits when it admits only finitely many (`enum`, `const`, and `allOf` /
|
|
5
|
+
* `anyOf` / `oneOf` of those), read from the document. Null means "any value" as far as this
|
|
6
|
+
* reading goes: a schema of any other shape, or a `$ref` it cannot follow, is never assumed to
|
|
7
|
+
* exclude a value.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
export type AdmittedValue = string | number | boolean | null;
|
|
11
|
+
/** A finite set of values, or null for every value. */
|
|
12
|
+
export type AdmittedValues = ReadonlySet<AdmittedValue> | null;
|
|
13
|
+
|
|
14
|
+
type JsonObject = Readonly<Record<string, unknown>>;
|
|
15
|
+
|
|
16
|
+
/** How deep `$ref`s and compositions are followed; deeper schemas admit every value. */
|
|
17
|
+
const MAX_DEPTH = 16;
|
|
18
|
+
const LOCAL_REF_PREFIX = "#/";
|
|
19
|
+
|
|
20
|
+
function isObject(value: unknown): value is JsonObject {
|
|
21
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/** The node at a local `$ref` (`#/...`) of the document, or undefined. */
|
|
25
|
+
export function resolveLocalRef(document: unknown, ref: string): unknown {
|
|
26
|
+
if (!ref.startsWith(LOCAL_REF_PREFIX)) {
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
let node: unknown = document;
|
|
30
|
+
for (const segment of parseRefPointer(ref)) {
|
|
31
|
+
node = isObject(node) || Array.isArray(node) ? (node as JsonObject)[segment] : undefined;
|
|
32
|
+
}
|
|
33
|
+
return node;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function intersect(left: AdmittedValues, right: AdmittedValues): AdmittedValues {
|
|
37
|
+
if (left === null || right === null) {
|
|
38
|
+
return left ?? right;
|
|
39
|
+
}
|
|
40
|
+
return new Set([...left].filter((value) => right.has(value)));
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function unite(sets: readonly AdmittedValues[]): AdmittedValues {
|
|
44
|
+
return sets.some((set) => set === null) ? null : new Set(sets.flatMap((set) => [...(set ?? [])]));
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function isAdmittedValue(value: unknown): value is AdmittedValue {
|
|
48
|
+
return value === null || ["string", "number", "boolean"].includes(typeof value);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
interface Walk {
|
|
52
|
+
readonly document: unknown;
|
|
53
|
+
readonly depth: number;
|
|
54
|
+
/** `$ref`s whose targets are left out: they add nothing to the generated type here. */
|
|
55
|
+
readonly skipped: ReadonlySet<string>;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function follow(node: unknown, walk: Walk): unknown {
|
|
59
|
+
if (!isObject(node) || typeof node.$ref !== "string") {
|
|
60
|
+
return node;
|
|
61
|
+
}
|
|
62
|
+
return walk.skipped.has(node.$ref) ? undefined : resolveLocalRef(walk.document, node.$ref);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function members(node: JsonObject, keyword: string): readonly unknown[] {
|
|
66
|
+
const list = node[keyword];
|
|
67
|
+
return Array.isArray(list) ? list : [];
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/** `enum` and `const` of the schema itself, before its compositions. */
|
|
71
|
+
function ownValues(node: JsonObject): AdmittedValues {
|
|
72
|
+
const listed = Array.isArray(node.enum) ? node.enum.filter(isAdmittedValue) : null;
|
|
73
|
+
const constant = "const" in node && isAdmittedValue(node.const) ? new Set([node.const]) : null;
|
|
74
|
+
return intersect(listed === null ? null : new Set(listed), constant);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function schemaValues(schema: unknown, walk: Walk): AdmittedValues {
|
|
78
|
+
const node = follow(schema, walk);
|
|
79
|
+
if (!isObject(node) || walk.depth > MAX_DEPTH) {
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
const next = { ...walk, depth: walk.depth + 1 };
|
|
83
|
+
const parts = members(node, "allOf").map((part) => schemaValues(part, next));
|
|
84
|
+
const variants = [...members(node, "anyOf"), ...members(node, "oneOf")];
|
|
85
|
+
const union = variants.length === 0 ? null : unite(variants.map((v) => schemaValues(v, next)));
|
|
86
|
+
return [...parts, union].reduce<AdmittedValues>(intersect, ownValues(node));
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
function propertyValues(schema: unknown, key: string, walk: Walk): AdmittedValues {
|
|
90
|
+
const node = follow(schema, walk);
|
|
91
|
+
if (!isObject(node) || walk.depth > MAX_DEPTH) {
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
const next = { ...walk, depth: walk.depth + 1 };
|
|
95
|
+
const properties = isObject(node.properties) ? node.properties : {};
|
|
96
|
+
const own = Object.hasOwn(properties, key) ? schemaValues(properties[key], next) : null;
|
|
97
|
+
const parts = members(node, "allOf").map((part) => propertyValues(part, key, next));
|
|
98
|
+
return parts.reduce<AdmittedValues>(intersect, own);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* The values property `key` of an object schema admits: the intersection over the schema's own
|
|
103
|
+
* `properties` and its `allOf` parts (followed through `$ref`s, except `skipped` ones); null for
|
|
104
|
+
* every value.
|
|
105
|
+
*/
|
|
106
|
+
export function admittedPropertyValues(
|
|
107
|
+
schema: unknown,
|
|
108
|
+
key: string,
|
|
109
|
+
document: unknown,
|
|
110
|
+
skipped: ReadonlySet<string> = new Set(),
|
|
111
|
+
): AdmittedValues {
|
|
112
|
+
return propertyValues(schema, key, { document, depth: 0, skipped });
|
|
113
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* YAML aliases (`*name`) make the parsed document share objects. A "billion laughs" document,
|
|
3
|
+
* where each level refers to the previous one ten times, parses into a few hundred objects that
|
|
4
|
+
* every walk over the document (Redocly's resolver, the generator) visits as 10^9 nodes: the run
|
|
5
|
+
* took minutes and ended with "RangeError: Set maximum size exceeded" (pre-beta test plan 10.2).
|
|
6
|
+
* A document is refused when its aliases expand it far beyond what it stores.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/** Expansion below this many nodes is allowed whatever the ratio: large real documents pass. */
|
|
10
|
+
export const ALIAS_EXPANSION_MIN_NODES = 1_000_000;
|
|
11
|
+
/** Real documents reuse anchors a few times; a bomb multiplies its size by orders of magnitude. */
|
|
12
|
+
export const ALIAS_EXPANSION_MAX_RATIO = 100;
|
|
13
|
+
|
|
14
|
+
export interface NodeCounts {
|
|
15
|
+
/** Nodes of the document as written: each object once, with its entries. */
|
|
16
|
+
readonly stored: number;
|
|
17
|
+
/** Nodes a walk visits when it follows every shared object again. */
|
|
18
|
+
readonly expanded: number;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function childrenOf(node: object): unknown[] {
|
|
22
|
+
return Array.isArray(node) ? node : Object.values(node);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function isContainer(value: unknown): value is object {
|
|
26
|
+
return typeof value === "object" && value !== null;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/** The expanded size of `node`, whose container children are all sized (or in a cycle). */
|
|
30
|
+
function sizeOf(node: object, sizes: ReadonlyMap<object, number>): number {
|
|
31
|
+
return childrenOf(node).reduce<number>(
|
|
32
|
+
(total, child) => total + (isContainer(child) ? (sizes.get(child) ?? 1) : 1),
|
|
33
|
+
1,
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Count stored and expanded nodes without recursion (documents can be thousands of levels deep)
|
|
39
|
+
* and without expanding: each shared object is sized once. A cycle counts its back edge once.
|
|
40
|
+
*/
|
|
41
|
+
export function countNodes(root: unknown): NodeCounts {
|
|
42
|
+
if (!isContainer(root)) {
|
|
43
|
+
return { stored: 1, expanded: 1 };
|
|
44
|
+
}
|
|
45
|
+
const sizes = new Map<object, number>();
|
|
46
|
+
const entered = new Set<object>();
|
|
47
|
+
const stack: object[] = [root];
|
|
48
|
+
while (stack.length > 0) {
|
|
49
|
+
const node = stack[stack.length - 1] as object;
|
|
50
|
+
const isFirstVisit = !entered.has(node);
|
|
51
|
+
entered.add(node);
|
|
52
|
+
const pending = isFirstVisit
|
|
53
|
+
? childrenOf(node).filter((child) => isContainer(child) && !entered.has(child))
|
|
54
|
+
: [];
|
|
55
|
+
if (pending.length > 0) {
|
|
56
|
+
stack.push(...(pending as object[]));
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
stack.pop();
|
|
60
|
+
sizes.set(node, sizeOf(node, sizes));
|
|
61
|
+
}
|
|
62
|
+
let stored = 0;
|
|
63
|
+
for (const node of sizes.keys()) {
|
|
64
|
+
stored += 1 + childrenOf(node).filter((child) => !isContainer(child)).length;
|
|
65
|
+
}
|
|
66
|
+
return { stored, expanded: sizes.get(root) ?? 1 };
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/** Whether the aliases of a parsed document expand it beyond the limits above. */
|
|
70
|
+
export function isAliasExpansionExcessive({ stored, expanded }: NodeCounts): boolean {
|
|
71
|
+
return expanded > Math.max(ALIAS_EXPANSION_MIN_NODES, stored * ALIAS_EXPANSION_MAX_RATIO);
|
|
72
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import type { SchemaObject } from "./schema-object.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Which string schemas describe raw binary data, following "Working with Binary Data" of the
|
|
5
|
+
* OpenAPI specification (3.1): `format: binary` in 3.0, a `contentMediaType` without a
|
|
6
|
+
* `contentEncoding` in 3.1. `--binary-as-blob` types these as `Blob`.
|
|
7
|
+
* https://spec.openapis.org/oas/v3.1.1.html#working-with-binary-data
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/** The OpenAPI 3.0 format of unencoded octets (`byte` is base64 text). */
|
|
11
|
+
const BINARY_FORMAT = "binary";
|
|
12
|
+
|
|
13
|
+
/** The top-level media type whose contents are always text (RFC 2046). */
|
|
14
|
+
const TEXT_TOP_LEVEL_TYPE = "text";
|
|
15
|
+
|
|
16
|
+
/** The top-level media type of the text formats in `TEXT_APPLICATION_SUBTYPES`. */
|
|
17
|
+
const APPLICATION_TOP_LEVEL_TYPE = "application";
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Text syntaxes, as a subtype (`application/json`) or a structured syntax suffix
|
|
21
|
+
* (`application/problem+json`, `image/svg+xml`; RFC 6839, RFC 9512).
|
|
22
|
+
*/
|
|
23
|
+
const TEXT_STRUCTURED_SYNTAXES: ReadonlySet<string> = new Set(["json", "xml", "yaml"]);
|
|
24
|
+
|
|
25
|
+
/** Other text formats under `application/`, registered or in common use. */
|
|
26
|
+
const TEXT_APPLICATION_SUBTYPES: ReadonlySet<string> = new Set([
|
|
27
|
+
"ecmascript",
|
|
28
|
+
"graphql",
|
|
29
|
+
"javascript",
|
|
30
|
+
"json-seq",
|
|
31
|
+
"jsonl",
|
|
32
|
+
"sql",
|
|
33
|
+
"x-ndjson",
|
|
34
|
+
"x-www-form-urlencoded",
|
|
35
|
+
"x-yaml",
|
|
36
|
+
]);
|
|
37
|
+
|
|
38
|
+
const PARAMETER_SEPARATOR = ";";
|
|
39
|
+
const SUBTYPE_SEPARATOR = "/";
|
|
40
|
+
const SUFFIX_SEPARATOR = "+";
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Whether a media type's contents are text, so a string schema with it holds the text itself.
|
|
44
|
+
* Parameters (`; charset=utf-8`) and case are ignored; a value without a subtype is not text.
|
|
45
|
+
*/
|
|
46
|
+
export function isTextualMediaType(mediaType: string): boolean {
|
|
47
|
+
const essence = (mediaType.split(PARAMETER_SEPARATOR)[0] ?? "").trim().toLowerCase();
|
|
48
|
+
const [topLevelType, subtype] = essence.split(SUBTYPE_SEPARATOR);
|
|
49
|
+
if (topLevelType === undefined || subtype === undefined) {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
if (topLevelType === TEXT_TOP_LEVEL_TYPE) {
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
const suffix = subtype.slice(subtype.lastIndexOf(SUFFIX_SEPARATOR) + 1);
|
|
56
|
+
if (TEXT_STRUCTURED_SYNTAXES.has(subtype) || TEXT_STRUCTURED_SYNTAXES.has(suffix)) {
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
return topLevelType === APPLICATION_TOP_LEVEL_TYPE && TEXT_APPLICATION_SUBTYPES.has(subtype);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Whether a schema describes raw (unencoded) binary data. Any `contentEncoding` means the value
|
|
64
|
+
* is encoded text, so it wins over `format: binary`.
|
|
65
|
+
*/
|
|
66
|
+
export function isRawBinarySchema(schema: SchemaObject): boolean {
|
|
67
|
+
if (schema.contentEncoding !== undefined) {
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
if (schema.format === BINARY_FORMAT) {
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
return schema.contentMediaType !== undefined && !isTextualMediaType(schema.contentMediaType);
|
|
74
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { MEDIA_TYPES_COMPONENT_KIND } from "./media-type-object.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* The component maps the generator always writes, in output order (OpenAPI 3.1 §4.8.7); a kind the
|
|
5
|
+
* document lacks is `never`.
|
|
6
|
+
*/
|
|
7
|
+
export const COMPONENT_KINDS = Object.freeze([
|
|
8
|
+
"schemas",
|
|
9
|
+
"responses",
|
|
10
|
+
"parameters",
|
|
11
|
+
"requestBodies",
|
|
12
|
+
"headers",
|
|
13
|
+
"pathItems",
|
|
14
|
+
] as const);
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* OpenAPI 3.2 component maps, written after `COMPONENT_KINDS` and only when the document has them,
|
|
18
|
+
* so documents without them keep their output (ADR-020).
|
|
19
|
+
*/
|
|
20
|
+
export const DECLARED_COMPONENT_KINDS = Object.freeze([MEDIA_TYPES_COMPONENT_KIND] as const);
|
|
21
|
+
|
|
22
|
+
export type ComponentKind =
|
|
23
|
+
| (typeof COMPONENT_KINDS)[number]
|
|
24
|
+
| (typeof DECLARED_COMPONENT_KINDS)[number];
|
|
25
|
+
|
|
26
|
+
/** Components by kind and name; entries are read by each kind's transformer. */
|
|
27
|
+
export type ComponentsObject = {
|
|
28
|
+
readonly [kind in ComponentKind]?: Readonly<Record<string, unknown>>;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
/** `requestBodies` → `requestBody`; other kinds drop the final `s`. */
|
|
32
|
+
export function singularizeComponentKind(kind: ComponentKind | `x-${string}`): string {
|
|
33
|
+
return kind === "requestBodies" ? "requestBody" : kind.slice(0, -1);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Whether a schema is an enum that `--enum` turns into a TypeScript enum. With `--root-types`
|
|
38
|
+
* such schemas get no root alias, because the enum is already exported under that name.
|
|
39
|
+
*/
|
|
40
|
+
export function isEnumSchema(schema: unknown): boolean {
|
|
41
|
+
if (typeof schema !== "object" || schema === null || Array.isArray(schema)) {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
const record = schema as Record<string, unknown>;
|
|
45
|
+
return (
|
|
46
|
+
"enum" in record &&
|
|
47
|
+
Array.isArray(record.enum) &&
|
|
48
|
+
(!("type" in record) || record.type !== "object") &&
|
|
49
|
+
!("properties" in record) &&
|
|
50
|
+
!("additionalProperties" in record)
|
|
51
|
+
);
|
|
52
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { escapePointerSegment } from "./json-pointer.js";
|
|
2
|
+
import type { Schema, SchemaObject } from "./schema-object.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* A discriminator owner is either a parent that its members `allOf` (an object with the
|
|
6
|
+
* discriminator property) or a union (`oneOf` / `anyOf` of the members). The generated type of a
|
|
7
|
+
* union is a TypeScript union, so it cannot be used like a parent: `Omit<Union, "kind">` keeps
|
|
8
|
+
* only the keys that every member has, and a member that intersects the union it belongs to
|
|
9
|
+
* refers to itself (TS2502, upstream #1665).
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
/** Resolves a `$ref` of the document; `undefined` when it points nowhere. */
|
|
13
|
+
export type ResolveSchemaRef = (ref: string) => unknown;
|
|
14
|
+
|
|
15
|
+
const UNION_KEYWORDS = ["oneOf", "anyOf"] as const;
|
|
16
|
+
const COMPOSITION_KEYWORDS = ["allOf", ...UNION_KEYWORDS] as const;
|
|
17
|
+
|
|
18
|
+
function isSchemaObject(value: unknown): value is SchemaObject {
|
|
19
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function keywordItems(schema: SchemaObject, keywords: readonly string[]): readonly Schema[] {
|
|
23
|
+
const record = schema as Readonly<Record<string, unknown>>;
|
|
24
|
+
return keywords.flatMap((keyword) => {
|
|
25
|
+
const items = record[keyword];
|
|
26
|
+
return Array.isArray(items) ? (items as readonly Schema[]) : [];
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/** The `oneOf` and `anyOf` members of a schema; empty when it is not a union. */
|
|
31
|
+
export function unionMembers(schema: unknown): readonly Schema[] {
|
|
32
|
+
return isSchemaObject(schema) ? keywordItems(schema, UNION_KEYWORDS) : [];
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/** The schema at `ref` when it is a union (has `oneOf` or `anyOf` members), else undefined. */
|
|
36
|
+
export function unionAt(ref: string, resolve: ResolveSchemaRef): SchemaObject | undefined {
|
|
37
|
+
const schema = resolve(ref);
|
|
38
|
+
return isSchemaObject(schema) && unionMembers(schema).length > 0 ? schema : undefined;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/** What one search for a `$ref` has seen, so that a `$ref` cycle ends. */
|
|
42
|
+
interface Search {
|
|
43
|
+
readonly target: string;
|
|
44
|
+
readonly resolve: ResolveSchemaRef;
|
|
45
|
+
readonly visited: Set<string>;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function reaches(schema: Schema, search: Search): boolean {
|
|
49
|
+
if (!isSchemaObject(schema)) {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
const ref = (schema as { readonly $ref?: unknown }).$ref;
|
|
53
|
+
if (typeof ref === "string") {
|
|
54
|
+
if (ref === search.target) {
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
if (search.visited.has(ref)) {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
search.visited.add(ref);
|
|
61
|
+
return reaches(search.resolve(ref) as Schema, search);
|
|
62
|
+
}
|
|
63
|
+
return keywordItems(schema, COMPOSITION_KEYWORDS).some((item) => reaches(item, search));
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Whether the type of `union` contains the schema at `target` without an object in between: one
|
|
68
|
+
* of its members is a `$ref` to it, or `allOf` / `oneOf` / `anyOf` such a `$ref`, at any depth.
|
|
69
|
+
* Such a reference is resolved at once by TypeScript, unlike one in a property or an array.
|
|
70
|
+
*/
|
|
71
|
+
export function unionReaches(
|
|
72
|
+
union: SchemaObject,
|
|
73
|
+
target: string,
|
|
74
|
+
resolve: ResolveSchemaRef,
|
|
75
|
+
): boolean {
|
|
76
|
+
const search = { target, resolve, visited: new Set<string>() };
|
|
77
|
+
return unionMembers(union).some((member) => reaches(member, search));
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const COMPONENT_SCHEMAS = "#/components/schemas/";
|
|
81
|
+
|
|
82
|
+
/** A mapping value as a `$ref`: a bare name is a component schema's name. */
|
|
83
|
+
function mappingRef(target: unknown): string | undefined {
|
|
84
|
+
if (typeof target !== "string") {
|
|
85
|
+
return undefined;
|
|
86
|
+
}
|
|
87
|
+
return target.startsWith("#") ? target : `${COMPONENT_SCHEMAS}${escapePointerSegment(target)}`;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/** Whether the discriminator `mapping` of `union` names the schema at `target`. */
|
|
91
|
+
export function unionMaps(union: SchemaObject, target: string): boolean {
|
|
92
|
+
const mapping = (union.discriminator as { readonly mapping?: unknown } | undefined)?.mapping;
|
|
93
|
+
if (!isSchemaObject(mapping)) {
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
return Object.values(mapping).some((value) => mappingRef(value) === target);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Whether the schema at `target` is a member of `union`: the union's type contains it, or the
|
|
101
|
+
* discriminator `mapping` names it, which gives it a value of the union as a member does.
|
|
102
|
+
*/
|
|
103
|
+
export function isUnionMember(
|
|
104
|
+
union: SchemaObject,
|
|
105
|
+
target: string,
|
|
106
|
+
resolve: ResolveSchemaRef,
|
|
107
|
+
): boolean {
|
|
108
|
+
return unionMaps(union, target) || unionReaches(union, target, resolve);
|
|
109
|
+
}
|