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,265 @@
|
|
|
1
|
+
import {
|
|
2
|
+
irIntersection,
|
|
3
|
+
irKeyword,
|
|
4
|
+
irObject,
|
|
5
|
+
irProperty,
|
|
6
|
+
irReference,
|
|
7
|
+
} from "../../../domain/ir/constructors.js";
|
|
8
|
+
import type { IrPropertyName, IrPropertySignature, IrType } from "../../../domain/ir/nodes.js";
|
|
9
|
+
import { toPropertyName } from "../../../domain/ir/property-name.js";
|
|
10
|
+
import { createRef } from "../../../domain/openapi/json-pointer.js";
|
|
11
|
+
import {
|
|
12
|
+
PARAMETER_LOCATIONS,
|
|
13
|
+
type ParameterLocation,
|
|
14
|
+
type ParameterObject,
|
|
15
|
+
type ParameterOrReference,
|
|
16
|
+
QUERYSTRING_LOCATION,
|
|
17
|
+
} from "../../../domain/openapi/parameter-object.js";
|
|
18
|
+
import type { SchemaObject } from "../../../domain/openapi/schema-object.js";
|
|
19
|
+
import { OutputFix } from "../../../domain/output-fixes.js";
|
|
20
|
+
import { refType } from "../ref-type.js";
|
|
21
|
+
import type { SchemaLocation } from "../schema/schema-context.js";
|
|
22
|
+
import { withSchemaComment } from "../schema-comment.js";
|
|
23
|
+
import type { TransformContext } from "../transform-context.js";
|
|
24
|
+
import { isExplodedQueryObject } from "./exploded-query.js";
|
|
25
|
+
import { parameterType } from "./parameter.js";
|
|
26
|
+
|
|
27
|
+
const PATH_TEMPLATE_RE = /\{([^}]+)\}/g;
|
|
28
|
+
|
|
29
|
+
/** A parameter as written in the document, and the object its `$ref` points to. */
|
|
30
|
+
interface ParameterEntry {
|
|
31
|
+
readonly original: ParameterOrReference;
|
|
32
|
+
readonly resolved: ParameterObject | undefined;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/** An entry whose `$ref` resolved, so its location and name are known. */
|
|
36
|
+
type ResolvedEntry = ParameterEntry & { readonly resolved: ParameterObject };
|
|
37
|
+
|
|
38
|
+
function resolveParameter(
|
|
39
|
+
parameter: ParameterOrReference,
|
|
40
|
+
context: TransformContext,
|
|
41
|
+
): ParameterObject | undefined {
|
|
42
|
+
return "$ref" in parameter
|
|
43
|
+
? (context.refs.resolve(parameter.$ref) as ParameterObject | undefined)
|
|
44
|
+
: parameter;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/** Required string parameters for every `{name}` in a path template. */
|
|
48
|
+
function pathTemplateParameters(path: string): ParameterObject[] {
|
|
49
|
+
return (path.match(PATH_TEMPLATE_RE) ?? []).map((match) => ({
|
|
50
|
+
name: match.slice(1, -1),
|
|
51
|
+
in: "path",
|
|
52
|
+
required: true,
|
|
53
|
+
schema: { type: "string" },
|
|
54
|
+
}));
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/** `--generate-path-params`: add the path template parameters the list does not define. */
|
|
58
|
+
function withPathTemplateParameters(
|
|
59
|
+
parameters: readonly ParameterOrReference[],
|
|
60
|
+
location: SchemaLocation,
|
|
61
|
+
context: TransformContext,
|
|
62
|
+
): ParameterOrReference[] {
|
|
63
|
+
const result = [...parameters];
|
|
64
|
+
if (!context.options.generatePathParams || !location.path) {
|
|
65
|
+
return result;
|
|
66
|
+
}
|
|
67
|
+
for (const parameter of pathTemplateParameters(location.path)) {
|
|
68
|
+
const isDefined = result.some((candidate) => {
|
|
69
|
+
const resolved = resolveParameter(candidate, context);
|
|
70
|
+
return resolved?.in === "path" && resolved.name === parameter.name;
|
|
71
|
+
});
|
|
72
|
+
if (!isDefined) {
|
|
73
|
+
result.push(parameter);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return result;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
function isDeprecatedParameter(parameter: ParameterObject | undefined): boolean {
|
|
80
|
+
const schema = parameter?.schema as SchemaObject | undefined;
|
|
81
|
+
return Boolean(parameter?.deprecated || schema?.deprecated);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/** Resolved parameters, sorted for `--alphabetize`, without deprecated ones if excluded. */
|
|
85
|
+
function parameterEntries(
|
|
86
|
+
parameters: readonly ParameterOrReference[],
|
|
87
|
+
context: TransformContext,
|
|
88
|
+
): ParameterEntry[] {
|
|
89
|
+
const entries = parameters.map((original) => ({
|
|
90
|
+
original,
|
|
91
|
+
resolved: resolveParameter(original, context),
|
|
92
|
+
}));
|
|
93
|
+
if (context.options.alphabetize) {
|
|
94
|
+
// Unlike map keys, the original sorts parameters with the default locale's `localeCompare`.
|
|
95
|
+
entries.sort((left, right) =>
|
|
96
|
+
(left.resolved?.name ?? "").localeCompare(right.resolved?.name ?? ""),
|
|
97
|
+
);
|
|
98
|
+
}
|
|
99
|
+
return context.options.excludeDeprecated
|
|
100
|
+
? entries.filter(({ resolved }) => !isDeprecatedParameter(resolved))
|
|
101
|
+
: entries;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/** The original quotes a name that is not text (a missing name prints as `"undefined"`). */
|
|
105
|
+
function parameterName(name: unknown): IrPropertyName {
|
|
106
|
+
return typeof name === "string" || typeof name === "number"
|
|
107
|
+
? toPropertyName(name)
|
|
108
|
+
: { kind: "string", value: String(name) };
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
function referencedParameterType(ref: string, resolved: ParameterObject): IrType {
|
|
112
|
+
// A `$ref` that resolves to another `$ref` is not a parameter object yet: index it as a path.
|
|
113
|
+
const isParameter = !(resolved as { $ref?: unknown }).$ref;
|
|
114
|
+
const parameter = isParameter ? { in: resolved.in, name: resolved.name } : null;
|
|
115
|
+
return refType(ref, { parameter });
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
function entryType(
|
|
119
|
+
{ original, resolved }: ResolvedEntry,
|
|
120
|
+
location: SchemaLocation,
|
|
121
|
+
context: TransformContext,
|
|
122
|
+
): IrType {
|
|
123
|
+
const path = createRef([location.path, "parameters", resolved.in, resolved.name]);
|
|
124
|
+
return "$ref" in original
|
|
125
|
+
? referencedParameterType(original.$ref, resolved)
|
|
126
|
+
: parameterType(resolved, { ...location, path }, context);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
function parameterMember(
|
|
130
|
+
entry: ResolvedEntry,
|
|
131
|
+
location: SchemaLocation,
|
|
132
|
+
context: TransformContext,
|
|
133
|
+
): IrPropertySignature {
|
|
134
|
+
const { resolved } = entry;
|
|
135
|
+
const property = irProperty(parameterName(resolved.name), entryType(entry, location, context), {
|
|
136
|
+
isOptional: resolved.in !== "path" && !resolved.required,
|
|
137
|
+
isReadonly: context.options.immutable,
|
|
138
|
+
});
|
|
139
|
+
return withSchemaComment(property, resolved);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* The `query` member typed by an `in: querystring` parameter (OpenAPI 3.2, ADR-020): the parameter
|
|
144
|
+
* is the whole query string. Null when there is none, or when `in: query` parameters sit next to
|
|
145
|
+
* it, which 3.2 does not allow; those keep their types, and a warning names the parameter.
|
|
146
|
+
*/
|
|
147
|
+
function querystringMember(
|
|
148
|
+
entries: readonly ParameterEntry[],
|
|
149
|
+
location: SchemaLocation,
|
|
150
|
+
context: TransformContext,
|
|
151
|
+
): IrPropertySignature | null {
|
|
152
|
+
const querystring = entries.find(
|
|
153
|
+
(entry): entry is ResolvedEntry => entry.resolved?.in === QUERYSTRING_LOCATION,
|
|
154
|
+
);
|
|
155
|
+
if (!querystring || entries.some((entry) => entry.resolved?.in === "query")) {
|
|
156
|
+
return null;
|
|
157
|
+
}
|
|
158
|
+
const property = irProperty(toPropertyName("query"), entryType(querystring, location, context), {
|
|
159
|
+
isOptional: !querystring.resolved.required,
|
|
160
|
+
isReadonly: context.options.immutable,
|
|
161
|
+
});
|
|
162
|
+
return withSchemaComment(property, querystring.resolved);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/** With `exploded-query-objects`, whether the parameter's object keys are keys of `query`. */
|
|
166
|
+
function isExplodedEntry(entry: ResolvedEntry, context: TransformContext): boolean {
|
|
167
|
+
return (
|
|
168
|
+
context.options.fixes.has(OutputFix.EXPLODED_QUERY_OBJECTS) &&
|
|
169
|
+
isExplodedQueryObject(entry.resolved, context.refs)
|
|
170
|
+
);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* An exploded object parameter's part of `query`: its object type. A parameter that may be left
|
|
175
|
+
* out sends none of its keys then, so they are optional: `Partial<…>`.
|
|
176
|
+
*/
|
|
177
|
+
function explodedPart(
|
|
178
|
+
entry: ResolvedEntry,
|
|
179
|
+
location: SchemaLocation,
|
|
180
|
+
context: TransformContext,
|
|
181
|
+
): IrType {
|
|
182
|
+
const type = entryType(entry, location, context);
|
|
183
|
+
return entry.resolved.required ? type : irReference("Partial", [type]);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/** A location's parameters as members, and the object types of its exploded parameters. */
|
|
187
|
+
interface LocationParts {
|
|
188
|
+
readonly members: readonly IrPropertySignature[];
|
|
189
|
+
readonly exploded: readonly IrType[];
|
|
190
|
+
readonly isOptional: boolean;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/** Each parameter in document order, so the declarations they add keep their order. */
|
|
194
|
+
function locationParts(
|
|
195
|
+
entries: readonly ResolvedEntry[],
|
|
196
|
+
location: SchemaLocation,
|
|
197
|
+
context: TransformContext,
|
|
198
|
+
): LocationParts {
|
|
199
|
+
const members: IrPropertySignature[] = [];
|
|
200
|
+
const exploded: IrType[] = [];
|
|
201
|
+
let isOptional = true;
|
|
202
|
+
for (const entry of entries) {
|
|
203
|
+
if (isExplodedEntry(entry, context)) {
|
|
204
|
+
exploded.push(explodedPart(entry, location, context));
|
|
205
|
+
isOptional &&= !entry.resolved.required;
|
|
206
|
+
continue;
|
|
207
|
+
}
|
|
208
|
+
const member = parameterMember(entry, location, context);
|
|
209
|
+
members.push(member);
|
|
210
|
+
isOptional &&= member.isOptional;
|
|
211
|
+
}
|
|
212
|
+
return { members, exploded, isOptional };
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/** The members' object, intersected with the exploded parameters' types; `never` for none. */
|
|
216
|
+
function locationType({ members, exploded }: LocationParts): IrType {
|
|
217
|
+
const types = [...(members.length > 0 ? [irObject(members)] : []), ...exploded];
|
|
218
|
+
const [first] = types;
|
|
219
|
+
if (first === undefined) {
|
|
220
|
+
return irKeyword("never");
|
|
221
|
+
}
|
|
222
|
+
return types.length === 1 ? first : irIntersection(types);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/** One location's parameters; optional when all of them are, and `never` when there are none. */
|
|
226
|
+
function locationMember(
|
|
227
|
+
parameterIn: ParameterLocation,
|
|
228
|
+
entries: readonly ParameterEntry[],
|
|
229
|
+
location: SchemaLocation,
|
|
230
|
+
context: TransformContext,
|
|
231
|
+
): IrPropertySignature {
|
|
232
|
+
const located = entries.filter(
|
|
233
|
+
(entry): entry is ResolvedEntry => entry.resolved?.in === parameterIn,
|
|
234
|
+
);
|
|
235
|
+
const parts = locationParts(located, location, context);
|
|
236
|
+
return irProperty(toPropertyName(parameterIn), locationType(parts), {
|
|
237
|
+
isOptional: parts.isOptional,
|
|
238
|
+
isReadonly: context.options.immutable,
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* The `parameters` property of an operation or path item: one member per location, each an object
|
|
244
|
+
* of that location's parameters. `location.path` is the path template for
|
|
245
|
+
* `--generate-path-params`.
|
|
246
|
+
*/
|
|
247
|
+
export function parametersMember(
|
|
248
|
+
parameters: readonly ParameterOrReference[],
|
|
249
|
+
location: SchemaLocation,
|
|
250
|
+
context: TransformContext,
|
|
251
|
+
): IrPropertySignature {
|
|
252
|
+
const entries = parameterEntries(
|
|
253
|
+
withPathTemplateParameters(parameters, location, context),
|
|
254
|
+
context,
|
|
255
|
+
);
|
|
256
|
+
const querystring = querystringMember(entries, location, context);
|
|
257
|
+
const members = PARAMETER_LOCATIONS.map((parameterIn) =>
|
|
258
|
+
parameterIn === "query" && querystring
|
|
259
|
+
? querystring
|
|
260
|
+
: locationMember(parameterIn, entries, location, context),
|
|
261
|
+
);
|
|
262
|
+
return irProperty(toPropertyName("parameters"), irObject(members), {
|
|
263
|
+
isReadonly: context.options.immutable,
|
|
264
|
+
});
|
|
265
|
+
}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { irKeyword, irObject, irProperty } from "../../../domain/ir/constructors.js";
|
|
2
|
+
import type { IrMember, IrPropertySignature, IrType } from "../../../domain/ir/nodes.js";
|
|
3
|
+
import { toPropertyName } from "../../../domain/ir/property-name.js";
|
|
4
|
+
import { createRef } from "../../../domain/openapi/json-pointer.js";
|
|
5
|
+
import type { OperationObject } from "../../../domain/openapi/operation-object.js";
|
|
6
|
+
import type {
|
|
7
|
+
ParameterObject,
|
|
8
|
+
ParameterOrReference,
|
|
9
|
+
} from "../../../domain/openapi/parameter-object.js";
|
|
10
|
+
import {
|
|
11
|
+
ADDITIONAL_OPERATIONS_KEY,
|
|
12
|
+
HTTP_METHODS,
|
|
13
|
+
type OperationEntry,
|
|
14
|
+
type PathItemMethod,
|
|
15
|
+
type PathItemObject,
|
|
16
|
+
QUERY_METHOD,
|
|
17
|
+
} from "../../../domain/openapi/path-item-object.js";
|
|
18
|
+
import { documentEntries } from "../document-entries.js";
|
|
19
|
+
import { refType } from "../ref-type.js";
|
|
20
|
+
import type { SchemaLocation } from "../schema/schema-context.js";
|
|
21
|
+
import type { TransformContext } from "../transform-context.js";
|
|
22
|
+
import { documentMember } from "./document-member.js";
|
|
23
|
+
import { operationMembers } from "./operation.js";
|
|
24
|
+
import { parametersMember } from "./parameters.js";
|
|
25
|
+
|
|
26
|
+
/** Redocly reads `#` in an operation ID as a pointer, so it is replaced (upstream issue #1542). */
|
|
27
|
+
const HASH_RE = /#/g;
|
|
28
|
+
|
|
29
|
+
/** Whether the method has an operation, not removed by `--exclude-deprecated`. */
|
|
30
|
+
function isIncluded(
|
|
31
|
+
operation: OperationEntry | undefined,
|
|
32
|
+
context: TransformContext,
|
|
33
|
+
): operation is OperationEntry {
|
|
34
|
+
if (!operation) {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
const resolved =
|
|
38
|
+
"$ref" in operation
|
|
39
|
+
? (context.refs.resolve(operation.$ref) as OperationObject | undefined)
|
|
40
|
+
: operation;
|
|
41
|
+
return !(context.options.excludeDeprecated && resolved?.deprecated);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Path item parameters followed by the operation's, keyed by location and name, so an operation
|
|
46
|
+
* parameter replaces the path item parameter it redefines (upstream issue #1798).
|
|
47
|
+
*/
|
|
48
|
+
function mergedParameters(
|
|
49
|
+
pathItem: PathItemObject,
|
|
50
|
+
operation: OperationObject,
|
|
51
|
+
context: TransformContext,
|
|
52
|
+
): ParameterOrReference[] {
|
|
53
|
+
const byKey = new Map<string, ParameterOrReference>();
|
|
54
|
+
for (const parameter of [...(pathItem.parameters ?? []), ...(operation.parameters ?? [])]) {
|
|
55
|
+
const resolved =
|
|
56
|
+
"$ref" in parameter
|
|
57
|
+
? (context.refs.resolve(parameter.$ref) as ParameterObject | undefined)
|
|
58
|
+
: parameter;
|
|
59
|
+
byKey.set(`${resolved?.in}-${resolved?.name}`, parameter);
|
|
60
|
+
}
|
|
61
|
+
return [...byKey.values()];
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* An operation with an `operationId` goes into the `operations` interface and is referenced from
|
|
66
|
+
* the path item; others are written inline.
|
|
67
|
+
*/
|
|
68
|
+
function operationType(
|
|
69
|
+
pathItem: PathItemObject,
|
|
70
|
+
operation: OperationObject,
|
|
71
|
+
location: SchemaLocation,
|
|
72
|
+
context: TransformContext,
|
|
73
|
+
): IrType {
|
|
74
|
+
const merged = { ...operation, parameters: mergedParameters(pathItem, operation, context) };
|
|
75
|
+
if (!operation.operationId) {
|
|
76
|
+
return irObject(operationMembers(merged, location, context));
|
|
77
|
+
}
|
|
78
|
+
const operationId = operation.operationId.replace(HASH_RE, "/");
|
|
79
|
+
context.footer.addOperation(() =>
|
|
80
|
+
irProperty(toPropertyName(operationId), irObject(operationMembers(merged, location, context)), {
|
|
81
|
+
isReadonly: context.options.immutable,
|
|
82
|
+
}),
|
|
83
|
+
);
|
|
84
|
+
return refType(createRef(["operations", operationId]));
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/** An included operation, the member name it gets and its location below the path item. */
|
|
88
|
+
interface DeclaredOperation {
|
|
89
|
+
readonly name: string;
|
|
90
|
+
readonly operation: OperationEntry;
|
|
91
|
+
readonly path: string;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function operationMember(
|
|
95
|
+
{ name, operation, path }: DeclaredOperation,
|
|
96
|
+
pathItem: PathItemObject,
|
|
97
|
+
location: SchemaLocation,
|
|
98
|
+
context: TransformContext,
|
|
99
|
+
): IrPropertySignature {
|
|
100
|
+
const type =
|
|
101
|
+
"$ref" in operation
|
|
102
|
+
? refType(operation.$ref)
|
|
103
|
+
: operationType(pathItem, operation, { ...location, path }, context);
|
|
104
|
+
return documentMember(name, type, operation, { isReadonly: context.options.immutable });
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/** A method member: the operation, or `?: never` when there is none or it is excluded. */
|
|
108
|
+
function methodMember(
|
|
109
|
+
method: PathItemMethod,
|
|
110
|
+
pathItem: PathItemObject,
|
|
111
|
+
location: SchemaLocation,
|
|
112
|
+
context: TransformContext,
|
|
113
|
+
): IrPropertySignature {
|
|
114
|
+
const operation = pathItem[method];
|
|
115
|
+
if (!isIncluded(operation, context)) {
|
|
116
|
+
const isReadonly = context.options.immutable;
|
|
117
|
+
return irProperty(toPropertyName(method), irKeyword("never"), { isOptional: true, isReadonly });
|
|
118
|
+
}
|
|
119
|
+
const path = createRef([location.path, method]);
|
|
120
|
+
return operationMember({ name: method, operation, path }, pathItem, location, context);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* `additionalOperations` (OpenAPI 3.2): the included operations keyed by their exact method name,
|
|
125
|
+
* or null when the path item has none left.
|
|
126
|
+
*/
|
|
127
|
+
function additionalOperationsMember(
|
|
128
|
+
pathItem: PathItemObject,
|
|
129
|
+
location: SchemaLocation,
|
|
130
|
+
context: TransformContext,
|
|
131
|
+
): IrPropertySignature | null {
|
|
132
|
+
const entries = documentEntries(pathItem.additionalOperations ?? {}, context.options);
|
|
133
|
+
const members = entries
|
|
134
|
+
.filter(([, operation]) => isIncluded(operation, context))
|
|
135
|
+
.map(([method, operation]) => {
|
|
136
|
+
const path = createRef([location.path, ADDITIONAL_OPERATIONS_KEY, method]);
|
|
137
|
+
return operationMember({ name: method, operation, path }, pathItem, location, context);
|
|
138
|
+
});
|
|
139
|
+
return members.length > 0
|
|
140
|
+
? irProperty(toPropertyName(ADDITIONAL_OPERATIONS_KEY), irObject(members), {
|
|
141
|
+
isReadonly: context.options.immutable,
|
|
142
|
+
})
|
|
143
|
+
: null;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* A path item (OpenAPI 3.2 §4.8.9): its `parameters`, one member per HTTP method, then `query` and
|
|
148
|
+
* `additionalOperations` when the path item declares them (ADR-020).
|
|
149
|
+
*/
|
|
150
|
+
export function pathItemType(
|
|
151
|
+
pathItem: PathItemObject,
|
|
152
|
+
location: SchemaLocation,
|
|
153
|
+
context: TransformContext,
|
|
154
|
+
): IrType {
|
|
155
|
+
const parametersLocation = { ...location, path: createRef([location.path, "parameters"]) };
|
|
156
|
+
const members: IrMember[] = [
|
|
157
|
+
parametersMember(pathItem.parameters ?? [], parametersLocation, context),
|
|
158
|
+
...HTTP_METHODS.map((method) => methodMember(method, pathItem, location, context)),
|
|
159
|
+
];
|
|
160
|
+
if (pathItem[QUERY_METHOD] !== undefined) {
|
|
161
|
+
members.push(methodMember(QUERY_METHOD, pathItem, location, context));
|
|
162
|
+
}
|
|
163
|
+
const additionalOperations = additionalOperationsMember(pathItem, location, context);
|
|
164
|
+
if (additionalOperations) {
|
|
165
|
+
members.push(additionalOperations);
|
|
166
|
+
}
|
|
167
|
+
return irObject(members);
|
|
168
|
+
}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `--path-params-as-types` overlaps (roadmap R10.2, backlog 28). A path key with parameters is an
|
|
3
|
+
* index signature over a template literal type, such as `` `/apps/${string}` ``. `${string}` also
|
|
4
|
+
* matches `/`, so that signature covers `/apps/regions` and `` `/apps/${string}/restart` `` as
|
|
5
|
+
* well, and TypeScript requires the covered keys' types to be assignable to its type (TS2411,
|
|
6
|
+
* TS2413). These functions find the signatures that cover another key the checker rejects.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { isAssignableToTemplate, type TemplateShape } from "./template-key-match.js";
|
|
10
|
+
|
|
11
|
+
/** A placeholder of a template literal type, by the type it stands for. */
|
|
12
|
+
export type PathPlaceholder = "string" | "number" | "boolean";
|
|
13
|
+
|
|
14
|
+
/** One part of a path key: text, or a placeholder. */
|
|
15
|
+
export type PathKeyPart =
|
|
16
|
+
| { readonly kind: "text"; readonly text: string }
|
|
17
|
+
| { readonly kind: "placeholder"; readonly type: PathPlaceholder };
|
|
18
|
+
|
|
19
|
+
/** A path key: a URL written as a property, or a template literal type of an index signature. */
|
|
20
|
+
export type PathKey =
|
|
21
|
+
| { readonly kind: "literal"; readonly url: string }
|
|
22
|
+
| { readonly kind: "template"; readonly parts: readonly PathKeyPart[] };
|
|
23
|
+
|
|
24
|
+
const BOOLEAN_TEXTS: readonly string[] = ["true", "false"];
|
|
25
|
+
|
|
26
|
+
/** The shapes after one more part; a boolean placeholder doubles them, as TypeScript does. */
|
|
27
|
+
function withPart(shapes: readonly TemplateShape[], part: PathKeyPart): TemplateShape[] {
|
|
28
|
+
return shapes.flatMap((shape): TemplateShape[] => {
|
|
29
|
+
const lead = shape.texts.slice(0, -1);
|
|
30
|
+
// A shape has one text more than it has placeholders, so it always has a last text.
|
|
31
|
+
const last = shape.texts[shape.texts.length - 1] as string;
|
|
32
|
+
if (part.kind === "text") {
|
|
33
|
+
return [{ texts: [...lead, last + part.text], types: shape.types }];
|
|
34
|
+
}
|
|
35
|
+
if (part.type === "boolean") {
|
|
36
|
+
return BOOLEAN_TEXTS.map((text) => ({ texts: [...lead, last + text], types: shape.types }));
|
|
37
|
+
}
|
|
38
|
+
return [{ texts: [...shape.texts, ""], types: [...shape.types, part.type] }];
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* The key types TypeScript makes of a key: a literal is one text; a template is one shape, or a
|
|
44
|
+
* union of shapes when `${boolean}` is in it (`` `/a/${boolean}` `` is `"/a/true" | "/a/false"`).
|
|
45
|
+
*/
|
|
46
|
+
function shapesOf(key: PathKey): readonly TemplateShape[] {
|
|
47
|
+
if (key.kind === "literal") {
|
|
48
|
+
return [{ texts: [key.url], types: [] }];
|
|
49
|
+
}
|
|
50
|
+
return key.parts.reduce<TemplateShape[]>(withPart, [{ texts: [""], types: [] }]);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Whether a signature checks the covered key: every type of the covered key is assignable to one
|
|
55
|
+
* of the signature's types. A shape without placeholders (a boolean-only template) is a string
|
|
56
|
+
* literal, which is no signature, so the targets leave it out.
|
|
57
|
+
*/
|
|
58
|
+
function isCoveredBy(
|
|
59
|
+
sources: readonly TemplateShape[],
|
|
60
|
+
targets: readonly TemplateShape[],
|
|
61
|
+
): boolean {
|
|
62
|
+
return (
|
|
63
|
+
sources.length > 0 &&
|
|
64
|
+
sources.every((source) => targets.some((target) => isAssignableToTemplate(source, target)))
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/** Whether TypeScript rejects the key at `covered` for the signature at `covering`. */
|
|
69
|
+
export type CoverRejection = (covering: number, covered: number) => boolean;
|
|
70
|
+
|
|
71
|
+
/** Without type information every covered key counts. */
|
|
72
|
+
const EVERY_COVER_REJECTED: CoverRejection = () => true;
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* The key types TypeScript checks against a signature: a literal's, or a template's signature
|
|
76
|
+
* types. A boolean-only template is no signature (TS1337), so the checker neither checks it nor
|
|
77
|
+
* checks anything against it; a repeated one is still reported (TS2374, see `repeatedTemplates`).
|
|
78
|
+
*/
|
|
79
|
+
function checkedShapes(key: PathKey): readonly TemplateShape[] {
|
|
80
|
+
const shapes = shapesOf(key);
|
|
81
|
+
return key.kind === "literal" ? shapes : shapes.filter((shape) => shape.types.length > 0);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/** A checked key: the key, the shapes TypeScript checks, and its template identity. */
|
|
85
|
+
interface CheckedKey {
|
|
86
|
+
readonly key: PathKey;
|
|
87
|
+
readonly shapes: readonly TemplateShape[];
|
|
88
|
+
/** The key types written as one string, for templates; null for a literal. */
|
|
89
|
+
readonly template: string | null;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
function checkedKeyOf(key: PathKey): CheckedKey {
|
|
93
|
+
const template = key.kind === "template" ? JSON.stringify(shapesOf(key)) : null;
|
|
94
|
+
return { key, shapes: checkedShapes(key), template };
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* The templates written more than once, as paths that differ only in parameter names give
|
|
99
|
+
* (`/a/{id}`, `/a/{name}`). OpenAPI forbids such paths, and one object with both signatures fails
|
|
100
|
+
* to compile whatever their types (TS2374), so each always counts as covering the other.
|
|
101
|
+
*/
|
|
102
|
+
function repeatedTemplates(checked: readonly CheckedKey[]): ReadonlySet<string> {
|
|
103
|
+
const seen = new Set<string>();
|
|
104
|
+
const repeated = new Set<string>();
|
|
105
|
+
for (const { template } of checked) {
|
|
106
|
+
if (template !== null) {
|
|
107
|
+
(seen.has(template) ? repeated : seen).add(template);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return repeated;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* The checked keys by the first text of each of their shapes, sorted. A key type is assignable to
|
|
115
|
+
* a template only when its first text starts with the template's first text (both branches of
|
|
116
|
+
* `isAssignableToTemplate`), so the keys a template can cover are one run of this list. Without
|
|
117
|
+
* it the check compares every pair of keys, which takes minutes for 10 000 paths.
|
|
118
|
+
*/
|
|
119
|
+
interface StartTextIndex {
|
|
120
|
+
readonly starts: readonly string[];
|
|
121
|
+
readonly keyIndexes: readonly number[];
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/** Code unit order: in it the strings that start with one prefix are adjacent. */
|
|
125
|
+
function compareCodeUnits(left: string, right: string): number {
|
|
126
|
+
if (left === right) {
|
|
127
|
+
return 0;
|
|
128
|
+
}
|
|
129
|
+
return left < right ? -1 : 1;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
function startTextIndexOf(checked: readonly CheckedKey[]): StartTextIndex {
|
|
133
|
+
const entries = checked.flatMap(({ shapes }, keyIndex) =>
|
|
134
|
+
shapes.map((shape) => ({ start: shape.texts[0] as string, keyIndex })),
|
|
135
|
+
);
|
|
136
|
+
entries.sort((left, right) => compareCodeUnits(left.start, right.start));
|
|
137
|
+
return {
|
|
138
|
+
starts: entries.map((entry) => entry.start),
|
|
139
|
+
keyIndexes: entries.map((entry) => entry.keyIndex),
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/** The indexes of the keys with a shape whose first text starts with one of the prefixes. */
|
|
144
|
+
function keysStartingWith(index: StartTextIndex, prefixes: readonly string[]): Set<number> {
|
|
145
|
+
const found = new Set<number>();
|
|
146
|
+
for (const prefix of prefixes) {
|
|
147
|
+
let low = 0;
|
|
148
|
+
let high = index.starts.length;
|
|
149
|
+
while (low < high) {
|
|
150
|
+
const middle = (low + high) >> 1;
|
|
151
|
+
if ((index.starts[middle] as string) < prefix) {
|
|
152
|
+
low = middle + 1;
|
|
153
|
+
} else {
|
|
154
|
+
high = middle;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
for (let at = low; at < index.starts.length; at += 1) {
|
|
158
|
+
if (!(index.starts[at] as string).startsWith(prefix)) {
|
|
159
|
+
break;
|
|
160
|
+
}
|
|
161
|
+
found.add(index.keyIndexes[at] as number);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return found;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* The indexes of the template keys that cover another key of the list, where it is rejected, or
|
|
169
|
+
* that repeat another template key. A template covers the keys TypeScript checks against it, the
|
|
170
|
+
* ones its own matching accepts (see `template-key-match.ts`), not every string it stands for:
|
|
171
|
+
* `` `/a/b/${number}` `` is no `` `/${string}/${number}` `` to the checker, which does not
|
|
172
|
+
* backtrack, so that pair is never checked.
|
|
173
|
+
*/
|
|
174
|
+
export function coveringTemplateKeys(
|
|
175
|
+
keys: readonly PathKey[],
|
|
176
|
+
isRejected: CoverRejection = EVERY_COVER_REJECTED,
|
|
177
|
+
): ReadonlySet<number> {
|
|
178
|
+
const checked = keys.map(checkedKeyOf);
|
|
179
|
+
const repeated = repeatedTemplates(checked);
|
|
180
|
+
const startTexts = startTextIndexOf(checked);
|
|
181
|
+
const covering = new Set<number>();
|
|
182
|
+
checked.forEach(({ template, shapes: targets }, index) => {
|
|
183
|
+
if (template === null) {
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
const prefixes = targets.map((target) => target.texts[0] as string);
|
|
187
|
+
const candidates = [...keysStartingWith(startTexts, prefixes)].sort((a, b) => a - b);
|
|
188
|
+
const isCovering =
|
|
189
|
+
repeated.has(template) ||
|
|
190
|
+
candidates.some(
|
|
191
|
+
(otherIndex) =>
|
|
192
|
+
otherIndex !== index &&
|
|
193
|
+
isCoveredBy((checked[otherIndex] as CheckedKey).shapes, targets) &&
|
|
194
|
+
isRejected(index, otherIndex),
|
|
195
|
+
);
|
|
196
|
+
if (isCovering) {
|
|
197
|
+
covering.add(index);
|
|
198
|
+
}
|
|
199
|
+
});
|
|
200
|
+
return covering;
|
|
201
|
+
}
|