openapi-typesafe 0.0.0 → 1.0.0-rc.0
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 +42 -0
- package/dist/adapters/redocly-loader/redocly-config-source.cjs.map +1 -0
- package/dist/adapters/redocly-loader/redocly-config-source.mjs +35 -0
- package/dist/adapters/redocly-loader/redocly-config-source.mjs.map +1 -0
- package/dist/adapters/redocly-loader/redocly-schema-loader.cjs +169 -0
- package/dist/adapters/redocly-loader/redocly-schema-loader.cjs.map +1 -0
- package/dist/adapters/redocly-loader/redocly-schema-loader.mjs +167 -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 +145 -0
- package/dist/adapters/type-ast-bridge/ir-to-typescript.cjs.map +1 -0
- package/dist/adapters/type-ast-bridge/ir-to-typescript.mjs +139 -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 +204 -0
- package/dist/adapters/type-ast-bridge/typescript-to-ir.cjs.map +1 -0
- package/dist/adapters/type-ast-bridge/typescript-to-ir.mjs +201 -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-enum.cjs +44 -0
- package/dist/api/discriminator-enum.cjs.map +1 -0
- package/dist/api/discriminator-enum.mjs +42 -0
- package/dist/api/discriminator-enum.mjs.map +1 -0
- package/dist/api/discriminator-scan.cjs +168 -0
- package/dist/api/discriminator-scan.cjs.map +1 -0
- package/dist/api/discriminator-scan.mjs +165 -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 +107 -0
- package/dist/api/document-run.cjs.map +1 -0
- package/dist/api/document-run.mjs +101 -0
- package/dist/api/document-run.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/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 +82 -0
- package/dist/api/transform-context.cjs.map +1 -0
- package/dist/api/transform-context.mjs +65 -0
- package/dist/api/transform-context.mjs.map +1 -0
- package/dist/api/transform-schema.cjs +31 -0
- package/dist/api/transform-schema.cjs.map +1 -0
- package/dist/api/transform-schema.mjs +26 -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 +17 -0
- package/dist/api/unsupported-feature-warnings.cjs.map +1 -0
- package/dist/api/unsupported-feature-warnings.mjs +15 -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 +214 -0
- package/dist/application/print/type-printer.cjs.map +1 -0
- package/dist/application/print/type-printer.mjs +210 -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/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/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 +86 -0
- package/dist/application/transform/document/document.cjs.map +1 -0
- package/dist/application/transform/document/document.mjs +83 -0
- package/dist/application/transform/document/document.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/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 +114 -0
- package/dist/application/transform/document/parameters.cjs.map +1 -0
- package/dist/application/transform/document/parameters.mjs +112 -0
- package/dist/application/transform/document/parameters.mjs.map +1 -0
- package/dist/application/transform/document/path-item-conflicts.cjs +51 -0
- package/dist/application/transform/document/path-item-conflicts.cjs.map +1 -0
- package/dist/application/transform/document/path-item-conflicts.mjs +49 -0
- package/dist/application/transform/document/path-item-conflicts.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 +57 -0
- package/dist/application/transform/document/path-key-overlaps.cjs.map +1 -0
- package/dist/application/transform/document/path-key-overlaps.mjs +55 -0
- package/dist/application/transform/document/path-key-overlaps.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 +127 -0
- package/dist/application/transform/document/paths.cjs.map +1 -0
- package/dist/application/transform/document/paths.mjs +125 -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 +69 -0
- package/dist/application/transform/document/root-type-aliases.cjs.map +1 -0
- package/dist/application/transform/document/root-type-aliases.mjs +65 -0
- package/dist/application/transform/document/root-type-aliases.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 +88 -0
- package/dist/application/transform/footer/document-footer.cjs.map +1 -0
- package/dist/application/transform/footer/document-footer.mjs +86 -0
- package/dist/application/transform/footer/document-footer.mjs.map +1 -0
- package/dist/application/transform/footer/enum-naming.cjs +121 -0
- package/dist/application/transform/footer/enum-naming.cjs.map +1 -0
- package/dist/application/transform/footer/enum-naming.mjs +115 -0
- package/dist/application/transform/footer/enum-naming.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-type.cjs +57 -0
- package/dist/application/transform/ref-type.cjs.map +1 -0
- package/dist/application/transform/ref-type.mjs +54 -0
- package/dist/application/transform/ref-type.mjs.map +1 -0
- package/dist/application/transform/schema/array-type.cjs +105 -0
- package/dist/application/transform/schema/array-type.cjs.map +1 -0
- package/dist/application/transform/schema/array-type.mjs +103 -0
- package/dist/application/transform/schema/array-type.mjs.map +1 -0
- package/dist/application/transform/schema/composition-type.cjs +107 -0
- package/dist/application/transform/schema/composition-type.cjs.map +1 -0
- package/dist/application/transform/schema/composition-type.mjs +105 -0
- package/dist/application/transform/schema/composition-type.mjs.map +1 -0
- package/dist/application/transform/schema/core-type.cjs +84 -0
- package/dist/application/transform/schema/core-type.cjs.map +1 -0
- package/dist/application/transform/schema/core-type.mjs +82 -0
- package/dist/application/transform/schema/core-type.mjs.map +1 -0
- package/dist/application/transform/schema/discriminator-property.cjs +21 -0
- package/dist/application/transform/schema/discriminator-property.cjs.map +1 -0
- package/dist/application/transform/schema/discriminator-property.mjs +19 -0
- package/dist/application/transform/schema/discriminator-property.mjs.map +1 -0
- package/dist/application/transform/schema/enum-rule.cjs +107 -0
- package/dist/application/transform/schema/enum-rule.cjs.map +1 -0
- package/dist/application/transform/schema/enum-rule.mjs +105 -0
- package/dist/application/transform/schema/enum-rule.mjs.map +1 -0
- package/dist/application/transform/schema/object-type.cjs +173 -0
- package/dist/application/transform/schema/object-type.cjs.map +1 -0
- package/dist/application/transform/schema/object-type.mjs +170 -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/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 +84 -0
- package/dist/application/transform/schema-comment.cjs.map +1 -0
- package/dist/application/transform/schema-comment.mjs +81 -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 +137 -0
- package/dist/cli/cli-arguments.cjs.map +1 -0
- package/dist/cli/cli-arguments.mjs +129 -0
- package/dist/cli/cli-arguments.mjs.map +1 -0
- package/dist/cli/cli-errors.cjs +80 -0
- package/dist/cli/cli-errors.cjs.map +1 -0
- package/dist/cli/cli-errors.mjs +76 -0
- package/dist/cli/cli-errors.mjs.map +1 -0
- package/dist/cli/cli-output.cjs +37 -0
- package/dist/cli/cli-output.cjs.map +1 -0
- package/dist/cli/cli-output.mjs +30 -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 +62 -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 +54 -0
- package/dist/cli/main.mjs.map +1 -0
- package/dist/cli/redocly-apis.cjs +65 -0
- package/dist/cli/redocly-apis.cjs.map +1 -0
- package/dist/cli/redocly-apis.mjs +62 -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 +100 -0
- package/dist/cli/run-cli.cjs.map +1 -0
- package/dist/cli/run-cli.mjs +98 -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 +50 -0
- package/dist/domain/errors.cjs.map +1 -0
- package/dist/domain/errors.mjs +46 -0
- package/dist/domain/errors.mjs.map +1 -0
- package/dist/domain/ir/constructors.cjs +89 -0
- package/dist/domain/ir/constructors.cjs.map +1 -0
- package/dist/domain/ir/constructors.mjs +71 -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/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/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/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 +66 -0
- package/dist/domain/output-fixes.cjs.map +1 -0
- package/dist/domain/output-fixes.mjs +59 -0
- package/dist/domain/output-fixes.mjs.map +1 -0
- package/dist/index.cjs +98 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +812 -0
- package/dist/index.d.mts +812 -0
- package/dist/index.d.ts +812 -0
- package/dist/index.mjs +27 -0
- package/dist/index.mjs.map +1 -0
- package/dist/transform/components-object.cjs +14 -0
- package/dist/transform/components-object.cjs.map +1 -0
- package/dist/transform/components-object.mjs +10 -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 +43 -0
- package/src/adapters/redocly-loader/redocly-schema-loader.ts +246 -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 +220 -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 +280 -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-enum.ts +76 -0
- package/src/api/discriminator-scan.ts +272 -0
- package/src/api/document-declarations.ts +41 -0
- package/src/api/document-refs.ts +71 -0
- package/src/api/document-run.ts +159 -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/schema-callbacks.ts +211 -0
- package/src/api/string-to-ast.ts +27 -0
- package/src/api/transform-context.ts +87 -0
- package/src/api/transform-schema.ts +39 -0
- package/src/api/type-helpers.ts +130 -0
- package/src/api/unsupported-feature-warnings.ts +26 -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 +16 -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 +281 -0
- package/src/application/stack-overflow.ts +54 -0
- package/src/application/transform/document/components.ts +189 -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 +157 -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/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 +200 -0
- package/src/application/transform/document/path-item-conflicts.ts +79 -0
- package/src/application/transform/document/path-item.ts +168 -0
- package/src/application/transform/document/path-key-overlaps.ts +112 -0
- package/src/application/transform/document/paths-enum.ts +127 -0
- package/src/application/transform/document/paths.ts +211 -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 +106 -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 +127 -0
- package/src/application/transform/footer/enum-naming.ts +181 -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-type.ts +97 -0
- package/src/application/transform/schema/array-type.ts +152 -0
- package/src/application/transform/schema/composition-type.ts +183 -0
- package/src/application/transform/schema/core-type.ts +115 -0
- package/src/application/transform/schema/discriminator-property.ts +28 -0
- package/src/application/transform/schema/enum-rule.ts +157 -0
- package/src/application/transform/schema/object-type.ts +271 -0
- package/src/application/transform/schema/presence-members.ts +96 -0
- package/src/application/transform/schema/schema-context.ts +110 -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 +116 -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 +198 -0
- package/src/cli/cli-dependencies.ts +42 -0
- package/src/cli/cli-errors.ts +125 -0
- package/src/cli/cli-output.ts +53 -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 +67 -0
- package/src/cli/redocly-apis.ts +91 -0
- package/src/cli/ref-limits.ts +16 -0
- package/src/cli/run-cli.ts +114 -0
- package/src/domain/assert-never.ts +8 -0
- package/src/domain/errors.ts +74 -0
- package/src/domain/ir/constructors.ts +137 -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 +224 -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/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/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 +30 -0
- package/src/domain/openapi/path-item-object.ts +70 -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 +59 -0
- package/src/domain/openapi/unsupported-features.ts +139 -0
- package/src/domain/output-fixes.ts +95 -0
- package/src/index.ts +67 -0
- package/src/transform/components-object.ts +25 -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 +267 -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 @@
|
|
|
1
|
+
{"version":3,"file":"cli-errors.cjs","sources":["../../src/cli/cli-errors.ts"],"sourcesContent":["import {\n ERROR_CODES,\n type ErrorCode,\n isOpenAPITypesafeError,\n OpenAPITypesafeError,\n} from \"../domain/errors.js\";\n\n/**\n * How the CLI reports a failure (ENGINEERING_PLAN 4.6, ADR-011): each error code maps to a process\n * exit code and the line printed for it. The table is exhaustive, so a new error code does not\n * compile until the CLI handles it.\n */\n\n/** Process exit codes of the CLI, documented in docs/cli.md. */\nexport const EXIT_CODES = {\n SUCCESS: 0,\n /** `--check` found output that differs from the generated types (as in the original CLI). */\n OUTPUT_STALE: 1,\n /** A flag, the Redocly config, the environment or a callback is wrong. */\n USAGE: 2,\n /** The OpenAPI document cannot be read, is invalid, or cannot be converted. */\n SCHEMA: 3,\n /** An output file cannot be read or written. */\n OUTPUT: 4,\n /** An unexpected failure: a bug in the generator (sysexits `EX_SOFTWARE`). */\n INTERNAL: 70,\n} as const;\n\nexport type ExitCode = (typeof EXIT_CODES)[keyof typeof EXIT_CODES];\n\ninterface CliErrorReport {\n readonly exitCode: ExitCode;\n /** The printed text; the error's own message when absent. */\n readonly message?: (error: OpenAPITypesafeError) => string;\n}\n\n/** Problems are printed one by one while linting, so the summary only counts them. */\nfunction schemaInvalidMessage(error: OpenAPITypesafeError): string {\n const count = Array.isArray(error.details.problems) ? error.details.problems.length : 1;\n return `The OpenAPI document has ${count} ${count === 1 ? \"error\" : \"errors\"} (see above)`;\n}\n\n/**\n * Node's `fetch` fails with only \"fetch failed\"; the network reason (refused, DNS, TLS) is the\n * cause of that error. The Node API keeps the original message, so only the CLI adds it.\n */\nfunction loadFailedMessage(error: OpenAPITypesafeError): string {\n const reason = error.cause instanceof Error ? error.cause.cause : undefined;\n if (!(reason instanceof Error)) {\n return error.message;\n }\n const source = typeof error.details.source === \"string\" ? ` (${error.details.source})` : \"\";\n return `${error.message}: ${reason.message}${source}`;\n}\n\n/** The message js-yaml throws at its nesting limit (docs/security/threat-model.md T2). */\nconst YAML_DEPTH_LIMIT_MESSAGE = /nesting exceeded maxDepth \\((\\d+)\\)/;\n\n/** The parser's message says the limit, not how to stay under it. */\nfunction parseFailedMessage(error: OpenAPITypesafeError): string {\n const limit = YAML_DEPTH_LIMIT_MESSAGE.exec(error.message)?.[1];\n if (limit === undefined) {\n return error.message;\n }\n return (\n `${error.message}. The YAML parser reads at most ${limit} nested levels: ` +\n \"move nested schemas to `components` and reference them with `$ref`\"\n );\n}\n\nconst CLI_ERROR_REPORTS: Readonly<Record<ErrorCode, CliErrorReport>> = {\n SCHEMA_SOURCE_EMPTY: { exitCode: EXIT_CODES.SCHEMA },\n SCHEMA_SOURCE_INVALID: { exitCode: EXIT_CODES.SCHEMA },\n SCHEMA_LOAD_FAILED: { exitCode: EXIT_CODES.SCHEMA, message: loadFailedMessage },\n SCHEMA_PARSE_FAILED: { exitCode: EXIT_CODES.SCHEMA, message: parseFailedMessage },\n SCHEMA_VERSION_UNSUPPORTED: { exitCode: EXIT_CODES.SCHEMA },\n SCHEMA_INVALID: { exitCode: EXIT_CODES.SCHEMA, message: schemaInvalidMessage },\n SCHEMA_REF_INVALID: { exitCode: EXIT_CODES.SCHEMA },\n SCHEMA_REF_FORBIDDEN: { exitCode: EXIT_CODES.SCHEMA },\n SCHEMA_OBJECT_INVALID: { exitCode: EXIT_CODES.SCHEMA },\n SCHEMA_PROPERTY_INVALID: { exitCode: EXIT_CODES.SCHEMA },\n SCHEMA_TOO_DEEP: { exitCode: EXIT_CODES.SCHEMA },\n SCHEMA_KEY_UNSUPPORTED: { exitCode: EXIT_CODES.SCHEMA },\n ENUM_NAME_EMPTY: { exitCode: EXIT_CODES.SCHEMA },\n CALLBACK_RESULT_UNREADABLE: { exitCode: EXIT_CODES.USAGE },\n OPTION_FIX_UNKNOWN: { exitCode: EXIT_CODES.USAGE },\n TYPESCRIPT_NOT_FOUND: { exitCode: EXIT_CODES.USAGE },\n CLI_FLAG_REMOVED: { exitCode: EXIT_CODES.USAGE },\n CLI_GLOB_UNSUPPORTED: { exitCode: EXIT_CODES.USAGE },\n CLI_CONFIG_NOT_FOUND: { exitCode: EXIT_CODES.USAGE },\n CLI_CONFIG_OUTPUT_MISSING: { exitCode: EXIT_CODES.USAGE },\n CLI_CHECK_OUTPUT_MISSING: { exitCode: EXIT_CODES.USAGE },\n OUTPUT_STALE: { exitCode: EXIT_CODES.OUTPUT_STALE },\n OUTPUT_READ_FAILED: { exitCode: EXIT_CODES.OUTPUT },\n OUTPUT_WRITE_FAILED: { exitCode: EXIT_CODES.OUTPUT },\n};\n\n/** What the CLI prints and returns for a thrown value. */\nexport interface CliFailure {\n readonly exitCode: ExitCode;\n readonly message: string;\n}\n\n/**\n * Map a thrown value to the CLI's output. A typed error prints one line with its code; anything\n * else is a bug and prints its stack, so it can be reported.\n */\nexport function describeCliFailure(error: unknown): CliFailure {\n if (!isOpenAPITypesafeError(error)) {\n const text = error instanceof Error ? (error.stack ?? error.message) : String(error);\n return { exitCode: EXIT_CODES.INTERNAL, message: `Unexpected error: ${text}` };\n }\n const report = CLI_ERROR_REPORTS[error.code];\n const message = report.message?.(error) ?? error.message;\n return { exitCode: report.exitCode, message: `${message} (${error.code})` };\n}\n\n/** Errors of the CLI itself; its messages are the original CLI's messages. */\nexport function cliError(\n code: Extract<ErrorCode, `CLI_${string}` | `OUTPUT_${string}`>,\n message: string,\n cause?: unknown,\n): OpenAPITypesafeError {\n return new OpenAPITypesafeError({ code: ERROR_CODES[code], message, cause });\n}\n"],"names":["isOpenAPITypesafeError","OpenAPITypesafeError","ERROR_CODES"],"mappings":";;;;AAcO,MAAM,UAAA,GAAa;AAAA,EACxB,OAAA,EAAS,CAAA;AAAA;AAAA,EAET,YAAA,EAAc,CAAA;AAAA;AAAA,EAEd,KAAA,EAAO,CAAA;AAAA;AAAA,EAEP,MAAA,EAAQ,CAAA;AAAA;AAAA,EAER,MAAA,EAAQ,CAAA;AAAA;AAAA,EAER,QAAA,EAAU;AACZ;AAWA,SAAS,qBAAqB,KAAA,EAAqC;AACjE,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,GAAI,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,MAAA,GAAS,CAAA;AACtF,EAAA,OAAO,4BAA4B,KAAK,CAAA,CAAA,EAAI,KAAA,KAAU,CAAA,GAAI,UAAU,QAAQ,CAAA,YAAA,CAAA;AAC9E;AAMA,SAAS,kBAAkB,KAAA,EAAqC;AAC9D,EAAA,MAAM,SAAS,KAAA,CAAM,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,MAAM,KAAA,GAAQ,MAAA;AAClE,EAAA,IAAI,EAAE,kBAAkB,KAAA,CAAA,EAAQ;AAC9B,IAAA,OAAO,KAAA,CAAM,OAAA;AAAA,EACf;AACA,EAAA,MAAM,MAAA,GAAS,OAAO,KAAA,CAAM,OAAA,CAAQ,MAAA,KAAW,WAAW,CAAA,EAAA,EAAK,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,CAAA,CAAA,GAAM,EAAA;AACzF,EAAA,OAAO,GAAG,KAAA,CAAM,OAAO,KAAK,MAAA,CAAO,OAAO,GAAG,MAAM,CAAA,CAAA;AACrD;AAGA,MAAM,wBAAA,GAA2B,qCAAA;AAGjC,SAAS,mBAAmB,KAAA,EAAqC;AAC/D,EAAA,MAAM,QAAQ,wBAAA,CAAyB,IAAA,CAAK,KAAA,CAAM,OAAO,IAAI,CAAC,CAAA;AAC9D,EAAA,IAAI,UAAU,MAAA,EAAW;AACvB,IAAA,OAAO,KAAA,CAAM,OAAA;AAAA,EACf;AACA,EAAA,OACE,CAAA,EAAG,KAAA,CAAM,OAAO,CAAA,gCAAA,EAAmC,KAAK,CAAA,sFAAA,CAAA;AAG5D;AAEA,MAAM,iBAAA,GAAiE;AAAA,EACrE,mBAAA,EAAqB,EAAE,QAAA,EAAU,UAAA,CAAW,MAAA,EAAO;AAAA,EACnD,qBAAA,EAAuB,EAAE,QAAA,EAAU,UAAA,CAAW,MAAA,EAAO;AAAA,EACrD,oBAAoB,EAAE,QAAA,EAAU,UAAA,CAAW,MAAA,EAAQ,SAAS,iBAAA,EAAkB;AAAA,EAC9E,qBAAqB,EAAE,QAAA,EAAU,UAAA,CAAW,MAAA,EAAQ,SAAS,kBAAA,EAAmB;AAAA,EAChF,0BAAA,EAA4B,EAAE,QAAA,EAAU,UAAA,CAAW,MAAA,EAAO;AAAA,EAC1D,gBAAgB,EAAE,QAAA,EAAU,UAAA,CAAW,MAAA,EAAQ,SAAS,oBAAA,EAAqB;AAAA,EAC7E,kBAAA,EAAoB,EAAE,QAAA,EAAU,UAAA,CAAW,MAAA,EAAO;AAAA,EAClD,oBAAA,EAAsB,EAAE,QAAA,EAAU,UAAA,CAAW,MAAA,EAAO;AAAA,EACpD,qBAAA,EAAuB,EAAE,QAAA,EAAU,UAAA,CAAW,MAAA,EAAO;AAAA,EACrD,uBAAA,EAAyB,EAAE,QAAA,EAAU,UAAA,CAAW,MAAA,EAAO;AAAA,EACvD,eAAA,EAAiB,EAAE,QAAA,EAAU,UAAA,CAAW,MAAA,EAAO;AAAA,EAC/C,sBAAA,EAAwB,EAAE,QAAA,EAAU,UAAA,CAAW,MAAA,EAAO;AAAA,EACtD,eAAA,EAAiB,EAAE,QAAA,EAAU,UAAA,CAAW,MAAA,EAAO;AAAA,EAC/C,0BAAA,EAA4B,EAAE,QAAA,EAAU,UAAA,CAAW,KAAA,EAAM;AAAA,EACzD,kBAAA,EAAoB,EAAE,QAAA,EAAU,UAAA,CAAW,KAAA,EAAM;AAAA,EACjD,oBAAA,EAAsB,EAAE,QAAA,EAAU,UAAA,CAAW,KAAA,EAAM;AAAA,EACnD,gBAAA,EAAkB,EAAE,QAAA,EAAU,UAAA,CAAW,KAAA,EAAM;AAAA,EAC/C,oBAAA,EAAsB,EAAE,QAAA,EAAU,UAAA,CAAW,KAAA,EAAM;AAAA,EACnD,oBAAA,EAAsB,EAAE,QAAA,EAAU,UAAA,CAAW,KAAA,EAAM;AAAA,EACnD,yBAAA,EAA2B,EAAE,QAAA,EAAU,UAAA,CAAW,KAAA,EAAM;AAAA,EACxD,wBAAA,EAA0B,EAAE,QAAA,EAAU,UAAA,CAAW,KAAA,EAAM;AAAA,EACvD,YAAA,EAAc,EAAE,QAAA,EAAU,UAAA,CAAW,YAAA,EAAa;AAAA,EAClD,kBAAA,EAAoB,EAAE,QAAA,EAAU,UAAA,CAAW,MAAA,EAAO;AAAA,EAClD,mBAAA,EAAqB,EAAE,QAAA,EAAU,UAAA,CAAW,MAAA;AAC9C,CAAA;AAYO,SAAS,mBAAmB,KAAA,EAA4B;AAC7D,EAAA,IAAI,CAACA,6BAAA,CAAuB,KAAK,CAAA,EAAG;AAClC,IAAA,MAAM,IAAA,GAAO,iBAAiB,KAAA,GAAS,KAAA,CAAM,SAAS,KAAA,CAAM,OAAA,GAAW,OAAO,KAAK,CAAA;AACnF,IAAA,OAAO,EAAE,QAAA,EAAU,UAAA,CAAW,UAAU,OAAA,EAAS,CAAA,kBAAA,EAAqB,IAAI,CAAA,CAAA,EAAG;AAAA,EAC/E;AACA,EAAA,MAAM,MAAA,GAAS,iBAAA,CAAkB,KAAA,CAAM,IAAI,CAAA;AAC3C,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,GAAU,KAAK,KAAK,KAAA,CAAM,OAAA;AACjD,EAAA,OAAO,EAAE,QAAA,EAAU,MAAA,CAAO,QAAA,EAAU,OAAA,EAAS,GAAG,OAAO,CAAA,EAAA,EAAK,KAAA,CAAM,IAAI,CAAA,CAAA,CAAA,EAAI;AAC5E;AAGO,SAAS,QAAA,CACd,IAAA,EACA,OAAA,EACA,KAAA,EACsB;AACtB,EAAA,OAAO,IAAIC,4BAAqB,EAAE,IAAA,EAAMC,mBAAY,IAAI,CAAA,EAAG,OAAA,EAAS,KAAA,EAAO,CAAA;AAC7E;;;;"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { isOpenAPITypesafeError, OpenAPITypesafeError, ERROR_CODES } from '../domain/errors.mjs';
|
|
2
|
+
|
|
3
|
+
const EXIT_CODES = {
|
|
4
|
+
SUCCESS: 0,
|
|
5
|
+
/** `--check` found output that differs from the generated types (as in the original CLI). */
|
|
6
|
+
OUTPUT_STALE: 1,
|
|
7
|
+
/** A flag, the Redocly config, the environment or a callback is wrong. */
|
|
8
|
+
USAGE: 2,
|
|
9
|
+
/** The OpenAPI document cannot be read, is invalid, or cannot be converted. */
|
|
10
|
+
SCHEMA: 3,
|
|
11
|
+
/** An output file cannot be read or written. */
|
|
12
|
+
OUTPUT: 4,
|
|
13
|
+
/** An unexpected failure: a bug in the generator (sysexits `EX_SOFTWARE`). */
|
|
14
|
+
INTERNAL: 70
|
|
15
|
+
};
|
|
16
|
+
function schemaInvalidMessage(error) {
|
|
17
|
+
const count = Array.isArray(error.details.problems) ? error.details.problems.length : 1;
|
|
18
|
+
return `The OpenAPI document has ${count} ${count === 1 ? "error" : "errors"} (see above)`;
|
|
19
|
+
}
|
|
20
|
+
function loadFailedMessage(error) {
|
|
21
|
+
const reason = error.cause instanceof Error ? error.cause.cause : void 0;
|
|
22
|
+
if (!(reason instanceof Error)) {
|
|
23
|
+
return error.message;
|
|
24
|
+
}
|
|
25
|
+
const source = typeof error.details.source === "string" ? ` (${error.details.source})` : "";
|
|
26
|
+
return `${error.message}: ${reason.message}${source}`;
|
|
27
|
+
}
|
|
28
|
+
const YAML_DEPTH_LIMIT_MESSAGE = /nesting exceeded maxDepth \((\d+)\)/;
|
|
29
|
+
function parseFailedMessage(error) {
|
|
30
|
+
const limit = YAML_DEPTH_LIMIT_MESSAGE.exec(error.message)?.[1];
|
|
31
|
+
if (limit === void 0) {
|
|
32
|
+
return error.message;
|
|
33
|
+
}
|
|
34
|
+
return `${error.message}. The YAML parser reads at most ${limit} nested levels: move nested schemas to \`components\` and reference them with \`$ref\``;
|
|
35
|
+
}
|
|
36
|
+
const CLI_ERROR_REPORTS = {
|
|
37
|
+
SCHEMA_SOURCE_EMPTY: { exitCode: EXIT_CODES.SCHEMA },
|
|
38
|
+
SCHEMA_SOURCE_INVALID: { exitCode: EXIT_CODES.SCHEMA },
|
|
39
|
+
SCHEMA_LOAD_FAILED: { exitCode: EXIT_CODES.SCHEMA, message: loadFailedMessage },
|
|
40
|
+
SCHEMA_PARSE_FAILED: { exitCode: EXIT_CODES.SCHEMA, message: parseFailedMessage },
|
|
41
|
+
SCHEMA_VERSION_UNSUPPORTED: { exitCode: EXIT_CODES.SCHEMA },
|
|
42
|
+
SCHEMA_INVALID: { exitCode: EXIT_CODES.SCHEMA, message: schemaInvalidMessage },
|
|
43
|
+
SCHEMA_REF_INVALID: { exitCode: EXIT_CODES.SCHEMA },
|
|
44
|
+
SCHEMA_REF_FORBIDDEN: { exitCode: EXIT_CODES.SCHEMA },
|
|
45
|
+
SCHEMA_OBJECT_INVALID: { exitCode: EXIT_CODES.SCHEMA },
|
|
46
|
+
SCHEMA_PROPERTY_INVALID: { exitCode: EXIT_CODES.SCHEMA },
|
|
47
|
+
SCHEMA_TOO_DEEP: { exitCode: EXIT_CODES.SCHEMA },
|
|
48
|
+
SCHEMA_KEY_UNSUPPORTED: { exitCode: EXIT_CODES.SCHEMA },
|
|
49
|
+
ENUM_NAME_EMPTY: { exitCode: EXIT_CODES.SCHEMA },
|
|
50
|
+
CALLBACK_RESULT_UNREADABLE: { exitCode: EXIT_CODES.USAGE },
|
|
51
|
+
OPTION_FIX_UNKNOWN: { exitCode: EXIT_CODES.USAGE },
|
|
52
|
+
TYPESCRIPT_NOT_FOUND: { exitCode: EXIT_CODES.USAGE },
|
|
53
|
+
CLI_FLAG_REMOVED: { exitCode: EXIT_CODES.USAGE },
|
|
54
|
+
CLI_GLOB_UNSUPPORTED: { exitCode: EXIT_CODES.USAGE },
|
|
55
|
+
CLI_CONFIG_NOT_FOUND: { exitCode: EXIT_CODES.USAGE },
|
|
56
|
+
CLI_CONFIG_OUTPUT_MISSING: { exitCode: EXIT_CODES.USAGE },
|
|
57
|
+
CLI_CHECK_OUTPUT_MISSING: { exitCode: EXIT_CODES.USAGE },
|
|
58
|
+
OUTPUT_STALE: { exitCode: EXIT_CODES.OUTPUT_STALE },
|
|
59
|
+
OUTPUT_READ_FAILED: { exitCode: EXIT_CODES.OUTPUT },
|
|
60
|
+
OUTPUT_WRITE_FAILED: { exitCode: EXIT_CODES.OUTPUT }
|
|
61
|
+
};
|
|
62
|
+
function describeCliFailure(error) {
|
|
63
|
+
if (!isOpenAPITypesafeError(error)) {
|
|
64
|
+
const text = error instanceof Error ? error.stack ?? error.message : String(error);
|
|
65
|
+
return { exitCode: EXIT_CODES.INTERNAL, message: `Unexpected error: ${text}` };
|
|
66
|
+
}
|
|
67
|
+
const report = CLI_ERROR_REPORTS[error.code];
|
|
68
|
+
const message = report.message?.(error) ?? error.message;
|
|
69
|
+
return { exitCode: report.exitCode, message: `${message} (${error.code})` };
|
|
70
|
+
}
|
|
71
|
+
function cliError(code, message, cause) {
|
|
72
|
+
return new OpenAPITypesafeError({ code: ERROR_CODES[code], message, cause });
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export { EXIT_CODES, cliError, describeCliFailure };
|
|
76
|
+
//# sourceMappingURL=cli-errors.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-errors.mjs","sources":["../../src/cli/cli-errors.ts"],"sourcesContent":["import {\n ERROR_CODES,\n type ErrorCode,\n isOpenAPITypesafeError,\n OpenAPITypesafeError,\n} from \"../domain/errors.js\";\n\n/**\n * How the CLI reports a failure (ENGINEERING_PLAN 4.6, ADR-011): each error code maps to a process\n * exit code and the line printed for it. The table is exhaustive, so a new error code does not\n * compile until the CLI handles it.\n */\n\n/** Process exit codes of the CLI, documented in docs/cli.md. */\nexport const EXIT_CODES = {\n SUCCESS: 0,\n /** `--check` found output that differs from the generated types (as in the original CLI). */\n OUTPUT_STALE: 1,\n /** A flag, the Redocly config, the environment or a callback is wrong. */\n USAGE: 2,\n /** The OpenAPI document cannot be read, is invalid, or cannot be converted. */\n SCHEMA: 3,\n /** An output file cannot be read or written. */\n OUTPUT: 4,\n /** An unexpected failure: a bug in the generator (sysexits `EX_SOFTWARE`). */\n INTERNAL: 70,\n} as const;\n\nexport type ExitCode = (typeof EXIT_CODES)[keyof typeof EXIT_CODES];\n\ninterface CliErrorReport {\n readonly exitCode: ExitCode;\n /** The printed text; the error's own message when absent. */\n readonly message?: (error: OpenAPITypesafeError) => string;\n}\n\n/** Problems are printed one by one while linting, so the summary only counts them. */\nfunction schemaInvalidMessage(error: OpenAPITypesafeError): string {\n const count = Array.isArray(error.details.problems) ? error.details.problems.length : 1;\n return `The OpenAPI document has ${count} ${count === 1 ? \"error\" : \"errors\"} (see above)`;\n}\n\n/**\n * Node's `fetch` fails with only \"fetch failed\"; the network reason (refused, DNS, TLS) is the\n * cause of that error. The Node API keeps the original message, so only the CLI adds it.\n */\nfunction loadFailedMessage(error: OpenAPITypesafeError): string {\n const reason = error.cause instanceof Error ? error.cause.cause : undefined;\n if (!(reason instanceof Error)) {\n return error.message;\n }\n const source = typeof error.details.source === \"string\" ? ` (${error.details.source})` : \"\";\n return `${error.message}: ${reason.message}${source}`;\n}\n\n/** The message js-yaml throws at its nesting limit (docs/security/threat-model.md T2). */\nconst YAML_DEPTH_LIMIT_MESSAGE = /nesting exceeded maxDepth \\((\\d+)\\)/;\n\n/** The parser's message says the limit, not how to stay under it. */\nfunction parseFailedMessage(error: OpenAPITypesafeError): string {\n const limit = YAML_DEPTH_LIMIT_MESSAGE.exec(error.message)?.[1];\n if (limit === undefined) {\n return error.message;\n }\n return (\n `${error.message}. The YAML parser reads at most ${limit} nested levels: ` +\n \"move nested schemas to `components` and reference them with `$ref`\"\n );\n}\n\nconst CLI_ERROR_REPORTS: Readonly<Record<ErrorCode, CliErrorReport>> = {\n SCHEMA_SOURCE_EMPTY: { exitCode: EXIT_CODES.SCHEMA },\n SCHEMA_SOURCE_INVALID: { exitCode: EXIT_CODES.SCHEMA },\n SCHEMA_LOAD_FAILED: { exitCode: EXIT_CODES.SCHEMA, message: loadFailedMessage },\n SCHEMA_PARSE_FAILED: { exitCode: EXIT_CODES.SCHEMA, message: parseFailedMessage },\n SCHEMA_VERSION_UNSUPPORTED: { exitCode: EXIT_CODES.SCHEMA },\n SCHEMA_INVALID: { exitCode: EXIT_CODES.SCHEMA, message: schemaInvalidMessage },\n SCHEMA_REF_INVALID: { exitCode: EXIT_CODES.SCHEMA },\n SCHEMA_REF_FORBIDDEN: { exitCode: EXIT_CODES.SCHEMA },\n SCHEMA_OBJECT_INVALID: { exitCode: EXIT_CODES.SCHEMA },\n SCHEMA_PROPERTY_INVALID: { exitCode: EXIT_CODES.SCHEMA },\n SCHEMA_TOO_DEEP: { exitCode: EXIT_CODES.SCHEMA },\n SCHEMA_KEY_UNSUPPORTED: { exitCode: EXIT_CODES.SCHEMA },\n ENUM_NAME_EMPTY: { exitCode: EXIT_CODES.SCHEMA },\n CALLBACK_RESULT_UNREADABLE: { exitCode: EXIT_CODES.USAGE },\n OPTION_FIX_UNKNOWN: { exitCode: EXIT_CODES.USAGE },\n TYPESCRIPT_NOT_FOUND: { exitCode: EXIT_CODES.USAGE },\n CLI_FLAG_REMOVED: { exitCode: EXIT_CODES.USAGE },\n CLI_GLOB_UNSUPPORTED: { exitCode: EXIT_CODES.USAGE },\n CLI_CONFIG_NOT_FOUND: { exitCode: EXIT_CODES.USAGE },\n CLI_CONFIG_OUTPUT_MISSING: { exitCode: EXIT_CODES.USAGE },\n CLI_CHECK_OUTPUT_MISSING: { exitCode: EXIT_CODES.USAGE },\n OUTPUT_STALE: { exitCode: EXIT_CODES.OUTPUT_STALE },\n OUTPUT_READ_FAILED: { exitCode: EXIT_CODES.OUTPUT },\n OUTPUT_WRITE_FAILED: { exitCode: EXIT_CODES.OUTPUT },\n};\n\n/** What the CLI prints and returns for a thrown value. */\nexport interface CliFailure {\n readonly exitCode: ExitCode;\n readonly message: string;\n}\n\n/**\n * Map a thrown value to the CLI's output. A typed error prints one line with its code; anything\n * else is a bug and prints its stack, so it can be reported.\n */\nexport function describeCliFailure(error: unknown): CliFailure {\n if (!isOpenAPITypesafeError(error)) {\n const text = error instanceof Error ? (error.stack ?? error.message) : String(error);\n return { exitCode: EXIT_CODES.INTERNAL, message: `Unexpected error: ${text}` };\n }\n const report = CLI_ERROR_REPORTS[error.code];\n const message = report.message?.(error) ?? error.message;\n return { exitCode: report.exitCode, message: `${message} (${error.code})` };\n}\n\n/** Errors of the CLI itself; its messages are the original CLI's messages. */\nexport function cliError(\n code: Extract<ErrorCode, `CLI_${string}` | `OUTPUT_${string}`>,\n message: string,\n cause?: unknown,\n): OpenAPITypesafeError {\n return new OpenAPITypesafeError({ code: ERROR_CODES[code], message, cause });\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const path = require('node:path');
|
|
4
|
+
const node_url = require('node:url');
|
|
5
|
+
const terminalLogger = require('../adapters/terminal-logger/terminal-logger.cjs');
|
|
6
|
+
const cliErrors = require('./cli-errors.cjs');
|
|
7
|
+
|
|
8
|
+
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e.default : e; }
|
|
9
|
+
|
|
10
|
+
const path__default = /*#__PURE__*/_interopDefaultCompat(path);
|
|
11
|
+
|
|
12
|
+
function resolveFileUrl(filePath, base) {
|
|
13
|
+
return path__default.isAbsolute(filePath) ? node_url.pathToFileURL(filePath) : new URL(filePath, base);
|
|
14
|
+
}
|
|
15
|
+
function printDone(run, output) {
|
|
16
|
+
const { style, now } = run.deps;
|
|
17
|
+
const target = style.green(`${output.source} \u2192 ${style.bold(output.output)}`);
|
|
18
|
+
const duration = style.dim(`[${terminalLogger.formatDuration(now() - run.startedAt)}]`);
|
|
19
|
+
run.deps.console.info(`\u{1F680} ${target} ${duration}`);
|
|
20
|
+
}
|
|
21
|
+
function emitOutput(run, output, contents) {
|
|
22
|
+
if (run.args.isCheck) {
|
|
23
|
+
if (run.deps.files.readText(output.file) !== contents) {
|
|
24
|
+
throw cliErrors.cliError(
|
|
25
|
+
"OUTPUT_STALE",
|
|
26
|
+
`Generated types are not up-to-date! ${output.output} differs from its schema.`
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
run.deps.files.writeText(output.file, contents);
|
|
32
|
+
printDone(run, output);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
exports.emitOutput = emitOutput;
|
|
36
|
+
exports.resolveFileUrl = resolveFileUrl;
|
|
37
|
+
//# sourceMappingURL=cli-output.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-output.cjs","sources":["../../src/cli/cli-output.ts"],"sourcesContent":["import path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { formatDuration } from \"../adapters/terminal-logger/terminal-logger.js\";\nimport type { CliArguments } from \"./cli-arguments.js\";\nimport type { CliDependencies } from \"./cli-dependencies.js\";\nimport { cliError } from \"./cli-errors.js\";\n\n/** Writing one generated file, or checking it with `--check`, and the line printed for it. */\n\n/** One CLI run: its dependencies, its arguments and when it started. */\nexport interface CliRun {\n readonly deps: CliDependencies;\n readonly args: CliArguments;\n readonly startedAt: number;\n}\n\n/** A generated file: `source` names the schema and `output` is the path as the user wrote it. */\nexport interface OutputFile {\n readonly source: string;\n readonly output: string;\n readonly file: URL;\n}\n\n/** A file URL for a path that is absolute, or relative to `base` (a directory or file URL). */\nexport function resolveFileUrl(filePath: string, base: URL): URL {\n return path.isAbsolute(filePath) ? pathToFileURL(filePath) : new URL(filePath, base);\n}\n\nfunction printDone(run: CliRun, output: OutputFile): void {\n const { style, now } = run.deps;\n const target = style.green(`${output.source} → ${style.bold(output.output)}`);\n const duration = style.dim(`[${formatDuration(now() - run.startedAt)}]`);\n run.deps.console.info(`🚀 ${target} ${duration}`);\n}\n\n/**\n * With `--check`, fail with `OUTPUT_STALE` when the file differs from `contents` and leave it\n * alone otherwise. Without it, write the file and print where it went.\n */\nexport function emitOutput(run: CliRun, output: OutputFile, contents: string): void {\n if (run.args.isCheck) {\n if (run.deps.files.readText(output.file) !== contents) {\n // The original message, then the file: with several APIs it tells which one is stale.\n throw cliError(\n \"OUTPUT_STALE\",\n `Generated types are not up-to-date! ${output.output} differs from its schema.`,\n );\n }\n return;\n }\n run.deps.files.writeText(output.file, contents);\n printDone(run, output);\n}\n"],"names":["path","pathToFileURL","formatDuration","cliError"],"mappings":";;;;;;;;;;;AAwBO,SAAS,cAAA,CAAe,UAAkB,IAAA,EAAgB;AAC/D,EAAA,OAAOA,aAAA,CAAK,UAAA,CAAW,QAAQ,CAAA,GAAIC,sBAAA,CAAc,QAAQ,CAAA,GAAI,IAAI,GAAA,CAAI,QAAA,EAAU,IAAI,CAAA;AACrF;AAEA,SAAS,SAAA,CAAU,KAAa,MAAA,EAA0B;AACxD,EAAA,MAAM,EAAE,KAAA,EAAO,GAAA,EAAI,GAAI,GAAA,CAAI,IAAA;AAC3B,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,MAAA,CAAO,MAAM,CAAA,QAAA,EAAM,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,MAAM,CAAC,CAAA,CAAE,CAAA;AAC5E,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,GAAA,CAAI,CAAA,CAAA,EAAIC,6BAAA,CAAe,KAAI,GAAI,GAAA,CAAI,SAAS,CAAC,CAAA,CAAA,CAAG,CAAA;AACvE,EAAA,GAAA,CAAI,KAAK,OAAA,CAAQ,IAAA,CAAK,aAAM,MAAM,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAE,CAAA;AAClD;AAMO,SAAS,UAAA,CAAW,GAAA,EAAa,MAAA,EAAoB,QAAA,EAAwB;AAClF,EAAA,IAAI,GAAA,CAAI,KAAK,OAAA,EAAS;AACpB,IAAA,IAAI,IAAI,IAAA,CAAK,KAAA,CAAM,SAAS,MAAA,CAAO,IAAI,MAAM,QAAA,EAAU;AAErD,MAAA,MAAMC,kBAAA;AAAA,QACJ,cAAA;AAAA,QACA,CAAA,oCAAA,EAAuC,OAAO,MAAM,CAAA,yBAAA;AAAA,OACtD;AAAA,IACF;AACA,IAAA;AAAA,EACF;AACA,EAAA,GAAA,CAAI,IAAA,CAAK,KAAA,CAAM,SAAA,CAAU,MAAA,CAAO,MAAM,QAAQ,CAAA;AAC9C,EAAA,SAAA,CAAU,KAAK,MAAM,CAAA;AACvB;;;"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { pathToFileURL } from 'node:url';
|
|
3
|
+
import { formatDuration } from '../adapters/terminal-logger/terminal-logger.mjs';
|
|
4
|
+
import { cliError } from './cli-errors.mjs';
|
|
5
|
+
|
|
6
|
+
function resolveFileUrl(filePath, base) {
|
|
7
|
+
return path.isAbsolute(filePath) ? pathToFileURL(filePath) : new URL(filePath, base);
|
|
8
|
+
}
|
|
9
|
+
function printDone(run, output) {
|
|
10
|
+
const { style, now } = run.deps;
|
|
11
|
+
const target = style.green(`${output.source} \u2192 ${style.bold(output.output)}`);
|
|
12
|
+
const duration = style.dim(`[${formatDuration(now() - run.startedAt)}]`);
|
|
13
|
+
run.deps.console.info(`\u{1F680} ${target} ${duration}`);
|
|
14
|
+
}
|
|
15
|
+
function emitOutput(run, output, contents) {
|
|
16
|
+
if (run.args.isCheck) {
|
|
17
|
+
if (run.deps.files.readText(output.file) !== contents) {
|
|
18
|
+
throw cliError(
|
|
19
|
+
"OUTPUT_STALE",
|
|
20
|
+
`Generated types are not up-to-date! ${output.output} differs from its schema.`
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
run.deps.files.writeText(output.file, contents);
|
|
26
|
+
printDone(run, output);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export { emitOutput, resolveFileUrl };
|
|
30
|
+
//# sourceMappingURL=cli-output.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-output.mjs","sources":["../../src/cli/cli-output.ts"],"sourcesContent":["import path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { formatDuration } from \"../adapters/terminal-logger/terminal-logger.js\";\nimport type { CliArguments } from \"./cli-arguments.js\";\nimport type { CliDependencies } from \"./cli-dependencies.js\";\nimport { cliError } from \"./cli-errors.js\";\n\n/** Writing one generated file, or checking it with `--check`, and the line printed for it. */\n\n/** One CLI run: its dependencies, its arguments and when it started. */\nexport interface CliRun {\n readonly deps: CliDependencies;\n readonly args: CliArguments;\n readonly startedAt: number;\n}\n\n/** A generated file: `source` names the schema and `output` is the path as the user wrote it. */\nexport interface OutputFile {\n readonly source: string;\n readonly output: string;\n readonly file: URL;\n}\n\n/** A file URL for a path that is absolute, or relative to `base` (a directory or file URL). */\nexport function resolveFileUrl(filePath: string, base: URL): URL {\n return path.isAbsolute(filePath) ? pathToFileURL(filePath) : new URL(filePath, base);\n}\n\nfunction printDone(run: CliRun, output: OutputFile): void {\n const { style, now } = run.deps;\n const target = style.green(`${output.source} → ${style.bold(output.output)}`);\n const duration = style.dim(`[${formatDuration(now() - run.startedAt)}]`);\n run.deps.console.info(`🚀 ${target} ${duration}`);\n}\n\n/**\n * With `--check`, fail with `OUTPUT_STALE` when the file differs from `contents` and leave it\n * alone otherwise. Without it, write the file and print where it went.\n */\nexport function emitOutput(run: CliRun, output: OutputFile, contents: string): void {\n if (run.args.isCheck) {\n if (run.deps.files.readText(output.file) !== contents) {\n // The original message, then the file: with several APIs it tells which one is stale.\n throw cliError(\n \"OUTPUT_STALE\",\n `Generated types are not up-to-date! ${output.output} differs from its schema.`,\n );\n }\n return;\n }\n run.deps.files.writeText(output.file, contents);\n printDone(run, output);\n}\n"],"names":[],"mappings":";;;;;AAwBO,SAAS,cAAA,CAAe,UAAkB,IAAA,EAAgB;AAC/D,EAAA,OAAO,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA,GAAI,aAAA,CAAc,QAAQ,CAAA,GAAI,IAAI,GAAA,CAAI,QAAA,EAAU,IAAI,CAAA;AACrF;AAEA,SAAS,SAAA,CAAU,KAAa,MAAA,EAA0B;AACxD,EAAA,MAAM,EAAE,KAAA,EAAO,GAAA,EAAI,GAAI,GAAA,CAAI,IAAA;AAC3B,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,MAAA,CAAO,MAAM,CAAA,QAAA,EAAM,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,MAAM,CAAC,CAAA,CAAE,CAAA;AAC5E,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,GAAA,CAAI,CAAA,CAAA,EAAI,cAAA,CAAe,KAAI,GAAI,GAAA,CAAI,SAAS,CAAC,CAAA,CAAA,CAAG,CAAA;AACvE,EAAA,GAAA,CAAI,KAAK,OAAA,CAAQ,IAAA,CAAK,aAAM,MAAM,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAE,CAAA;AAClD;AAMO,SAAS,UAAA,CAAW,GAAA,EAAa,MAAA,EAAoB,QAAA,EAAwB;AAClF,EAAA,IAAI,GAAA,CAAI,KAAK,OAAA,EAAS;AACpB,IAAA,IAAI,IAAI,IAAA,CAAK,KAAA,CAAM,SAAS,MAAA,CAAO,IAAI,MAAM,QAAA,EAAU;AAErD,MAAA,MAAM,QAAA;AAAA,QACJ,cAAA;AAAA,QACA,CAAA,oCAAA,EAAuC,OAAO,MAAM,CAAA,yBAAA;AAAA,OACtD;AAAA,IACF;AACA,IAAA;AAAA,EACF;AACA,EAAA,GAAA,CAAI,IAAA,CAAK,KAAA,CAAM,SAAA,CAAU,MAAA,CAAO,MAAM,QAAQ,CAAA;AAC9C,EAAA,SAAA,CAAU,KAAK,MAAM,CAAA;AACvB;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docs-links.cjs","sources":["../../src/cli/docs-links.ts"],"sourcesContent":["/**\n * Links that CLI messages print. They point at the docs in this repository on GitHub, which work\n * before the docs site is published and stay valid after.\n */\nexport const MULTIPLE_SCHEMAS_DOCS_URL =\n \"https://github.com/openapi-typesafe/openapi-typesafe/blob/main/docs/cli.md#multiple-schemas\";\n"],"names":[],"mappings":";;AAIO,MAAM,yBAAA,GACX;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docs-links.mjs","sources":["../../src/cli/docs-links.ts"],"sourcesContent":["/**\n * Links that CLI messages print. They point at the docs in this repository on GitHub, which work\n * before the docs site is published and stay valid after.\n */\nexport const MULTIPLE_SCHEMAS_DOCS_URL =\n \"https://github.com/openapi-typesafe/openapi-typesafe/blob/main/docs/cli.md#multiple-schemas\";\n"],"names":[],"mappings":"AAIO,MAAM,yBAAA,GACX;;"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const outputFixes = require('../domain/output-fixes.cjs');
|
|
4
|
+
|
|
5
|
+
const SEPARATOR = ",";
|
|
6
|
+
function fixNamesOf(value) {
|
|
7
|
+
if (value === void 0) {
|
|
8
|
+
return void 0;
|
|
9
|
+
}
|
|
10
|
+
const names = [value].flat().flatMap((entry) => String(entry).split(SEPARATOR)).map((name) => name.trim()).filter((name) => name !== "");
|
|
11
|
+
return outputFixes.outputFixNamesOf(names);
|
|
12
|
+
}
|
|
13
|
+
function fixOption(names) {
|
|
14
|
+
return names === void 0 ? {} : { fix: names };
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
exports.fixNamesOf = fixNamesOf;
|
|
18
|
+
exports.fixOption = fixOption;
|
|
19
|
+
//# sourceMappingURL=fix-option.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fix-option.cjs","sources":["../../src/cli/fix-option.ts"],"sourcesContent":["import { type OutputFixName, outputFixNamesOf } from \"../domain/output-fixes.js\";\nimport type { GeneratorOptions } from \"../types.js\";\n\n/**\n * The `fix` option (ADR-021) as the CLI and `redocly.yaml` give it: `--fix a,b`, repeatable, or\n * `fix: [a, b]` / `fix: a,b` in an API's settings. Unknown names fail with `OPTION_FIX_UNKNOWN`.\n */\n\nconst SEPARATOR = \",\";\n\n/** The names of a flag value or a config value; `undefined` when the option is not set. */\nexport function fixNamesOf(value: unknown): readonly OutputFixName[] | undefined {\n if (value === undefined) {\n return undefined;\n }\n const names = [value]\n .flat()\n .flatMap((entry) => String(entry).split(SEPARATOR))\n .map((name) => name.trim())\n .filter((name) => name !== \"\");\n return outputFixNamesOf(names);\n}\n\n/** The generator option for the names; nothing when the option is not set. */\nexport function fixOption(\n names: readonly OutputFixName[] | undefined,\n): Pick<GeneratorOptions, \"fix\"> {\n return names === undefined ? {} : { fix: names };\n}\n"],"names":["outputFixNamesOf"],"mappings":";;;;AAQA,MAAM,SAAA,GAAY,GAAA;AAGX,SAAS,WAAW,KAAA,EAAsD;AAC/E,EAAA,IAAI,UAAU,MAAA,EAAW;AACvB,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,MAAM,KAAA,GAAQ,CAAC,KAAK,CAAA,CACjB,IAAA,EAAK,CACL,OAAA,CAAQ,CAAC,KAAA,KAAU,MAAA,CAAO,KAAK,CAAA,CAAE,KAAA,CAAM,SAAS,CAAC,CAAA,CACjD,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,IAAA,EAAM,CAAA,CACzB,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,KAAS,EAAE,CAAA;AAC/B,EAAA,OAAOA,6BAAiB,KAAK,CAAA;AAC/B;AAGO,SAAS,UACd,KAAA,EAC+B;AAC/B,EAAA,OAAO,UAAU,MAAA,GAAY,EAAC,GAAI,EAAE,KAAK,KAAA,EAAM;AACjD;;;"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { outputFixNamesOf } from '../domain/output-fixes.mjs';
|
|
2
|
+
|
|
3
|
+
const SEPARATOR = ",";
|
|
4
|
+
function fixNamesOf(value) {
|
|
5
|
+
if (value === void 0) {
|
|
6
|
+
return void 0;
|
|
7
|
+
}
|
|
8
|
+
const names = [value].flat().flatMap((entry) => String(entry).split(SEPARATOR)).map((name) => name.trim()).filter((name) => name !== "");
|
|
9
|
+
return outputFixNamesOf(names);
|
|
10
|
+
}
|
|
11
|
+
function fixOption(names) {
|
|
12
|
+
return names === void 0 ? {} : { fix: names };
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export { fixNamesOf, fixOption };
|
|
16
|
+
//# sourceMappingURL=fix-option.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fix-option.mjs","sources":["../../src/cli/fix-option.ts"],"sourcesContent":["import { type OutputFixName, outputFixNamesOf } from \"../domain/output-fixes.js\";\nimport type { GeneratorOptions } from \"../types.js\";\n\n/**\n * The `fix` option (ADR-021) as the CLI and `redocly.yaml` give it: `--fix a,b`, repeatable, or\n * `fix: [a, b]` / `fix: a,b` in an API's settings. Unknown names fail with `OPTION_FIX_UNKNOWN`.\n */\n\nconst SEPARATOR = \",\";\n\n/** The names of a flag value or a config value; `undefined` when the option is not set. */\nexport function fixNamesOf(value: unknown): readonly OutputFixName[] | undefined {\n if (value === undefined) {\n return undefined;\n }\n const names = [value]\n .flat()\n .flatMap((entry) => String(entry).split(SEPARATOR))\n .map((name) => name.trim())\n .filter((name) => name !== \"\");\n return outputFixNamesOf(names);\n}\n\n/** The generator option for the names; nothing when the option is not set. */\nexport function fixOption(\n names: readonly OutputFixName[] | undefined,\n): Pick<GeneratorOptions, \"fix\"> {\n return names === undefined ? {} : { fix: names };\n}\n"],"names":[],"mappings":";;AAQA,MAAM,SAAA,GAAY,GAAA;AAGX,SAAS,WAAW,KAAA,EAAsD;AAC/E,EAAA,IAAI,UAAU,MAAA,EAAW;AACvB,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,MAAM,KAAA,GAAQ,CAAC,KAAK,CAAA,CACjB,IAAA,EAAK,CACL,OAAA,CAAQ,CAAC,KAAA,KAAU,MAAA,CAAO,KAAK,CAAA,CAAE,KAAA,CAAM,SAAS,CAAC,CAAA,CACjD,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,IAAA,EAAM,CAAA,CACzB,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,KAAS,EAAE,CAAA;AAC/B,EAAA,OAAO,iBAAiB,KAAK,CAAA;AAC/B;AAGO,SAAS,UACd,KAAA,EAC+B;AAC/B,EAAA,OAAO,UAAU,MAAA,GAAY,EAAC,GAAI,EAAE,KAAK,KAAA,EAAM;AACjD;;"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const HELP_TEXT = [
|
|
4
|
+
"Usage",
|
|
5
|
+
" $ openapi-typesafe [input] [options]",
|
|
6
|
+
"",
|
|
7
|
+
"Options",
|
|
8
|
+
" --help Display this",
|
|
9
|
+
" --version Display the version",
|
|
10
|
+
" --redocly [path], -c Specify path to Redocly config (default: redocly.yaml)",
|
|
11
|
+
" --output, -o Specify output file (if not specified in redocly.yaml)",
|
|
12
|
+
" --enum Export true TS enums instead of unions",
|
|
13
|
+
" --enum-values Export enum values as arrays",
|
|
14
|
+
" --conditional-enums Only generate true TS enums when enum metadata is available (default: false)",
|
|
15
|
+
" --dedupe-enums Dedupe enum types when `--enum=true` is set",
|
|
16
|
+
" --check Check that the generated types are up-to-date. (default: false)",
|
|
17
|
+
" --export-type, -t Export top-level `type` instead of `interface`",
|
|
18
|
+
" --immutable Generate readonly types",
|
|
19
|
+
" --additional-properties Treat schema objects as if `additionalProperties: true` is set",
|
|
20
|
+
" --empty-objects-unknown Generate `unknown` instead of `Record<string, never>` for empty objects",
|
|
21
|
+
" --default-non-nullable Set to `false` to ignore default values when generating non-nullable types",
|
|
22
|
+
" --properties-required-by-default",
|
|
23
|
+
" Treat schema objects as if `required` is set to all properties by default",
|
|
24
|
+
" --array-length Generate tuples using array minItems / maxItems",
|
|
25
|
+
" --binary-as-blob Type raw binary strings (format: binary, contentMediaType) as Blob",
|
|
26
|
+
' --fix [names] Turn on output fixes, comma-separated, or "all" (see docs/cli.md#fix)',
|
|
27
|
+
" --path-params-as-types Convert paths to template literal types",
|
|
28
|
+
" --generate-path-params Generate path parameters for all paths where they are undefined by schema",
|
|
29
|
+
" --alphabetize Sort object keys alphabetically",
|
|
30
|
+
" --exclude-deprecated Exclude deprecated types",
|
|
31
|
+
" --root-types Export schemas types at root level",
|
|
32
|
+
" --root-types-no-schema-prefix",
|
|
33
|
+
' Do not add "Schema" prefix to types at the root level (should only be used with --root-types)',
|
|
34
|
+
" --root-types-keep-casing Keep casing of root types (should only be used with --root-types)",
|
|
35
|
+
" --make-paths-enum Generate ApiPaths enum for all paths",
|
|
36
|
+
" --read-write-markers Generate $Read/$Write markers for readOnly/writeOnly properties",
|
|
37
|
+
" --no-lint Skip the Redocly lint (bundling errors still fail)",
|
|
38
|
+
" --local-ref-root [dir] Load local $ref files only from this directory",
|
|
39
|
+
" --remote-ref-hosts [hosts] Load remote $ref documents only from these comma-separated hosts (empty: none)",
|
|
40
|
+
""
|
|
41
|
+
].join("\n");
|
|
42
|
+
|
|
43
|
+
exports.HELP_TEXT = HELP_TEXT;
|
|
44
|
+
//# sourceMappingURL=help-text.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help-text.cjs","sources":["../../src/cli/help-text.ts"],"sourcesContent":["/** The text of `--help`, as in the original CLI; long lines are split only in this source. */\nexport const HELP_TEXT = [\n \"Usage\",\n \" $ openapi-typesafe [input] [options]\",\n \"\",\n \"Options\",\n \" --help Display this\",\n \" --version Display the version\",\n \" --redocly [path], -c Specify path to Redocly config (default: redocly.yaml)\",\n \" --output, -o Specify output file (if not specified in redocly.yaml)\",\n \" --enum Export true TS enums instead of unions\",\n \" --enum-values Export enum values as arrays\",\n \" --conditional-enums Only generate true TS enums when enum\" +\n \" metadata is available (default: false)\",\n \" --dedupe-enums Dedupe enum types when `--enum=true` is set\",\n \" --check Check that the generated types are\" +\n \" up-to-date. (default: false)\",\n \" --export-type, -t Export top-level `type` instead of `interface`\",\n \" --immutable Generate readonly types\",\n \" --additional-properties Treat schema objects as if `additionalProperties: true` is set\",\n \" --empty-objects-unknown Generate `unknown` instead of\" +\n \" `Record<string, never>` for empty objects\",\n \" --default-non-nullable Set to `false` to ignore default values\" +\n \" when generating non-nullable types\",\n \" --properties-required-by-default\",\n \" Treat schema objects as if `required` is\" +\n \" set to all properties by default\",\n \" --array-length Generate tuples using array minItems / maxItems\",\n \" --binary-as-blob Type raw binary strings (format: binary,\" +\n \" contentMediaType) as Blob\",\n \" --fix [names] Turn on output fixes, comma-separated, or\" +\n ' \"all\" (see docs/cli.md#fix)',\n \" --path-params-as-types Convert paths to template literal types\",\n \" --generate-path-params Generate path parameters for all paths where they are\" +\n \" undefined by schema\",\n \" --alphabetize Sort object keys alphabetically\",\n \" --exclude-deprecated Exclude deprecated types\",\n \" --root-types Export schemas types at root level\",\n \" --root-types-no-schema-prefix\",\n ' Do not add \"Schema\" prefix to types at' +\n \" the root level (should only be used with --root-types)\",\n \" --root-types-keep-casing Keep casing of root types (should only be\" +\n \" used with --root-types)\",\n \" --make-paths-enum Generate ApiPaths enum for all paths\",\n \" --read-write-markers Generate $Read/$Write markers for\" +\n \" readOnly/writeOnly properties\",\n \" --no-lint Skip the Redocly lint (bundling errors still fail)\",\n \" --local-ref-root [dir] Load local $ref files only from this directory\",\n \" --remote-ref-hosts [hosts] Load remote $ref documents only from these\" +\n \" comma-separated hosts (empty: none)\",\n \"\",\n].join(\"\\n\");\n"],"names":[],"mappings":";;AACO,MAAM,SAAA,GAAY;AAAA,EACvB,OAAA;AAAA,EACA,wCAAA;AAAA,EACA,EAAA;AAAA,EACA,SAAA;AAAA,EACA,2CAAA;AAAA,EACA,kDAAA;AAAA,EACA,qFAAA;AAAA,EACA,qFAAA;AAAA,EACA,qEAAA;AAAA,EACA,2DAAA;AAAA,EACA,2GAAA;AAAA,EAEA,0EAAA;AAAA,EACA,8FAAA;AAAA,EAEA,6EAAA;AAAA,EACA,sDAAA;AAAA,EACA,6FAAA;AAAA,EACA,sGAAA;AAAA,EAEA,yGAAA;AAAA,EAEA,oCAAA;AAAA,EACA,wGAAA;AAAA,EAEA,8EAAA;AAAA,EACA,iGAAA;AAAA,EAEA,oGAAA;AAAA,EAEA,sEAAA;AAAA,EACA,wGAAA;AAAA,EAEA,8DAAA;AAAA,EACA,uDAAA;AAAA,EACA,iEAAA;AAAA,EACA,iCAAA;AAAA,EACA,4HAAA;AAAA,EAEA,gGAAA;AAAA,EAEA,mEAAA;AAAA,EACA,8FAAA;AAAA,EAEA,iFAAA;AAAA,EACA,6EAAA;AAAA,EACA,6GAAA;AAAA,EAEA;AACF,CAAA,CAAE,KAAK,IAAI;;"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
const HELP_TEXT = [
|
|
2
|
+
"Usage",
|
|
3
|
+
" $ openapi-typesafe [input] [options]",
|
|
4
|
+
"",
|
|
5
|
+
"Options",
|
|
6
|
+
" --help Display this",
|
|
7
|
+
" --version Display the version",
|
|
8
|
+
" --redocly [path], -c Specify path to Redocly config (default: redocly.yaml)",
|
|
9
|
+
" --output, -o Specify output file (if not specified in redocly.yaml)",
|
|
10
|
+
" --enum Export true TS enums instead of unions",
|
|
11
|
+
" --enum-values Export enum values as arrays",
|
|
12
|
+
" --conditional-enums Only generate true TS enums when enum metadata is available (default: false)",
|
|
13
|
+
" --dedupe-enums Dedupe enum types when `--enum=true` is set",
|
|
14
|
+
" --check Check that the generated types are up-to-date. (default: false)",
|
|
15
|
+
" --export-type, -t Export top-level `type` instead of `interface`",
|
|
16
|
+
" --immutable Generate readonly types",
|
|
17
|
+
" --additional-properties Treat schema objects as if `additionalProperties: true` is set",
|
|
18
|
+
" --empty-objects-unknown Generate `unknown` instead of `Record<string, never>` for empty objects",
|
|
19
|
+
" --default-non-nullable Set to `false` to ignore default values when generating non-nullable types",
|
|
20
|
+
" --properties-required-by-default",
|
|
21
|
+
" Treat schema objects as if `required` is set to all properties by default",
|
|
22
|
+
" --array-length Generate tuples using array minItems / maxItems",
|
|
23
|
+
" --binary-as-blob Type raw binary strings (format: binary, contentMediaType) as Blob",
|
|
24
|
+
' --fix [names] Turn on output fixes, comma-separated, or "all" (see docs/cli.md#fix)',
|
|
25
|
+
" --path-params-as-types Convert paths to template literal types",
|
|
26
|
+
" --generate-path-params Generate path parameters for all paths where they are undefined by schema",
|
|
27
|
+
" --alphabetize Sort object keys alphabetically",
|
|
28
|
+
" --exclude-deprecated Exclude deprecated types",
|
|
29
|
+
" --root-types Export schemas types at root level",
|
|
30
|
+
" --root-types-no-schema-prefix",
|
|
31
|
+
' Do not add "Schema" prefix to types at the root level (should only be used with --root-types)',
|
|
32
|
+
" --root-types-keep-casing Keep casing of root types (should only be used with --root-types)",
|
|
33
|
+
" --make-paths-enum Generate ApiPaths enum for all paths",
|
|
34
|
+
" --read-write-markers Generate $Read/$Write markers for readOnly/writeOnly properties",
|
|
35
|
+
" --no-lint Skip the Redocly lint (bundling errors still fail)",
|
|
36
|
+
" --local-ref-root [dir] Load local $ref files only from this directory",
|
|
37
|
+
" --remote-ref-hosts [hosts] Load remote $ref documents only from these comma-separated hosts (empty: none)",
|
|
38
|
+
""
|
|
39
|
+
].join("\n");
|
|
40
|
+
|
|
41
|
+
export { HELP_TEXT };
|
|
42
|
+
//# sourceMappingURL=help-text.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help-text.mjs","sources":["../../src/cli/help-text.ts"],"sourcesContent":["/** The text of `--help`, as in the original CLI; long lines are split only in this source. */\nexport const HELP_TEXT = [\n \"Usage\",\n \" $ openapi-typesafe [input] [options]\",\n \"\",\n \"Options\",\n \" --help Display this\",\n \" --version Display the version\",\n \" --redocly [path], -c Specify path to Redocly config (default: redocly.yaml)\",\n \" --output, -o Specify output file (if not specified in redocly.yaml)\",\n \" --enum Export true TS enums instead of unions\",\n \" --enum-values Export enum values as arrays\",\n \" --conditional-enums Only generate true TS enums when enum\" +\n \" metadata is available (default: false)\",\n \" --dedupe-enums Dedupe enum types when `--enum=true` is set\",\n \" --check Check that the generated types are\" +\n \" up-to-date. (default: false)\",\n \" --export-type, -t Export top-level `type` instead of `interface`\",\n \" --immutable Generate readonly types\",\n \" --additional-properties Treat schema objects as if `additionalProperties: true` is set\",\n \" --empty-objects-unknown Generate `unknown` instead of\" +\n \" `Record<string, never>` for empty objects\",\n \" --default-non-nullable Set to `false` to ignore default values\" +\n \" when generating non-nullable types\",\n \" --properties-required-by-default\",\n \" Treat schema objects as if `required` is\" +\n \" set to all properties by default\",\n \" --array-length Generate tuples using array minItems / maxItems\",\n \" --binary-as-blob Type raw binary strings (format: binary,\" +\n \" contentMediaType) as Blob\",\n \" --fix [names] Turn on output fixes, comma-separated, or\" +\n ' \"all\" (see docs/cli.md#fix)',\n \" --path-params-as-types Convert paths to template literal types\",\n \" --generate-path-params Generate path parameters for all paths where they are\" +\n \" undefined by schema\",\n \" --alphabetize Sort object keys alphabetically\",\n \" --exclude-deprecated Exclude deprecated types\",\n \" --root-types Export schemas types at root level\",\n \" --root-types-no-schema-prefix\",\n ' Do not add \"Schema\" prefix to types at' +\n \" the root level (should only be used with --root-types)\",\n \" --root-types-keep-casing Keep casing of root types (should only be\" +\n \" used with --root-types)\",\n \" --make-paths-enum Generate ApiPaths enum for all paths\",\n \" --read-write-markers Generate $Read/$Write markers for\" +\n \" readOnly/writeOnly properties\",\n \" --no-lint Skip the Redocly lint (bundling errors still fail)\",\n \" --local-ref-root [dir] Load local $ref files only from this directory\",\n \" --remote-ref-hosts [hosts] Load remote $ref documents only from these\" +\n \" comma-separated hosts (empty: none)\",\n \"\",\n].join(\"\\n\");\n"],"names":[],"mappings":"AACO,MAAM,SAAA,GAAY;AAAA,EACvB,OAAA;AAAA,EACA,wCAAA;AAAA,EACA,EAAA;AAAA,EACA,SAAA;AAAA,EACA,2CAAA;AAAA,EACA,kDAAA;AAAA,EACA,qFAAA;AAAA,EACA,qFAAA;AAAA,EACA,qEAAA;AAAA,EACA,2DAAA;AAAA,EACA,2GAAA;AAAA,EAEA,0EAAA;AAAA,EACA,8FAAA;AAAA,EAEA,6EAAA;AAAA,EACA,sDAAA;AAAA,EACA,6FAAA;AAAA,EACA,sGAAA;AAAA,EAEA,yGAAA;AAAA,EAEA,oCAAA;AAAA,EACA,wGAAA;AAAA,EAEA,8EAAA;AAAA,EACA,iGAAA;AAAA,EAEA,oGAAA;AAAA,EAEA,sEAAA;AAAA,EACA,wGAAA;AAAA,EAEA,8DAAA;AAAA,EACA,uDAAA;AAAA,EACA,iEAAA;AAAA,EACA,iCAAA;AAAA,EACA,4HAAA;AAAA,EAEA,gGAAA;AAAA,EAEA,mEAAA;AAAA,EACA,8FAAA;AAAA,EAEA,iFAAA;AAAA,EACA,6EAAA;AAAA,EACA,6GAAA;AAAA,EAEA;AACF,CAAA,CAAE,KAAK,IAAI;;"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const fs = require('node:fs');
|
|
4
|
+
const node_url = require('node:url');
|
|
5
|
+
const colors = require('ansi-colors');
|
|
6
|
+
const nodeFileSystem = require('../adapters/node-file-system/node-file-system.cjs');
|
|
7
|
+
const redoclyConfigSource = require('../adapters/redocly-loader/redocly-config-source.cjs');
|
|
8
|
+
const astToString = require('../api/ast-to-string.cjs');
|
|
9
|
+
const commentHeader = require('../api/comment-header.cjs');
|
|
10
|
+
const defaultPorts = require('../api/default-ports.cjs');
|
|
11
|
+
const openapiTs = require('../api/openapi-ts.cjs');
|
|
12
|
+
const runCli = require('./run-cli.cjs');
|
|
13
|
+
|
|
14
|
+
var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
|
|
15
|
+
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e.default : e; }
|
|
16
|
+
|
|
17
|
+
const fs__default = /*#__PURE__*/_interopDefaultCompat(fs);
|
|
18
|
+
const colors__default = /*#__PURE__*/_interopDefaultCompat(colors);
|
|
19
|
+
|
|
20
|
+
const PACKAGE_JSON = new URL("../../package.json", (typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli/main.cjs', document.baseURI).href)));
|
|
21
|
+
function readVersion() {
|
|
22
|
+
const packageJson = JSON.parse(fs__default.readFileSync(PACKAGE_JSON, "utf8"));
|
|
23
|
+
return packageJson.version;
|
|
24
|
+
}
|
|
25
|
+
function terminalStyle() {
|
|
26
|
+
const palette = colors__default.create();
|
|
27
|
+
palette.enabled = defaultPorts.terminalSupportsColor();
|
|
28
|
+
return {
|
|
29
|
+
bold: (text) => palette.bold(text),
|
|
30
|
+
green: (text) => palette.green(text),
|
|
31
|
+
dim: (text) => palette.dim(text)
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
const generateTypes = async (source, options) => `${commentHeader.COMMENT_HEADER}${astToString.astToString(await openapiTs.default(source, options))}`;
|
|
35
|
+
function terminalConsole() {
|
|
36
|
+
return {
|
|
37
|
+
// biome-ignore lint/suspicious/noConsole: the CLI's own output lines
|
|
38
|
+
info: (text) => console.info(text),
|
|
39
|
+
// biome-ignore lint/suspicious/noConsole: the CLI's own notices
|
|
40
|
+
notice: (text) => console.warn(text)
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
function processDependencies() {
|
|
44
|
+
const cwd = process.cwd();
|
|
45
|
+
return {
|
|
46
|
+
cwd: node_url.pathToFileURL(`${cwd}/`),
|
|
47
|
+
version: readVersion(),
|
|
48
|
+
logger: defaultPorts.defaultLogger(false),
|
|
49
|
+
console: terminalConsole(),
|
|
50
|
+
writeStdout: (text) => process.stdout.write(text),
|
|
51
|
+
stdin: () => process.stdin,
|
|
52
|
+
files: nodeFileSystem.createNodeFileSystem(),
|
|
53
|
+
redoclyConfigs: redoclyConfigSource.createRedoclyConfigSource(cwd),
|
|
54
|
+
generate: generateTypes,
|
|
55
|
+
now: defaultPorts.monotonicNow,
|
|
56
|
+
style: terminalStyle()
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
runCli.runCli(process.argv.slice(2), processDependencies()).then((exitCode) => {
|
|
60
|
+
process.exitCode = exitCode;
|
|
61
|
+
});
|
|
62
|
+
//# sourceMappingURL=main.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.cjs","sources":["../../src/cli/main.ts"],"sourcesContent":["import fs from \"node:fs\";\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 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 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":["fs","colors","terminalSupportsColor","COMMENT_HEADER","astToString","openapiTS","pathToFileURL","defaultLogger","createNodeFileSystem","createRedoclyConfigSource","monotonicNow","runCli"],"mappings":";;;;;;;;;;;;;;;;;;;AAkBA,MAAM,YAAA,GAAe,IAAI,GAAA,CAAI,oBAAA,EAAsB,8PAAe,CAAA;AAElE,SAAS,WAAA,GAAsB;AAC7B,EAAA,MAAM,cAAmC,IAAA,CAAK,KAAA,CAAMA,YAAG,YAAA,CAAa,YAAA,EAAc,MAAM,CAAC,CAAA;AACzF,EAAA,OAAO,WAAA,CAAY,OAAA;AACrB;AAEA,SAAS,aAAA,GAA2B;AAClC,EAAA,MAAM,OAAA,GAAUC,gBAAO,MAAA,EAAO;AAC9B,EAAA,OAAA,CAAQ,UAAUC,kCAAA,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,aAAA,GAA+B,OAAO,MAAA,EAAQ,OAAA,KAClD,CAAA,EAAGC,4BAAc,CAAA,EAAGC,uBAAA,CAAY,MAAMC,iBAAA,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,EAAKC,sBAAA,CAAc,CAAA,EAAG,GAAG,CAAA,CAAA,CAAG,CAAA;AAAA,IAC5B,SAAS,WAAA,EAAY;AAAA,IACrB,MAAA,EAAQC,2BAAc,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,IACrB,OAAOC,mCAAA,EAAqB;AAAA,IAC5B,cAAA,EAAgBC,8CAA0B,GAAG,CAAA;AAAA,IAC7C,QAAA,EAAU,aAAA;AAAA,IACV,GAAA,EAAKC,yBAAA;AAAA,IACL,OAAO,aAAA;AAAc,GACvB;AACF;AAEAC,aAAA,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,54 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import { pathToFileURL } from 'node:url';
|
|
3
|
+
import colors from 'ansi-colors';
|
|
4
|
+
import { createNodeFileSystem } from '../adapters/node-file-system/node-file-system.mjs';
|
|
5
|
+
import { createRedoclyConfigSource } from '../adapters/redocly-loader/redocly-config-source.mjs';
|
|
6
|
+
import { astToString } from '../api/ast-to-string.mjs';
|
|
7
|
+
import { COMMENT_HEADER } from '../api/comment-header.mjs';
|
|
8
|
+
import { monotonicNow, defaultLogger, terminalSupportsColor } from '../api/default-ports.mjs';
|
|
9
|
+
import openapiTS from '../api/openapi-ts.mjs';
|
|
10
|
+
import { runCli } from './run-cli.mjs';
|
|
11
|
+
|
|
12
|
+
const PACKAGE_JSON = new URL("../../package.json", import.meta.url);
|
|
13
|
+
function readVersion() {
|
|
14
|
+
const packageJson = JSON.parse(fs.readFileSync(PACKAGE_JSON, "utf8"));
|
|
15
|
+
return packageJson.version;
|
|
16
|
+
}
|
|
17
|
+
function terminalStyle() {
|
|
18
|
+
const palette = colors.create();
|
|
19
|
+
palette.enabled = terminalSupportsColor();
|
|
20
|
+
return {
|
|
21
|
+
bold: (text) => palette.bold(text),
|
|
22
|
+
green: (text) => palette.green(text),
|
|
23
|
+
dim: (text) => palette.dim(text)
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
const generateTypes = async (source, options) => `${COMMENT_HEADER}${astToString(await openapiTS(source, options))}`;
|
|
27
|
+
function terminalConsole() {
|
|
28
|
+
return {
|
|
29
|
+
// biome-ignore lint/suspicious/noConsole: the CLI's own output lines
|
|
30
|
+
info: (text) => console.info(text),
|
|
31
|
+
// biome-ignore lint/suspicious/noConsole: the CLI's own notices
|
|
32
|
+
notice: (text) => console.warn(text)
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
function processDependencies() {
|
|
36
|
+
const cwd = process.cwd();
|
|
37
|
+
return {
|
|
38
|
+
cwd: pathToFileURL(`${cwd}/`),
|
|
39
|
+
version: readVersion(),
|
|
40
|
+
logger: defaultLogger(false),
|
|
41
|
+
console: terminalConsole(),
|
|
42
|
+
writeStdout: (text) => process.stdout.write(text),
|
|
43
|
+
stdin: () => process.stdin,
|
|
44
|
+
files: createNodeFileSystem(),
|
|
45
|
+
redoclyConfigs: createRedoclyConfigSource(cwd),
|
|
46
|
+
generate: generateTypes,
|
|
47
|
+
now: monotonicNow,
|
|
48
|
+
style: terminalStyle()
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
runCli(process.argv.slice(2), processDependencies()).then((exitCode) => {
|
|
52
|
+
process.exitCode = exitCode;
|
|
53
|
+
});
|
|
54
|
+
//# 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 { 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 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 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":";;;;;;;;;;;AAkBA,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,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,IACrB,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,65 @@
|
|
|
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.resolveFileUrl(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(new URL(api.root, configRoot), options);
|
|
55
|
+
cliOutput.emitOutput(run, { source: api.name, output, file: new URL(output, configRoot) }, contents);
|
|
56
|
+
}
|
|
57
|
+
async function generateRedoclyApis(run, redocly) {
|
|
58
|
+
const apis = redoclyApisOf(redocly);
|
|
59
|
+
const results = await Promise.allSettled(apis.map((api) => generateApi(run, redocly, api)));
|
|
60
|
+
return results.flatMap((result) => result.status === "rejected" ? [result.reason] : []);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
exports.generateRedoclyApis = generateRedoclyApis;
|
|
64
|
+
exports.hasRedoclyApis = hasRedoclyApis;
|
|
65
|
+
//# sourceMappingURL=redocly-apis.cjs.map
|