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,59 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import { isatty } from 'node:tty';
|
|
3
|
+
import { pathToFileURL } from 'node:url';
|
|
4
|
+
import colors from 'ansi-colors';
|
|
5
|
+
import { createNodeFileSystem } from '../adapters/node-file-system/node-file-system.mjs';
|
|
6
|
+
import { createRedoclyConfigSource } from '../adapters/redocly-loader/redocly-config-source.mjs';
|
|
7
|
+
import { astToString } from '../api/ast-to-string.mjs';
|
|
8
|
+
import { COMMENT_HEADER } from '../api/comment-header.mjs';
|
|
9
|
+
import { monotonicNow, defaultLogger, terminalSupportsColor } from '../api/default-ports.mjs';
|
|
10
|
+
import openapiTS from '../api/openapi-ts.mjs';
|
|
11
|
+
import { runCli } from './run-cli.mjs';
|
|
12
|
+
|
|
13
|
+
const PACKAGE_JSON = new URL("../../package.json", import.meta.url);
|
|
14
|
+
function readVersion() {
|
|
15
|
+
const packageJson = JSON.parse(fs.readFileSync(PACKAGE_JSON, "utf8"));
|
|
16
|
+
return packageJson.version;
|
|
17
|
+
}
|
|
18
|
+
function terminalStyle() {
|
|
19
|
+
const palette = colors.create();
|
|
20
|
+
palette.enabled = terminalSupportsColor();
|
|
21
|
+
return {
|
|
22
|
+
bold: (text) => palette.bold(text),
|
|
23
|
+
green: (text) => palette.green(text),
|
|
24
|
+
dim: (text) => palette.dim(text)
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
const STDIN_DESCRIPTOR = 0;
|
|
28
|
+
const generateTypes = async (source, options) => `${COMMENT_HEADER}${astToString(await openapiTS(source, options))}`;
|
|
29
|
+
function terminalConsole() {
|
|
30
|
+
return {
|
|
31
|
+
// biome-ignore lint/suspicious/noConsole: the CLI's own output lines
|
|
32
|
+
info: (text) => console.info(text),
|
|
33
|
+
// biome-ignore lint/suspicious/noConsole: the CLI's own notices
|
|
34
|
+
notice: (text) => console.warn(text)
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
function processDependencies() {
|
|
38
|
+
const cwd = process.cwd();
|
|
39
|
+
return {
|
|
40
|
+
cwd: pathToFileURL(`${cwd}/`),
|
|
41
|
+
version: readVersion(),
|
|
42
|
+
logger: defaultLogger(false),
|
|
43
|
+
console: terminalConsole(),
|
|
44
|
+
writeStdout: (text) => process.stdout.write(text),
|
|
45
|
+
stdin: () => process.stdin,
|
|
46
|
+
// `isatty` reads the descriptor without opening `process.stdin`, which would keep the
|
|
47
|
+
// process alive.
|
|
48
|
+
isStdinTerminal: () => isatty(STDIN_DESCRIPTOR),
|
|
49
|
+
files: createNodeFileSystem(),
|
|
50
|
+
redoclyConfigs: createRedoclyConfigSource(cwd),
|
|
51
|
+
generate: generateTypes,
|
|
52
|
+
now: monotonicNow,
|
|
53
|
+
style: terminalStyle()
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
runCli(process.argv.slice(2), processDependencies()).then((exitCode) => {
|
|
57
|
+
process.exitCode = exitCode;
|
|
58
|
+
});
|
|
59
|
+
//# sourceMappingURL=main.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.mjs","sources":["../../src/cli/main.ts"],"sourcesContent":["import fs from \"node:fs\";\nimport { isatty } from \"node:tty\";\nimport { pathToFileURL } from \"node:url\";\nimport colors from \"ansi-colors\";\nimport { createNodeFileSystem } from \"../adapters/node-file-system/node-file-system.js\";\nimport { createRedoclyConfigSource } from \"../adapters/redocly-loader/redocly-config-source.js\";\nimport { astToString } from \"../api/ast-to-string.js\";\nimport { COMMENT_HEADER } from \"../api/comment-header.js\";\nimport { defaultLogger, monotonicNow, terminalSupportsColor } from \"../api/default-ports.js\";\nimport openapiTS from \"../api/openapi-ts.js\";\nimport type { CliConsole, CliDependencies, GenerateTypes, TextStyle } from \"./cli-dependencies.js\";\nimport { runCli } from \"./run-cli.js\";\n\n/**\n * The CLI's composition root (ENGINEERING_PLAN 4.5, ADR-012): the only CLI module that touches the\n * process. `bin/cli.js` imports the built copy of this module.\n */\n\n/** The same path from `src/cli/` and from the built `dist/cli/`. */\nconst PACKAGE_JSON = new URL(\"../../package.json\", import.meta.url);\n\nfunction readVersion(): string {\n const packageJson: { version: string } = JSON.parse(fs.readFileSync(PACKAGE_JSON, \"utf8\"));\n return packageJson.version;\n}\n\nfunction terminalStyle(): TextStyle {\n const palette = colors.create();\n palette.enabled = terminalSupportsColor();\n return {\n bold: (text) => palette.bold(text),\n green: (text) => palette.green(text),\n dim: (text) => palette.dim(text),\n };\n}\n\nconst STDIN_DESCRIPTOR = 0;\n\nconst generateTypes: GenerateTypes = async (source, options) =>\n `${COMMENT_HEADER}${astToString(await openapiTS(source, options))}`;\n\nfunction terminalConsole(): CliConsole {\n return {\n // biome-ignore lint/suspicious/noConsole: the CLI's own output lines\n info: (text) => console.info(text),\n // biome-ignore lint/suspicious/noConsole: the CLI's own notices\n notice: (text) => console.warn(text),\n };\n}\n\nfunction processDependencies(): CliDependencies {\n const cwd = process.cwd();\n return {\n cwd: pathToFileURL(`${cwd}/`),\n version: readVersion(),\n logger: defaultLogger(false),\n console: terminalConsole(),\n writeStdout: (text) => process.stdout.write(text),\n stdin: () => process.stdin,\n // `isatty` reads the descriptor without opening `process.stdin`, which would keep the\n // process alive.\n isStdinTerminal: () => isatty(STDIN_DESCRIPTOR),\n files: createNodeFileSystem(),\n redoclyConfigs: createRedoclyConfigSource(cwd),\n generate: generateTypes,\n now: monotonicNow,\n style: terminalStyle(),\n };\n}\n\nrunCli(process.argv.slice(2), processDependencies()).then((exitCode) => {\n process.exitCode = exitCode;\n});\n"],"names":[],"mappings":";;;;;;;;;;;;AAmBA,MAAM,YAAA,GAAe,IAAI,GAAA,CAAI,oBAAA,EAAsB,YAAY,GAAG,CAAA;AAElE,SAAS,WAAA,GAAsB;AAC7B,EAAA,MAAM,cAAmC,IAAA,CAAK,KAAA,CAAM,GAAG,YAAA,CAAa,YAAA,EAAc,MAAM,CAAC,CAAA;AACzF,EAAA,OAAO,WAAA,CAAY,OAAA;AACrB;AAEA,SAAS,aAAA,GAA2B;AAClC,EAAA,MAAM,OAAA,GAAU,OAAO,MAAA,EAAO;AAC9B,EAAA,OAAA,CAAQ,UAAU,qBAAA,EAAsB;AACxC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,CAAC,IAAA,KAAS,OAAA,CAAQ,KAAK,IAAI,CAAA;AAAA,IACjC,KAAA,EAAO,CAAC,IAAA,KAAS,OAAA,CAAQ,MAAM,IAAI,CAAA;AAAA,IACnC,GAAA,EAAK,CAAC,IAAA,KAAS,OAAA,CAAQ,IAAI,IAAI;AAAA,GACjC;AACF;AAEA,MAAM,gBAAA,GAAmB,CAAA;AAEzB,MAAM,aAAA,GAA+B,OAAO,MAAA,EAAQ,OAAA,KAClD,CAAA,EAAG,cAAc,CAAA,EAAG,WAAA,CAAY,MAAM,SAAA,CAAU,MAAA,EAAQ,OAAO,CAAC,CAAC,CAAA,CAAA;AAEnE,SAAS,eAAA,GAA8B;AACrC,EAAA,OAAO;AAAA;AAAA,IAEL,IAAA,EAAM,CAAC,IAAA,KAAS,OAAA,CAAQ,KAAK,IAAI,CAAA;AAAA;AAAA,IAEjC,MAAA,EAAQ,CAAC,IAAA,KAAS,OAAA,CAAQ,KAAK,IAAI;AAAA,GACrC;AACF;AAEA,SAAS,mBAAA,GAAuC;AAC9C,EAAA,MAAM,GAAA,GAAM,QAAQ,GAAA,EAAI;AACxB,EAAA,OAAO;AAAA,IACL,GAAA,EAAK,aAAA,CAAc,CAAA,EAAG,GAAG,CAAA,CAAA,CAAG,CAAA;AAAA,IAC5B,SAAS,WAAA,EAAY;AAAA,IACrB,MAAA,EAAQ,cAAc,KAAK,CAAA;AAAA,IAC3B,SAAS,eAAA,EAAgB;AAAA,IACzB,aAAa,CAAC,IAAA,KAAS,OAAA,CAAQ,MAAA,CAAO,MAAM,IAAI,CAAA;AAAA,IAChD,KAAA,EAAO,MAAM,OAAA,CAAQ,KAAA;AAAA;AAAA;AAAA,IAGrB,eAAA,EAAiB,MAAM,MAAA,CAAO,gBAAgB,CAAA;AAAA,IAC9C,OAAO,oBAAA,EAAqB;AAAA,IAC5B,cAAA,EAAgB,0BAA0B,GAAG,CAAA;AAAA,IAC7C,QAAA,EAAU,aAAA;AAAA,IACV,GAAA,EAAK,YAAA;AAAA,IACL,OAAO,aAAA;AAAc,GACvB;AACF;AAEA,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,EAAG,qBAAqB,CAAA,CAAE,IAAA,CAAK,CAAC,QAAA,KAAa;AACtE,EAAA,OAAA,CAAQ,QAAA,GAAW,QAAA;AACrB,CAAC,CAAA"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const scule = require('scule');
|
|
4
|
+
const cliArguments = require('./cli-arguments.cjs');
|
|
5
|
+
const cliErrors = require('./cli-errors.cjs');
|
|
6
|
+
const cliOutput = require('./cli-output.cjs');
|
|
7
|
+
const docsLinks = require('./docs-links.cjs');
|
|
8
|
+
const fixOption = require('./fix-option.cjs');
|
|
9
|
+
const refLimits = require('./ref-limits.cjs');
|
|
10
|
+
|
|
11
|
+
const REDOCLY_CONFIG_KEY = "x-openapi-ts";
|
|
12
|
+
const FIX_SETTING = "fix";
|
|
13
|
+
function redoclyApisOf(redocly) {
|
|
14
|
+
return Object.entries(redocly.apis ?? {}).map(([name, api]) => {
|
|
15
|
+
const settings = api[REDOCLY_CONFIG_KEY];
|
|
16
|
+
return { name, root: api.root, settings };
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
function hasRedoclyApis(redocly) {
|
|
20
|
+
return Object.keys(redocly.apis ?? {}).length > 0;
|
|
21
|
+
}
|
|
22
|
+
function apiFlags(settings) {
|
|
23
|
+
const flags = {};
|
|
24
|
+
for (const name of cliArguments.GENERATOR_FLAGS) {
|
|
25
|
+
const value = typeof settings[name] === "boolean" ? settings[name] : settings[scule.kebabCase(name)];
|
|
26
|
+
if (typeof value === "boolean") {
|
|
27
|
+
flags[name] = value;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return flags;
|
|
31
|
+
}
|
|
32
|
+
function apiFixNames(settings) {
|
|
33
|
+
return fixOption.fixNamesOf(settings[FIX_SETTING]);
|
|
34
|
+
}
|
|
35
|
+
function configRootOf(redocly, cwd) {
|
|
36
|
+
return redocly.configFile ? cliOutput.resolveLocationUrl(redocly.configFile, cwd) : cwd;
|
|
37
|
+
}
|
|
38
|
+
async function generateApi(run, redocly, api) {
|
|
39
|
+
if (!api.settings?.output) {
|
|
40
|
+
throw cliErrors.cliError(
|
|
41
|
+
"CLI_CONFIG_OUTPUT_MISSING",
|
|
42
|
+
`API ${api.name} is missing an \`${REDOCLY_CONFIG_KEY}.output\` key. See ${docsLinks.MULTIPLE_SCHEMAS_DOCS_URL}`
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
const output = String(api.settings.output);
|
|
46
|
+
const configRoot = configRootOf(redocly, run.deps.cwd);
|
|
47
|
+
const options = {
|
|
48
|
+
...run.args.generatorFlags,
|
|
49
|
+
...apiFlags(api.settings),
|
|
50
|
+
...refLimits.refLimitOptions(run.args, run.deps.cwd),
|
|
51
|
+
...fixOption.fixOption(apiFixNames(api.settings) ?? run.args.fix),
|
|
52
|
+
redocly
|
|
53
|
+
};
|
|
54
|
+
const contents = await run.deps.generate(cliOutput.resolveLocationUrl(api.root, configRoot), options);
|
|
55
|
+
cliOutput.emitOutput(
|
|
56
|
+
run,
|
|
57
|
+
{ source: api.name, output, file: cliOutput.resolveLocationUrl(output, configRoot) },
|
|
58
|
+
contents
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
async function generateRedoclyApis(run, redocly) {
|
|
62
|
+
const apis = redoclyApisOf(redocly);
|
|
63
|
+
const results = await Promise.allSettled(apis.map((api) => generateApi(run, redocly, api)));
|
|
64
|
+
return results.flatMap((result) => result.status === "rejected" ? [result.reason] : []);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
exports.generateRedoclyApis = generateRedoclyApis;
|
|
68
|
+
exports.hasRedoclyApis = hasRedoclyApis;
|
|
69
|
+
//# sourceMappingURL=redocly-apis.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redocly-apis.cjs","sources":["../../src/cli/redocly-apis.ts"],"sourcesContent":["import { kebabCase } from \"scule\";\nimport type { RedoclyConfig } from \"../application/ports/redocly-config-source.js\";\nimport type { OutputFixName } from \"../domain/output-fixes.js\";\nimport type { GeneratorOptions } from \"../types.js\";\nimport { GENERATOR_FLAGS, type GeneratorFlags } from \"./cli-arguments.js\";\nimport { cliError } from \"./cli-errors.js\";\nimport { type CliRun, emitOutput, resolveLocationUrl } from \"./cli-output.js\";\nimport { MULTIPLE_SCHEMAS_DOCS_URL } from \"./docs-links.js\";\nimport { fixNamesOf, fixOption } from \"./fix-option.js\";\nimport { refLimitOptions } from \"./ref-limits.js\";\n\n/** The `apis` of a Redocly config: each API is generated into its `x-openapi-ts.output`. */\n\n/** The key of an API's openapi-typesafe settings in `redocly.yaml`. */\nconst REDOCLY_CONFIG_KEY = \"x-openapi-ts\";\n\n/** The setting of an API that lists its output fixes. */\nconst FIX_SETTING = \"fix\";\n\ntype ApiSettings = Readonly<Record<string, unknown>>;\n\ninterface RedoclyApi {\n readonly name: string;\n readonly root: string;\n readonly settings: ApiSettings | undefined;\n}\n\nfunction redoclyApisOf(redocly: RedoclyConfig): RedoclyApi[] {\n return Object.entries(redocly.apis ?? {}).map(([name, api]) => {\n const settings = (api as Record<string, unknown>)[REDOCLY_CONFIG_KEY];\n return { name, root: api.root, settings: settings as ApiSettings | undefined };\n });\n}\n\nexport function hasRedoclyApis(redocly: RedoclyConfig): boolean {\n return Object.keys(redocly.apis ?? {}).length > 0;\n}\n\n/** The boolean flags an API sets, in camelCase or kebab-case; they win over the CLI's flags. */\nfunction apiFlags(settings: ApiSettings): GeneratorFlags {\n const flags: Partial<Record<(typeof GENERATOR_FLAGS)[number], boolean>> = {};\n for (const name of GENERATOR_FLAGS) {\n const value = typeof settings[name] === \"boolean\" ? settings[name] : settings[kebabCase(name)];\n if (typeof value === \"boolean\") {\n flags[name] = value;\n }\n }\n return flags;\n}\n\n/** The API's `fix` names; they replace the CLI's `--fix`, as its boolean settings win (ADR-021). */\nfunction apiFixNames(settings: ApiSettings): readonly OutputFixName[] | undefined {\n return fixNamesOf(settings[FIX_SETTING]);\n}\n\n/** Paths in the config are relative to the config file; without a file, to the working dir. */\nfunction configRootOf(redocly: RedoclyConfig, cwd: URL): URL {\n return redocly.configFile ? resolveLocationUrl(redocly.configFile, cwd) : cwd;\n}\n\nasync function generateApi(run: CliRun, redocly: RedoclyConfig, api: RedoclyApi): Promise<void> {\n if (!api.settings?.output) {\n throw cliError(\n \"CLI_CONFIG_OUTPUT_MISSING\",\n `API ${api.name} is missing an \\`${REDOCLY_CONFIG_KEY}.output\\` key. ` +\n `See ${MULTIPLE_SCHEMAS_DOCS_URL}`,\n );\n }\n const output = String(api.settings.output);\n const configRoot = configRootOf(redocly, run.deps.cwd);\n const options: GeneratorOptions = {\n ...run.args.generatorFlags,\n ...apiFlags(api.settings),\n ...refLimitOptions(run.args, run.deps.cwd),\n ...fixOption(apiFixNames(api.settings) ?? run.args.fix),\n redocly,\n };\n const contents = await run.deps.generate(resolveLocationUrl(api.root, configRoot), options);\n emitOutput(\n run,\n { source: api.name, output, file: resolveLocationUrl(output, configRoot) },\n contents,\n );\n}\n\n/**\n * Generate every API of the config, concurrently. Every API is generated or checked even when\n * another fails, so `--check` reports a stale output wherever it is; the failures are returned\n * in the order of the config.\n */\nexport async function generateRedoclyApis(run: CliRun, redocly: RedoclyConfig): Promise<unknown[]> {\n const apis = redoclyApisOf(redocly);\n const results = await Promise.allSettled(apis.map((api) => generateApi(run, redocly, api)));\n return results.flatMap((result) => (result.status === \"rejected\" ? [result.reason] : []));\n}\n"],"names":["GENERATOR_FLAGS","kebabCase","fixNamesOf","resolveLocationUrl","cliError","MULTIPLE_SCHEMAS_DOCS_URL","refLimitOptions","fixOption","emitOutput"],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { kebabCase } from 'scule';
|
|
2
|
+
import { GENERATOR_FLAGS } from './cli-arguments.mjs';
|
|
3
|
+
import { cliError } from './cli-errors.mjs';
|
|
4
|
+
import { resolveLocationUrl, emitOutput } from './cli-output.mjs';
|
|
5
|
+
import { MULTIPLE_SCHEMAS_DOCS_URL } from './docs-links.mjs';
|
|
6
|
+
import { fixOption, fixNamesOf } from './fix-option.mjs';
|
|
7
|
+
import { refLimitOptions } from './ref-limits.mjs';
|
|
8
|
+
|
|
9
|
+
const REDOCLY_CONFIG_KEY = "x-openapi-ts";
|
|
10
|
+
const FIX_SETTING = "fix";
|
|
11
|
+
function redoclyApisOf(redocly) {
|
|
12
|
+
return Object.entries(redocly.apis ?? {}).map(([name, api]) => {
|
|
13
|
+
const settings = api[REDOCLY_CONFIG_KEY];
|
|
14
|
+
return { name, root: api.root, settings };
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
function hasRedoclyApis(redocly) {
|
|
18
|
+
return Object.keys(redocly.apis ?? {}).length > 0;
|
|
19
|
+
}
|
|
20
|
+
function apiFlags(settings) {
|
|
21
|
+
const flags = {};
|
|
22
|
+
for (const name of GENERATOR_FLAGS) {
|
|
23
|
+
const value = typeof settings[name] === "boolean" ? settings[name] : settings[kebabCase(name)];
|
|
24
|
+
if (typeof value === "boolean") {
|
|
25
|
+
flags[name] = value;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return flags;
|
|
29
|
+
}
|
|
30
|
+
function apiFixNames(settings) {
|
|
31
|
+
return fixNamesOf(settings[FIX_SETTING]);
|
|
32
|
+
}
|
|
33
|
+
function configRootOf(redocly, cwd) {
|
|
34
|
+
return redocly.configFile ? resolveLocationUrl(redocly.configFile, cwd) : cwd;
|
|
35
|
+
}
|
|
36
|
+
async function generateApi(run, redocly, api) {
|
|
37
|
+
if (!api.settings?.output) {
|
|
38
|
+
throw cliError(
|
|
39
|
+
"CLI_CONFIG_OUTPUT_MISSING",
|
|
40
|
+
`API ${api.name} is missing an \`${REDOCLY_CONFIG_KEY}.output\` key. See ${MULTIPLE_SCHEMAS_DOCS_URL}`
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
const output = String(api.settings.output);
|
|
44
|
+
const configRoot = configRootOf(redocly, run.deps.cwd);
|
|
45
|
+
const options = {
|
|
46
|
+
...run.args.generatorFlags,
|
|
47
|
+
...apiFlags(api.settings),
|
|
48
|
+
...refLimitOptions(run.args, run.deps.cwd),
|
|
49
|
+
...fixOption(apiFixNames(api.settings) ?? run.args.fix),
|
|
50
|
+
redocly
|
|
51
|
+
};
|
|
52
|
+
const contents = await run.deps.generate(resolveLocationUrl(api.root, configRoot), options);
|
|
53
|
+
emitOutput(
|
|
54
|
+
run,
|
|
55
|
+
{ source: api.name, output, file: resolveLocationUrl(output, configRoot) },
|
|
56
|
+
contents
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
async function generateRedoclyApis(run, redocly) {
|
|
60
|
+
const apis = redoclyApisOf(redocly);
|
|
61
|
+
const results = await Promise.allSettled(apis.map((api) => generateApi(run, redocly, api)));
|
|
62
|
+
return results.flatMap((result) => result.status === "rejected" ? [result.reason] : []);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export { generateRedoclyApis, hasRedoclyApis };
|
|
66
|
+
//# sourceMappingURL=redocly-apis.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redocly-apis.mjs","sources":["../../src/cli/redocly-apis.ts"],"sourcesContent":["import { kebabCase } from \"scule\";\nimport type { RedoclyConfig } from \"../application/ports/redocly-config-source.js\";\nimport type { OutputFixName } from \"../domain/output-fixes.js\";\nimport type { GeneratorOptions } from \"../types.js\";\nimport { GENERATOR_FLAGS, type GeneratorFlags } from \"./cli-arguments.js\";\nimport { cliError } from \"./cli-errors.js\";\nimport { type CliRun, emitOutput, resolveLocationUrl } from \"./cli-output.js\";\nimport { MULTIPLE_SCHEMAS_DOCS_URL } from \"./docs-links.js\";\nimport { fixNamesOf, fixOption } from \"./fix-option.js\";\nimport { refLimitOptions } from \"./ref-limits.js\";\n\n/** The `apis` of a Redocly config: each API is generated into its `x-openapi-ts.output`. */\n\n/** The key of an API's openapi-typesafe settings in `redocly.yaml`. */\nconst REDOCLY_CONFIG_KEY = \"x-openapi-ts\";\n\n/** The setting of an API that lists its output fixes. */\nconst FIX_SETTING = \"fix\";\n\ntype ApiSettings = Readonly<Record<string, unknown>>;\n\ninterface RedoclyApi {\n readonly name: string;\n readonly root: string;\n readonly settings: ApiSettings | undefined;\n}\n\nfunction redoclyApisOf(redocly: RedoclyConfig): RedoclyApi[] {\n return Object.entries(redocly.apis ?? {}).map(([name, api]) => {\n const settings = (api as Record<string, unknown>)[REDOCLY_CONFIG_KEY];\n return { name, root: api.root, settings: settings as ApiSettings | undefined };\n });\n}\n\nexport function hasRedoclyApis(redocly: RedoclyConfig): boolean {\n return Object.keys(redocly.apis ?? {}).length > 0;\n}\n\n/** The boolean flags an API sets, in camelCase or kebab-case; they win over the CLI's flags. */\nfunction apiFlags(settings: ApiSettings): GeneratorFlags {\n const flags: Partial<Record<(typeof GENERATOR_FLAGS)[number], boolean>> = {};\n for (const name of GENERATOR_FLAGS) {\n const value = typeof settings[name] === \"boolean\" ? settings[name] : settings[kebabCase(name)];\n if (typeof value === \"boolean\") {\n flags[name] = value;\n }\n }\n return flags;\n}\n\n/** The API's `fix` names; they replace the CLI's `--fix`, as its boolean settings win (ADR-021). */\nfunction apiFixNames(settings: ApiSettings): readonly OutputFixName[] | undefined {\n return fixNamesOf(settings[FIX_SETTING]);\n}\n\n/** Paths in the config are relative to the config file; without a file, to the working dir. */\nfunction configRootOf(redocly: RedoclyConfig, cwd: URL): URL {\n return redocly.configFile ? resolveLocationUrl(redocly.configFile, cwd) : cwd;\n}\n\nasync function generateApi(run: CliRun, redocly: RedoclyConfig, api: RedoclyApi): Promise<void> {\n if (!api.settings?.output) {\n throw cliError(\n \"CLI_CONFIG_OUTPUT_MISSING\",\n `API ${api.name} is missing an \\`${REDOCLY_CONFIG_KEY}.output\\` key. ` +\n `See ${MULTIPLE_SCHEMAS_DOCS_URL}`,\n );\n }\n const output = String(api.settings.output);\n const configRoot = configRootOf(redocly, run.deps.cwd);\n const options: GeneratorOptions = {\n ...run.args.generatorFlags,\n ...apiFlags(api.settings),\n ...refLimitOptions(run.args, run.deps.cwd),\n ...fixOption(apiFixNames(api.settings) ?? run.args.fix),\n redocly,\n };\n const contents = await run.deps.generate(resolveLocationUrl(api.root, configRoot), options);\n emitOutput(\n run,\n { source: api.name, output, file: resolveLocationUrl(output, configRoot) },\n contents,\n );\n}\n\n/**\n * Generate every API of the config, concurrently. Every API is generated or checked even when\n * another fails, so `--check` reports a stale output wherever it is; the failures are returned\n * in the order of the config.\n */\nexport async function generateRedoclyApis(run: CliRun, redocly: RedoclyConfig): Promise<unknown[]> {\n const apis = redoclyApisOf(redocly);\n const results = await Promise.allSettled(apis.map((api) => generateApi(run, redocly, api)));\n return results.flatMap((result) => (result.status === \"rejected\" ? [result.reason] : []));\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const cliOutput = require('./cli-output.cjs');
|
|
4
|
+
|
|
5
|
+
function refLimitOptions(args, cwd) {
|
|
6
|
+
const { localRefRoot, remoteRefHosts } = args.refLimits;
|
|
7
|
+
return {
|
|
8
|
+
...localRefRoot === void 0 ? {} : { localRefRoot: cliOutput.resolveLocationUrl(localRefRoot, cwd) },
|
|
9
|
+
...remoteRefHosts === void 0 ? {} : { remoteRefHosts }
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
exports.refLimitOptions = refLimitOptions;
|
|
14
|
+
//# sourceMappingURL=ref-limits.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ref-limits.cjs","sources":["../../src/cli/ref-limits.ts"],"sourcesContent":["import type { GeneratorOptions } from \"../types.js\";\nimport type { CliArguments } from \"./cli-arguments.js\";\nimport { resolveLocationUrl } from \"./cli-output.js\";\n\n/** The `$ref` limits of the CLI flags as generator options (threat model R1, R2, ADR-017). */\n\nexport type RefLimitOptions = Pick<GeneratorOptions, \"localRefRoot\" | \"remoteRefHosts\">;\n\n/** `--local-ref-root` resolves against the working directory, like every other CLI path. */\nexport function refLimitOptions(args: CliArguments, cwd: URL): RefLimitOptions {\n const { localRefRoot, remoteRefHosts } = args.refLimits;\n return {\n ...(localRefRoot === undefined ? {} : { localRefRoot: resolveLocationUrl(localRefRoot, cwd) }),\n ...(remoteRefHosts === undefined ? {} : { remoteRefHosts }),\n };\n}\n"],"names":["resolveLocationUrl"],"mappings":";;;;AASO,SAAS,eAAA,CAAgB,MAAoB,GAAA,EAA2B;AAC7E,EAAA,MAAM,EAAE,YAAA,EAAc,cAAA,EAAe,GAAI,IAAA,CAAK,SAAA;AAC9C,EAAA,OAAO;AAAA,IACL,GAAI,YAAA,KAAiB,MAAA,GAAY,EAAC,GAAI,EAAE,YAAA,EAAcA,4BAAA,CAAmB,YAAA,EAAc,GAAG,CAAA,EAAE;AAAA,IAC5F,GAAI,cAAA,KAAmB,MAAA,GAAY,EAAC,GAAI,EAAE,cAAA;AAAe,GAC3D;AACF;;"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { resolveLocationUrl } from './cli-output.mjs';
|
|
2
|
+
|
|
3
|
+
function refLimitOptions(args, cwd) {
|
|
4
|
+
const { localRefRoot, remoteRefHosts } = args.refLimits;
|
|
5
|
+
return {
|
|
6
|
+
...localRefRoot === void 0 ? {} : { localRefRoot: resolveLocationUrl(localRefRoot, cwd) },
|
|
7
|
+
...remoteRefHosts === void 0 ? {} : { remoteRefHosts }
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export { refLimitOptions };
|
|
12
|
+
//# sourceMappingURL=ref-limits.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ref-limits.mjs","sources":["../../src/cli/ref-limits.ts"],"sourcesContent":["import type { GeneratorOptions } from \"../types.js\";\nimport type { CliArguments } from \"./cli-arguments.js\";\nimport { resolveLocationUrl } from \"./cli-output.js\";\n\n/** The `$ref` limits of the CLI flags as generator options (threat model R1, R2, ADR-017). */\n\nexport type RefLimitOptions = Pick<GeneratorOptions, \"localRefRoot\" | \"remoteRefHosts\">;\n\n/** `--local-ref-root` resolves against the working directory, like every other CLI path. */\nexport function refLimitOptions(args: CliArguments, cwd: URL): RefLimitOptions {\n const { localRefRoot, remoteRefHosts } = args.refLimits;\n return {\n ...(localRefRoot === undefined ? {} : { localRefRoot: resolveLocationUrl(localRefRoot, cwd) }),\n ...(remoteRefHosts === undefined ? {} : { remoteRefHosts }),\n };\n}\n"],"names":[],"mappings":";;AASO,SAAS,eAAA,CAAgB,MAAoB,GAAA,EAA2B;AAC7E,EAAA,MAAM,EAAE,YAAA,EAAc,cAAA,EAAe,GAAI,IAAA,CAAK,SAAA;AAC9C,EAAA,OAAO;AAAA,IACL,GAAI,YAAA,KAAiB,MAAA,GAAY,EAAC,GAAI,EAAE,YAAA,EAAc,kBAAA,CAAmB,YAAA,EAAc,GAAG,CAAA,EAAE;AAAA,IAC5F,GAAI,cAAA,KAAmB,MAAA,GAAY,EAAC,GAAI,EAAE,cAAA;AAAe,GAC3D;AACF;;"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const cliArguments = require('./cli-arguments.cjs');
|
|
4
|
+
const cliErrors = require('./cli-errors.cjs');
|
|
5
|
+
const cliOutput = require('./cli-output.cjs');
|
|
6
|
+
const docsLinks = require('./docs-links.cjs');
|
|
7
|
+
const fixOption = require('./fix-option.cjs');
|
|
8
|
+
const helpText = require('./help-text.cjs');
|
|
9
|
+
const redoclyApis = require('./redocly-apis.cjs');
|
|
10
|
+
const refLimits = require('./ref-limits.cjs');
|
|
11
|
+
|
|
12
|
+
async function loadRedoclyConfig(run) {
|
|
13
|
+
const { redoclyConfigs } = run.deps;
|
|
14
|
+
const explicitPath = run.args.redocly;
|
|
15
|
+
const configPath = redoclyConfigs.find(explicitPath);
|
|
16
|
+
if (explicitPath && !configPath) {
|
|
17
|
+
throw cliErrors.cliError("CLI_CONFIG_NOT_FOUND", `Redocly config not found at: ${explicitPath}`);
|
|
18
|
+
}
|
|
19
|
+
return configPath ? redoclyConfigs.load(configPath) : redoclyConfigs.createDefault();
|
|
20
|
+
}
|
|
21
|
+
function schemaSource(run) {
|
|
22
|
+
const { input } = run.args;
|
|
23
|
+
if (input) {
|
|
24
|
+
return cliOutput.resolveLocationUrl(input, run.deps.cwd);
|
|
25
|
+
}
|
|
26
|
+
if (run.deps.isStdinTerminal()) {
|
|
27
|
+
throw cliErrors.cliError(
|
|
28
|
+
"CLI_INPUT_MISSING",
|
|
29
|
+
"No schema given: pass a schema path or URL, pipe a schema into stdin, or define `apis` in redocly.yaml. See --help."
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
return run.deps.stdin();
|
|
33
|
+
}
|
|
34
|
+
async function generateSingleSchema(run, redocly) {
|
|
35
|
+
const { input, output } = run.args;
|
|
36
|
+
if (input?.includes("*")) {
|
|
37
|
+
throw cliErrors.cliError(
|
|
38
|
+
"CLI_GLOB_UNSUPPORTED",
|
|
39
|
+
`Globbing has been deprecated in favor of redocly.yaml\u2019s \`apis\` keys. See ${docsLinks.MULTIPLE_SCHEMAS_DOCS_URL}`
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
if (run.args.isCheck && !output) {
|
|
43
|
+
throw cliErrors.cliError(
|
|
44
|
+
"CLI_CHECK_OUTPUT_MISSING",
|
|
45
|
+
"--check needs the generated file to compare with: add --output <file>."
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
const source = schemaSource(run);
|
|
49
|
+
const options = {
|
|
50
|
+
...run.args.generatorFlags,
|
|
51
|
+
...refLimits.refLimitOptions(run.args, run.deps.cwd),
|
|
52
|
+
...fixOption.fixOption(run.args.fix),
|
|
53
|
+
redocly,
|
|
54
|
+
silent: !output
|
|
55
|
+
};
|
|
56
|
+
const contents = await run.deps.generate(source, options);
|
|
57
|
+
if (!output) {
|
|
58
|
+
run.deps.writeStdout(contents);
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
const file = cliOutput.resolveLocationUrl(output, run.deps.cwd);
|
|
62
|
+
cliOutput.emitOutput(run, { source: input ?? "stdin", output, file }, contents);
|
|
63
|
+
}
|
|
64
|
+
async function generate(run) {
|
|
65
|
+
const redocly = await loadRedoclyConfig(run);
|
|
66
|
+
if (!redoclyApis.hasRedoclyApis(redocly)) {
|
|
67
|
+
await generateSingleSchema(run, redocly);
|
|
68
|
+
return [];
|
|
69
|
+
}
|
|
70
|
+
if (run.args.input) {
|
|
71
|
+
run.deps.logger.warn(
|
|
72
|
+
"APIs are specified both in Redocly Config and CLI argument. Only using Redocly config."
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
return redoclyApis.generateRedoclyApis(run, redocly);
|
|
76
|
+
}
|
|
77
|
+
async function runCommand(argv, deps) {
|
|
78
|
+
const startedAt = deps.now();
|
|
79
|
+
for (const notice of cliArguments.ineffectiveFlagNotices(argv)) {
|
|
80
|
+
deps.console.notice(notice);
|
|
81
|
+
}
|
|
82
|
+
const args = cliArguments.parseCliArguments(argv);
|
|
83
|
+
for (const flag of args.unknownFlags) {
|
|
84
|
+
deps.console.notice(`Unknown flag ${flag} is ignored (see --help)`);
|
|
85
|
+
}
|
|
86
|
+
if (args.isHelp || args.isVersion) {
|
|
87
|
+
deps.console.info(args.isHelp ? helpText.HELP_TEXT : `v${deps.version}`);
|
|
88
|
+
return [];
|
|
89
|
+
}
|
|
90
|
+
if (args.output) {
|
|
91
|
+
deps.console.info(`\u2728 ${deps.style.bold(`openapi-typesafe ${deps.version}`)}`);
|
|
92
|
+
}
|
|
93
|
+
return generate({ deps, args, startedAt });
|
|
94
|
+
}
|
|
95
|
+
function reportFailures(failures, logger) {
|
|
96
|
+
const reports = failures.map(cliErrors.describeCliFailure);
|
|
97
|
+
for (const report of reports) {
|
|
98
|
+
logger.error(report.message);
|
|
99
|
+
}
|
|
100
|
+
return reports[0]?.exitCode ?? cliErrors.EXIT_CODES.SUCCESS;
|
|
101
|
+
}
|
|
102
|
+
async function runCli(argv, deps) {
|
|
103
|
+
let failures;
|
|
104
|
+
try {
|
|
105
|
+
failures = await runCommand(argv, deps);
|
|
106
|
+
} catch (thrown) {
|
|
107
|
+
failures = [thrown];
|
|
108
|
+
}
|
|
109
|
+
return reportFailures(failures, deps.logger);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
exports.runCli = runCli;
|
|
113
|
+
//# sourceMappingURL=run-cli.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-cli.cjs","sources":["../../src/cli/run-cli.ts"],"sourcesContent":["import type { Logger } from \"../application/ports/logger.js\";\nimport type { RedoclyConfig } from \"../application/ports/redocly-config-source.js\";\nimport type { SchemaSource } from \"../types.js\";\nimport { ineffectiveFlagNotices, parseCliArguments } from \"./cli-arguments.js\";\nimport type { CliDependencies } from \"./cli-dependencies.js\";\nimport { cliError, describeCliFailure, EXIT_CODES, type ExitCode } from \"./cli-errors.js\";\nimport { type CliRun, emitOutput, resolveLocationUrl } from \"./cli-output.js\";\nimport { MULTIPLE_SCHEMAS_DOCS_URL } from \"./docs-links.js\";\nimport { fixOption } from \"./fix-option.js\";\nimport { HELP_TEXT } from \"./help-text.js\";\nimport { generateRedoclyApis, hasRedoclyApis } from \"./redocly-apis.js\";\nimport { refLimitOptions } from \"./ref-limits.js\";\n\n/**\n * The CLI's use case: parse the arguments, then generate the APIs of the Redocly config, one\n * schema file or URL, or stdin. It has no process access of its own; `main.ts` wires it (ADR-012).\n */\n\nasync function loadRedoclyConfig(run: CliRun): Promise<RedoclyConfig> {\n const { redoclyConfigs } = run.deps;\n const explicitPath = run.args.redocly;\n const configPath = redoclyConfigs.find(explicitPath);\n if (explicitPath && !configPath) {\n throw cliError(\"CLI_CONFIG_NOT_FOUND\", `Redocly config not found at: ${explicitPath}`);\n }\n return configPath ? redoclyConfigs.load(configPath) : redoclyConfigs.createDefault();\n}\n\n/** The schema's URL, or stdin when no path or URL is given and something is piped in. */\nfunction schemaSource(run: CliRun): SchemaSource {\n const { input } = run.args;\n if (input) {\n return resolveLocationUrl(input, run.deps.cwd);\n }\n if (run.deps.isStdinTerminal()) {\n throw cliError(\n \"CLI_INPUT_MISSING\",\n \"No schema given: pass a schema path or URL, pipe a schema into stdin, or define `apis` \" +\n \"in redocly.yaml. See --help.\",\n );\n }\n return run.deps.stdin();\n}\n\n/** One schema from a path, a URL or stdin; without `--output`, the types go to stdout only. */\nasync function generateSingleSchema(run: CliRun, redocly: RedoclyConfig): Promise<void> {\n const { input, output } = run.args;\n if (input?.includes(\"*\")) {\n throw cliError(\n \"CLI_GLOB_UNSUPPORTED\",\n \"Globbing has been deprecated in favor of redocly.yaml’s `apis` keys. \" +\n `See ${MULTIPLE_SCHEMAS_DOCS_URL}`,\n );\n }\n if (run.args.isCheck && !output) {\n // Without a file there is nothing to compare: the original printed the types and passed.\n throw cliError(\n \"CLI_CHECK_OUTPUT_MISSING\",\n \"--check needs the generated file to compare with: add --output <file>.\",\n );\n }\n const source = schemaSource(run);\n const options = {\n ...run.args.generatorFlags,\n ...refLimitOptions(run.args, run.deps.cwd),\n ...fixOption(run.args.fix),\n redocly,\n silent: !output,\n };\n const contents = await run.deps.generate(source, options);\n if (!output) {\n run.deps.writeStdout(contents);\n return;\n }\n const file = resolveLocationUrl(output, run.deps.cwd);\n emitOutput(run, { source: input ?? \"stdin\", output, file }, contents);\n}\n\nasync function generate(run: CliRun): Promise<unknown[]> {\n const redocly = await loadRedoclyConfig(run);\n if (!hasRedoclyApis(redocly)) {\n await generateSingleSchema(run, redocly);\n return [];\n }\n if (run.args.input) {\n run.deps.logger.warn(\n \"APIs are specified both in Redocly Config and CLI argument. Only using Redocly config.\",\n );\n }\n return generateRedoclyApis(run, redocly);\n}\n\n/** Run the command; the failures it returns did not stop the other outputs. */\nasync function runCommand(argv: readonly string[], deps: CliDependencies): Promise<unknown[]> {\n const startedAt = deps.now();\n for (const notice of ineffectiveFlagNotices(argv)) {\n deps.console.notice(notice);\n }\n const args = parseCliArguments(argv);\n for (const flag of args.unknownFlags) {\n deps.console.notice(`Unknown flag ${flag} is ignored (see --help)`);\n }\n if (args.isHelp || args.isVersion) {\n deps.console.info(args.isHelp ? HELP_TEXT : `v${deps.version}`);\n return [];\n }\n if (args.output) {\n deps.console.info(`✨ ${deps.style.bold(`openapi-typesafe ${deps.version}`)}`);\n }\n return generate({ deps, args, startedAt });\n}\n\n/** Print one line per failure; the exit code is the first failure's (ADR-011). */\nfunction reportFailures(failures: readonly unknown[], logger: Logger): ExitCode {\n const reports = failures.map(describeCliFailure);\n for (const report of reports) {\n logger.error(report.message);\n }\n return reports[0]?.exitCode ?? EXIT_CODES.SUCCESS;\n}\n\n/** Run the CLI with the arguments after `node cli.js`, and return the process exit code. */\nexport async function runCli(argv: readonly string[], deps: CliDependencies): Promise<ExitCode> {\n let failures: unknown[];\n try {\n failures = await runCommand(argv, deps);\n } catch (thrown) {\n failures = [thrown];\n }\n return reportFailures(failures, deps.logger);\n}\n"],"names":["cliError","resolveLocationUrl","MULTIPLE_SCHEMAS_DOCS_URL","refLimitOptions","fixOption","emitOutput","hasRedoclyApis","generateRedoclyApis","ineffectiveFlagNotices","parseCliArguments","HELP_TEXT","describeCliFailure","EXIT_CODES"],"mappings":"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"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { ineffectiveFlagNotices, parseCliArguments } from './cli-arguments.mjs';
|
|
2
|
+
import { describeCliFailure, EXIT_CODES, cliError } from './cli-errors.mjs';
|
|
3
|
+
import { resolveLocationUrl, emitOutput } from './cli-output.mjs';
|
|
4
|
+
import { MULTIPLE_SCHEMAS_DOCS_URL } from './docs-links.mjs';
|
|
5
|
+
import { fixOption } from './fix-option.mjs';
|
|
6
|
+
import { HELP_TEXT } from './help-text.mjs';
|
|
7
|
+
import { hasRedoclyApis, generateRedoclyApis } from './redocly-apis.mjs';
|
|
8
|
+
import { refLimitOptions } from './ref-limits.mjs';
|
|
9
|
+
|
|
10
|
+
async function loadRedoclyConfig(run) {
|
|
11
|
+
const { redoclyConfigs } = run.deps;
|
|
12
|
+
const explicitPath = run.args.redocly;
|
|
13
|
+
const configPath = redoclyConfigs.find(explicitPath);
|
|
14
|
+
if (explicitPath && !configPath) {
|
|
15
|
+
throw cliError("CLI_CONFIG_NOT_FOUND", `Redocly config not found at: ${explicitPath}`);
|
|
16
|
+
}
|
|
17
|
+
return configPath ? redoclyConfigs.load(configPath) : redoclyConfigs.createDefault();
|
|
18
|
+
}
|
|
19
|
+
function schemaSource(run) {
|
|
20
|
+
const { input } = run.args;
|
|
21
|
+
if (input) {
|
|
22
|
+
return resolveLocationUrl(input, run.deps.cwd);
|
|
23
|
+
}
|
|
24
|
+
if (run.deps.isStdinTerminal()) {
|
|
25
|
+
throw cliError(
|
|
26
|
+
"CLI_INPUT_MISSING",
|
|
27
|
+
"No schema given: pass a schema path or URL, pipe a schema into stdin, or define `apis` in redocly.yaml. See --help."
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
return run.deps.stdin();
|
|
31
|
+
}
|
|
32
|
+
async function generateSingleSchema(run, redocly) {
|
|
33
|
+
const { input, output } = run.args;
|
|
34
|
+
if (input?.includes("*")) {
|
|
35
|
+
throw cliError(
|
|
36
|
+
"CLI_GLOB_UNSUPPORTED",
|
|
37
|
+
`Globbing has been deprecated in favor of redocly.yaml\u2019s \`apis\` keys. See ${MULTIPLE_SCHEMAS_DOCS_URL}`
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
if (run.args.isCheck && !output) {
|
|
41
|
+
throw cliError(
|
|
42
|
+
"CLI_CHECK_OUTPUT_MISSING",
|
|
43
|
+
"--check needs the generated file to compare with: add --output <file>."
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
const source = schemaSource(run);
|
|
47
|
+
const options = {
|
|
48
|
+
...run.args.generatorFlags,
|
|
49
|
+
...refLimitOptions(run.args, run.deps.cwd),
|
|
50
|
+
...fixOption(run.args.fix),
|
|
51
|
+
redocly,
|
|
52
|
+
silent: !output
|
|
53
|
+
};
|
|
54
|
+
const contents = await run.deps.generate(source, options);
|
|
55
|
+
if (!output) {
|
|
56
|
+
run.deps.writeStdout(contents);
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
const file = resolveLocationUrl(output, run.deps.cwd);
|
|
60
|
+
emitOutput(run, { source: input ?? "stdin", output, file }, contents);
|
|
61
|
+
}
|
|
62
|
+
async function generate(run) {
|
|
63
|
+
const redocly = await loadRedoclyConfig(run);
|
|
64
|
+
if (!hasRedoclyApis(redocly)) {
|
|
65
|
+
await generateSingleSchema(run, redocly);
|
|
66
|
+
return [];
|
|
67
|
+
}
|
|
68
|
+
if (run.args.input) {
|
|
69
|
+
run.deps.logger.warn(
|
|
70
|
+
"APIs are specified both in Redocly Config and CLI argument. Only using Redocly config."
|
|
71
|
+
);
|
|
72
|
+
}
|
|
73
|
+
return generateRedoclyApis(run, redocly);
|
|
74
|
+
}
|
|
75
|
+
async function runCommand(argv, deps) {
|
|
76
|
+
const startedAt = deps.now();
|
|
77
|
+
for (const notice of ineffectiveFlagNotices(argv)) {
|
|
78
|
+
deps.console.notice(notice);
|
|
79
|
+
}
|
|
80
|
+
const args = parseCliArguments(argv);
|
|
81
|
+
for (const flag of args.unknownFlags) {
|
|
82
|
+
deps.console.notice(`Unknown flag ${flag} is ignored (see --help)`);
|
|
83
|
+
}
|
|
84
|
+
if (args.isHelp || args.isVersion) {
|
|
85
|
+
deps.console.info(args.isHelp ? HELP_TEXT : `v${deps.version}`);
|
|
86
|
+
return [];
|
|
87
|
+
}
|
|
88
|
+
if (args.output) {
|
|
89
|
+
deps.console.info(`\u2728 ${deps.style.bold(`openapi-typesafe ${deps.version}`)}`);
|
|
90
|
+
}
|
|
91
|
+
return generate({ deps, args, startedAt });
|
|
92
|
+
}
|
|
93
|
+
function reportFailures(failures, logger) {
|
|
94
|
+
const reports = failures.map(describeCliFailure);
|
|
95
|
+
for (const report of reports) {
|
|
96
|
+
logger.error(report.message);
|
|
97
|
+
}
|
|
98
|
+
return reports[0]?.exitCode ?? EXIT_CODES.SUCCESS;
|
|
99
|
+
}
|
|
100
|
+
async function runCli(argv, deps) {
|
|
101
|
+
let failures;
|
|
102
|
+
try {
|
|
103
|
+
failures = await runCommand(argv, deps);
|
|
104
|
+
} catch (thrown) {
|
|
105
|
+
failures = [thrown];
|
|
106
|
+
}
|
|
107
|
+
return reportFailures(failures, deps.logger);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
export { runCli };
|
|
111
|
+
//# sourceMappingURL=run-cli.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-cli.mjs","sources":["../../src/cli/run-cli.ts"],"sourcesContent":["import type { Logger } from \"../application/ports/logger.js\";\nimport type { RedoclyConfig } from \"../application/ports/redocly-config-source.js\";\nimport type { SchemaSource } from \"../types.js\";\nimport { ineffectiveFlagNotices, parseCliArguments } from \"./cli-arguments.js\";\nimport type { CliDependencies } from \"./cli-dependencies.js\";\nimport { cliError, describeCliFailure, EXIT_CODES, type ExitCode } from \"./cli-errors.js\";\nimport { type CliRun, emitOutput, resolveLocationUrl } from \"./cli-output.js\";\nimport { MULTIPLE_SCHEMAS_DOCS_URL } from \"./docs-links.js\";\nimport { fixOption } from \"./fix-option.js\";\nimport { HELP_TEXT } from \"./help-text.js\";\nimport { generateRedoclyApis, hasRedoclyApis } from \"./redocly-apis.js\";\nimport { refLimitOptions } from \"./ref-limits.js\";\n\n/**\n * The CLI's use case: parse the arguments, then generate the APIs of the Redocly config, one\n * schema file or URL, or stdin. It has no process access of its own; `main.ts` wires it (ADR-012).\n */\n\nasync function loadRedoclyConfig(run: CliRun): Promise<RedoclyConfig> {\n const { redoclyConfigs } = run.deps;\n const explicitPath = run.args.redocly;\n const configPath = redoclyConfigs.find(explicitPath);\n if (explicitPath && !configPath) {\n throw cliError(\"CLI_CONFIG_NOT_FOUND\", `Redocly config not found at: ${explicitPath}`);\n }\n return configPath ? redoclyConfigs.load(configPath) : redoclyConfigs.createDefault();\n}\n\n/** The schema's URL, or stdin when no path or URL is given and something is piped in. */\nfunction schemaSource(run: CliRun): SchemaSource {\n const { input } = run.args;\n if (input) {\n return resolveLocationUrl(input, run.deps.cwd);\n }\n if (run.deps.isStdinTerminal()) {\n throw cliError(\n \"CLI_INPUT_MISSING\",\n \"No schema given: pass a schema path or URL, pipe a schema into stdin, or define `apis` \" +\n \"in redocly.yaml. See --help.\",\n );\n }\n return run.deps.stdin();\n}\n\n/** One schema from a path, a URL or stdin; without `--output`, the types go to stdout only. */\nasync function generateSingleSchema(run: CliRun, redocly: RedoclyConfig): Promise<void> {\n const { input, output } = run.args;\n if (input?.includes(\"*\")) {\n throw cliError(\n \"CLI_GLOB_UNSUPPORTED\",\n \"Globbing has been deprecated in favor of redocly.yaml’s `apis` keys. \" +\n `See ${MULTIPLE_SCHEMAS_DOCS_URL}`,\n );\n }\n if (run.args.isCheck && !output) {\n // Without a file there is nothing to compare: the original printed the types and passed.\n throw cliError(\n \"CLI_CHECK_OUTPUT_MISSING\",\n \"--check needs the generated file to compare with: add --output <file>.\",\n );\n }\n const source = schemaSource(run);\n const options = {\n ...run.args.generatorFlags,\n ...refLimitOptions(run.args, run.deps.cwd),\n ...fixOption(run.args.fix),\n redocly,\n silent: !output,\n };\n const contents = await run.deps.generate(source, options);\n if (!output) {\n run.deps.writeStdout(contents);\n return;\n }\n const file = resolveLocationUrl(output, run.deps.cwd);\n emitOutput(run, { source: input ?? \"stdin\", output, file }, contents);\n}\n\nasync function generate(run: CliRun): Promise<unknown[]> {\n const redocly = await loadRedoclyConfig(run);\n if (!hasRedoclyApis(redocly)) {\n await generateSingleSchema(run, redocly);\n return [];\n }\n if (run.args.input) {\n run.deps.logger.warn(\n \"APIs are specified both in Redocly Config and CLI argument. Only using Redocly config.\",\n );\n }\n return generateRedoclyApis(run, redocly);\n}\n\n/** Run the command; the failures it returns did not stop the other outputs. */\nasync function runCommand(argv: readonly string[], deps: CliDependencies): Promise<unknown[]> {\n const startedAt = deps.now();\n for (const notice of ineffectiveFlagNotices(argv)) {\n deps.console.notice(notice);\n }\n const args = parseCliArguments(argv);\n for (const flag of args.unknownFlags) {\n deps.console.notice(`Unknown flag ${flag} is ignored (see --help)`);\n }\n if (args.isHelp || args.isVersion) {\n deps.console.info(args.isHelp ? HELP_TEXT : `v${deps.version}`);\n return [];\n }\n if (args.output) {\n deps.console.info(`✨ ${deps.style.bold(`openapi-typesafe ${deps.version}`)}`);\n }\n return generate({ deps, args, startedAt });\n}\n\n/** Print one line per failure; the exit code is the first failure's (ADR-011). */\nfunction reportFailures(failures: readonly unknown[], logger: Logger): ExitCode {\n const reports = failures.map(describeCliFailure);\n for (const report of reports) {\n logger.error(report.message);\n }\n return reports[0]?.exitCode ?? EXIT_CODES.SUCCESS;\n}\n\n/** Run the CLI with the arguments after `node cli.js`, and return the process exit code. */\nexport async function runCli(argv: readonly string[], deps: CliDependencies): Promise<ExitCode> {\n let failures: unknown[];\n try {\n failures = await runCommand(argv, deps);\n } catch (thrown) {\n failures = [thrown];\n }\n return reportFailures(failures, deps.logger);\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assert-never.cjs","sources":["../../src/domain/assert-never.ts"],"sourcesContent":["/**\n * Exhaustiveness guard for `switch` over a closed union: the call compiles only when every variant\n * is handled. Reaching it at run time means a value outside the union, which is a bug, so it\n * throws.\n */\nexport function assertNever(value: never): never {\n throw new Error(`Unexpected variant: ${JSON.stringify(value)}`);\n}\n"],"names":[],"mappings":";;AAKO,SAAS,YAAY,KAAA,EAAqB;AAC/C,EAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oBAAA,EAAuB,KAAK,SAAA,CAAU,KAAK,CAAC,CAAA,CAAE,CAAA;AAChE;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assert-never.mjs","sources":["../../src/domain/assert-never.ts"],"sourcesContent":["/**\n * Exhaustiveness guard for `switch` over a closed union: the call compiles only when every variant\n * is handled. Reaching it at run time means a value outside the union, which is a bug, so it\n * throws.\n */\nexport function assertNever(value: never): never {\n throw new Error(`Unexpected variant: ${JSON.stringify(value)}`);\n}\n"],"names":[],"mappings":"AAKO,SAAS,YAAY,KAAA,EAAqB;AAC/C,EAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oBAAA,EAAuB,KAAK,SAAA,CAAU,KAAK,CAAC,CAAA,CAAE,CAAA;AAChE;;"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const ERROR_CODES = {
|
|
4
|
+
SCHEMA_SOURCE_EMPTY: "SCHEMA_SOURCE_EMPTY",
|
|
5
|
+
SCHEMA_SOURCE_INVALID: "SCHEMA_SOURCE_INVALID",
|
|
6
|
+
SCHEMA_LOAD_FAILED: "SCHEMA_LOAD_FAILED",
|
|
7
|
+
SCHEMA_PARSE_FAILED: "SCHEMA_PARSE_FAILED",
|
|
8
|
+
SCHEMA_VERSION_UNSUPPORTED: "SCHEMA_VERSION_UNSUPPORTED",
|
|
9
|
+
SCHEMA_INVALID: "SCHEMA_INVALID",
|
|
10
|
+
SCHEMA_REF_INVALID: "SCHEMA_REF_INVALID",
|
|
11
|
+
SCHEMA_REF_FORBIDDEN: "SCHEMA_REF_FORBIDDEN",
|
|
12
|
+
SCHEMA_OBJECT_INVALID: "SCHEMA_OBJECT_INVALID",
|
|
13
|
+
SCHEMA_PROPERTY_INVALID: "SCHEMA_PROPERTY_INVALID",
|
|
14
|
+
SCHEMA_TOO_DEEP: "SCHEMA_TOO_DEEP",
|
|
15
|
+
SCHEMA_KEY_UNSUPPORTED: "SCHEMA_KEY_UNSUPPORTED",
|
|
16
|
+
ENUM_NAME_EMPTY: "ENUM_NAME_EMPTY",
|
|
17
|
+
CALLBACK_RESULT_UNREADABLE: "CALLBACK_RESULT_UNREADABLE",
|
|
18
|
+
OPTION_FIX_UNKNOWN: "OPTION_FIX_UNKNOWN",
|
|
19
|
+
TYPESCRIPT_NOT_FOUND: "TYPESCRIPT_NOT_FOUND",
|
|
20
|
+
CLI_FLAG_REMOVED: "CLI_FLAG_REMOVED",
|
|
21
|
+
CLI_GLOB_UNSUPPORTED: "CLI_GLOB_UNSUPPORTED",
|
|
22
|
+
CLI_CONFIG_NOT_FOUND: "CLI_CONFIG_NOT_FOUND",
|
|
23
|
+
CLI_CONFIG_INVALID: "CLI_CONFIG_INVALID",
|
|
24
|
+
CLI_CONFIG_OUTPUT_MISSING: "CLI_CONFIG_OUTPUT_MISSING",
|
|
25
|
+
CLI_CHECK_OUTPUT_MISSING: "CLI_CHECK_OUTPUT_MISSING",
|
|
26
|
+
CLI_INPUT_MISSING: "CLI_INPUT_MISSING",
|
|
27
|
+
OUTPUT_STALE: "OUTPUT_STALE",
|
|
28
|
+
OUTPUT_READ_FAILED: "OUTPUT_READ_FAILED",
|
|
29
|
+
OUTPUT_WRITE_FAILED: "OUTPUT_WRITE_FAILED"
|
|
30
|
+
};
|
|
31
|
+
class OpenAPITypesafeError extends Error {
|
|
32
|
+
code;
|
|
33
|
+
details;
|
|
34
|
+
constructor(init) {
|
|
35
|
+
super(init.message, init.cause === void 0 ? void 0 : { cause: init.cause });
|
|
36
|
+
this.name = "OpenAPITypesafeError";
|
|
37
|
+
this.code = init.code;
|
|
38
|
+
this.details = init.details ?? {};
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function isOpenAPITypesafeError(value) {
|
|
42
|
+
if (value instanceof OpenAPITypesafeError) {
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
const code = value?.code;
|
|
46
|
+
return value instanceof Error && typeof code === "string" && Object.hasOwn(ERROR_CODES, code) && typeof value.details === "object";
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
exports.ERROR_CODES = ERROR_CODES;
|
|
50
|
+
exports.OpenAPITypesafeError = OpenAPITypesafeError;
|
|
51
|
+
exports.isOpenAPITypesafeError = isOpenAPITypesafeError;
|
|
52
|
+
//# sourceMappingURL=errors.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.cjs","sources":["../../src/domain/errors.ts"],"sourcesContent":["/**\n * Typed errors (ENGINEERING_PLAN 4.6, ADR-011). Every expected failure of the generator and the CLI\n * is an `OpenAPITypesafeError` with a stable machine-readable `code` and structured `details`. The\n * `message` is English text for people; programs and the CLI decide by `code`. A bug (a broken\n * invariant) is a plain `Error`, not one of these.\n */\n\n/** Every error code. The set is closed: a new code must be handled by the CLI exit-code table. */\nexport const ERROR_CODES = {\n SCHEMA_SOURCE_EMPTY: \"SCHEMA_SOURCE_EMPTY\",\n SCHEMA_SOURCE_INVALID: \"SCHEMA_SOURCE_INVALID\",\n SCHEMA_LOAD_FAILED: \"SCHEMA_LOAD_FAILED\",\n SCHEMA_PARSE_FAILED: \"SCHEMA_PARSE_FAILED\",\n SCHEMA_VERSION_UNSUPPORTED: \"SCHEMA_VERSION_UNSUPPORTED\",\n SCHEMA_INVALID: \"SCHEMA_INVALID\",\n SCHEMA_REF_INVALID: \"SCHEMA_REF_INVALID\",\n SCHEMA_REF_FORBIDDEN: \"SCHEMA_REF_FORBIDDEN\",\n SCHEMA_OBJECT_INVALID: \"SCHEMA_OBJECT_INVALID\",\n SCHEMA_PROPERTY_INVALID: \"SCHEMA_PROPERTY_INVALID\",\n SCHEMA_TOO_DEEP: \"SCHEMA_TOO_DEEP\",\n SCHEMA_KEY_UNSUPPORTED: \"SCHEMA_KEY_UNSUPPORTED\",\n ENUM_NAME_EMPTY: \"ENUM_NAME_EMPTY\",\n CALLBACK_RESULT_UNREADABLE: \"CALLBACK_RESULT_UNREADABLE\",\n OPTION_FIX_UNKNOWN: \"OPTION_FIX_UNKNOWN\",\n TYPESCRIPT_NOT_FOUND: \"TYPESCRIPT_NOT_FOUND\",\n CLI_FLAG_REMOVED: \"CLI_FLAG_REMOVED\",\n CLI_GLOB_UNSUPPORTED: \"CLI_GLOB_UNSUPPORTED\",\n CLI_CONFIG_NOT_FOUND: \"CLI_CONFIG_NOT_FOUND\",\n CLI_CONFIG_INVALID: \"CLI_CONFIG_INVALID\",\n CLI_CONFIG_OUTPUT_MISSING: \"CLI_CONFIG_OUTPUT_MISSING\",\n CLI_CHECK_OUTPUT_MISSING: \"CLI_CHECK_OUTPUT_MISSING\",\n CLI_INPUT_MISSING: \"CLI_INPUT_MISSING\",\n OUTPUT_STALE: \"OUTPUT_STALE\",\n OUTPUT_READ_FAILED: \"OUTPUT_READ_FAILED\",\n OUTPUT_WRITE_FAILED: \"OUTPUT_WRITE_FAILED\",\n} as const;\n\nexport type ErrorCode = (typeof ERROR_CODES)[keyof typeof ERROR_CODES];\n\n/** Structured, JSON-serializable facts about a failure, for programs and logs. */\nexport type ErrorDetails = Readonly<Record<string, unknown>>;\n\nexport interface OpenAPITypesafeErrorInit {\n readonly code: ErrorCode;\n readonly message: string;\n readonly details?: ErrorDetails;\n /** The lower-level error this one reports, if any (kept as the standard `cause`). */\n readonly cause?: unknown;\n}\n\n/** The base of every expected failure; check `code`, not the class or the message. */\nexport class OpenAPITypesafeError extends Error {\n readonly code: ErrorCode;\n readonly details: ErrorDetails;\n\n constructor(init: OpenAPITypesafeErrorInit) {\n super(init.message, init.cause === undefined ? undefined : { cause: init.cause });\n this.name = \"OpenAPITypesafeError\";\n this.code = init.code;\n this.details = init.details ?? {};\n }\n}\n\n/** Whether a thrown value is one of our typed errors (also across bundled copies of the class). */\nexport function isOpenAPITypesafeError(value: unknown): value is OpenAPITypesafeError {\n if (value instanceof OpenAPITypesafeError) {\n return true;\n }\n const code = (value as { code?: unknown } | null)?.code;\n return (\n value instanceof Error &&\n typeof code === \"string\" &&\n Object.hasOwn(ERROR_CODES, code) &&\n typeof (value as { details?: unknown }).details === \"object\"\n );\n}\n"],"names":[],"mappings":";;AAQO,MAAM,WAAA,GAAc;AAAA,EACzB,mBAAA,EAAqB,qBAAA;AAAA,EACrB,qBAAA,EAAuB,uBAAA;AAAA,EACvB,kBAAA,EAAoB,oBAAA;AAAA,EACpB,mBAAA,EAAqB,qBAAA;AAAA,EACrB,0BAAA,EAA4B,4BAAA;AAAA,EAC5B,cAAA,EAAgB,gBAAA;AAAA,EAChB,kBAAA,EAAoB,oBAAA;AAAA,EACpB,oBAAA,EAAsB,sBAAA;AAAA,EACtB,qBAAA,EAAuB,uBAAA;AAAA,EACvB,uBAAA,EAAyB,yBAAA;AAAA,EACzB,eAAA,EAAiB,iBAAA;AAAA,EACjB,sBAAA,EAAwB,wBAAA;AAAA,EACxB,eAAA,EAAiB,iBAAA;AAAA,EACjB,0BAAA,EAA4B,4BAAA;AAAA,EAC5B,kBAAA,EAAoB,oBAAA;AAAA,EACpB,oBAAA,EAAsB,sBAAA;AAAA,EACtB,gBAAA,EAAkB,kBAAA;AAAA,EAClB,oBAAA,EAAsB,sBAAA;AAAA,EACtB,oBAAA,EAAsB,sBAAA;AAAA,EACtB,kBAAA,EAAoB,oBAAA;AAAA,EACpB,yBAAA,EAA2B,2BAAA;AAAA,EAC3B,wBAAA,EAA0B,0BAAA;AAAA,EAC1B,iBAAA,EAAmB,mBAAA;AAAA,EACnB,YAAA,EAAc,cAAA;AAAA,EACd,kBAAA,EAAoB,oBAAA;AAAA,EACpB,mBAAA,EAAqB;AACvB;AAgBO,MAAM,6BAA6B,KAAA,CAAM;AAAA,EACrC,IAAA;AAAA,EACA,OAAA;AAAA,EAET,YAAY,IAAA,EAAgC;AAC1C,IAAA,KAAA,CAAM,IAAA,CAAK,OAAA,EAAS,IAAA,CAAK,KAAA,KAAU,MAAA,GAAY,SAAY,EAAE,KAAA,EAAO,IAAA,CAAK,KAAA,EAAO,CAAA;AAChF,IAAA,IAAA,CAAK,IAAA,GAAO,sBAAA;AACZ,IAAA,IAAA,CAAK,OAAO,IAAA,CAAK,IAAA;AACjB,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA,CAAK,OAAA,IAAW,EAAC;AAAA,EAClC;AACF;AAGO,SAAS,uBAAuB,KAAA,EAA+C;AACpF,EAAA,IAAI,iBAAiB,oBAAA,EAAsB;AACzC,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAM,OAAQ,KAAA,EAAqC,IAAA;AACnD,EAAA,OACE,KAAA,YAAiB,KAAA,IACjB,OAAO,IAAA,KAAS,QAAA,IAChB,MAAA,CAAO,MAAA,CAAO,WAAA,EAAa,IAAI,CAAA,IAC/B,OAAQ,KAAA,CAAgC,OAAA,KAAY,QAAA;AAExD;;;;"}
|