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,87 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const jsonPointer = require('./json-pointer.cjs');
|
|
4
|
+
const parameterObject = require('./parameter-object.cjs');
|
|
5
|
+
const pathItemObject = require('./path-item-object.cjs');
|
|
6
|
+
|
|
7
|
+
const UnsupportedFeature = {
|
|
8
|
+
QUERYSTRING_NEXT_TO_QUERY: "querystring"
|
|
9
|
+
};
|
|
10
|
+
const QUERY_LOCATION = "query";
|
|
11
|
+
const LOCAL_REF_PREFIX = "#/";
|
|
12
|
+
function isObject(value) {
|
|
13
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
14
|
+
}
|
|
15
|
+
function resolveLocal(document, value) {
|
|
16
|
+
if (!isObject(value) || typeof value.$ref !== "string") {
|
|
17
|
+
return value;
|
|
18
|
+
}
|
|
19
|
+
if (!value.$ref.startsWith(LOCAL_REF_PREFIX)) {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
let node = document;
|
|
23
|
+
for (const segment of jsonPointer.parseRefPointer(value.$ref)) {
|
|
24
|
+
node = isObject(node) || Array.isArray(node) ? node[segment] : void 0;
|
|
25
|
+
}
|
|
26
|
+
return node ?? null;
|
|
27
|
+
}
|
|
28
|
+
function locatedParameters(document, parameters, segments) {
|
|
29
|
+
if (!Array.isArray(parameters)) {
|
|
30
|
+
return [];
|
|
31
|
+
}
|
|
32
|
+
return parameters.flatMap((entry, index) => {
|
|
33
|
+
const parameter = resolveLocal(document, entry);
|
|
34
|
+
const pointer = jsonPointer.createRef([...segments, String(index)]);
|
|
35
|
+
return isObject(parameter) ? [{ pointer, parameter }] : [];
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
function mergedParameters(shared, own) {
|
|
39
|
+
const byKey = /* @__PURE__ */ new Map();
|
|
40
|
+
for (const located of [...shared, ...own]) {
|
|
41
|
+
byKey.set(`${String(located.parameter.in)}-${String(located.parameter.name)}`, located);
|
|
42
|
+
}
|
|
43
|
+
return [...byKey.values()];
|
|
44
|
+
}
|
|
45
|
+
function querystringPointers(parameters) {
|
|
46
|
+
const hasQuery = parameters.some(({ parameter }) => parameter.in === QUERY_LOCATION);
|
|
47
|
+
return hasQuery ? parameters.filter(({ parameter }) => parameter.in === parameterObject.QUERYSTRING_LOCATION).map(({ pointer }) => pointer) : [];
|
|
48
|
+
}
|
|
49
|
+
function pathItemPointers(document, pathItem, segments) {
|
|
50
|
+
const shared = locatedParameters(document, pathItem.parameters, [...segments, "parameters"]);
|
|
51
|
+
return pathItemObject.pathItemOperations(pathItem).flatMap((entry) => {
|
|
52
|
+
const operation = resolveLocal(document, entry.operation);
|
|
53
|
+
if (!isObject(operation)) {
|
|
54
|
+
return [];
|
|
55
|
+
}
|
|
56
|
+
const operationSegments = [...segments, ...entry.segments, "parameters"];
|
|
57
|
+
const own = locatedParameters(document, operation.parameters, operationSegments);
|
|
58
|
+
return querystringPointers(mergedParameters(shared, own));
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
function pathItemsPointers(document, pathItems, root) {
|
|
62
|
+
if (!isObject(pathItems)) {
|
|
63
|
+
return [];
|
|
64
|
+
}
|
|
65
|
+
return Object.entries(pathItems).flatMap(
|
|
66
|
+
([key, pathItem]) => isObject(pathItem) ? pathItemPointers(document, pathItem, [...root, key]) : []
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
function findUnsupportedFeatures(document) {
|
|
70
|
+
if (!isObject(document)) {
|
|
71
|
+
return [];
|
|
72
|
+
}
|
|
73
|
+
const components = isObject(document.components) ? document.components : {};
|
|
74
|
+
const pointers = [
|
|
75
|
+
...pathItemsPointers(document, document.paths, ["paths"]),
|
|
76
|
+
...pathItemsPointers(document, document.webhooks, ["webhooks"]),
|
|
77
|
+
...pathItemsPointers(document, components.pathItems, ["components", "pathItems"])
|
|
78
|
+
];
|
|
79
|
+
return [...new Set(pointers)].map((pointer) => ({
|
|
80
|
+
feature: UnsupportedFeature.QUERYSTRING_NEXT_TO_QUERY,
|
|
81
|
+
pointer
|
|
82
|
+
}));
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
exports.UnsupportedFeature = UnsupportedFeature;
|
|
86
|
+
exports.findUnsupportedFeatures = findUnsupportedFeatures;
|
|
87
|
+
//# sourceMappingURL=unsupported-features.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unsupported-features.cjs","sources":["../../../src/domain/openapi/unsupported-features.ts"],"sourcesContent":["import { createRef, parseRefPointer } from \"./json-pointer.js\";\nimport { QUERYSTRING_LOCATION } from \"./parameter-object.js\";\nimport { type PathItemObject, pathItemOperations } from \"./path-item-object.js\";\n\n/**\n * OpenAPI 3.2 uses that the generated types leave out, so each one gets a warning. The 3.2\n * features are typed (ADR-020); what is left is an `in: querystring` parameter next to\n * `in: query` parameters of the same operation, which 3.2 does not allow: the `query`\n * parameters keep their types and the `querystring` parameter is not in the output.\n */\nexport const UnsupportedFeature = {\n QUERYSTRING_NEXT_TO_QUERY: \"querystring\",\n} as const;\nexport type UnsupportedFeature = (typeof UnsupportedFeature)[keyof typeof UnsupportedFeature];\n\n/** One place in the document that uses a feature the output leaves out. */\nexport interface UnsupportedFeatureUse {\n readonly feature: UnsupportedFeature;\n /** A JSON Pointer to the object that has the feature's key, such as `#/paths/~1items`. */\n readonly pointer: string;\n}\n\nconst QUERY_LOCATION = \"query\";\nconst LOCAL_REF_PREFIX = \"#/\";\n\ntype JsonObject = Readonly<Record<string, unknown>>;\n\nfunction isObject(value: unknown): value is JsonObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/** The value at a local `$ref` (`#/...`) of the document; null for other or broken `$ref`s. */\nfunction resolveLocal(document: JsonObject, value: unknown): unknown {\n if (!isObject(value) || typeof value.$ref !== \"string\") {\n return value;\n }\n if (!value.$ref.startsWith(LOCAL_REF_PREFIX)) {\n return null;\n }\n let node: unknown = document;\n for (const segment of parseRefPointer(value.$ref)) {\n node = isObject(node) || Array.isArray(node) ? (node as JsonObject)[segment] : undefined;\n }\n return node ?? null;\n}\n\n/** A parameter where it is written, with the object its `$ref` points to. */\ninterface LocatedParameter {\n readonly pointer: string;\n readonly parameter: JsonObject;\n}\n\nfunction locatedParameters(\n document: JsonObject,\n parameters: unknown,\n segments: readonly string[],\n): LocatedParameter[] {\n if (!Array.isArray(parameters)) {\n return [];\n }\n return parameters.flatMap((entry, index) => {\n const parameter = resolveLocal(document, entry);\n const pointer = createRef([...segments, String(index)]);\n return isObject(parameter) ? [{ pointer, parameter }] : [];\n });\n}\n\n/** Path item parameters, then the operation's, which replace those of the same `in` and name. */\nfunction mergedParameters(\n shared: readonly LocatedParameter[],\n own: readonly LocatedParameter[],\n): LocatedParameter[] {\n const byKey = new Map<string, LocatedParameter>();\n for (const located of [...shared, ...own]) {\n byKey.set(`${String(located.parameter.in)}-${String(located.parameter.name)}`, located);\n }\n return [...byKey.values()];\n}\n\n/** The `querystring` parameters of one operation that has `in: query` parameters as well. */\nfunction querystringPointers(parameters: readonly LocatedParameter[]): string[] {\n const hasQuery = parameters.some(({ parameter }) => parameter.in === QUERY_LOCATION);\n return hasQuery\n ? parameters\n .filter(({ parameter }) => parameter.in === QUERYSTRING_LOCATION)\n .map(({ pointer }) => pointer)\n : [];\n}\n\n/** Pointers of `querystring` parameters next to `query` ones in the operations of a path item. */\nfunction pathItemPointers(\n document: JsonObject,\n pathItem: JsonObject,\n segments: readonly string[],\n): string[] {\n const shared = locatedParameters(document, pathItem.parameters, [...segments, \"parameters\"]);\n return pathItemOperations(pathItem as PathItemObject).flatMap((entry) => {\n const operation = resolveLocal(document, entry.operation);\n if (!isObject(operation)) {\n return [];\n }\n const operationSegments = [...segments, ...entry.segments, \"parameters\"];\n const own = locatedParameters(document, operation.parameters, operationSegments);\n return querystringPointers(mergedParameters(shared, own));\n });\n}\n\nfunction pathItemsPointers(\n document: JsonObject,\n pathItems: unknown,\n root: readonly string[],\n): string[] {\n if (!isObject(pathItems)) {\n return [];\n }\n return Object.entries(pathItems).flatMap(([key, pathItem]) =>\n isObject(pathItem) ? pathItemPointers(document, pathItem, [...root, key]) : [],\n );\n}\n\n/**\n * Every use of a feature in `UnsupportedFeature`, once per pointer, in document order: `paths`,\n * then `webhooks`, then `components.pathItems`.\n */\nexport function findUnsupportedFeatures(document: unknown): UnsupportedFeatureUse[] {\n if (!isObject(document)) {\n return [];\n }\n const components = isObject(document.components) ? document.components : {};\n const pointers = [\n ...pathItemsPointers(document, document.paths, [\"paths\"]),\n ...pathItemsPointers(document, document.webhooks, [\"webhooks\"]),\n ...pathItemsPointers(document, components.pathItems, [\"components\", \"pathItems\"]),\n ];\n return [...new Set(pointers)].map((pointer) => ({\n feature: UnsupportedFeature.QUERYSTRING_NEXT_TO_QUERY,\n pointer,\n }));\n}\n"],"names":["parseRefPointer","createRef","QUERYSTRING_LOCATION","pathItemOperations"],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { createRef, parseRefPointer } from './json-pointer.mjs';
|
|
2
|
+
import { QUERYSTRING_LOCATION } from './parameter-object.mjs';
|
|
3
|
+
import { pathItemOperations } from './path-item-object.mjs';
|
|
4
|
+
|
|
5
|
+
const UnsupportedFeature = {
|
|
6
|
+
QUERYSTRING_NEXT_TO_QUERY: "querystring"
|
|
7
|
+
};
|
|
8
|
+
const QUERY_LOCATION = "query";
|
|
9
|
+
const LOCAL_REF_PREFIX = "#/";
|
|
10
|
+
function isObject(value) {
|
|
11
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
12
|
+
}
|
|
13
|
+
function resolveLocal(document, value) {
|
|
14
|
+
if (!isObject(value) || typeof value.$ref !== "string") {
|
|
15
|
+
return value;
|
|
16
|
+
}
|
|
17
|
+
if (!value.$ref.startsWith(LOCAL_REF_PREFIX)) {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
let node = document;
|
|
21
|
+
for (const segment of parseRefPointer(value.$ref)) {
|
|
22
|
+
node = isObject(node) || Array.isArray(node) ? node[segment] : void 0;
|
|
23
|
+
}
|
|
24
|
+
return node ?? null;
|
|
25
|
+
}
|
|
26
|
+
function locatedParameters(document, parameters, segments) {
|
|
27
|
+
if (!Array.isArray(parameters)) {
|
|
28
|
+
return [];
|
|
29
|
+
}
|
|
30
|
+
return parameters.flatMap((entry, index) => {
|
|
31
|
+
const parameter = resolveLocal(document, entry);
|
|
32
|
+
const pointer = createRef([...segments, String(index)]);
|
|
33
|
+
return isObject(parameter) ? [{ pointer, parameter }] : [];
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
function mergedParameters(shared, own) {
|
|
37
|
+
const byKey = /* @__PURE__ */ new Map();
|
|
38
|
+
for (const located of [...shared, ...own]) {
|
|
39
|
+
byKey.set(`${String(located.parameter.in)}-${String(located.parameter.name)}`, located);
|
|
40
|
+
}
|
|
41
|
+
return [...byKey.values()];
|
|
42
|
+
}
|
|
43
|
+
function querystringPointers(parameters) {
|
|
44
|
+
const hasQuery = parameters.some(({ parameter }) => parameter.in === QUERY_LOCATION);
|
|
45
|
+
return hasQuery ? parameters.filter(({ parameter }) => parameter.in === QUERYSTRING_LOCATION).map(({ pointer }) => pointer) : [];
|
|
46
|
+
}
|
|
47
|
+
function pathItemPointers(document, pathItem, segments) {
|
|
48
|
+
const shared = locatedParameters(document, pathItem.parameters, [...segments, "parameters"]);
|
|
49
|
+
return pathItemOperations(pathItem).flatMap((entry) => {
|
|
50
|
+
const operation = resolveLocal(document, entry.operation);
|
|
51
|
+
if (!isObject(operation)) {
|
|
52
|
+
return [];
|
|
53
|
+
}
|
|
54
|
+
const operationSegments = [...segments, ...entry.segments, "parameters"];
|
|
55
|
+
const own = locatedParameters(document, operation.parameters, operationSegments);
|
|
56
|
+
return querystringPointers(mergedParameters(shared, own));
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
function pathItemsPointers(document, pathItems, root) {
|
|
60
|
+
if (!isObject(pathItems)) {
|
|
61
|
+
return [];
|
|
62
|
+
}
|
|
63
|
+
return Object.entries(pathItems).flatMap(
|
|
64
|
+
([key, pathItem]) => isObject(pathItem) ? pathItemPointers(document, pathItem, [...root, key]) : []
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
function findUnsupportedFeatures(document) {
|
|
68
|
+
if (!isObject(document)) {
|
|
69
|
+
return [];
|
|
70
|
+
}
|
|
71
|
+
const components = isObject(document.components) ? document.components : {};
|
|
72
|
+
const pointers = [
|
|
73
|
+
...pathItemsPointers(document, document.paths, ["paths"]),
|
|
74
|
+
...pathItemsPointers(document, document.webhooks, ["webhooks"]),
|
|
75
|
+
...pathItemsPointers(document, components.pathItems, ["components", "pathItems"])
|
|
76
|
+
];
|
|
77
|
+
return [...new Set(pointers)].map((pointer) => ({
|
|
78
|
+
feature: UnsupportedFeature.QUERYSTRING_NEXT_TO_QUERY,
|
|
79
|
+
pointer
|
|
80
|
+
}));
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export { UnsupportedFeature, findUnsupportedFeatures };
|
|
84
|
+
//# sourceMappingURL=unsupported-features.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unsupported-features.mjs","sources":["../../../src/domain/openapi/unsupported-features.ts"],"sourcesContent":["import { createRef, parseRefPointer } from \"./json-pointer.js\";\nimport { QUERYSTRING_LOCATION } from \"./parameter-object.js\";\nimport { type PathItemObject, pathItemOperations } from \"./path-item-object.js\";\n\n/**\n * OpenAPI 3.2 uses that the generated types leave out, so each one gets a warning. The 3.2\n * features are typed (ADR-020); what is left is an `in: querystring` parameter next to\n * `in: query` parameters of the same operation, which 3.2 does not allow: the `query`\n * parameters keep their types and the `querystring` parameter is not in the output.\n */\nexport const UnsupportedFeature = {\n QUERYSTRING_NEXT_TO_QUERY: \"querystring\",\n} as const;\nexport type UnsupportedFeature = (typeof UnsupportedFeature)[keyof typeof UnsupportedFeature];\n\n/** One place in the document that uses a feature the output leaves out. */\nexport interface UnsupportedFeatureUse {\n readonly feature: UnsupportedFeature;\n /** A JSON Pointer to the object that has the feature's key, such as `#/paths/~1items`. */\n readonly pointer: string;\n}\n\nconst QUERY_LOCATION = \"query\";\nconst LOCAL_REF_PREFIX = \"#/\";\n\ntype JsonObject = Readonly<Record<string, unknown>>;\n\nfunction isObject(value: unknown): value is JsonObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/** The value at a local `$ref` (`#/...`) of the document; null for other or broken `$ref`s. */\nfunction resolveLocal(document: JsonObject, value: unknown): unknown {\n if (!isObject(value) || typeof value.$ref !== \"string\") {\n return value;\n }\n if (!value.$ref.startsWith(LOCAL_REF_PREFIX)) {\n return null;\n }\n let node: unknown = document;\n for (const segment of parseRefPointer(value.$ref)) {\n node = isObject(node) || Array.isArray(node) ? (node as JsonObject)[segment] : undefined;\n }\n return node ?? null;\n}\n\n/** A parameter where it is written, with the object its `$ref` points to. */\ninterface LocatedParameter {\n readonly pointer: string;\n readonly parameter: JsonObject;\n}\n\nfunction locatedParameters(\n document: JsonObject,\n parameters: unknown,\n segments: readonly string[],\n): LocatedParameter[] {\n if (!Array.isArray(parameters)) {\n return [];\n }\n return parameters.flatMap((entry, index) => {\n const parameter = resolveLocal(document, entry);\n const pointer = createRef([...segments, String(index)]);\n return isObject(parameter) ? [{ pointer, parameter }] : [];\n });\n}\n\n/** Path item parameters, then the operation's, which replace those of the same `in` and name. */\nfunction mergedParameters(\n shared: readonly LocatedParameter[],\n own: readonly LocatedParameter[],\n): LocatedParameter[] {\n const byKey = new Map<string, LocatedParameter>();\n for (const located of [...shared, ...own]) {\n byKey.set(`${String(located.parameter.in)}-${String(located.parameter.name)}`, located);\n }\n return [...byKey.values()];\n}\n\n/** The `querystring` parameters of one operation that has `in: query` parameters as well. */\nfunction querystringPointers(parameters: readonly LocatedParameter[]): string[] {\n const hasQuery = parameters.some(({ parameter }) => parameter.in === QUERY_LOCATION);\n return hasQuery\n ? parameters\n .filter(({ parameter }) => parameter.in === QUERYSTRING_LOCATION)\n .map(({ pointer }) => pointer)\n : [];\n}\n\n/** Pointers of `querystring` parameters next to `query` ones in the operations of a path item. */\nfunction pathItemPointers(\n document: JsonObject,\n pathItem: JsonObject,\n segments: readonly string[],\n): string[] {\n const shared = locatedParameters(document, pathItem.parameters, [...segments, \"parameters\"]);\n return pathItemOperations(pathItem as PathItemObject).flatMap((entry) => {\n const operation = resolveLocal(document, entry.operation);\n if (!isObject(operation)) {\n return [];\n }\n const operationSegments = [...segments, ...entry.segments, \"parameters\"];\n const own = locatedParameters(document, operation.parameters, operationSegments);\n return querystringPointers(mergedParameters(shared, own));\n });\n}\n\nfunction pathItemsPointers(\n document: JsonObject,\n pathItems: unknown,\n root: readonly string[],\n): string[] {\n if (!isObject(pathItems)) {\n return [];\n }\n return Object.entries(pathItems).flatMap(([key, pathItem]) =>\n isObject(pathItem) ? pathItemPointers(document, pathItem, [...root, key]) : [],\n );\n}\n\n/**\n * Every use of a feature in `UnsupportedFeature`, once per pointer, in document order: `paths`,\n * then `webhooks`, then `components.pathItems`.\n */\nexport function findUnsupportedFeatures(document: unknown): UnsupportedFeatureUse[] {\n if (!isObject(document)) {\n return [];\n }\n const components = isObject(document.components) ? document.components : {};\n const pointers = [\n ...pathItemsPointers(document, document.paths, [\"paths\"]),\n ...pathItemsPointers(document, document.webhooks, [\"webhooks\"]),\n ...pathItemsPointers(document, components.pathItems, [\"components\", \"pathItems\"]),\n ];\n return [...new Set(pointers)].map((pointer) => ({\n feature: UnsupportedFeature.QUERYSTRING_NEXT_TO_QUERY,\n pointer,\n }));\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const errors = require('./errors.cjs');
|
|
4
|
+
|
|
5
|
+
const OutputFix = {
|
|
6
|
+
/** An `allOf` member with only `required` makes those properties of the others required. */
|
|
7
|
+
ALLOF_REQUIRED: "allof-required",
|
|
8
|
+
/** `anyOf` next to object keywords or `allOf` is intersected with them, not added to a union. */
|
|
9
|
+
ANYOF_PROPERTIES: "anyof-properties",
|
|
10
|
+
/** `--array-length` tuples have `min` to `max` items, nest right and follow `--immutable`. */
|
|
11
|
+
ARRAY_LENGTH_TUPLES: "array-length-tuples",
|
|
12
|
+
/** A schema two discriminators name gets one enum of their values, a mapping before its name. */
|
|
13
|
+
DISCRIMINATOR_VALUES: "discriminator-values",
|
|
14
|
+
/** Schemas of one root type name without the prefix each get an alias, the earlier numbered. */
|
|
15
|
+
ROOT_TYPE_NUMBERING: "root-type-numbering",
|
|
16
|
+
/** `unevaluatedProperties` types the keys no other keyword declares (an index signature). */
|
|
17
|
+
UNEVALUATED_PROPERTIES: "unevaluated-properties"
|
|
18
|
+
};
|
|
19
|
+
const OUTPUT_FIXES = Object.values(OutputFix);
|
|
20
|
+
const ALL_OUTPUT_FIXES = "all";
|
|
21
|
+
const KNOWN_NAMES = /* @__PURE__ */ new Set([...OUTPUT_FIXES, ALL_OUTPUT_FIXES]);
|
|
22
|
+
function isOutputFixName(value) {
|
|
23
|
+
return typeof value === "string" && KNOWN_NAMES.has(value);
|
|
24
|
+
}
|
|
25
|
+
function outputFixNamesOf(values) {
|
|
26
|
+
const unknown = values.filter((value) => !isOutputFixName(value));
|
|
27
|
+
if (unknown.length > 0) {
|
|
28
|
+
const names = unknown.map((value) => JSON.stringify(value)).join(", ");
|
|
29
|
+
const known = [...KNOWN_NAMES].join(", ");
|
|
30
|
+
throw new errors.OpenAPITypesafeError({
|
|
31
|
+
code: errors.ERROR_CODES.OPTION_FIX_UNKNOWN,
|
|
32
|
+
message: `Unknown fix ${names}. Known fixes: ${known}.`,
|
|
33
|
+
details: { unknown, known: [...KNOWN_NAMES] }
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
return values;
|
|
37
|
+
}
|
|
38
|
+
function resolveOutputFixes(names) {
|
|
39
|
+
return new Set(names.flatMap((name) => name === ALL_OUTPUT_FIXES ? OUTPUT_FIXES : [name]));
|
|
40
|
+
}
|
|
41
|
+
const ROOT_TYPES = { option: "rootTypes", flag: "--root-types" };
|
|
42
|
+
const NO_SCHEMA_PREFIX = {
|
|
43
|
+
option: "rootTypesNoSchemaPrefix",
|
|
44
|
+
flag: "--root-types-no-schema-prefix"
|
|
45
|
+
};
|
|
46
|
+
const REQUIREMENTS = {
|
|
47
|
+
[OutputFix.ARRAY_LENGTH_TUPLES]: [{ option: "arrayLength", flag: "--array-length" }],
|
|
48
|
+
[OutputFix.ROOT_TYPE_NUMBERING]: [ROOT_TYPES, NO_SCHEMA_PREFIX]
|
|
49
|
+
};
|
|
50
|
+
function describeRequirement(requirement) {
|
|
51
|
+
return `${requirement.option} (${requirement.flag})`;
|
|
52
|
+
}
|
|
53
|
+
function ineffectiveFixNotices(names, isOptionOn) {
|
|
54
|
+
return [...new Set(names)].flatMap((name) => {
|
|
55
|
+
const missing = (REQUIREMENTS[name] ?? []).filter(({ option }) => !isOptionOn(option));
|
|
56
|
+
return missing.length === 0 ? [] : [`Fix "${name}" has no effect without ${missing.map(describeRequirement).join(" and ")}`];
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
exports.ALL_OUTPUT_FIXES = ALL_OUTPUT_FIXES;
|
|
61
|
+
exports.OUTPUT_FIXES = OUTPUT_FIXES;
|
|
62
|
+
exports.OutputFix = OutputFix;
|
|
63
|
+
exports.ineffectiveFixNotices = ineffectiveFixNotices;
|
|
64
|
+
exports.outputFixNamesOf = outputFixNamesOf;
|
|
65
|
+
exports.resolveOutputFixes = resolveOutputFixes;
|
|
66
|
+
//# sourceMappingURL=output-fixes.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output-fixes.cjs","sources":["../../src/domain/output-fixes.ts"],"sourcesContent":["import { ERROR_CODES, OpenAPITypesafeError } from \"./errors.js\";\n\n/**\n * Opt-in fixes of the output of valid schemas (ADR-021). Each one changes only the cases it names;\n * without any, the output is the same as openapi-typescript 7.13 gives. In 2.0 they become the\n * default.\n */\nexport const OutputFix = {\n /** An `allOf` member with only `required` makes those properties of the others required. */\n ALLOF_REQUIRED: \"allof-required\",\n /** `anyOf` next to object keywords or `allOf` is intersected with them, not added to a union. */\n ANYOF_PROPERTIES: \"anyof-properties\",\n /** `--array-length` tuples have `min` to `max` items, nest right and follow `--immutable`. */\n ARRAY_LENGTH_TUPLES: \"array-length-tuples\",\n /** A schema two discriminators name gets one enum of their values, a mapping before its name. */\n DISCRIMINATOR_VALUES: \"discriminator-values\",\n /** Schemas of one root type name without the prefix each get an alias, the earlier numbered. */\n ROOT_TYPE_NUMBERING: \"root-type-numbering\",\n /** `unevaluatedProperties` types the keys no other keyword declares (an index signature). */\n UNEVALUATED_PROPERTIES: \"unevaluated-properties\",\n} as const;\nexport type OutputFix = (typeof OutputFix)[keyof typeof OutputFix];\n\n/** Every fix of this version, in the order the docs list them. */\nexport const OUTPUT_FIXES: readonly OutputFix[] = Object.values(OutputFix);\n\n/** The name that turns on every fix of the installed version. */\nexport const ALL_OUTPUT_FIXES = \"all\";\n\n/** A name the `fix` option accepts: one fix, or `all`. */\nexport type OutputFixName = OutputFix | typeof ALL_OUTPUT_FIXES;\n\nconst KNOWN_NAMES: ReadonlySet<string> = new Set<string>([...OUTPUT_FIXES, ALL_OUTPUT_FIXES]);\n\nfunction isOutputFixName(value: unknown): value is OutputFixName {\n return typeof value === \"string\" && KNOWN_NAMES.has(value);\n}\n\n/** The fix names as given; fails with `OPTION_FIX_UNKNOWN` for any other value. */\nexport function outputFixNamesOf(values: readonly unknown[]): readonly OutputFixName[] {\n const unknown = values.filter((value) => !isOutputFixName(value));\n if (unknown.length > 0) {\n const names = unknown.map((value) => JSON.stringify(value)).join(\", \");\n const known = [...KNOWN_NAMES].join(\", \");\n throw new OpenAPITypesafeError({\n code: ERROR_CODES.OPTION_FIX_UNKNOWN,\n message: `Unknown fix ${names}. Known fixes: ${known}.`,\n details: { unknown, known: [...KNOWN_NAMES] },\n });\n }\n return values as readonly OutputFixName[];\n}\n\n/** The fixes the names turn on; `all` stands for every fix of this version. */\nexport function resolveOutputFixes(names: readonly OutputFixName[]): ReadonlySet<OutputFix> {\n return new Set(names.flatMap((name) => (name === ALL_OUTPUT_FIXES ? OUTPUT_FIXES : [name])));\n}\n\n/** A generator option that a fix works with; without it, the fix changes nothing (ADR-021). */\nexport interface OutputFixRequirement {\n readonly option: \"arrayLength\" | \"rootTypes\" | \"rootTypesNoSchemaPrefix\";\n readonly flag: string;\n}\n\nconst ROOT_TYPES = { option: \"rootTypes\", flag: \"--root-types\" } as const;\nconst NO_SCHEMA_PREFIX = {\n option: \"rootTypesNoSchemaPrefix\",\n flag: \"--root-types-no-schema-prefix\",\n} as const;\n\n/** The options each fix needs, by fix name; `all` has none. */\nconst REQUIREMENTS: Readonly<Partial<Record<OutputFixName, readonly OutputFixRequirement[]>>> = {\n [OutputFix.ARRAY_LENGTH_TUPLES]: [{ option: \"arrayLength\", flag: \"--array-length\" }],\n [OutputFix.ROOT_TYPE_NUMBERING]: [ROOT_TYPES, NO_SCHEMA_PREFIX],\n};\n\nfunction describeRequirement(requirement: OutputFixRequirement): string {\n return `${requirement.option} (${requirement.flag})`;\n}\n\n/**\n * A notice for each fix given by name with an option it needs off; it names the options that are\n * off. `all` adds none: it means every fix that applies, so one that does not apply is expected.\n */\nexport function ineffectiveFixNotices(\n names: readonly OutputFixName[],\n isOptionOn: (option: OutputFixRequirement[\"option\"]) => boolean,\n): string[] {\n return [...new Set(names)].flatMap((name) => {\n const missing = (REQUIREMENTS[name] ?? []).filter(({ option }) => !isOptionOn(option));\n return missing.length === 0\n ? []\n : [`Fix \"${name}\" has no effect without ${missing.map(describeRequirement).join(\" and \")}`];\n });\n}\n"],"names":["OpenAPITypesafeError","ERROR_CODES"],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { OpenAPITypesafeError, ERROR_CODES } from './errors.mjs';
|
|
2
|
+
|
|
3
|
+
const OutputFix = {
|
|
4
|
+
/** An `allOf` member with only `required` makes those properties of the others required. */
|
|
5
|
+
ALLOF_REQUIRED: "allof-required",
|
|
6
|
+
/** `anyOf` next to object keywords or `allOf` is intersected with them, not added to a union. */
|
|
7
|
+
ANYOF_PROPERTIES: "anyof-properties",
|
|
8
|
+
/** `--array-length` tuples have `min` to `max` items, nest right and follow `--immutable`. */
|
|
9
|
+
ARRAY_LENGTH_TUPLES: "array-length-tuples",
|
|
10
|
+
/** A schema two discriminators name gets one enum of their values, a mapping before its name. */
|
|
11
|
+
DISCRIMINATOR_VALUES: "discriminator-values",
|
|
12
|
+
/** Schemas of one root type name without the prefix each get an alias, the earlier numbered. */
|
|
13
|
+
ROOT_TYPE_NUMBERING: "root-type-numbering",
|
|
14
|
+
/** `unevaluatedProperties` types the keys no other keyword declares (an index signature). */
|
|
15
|
+
UNEVALUATED_PROPERTIES: "unevaluated-properties"
|
|
16
|
+
};
|
|
17
|
+
const OUTPUT_FIXES = Object.values(OutputFix);
|
|
18
|
+
const ALL_OUTPUT_FIXES = "all";
|
|
19
|
+
const KNOWN_NAMES = /* @__PURE__ */ new Set([...OUTPUT_FIXES, ALL_OUTPUT_FIXES]);
|
|
20
|
+
function isOutputFixName(value) {
|
|
21
|
+
return typeof value === "string" && KNOWN_NAMES.has(value);
|
|
22
|
+
}
|
|
23
|
+
function outputFixNamesOf(values) {
|
|
24
|
+
const unknown = values.filter((value) => !isOutputFixName(value));
|
|
25
|
+
if (unknown.length > 0) {
|
|
26
|
+
const names = unknown.map((value) => JSON.stringify(value)).join(", ");
|
|
27
|
+
const known = [...KNOWN_NAMES].join(", ");
|
|
28
|
+
throw new OpenAPITypesafeError({
|
|
29
|
+
code: ERROR_CODES.OPTION_FIX_UNKNOWN,
|
|
30
|
+
message: `Unknown fix ${names}. Known fixes: ${known}.`,
|
|
31
|
+
details: { unknown, known: [...KNOWN_NAMES] }
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
return values;
|
|
35
|
+
}
|
|
36
|
+
function resolveOutputFixes(names) {
|
|
37
|
+
return new Set(names.flatMap((name) => name === ALL_OUTPUT_FIXES ? OUTPUT_FIXES : [name]));
|
|
38
|
+
}
|
|
39
|
+
const ROOT_TYPES = { option: "rootTypes", flag: "--root-types" };
|
|
40
|
+
const NO_SCHEMA_PREFIX = {
|
|
41
|
+
option: "rootTypesNoSchemaPrefix",
|
|
42
|
+
flag: "--root-types-no-schema-prefix"
|
|
43
|
+
};
|
|
44
|
+
const REQUIREMENTS = {
|
|
45
|
+
[OutputFix.ARRAY_LENGTH_TUPLES]: [{ option: "arrayLength", flag: "--array-length" }],
|
|
46
|
+
[OutputFix.ROOT_TYPE_NUMBERING]: [ROOT_TYPES, NO_SCHEMA_PREFIX]
|
|
47
|
+
};
|
|
48
|
+
function describeRequirement(requirement) {
|
|
49
|
+
return `${requirement.option} (${requirement.flag})`;
|
|
50
|
+
}
|
|
51
|
+
function ineffectiveFixNotices(names, isOptionOn) {
|
|
52
|
+
return [...new Set(names)].flatMap((name) => {
|
|
53
|
+
const missing = (REQUIREMENTS[name] ?? []).filter(({ option }) => !isOptionOn(option));
|
|
54
|
+
return missing.length === 0 ? [] : [`Fix "${name}" has no effect without ${missing.map(describeRequirement).join(" and ")}`];
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export { ALL_OUTPUT_FIXES, OUTPUT_FIXES, OutputFix, ineffectiveFixNotices, outputFixNamesOf, resolveOutputFixes };
|
|
59
|
+
//# sourceMappingURL=output-fixes.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output-fixes.mjs","sources":["../../src/domain/output-fixes.ts"],"sourcesContent":["import { ERROR_CODES, OpenAPITypesafeError } from \"./errors.js\";\n\n/**\n * Opt-in fixes of the output of valid schemas (ADR-021). Each one changes only the cases it names;\n * without any, the output is the same as openapi-typescript 7.13 gives. In 2.0 they become the\n * default.\n */\nexport const OutputFix = {\n /** An `allOf` member with only `required` makes those properties of the others required. */\n ALLOF_REQUIRED: \"allof-required\",\n /** `anyOf` next to object keywords or `allOf` is intersected with them, not added to a union. */\n ANYOF_PROPERTIES: \"anyof-properties\",\n /** `--array-length` tuples have `min` to `max` items, nest right and follow `--immutable`. */\n ARRAY_LENGTH_TUPLES: \"array-length-tuples\",\n /** A schema two discriminators name gets one enum of their values, a mapping before its name. */\n DISCRIMINATOR_VALUES: \"discriminator-values\",\n /** Schemas of one root type name without the prefix each get an alias, the earlier numbered. */\n ROOT_TYPE_NUMBERING: \"root-type-numbering\",\n /** `unevaluatedProperties` types the keys no other keyword declares (an index signature). */\n UNEVALUATED_PROPERTIES: \"unevaluated-properties\",\n} as const;\nexport type OutputFix = (typeof OutputFix)[keyof typeof OutputFix];\n\n/** Every fix of this version, in the order the docs list them. */\nexport const OUTPUT_FIXES: readonly OutputFix[] = Object.values(OutputFix);\n\n/** The name that turns on every fix of the installed version. */\nexport const ALL_OUTPUT_FIXES = \"all\";\n\n/** A name the `fix` option accepts: one fix, or `all`. */\nexport type OutputFixName = OutputFix | typeof ALL_OUTPUT_FIXES;\n\nconst KNOWN_NAMES: ReadonlySet<string> = new Set<string>([...OUTPUT_FIXES, ALL_OUTPUT_FIXES]);\n\nfunction isOutputFixName(value: unknown): value is OutputFixName {\n return typeof value === \"string\" && KNOWN_NAMES.has(value);\n}\n\n/** The fix names as given; fails with `OPTION_FIX_UNKNOWN` for any other value. */\nexport function outputFixNamesOf(values: readonly unknown[]): readonly OutputFixName[] {\n const unknown = values.filter((value) => !isOutputFixName(value));\n if (unknown.length > 0) {\n const names = unknown.map((value) => JSON.stringify(value)).join(\", \");\n const known = [...KNOWN_NAMES].join(\", \");\n throw new OpenAPITypesafeError({\n code: ERROR_CODES.OPTION_FIX_UNKNOWN,\n message: `Unknown fix ${names}. Known fixes: ${known}.`,\n details: { unknown, known: [...KNOWN_NAMES] },\n });\n }\n return values as readonly OutputFixName[];\n}\n\n/** The fixes the names turn on; `all` stands for every fix of this version. */\nexport function resolveOutputFixes(names: readonly OutputFixName[]): ReadonlySet<OutputFix> {\n return new Set(names.flatMap((name) => (name === ALL_OUTPUT_FIXES ? OUTPUT_FIXES : [name])));\n}\n\n/** A generator option that a fix works with; without it, the fix changes nothing (ADR-021). */\nexport interface OutputFixRequirement {\n readonly option: \"arrayLength\" | \"rootTypes\" | \"rootTypesNoSchemaPrefix\";\n readonly flag: string;\n}\n\nconst ROOT_TYPES = { option: \"rootTypes\", flag: \"--root-types\" } as const;\nconst NO_SCHEMA_PREFIX = {\n option: \"rootTypesNoSchemaPrefix\",\n flag: \"--root-types-no-schema-prefix\",\n} as const;\n\n/** The options each fix needs, by fix name; `all` has none. */\nconst REQUIREMENTS: Readonly<Partial<Record<OutputFixName, readonly OutputFixRequirement[]>>> = {\n [OutputFix.ARRAY_LENGTH_TUPLES]: [{ option: \"arrayLength\", flag: \"--array-length\" }],\n [OutputFix.ROOT_TYPE_NUMBERING]: [ROOT_TYPES, NO_SCHEMA_PREFIX],\n};\n\nfunction describeRequirement(requirement: OutputFixRequirement): string {\n return `${requirement.option} (${requirement.flag})`;\n}\n\n/**\n * A notice for each fix given by name with an option it needs off; it names the options that are\n * off. `all` adds none: it means every fix that applies, so one that does not apply is expected.\n */\nexport function ineffectiveFixNotices(\n names: readonly OutputFixName[],\n isOptionOn: (option: OutputFixRequirement[\"option\"]) => boolean,\n): string[] {\n return [...new Set(names)].flatMap((name) => {\n const missing = (REQUIREMENTS[name] ?? []).filter(({ option }) => !isOptionOn(option));\n return missing.length === 0\n ? []\n : [`Fix \"${name}\" has no effect without ${missing.map(describeRequirement).join(\" and \")}`];\n });\n}\n"],"names":[],"mappings":"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"}
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
const openapiTs = require('./api/openapi-ts.cjs');
|
|
6
|
+
const astToString = require('./api/ast-to-string.cjs');
|
|
7
|
+
const commentHeader = require('./api/comment-header.cjs');
|
|
8
|
+
const discriminatorScan = require('./api/discriminator-scan.cjs');
|
|
9
|
+
const legacyTsHelpers = require('./api/legacy-ts-helpers.cjs');
|
|
10
|
+
const legacyUtils = require('./api/legacy-utils.cjs');
|
|
11
|
+
const stringToAst = require('./api/string-to-ast.cjs');
|
|
12
|
+
const transformSchema = require('./api/transform-schema.cjs');
|
|
13
|
+
const typeHelpers = require('./api/type-helpers.cjs');
|
|
14
|
+
const errors = require('./domain/errors.cjs');
|
|
15
|
+
const outputFixes = require('./domain/output-fixes.cjs');
|
|
16
|
+
const componentsObject = require('./transform/components-object.cjs');
|
|
17
|
+
const headerObject = require('./transform/header-object.cjs');
|
|
18
|
+
const mediaTypeObject = require('./transform/media-type-object.cjs');
|
|
19
|
+
const operationObject = require('./transform/operation-object.cjs');
|
|
20
|
+
const parameterObject = require('./transform/parameter-object.cjs');
|
|
21
|
+
const pathItemObject = require('./transform/path-item-object.cjs');
|
|
22
|
+
const pathsObject = require('./transform/paths-object.cjs');
|
|
23
|
+
const requestBodyObject = require('./transform/request-body-object.cjs');
|
|
24
|
+
const responseObject = require('./transform/response-object.cjs');
|
|
25
|
+
const responsesObject = require('./transform/responses-object.cjs');
|
|
26
|
+
const schemaObject = require('./transform/schema-object.cjs');
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
exports.default = openapiTs.default;
|
|
31
|
+
exports.astToString = astToString.astToString;
|
|
32
|
+
exports.COMMENT_HEADER = commentHeader.COMMENT_HEADER;
|
|
33
|
+
exports.scanDiscriminators = discriminatorScan.scanDiscriminators;
|
|
34
|
+
exports.JS_ENUM_INVALID_CHARS_RE = legacyTsHelpers.JS_ENUM_INVALID_CHARS_RE;
|
|
35
|
+
exports.JS_PROPERTY_INDEX_INVALID_CHARS_RE = legacyTsHelpers.JS_PROPERTY_INDEX_INVALID_CHARS_RE;
|
|
36
|
+
exports.JS_PROPERTY_INDEX_RE = legacyTsHelpers.JS_PROPERTY_INDEX_RE;
|
|
37
|
+
exports.QUESTION_TOKEN = legacyTsHelpers.QUESTION_TOKEN;
|
|
38
|
+
exports.SPECIAL_CHARACTER_MAP = legacyTsHelpers.SPECIAL_CHARACTER_MAP;
|
|
39
|
+
exports.addJSDocComment = legacyTsHelpers.addJSDocComment;
|
|
40
|
+
exports.enumCache = legacyTsHelpers.enumCache;
|
|
41
|
+
exports.tsArrayLiteralExpression = legacyTsHelpers.tsArrayLiteralExpression;
|
|
42
|
+
exports.tsDedupe = legacyTsHelpers.tsDedupe;
|
|
43
|
+
exports.tsEnum = legacyTsHelpers.tsEnum;
|
|
44
|
+
exports.tsEnumMember = legacyTsHelpers.tsEnumMember;
|
|
45
|
+
exports.tsIsPrimitive = legacyTsHelpers.tsIsPrimitive;
|
|
46
|
+
exports.tsModifiers = legacyTsHelpers.tsModifiers;
|
|
47
|
+
exports.tsPropertyIndex = legacyTsHelpers.tsPropertyIndex;
|
|
48
|
+
exports.tsReadonlyArray = legacyTsHelpers.tsReadonlyArray;
|
|
49
|
+
exports.c = legacyUtils.c;
|
|
50
|
+
exports.createDiscriminatorProperty = legacyUtils.createDiscriminatorProperty;
|
|
51
|
+
exports.createRef = legacyUtils.createRef;
|
|
52
|
+
exports.debug = legacyUtils.debug;
|
|
53
|
+
exports.error = legacyUtils.error;
|
|
54
|
+
exports.formatTime = legacyUtils.formatTime;
|
|
55
|
+
exports.getEntries = legacyUtils.getEntries;
|
|
56
|
+
exports.resolveRef = legacyUtils.resolveRef;
|
|
57
|
+
exports.walk = legacyUtils.walk;
|
|
58
|
+
exports.warn = legacyUtils.warn;
|
|
59
|
+
exports.STRING_TO_AST_DEPRECATION_CODE = stringToAst.STRING_TO_AST_DEPRECATION_CODE;
|
|
60
|
+
exports.stringToAST = stringToAst.stringToAST;
|
|
61
|
+
exports.transformSchema = transformSchema.default;
|
|
62
|
+
exports.BOOLEAN = typeHelpers.BOOLEAN;
|
|
63
|
+
exports.FALSE = typeHelpers.FALSE;
|
|
64
|
+
exports.NEVER = typeHelpers.NEVER;
|
|
65
|
+
exports.NULL = typeHelpers.NULL;
|
|
66
|
+
exports.NUMBER = typeHelpers.NUMBER;
|
|
67
|
+
exports.STRING = typeHelpers.STRING;
|
|
68
|
+
exports.TRUE = typeHelpers.TRUE;
|
|
69
|
+
exports.UNDEFINED = typeHelpers.UNDEFINED;
|
|
70
|
+
exports.UNKNOWN = typeHelpers.UNKNOWN;
|
|
71
|
+
exports.oapiRef = typeHelpers.oapiRef;
|
|
72
|
+
exports.tsIntersection = typeHelpers.tsIntersection;
|
|
73
|
+
exports.tsLiteral = typeHelpers.tsLiteral;
|
|
74
|
+
exports.tsNullable = typeHelpers.tsNullable;
|
|
75
|
+
exports.tsOmit = typeHelpers.tsOmit;
|
|
76
|
+
exports.tsRecord = typeHelpers.tsRecord;
|
|
77
|
+
exports.tsUnion = typeHelpers.tsUnion;
|
|
78
|
+
exports.tsWithRequired = typeHelpers.tsWithRequired;
|
|
79
|
+
exports.ERROR_CODES = errors.ERROR_CODES;
|
|
80
|
+
exports.OpenAPITypesafeError = errors.OpenAPITypesafeError;
|
|
81
|
+
exports.isOpenAPITypesafeError = errors.isOpenAPITypesafeError;
|
|
82
|
+
exports.ALL_OUTPUT_FIXES = outputFixes.ALL_OUTPUT_FIXES;
|
|
83
|
+
exports.OUTPUT_FIXES = outputFixes.OUTPUT_FIXES;
|
|
84
|
+
exports.OutputFix = outputFixes.OutputFix;
|
|
85
|
+
exports.transformComponentsObject = componentsObject.default;
|
|
86
|
+
exports.transformHeaderObject = headerObject;
|
|
87
|
+
exports.transformMediaTypeObject = mediaTypeObject;
|
|
88
|
+
exports.injectOperationObject = operationObject.injectOperationObject;
|
|
89
|
+
exports.transformOperationObject = operationObject.default;
|
|
90
|
+
exports.transformParameterObject = parameterObject;
|
|
91
|
+
exports.transformPathItemObject = pathItemObject;
|
|
92
|
+
exports.transformPathsObject = pathsObject;
|
|
93
|
+
exports.transformRequestBodyObject = requestBodyObject;
|
|
94
|
+
exports.transformResponseObject = responseObject;
|
|
95
|
+
exports.transformResponsesObject = responsesObject;
|
|
96
|
+
exports.transformSchemaObject = schemaObject.default;
|
|
97
|
+
exports.transformSchemaObjectWithComposition = schemaObject.transformSchemaObjectWithComposition;
|
|
98
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|