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,294 @@
|
|
|
1
|
+
import type ts from "typescript";
|
|
2
|
+
import { irRaw } from "../../domain/ir/constructors.js";
|
|
3
|
+
import type {
|
|
4
|
+
IrComment,
|
|
5
|
+
IrKeyword,
|
|
6
|
+
IrMember,
|
|
7
|
+
IrPropertyName,
|
|
8
|
+
IrPropertySignature,
|
|
9
|
+
IrTupleElement,
|
|
10
|
+
IrType,
|
|
11
|
+
} from "../../domain/ir/nodes.js";
|
|
12
|
+
import type { TypeScriptModule } from "./load-typescript.js";
|
|
13
|
+
import { asRaw, isIrNode, needsPrintedText } from "./typescript-raw-text.js";
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Read TypeScript type nodes from user callbacks into IR (ADR-004, decision 3). Synthesized nodes
|
|
17
|
+
* are mapped by structure. Anything the IR cannot express exactly is printed with the TypeScript
|
|
18
|
+
* printer, the way the original output it, and kept as a `raw` node: parsed nodes, nodes with
|
|
19
|
+
* comments, explicit parentheses, single-quoted strings, numbers not in canonical form, and syntax
|
|
20
|
+
* the IR does not model. Every function takes the user's TypeScript module (ADR-004, decision 4):
|
|
21
|
+
* `SyntaxKind` numbers differ between versions, so a node is read with the module that made it.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
function keywordOf(ts: TypeScriptModule, kind: ts.SyntaxKind): IrKeyword | undefined {
|
|
25
|
+
const keywords: ReadonlyMap<ts.SyntaxKind, IrKeyword> = new Map([
|
|
26
|
+
[ts.SyntaxKind.StringKeyword, "string"],
|
|
27
|
+
[ts.SyntaxKind.NumberKeyword, "number"],
|
|
28
|
+
[ts.SyntaxKind.BooleanKeyword, "boolean"],
|
|
29
|
+
[ts.SyntaxKind.UndefinedKeyword, "undefined"],
|
|
30
|
+
[ts.SyntaxKind.UnknownKeyword, "unknown"],
|
|
31
|
+
[ts.SyntaxKind.NeverKeyword, "never"],
|
|
32
|
+
]);
|
|
33
|
+
return keywords.get(kind);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function isCanonicalNumber(text: string): boolean {
|
|
37
|
+
return String(Number(text)) === text;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function fromNumber(ts: TypeScriptModule, literal: ts.Expression): IrType | null {
|
|
41
|
+
if (ts.isNumericLiteral(literal)) {
|
|
42
|
+
return isCanonicalNumber(literal.text)
|
|
43
|
+
? { kind: "numberLiteral", value: Number(literal.text) }
|
|
44
|
+
: null;
|
|
45
|
+
}
|
|
46
|
+
const isNegative =
|
|
47
|
+
ts.isPrefixUnaryExpression(literal) &&
|
|
48
|
+
literal.operator === ts.SyntaxKind.MinusToken &&
|
|
49
|
+
ts.isNumericLiteral(literal.operand) &&
|
|
50
|
+
isCanonicalNumber(literal.operand.text) &&
|
|
51
|
+
Number(literal.operand.text) !== 0;
|
|
52
|
+
return isNegative
|
|
53
|
+
? { kind: "numberLiteral", value: -Number((literal.operand as ts.NumericLiteral).text) }
|
|
54
|
+
: null;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function fromLiteral(ts: TypeScriptModule, node: ts.LiteralTypeNode): IrType | null {
|
|
58
|
+
const { literal } = node;
|
|
59
|
+
if (ts.isStringLiteral(literal)) {
|
|
60
|
+
const isSingleQuoted = (literal as { singleQuote?: boolean }).singleQuote === true;
|
|
61
|
+
return isSingleQuoted
|
|
62
|
+
? null
|
|
63
|
+
: { kind: "stringLiteral", value: literal.text, encoding: "escaped" };
|
|
64
|
+
}
|
|
65
|
+
if (literal.kind === ts.SyntaxKind.NullKeyword) {
|
|
66
|
+
return { kind: "keyword", keyword: "null" };
|
|
67
|
+
}
|
|
68
|
+
if (literal.kind === ts.SyntaxKind.TrueKeyword || literal.kind === ts.SyntaxKind.FalseKeyword) {
|
|
69
|
+
return { kind: "booleanLiteral", value: literal.kind === ts.SyntaxKind.TrueKeyword };
|
|
70
|
+
}
|
|
71
|
+
return fromNumber(ts, literal);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/** Converts the children of one node, which becomes their parent. */
|
|
75
|
+
function childrenOf(ts: TypeScriptModule, parent: ts.Node): (child: ts.TypeNode) => IrType {
|
|
76
|
+
return (child) => fromTypeNode(ts, child, parent);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
function fromReference(ts: TypeScriptModule, node: ts.TypeReferenceNode): IrType | null {
|
|
80
|
+
if (!ts.isIdentifier(node.typeName)) {
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
const typeArguments = (node.typeArguments ?? []).map(childrenOf(ts, node));
|
|
84
|
+
return { kind: "reference", name: ts.idText(node.typeName), typeArguments };
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
function fromTupleElement(
|
|
88
|
+
ts: TypeScriptModule,
|
|
89
|
+
element: ts.TypeNode,
|
|
90
|
+
convert: (node: ts.TypeNode) => IrType,
|
|
91
|
+
): IrTupleElement {
|
|
92
|
+
if (ts.isRestTypeNode(element)) {
|
|
93
|
+
return { type: convert(element.type), isRest: true, isOptional: false };
|
|
94
|
+
}
|
|
95
|
+
if (ts.isOptionalTypeNode(element)) {
|
|
96
|
+
// The `?` is the parent of the type: it decides which parentheses the factory put in.
|
|
97
|
+
return { type: fromTypeNode(ts, element.type, element), isRest: false, isOptional: true };
|
|
98
|
+
}
|
|
99
|
+
return { type: convert(element), isRest: false, isOptional: false };
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/** A tuple of plain, rest and optional elements; one with named members stays text. */
|
|
103
|
+
function fromTuple(ts: TypeScriptModule, node: ts.TupleTypeNode): IrType | null {
|
|
104
|
+
if (node.elements.some((element) => ts.isNamedTupleMember(element))) {
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
const convert = childrenOf(ts, node);
|
|
108
|
+
return {
|
|
109
|
+
kind: "tuple",
|
|
110
|
+
elements: node.elements.map((element) => fromTupleElement(ts, element, convert)),
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Leading comments in order, or null when the IR cannot hold them: trailing comments, or a
|
|
116
|
+
* comment without a line break after it (the IR always writes one).
|
|
117
|
+
*/
|
|
118
|
+
function fromComments(ts: TypeScriptModule, node: ts.Node): IrComment[] | null {
|
|
119
|
+
const comments = ts.getSyntheticLeadingComments(node) ?? [];
|
|
120
|
+
const hasTrailing = (ts.getSyntheticTrailingComments(node)?.length ?? 0) > 0;
|
|
121
|
+
if (hasTrailing || comments.some((comment) => !comment.hasTrailingNewLine)) {
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
return comments.map((comment) => ({
|
|
125
|
+
kind: comment.kind === ts.SyntaxKind.MultiLineCommentTrivia ? "block" : "line",
|
|
126
|
+
text: comment.text,
|
|
127
|
+
}));
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
function fromPropertyName(ts: TypeScriptModule, name: ts.PropertyName): IrPropertyName | null {
|
|
131
|
+
if (ts.isIdentifier(name)) {
|
|
132
|
+
return { kind: "identifier", text: ts.idText(name) };
|
|
133
|
+
}
|
|
134
|
+
if (ts.isStringLiteral(name) && (name as { singleQuote?: boolean }).singleQuote !== true) {
|
|
135
|
+
return { kind: "string", value: name.text };
|
|
136
|
+
}
|
|
137
|
+
return ts.isNumericLiteral(name) ? { kind: "number", text: name.text } : null;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/** Only `readonly` is modeled; any other modifier makes the member unreadable as IR. */
|
|
141
|
+
function readonlyFlag(ts: TypeScriptModule, node: ts.TypeElement): boolean | null {
|
|
142
|
+
const modifiers = ts.canHaveModifiers(node) ? (ts.getModifiers(node) ?? []) : [];
|
|
143
|
+
const isOnlyReadonly = modifiers.every(
|
|
144
|
+
(modifier) => modifier.kind === ts.SyntaxKind.ReadonlyKeyword,
|
|
145
|
+
);
|
|
146
|
+
return isOnlyReadonly ? modifiers.length > 0 : null;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/** A property signature as IR, or null when it uses syntax the IR does not model. */
|
|
150
|
+
export function fromPropertySignature(
|
|
151
|
+
ts: TypeScriptModule,
|
|
152
|
+
node: ts.PropertySignature,
|
|
153
|
+
): IrPropertySignature | null {
|
|
154
|
+
const name = fromPropertyName(ts, node.name);
|
|
155
|
+
const comments = fromComments(ts, node);
|
|
156
|
+
const isReadonly = readonlyFlag(ts, node);
|
|
157
|
+
if (name === null || comments === null || isReadonly === null || node.type === undefined) {
|
|
158
|
+
return null;
|
|
159
|
+
}
|
|
160
|
+
return {
|
|
161
|
+
kind: "property",
|
|
162
|
+
name,
|
|
163
|
+
type: fromTypeNode(ts, node.type, node),
|
|
164
|
+
isOptional: node.questionToken !== undefined,
|
|
165
|
+
isReadonly,
|
|
166
|
+
comments,
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
function fromIndexSignature(
|
|
171
|
+
ts: TypeScriptModule,
|
|
172
|
+
node: ts.IndexSignatureDeclaration,
|
|
173
|
+
): IrMember | null {
|
|
174
|
+
const [parameter, ...others] = node.parameters;
|
|
175
|
+
const comments = fromComments(ts, node);
|
|
176
|
+
const isReadonly = readonlyFlag(ts, node);
|
|
177
|
+
const isPlain =
|
|
178
|
+
parameter?.type !== undefined && ts.isIdentifier(parameter.name) && others.length === 0;
|
|
179
|
+
if (!isPlain || comments === null || isReadonly === null) {
|
|
180
|
+
return null;
|
|
181
|
+
}
|
|
182
|
+
return {
|
|
183
|
+
kind: "indexSignature",
|
|
184
|
+
parameterName: ts.idText(parameter.name as ts.Identifier),
|
|
185
|
+
parameterType: fromTypeNode(ts, parameter.type as ts.TypeNode, node),
|
|
186
|
+
type: fromTypeNode(ts, node.type, node),
|
|
187
|
+
isReadonly,
|
|
188
|
+
comments,
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
function fromMember(ts: TypeScriptModule, member: ts.TypeElement): IrMember | null {
|
|
193
|
+
if (member.pos >= 0) {
|
|
194
|
+
return null;
|
|
195
|
+
}
|
|
196
|
+
if (ts.isPropertySignature(member)) {
|
|
197
|
+
return fromPropertySignature(ts, member);
|
|
198
|
+
}
|
|
199
|
+
return ts.isIndexSignatureDeclaration(member) ? fromIndexSignature(ts, member) : null;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
function fromTypeLiteral(ts: TypeScriptModule, node: ts.TypeLiteralNode): IrType | null {
|
|
203
|
+
const members = node.members.map((member) => fromMember(ts, member));
|
|
204
|
+
const isReadable = members.every((member) => member !== null);
|
|
205
|
+
return isReadable ? { kind: "object", members: members as IrMember[] } : null;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
function fromComposite(ts: TypeScriptModule, node: ts.TypeNode): IrType | null {
|
|
209
|
+
const convert = childrenOf(ts, node);
|
|
210
|
+
if (ts.isArrayTypeNode(node)) {
|
|
211
|
+
return { kind: "array", element: convert(node.elementType) };
|
|
212
|
+
}
|
|
213
|
+
if (ts.isUnionTypeNode(node)) {
|
|
214
|
+
return { kind: "union", types: node.types.map(convert) };
|
|
215
|
+
}
|
|
216
|
+
if (ts.isIntersectionTypeNode(node)) {
|
|
217
|
+
return { kind: "intersection", types: node.types.map(convert) };
|
|
218
|
+
}
|
|
219
|
+
if (ts.isIndexedAccessTypeNode(node)) {
|
|
220
|
+
return {
|
|
221
|
+
kind: "indexedAccess",
|
|
222
|
+
object: convert(node.objectType),
|
|
223
|
+
index: convert(node.indexType),
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
if (ts.isTypeOperatorNode(node) && node.operator === ts.SyntaxKind.ReadonlyKeyword) {
|
|
227
|
+
return { kind: "readonly", type: convert(node.type) };
|
|
228
|
+
}
|
|
229
|
+
return ts.isTypeLiteralNode(node) ? fromTypeLiteral(ts, node) : null;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
function fromStructure(ts: TypeScriptModule, node: ts.TypeNode): IrType | null {
|
|
233
|
+
const keyword = keywordOf(ts, node.kind);
|
|
234
|
+
if (keyword !== undefined) {
|
|
235
|
+
return { kind: "keyword", keyword };
|
|
236
|
+
}
|
|
237
|
+
if (ts.isIdentifier(node)) {
|
|
238
|
+
// The original writes JSON string literals and some references as bare identifiers.
|
|
239
|
+
return irRaw(ts.idText(node));
|
|
240
|
+
}
|
|
241
|
+
if (ts.isLiteralTypeNode(node)) {
|
|
242
|
+
return fromLiteral(ts, node);
|
|
243
|
+
}
|
|
244
|
+
if (ts.isTypeReferenceNode(node)) {
|
|
245
|
+
return fromReference(ts, node);
|
|
246
|
+
}
|
|
247
|
+
return ts.isTupleTypeNode(node) ? fromTuple(ts, node) : fromComposite(ts, node);
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* Whether the factory's parenthesizer put these parentheses in (same rules as the IR printer):
|
|
252
|
+
* unions, intersections and `readonly` types as array elements, indexed objects, optional tuple
|
|
253
|
+
* elements and `readonly` operands; unions and intersections as members of other unions or
|
|
254
|
+
* intersections.
|
|
255
|
+
*/
|
|
256
|
+
function isFactoryParenthesis(
|
|
257
|
+
ts: TypeScriptModule,
|
|
258
|
+
inner: ts.TypeNode,
|
|
259
|
+
parent: ts.Node | undefined,
|
|
260
|
+
): boolean {
|
|
261
|
+
if (parent === undefined) {
|
|
262
|
+
return false;
|
|
263
|
+
}
|
|
264
|
+
const isComposite = ts.isUnionTypeNode(inner) || ts.isIntersectionTypeNode(inner);
|
|
265
|
+
const isPostfixOrReadonlyParent =
|
|
266
|
+
ts.isArrayTypeNode(parent) ||
|
|
267
|
+
ts.isIndexedAccessTypeNode(parent) ||
|
|
268
|
+
ts.isOptionalTypeNode(parent) ||
|
|
269
|
+
ts.isTypeOperatorNode(parent);
|
|
270
|
+
if (isPostfixOrReadonlyParent) {
|
|
271
|
+
return isComposite || ts.isTypeOperatorNode(inner);
|
|
272
|
+
}
|
|
273
|
+
const isCompositeParent = ts.isUnionTypeNode(parent) || ts.isIntersectionTypeNode(parent);
|
|
274
|
+
return isCompositeParent && isComposite;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
/**
|
|
278
|
+
* Convert a type node. `parent` is the node that contains it: synthesized nodes have no `parent`
|
|
279
|
+
* link, and it is needed to tell parentheses the factory inserted from ones the user wrote.
|
|
280
|
+
*/
|
|
281
|
+
export function fromTypeNode(ts: TypeScriptModule, node: ts.TypeNode, parent?: ts.Node): IrType {
|
|
282
|
+
if (isIrNode(node)) {
|
|
283
|
+
return node;
|
|
284
|
+
}
|
|
285
|
+
if (needsPrintedText(ts, node)) {
|
|
286
|
+
return asRaw(ts, node);
|
|
287
|
+
}
|
|
288
|
+
if (ts.isParenthesizedTypeNode(node)) {
|
|
289
|
+
return isFactoryParenthesis(ts, node.type, parent)
|
|
290
|
+
? fromTypeNode(ts, node.type, parent)
|
|
291
|
+
: asRaw(ts, node);
|
|
292
|
+
}
|
|
293
|
+
return fromStructure(ts, node) ?? asRaw(ts, node);
|
|
294
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type ts from "typescript";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* The TypeScript compiler's types for code outside the bridge (ADR-004, decision 4). Type-only:
|
|
5
|
+
* it is erased at build time, so importing it never loads TypeScript. Only the bridge imports
|
|
6
|
+
* `typescript` itself (enforced by dependency-cruiser).
|
|
7
|
+
*/
|
|
8
|
+
export type { ts };
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { toStatements } from "../adapters/type-ast-bridge/ir-declarations-to-typescript.js";
|
|
2
|
+
import { toTypeElement, toTypeNode } from "../adapters/type-ast-bridge/ir-to-typescript.js";
|
|
3
|
+
import {
|
|
4
|
+
loadTypeScript,
|
|
5
|
+
type TypeScriptModule,
|
|
6
|
+
} from "../adapters/type-ast-bridge/load-typescript.js";
|
|
7
|
+
import {
|
|
8
|
+
type AstToStringOptions,
|
|
9
|
+
printWithTypeScript,
|
|
10
|
+
} from "../adapters/type-ast-bridge/print-typescript.js";
|
|
11
|
+
import type { ts } from "../adapters/type-ast-bridge/typescript-types.js";
|
|
12
|
+
import { type IrPrintable, printFragments } from "../application/print/print-nodes.js";
|
|
13
|
+
import { withStackOverflowReported } from "../application/stack-overflow.js";
|
|
14
|
+
import type { IrDeclaration } from "../domain/ir/nodes.js";
|
|
15
|
+
|
|
16
|
+
export type { AstToStringOptions } from "../adapters/type-ast-bridge/print-typescript.js";
|
|
17
|
+
|
|
18
|
+
/** What `astToString` prints: IR (from `openapiTS` and the transformers) or TypeScript nodes. */
|
|
19
|
+
export type AstToStringInput = IrPrintable | ts.Node | readonly (IrPrintable | ts.Node)[];
|
|
20
|
+
|
|
21
|
+
function isIrNode(node: IrPrintable | ts.Node): node is IrPrintable {
|
|
22
|
+
return typeof node.kind === "string";
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/** An IR node in TypeScript form, for printing it together with TypeScript nodes. */
|
|
26
|
+
function toTypeScriptNodes(ts: TypeScriptModule, node: IrPrintable): ts.Node[] {
|
|
27
|
+
if (isIrDeclarationKind(node)) {
|
|
28
|
+
return toStatements(ts, node);
|
|
29
|
+
}
|
|
30
|
+
const isMember = node.kind === "property" || node.kind === "indexSignature";
|
|
31
|
+
return [isMember ? toTypeElement(ts, node) : toTypeNode(ts, node)];
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function isIrDeclarationKind(node: IrPrintable): node is IrDeclaration {
|
|
35
|
+
return ["interface", "typeAlias", "enum", "constArray", "rawDeclaration"].includes(node.kind);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Print declarations, members or types as a TypeScript file body. IR is printed by our printer;
|
|
40
|
+
* with TypeScript nodes in the input, or with TypeScript printer options, everything goes
|
|
41
|
+
* through the TypeScript printer as before (ADR-004, decision 1).
|
|
42
|
+
*/
|
|
43
|
+
export function astToString(ast: AstToStringInput, options?: AstToStringOptions): string {
|
|
44
|
+
return withStackOverflowReported("print", () => printNodes(ast, options));
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function printNodes(ast: AstToStringInput, options: AstToStringOptions | undefined): string {
|
|
48
|
+
const nodes: readonly (IrPrintable | ts.Node)[] = Array.isArray(ast)
|
|
49
|
+
? ast
|
|
50
|
+
: [ast as IrPrintable | ts.Node];
|
|
51
|
+
if (nodes.every(isIrNode) && !options) {
|
|
52
|
+
return printFragments(nodes);
|
|
53
|
+
}
|
|
54
|
+
const ts = loadTypeScript();
|
|
55
|
+
const statements = nodes.flatMap((node) =>
|
|
56
|
+
isIrNode(node) ? toTypeScriptNodes(ts, node) : [node],
|
|
57
|
+
);
|
|
58
|
+
return printWithTypeScript(ts, statements, options);
|
|
59
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { performance } from "node:perf_hooks";
|
|
2
|
+
import { createConfig, type Config as RedoclyConfig } from "@redocly/openapi-core";
|
|
3
|
+
import supportsColor from "supports-color";
|
|
4
|
+
import { createTerminalLogger } from "../adapters/terminal-logger/terminal-logger.js";
|
|
5
|
+
import type { Logger } from "../application/ports/logger.js";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* The default adapters of the Node API (ENGINEERING_PLAN 4.5): this module and the CLI's
|
|
9
|
+
* composition root are where the process environment is read.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
/** Colors when the terminal supports them, as the original decided. */
|
|
13
|
+
export function terminalSupportsColor(): boolean {
|
|
14
|
+
const stdout = supportsColor.stdout;
|
|
15
|
+
return Boolean(stdout) && stdout !== false && stdout.hasBasic !== false;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/** The terminal logger with `DEBUG` from the environment, writing to the console. */
|
|
19
|
+
export function defaultLogger(silent: boolean): Logger {
|
|
20
|
+
return createTerminalLogger({
|
|
21
|
+
silent,
|
|
22
|
+
debugFilter: process.env.DEBUG,
|
|
23
|
+
useColors: terminalSupportsColor(),
|
|
24
|
+
sink: console,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* How long one remote `$ref` (or a remote source) may take to load. Large documents (the 27 MB
|
|
30
|
+
* Cloudflare spec) download in seconds; a minute covers slow hosts, while Node's own fetch would
|
|
31
|
+
* wait five minutes for a server that never answers (ENGINEERING_PLAN 8.5).
|
|
32
|
+
*/
|
|
33
|
+
export const REMOTE_REF_TIMEOUT_MS = 60_000;
|
|
34
|
+
|
|
35
|
+
/** A monotonic clock in milliseconds, for debug durations. */
|
|
36
|
+
export function monotonicNow(): number {
|
|
37
|
+
return performance.now();
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/** The default Redocly config: minimal rules, and duplicate operation IDs are an error. */
|
|
41
|
+
export function defaultRedoclyConfig(): Promise<RedoclyConfig> {
|
|
42
|
+
const rules = { "operation-operationId-unique": { severity: "error" as const } };
|
|
43
|
+
return createConfig({ rules }, { extends: ["minimal"] });
|
|
44
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { Logger } from "../application/ports/logger.js";
|
|
2
|
+
import {
|
|
3
|
+
type DiscriminatorValueConflict,
|
|
4
|
+
findDiscriminatorValueConflicts,
|
|
5
|
+
} from "../domain/openapi/discriminator-conflicts.js";
|
|
6
|
+
import { OutputFix } from "../domain/output-fixes.js";
|
|
7
|
+
import { WARNING_CODES, warningText } from "../domain/warnings.js";
|
|
8
|
+
|
|
9
|
+
const DOCS_BASE_URL = "https://github.com/openapi-typesafe/openapi-typesafe/blob/main/docs";
|
|
10
|
+
const DOCS_URL = `${DOCS_BASE_URL}/advanced.md#discriminator-values`;
|
|
11
|
+
|
|
12
|
+
function listed(values: readonly unknown[]): string {
|
|
13
|
+
return values.map((value) => JSON.stringify(value)).join(", ");
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function warningOf(conflict: DiscriminatorValueConflict): string {
|
|
17
|
+
const { member, owner, propertyName, values, allowed, isImplicit } = conflict;
|
|
18
|
+
const rule = isImplicit
|
|
19
|
+
? "A Discriminator Object without a mapping entry for a schema gives it its schema name as " +
|
|
20
|
+
`the value; add a mapping entry such as ${JSON.stringify(allowed[0])}: "${member}".`
|
|
21
|
+
: "The Discriminator Object maps these values to the schema; map the values it allows.";
|
|
22
|
+
return (
|
|
23
|
+
`${member}: the discriminator "${propertyName}" of ${owner} gives this schema the value ` +
|
|
24
|
+
`${listed(values)}, which its "${propertyName}" property does not allow ` +
|
|
25
|
+
`(${listed(allowed)}), so no value of the schema matches the discriminator. ${rule} ` +
|
|
26
|
+
`See ${DOCS_URL}`
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Warn once per discriminator member whose value its own property does not allow. The members
|
|
32
|
+
* depend on the run's fixes (`allof-discriminated-union`).
|
|
33
|
+
*/
|
|
34
|
+
export function warnDiscriminatorValueConflicts(
|
|
35
|
+
document: unknown,
|
|
36
|
+
fixes: readonly OutputFix[],
|
|
37
|
+
logger: Logger,
|
|
38
|
+
): void {
|
|
39
|
+
const isUnionReused = fixes.includes(OutputFix.ALLOF_DISCRIMINATED_UNION);
|
|
40
|
+
for (const conflict of findDiscriminatorValueConflicts(document, { isUnionReused })) {
|
|
41
|
+
logger.warn(warningText(warningOf(conflict), WARNING_CODES.DISCRIMINATOR_VALUE_NOT_ALLOWED));
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { SharedEnumNames } from "../application/transform/footer/shared-enum-names.js";
|
|
2
|
+
import type { EnumDeclarationRequest } from "../application/transform/schema/schema-context.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* `--dedupe-enums` names a shared enum after the first schema that declares it. With
|
|
6
|
+
* `discriminator-values` and `--enum`, a member's value refers to the owner's enum, which is then
|
|
7
|
+
* declared when the member is typed, maybe before that first schema; the shared enum would take
|
|
8
|
+
* the owner's name. A first pass records the names of the declaring schemas only, so the second
|
|
9
|
+
* pass names each shared enum as the document order does (`OtherKind`, not `PetPetType`).
|
|
10
|
+
*/
|
|
11
|
+
export class FirstSchemaNameRecorder implements SharedEnumNames {
|
|
12
|
+
private readonly names = new Map<string, string>();
|
|
13
|
+
|
|
14
|
+
nameOf(key: string, name: string, request: EnumDeclarationRequest): string {
|
|
15
|
+
if (!request.isOwnerReference && !this.names.has(key)) {
|
|
16
|
+
this.names.set(key, name);
|
|
17
|
+
}
|
|
18
|
+
return name;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/** The recorded name of each shared enum, for the second pass. */
|
|
22
|
+
chosenNames(): SharedEnumNames {
|
|
23
|
+
const chosen = new Map(this.names);
|
|
24
|
+
return { nameOf: (key, name) => chosen.get(key) ?? name };
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { createRef, parseRefPointer } from "../domain/openapi/json-pointer.js";
|
|
2
|
+
import type { SchemaObject } from "../types.js";
|
|
3
|
+
import type { EnumPatch } from "./discriminator-enum.js";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* The `discriminator-values` fix (#1700). With `--enum`, the enum the scan adds to a member
|
|
7
|
+
* (`petType: "Cat"`) is declared as an enum of its own (`CatPetType`), which is not assignable to
|
|
8
|
+
* the parent's enum (`PetType`). The parent's enum is found here, so the member's property can be
|
|
9
|
+
* typed with its members (`PetType.Cat`).
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
/** The parent's enum schema and the location it is typed at, which gives the enum its name. */
|
|
13
|
+
export interface EnumParent {
|
|
14
|
+
readonly schema: SchemaObject;
|
|
15
|
+
readonly path: string;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
type ResolveSchemaRef = (ref: string) => unknown;
|
|
19
|
+
|
|
20
|
+
/** A declared property schema and the location the transformer types it at. */
|
|
21
|
+
interface DeclaredProperty {
|
|
22
|
+
readonly property: unknown;
|
|
23
|
+
readonly path: string;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const PROPERTIES_KEYWORD = "properties";
|
|
27
|
+
/** `components`, `schemas` and the schema name: the segments before the schema's own keywords. */
|
|
28
|
+
const ROOT_SEGMENTS = 3;
|
|
29
|
+
|
|
30
|
+
/** The location a `$ref` is typed at: object properties are nested without `properties`. */
|
|
31
|
+
function typedAt(ref: string): string {
|
|
32
|
+
const segments = parseRefPointer(ref);
|
|
33
|
+
const nested = segments.slice(ROOT_SEGMENTS).filter((segment) => segment !== PROPERTIES_KEYWORD);
|
|
34
|
+
return createRef([...segments.slice(0, ROOT_SEGMENTS), ...nested]);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function isSchemaObject(value: unknown): value is SchemaObject {
|
|
38
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/** The property `name` of a schema object typed at `ref`. */
|
|
42
|
+
function ownProperty(item: SchemaObject, ref: string, name: string): DeclaredProperty | undefined {
|
|
43
|
+
const property = ("properties" in item ? item.properties : undefined)?.[name];
|
|
44
|
+
return property === undefined ? undefined : { property, path: createRef([ref, name]) };
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/** The property `name` of the schema at `ref`, its own or from an `allOf` item, depth first. */
|
|
48
|
+
function declaredProperty(
|
|
49
|
+
ref: string,
|
|
50
|
+
name: string,
|
|
51
|
+
resolve: ResolveSchemaRef,
|
|
52
|
+
visited: Set<string>,
|
|
53
|
+
): DeclaredProperty | undefined {
|
|
54
|
+
const schema = resolve(ref);
|
|
55
|
+
if (visited.has(ref) || !isSchemaObject(schema)) {
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
visited.add(ref);
|
|
59
|
+
// An inline `allOf` item is typed at its parent's location, so both share the path.
|
|
60
|
+
for (const item of [schema, ...(schema.allOf ?? [])]) {
|
|
61
|
+
if (!isSchemaObject(item)) {
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
const found =
|
|
65
|
+
"$ref" in item
|
|
66
|
+
? declaredProperty(item.$ref as string, name, resolve, visited)
|
|
67
|
+
: ownProperty(item, ref, name);
|
|
68
|
+
if (found !== undefined) {
|
|
69
|
+
return found;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return undefined;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* A discriminator and the `$ref` of the schema that declares its property; `ref` is the member
|
|
77
|
+
* whose value the discriminator gives, where there is one.
|
|
78
|
+
*/
|
|
79
|
+
export type DiscriminatorOwner = Pick<EnumPatch, "discriminator" | "discriminatorRef"> &
|
|
80
|
+
Partial<Pick<EnumPatch, "ref">>;
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* The property `name` that the member at `ref` inherits through its `allOf` `$ref`s. Its own
|
|
84
|
+
* keywords and inline items are left out: the scan writes the added value there.
|
|
85
|
+
*/
|
|
86
|
+
function inheritedProperty(
|
|
87
|
+
ref: string,
|
|
88
|
+
name: string,
|
|
89
|
+
resolve: ResolveSchemaRef,
|
|
90
|
+
): DeclaredProperty | undefined {
|
|
91
|
+
const schema = resolve(ref);
|
|
92
|
+
const visited = new Set([ref]);
|
|
93
|
+
for (const item of isSchemaObject(schema) ? (schema.allOf ?? []) : []) {
|
|
94
|
+
const found =
|
|
95
|
+
isSchemaObject(item) && "$ref" in item
|
|
96
|
+
? declaredProperty(item.$ref as string, name, resolve, visited)
|
|
97
|
+
: undefined;
|
|
98
|
+
if (found !== undefined) {
|
|
99
|
+
return found;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return undefined;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* The enum of the property that the discriminator owner declares, if it is one. An owner that
|
|
107
|
+
* declares no such property (a `oneOf` with a mapping) leaves the member's type to the property
|
|
108
|
+
* the member inherits, so that property's enum is the one.
|
|
109
|
+
*/
|
|
110
|
+
export function enumParentOf(
|
|
111
|
+
patch: DiscriminatorOwner,
|
|
112
|
+
resolve: ResolveSchemaRef,
|
|
113
|
+
): EnumParent | undefined {
|
|
114
|
+
const name = patch.discriminator.propertyName;
|
|
115
|
+
const declared =
|
|
116
|
+
declaredProperty(patch.discriminatorRef, name, resolve, new Set()) ??
|
|
117
|
+
(patch.ref === undefined ? undefined : inheritedProperty(patch.ref, name, resolve));
|
|
118
|
+
if (declared === undefined || !isSchemaObject(declared.property)) {
|
|
119
|
+
return undefined;
|
|
120
|
+
}
|
|
121
|
+
const ref = (declared.property as { readonly $ref?: unknown }).$ref;
|
|
122
|
+
const parent =
|
|
123
|
+
typeof ref === "string"
|
|
124
|
+
? { schema: resolve(ref), path: typedAt(ref) }
|
|
125
|
+
: { schema: declared.property, path: declared.path };
|
|
126
|
+
return isSchemaObject(parent.schema) && Array.isArray(parent.schema.enum)
|
|
127
|
+
? { schema: parent.schema, path: parent.path }
|
|
128
|
+
: undefined;
|
|
129
|
+
}
|