openapi-typesafe 0.0.0 → 1.0.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +22 -0
- package/README.md +71 -1
- package/bin/cli.js +4 -0
- package/dist/adapters/node-file-system/node-file-system.cjs +46 -0
- package/dist/adapters/node-file-system/node-file-system.cjs.map +1 -0
- package/dist/adapters/node-file-system/node-file-system.mjs +40 -0
- package/dist/adapters/node-file-system/node-file-system.mjs.map +1 -0
- package/dist/adapters/redocly-loader/alias-limit.cjs +16 -0
- package/dist/adapters/redocly-loader/alias-limit.cjs.map +1 -0
- package/dist/adapters/redocly-loader/alias-limit.mjs +14 -0
- package/dist/adapters/redocly-loader/alias-limit.mjs.map +1 -0
- package/dist/adapters/redocly-loader/allowed-hosts.cjs +42 -0
- package/dist/adapters/redocly-loader/allowed-hosts.cjs.map +1 -0
- package/dist/adapters/redocly-loader/allowed-hosts.mjs +40 -0
- package/dist/adapters/redocly-loader/allowed-hosts.mjs.map +1 -0
- package/dist/adapters/redocly-loader/bundled-ref-repair.cjs +53 -0
- package/dist/adapters/redocly-loader/bundled-ref-repair.cjs.map +1 -0
- package/dist/adapters/redocly-loader/bundled-ref-repair.mjs +51 -0
- package/dist/adapters/redocly-loader/bundled-ref-repair.mjs.map +1 -0
- package/dist/adapters/redocly-loader/malformed-refs.cjs +41 -0
- package/dist/adapters/redocly-loader/malformed-refs.cjs.map +1 -0
- package/dist/adapters/redocly-loader/malformed-refs.mjs +38 -0
- package/dist/adapters/redocly-loader/malformed-refs.mjs.map +1 -0
- package/dist/adapters/redocly-loader/redocly-config-source.cjs +61 -0
- package/dist/adapters/redocly-loader/redocly-config-source.cjs.map +1 -0
- package/dist/adapters/redocly-loader/redocly-config-source.mjs +54 -0
- package/dist/adapters/redocly-loader/redocly-config-source.mjs.map +1 -0
- package/dist/adapters/redocly-loader/redocly-schema-loader.cjs +179 -0
- package/dist/adapters/redocly-loader/redocly-schema-loader.cjs.map +1 -0
- package/dist/adapters/redocly-loader/redocly-schema-loader.mjs +177 -0
- package/dist/adapters/redocly-loader/redocly-schema-loader.mjs.map +1 -0
- package/dist/adapters/redocly-loader/ref-access.cjs +107 -0
- package/dist/adapters/redocly-loader/ref-access.cjs.map +1 -0
- package/dist/adapters/redocly-loader/ref-access.mjs +99 -0
- package/dist/adapters/redocly-loader/ref-access.mjs.map +1 -0
- package/dist/adapters/redocly-loader/ref-holders.cjs +31 -0
- package/dist/adapters/redocly-loader/ref-holders.cjs.map +1 -0
- package/dist/adapters/redocly-loader/ref-holders.mjs +29 -0
- package/dist/adapters/redocly-loader/ref-holders.mjs.map +1 -0
- package/dist/adapters/redocly-loader/remote-fetch.cjs +60 -0
- package/dist/adapters/redocly-loader/remote-fetch.cjs.map +1 -0
- package/dist/adapters/redocly-loader/remote-fetch.mjs +56 -0
- package/dist/adapters/redocly-loader/remote-fetch.mjs.map +1 -0
- package/dist/adapters/redocly-loader/schema-load-errors.cjs +87 -0
- package/dist/adapters/redocly-loader/schema-load-errors.cjs.map +1 -0
- package/dist/adapters/redocly-loader/schema-load-errors.mjs +77 -0
- package/dist/adapters/redocly-loader/schema-load-errors.mjs.map +1 -0
- package/dist/adapters/redocly-loader/schema-source.cjs +104 -0
- package/dist/adapters/redocly-loader/schema-source.cjs.map +1 -0
- package/dist/adapters/redocly-loader/schema-source.mjs +98 -0
- package/dist/adapters/redocly-loader/schema-source.mjs.map +1 -0
- package/dist/adapters/redocly-loader/unsupported-keys.cjs +62 -0
- package/dist/adapters/redocly-loader/unsupported-keys.cjs.map +1 -0
- package/dist/adapters/redocly-loader/unsupported-keys.mjs +58 -0
- package/dist/adapters/redocly-loader/unsupported-keys.mjs.map +1 -0
- package/dist/adapters/terminal-logger/terminal-logger.cjs +67 -0
- package/dist/adapters/terminal-logger/terminal-logger.cjs.map +1 -0
- package/dist/adapters/terminal-logger/terminal-logger.mjs +59 -0
- package/dist/adapters/terminal-logger/terminal-logger.mjs.map +1 -0
- package/dist/adapters/type-ast-bridge/footer-nodes.cjs +21 -0
- package/dist/adapters/type-ast-bridge/footer-nodes.cjs.map +1 -0
- package/dist/adapters/type-ast-bridge/footer-nodes.mjs +17 -0
- package/dist/adapters/type-ast-bridge/footer-nodes.mjs.map +1 -0
- package/dist/adapters/type-ast-bridge/ir-declarations-to-typescript.cjs +75 -0
- package/dist/adapters/type-ast-bridge/ir-declarations-to-typescript.cjs.map +1 -0
- package/dist/adapters/type-ast-bridge/ir-declarations-to-typescript.mjs +71 -0
- package/dist/adapters/type-ast-bridge/ir-declarations-to-typescript.mjs.map +1 -0
- package/dist/adapters/type-ast-bridge/ir-to-typescript.cjs +148 -0
- package/dist/adapters/type-ast-bridge/ir-to-typescript.cjs.map +1 -0
- package/dist/adapters/type-ast-bridge/ir-to-typescript.mjs +142 -0
- package/dist/adapters/type-ast-bridge/ir-to-typescript.mjs.map +1 -0
- package/dist/adapters/type-ast-bridge/lazy-node.cjs +23 -0
- package/dist/adapters/type-ast-bridge/lazy-node.cjs.map +1 -0
- package/dist/adapters/type-ast-bridge/lazy-node.mjs +21 -0
- package/dist/adapters/type-ast-bridge/lazy-node.mjs.map +1 -0
- package/dist/adapters/type-ast-bridge/load-typescript.cjs +57 -0
- package/dist/adapters/type-ast-bridge/load-typescript.cjs.map +1 -0
- package/dist/adapters/type-ast-bridge/load-typescript.mjs +51 -0
- package/dist/adapters/type-ast-bridge/load-typescript.mjs.map +1 -0
- package/dist/adapters/type-ast-bridge/print-typescript.cjs +21 -0
- package/dist/adapters/type-ast-bridge/print-typescript.cjs.map +1 -0
- package/dist/adapters/type-ast-bridge/print-typescript.mjs +19 -0
- package/dist/adapters/type-ast-bridge/print-typescript.mjs.map +1 -0
- package/dist/adapters/type-ast-bridge/typescript-raw-text.cjs +33 -0
- package/dist/adapters/type-ast-bridge/typescript-raw-text.cjs.map +1 -0
- package/dist/adapters/type-ast-bridge/typescript-raw-text.mjs +29 -0
- package/dist/adapters/type-ast-bridge/typescript-raw-text.mjs.map +1 -0
- package/dist/adapters/type-ast-bridge/typescript-to-ir.cjs +210 -0
- package/dist/adapters/type-ast-bridge/typescript-to-ir.cjs.map +1 -0
- package/dist/adapters/type-ast-bridge/typescript-to-ir.mjs +207 -0
- package/dist/adapters/type-ast-bridge/typescript-to-ir.mjs.map +1 -0
- package/dist/api/ast-to-string.cjs +39 -0
- package/dist/api/ast-to-string.cjs.map +1 -0
- package/dist/api/ast-to-string.mjs +37 -0
- package/dist/api/ast-to-string.mjs.map +1 -0
- package/dist/api/comment-header.cjs +11 -0
- package/dist/api/comment-header.cjs.map +1 -0
- package/dist/api/comment-header.mjs +9 -0
- package/dist/api/comment-header.mjs.map +1 -0
- package/dist/api/default-ports.cjs +38 -0
- package/dist/api/default-ports.cjs.map +1 -0
- package/dist/api/default-ports.mjs +28 -0
- package/dist/api/default-ports.mjs.map +1 -0
- package/dist/api/discriminator-conflict-warnings.cjs +25 -0
- package/dist/api/discriminator-conflict-warnings.cjs.map +1 -0
- package/dist/api/discriminator-conflict-warnings.mjs +23 -0
- package/dist/api/discriminator-conflict-warnings.mjs.map +1 -0
- package/dist/api/discriminator-enum-names.cjs +19 -0
- package/dist/api/discriminator-enum-names.cjs.map +1 -0
- package/dist/api/discriminator-enum-names.mjs +17 -0
- package/dist/api/discriminator-enum-names.mjs.map +1 -0
- package/dist/api/discriminator-enum-parent.cjs +59 -0
- package/dist/api/discriminator-enum-parent.cjs.map +1 -0
- package/dist/api/discriminator-enum-parent.mjs +57 -0
- package/dist/api/discriminator-enum-parent.mjs.map +1 -0
- package/dist/api/discriminator-enum.cjs +69 -0
- package/dist/api/discriminator-enum.cjs.map +1 -0
- package/dist/api/discriminator-enum.mjs +66 -0
- package/dist/api/discriminator-enum.mjs.map +1 -0
- package/dist/api/discriminator-other-owners.cjs +67 -0
- package/dist/api/discriminator-other-owners.cjs.map +1 -0
- package/dist/api/discriminator-other-owners.mjs +64 -0
- package/dist/api/discriminator-other-owners.mjs.map +1 -0
- package/dist/api/discriminator-patch.cjs +88 -0
- package/dist/api/discriminator-patch.cjs.map +1 -0
- package/dist/api/discriminator-patch.mjs +82 -0
- package/dist/api/discriminator-patch.mjs.map +1 -0
- package/dist/api/discriminator-scan.cjs +153 -0
- package/dist/api/discriminator-scan.cjs.map +1 -0
- package/dist/api/discriminator-scan.mjs +150 -0
- package/dist/api/discriminator-scan.mjs.map +1 -0
- package/dist/api/document-declarations.cjs +28 -0
- package/dist/api/document-declarations.cjs.map +1 -0
- package/dist/api/document-declarations.mjs +26 -0
- package/dist/api/document-declarations.mjs.map +1 -0
- package/dist/api/document-refs.cjs +53 -0
- package/dist/api/document-refs.cjs.map +1 -0
- package/dist/api/document-refs.mjs +50 -0
- package/dist/api/document-refs.mjs.map +1 -0
- package/dist/api/document-run.cjs +122 -0
- package/dist/api/document-run.cjs.map +1 -0
- package/dist/api/document-run.mjs +116 -0
- package/dist/api/document-run.mjs.map +1 -0
- package/dist/api/enum-values-warnings.cjs +16 -0
- package/dist/api/enum-values-warnings.cjs.map +1 -0
- package/dist/api/enum-values-warnings.mjs +14 -0
- package/dist/api/enum-values-warnings.mjs.map +1 -0
- package/dist/api/footer-entry.cjs +18 -0
- package/dist/api/footer-entry.cjs.map +1 -0
- package/dist/api/footer-entry.mjs +15 -0
- package/dist/api/footer-entry.mjs.map +1 -0
- package/dist/api/footer-sink.cjs +53 -0
- package/dist/api/footer-sink.cjs.map +1 -0
- package/dist/api/footer-sink.mjs +51 -0
- package/dist/api/footer-sink.mjs.map +1 -0
- package/dist/api/legacy-callback-warning.cjs +25 -0
- package/dist/api/legacy-callback-warning.cjs.map +1 -0
- package/dist/api/legacy-callback-warning.mjs +22 -0
- package/dist/api/legacy-callback-warning.mjs.map +1 -0
- package/dist/api/legacy-ts-helpers.cjs +203 -0
- package/dist/api/legacy-ts-helpers.cjs.map +1 -0
- package/dist/api/legacy-ts-helpers.mjs +187 -0
- package/dist/api/legacy-ts-helpers.mjs.map +1 -0
- package/dist/api/legacy-utils.cjs +65 -0
- package/dist/api/legacy-utils.cjs.map +1 -0
- package/dist/api/legacy-utils.mjs +50 -0
- package/dist/api/legacy-utils.mjs.map +1 -0
- package/dist/api/openapi-ts.cjs +40 -0
- package/dist/api/openapi-ts.cjs.map +1 -0
- package/dist/api/openapi-ts.mjs +34 -0
- package/dist/api/openapi-ts.mjs.map +1 -0
- package/dist/api/path-template-warnings.cjs +21 -0
- package/dist/api/path-template-warnings.cjs.map +1 -0
- package/dist/api/path-template-warnings.mjs +19 -0
- package/dist/api/path-template-warnings.mjs.map +1 -0
- package/dist/api/schema-callbacks.cjs +140 -0
- package/dist/api/schema-callbacks.cjs.map +1 -0
- package/dist/api/schema-callbacks.mjs +136 -0
- package/dist/api/schema-callbacks.mjs.map +1 -0
- package/dist/api/string-to-ast.cjs +21 -0
- package/dist/api/string-to-ast.cjs.map +1 -0
- package/dist/api/string-to-ast.mjs +18 -0
- package/dist/api/string-to-ast.mjs.map +1 -0
- package/dist/api/transform-context.cjs +84 -0
- package/dist/api/transform-context.cjs.map +1 -0
- package/dist/api/transform-context.mjs +67 -0
- package/dist/api/transform-context.mjs.map +1 -0
- package/dist/api/transform-schema.cjs +80 -0
- package/dist/api/transform-schema.cjs.map +1 -0
- package/dist/api/transform-schema.mjs +75 -0
- package/dist/api/transform-schema.mjs.map +1 -0
- package/dist/api/type-helpers.cjs +85 -0
- package/dist/api/type-helpers.cjs.map +1 -0
- package/dist/api/type-helpers.mjs +66 -0
- package/dist/api/type-helpers.mjs.map +1 -0
- package/dist/api/unsupported-feature-warnings.cjs +22 -0
- package/dist/api/unsupported-feature-warnings.cjs.map +1 -0
- package/dist/api/unsupported-feature-warnings.mjs +20 -0
- package/dist/api/unsupported-feature-warnings.mjs.map +1 -0
- package/dist/application/print/comment-writer.cjs +95 -0
- package/dist/application/print/comment-writer.cjs.map +1 -0
- package/dist/application/print/comment-writer.mjs +93 -0
- package/dist/application/print/comment-writer.mjs.map +1 -0
- package/dist/application/print/declaration-printer.cjs +83 -0
- package/dist/application/print/declaration-printer.cjs.map +1 -0
- package/dist/application/print/declaration-printer.mjs +81 -0
- package/dist/application/print/declaration-printer.mjs.map +1 -0
- package/dist/application/print/literal-text.cjs +52 -0
- package/dist/application/print/literal-text.cjs.map +1 -0
- package/dist/application/print/literal-text.mjs +48 -0
- package/dist/application/print/literal-text.mjs.map +1 -0
- package/dist/application/print/print-nodes.cjs +38 -0
- package/dist/application/print/print-nodes.cjs.map +1 -0
- package/dist/application/print/print-nodes.mjs +36 -0
- package/dist/application/print/print-nodes.mjs.map +1 -0
- package/dist/application/print/print-options.cjs +6 -0
- package/dist/application/print/print-options.cjs.map +1 -0
- package/dist/application/print/print-options.mjs +4 -0
- package/dist/application/print/print-options.mjs.map +1 -0
- package/dist/application/print/text-writer.cjs +63 -0
- package/dist/application/print/text-writer.cjs.map +1 -0
- package/dist/application/print/text-writer.mjs +60 -0
- package/dist/application/print/text-writer.mjs.map +1 -0
- package/dist/application/print/type-printer.cjs +219 -0
- package/dist/application/print/type-printer.cjs.map +1 -0
- package/dist/application/print/type-printer.mjs +215 -0
- package/dist/application/print/type-printer.mjs.map +1 -0
- package/dist/application/stack-overflow.cjs +36 -0
- package/dist/application/stack-overflow.cjs.map +1 -0
- package/dist/application/stack-overflow.mjs +31 -0
- package/dist/application/stack-overflow.mjs.map +1 -0
- package/dist/application/transform/document/assignability.cjs +144 -0
- package/dist/application/transform/document/assignability.cjs.map +1 -0
- package/dist/application/transform/document/assignability.mjs +138 -0
- package/dist/application/transform/document/assignability.mjs.map +1 -0
- package/dist/application/transform/document/components.cjs +104 -0
- package/dist/application/transform/document/components.cjs.map +1 -0
- package/dist/application/transform/document/components.mjs +102 -0
- package/dist/application/transform/document/components.mjs.map +1 -0
- package/dist/application/transform/document/declared-types.cjs +66 -0
- package/dist/application/transform/document/declared-types.cjs.map +1 -0
- package/dist/application/transform/document/declared-types.mjs +63 -0
- package/dist/application/transform/document/declared-types.mjs.map +1 -0
- package/dist/application/transform/document/defs-root.cjs +18 -0
- package/dist/application/transform/document/defs-root.cjs.map +1 -0
- package/dist/application/transform/document/defs-root.mjs +16 -0
- package/dist/application/transform/document/defs-root.mjs.map +1 -0
- package/dist/application/transform/document/document-member.cjs +13 -0
- package/dist/application/transform/document/document-member.cjs.map +1 -0
- package/dist/application/transform/document/document-member.mjs +11 -0
- package/dist/application/transform/document/document-member.mjs.map +1 -0
- package/dist/application/transform/document/document.cjs +109 -0
- package/dist/application/transform/document/document.cjs.map +1 -0
- package/dist/application/transform/document/document.mjs +106 -0
- package/dist/application/transform/document/document.mjs.map +1 -0
- package/dist/application/transform/document/exploded-query.cjs +46 -0
- package/dist/application/transform/document/exploded-query.cjs.map +1 -0
- package/dist/application/transform/document/exploded-query.mjs +43 -0
- package/dist/application/transform/document/exploded-query.mjs.map +1 -0
- package/dist/application/transform/document/global-type-references.cjs +63 -0
- package/dist/application/transform/document/global-type-references.cjs.map +1 -0
- package/dist/application/transform/document/global-type-references.mjs +61 -0
- package/dist/application/transform/document/global-type-references.mjs.map +1 -0
- package/dist/application/transform/document/header.cjs +27 -0
- package/dist/application/transform/document/header.cjs.map +1 -0
- package/dist/application/transform/document/header.mjs +25 -0
- package/dist/application/transform/document/header.mjs.map +1 -0
- package/dist/application/transform/document/kept-deprecated.cjs +96 -0
- package/dist/application/transform/document/kept-deprecated.cjs.map +1 -0
- package/dist/application/transform/document/kept-deprecated.mjs +94 -0
- package/dist/application/transform/document/kept-deprecated.mjs.map +1 -0
- package/dist/application/transform/document/list-assignability.cjs +54 -0
- package/dist/application/transform/document/list-assignability.cjs.map +1 -0
- package/dist/application/transform/document/list-assignability.mjs +52 -0
- package/dist/application/transform/document/list-assignability.mjs.map +1 -0
- package/dist/application/transform/document/media-type.cjs +42 -0
- package/dist/application/transform/document/media-type.cjs.map +1 -0
- package/dist/application/transform/document/media-type.mjs +38 -0
- package/dist/application/transform/document/media-type.mjs.map +1 -0
- package/dist/application/transform/document/operation.cjs +45 -0
- package/dist/application/transform/document/operation.cjs.map +1 -0
- package/dist/application/transform/document/operation.mjs +43 -0
- package/dist/application/transform/document/operation.mjs.map +1 -0
- package/dist/application/transform/document/parameter.cjs +25 -0
- package/dist/application/transform/document/parameter.cjs.map +1 -0
- package/dist/application/transform/document/parameter.mjs +23 -0
- package/dist/application/transform/document/parameter.mjs.map +1 -0
- package/dist/application/transform/document/parameters.cjs +146 -0
- package/dist/application/transform/document/parameters.cjs.map +1 -0
- package/dist/application/transform/document/parameters.mjs +144 -0
- package/dist/application/transform/document/parameters.mjs.map +1 -0
- package/dist/application/transform/document/path-item.cjs +82 -0
- package/dist/application/transform/document/path-item.cjs.map +1 -0
- package/dist/application/transform/document/path-item.mjs +80 -0
- package/dist/application/transform/document/path-item.mjs.map +1 -0
- package/dist/application/transform/document/path-key-overlaps.cjs +107 -0
- package/dist/application/transform/document/path-key-overlaps.cjs.map +1 -0
- package/dist/application/transform/document/path-key-overlaps.mjs +105 -0
- package/dist/application/transform/document/path-key-overlaps.mjs.map +1 -0
- package/dist/application/transform/document/path-template-replace.cjs +48 -0
- package/dist/application/transform/document/path-template-replace.cjs.map +1 -0
- package/dist/application/transform/document/path-template-replace.mjs +45 -0
- package/dist/application/transform/document/path-template-replace.mjs.map +1 -0
- package/dist/application/transform/document/paths-enum.cjs +75 -0
- package/dist/application/transform/document/paths-enum.cjs.map +1 -0
- package/dist/application/transform/document/paths-enum.mjs +72 -0
- package/dist/application/transform/document/paths-enum.mjs.map +1 -0
- package/dist/application/transform/document/paths.cjs +153 -0
- package/dist/application/transform/document/paths.cjs.map +1 -0
- package/dist/application/transform/document/paths.mjs +149 -0
- package/dist/application/transform/document/paths.mjs.map +1 -0
- package/dist/application/transform/document/request-body.cjs +36 -0
- package/dist/application/transform/document/request-body.cjs.map +1 -0
- package/dist/application/transform/document/request-body.mjs +34 -0
- package/dist/application/transform/document/request-body.mjs.map +1 -0
- package/dist/application/transform/document/response.cjs +59 -0
- package/dist/application/transform/document/response.cjs.map +1 -0
- package/dist/application/transform/document/response.mjs +57 -0
- package/dist/application/transform/document/response.mjs.map +1 -0
- package/dist/application/transform/document/responses.cjs +23 -0
- package/dist/application/transform/document/responses.cjs.map +1 -0
- package/dist/application/transform/document/responses.mjs +21 -0
- package/dist/application/transform/document/responses.mjs.map +1 -0
- package/dist/application/transform/document/root-type-aliases.cjs +70 -0
- package/dist/application/transform/document/root-type-aliases.cjs.map +1 -0
- package/dist/application/transform/document/root-type-aliases.mjs +67 -0
- package/dist/application/transform/document/root-type-aliases.mjs.map +1 -0
- package/dist/application/transform/document/template-key-match.cjs +128 -0
- package/dist/application/transform/document/template-key-match.cjs.map +1 -0
- package/dist/application/transform/document/template-key-match.mjs +125 -0
- package/dist/application/transform/document/template-key-match.mjs.map +1 -0
- package/dist/application/transform/document/type-assignability.cjs +192 -0
- package/dist/application/transform/document/type-assignability.cjs.map +1 -0
- package/dist/application/transform/document/type-assignability.mjs +190 -0
- package/dist/application/transform/document/type-assignability.mjs.map +1 -0
- package/dist/application/transform/document/type-key.cjs +70 -0
- package/dist/application/transform/document/type-key.cjs.map +1 -0
- package/dist/application/transform/document/type-key.mjs +68 -0
- package/dist/application/transform/document/type-key.mjs.map +1 -0
- package/dist/application/transform/document/type-resolution.cjs +131 -0
- package/dist/application/transform/document/type-resolution.cjs.map +1 -0
- package/dist/application/transform/document/type-resolution.mjs +125 -0
- package/dist/application/transform/document/type-resolution.mjs.map +1 -0
- package/dist/application/transform/document/webhooks.cjs +19 -0
- package/dist/application/transform/document/webhooks.cjs.map +1 -0
- package/dist/application/transform/document/webhooks.mjs +17 -0
- package/dist/application/transform/document/webhooks.mjs.map +1 -0
- package/dist/application/transform/document-entries.cjs +17 -0
- package/dist/application/transform/document-entries.cjs.map +1 -0
- package/dist/application/transform/document-entries.mjs +14 -0
- package/dist/application/transform/document-entries.mjs.map +1 -0
- package/dist/application/transform/footer/document-footer.cjs +150 -0
- package/dist/application/transform/footer/document-footer.cjs.map +1 -0
- package/dist/application/transform/footer/document-footer.mjs +148 -0
- package/dist/application/transform/footer/document-footer.mjs.map +1 -0
- package/dist/application/transform/footer/enum-naming.cjs +138 -0
- package/dist/application/transform/footer/enum-naming.cjs.map +1 -0
- package/dist/application/transform/footer/enum-naming.mjs +131 -0
- package/dist/application/transform/footer/enum-naming.mjs.map +1 -0
- package/dist/application/transform/footer/enum-values-check.cjs +129 -0
- package/dist/application/transform/footer/enum-values-check.cjs.map +1 -0
- package/dist/application/transform/footer/enum-values-check.mjs +127 -0
- package/dist/application/transform/footer/enum-values-check.mjs.map +1 -0
- package/dist/application/transform/footer/evaluation.cjs +33 -0
- package/dist/application/transform/footer/evaluation.cjs.map +1 -0
- package/dist/application/transform/footer/evaluation.mjs +26 -0
- package/dist/application/transform/footer/evaluation.mjs.map +1 -0
- package/dist/application/transform/footer/shared-enum-names.cjs +60 -0
- package/dist/application/transform/footer/shared-enum-names.cjs.map +1 -0
- package/dist/application/transform/footer/shared-enum-names.mjs +57 -0
- package/dist/application/transform/footer/shared-enum-names.mjs.map +1 -0
- package/dist/application/transform/footer/type-evaluation.cjs +246 -0
- package/dist/application/transform/footer/type-evaluation.cjs.map +1 -0
- package/dist/application/transform/footer/type-evaluation.mjs +244 -0
- package/dist/application/transform/footer/type-evaluation.mjs.map +1 -0
- package/dist/application/transform/footer/type-rules.cjs +172 -0
- package/dist/application/transform/footer/type-rules.cjs.map +1 -0
- package/dist/application/transform/footer/type-rules.mjs +166 -0
- package/dist/application/transform/footer/type-rules.mjs.map +1 -0
- package/dist/application/transform/helper-types.cjs +68 -0
- package/dist/application/transform/helper-types.cjs.map +1 -0
- package/dist/application/transform/helper-types.mjs +65 -0
- package/dist/application/transform/helper-types.mjs.map +1 -0
- package/dist/application/transform/literal-type.cjs +36 -0
- package/dist/application/transform/literal-type.cjs.map +1 -0
- package/dist/application/transform/literal-type.mjs +34 -0
- package/dist/application/transform/literal-type.mjs.map +1 -0
- package/dist/application/transform/numbered-names.cjs +18 -0
- package/dist/application/transform/numbered-names.cjs.map +1 -0
- package/dist/application/transform/numbered-names.mjs +16 -0
- package/dist/application/transform/numbered-names.mjs.map +1 -0
- package/dist/application/transform/ref-pointer/generated-location.cjs +138 -0
- package/dist/application/transform/ref-pointer/generated-location.cjs.map +1 -0
- package/dist/application/transform/ref-pointer/generated-location.mjs +136 -0
- package/dist/application/transform/ref-pointer/generated-location.mjs.map +1 -0
- package/dist/application/transform/ref-pointer/generated-shape.cjs +171 -0
- package/dist/application/transform/ref-pointer/generated-shape.cjs.map +1 -0
- package/dist/application/transform/ref-pointer/generated-shape.mjs +162 -0
- package/dist/application/transform/ref-pointer/generated-shape.mjs.map +1 -0
- package/dist/application/transform/ref-pointer/inline-cycles.cjs +44 -0
- package/dist/application/transform/ref-pointer/inline-cycles.cjs.map +1 -0
- package/dist/application/transform/ref-pointer/inline-cycles.mjs +42 -0
- package/dist/application/transform/ref-pointer/inline-cycles.mjs.map +1 -0
- package/dist/application/transform/ref-pointer/original-index.cjs +62 -0
- package/dist/application/transform/ref-pointer/original-index.cjs.map +1 -0
- package/dist/application/transform/ref-pointer/original-index.mjs +60 -0
- package/dist/application/transform/ref-pointer/original-index.mjs.map +1 -0
- package/dist/application/transform/ref-pointer/pointer-type.cjs +60 -0
- package/dist/application/transform/ref-pointer/pointer-type.cjs.map +1 -0
- package/dist/application/transform/ref-pointer/pointer-type.mjs +57 -0
- package/dist/application/transform/ref-pointer/pointer-type.mjs.map +1 -0
- package/dist/application/transform/ref-pointer/pointer-walk.cjs +66 -0
- package/dist/application/transform/ref-pointer/pointer-walk.cjs.map +1 -0
- package/dist/application/transform/ref-pointer/pointer-walk.mjs +56 -0
- package/dist/application/transform/ref-pointer/pointer-walk.mjs.map +1 -0
- package/dist/application/transform/ref-pointer/typed-walk.cjs +124 -0
- package/dist/application/transform/ref-pointer/typed-walk.cjs.map +1 -0
- package/dist/application/transform/ref-pointer/typed-walk.mjs +122 -0
- package/dist/application/transform/ref-pointer/typed-walk.mjs.map +1 -0
- package/dist/application/transform/ref-type.cjs +62 -0
- package/dist/application/transform/ref-type.cjs.map +1 -0
- package/dist/application/transform/ref-type.mjs +55 -0
- package/dist/application/transform/ref-type.mjs.map +1 -0
- package/dist/application/transform/schema/access-flags.cjs +38 -0
- package/dist/application/transform/schema/access-flags.cjs.map +1 -0
- package/dist/application/transform/schema/access-flags.mjs +36 -0
- package/dist/application/transform/schema/access-flags.mjs.map +1 -0
- package/dist/application/transform/schema/array-type.cjs +136 -0
- package/dist/application/transform/schema/array-type.cjs.map +1 -0
- package/dist/application/transform/schema/array-type.mjs +134 -0
- package/dist/application/transform/schema/array-type.mjs.map +1 -0
- package/dist/application/transform/schema/composition-type.cjs +142 -0
- package/dist/application/transform/schema/composition-type.cjs.map +1 -0
- package/dist/application/transform/schema/composition-type.mjs +140 -0
- package/dist/application/transform/schema/composition-type.mjs.map +1 -0
- package/dist/application/transform/schema/core-type.cjs +86 -0
- package/dist/application/transform/schema/core-type.cjs.map +1 -0
- package/dist/application/transform/schema/core-type.mjs +84 -0
- package/dist/application/transform/schema/core-type.mjs.map +1 -0
- package/dist/application/transform/schema/discriminated-union.cjs +30 -0
- package/dist/application/transform/schema/discriminated-union.cjs.map +1 -0
- package/dist/application/transform/schema/discriminated-union.mjs +27 -0
- package/dist/application/transform/schema/discriminated-union.mjs.map +1 -0
- package/dist/application/transform/schema/discriminator-property.cjs +22 -0
- package/dist/application/transform/schema/discriminator-property.cjs.map +1 -0
- package/dist/application/transform/schema/discriminator-property.mjs +20 -0
- package/dist/application/transform/schema/discriminator-property.mjs.map +1 -0
- package/dist/application/transform/schema/enum-rule.cjs +163 -0
- package/dist/application/transform/schema/enum-rule.cjs.map +1 -0
- package/dist/application/transform/schema/enum-rule.mjs +160 -0
- package/dist/application/transform/schema/enum-rule.mjs.map +1 -0
- package/dist/application/transform/schema/inherited-discriminator.cjs +29 -0
- package/dist/application/transform/schema/inherited-discriminator.cjs.map +1 -0
- package/dist/application/transform/schema/inherited-discriminator.mjs +26 -0
- package/dist/application/transform/schema/inherited-discriminator.mjs.map +1 -0
- package/dist/application/transform/schema/object-type.cjs +186 -0
- package/dist/application/transform/schema/object-type.cjs.map +1 -0
- package/dist/application/transform/schema/object-type.mjs +182 -0
- package/dist/application/transform/schema/object-type.mjs.map +1 -0
- package/dist/application/transform/schema/presence-members.cjs +59 -0
- package/dist/application/transform/schema/presence-members.cjs.map +1 -0
- package/dist/application/transform/schema/presence-members.mjs +57 -0
- package/dist/application/transform/schema/presence-members.mjs.map +1 -0
- package/dist/application/transform/schema/required-variants.cjs +45 -0
- package/dist/application/transform/schema/required-variants.cjs.map +1 -0
- package/dist/application/transform/schema/required-variants.mjs +42 -0
- package/dist/application/transform/schema/required-variants.mjs.map +1 -0
- package/dist/application/transform/schema/schema-transform.cjs +72 -0
- package/dist/application/transform/schema/schema-transform.cjs.map +1 -0
- package/dist/application/transform/schema/schema-transform.mjs +68 -0
- package/dist/application/transform/schema/schema-transform.mjs.map +1 -0
- package/dist/application/transform/schema/unevaluated-properties.cjs +61 -0
- package/dist/application/transform/schema/unevaluated-properties.cjs.map +1 -0
- package/dist/application/transform/schema/unevaluated-properties.mjs +59 -0
- package/dist/application/transform/schema/unevaluated-properties.mjs.map +1 -0
- package/dist/application/transform/schema-comment.cjs +130 -0
- package/dist/application/transform/schema-comment.cjs.map +1 -0
- package/dist/application/transform/schema-comment.mjs +125 -0
- package/dist/application/transform/schema-comment.mjs.map +1 -0
- package/dist/application/transform/shared-types.cjs +8 -0
- package/dist/application/transform/shared-types.cjs.map +1 -0
- package/dist/application/transform/shared-types.mjs +6 -0
- package/dist/application/transform/shared-types.mjs.map +1 -0
- package/dist/application/transform/type-combinators.cjs +49 -0
- package/dist/application/transform/type-combinators.cjs.map +1 -0
- package/dist/application/transform/type-combinators.mjs +42 -0
- package/dist/application/transform/type-combinators.mjs.map +1 -0
- package/dist/cli/cli-arguments.cjs +145 -0
- package/dist/cli/cli-arguments.cjs.map +1 -0
- package/dist/cli/cli-arguments.mjs +137 -0
- package/dist/cli/cli-arguments.mjs.map +1 -0
- package/dist/cli/cli-errors.cjs +81 -0
- package/dist/cli/cli-errors.cjs.map +1 -0
- package/dist/cli/cli-errors.mjs +77 -0
- package/dist/cli/cli-errors.mjs.map +1 -0
- package/dist/cli/cli-output.cjs +42 -0
- package/dist/cli/cli-output.cjs.map +1 -0
- package/dist/cli/cli-output.mjs +35 -0
- package/dist/cli/cli-output.mjs.map +1 -0
- package/dist/cli/docs-links.cjs +6 -0
- package/dist/cli/docs-links.cjs.map +1 -0
- package/dist/cli/docs-links.mjs +4 -0
- package/dist/cli/docs-links.mjs.map +1 -0
- package/dist/cli/fix-option.cjs +19 -0
- package/dist/cli/fix-option.cjs.map +1 -0
- package/dist/cli/fix-option.mjs +16 -0
- package/dist/cli/fix-option.mjs.map +1 -0
- package/dist/cli/help-text.cjs +44 -0
- package/dist/cli/help-text.cjs.map +1 -0
- package/dist/cli/help-text.mjs +42 -0
- package/dist/cli/help-text.mjs.map +1 -0
- package/dist/cli/main.cjs +67 -0
- package/dist/cli/main.cjs.map +1 -0
- package/dist/cli/main.d.cts +2 -0
- package/dist/cli/main.d.mts +2 -0
- package/dist/cli/main.d.ts +2 -0
- package/dist/cli/main.mjs +59 -0
- package/dist/cli/main.mjs.map +1 -0
- package/dist/cli/redocly-apis.cjs +69 -0
- package/dist/cli/redocly-apis.cjs.map +1 -0
- package/dist/cli/redocly-apis.mjs +66 -0
- package/dist/cli/redocly-apis.mjs.map +1 -0
- package/dist/cli/ref-limits.cjs +14 -0
- package/dist/cli/ref-limits.cjs.map +1 -0
- package/dist/cli/ref-limits.mjs +12 -0
- package/dist/cli/ref-limits.mjs.map +1 -0
- package/dist/cli/run-cli.cjs +113 -0
- package/dist/cli/run-cli.cjs.map +1 -0
- package/dist/cli/run-cli.mjs +111 -0
- package/dist/cli/run-cli.mjs.map +1 -0
- package/dist/domain/assert-never.cjs +8 -0
- package/dist/domain/assert-never.cjs.map +1 -0
- package/dist/domain/assert-never.mjs +6 -0
- package/dist/domain/assert-never.mjs.map +1 -0
- package/dist/domain/errors.cjs +52 -0
- package/dist/domain/errors.cjs.map +1 -0
- package/dist/domain/errors.mjs +48 -0
- package/dist/domain/errors.mjs.map +1 -0
- package/dist/domain/ir/constructors.cjs +93 -0
- package/dist/domain/ir/constructors.cjs.map +1 -0
- package/dist/domain/ir/constructors.mjs +74 -0
- package/dist/domain/ir/constructors.mjs.map +1 -0
- package/dist/domain/ir/identifier-text.cjs +29 -0
- package/dist/domain/ir/identifier-text.cjs.map +1 -0
- package/dist/domain/ir/identifier-text.mjs +25 -0
- package/dist/domain/ir/identifier-text.mjs.map +1 -0
- package/dist/domain/ir/newer-identifier-ranges.cjs +109 -0
- package/dist/domain/ir/newer-identifier-ranges.cjs.map +1 -0
- package/dist/domain/ir/newer-identifier-ranges.mjs +106 -0
- package/dist/domain/ir/newer-identifier-ranges.mjs.map +1 -0
- package/dist/domain/ir/normalize.cjs +32 -0
- package/dist/domain/ir/normalize.cjs.map +1 -0
- package/dist/domain/ir/normalize.mjs +29 -0
- package/dist/domain/ir/normalize.mjs.map +1 -0
- package/dist/domain/ir/property-name.cjs +19 -0
- package/dist/domain/ir/property-name.cjs.map +1 -0
- package/dist/domain/ir/property-name.mjs +16 -0
- package/dist/domain/ir/property-name.mjs.map +1 -0
- package/dist/domain/ir/raw-text-escapes.cjs +25 -0
- package/dist/domain/ir/raw-text-escapes.cjs.map +1 -0
- package/dist/domain/ir/raw-text-escapes.mjs +22 -0
- package/dist/domain/ir/raw-text-escapes.mjs.map +1 -0
- package/dist/domain/openapi/admitted-values.cjs +75 -0
- package/dist/domain/openapi/admitted-values.cjs.map +1 -0
- package/dist/domain/openapi/admitted-values.mjs +72 -0
- package/dist/domain/openapi/admitted-values.mjs.map +1 -0
- package/dist/domain/openapi/alias-expansion.cjs +50 -0
- package/dist/domain/openapi/alias-expansion.cjs.map +1 -0
- package/dist/domain/openapi/alias-expansion.mjs +45 -0
- package/dist/domain/openapi/alias-expansion.mjs.map +1 -0
- package/dist/domain/openapi/binary-content.cjs +48 -0
- package/dist/domain/openapi/binary-content.cjs.map +1 -0
- package/dist/domain/openapi/binary-content.mjs +45 -0
- package/dist/domain/openapi/binary-content.mjs.map +1 -0
- package/dist/domain/openapi/components-object.cjs +29 -0
- package/dist/domain/openapi/components-object.cjs.map +1 -0
- package/dist/domain/openapi/components-object.mjs +24 -0
- package/dist/domain/openapi/components-object.mjs.map +1 -0
- package/dist/domain/openapi/discriminated-union.cjs +68 -0
- package/dist/domain/openapi/discriminated-union.cjs.map +1 -0
- package/dist/domain/openapi/discriminated-union.mjs +62 -0
- package/dist/domain/openapi/discriminated-union.mjs.map +1 -0
- package/dist/domain/openapi/discriminator-conflicts.cjs +143 -0
- package/dist/domain/openapi/discriminator-conflicts.cjs.map +1 -0
- package/dist/domain/openapi/discriminator-conflicts.mjs +141 -0
- package/dist/domain/openapi/discriminator-conflicts.mjs.map +1 -0
- package/dist/domain/openapi/json-pointer.cjs +31 -0
- package/dist/domain/openapi/json-pointer.cjs.map +1 -0
- package/dist/domain/openapi/json-pointer.mjs +27 -0
- package/dist/domain/openapi/json-pointer.mjs.map +1 -0
- package/dist/domain/openapi/media-type-object.cjs +14 -0
- package/dist/domain/openapi/media-type-object.cjs.map +1 -0
- package/dist/domain/openapi/media-type-object.mjs +11 -0
- package/dist/domain/openapi/media-type-object.mjs.map +1 -0
- package/dist/domain/openapi/parameter-object.cjs +13 -0
- package/dist/domain/openapi/parameter-object.cjs.map +1 -0
- package/dist/domain/openapi/parameter-object.mjs +10 -0
- package/dist/domain/openapi/parameter-object.mjs.map +1 -0
- package/dist/domain/openapi/path-item-object.cjs +35 -0
- package/dist/domain/openapi/path-item-object.cjs.map +1 -0
- package/dist/domain/openapi/path-item-object.mjs +30 -0
- package/dist/domain/openapi/path-item-object.mjs.map +1 -0
- package/dist/domain/openapi/path-templates.cjs +23 -0
- package/dist/domain/openapi/path-templates.cjs.map +1 -0
- package/dist/domain/openapi/path-templates.mjs +21 -0
- package/dist/domain/openapi/path-templates.mjs.map +1 -0
- package/dist/domain/openapi/unsupported-features.cjs +87 -0
- package/dist/domain/openapi/unsupported-features.cjs.map +1 -0
- package/dist/domain/openapi/unsupported-features.mjs +84 -0
- package/dist/domain/openapi/unsupported-features.mjs.map +1 -0
- package/dist/domain/output-fixes.cjs +101 -0
- package/dist/domain/output-fixes.cjs.map +1 -0
- package/dist/domain/output-fixes.mjs +94 -0
- package/dist/domain/output-fixes.mjs.map +1 -0
- package/dist/domain/warnings.cjs +15 -0
- package/dist/domain/warnings.cjs.map +1 -0
- package/dist/domain/warnings.mjs +12 -0
- package/dist/domain/warnings.mjs.map +1 -0
- package/dist/index.cjs +98 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +841 -0
- package/dist/index.d.mts +841 -0
- package/dist/index.d.ts +841 -0
- package/dist/index.mjs +27 -0
- package/dist/index.mjs.map +1 -0
- package/dist/transform/components-object.cjs +15 -0
- package/dist/transform/components-object.cjs.map +1 -0
- package/dist/transform/components-object.mjs +11 -0
- package/dist/transform/components-object.mjs.map +1 -0
- package/dist/transform/header-object.cjs +12 -0
- package/dist/transform/header-object.cjs.map +1 -0
- package/dist/transform/header-object.mjs +10 -0
- package/dist/transform/header-object.mjs.map +1 -0
- package/dist/transform/media-type-object.cjs +12 -0
- package/dist/transform/media-type-object.cjs.map +1 -0
- package/dist/transform/media-type-object.mjs +10 -0
- package/dist/transform/media-type-object.mjs.map +1 -0
- package/dist/transform/operation-object.cjs +26 -0
- package/dist/transform/operation-object.cjs.map +1 -0
- package/dist/transform/operation-object.mjs +21 -0
- package/dist/transform/operation-object.mjs.map +1 -0
- package/dist/transform/parameter-object.cjs +12 -0
- package/dist/transform/parameter-object.cjs.map +1 -0
- package/dist/transform/parameter-object.mjs +10 -0
- package/dist/transform/parameter-object.mjs.map +1 -0
- package/dist/transform/path-item-object.cjs +12 -0
- package/dist/transform/path-item-object.cjs.map +1 -0
- package/dist/transform/path-item-object.mjs +10 -0
- package/dist/transform/path-item-object.mjs.map +1 -0
- package/dist/transform/paths-object.cjs +11 -0
- package/dist/transform/paths-object.cjs.map +1 -0
- package/dist/transform/paths-object.mjs +9 -0
- package/dist/transform/paths-object.mjs.map +1 -0
- package/dist/transform/request-body-object.cjs +12 -0
- package/dist/transform/request-body-object.cjs.map +1 -0
- package/dist/transform/request-body-object.mjs +10 -0
- package/dist/transform/request-body-object.mjs.map +1 -0
- package/dist/transform/response-object.cjs +12 -0
- package/dist/transform/response-object.cjs.map +1 -0
- package/dist/transform/response-object.mjs +10 -0
- package/dist/transform/response-object.mjs.map +1 -0
- package/dist/transform/responses-object.cjs +12 -0
- package/dist/transform/responses-object.cjs.map +1 -0
- package/dist/transform/responses-object.mjs +10 -0
- package/dist/transform/responses-object.mjs.map +1 -0
- package/dist/transform/schema-object.cjs +21 -0
- package/dist/transform/schema-object.cjs.map +1 -0
- package/dist/transform/schema-object.mjs +16 -0
- package/dist/transform/schema-object.mjs.map +1 -0
- package/package.json +115 -4
- package/src/adapters/node-file-system/node-file-system.ts +44 -0
- package/src/adapters/redocly-loader/alias-limit.ts +20 -0
- package/src/adapters/redocly-loader/allowed-hosts.ts +62 -0
- package/src/adapters/redocly-loader/bundled-ref-repair.ts +65 -0
- package/src/adapters/redocly-loader/malformed-refs.ts +61 -0
- package/src/adapters/redocly-loader/redocly-config-source.ts +78 -0
- package/src/adapters/redocly-loader/redocly-schema-loader.ts +262 -0
- package/src/adapters/redocly-loader/ref-access.ts +146 -0
- package/src/adapters/redocly-loader/ref-holders.ts +43 -0
- package/src/adapters/redocly-loader/remote-fetch.ts +104 -0
- package/src/adapters/redocly-loader/schema-load-errors.ts +124 -0
- package/src/adapters/redocly-loader/schema-source.ts +151 -0
- package/src/adapters/redocly-loader/unsupported-keys.ts +102 -0
- package/src/adapters/terminal-logger/terminal-logger.ts +98 -0
- package/src/adapters/type-ast-bridge/footer-nodes.ts +38 -0
- package/src/adapters/type-ast-bridge/ir-declarations-to-typescript.ts +100 -0
- package/src/adapters/type-ast-bridge/ir-to-typescript.ts +223 -0
- package/src/adapters/type-ast-bridge/lazy-node.ts +24 -0
- package/src/adapters/type-ast-bridge/load-typescript.ts +84 -0
- package/src/adapters/type-ast-bridge/print-typescript.ts +33 -0
- package/src/adapters/type-ast-bridge/typescript-raw-text.ts +49 -0
- package/src/adapters/type-ast-bridge/typescript-to-ir.ts +294 -0
- package/src/adapters/type-ast-bridge/typescript-types.ts +8 -0
- package/src/api/ast-to-string.ts +59 -0
- package/src/api/comment-header.ts +7 -0
- package/src/api/default-ports.ts +44 -0
- package/src/api/discriminator-conflict-warnings.ts +43 -0
- package/src/api/discriminator-enum-names.ts +26 -0
- package/src/api/discriminator-enum-parent.ts +129 -0
- package/src/api/discriminator-enum.ts +115 -0
- package/src/api/discriminator-other-owners.ts +97 -0
- package/src/api/discriminator-patch.ts +147 -0
- package/src/api/discriminator-scan.ts +260 -0
- package/src/api/document-declarations.ts +41 -0
- package/src/api/document-refs.ts +71 -0
- package/src/api/document-run.ts +177 -0
- package/src/api/enum-values-warnings.ts +21 -0
- package/src/api/footer-entry.ts +23 -0
- package/src/api/footer-sink.ts +67 -0
- package/src/api/legacy-callback-warning.ts +29 -0
- package/src/api/legacy-ts-helpers.ts +311 -0
- package/src/api/legacy-utils.ts +118 -0
- package/src/api/openapi-ts.ts +62 -0
- package/src/api/path-template-warnings.ts +27 -0
- package/src/api/schema-callbacks.ts +211 -0
- package/src/api/string-to-ast.ts +27 -0
- package/src/api/transform-context.ts +93 -0
- package/src/api/transform-schema.ts +123 -0
- package/src/api/type-helpers.ts +130 -0
- package/src/api/unsupported-feature-warnings.ts +33 -0
- package/src/application/ports/file-system.ts +12 -0
- package/src/application/ports/logger.ts +16 -0
- package/src/application/ports/redocly-config-source.ts +20 -0
- package/src/application/ports/schema-loader.ts +32 -0
- package/src/application/print/comment-writer.ts +91 -0
- package/src/application/print/declaration-printer.ts +100 -0
- package/src/application/print/literal-text.ts +62 -0
- package/src/application/print/print-nodes.ts +62 -0
- package/src/application/print/print-options.ts +11 -0
- package/src/application/print/text-writer.ts +83 -0
- package/src/application/print/type-printer.ts +287 -0
- package/src/application/stack-overflow.ts +54 -0
- package/src/application/transform/document/assignability.ts +203 -0
- package/src/application/transform/document/components.ts +189 -0
- package/src/application/transform/document/declared-types.ts +93 -0
- package/src/application/transform/document/defs-root.ts +25 -0
- package/src/application/transform/document/document-member.ts +20 -0
- package/src/application/transform/document/document.ts +215 -0
- package/src/application/transform/document/exploded-query.ts +91 -0
- package/src/application/transform/document/global-type-references.ts +78 -0
- package/src/application/transform/document/header.ts +34 -0
- package/src/application/transform/document/kept-deprecated.ts +135 -0
- package/src/application/transform/document/list-assignability.ts +87 -0
- package/src/application/transform/document/media-type.ts +78 -0
- package/src/application/transform/document/operation.ts +64 -0
- package/src/application/transform/document/parameter.ts +45 -0
- package/src/application/transform/document/parameters.ts +265 -0
- package/src/application/transform/document/path-item.ts +168 -0
- package/src/application/transform/document/path-key-overlaps.ts +201 -0
- package/src/application/transform/document/path-template-replace.ts +90 -0
- package/src/application/transform/document/paths-enum.ts +127 -0
- package/src/application/transform/document/paths.ts +273 -0
- package/src/application/transform/document/request-body.ts +50 -0
- package/src/application/transform/document/response.ts +109 -0
- package/src/application/transform/document/responses.ts +29 -0
- package/src/application/transform/document/root-type-aliases.ts +107 -0
- package/src/application/transform/document/template-key-match.ts +183 -0
- package/src/application/transform/document/type-assignability.ts +268 -0
- package/src/application/transform/document/type-key.ts +80 -0
- package/src/application/transform/document/type-resolution.ts +163 -0
- package/src/application/transform/document/webhooks.ts +22 -0
- package/src/application/transform/document-entries.ts +28 -0
- package/src/application/transform/footer/document-footer.ts +212 -0
- package/src/application/transform/footer/enum-naming.ts +210 -0
- package/src/application/transform/footer/enum-values-check.ts +171 -0
- package/src/application/transform/footer/evaluation.ts +47 -0
- package/src/application/transform/footer/shared-enum-names.ts +86 -0
- package/src/application/transform/footer/type-evaluation.ts +294 -0
- package/src/application/transform/footer/type-rules.ts +269 -0
- package/src/application/transform/helper-types.ts +92 -0
- package/src/application/transform/literal-type.ts +54 -0
- package/src/application/transform/numbered-names.ts +20 -0
- package/src/application/transform/ref-pointer/generated-location.ts +211 -0
- package/src/application/transform/ref-pointer/generated-shape.ts +275 -0
- package/src/application/transform/ref-pointer/inline-cycles.ts +56 -0
- package/src/application/transform/ref-pointer/original-index.ts +95 -0
- package/src/application/transform/ref-pointer/pointer-type.ts +92 -0
- package/src/application/transform/ref-pointer/pointer-walk.ts +96 -0
- package/src/application/transform/ref-pointer/typed-walk.ts +192 -0
- package/src/application/transform/ref-type.ts +102 -0
- package/src/application/transform/schema/access-flags.ts +63 -0
- package/src/application/transform/schema/array-type.ts +213 -0
- package/src/application/transform/schema/composition-type.ts +255 -0
- package/src/application/transform/schema/core-type.ts +119 -0
- package/src/application/transform/schema/discriminated-union.ts +58 -0
- package/src/application/transform/schema/discriminator-property.ts +33 -0
- package/src/application/transform/schema/enum-rule.ts +280 -0
- package/src/application/transform/schema/inherited-discriminator.ts +54 -0
- package/src/application/transform/schema/object-type.ts +289 -0
- package/src/application/transform/schema/presence-members.ts +96 -0
- package/src/application/transform/schema/required-variants.ts +88 -0
- package/src/application/transform/schema/schema-context.ts +136 -0
- package/src/application/transform/schema/schema-rule.ts +29 -0
- package/src/application/transform/schema/schema-transform.ts +99 -0
- package/src/application/transform/schema/unevaluated-properties.ts +105 -0
- package/src/application/transform/schema-comment.ts +196 -0
- package/src/application/transform/shared-types.ts +9 -0
- package/src/application/transform/transform-context.ts +51 -0
- package/src/application/transform/type-combinators.ts +57 -0
- package/src/cli/cli-arguments.ts +208 -0
- package/src/cli/cli-dependencies.ts +47 -0
- package/src/cli/cli-errors.ts +127 -0
- package/src/cli/cli-output.ts +67 -0
- package/src/cli/docs-links.ts +6 -0
- package/src/cli/fix-option.ts +29 -0
- package/src/cli/help-text.ts +52 -0
- package/src/cli/main.ts +73 -0
- package/src/cli/redocly-apis.ts +95 -0
- package/src/cli/ref-limits.ts +16 -0
- package/src/cli/run-cli.ts +131 -0
- package/src/domain/assert-never.ts +8 -0
- package/src/domain/errors.ts +76 -0
- package/src/domain/ir/constructors.ts +142 -0
- package/src/domain/ir/identifier-text.ts +49 -0
- package/src/domain/ir/newer-identifier-ranges.ts +109 -0
- package/src/domain/ir/nodes.ts +225 -0
- package/src/domain/ir/normalize.ts +51 -0
- package/src/domain/ir/property-name.ts +28 -0
- package/src/domain/ir/raw-text-escapes.ts +37 -0
- package/src/domain/openapi/admitted-values.ts +113 -0
- package/src/domain/openapi/alias-expansion.ts +72 -0
- package/src/domain/openapi/binary-content.ts +74 -0
- package/src/domain/openapi/components-object.ts +52 -0
- package/src/domain/openapi/discriminated-union.ts +109 -0
- package/src/domain/openapi/discriminator-conflicts.ts +251 -0
- package/src/domain/openapi/document-object.ts +12 -0
- package/src/domain/openapi/header-object.ts +9 -0
- package/src/domain/openapi/json-pointer.ts +46 -0
- package/src/domain/openapi/media-type-object.ts +26 -0
- package/src/domain/openapi/operation-object.ts +13 -0
- package/src/domain/openapi/parameter-object.ts +34 -0
- package/src/domain/openapi/path-item-object.ts +70 -0
- package/src/domain/openapi/path-templates.ts +31 -0
- package/src/domain/openapi/request-body-object.ts +7 -0
- package/src/domain/openapi/response-object.ts +14 -0
- package/src/domain/openapi/schema-object.ts +61 -0
- package/src/domain/openapi/unsupported-features.ts +139 -0
- package/src/domain/output-fixes.ts +136 -0
- package/src/domain/warnings.ts +20 -0
- package/src/index.ts +67 -0
- package/src/transform/components-object.ts +27 -0
- package/src/transform/header-object.ts +19 -0
- package/src/transform/media-type-object.ts +19 -0
- package/src/transform/operation-object.ts +36 -0
- package/src/transform/parameter-object.ts +19 -0
- package/src/transform/parameters-array.ts +19 -0
- package/src/transform/path-item-object.ts +22 -0
- package/src/transform/paths-enum.ts +8 -0
- package/src/transform/paths-object.ts +15 -0
- package/src/transform/request-body-object.ts +19 -0
- package/src/transform/response-object.ts +19 -0
- package/src/transform/responses-object.ts +19 -0
- package/src/transform/schema-object.ts +36 -0
- package/src/transform/webhooks-object.ts +15 -0
- package/src/types/generator-options.ts +278 -0
- package/src/types/openapi-common.ts +100 -0
- package/src/types/openapi-document.ts +196 -0
- package/src/types/openapi-path-item.ts +130 -0
- package/src/types/openapi-request.ts +209 -0
- package/src/types/openapi-response.ts +81 -0
- package/src/types/openapi-schema.ts +169 -0
- package/src/types/openapi-security.ts +116 -0
- package/src/types.ts +12 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform-context.cjs","sources":["../../src/api/transform-context.ts"],"sourcesContent":["import * as changeCase from \"change-case\";\nimport { RunFooter } from \"../application/transform/footer/document-footer.js\";\nimport type {\n DiscriminatorEnumParent,\n SchemaLocation,\n} from \"../application/transform/schema/schema-context.js\";\nimport type {\n DocumentFooter,\n NameCasing,\n TransformContext,\n TransformDiagnostics,\n TransformOptions,\n} from \"../application/transform/transform-context.js\";\nimport type { GlobalContext, TransformNodeOptions } from \"../types.js\";\nimport { defaultLogger, monotonicNow } from \"./default-ports.js\";\nimport { ContextFooterSink } from \"./footer-sink.js\";\nimport { schemaCallbacks } from \"./schema-callbacks.js\";\n\n/**\n * Builds the ported transformers' context from the original `GlobalContext`: options, refs,\n * discriminators, the run footer and the user callbacks (see `schema-callbacks.ts`).\n */\n\nfunction transformOptions(ctx: GlobalContext): TransformOptions {\n return {\n additionalProperties: ctx.additionalProperties,\n alphabetize: ctx.alphabetize,\n arrayLength: ctx.arrayLength,\n binaryAsBlob: ctx.binaryAsBlob,\n conditionalEnums: ctx.conditionalEnums,\n dedupeEnums: ctx.dedupeEnums,\n defaultNonNullable: ctx.defaultNonNullable,\n emptyObjectsUnknown: ctx.emptyObjectsUnknown,\n enum: ctx.enum,\n enumValues: ctx.enumValues,\n excludeDeprecated: ctx.excludeDeprecated,\n fixes: new Set(ctx.fix ?? []),\n immutable: ctx.immutable,\n propertiesRequiredByDefault: ctx.propertiesRequiredByDefault,\n readWriteMarkers: ctx.readWriteMarkers,\n generatePathParams: ctx.generatePathParams,\n pathParamsAsTypes: ctx.pathParamsAsTypes,\n rootTypes: ctx.rootTypes,\n rootTypesNoSchemaPrefix: ctx.rootTypesNoSchemaPrefix,\n rootTypesKeepCasing: ctx.rootTypesKeepCasing,\n exportType: ctx.exportType,\n inject: ctx.inject,\n makePathsEnum: ctx.makePathsEnum,\n };\n}\n\n/** One footer per run: it holds the enum registry, so it lives on the run's context. */\nfunction runFooter(ctx: GlobalContext): DocumentFooter {\n ctx.runFooter ??= new RunFooter(new ContextFooterSink(ctx.injectFooter), ctx.dedupeEnums);\n return ctx.runFooter;\n}\n\nconst CASING: NameCasing = { pascalCase: (text) => changeCase.pascalCase(text) };\n\n/**\n * A monotonic clock and the run's logger (the default one for a user's own context), \"ts\" group.\n */\nfunction diagnostics(ctx: GlobalContext): TransformDiagnostics {\n const logger = ctx.logger ?? defaultLogger(ctx.silent);\n return {\n now: monotonicNow,\n debug: (message, durationMs) => logger.debug(message, \"ts\", durationMs),\n };\n}\n\n/** The ported transformers' context for one call from a legacy transformer. */\nexport function createTransformContext(ctx: GlobalContext): TransformContext {\n return {\n options: transformOptions(ctx),\n refs: { resolve: (ref) => ctx.resolve(ref) },\n discriminators: {\n objectAt: (ref) => ctx.discriminators.objects[ref],\n isHandled: (ref) => ctx.discriminators.refsHandled.includes(ref),\n otherPropertiesAt: (ref) => ctx.discriminators.otherProperties?.[ref] ?? [],\n enumParentOf: (schema) =>\n ctx.discriminators.enumParents?.get(schema) as DiscriminatorEnumParent | undefined,\n },\n footer: runFooter(ctx),\n callbacks: schemaCallbacks(ctx),\n diagnostics: diagnostics(ctx),\n casing: CASING,\n };\n}\n\n/** The transformer's location for the original options object. */\nexport function schemaLocation(options: TransformNodeOptions): SchemaLocation {\n return { path: options.path, schema: options.schema };\n}\n"],"names":["RunFooter","ContextFooterSink","changeCase","defaultLogger","monotonicNow","schemaCallbacks"],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import * as changeCase from 'change-case';
|
|
2
|
+
import { RunFooter } from '../application/transform/footer/document-footer.mjs';
|
|
3
|
+
import { defaultLogger, monotonicNow } from './default-ports.mjs';
|
|
4
|
+
import { ContextFooterSink } from './footer-sink.mjs';
|
|
5
|
+
import { schemaCallbacks } from './schema-callbacks.mjs';
|
|
6
|
+
|
|
7
|
+
function transformOptions(ctx) {
|
|
8
|
+
return {
|
|
9
|
+
additionalProperties: ctx.additionalProperties,
|
|
10
|
+
alphabetize: ctx.alphabetize,
|
|
11
|
+
arrayLength: ctx.arrayLength,
|
|
12
|
+
binaryAsBlob: ctx.binaryAsBlob,
|
|
13
|
+
conditionalEnums: ctx.conditionalEnums,
|
|
14
|
+
dedupeEnums: ctx.dedupeEnums,
|
|
15
|
+
defaultNonNullable: ctx.defaultNonNullable,
|
|
16
|
+
emptyObjectsUnknown: ctx.emptyObjectsUnknown,
|
|
17
|
+
enum: ctx.enum,
|
|
18
|
+
enumValues: ctx.enumValues,
|
|
19
|
+
excludeDeprecated: ctx.excludeDeprecated,
|
|
20
|
+
fixes: new Set(ctx.fix ?? []),
|
|
21
|
+
immutable: ctx.immutable,
|
|
22
|
+
propertiesRequiredByDefault: ctx.propertiesRequiredByDefault,
|
|
23
|
+
readWriteMarkers: ctx.readWriteMarkers,
|
|
24
|
+
generatePathParams: ctx.generatePathParams,
|
|
25
|
+
pathParamsAsTypes: ctx.pathParamsAsTypes,
|
|
26
|
+
rootTypes: ctx.rootTypes,
|
|
27
|
+
rootTypesNoSchemaPrefix: ctx.rootTypesNoSchemaPrefix,
|
|
28
|
+
rootTypesKeepCasing: ctx.rootTypesKeepCasing,
|
|
29
|
+
exportType: ctx.exportType,
|
|
30
|
+
inject: ctx.inject,
|
|
31
|
+
makePathsEnum: ctx.makePathsEnum
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
function runFooter(ctx) {
|
|
35
|
+
ctx.runFooter ??= new RunFooter(new ContextFooterSink(ctx.injectFooter), ctx.dedupeEnums);
|
|
36
|
+
return ctx.runFooter;
|
|
37
|
+
}
|
|
38
|
+
const CASING = { pascalCase: (text) => changeCase.pascalCase(text) };
|
|
39
|
+
function diagnostics(ctx) {
|
|
40
|
+
const logger = ctx.logger ?? defaultLogger(ctx.silent);
|
|
41
|
+
return {
|
|
42
|
+
now: monotonicNow,
|
|
43
|
+
debug: (message, durationMs) => logger.debug(message, "ts", durationMs)
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
function createTransformContext(ctx) {
|
|
47
|
+
return {
|
|
48
|
+
options: transformOptions(ctx),
|
|
49
|
+
refs: { resolve: (ref) => ctx.resolve(ref) },
|
|
50
|
+
discriminators: {
|
|
51
|
+
objectAt: (ref) => ctx.discriminators.objects[ref],
|
|
52
|
+
isHandled: (ref) => ctx.discriminators.refsHandled.includes(ref),
|
|
53
|
+
otherPropertiesAt: (ref) => ctx.discriminators.otherProperties?.[ref] ?? [],
|
|
54
|
+
enumParentOf: (schema) => ctx.discriminators.enumParents?.get(schema)
|
|
55
|
+
},
|
|
56
|
+
footer: runFooter(ctx),
|
|
57
|
+
callbacks: schemaCallbacks(ctx),
|
|
58
|
+
diagnostics: diagnostics(ctx),
|
|
59
|
+
casing: CASING
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
function schemaLocation(options) {
|
|
63
|
+
return { path: options.path, schema: options.schema };
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export { createTransformContext, schemaLocation };
|
|
67
|
+
//# sourceMappingURL=transform-context.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform-context.mjs","sources":["../../src/api/transform-context.ts"],"sourcesContent":["import * as changeCase from \"change-case\";\nimport { RunFooter } from \"../application/transform/footer/document-footer.js\";\nimport type {\n DiscriminatorEnumParent,\n SchemaLocation,\n} from \"../application/transform/schema/schema-context.js\";\nimport type {\n DocumentFooter,\n NameCasing,\n TransformContext,\n TransformDiagnostics,\n TransformOptions,\n} from \"../application/transform/transform-context.js\";\nimport type { GlobalContext, TransformNodeOptions } from \"../types.js\";\nimport { defaultLogger, monotonicNow } from \"./default-ports.js\";\nimport { ContextFooterSink } from \"./footer-sink.js\";\nimport { schemaCallbacks } from \"./schema-callbacks.js\";\n\n/**\n * Builds the ported transformers' context from the original `GlobalContext`: options, refs,\n * discriminators, the run footer and the user callbacks (see `schema-callbacks.ts`).\n */\n\nfunction transformOptions(ctx: GlobalContext): TransformOptions {\n return {\n additionalProperties: ctx.additionalProperties,\n alphabetize: ctx.alphabetize,\n arrayLength: ctx.arrayLength,\n binaryAsBlob: ctx.binaryAsBlob,\n conditionalEnums: ctx.conditionalEnums,\n dedupeEnums: ctx.dedupeEnums,\n defaultNonNullable: ctx.defaultNonNullable,\n emptyObjectsUnknown: ctx.emptyObjectsUnknown,\n enum: ctx.enum,\n enumValues: ctx.enumValues,\n excludeDeprecated: ctx.excludeDeprecated,\n fixes: new Set(ctx.fix ?? []),\n immutable: ctx.immutable,\n propertiesRequiredByDefault: ctx.propertiesRequiredByDefault,\n readWriteMarkers: ctx.readWriteMarkers,\n generatePathParams: ctx.generatePathParams,\n pathParamsAsTypes: ctx.pathParamsAsTypes,\n rootTypes: ctx.rootTypes,\n rootTypesNoSchemaPrefix: ctx.rootTypesNoSchemaPrefix,\n rootTypesKeepCasing: ctx.rootTypesKeepCasing,\n exportType: ctx.exportType,\n inject: ctx.inject,\n makePathsEnum: ctx.makePathsEnum,\n };\n}\n\n/** One footer per run: it holds the enum registry, so it lives on the run's context. */\nfunction runFooter(ctx: GlobalContext): DocumentFooter {\n ctx.runFooter ??= new RunFooter(new ContextFooterSink(ctx.injectFooter), ctx.dedupeEnums);\n return ctx.runFooter;\n}\n\nconst CASING: NameCasing = { pascalCase: (text) => changeCase.pascalCase(text) };\n\n/**\n * A monotonic clock and the run's logger (the default one for a user's own context), \"ts\" group.\n */\nfunction diagnostics(ctx: GlobalContext): TransformDiagnostics {\n const logger = ctx.logger ?? defaultLogger(ctx.silent);\n return {\n now: monotonicNow,\n debug: (message, durationMs) => logger.debug(message, \"ts\", durationMs),\n };\n}\n\n/** The ported transformers' context for one call from a legacy transformer. */\nexport function createTransformContext(ctx: GlobalContext): TransformContext {\n return {\n options: transformOptions(ctx),\n refs: { resolve: (ref) => ctx.resolve(ref) },\n discriminators: {\n objectAt: (ref) => ctx.discriminators.objects[ref],\n isHandled: (ref) => ctx.discriminators.refsHandled.includes(ref),\n otherPropertiesAt: (ref) => ctx.discriminators.otherProperties?.[ref] ?? [],\n enumParentOf: (schema) =>\n ctx.discriminators.enumParents?.get(schema) as DiscriminatorEnumParent | undefined,\n },\n footer: runFooter(ctx),\n callbacks: schemaCallbacks(ctx),\n diagnostics: diagnostics(ctx),\n casing: CASING,\n };\n}\n\n/** The transformer's location for the original options object. */\nexport function schemaLocation(options: TransformNodeOptions): SchemaLocation {\n return { path: options.path, schema: options.schema };\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
const document = require('../application/transform/document/document.cjs');
|
|
6
|
+
const rootTypeAliases = require('../application/transform/document/root-type-aliases.cjs');
|
|
7
|
+
const documentFooter = require('../application/transform/footer/document-footer.cjs');
|
|
8
|
+
const enumValuesCheck = require('../application/transform/footer/enum-values-check.cjs');
|
|
9
|
+
const sharedEnumNames = require('../application/transform/footer/shared-enum-names.cjs');
|
|
10
|
+
const outputFixes = require('../domain/output-fixes.cjs');
|
|
11
|
+
const discriminatorEnumNames = require('./discriminator-enum-names.cjs');
|
|
12
|
+
const documentDeclarations = require('./document-declarations.cjs');
|
|
13
|
+
const enumValuesWarnings = require('./enum-values-warnings.cjs');
|
|
14
|
+
const footerEntry = require('./footer-entry.cjs');
|
|
15
|
+
const footerSink = require('./footer-sink.cjs');
|
|
16
|
+
const transformContext = require('./transform-context.cjs');
|
|
17
|
+
|
|
18
|
+
const OPERATIONS_NAME = "operations";
|
|
19
|
+
function isOperations(entry) {
|
|
20
|
+
const name = footerEntry.isIrDeclaration(entry) ? entry.name : entry.name?.escapedText;
|
|
21
|
+
return name === OPERATIONS_NAME;
|
|
22
|
+
}
|
|
23
|
+
const dropMessage = () => void 0;
|
|
24
|
+
const DROPPED_MESSAGES = { debug: dropMessage, warn: dropMessage, error: dropMessage };
|
|
25
|
+
function sharedEnumNamesOf(document$1, ctx, recorder) {
|
|
26
|
+
const injectFooter = [];
|
|
27
|
+
const scratch = {
|
|
28
|
+
...ctx,
|
|
29
|
+
injectFooter,
|
|
30
|
+
runFooter: new documentFooter.RunFooter(new footerSink.ContextFooterSink(injectFooter), true, recorder),
|
|
31
|
+
logger: DROPPED_MESSAGES,
|
|
32
|
+
legacyCallbackWarnings: /* @__PURE__ */ new Set()
|
|
33
|
+
};
|
|
34
|
+
const scratchContext = transformContext.createTransformContext(scratch);
|
|
35
|
+
document.documentBody(document$1, scratchContext, () => injectFooter.filter(footerEntry.isIrDeclaration));
|
|
36
|
+
return recorder.chosenNames();
|
|
37
|
+
}
|
|
38
|
+
function enumNameRecorderOf(ctx) {
|
|
39
|
+
if (ctx.fix?.includes(outputFixes.OutputFix.DEDUPE_ENUM_NAMES)) {
|
|
40
|
+
return new sharedEnumNames.SharedEnumNameRecorder();
|
|
41
|
+
}
|
|
42
|
+
return ctx.fix?.includes(outputFixes.OutputFix.DISCRIMINATOR_VALUES) ? new discriminatorEnumNames.FirstSchemaNameRecorder() : null;
|
|
43
|
+
}
|
|
44
|
+
function withSharedEnumNames(document, ctx) {
|
|
45
|
+
const recorder = ctx.runFooter === void 0 ? enumNameRecorderOf(ctx) : null;
|
|
46
|
+
if (recorder === null || !ctx.enum || !ctx.dedupeEnums) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const names = sharedEnumNamesOf(document, ctx, recorder);
|
|
50
|
+
ctx.runFooter = new documentFooter.RunFooter(new footerSink.ContextFooterSink(ctx.injectFooter), true, names);
|
|
51
|
+
}
|
|
52
|
+
function enumValuesChecked(body, footer, ctx) {
|
|
53
|
+
if (!ctx.enumValues) {
|
|
54
|
+
return footer;
|
|
55
|
+
}
|
|
56
|
+
const checked = enumValuesCheck.checkedEnumValues(footer, body, footerEntry.isIrDeclaration);
|
|
57
|
+
for (const retype of checked.retyped) {
|
|
58
|
+
if (retype.kind === "excluded") {
|
|
59
|
+
ctx.logger?.warn(enumValuesWarnings.excludedValuesWarning(retype.name, retype.excluded));
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return checked.footer;
|
|
63
|
+
}
|
|
64
|
+
function transformDocument(schema, ctx) {
|
|
65
|
+
const document$1 = schema;
|
|
66
|
+
withSharedEnumNames(document$1, ctx);
|
|
67
|
+
const context = transformContext.createTransformContext(ctx);
|
|
68
|
+
const rawBody = document.documentBody(document$1, context, () => ctx.injectFooter.filter(footerEntry.isIrDeclaration));
|
|
69
|
+
const footer = enumValuesChecked(rawBody, [...ctx.injectFooter], ctx);
|
|
70
|
+
const closing = document.documentClosing(document$1, context, footer.some(isOperations));
|
|
71
|
+
const body = rootTypeAliases.renameTakenAliases(rawBody, footer.filter(footerEntry.isIrDeclaration), closing);
|
|
72
|
+
return { body, footer, closing };
|
|
73
|
+
}
|
|
74
|
+
function transformSchema(schema, ctx) {
|
|
75
|
+
return documentDeclarations.documentDeclarations(transformDocument(schema, ctx));
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
exports.default = transformSchema;
|
|
79
|
+
exports.transformDocument = transformDocument;
|
|
80
|
+
//# sourceMappingURL=transform-schema.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform-schema.cjs","sources":["../../src/api/transform-schema.ts"],"sourcesContent":["import type { ts } from \"../adapters/type-ast-bridge/typescript-types.js\";\nimport { documentBody, documentClosing } from \"../application/transform/document/document.js\";\nimport { renameTakenAliases } from \"../application/transform/document/root-type-aliases.js\";\nimport { RunFooter } from \"../application/transform/footer/document-footer.js\";\nimport { checkedEnumValues } from \"../application/transform/footer/enum-values-check.js\";\nimport {\n SharedEnumNameRecorder,\n type SharedEnumNames,\n} from \"../application/transform/footer/shared-enum-names.js\";\nimport type { IrDeclaration } from \"../domain/ir/nodes.js\";\nimport type { DocumentObject } from \"../domain/openapi/document-object.js\";\nimport { OutputFix } from \"../domain/output-fixes.js\";\nimport type { GlobalContext, OpenAPI3 } from \"../types.js\";\nimport { FirstSchemaNameRecorder } from \"./discriminator-enum-names.js\";\nimport { documentDeclarations, type TransformedDocument } from \"./document-declarations.js\";\nimport { excludedValuesWarning } from \"./enum-values-warnings.js\";\nimport { type FooterEntry, isIrDeclaration } from \"./footer-entry.js\";\nimport { ContextFooterSink } from \"./footer-sink.js\";\nimport { createTransformContext } from \"./transform-context.js\";\n\nconst OPERATIONS_NAME = \"operations\";\n\n/** Whether a footer entry is named `operations` (any declaration kind, as in the original). */\nfunction isOperations(entry: FooterEntry): boolean {\n const name = isIrDeclaration(entry)\n ? (entry as { name?: string }).name\n : (entry as Partial<ts.InterfaceDeclaration>).name?.escapedText;\n return name === OPERATIONS_NAME;\n}\n\n/** Drops a message: the first pass must not repeat the run's warnings or debug lines. */\nconst dropMessage = (): void => undefined;\nconst DROPPED_MESSAGES = { debug: dropMessage, warn: dropMessage, error: dropMessage };\n\n/** A shared enum name recorder of a first pass, and the names it gives the second. */\ninterface EnumNameRecorder extends SharedEnumNames {\n chosenNames(): SharedEnumNames;\n}\n\n/**\n * The names of shared enums, known only at the end: a first pass transforms the document into a\n * scratch footer that `recorder` watches; its output is dropped. User callbacks run in both\n * passes. The `dedupe-enum-names` fix (ADR-021, upstream #1683) names an enum by all of its\n * schemas; `discriminator-values` keeps the first declaring schema's name\n * (`FirstSchemaNameRecorder`).\n */\nfunction sharedEnumNamesOf(\n document: DocumentObject,\n ctx: GlobalContext,\n recorder: EnumNameRecorder,\n): SharedEnumNames {\n const injectFooter: FooterEntry[] = [];\n const scratch: GlobalContext = {\n ...ctx,\n injectFooter,\n runFooter: new RunFooter(new ContextFooterSink(injectFooter), true, recorder),\n logger: DROPPED_MESSAGES,\n legacyCallbackWarnings: new Set(),\n };\n const scratchContext = createTransformContext(scratch);\n documentBody(document, scratchContext, () => injectFooter.filter(isIrDeclaration));\n return recorder.chosenNames();\n}\n\n/** The recorder of the run's fixes, or null where the first schema's name needs no first pass. */\nfunction enumNameRecorderOf(ctx: GlobalContext): EnumNameRecorder | null {\n if (ctx.fix?.includes(OutputFix.DEDUPE_ENUM_NAMES)) {\n return new SharedEnumNameRecorder();\n }\n return ctx.fix?.includes(OutputFix.DISCRIMINATOR_VALUES) ? new FirstSchemaNameRecorder() : null;\n}\n\n/** With a naming fix, `--enum` and `--dedupe-enums`, the run's footer names shared enums. */\nfunction withSharedEnumNames(document: DocumentObject, ctx: GlobalContext): void {\n const recorder = ctx.runFooter === undefined ? enumNameRecorderOf(ctx) : null;\n if (recorder === null || !ctx.enum || !ctx.dedupeEnums) {\n return;\n }\n const names = sharedEnumNamesOf(document, ctx, recorder);\n ctx.runFooter = new RunFooter(new ContextFooterSink(ctx.injectFooter), true, names);\n}\n\n/**\n * With `--enum-values`, arrays whose location type does not hold their values are typed by their\n * values (ADR-027); a location that excludes listed values is a contradiction of the document.\n */\nfunction enumValuesChecked(\n body: readonly IrDeclaration[],\n footer: FooterEntry[],\n ctx: GlobalContext,\n): FooterEntry[] {\n if (!ctx.enumValues) {\n return footer;\n }\n const checked = checkedEnumValues(footer, body, isIrDeclaration);\n for (const retype of checked.retyped) {\n if (retype.kind === \"excluded\") {\n ctx.logger?.warn(excludedValuesWarning(retype.name, retype.excluded));\n }\n }\n return checked.footer;\n}\n\n/** @internal Root types, the footer, then the closing declarations (Phase 5, step 6). */\nexport function transformDocument(schema: OpenAPI3, ctx: GlobalContext): TransformedDocument {\n const document = schema as DocumentObject;\n withSharedEnumNames(document, ctx);\n const context = createTransformContext(ctx);\n // documentBody registers the enums in the footer, so the footer is read after it.\n const rawBody = documentBody(document, context, () => ctx.injectFooter.filter(isIrDeclaration));\n const footer = enumValuesChecked(rawBody, [...ctx.injectFooter], ctx);\n const closing = documentClosing(document, context, footer.some(isOperations));\n const body = renameTakenAliases(rawBody, footer.filter(isIrDeclaration), closing);\n return { body, footer, closing };\n}\n\n/**\n * The whole document as IR declarations (ENGINEERING_PLAN 6.1–6.2); `openapiTS` returns the same\n * for a loaded document.\n */\nexport default function transformSchema(schema: OpenAPI3, ctx: GlobalContext): IrDeclaration[] {\n return documentDeclarations(transformDocument(schema, ctx));\n}\n"],"names":["isIrDeclaration","document","RunFooter","ContextFooterSink","createTransformContext","documentBody","OutputFix","SharedEnumNameRecorder","FirstSchemaNameRecorder","checkedEnumValues","excludedValuesWarning","documentClosing","renameTakenAliases","documentDeclarations"],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { documentBody, documentClosing } from '../application/transform/document/document.mjs';
|
|
2
|
+
import { renameTakenAliases } from '../application/transform/document/root-type-aliases.mjs';
|
|
3
|
+
import { RunFooter } from '../application/transform/footer/document-footer.mjs';
|
|
4
|
+
import { checkedEnumValues } from '../application/transform/footer/enum-values-check.mjs';
|
|
5
|
+
import { SharedEnumNameRecorder } from '../application/transform/footer/shared-enum-names.mjs';
|
|
6
|
+
import { OutputFix } from '../domain/output-fixes.mjs';
|
|
7
|
+
import { FirstSchemaNameRecorder } from './discriminator-enum-names.mjs';
|
|
8
|
+
import { documentDeclarations } from './document-declarations.mjs';
|
|
9
|
+
import { excludedValuesWarning } from './enum-values-warnings.mjs';
|
|
10
|
+
import { isIrDeclaration } from './footer-entry.mjs';
|
|
11
|
+
import { ContextFooterSink } from './footer-sink.mjs';
|
|
12
|
+
import { createTransformContext } from './transform-context.mjs';
|
|
13
|
+
|
|
14
|
+
const OPERATIONS_NAME = "operations";
|
|
15
|
+
function isOperations(entry) {
|
|
16
|
+
const name = isIrDeclaration(entry) ? entry.name : entry.name?.escapedText;
|
|
17
|
+
return name === OPERATIONS_NAME;
|
|
18
|
+
}
|
|
19
|
+
const dropMessage = () => void 0;
|
|
20
|
+
const DROPPED_MESSAGES = { debug: dropMessage, warn: dropMessage, error: dropMessage };
|
|
21
|
+
function sharedEnumNamesOf(document, ctx, recorder) {
|
|
22
|
+
const injectFooter = [];
|
|
23
|
+
const scratch = {
|
|
24
|
+
...ctx,
|
|
25
|
+
injectFooter,
|
|
26
|
+
runFooter: new RunFooter(new ContextFooterSink(injectFooter), true, recorder),
|
|
27
|
+
logger: DROPPED_MESSAGES,
|
|
28
|
+
legacyCallbackWarnings: /* @__PURE__ */ new Set()
|
|
29
|
+
};
|
|
30
|
+
const scratchContext = createTransformContext(scratch);
|
|
31
|
+
documentBody(document, scratchContext, () => injectFooter.filter(isIrDeclaration));
|
|
32
|
+
return recorder.chosenNames();
|
|
33
|
+
}
|
|
34
|
+
function enumNameRecorderOf(ctx) {
|
|
35
|
+
if (ctx.fix?.includes(OutputFix.DEDUPE_ENUM_NAMES)) {
|
|
36
|
+
return new SharedEnumNameRecorder();
|
|
37
|
+
}
|
|
38
|
+
return ctx.fix?.includes(OutputFix.DISCRIMINATOR_VALUES) ? new FirstSchemaNameRecorder() : null;
|
|
39
|
+
}
|
|
40
|
+
function withSharedEnumNames(document, ctx) {
|
|
41
|
+
const recorder = ctx.runFooter === void 0 ? enumNameRecorderOf(ctx) : null;
|
|
42
|
+
if (recorder === null || !ctx.enum || !ctx.dedupeEnums) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
const names = sharedEnumNamesOf(document, ctx, recorder);
|
|
46
|
+
ctx.runFooter = new RunFooter(new ContextFooterSink(ctx.injectFooter), true, names);
|
|
47
|
+
}
|
|
48
|
+
function enumValuesChecked(body, footer, ctx) {
|
|
49
|
+
if (!ctx.enumValues) {
|
|
50
|
+
return footer;
|
|
51
|
+
}
|
|
52
|
+
const checked = checkedEnumValues(footer, body, isIrDeclaration);
|
|
53
|
+
for (const retype of checked.retyped) {
|
|
54
|
+
if (retype.kind === "excluded") {
|
|
55
|
+
ctx.logger?.warn(excludedValuesWarning(retype.name, retype.excluded));
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return checked.footer;
|
|
59
|
+
}
|
|
60
|
+
function transformDocument(schema, ctx) {
|
|
61
|
+
const document = schema;
|
|
62
|
+
withSharedEnumNames(document, ctx);
|
|
63
|
+
const context = createTransformContext(ctx);
|
|
64
|
+
const rawBody = documentBody(document, context, () => ctx.injectFooter.filter(isIrDeclaration));
|
|
65
|
+
const footer = enumValuesChecked(rawBody, [...ctx.injectFooter], ctx);
|
|
66
|
+
const closing = documentClosing(document, context, footer.some(isOperations));
|
|
67
|
+
const body = renameTakenAliases(rawBody, footer.filter(isIrDeclaration), closing);
|
|
68
|
+
return { body, footer, closing };
|
|
69
|
+
}
|
|
70
|
+
function transformSchema(schema, ctx) {
|
|
71
|
+
return documentDeclarations(transformDocument(schema, ctx));
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export { transformSchema as default, transformDocument };
|
|
75
|
+
//# sourceMappingURL=transform-schema.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform-schema.mjs","sources":["../../src/api/transform-schema.ts"],"sourcesContent":["import type { ts } from \"../adapters/type-ast-bridge/typescript-types.js\";\nimport { documentBody, documentClosing } from \"../application/transform/document/document.js\";\nimport { renameTakenAliases } from \"../application/transform/document/root-type-aliases.js\";\nimport { RunFooter } from \"../application/transform/footer/document-footer.js\";\nimport { checkedEnumValues } from \"../application/transform/footer/enum-values-check.js\";\nimport {\n SharedEnumNameRecorder,\n type SharedEnumNames,\n} from \"../application/transform/footer/shared-enum-names.js\";\nimport type { IrDeclaration } from \"../domain/ir/nodes.js\";\nimport type { DocumentObject } from \"../domain/openapi/document-object.js\";\nimport { OutputFix } from \"../domain/output-fixes.js\";\nimport type { GlobalContext, OpenAPI3 } from \"../types.js\";\nimport { FirstSchemaNameRecorder } from \"./discriminator-enum-names.js\";\nimport { documentDeclarations, type TransformedDocument } from \"./document-declarations.js\";\nimport { excludedValuesWarning } from \"./enum-values-warnings.js\";\nimport { type FooterEntry, isIrDeclaration } from \"./footer-entry.js\";\nimport { ContextFooterSink } from \"./footer-sink.js\";\nimport { createTransformContext } from \"./transform-context.js\";\n\nconst OPERATIONS_NAME = \"operations\";\n\n/** Whether a footer entry is named `operations` (any declaration kind, as in the original). */\nfunction isOperations(entry: FooterEntry): boolean {\n const name = isIrDeclaration(entry)\n ? (entry as { name?: string }).name\n : (entry as Partial<ts.InterfaceDeclaration>).name?.escapedText;\n return name === OPERATIONS_NAME;\n}\n\n/** Drops a message: the first pass must not repeat the run's warnings or debug lines. */\nconst dropMessage = (): void => undefined;\nconst DROPPED_MESSAGES = { debug: dropMessage, warn: dropMessage, error: dropMessage };\n\n/** A shared enum name recorder of a first pass, and the names it gives the second. */\ninterface EnumNameRecorder extends SharedEnumNames {\n chosenNames(): SharedEnumNames;\n}\n\n/**\n * The names of shared enums, known only at the end: a first pass transforms the document into a\n * scratch footer that `recorder` watches; its output is dropped. User callbacks run in both\n * passes. The `dedupe-enum-names` fix (ADR-021, upstream #1683) names an enum by all of its\n * schemas; `discriminator-values` keeps the first declaring schema's name\n * (`FirstSchemaNameRecorder`).\n */\nfunction sharedEnumNamesOf(\n document: DocumentObject,\n ctx: GlobalContext,\n recorder: EnumNameRecorder,\n): SharedEnumNames {\n const injectFooter: FooterEntry[] = [];\n const scratch: GlobalContext = {\n ...ctx,\n injectFooter,\n runFooter: new RunFooter(new ContextFooterSink(injectFooter), true, recorder),\n logger: DROPPED_MESSAGES,\n legacyCallbackWarnings: new Set(),\n };\n const scratchContext = createTransformContext(scratch);\n documentBody(document, scratchContext, () => injectFooter.filter(isIrDeclaration));\n return recorder.chosenNames();\n}\n\n/** The recorder of the run's fixes, or null where the first schema's name needs no first pass. */\nfunction enumNameRecorderOf(ctx: GlobalContext): EnumNameRecorder | null {\n if (ctx.fix?.includes(OutputFix.DEDUPE_ENUM_NAMES)) {\n return new SharedEnumNameRecorder();\n }\n return ctx.fix?.includes(OutputFix.DISCRIMINATOR_VALUES) ? new FirstSchemaNameRecorder() : null;\n}\n\n/** With a naming fix, `--enum` and `--dedupe-enums`, the run's footer names shared enums. */\nfunction withSharedEnumNames(document: DocumentObject, ctx: GlobalContext): void {\n const recorder = ctx.runFooter === undefined ? enumNameRecorderOf(ctx) : null;\n if (recorder === null || !ctx.enum || !ctx.dedupeEnums) {\n return;\n }\n const names = sharedEnumNamesOf(document, ctx, recorder);\n ctx.runFooter = new RunFooter(new ContextFooterSink(ctx.injectFooter), true, names);\n}\n\n/**\n * With `--enum-values`, arrays whose location type does not hold their values are typed by their\n * values (ADR-027); a location that excludes listed values is a contradiction of the document.\n */\nfunction enumValuesChecked(\n body: readonly IrDeclaration[],\n footer: FooterEntry[],\n ctx: GlobalContext,\n): FooterEntry[] {\n if (!ctx.enumValues) {\n return footer;\n }\n const checked = checkedEnumValues(footer, body, isIrDeclaration);\n for (const retype of checked.retyped) {\n if (retype.kind === \"excluded\") {\n ctx.logger?.warn(excludedValuesWarning(retype.name, retype.excluded));\n }\n }\n return checked.footer;\n}\n\n/** @internal Root types, the footer, then the closing declarations (Phase 5, step 6). */\nexport function transformDocument(schema: OpenAPI3, ctx: GlobalContext): TransformedDocument {\n const document = schema as DocumentObject;\n withSharedEnumNames(document, ctx);\n const context = createTransformContext(ctx);\n // documentBody registers the enums in the footer, so the footer is read after it.\n const rawBody = documentBody(document, context, () => ctx.injectFooter.filter(isIrDeclaration));\n const footer = enumValuesChecked(rawBody, [...ctx.injectFooter], ctx);\n const closing = documentClosing(document, context, footer.some(isOperations));\n const body = renameTakenAliases(rawBody, footer.filter(isIrDeclaration), closing);\n return { body, footer, closing };\n}\n\n/**\n * The whole document as IR declarations (ENGINEERING_PLAN 6.1–6.2); `openapiTS` returns the same\n * for a loaded document.\n */\nexport default function transformSchema(schema: OpenAPI3, ctx: GlobalContext): IrDeclaration[] {\n return documentDeclarations(transformDocument(schema, ctx));\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const loadTypescript = require('../adapters/type-ast-bridge/load-typescript.cjs');
|
|
4
|
+
const typescriptToIr = require('../adapters/type-ast-bridge/typescript-to-ir.cjs');
|
|
5
|
+
const helperTypes = require('../application/transform/helper-types.cjs');
|
|
6
|
+
const literalType = require('../application/transform/literal-type.cjs');
|
|
7
|
+
const refType = require('../application/transform/ref-type.cjs');
|
|
8
|
+
const sharedTypes = require('../application/transform/shared-types.cjs');
|
|
9
|
+
const typeCombinators = require('../application/transform/type-combinators.cjs');
|
|
10
|
+
const constructors = require('../domain/ir/constructors.cjs');
|
|
11
|
+
const footerEntry = require('./footer-entry.cjs');
|
|
12
|
+
|
|
13
|
+
const BOOLEAN = Object.freeze(constructors.irKeyword("boolean"));
|
|
14
|
+
const FALSE = Object.freeze(constructors.irBoolean(false));
|
|
15
|
+
const NEVER = Object.freeze(constructors.irKeyword("never"));
|
|
16
|
+
const NULL = Object.freeze(constructors.irKeyword("null"));
|
|
17
|
+
const NUMBER = Object.freeze(constructors.irKeyword("number"));
|
|
18
|
+
const STRING = Object.freeze(constructors.irKeyword("string"));
|
|
19
|
+
const TRUE = Object.freeze(constructors.irBoolean(true));
|
|
20
|
+
const UNDEFINED = Object.freeze(constructors.irKeyword("undefined"));
|
|
21
|
+
const UNKNOWN = sharedTypes.UNKNOWN_TYPE;
|
|
22
|
+
function isIrType(type) {
|
|
23
|
+
return typeof type.kind === "string";
|
|
24
|
+
}
|
|
25
|
+
function toIrType(type) {
|
|
26
|
+
return isIrType(type) ? type : typescriptToIr.fromTypeNode(loadTypescript.loadTypeScript(), type);
|
|
27
|
+
}
|
|
28
|
+
function tsUnion(types) {
|
|
29
|
+
return typeCombinators.unionOf(types.map(toIrType));
|
|
30
|
+
}
|
|
31
|
+
function tsIntersection(types) {
|
|
32
|
+
return typeCombinators.intersectionOf(types.map(toIrType));
|
|
33
|
+
}
|
|
34
|
+
function tsNullable(types) {
|
|
35
|
+
return typeCombinators.nullableOf(types.map(toIrType));
|
|
36
|
+
}
|
|
37
|
+
function tsOmit(type, keys) {
|
|
38
|
+
return typeCombinators.omitKeys(toIrType(type), keys);
|
|
39
|
+
}
|
|
40
|
+
function tsRecord(key, value) {
|
|
41
|
+
return constructors.irRecord(toIrType(key), toIrType(value));
|
|
42
|
+
}
|
|
43
|
+
function tsLiteral(value) {
|
|
44
|
+
return literalType.literalType(value);
|
|
45
|
+
}
|
|
46
|
+
function tsWithRequired(type, keys, injectFooter) {
|
|
47
|
+
if (keys.length === 0) {
|
|
48
|
+
return toIrType(type);
|
|
49
|
+
}
|
|
50
|
+
const { name, text } = helperTypes.HELPER_TYPES.withRequired;
|
|
51
|
+
if (!injectFooter.some((entry) => footerEntry.declaresTypeAlias(entry, name))) {
|
|
52
|
+
injectFooter.push({ kind: "rawDeclaration", name, text });
|
|
53
|
+
}
|
|
54
|
+
return typeCombinators.withRequiredKeys(toIrType(type), keys);
|
|
55
|
+
}
|
|
56
|
+
function isParameterObject(value) {
|
|
57
|
+
return Boolean(value && !("$ref" in value && value.$ref) && value.in);
|
|
58
|
+
}
|
|
59
|
+
function oapiRef(path, resolved, options = {}) {
|
|
60
|
+
return refType.refType(path, {
|
|
61
|
+
isDeep: options.deep ?? false,
|
|
62
|
+
extractProperties: options.extractProperties ?? [],
|
|
63
|
+
parameter: isParameterObject(resolved) ? { in: resolved.in, name: resolved.name } : null
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
exports.BOOLEAN = BOOLEAN;
|
|
68
|
+
exports.FALSE = FALSE;
|
|
69
|
+
exports.NEVER = NEVER;
|
|
70
|
+
exports.NULL = NULL;
|
|
71
|
+
exports.NUMBER = NUMBER;
|
|
72
|
+
exports.STRING = STRING;
|
|
73
|
+
exports.TRUE = TRUE;
|
|
74
|
+
exports.UNDEFINED = UNDEFINED;
|
|
75
|
+
exports.UNKNOWN = UNKNOWN;
|
|
76
|
+
exports.oapiRef = oapiRef;
|
|
77
|
+
exports.toIrType = toIrType;
|
|
78
|
+
exports.tsIntersection = tsIntersection;
|
|
79
|
+
exports.tsLiteral = tsLiteral;
|
|
80
|
+
exports.tsNullable = tsNullable;
|
|
81
|
+
exports.tsOmit = tsOmit;
|
|
82
|
+
exports.tsRecord = tsRecord;
|
|
83
|
+
exports.tsUnion = tsUnion;
|
|
84
|
+
exports.tsWithRequired = tsWithRequired;
|
|
85
|
+
//# sourceMappingURL=type-helpers.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-helpers.cjs","sources":["../../src/api/type-helpers.ts"],"sourcesContent":["import { loadTypeScript } from \"../adapters/type-ast-bridge/load-typescript.js\";\nimport { fromTypeNode } from \"../adapters/type-ast-bridge/typescript-to-ir.js\";\nimport type { ts } from \"../adapters/type-ast-bridge/typescript-types.js\";\nimport { HELPER_TYPES } from \"../application/transform/helper-types.js\";\nimport { literalType } from \"../application/transform/literal-type.js\";\nimport { refType } from \"../application/transform/ref-type.js\";\nimport { UNKNOWN_TYPE } from \"../application/transform/shared-types.js\";\nimport {\n intersectionOf,\n nullableOf,\n omitKeys,\n unionOf,\n withRequiredKeys,\n} from \"../application/transform/type-combinators.js\";\nimport { irBoolean, irKeyword, irRecord } from \"../domain/ir/constructors.js\";\nimport type { IrType } from \"../domain/ir/nodes.js\";\nimport type { ParameterObject, ReferenceObject } from \"../types.js\";\nimport { declaresTypeAlias, type FooterEntry } from \"./footer-entry.js\";\n\n/**\n * The public type helpers (ENGINEERING_PLAN 6.2, ADR-004 decision 2). Same names and call\n * signatures as the original helpers; they return IR types. A `ts.TypeNode` argument (from user\n * code built with `ts.factory`) is read into IR by the bridge.\n */\n\n/** A helper argument: an IR type, or a TypeScript type node from user code. */\nexport type TypeInput = IrType | ts.TypeNode;\n\nexport const BOOLEAN: IrType = Object.freeze(irKeyword(\"boolean\"));\nexport const FALSE: IrType = Object.freeze(irBoolean(false));\nexport const NEVER: IrType = Object.freeze(irKeyword(\"never\"));\nexport const NULL: IrType = Object.freeze(irKeyword(\"null\"));\nexport const NUMBER: IrType = Object.freeze(irKeyword(\"number\"));\nexport const STRING: IrType = Object.freeze(irKeyword(\"string\"));\nexport const TRUE: IrType = Object.freeze(irBoolean(true));\nexport const UNDEFINED: IrType = Object.freeze(irKeyword(\"undefined\"));\n/** The shared `unknown` type; the transformers compare with it by identity, as the original did. */\nexport const UNKNOWN: IrType = UNKNOWN_TYPE;\n\n/** IR nodes have a string `kind`; TypeScript nodes have a numeric `SyntaxKind`. */\nfunction isIrType(type: TypeInput): type is IrType {\n return typeof type.kind === \"string\";\n}\n\n/** @internal Read a helper argument into IR. */\nexport function toIrType(type: TypeInput): IrType {\n return isIrType(type) ? type : fromTypeNode(loadTypeScript(), type);\n}\n\n/** `A | B`: `never` for no types, the type itself for one; repeated primitives are removed. */\nexport function tsUnion(types: readonly TypeInput[]): IrType {\n return unionOf(types.map(toIrType));\n}\n\n/** `A & B`, with the same rules as `tsUnion`. */\nexport function tsIntersection(types: readonly TypeInput[]): IrType {\n return intersectionOf(types.map(toIrType));\n}\n\n/** `A | null`, without removing repeated types. */\nexport function tsNullable(types: readonly TypeInput[]): IrType {\n return nullableOf(types.map(toIrType));\n}\n\n/** `Omit<T, \"a\" | \"b\">`. */\nexport function tsOmit(type: TypeInput, keys: readonly string[]): IrType {\n return omitKeys(toIrType(type), keys);\n}\n\n/** `Record<K, V>`. */\nexport function tsRecord(key: TypeInput, value: TypeInput): IrType {\n return irRecord(toIrType(key), toIrType(value));\n}\n\n/**\n * The literal type of a JSON value: strings, numbers, booleans and `null` as literals, arrays as\n * tuples (an empty one as `never[]`), objects as object types; anything else is `unknown`.\n */\nexport function tsLiteral(value: unknown): IrType {\n return literalType(value);\n}\n\n/**\n * `WithRequired<T, \"a\" | \"b\">`, or the type itself for no keys. Adds the `WithRequired` helper\n * type to the footer once.\n */\nexport function tsWithRequired(\n type: TypeInput,\n keys: readonly string[],\n injectFooter: FooterEntry[],\n): IrType {\n if (keys.length === 0) {\n return toIrType(type);\n }\n const { name, text } = HELPER_TYPES.withRequired;\n if (!injectFooter.some((entry) => declaresTypeAlias(entry, name))) {\n injectFooter.push({ kind: \"rawDeclaration\", name, text });\n }\n return withRequiredKeys(toIrType(type), keys);\n}\n\nexport interface OapiRefOptions {\n /** Whether to wrap with FlattenedDeepRequired<> (default: false) */\n deep?: boolean;\n /** Array of property names to wrap with Extract<> when accessing */\n extractProperties?: string[];\n}\n\nfunction isParameterObject(\n value: ParameterObject | ReferenceObject | undefined,\n): value is ParameterObject {\n return Boolean(value && !(\"$ref\" in value && value.$ref) && (value as ParameterObject).in);\n}\n\n/**\n * The generated type a JSON Pointer refers to, as an indexed access: `#/components/schemas/Foo`\n * → `components[\"schemas\"][\"Foo\"]`. Object `properties` are skipped, and a referenced parameter\n * is indexed by its location (`resolved`).\n */\nexport function oapiRef(\n path: string,\n resolved?: ParameterObject | ReferenceObject,\n options: OapiRefOptions = {},\n): IrType {\n return refType(path, {\n isDeep: options.deep ?? false,\n extractProperties: options.extractProperties ?? [],\n parameter: isParameterObject(resolved) ? { in: resolved.in, name: resolved.name } : null,\n });\n}\n"],"names":["irKeyword","irBoolean","UNKNOWN_TYPE","fromTypeNode","loadTypeScript","unionOf","intersectionOf","nullableOf","omitKeys","irRecord","literalType","HELPER_TYPES","declaresTypeAlias","withRequiredKeys","refType"],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { loadTypeScript } from '../adapters/type-ast-bridge/load-typescript.mjs';
|
|
2
|
+
import { fromTypeNode } from '../adapters/type-ast-bridge/typescript-to-ir.mjs';
|
|
3
|
+
import { HELPER_TYPES } from '../application/transform/helper-types.mjs';
|
|
4
|
+
import { literalType } from '../application/transform/literal-type.mjs';
|
|
5
|
+
import { refType } from '../application/transform/ref-type.mjs';
|
|
6
|
+
import { UNKNOWN_TYPE } from '../application/transform/shared-types.mjs';
|
|
7
|
+
import { intersectionOf, nullableOf, omitKeys, unionOf, withRequiredKeys } from '../application/transform/type-combinators.mjs';
|
|
8
|
+
import { irKeyword, irBoolean, irRecord } from '../domain/ir/constructors.mjs';
|
|
9
|
+
import { declaresTypeAlias } from './footer-entry.mjs';
|
|
10
|
+
|
|
11
|
+
const BOOLEAN = Object.freeze(irKeyword("boolean"));
|
|
12
|
+
const FALSE = Object.freeze(irBoolean(false));
|
|
13
|
+
const NEVER = Object.freeze(irKeyword("never"));
|
|
14
|
+
const NULL = Object.freeze(irKeyword("null"));
|
|
15
|
+
const NUMBER = Object.freeze(irKeyword("number"));
|
|
16
|
+
const STRING = Object.freeze(irKeyword("string"));
|
|
17
|
+
const TRUE = Object.freeze(irBoolean(true));
|
|
18
|
+
const UNDEFINED = Object.freeze(irKeyword("undefined"));
|
|
19
|
+
const UNKNOWN = UNKNOWN_TYPE;
|
|
20
|
+
function isIrType(type) {
|
|
21
|
+
return typeof type.kind === "string";
|
|
22
|
+
}
|
|
23
|
+
function toIrType(type) {
|
|
24
|
+
return isIrType(type) ? type : fromTypeNode(loadTypeScript(), type);
|
|
25
|
+
}
|
|
26
|
+
function tsUnion(types) {
|
|
27
|
+
return unionOf(types.map(toIrType));
|
|
28
|
+
}
|
|
29
|
+
function tsIntersection(types) {
|
|
30
|
+
return intersectionOf(types.map(toIrType));
|
|
31
|
+
}
|
|
32
|
+
function tsNullable(types) {
|
|
33
|
+
return nullableOf(types.map(toIrType));
|
|
34
|
+
}
|
|
35
|
+
function tsOmit(type, keys) {
|
|
36
|
+
return omitKeys(toIrType(type), keys);
|
|
37
|
+
}
|
|
38
|
+
function tsRecord(key, value) {
|
|
39
|
+
return irRecord(toIrType(key), toIrType(value));
|
|
40
|
+
}
|
|
41
|
+
function tsLiteral(value) {
|
|
42
|
+
return literalType(value);
|
|
43
|
+
}
|
|
44
|
+
function tsWithRequired(type, keys, injectFooter) {
|
|
45
|
+
if (keys.length === 0) {
|
|
46
|
+
return toIrType(type);
|
|
47
|
+
}
|
|
48
|
+
const { name, text } = HELPER_TYPES.withRequired;
|
|
49
|
+
if (!injectFooter.some((entry) => declaresTypeAlias(entry, name))) {
|
|
50
|
+
injectFooter.push({ kind: "rawDeclaration", name, text });
|
|
51
|
+
}
|
|
52
|
+
return withRequiredKeys(toIrType(type), keys);
|
|
53
|
+
}
|
|
54
|
+
function isParameterObject(value) {
|
|
55
|
+
return Boolean(value && !("$ref" in value && value.$ref) && value.in);
|
|
56
|
+
}
|
|
57
|
+
function oapiRef(path, resolved, options = {}) {
|
|
58
|
+
return refType(path, {
|
|
59
|
+
isDeep: options.deep ?? false,
|
|
60
|
+
extractProperties: options.extractProperties ?? [],
|
|
61
|
+
parameter: isParameterObject(resolved) ? { in: resolved.in, name: resolved.name } : null
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export { BOOLEAN, FALSE, NEVER, NULL, NUMBER, STRING, TRUE, UNDEFINED, UNKNOWN, oapiRef, toIrType, tsIntersection, tsLiteral, tsNullable, tsOmit, tsRecord, tsUnion, tsWithRequired };
|
|
66
|
+
//# sourceMappingURL=type-helpers.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-helpers.mjs","sources":["../../src/api/type-helpers.ts"],"sourcesContent":["import { loadTypeScript } from \"../adapters/type-ast-bridge/load-typescript.js\";\nimport { fromTypeNode } from \"../adapters/type-ast-bridge/typescript-to-ir.js\";\nimport type { ts } from \"../adapters/type-ast-bridge/typescript-types.js\";\nimport { HELPER_TYPES } from \"../application/transform/helper-types.js\";\nimport { literalType } from \"../application/transform/literal-type.js\";\nimport { refType } from \"../application/transform/ref-type.js\";\nimport { UNKNOWN_TYPE } from \"../application/transform/shared-types.js\";\nimport {\n intersectionOf,\n nullableOf,\n omitKeys,\n unionOf,\n withRequiredKeys,\n} from \"../application/transform/type-combinators.js\";\nimport { irBoolean, irKeyword, irRecord } from \"../domain/ir/constructors.js\";\nimport type { IrType } from \"../domain/ir/nodes.js\";\nimport type { ParameterObject, ReferenceObject } from \"../types.js\";\nimport { declaresTypeAlias, type FooterEntry } from \"./footer-entry.js\";\n\n/**\n * The public type helpers (ENGINEERING_PLAN 6.2, ADR-004 decision 2). Same names and call\n * signatures as the original helpers; they return IR types. A `ts.TypeNode` argument (from user\n * code built with `ts.factory`) is read into IR by the bridge.\n */\n\n/** A helper argument: an IR type, or a TypeScript type node from user code. */\nexport type TypeInput = IrType | ts.TypeNode;\n\nexport const BOOLEAN: IrType = Object.freeze(irKeyword(\"boolean\"));\nexport const FALSE: IrType = Object.freeze(irBoolean(false));\nexport const NEVER: IrType = Object.freeze(irKeyword(\"never\"));\nexport const NULL: IrType = Object.freeze(irKeyword(\"null\"));\nexport const NUMBER: IrType = Object.freeze(irKeyword(\"number\"));\nexport const STRING: IrType = Object.freeze(irKeyword(\"string\"));\nexport const TRUE: IrType = Object.freeze(irBoolean(true));\nexport const UNDEFINED: IrType = Object.freeze(irKeyword(\"undefined\"));\n/** The shared `unknown` type; the transformers compare with it by identity, as the original did. */\nexport const UNKNOWN: IrType = UNKNOWN_TYPE;\n\n/** IR nodes have a string `kind`; TypeScript nodes have a numeric `SyntaxKind`. */\nfunction isIrType(type: TypeInput): type is IrType {\n return typeof type.kind === \"string\";\n}\n\n/** @internal Read a helper argument into IR. */\nexport function toIrType(type: TypeInput): IrType {\n return isIrType(type) ? type : fromTypeNode(loadTypeScript(), type);\n}\n\n/** `A | B`: `never` for no types, the type itself for one; repeated primitives are removed. */\nexport function tsUnion(types: readonly TypeInput[]): IrType {\n return unionOf(types.map(toIrType));\n}\n\n/** `A & B`, with the same rules as `tsUnion`. */\nexport function tsIntersection(types: readonly TypeInput[]): IrType {\n return intersectionOf(types.map(toIrType));\n}\n\n/** `A | null`, without removing repeated types. */\nexport function tsNullable(types: readonly TypeInput[]): IrType {\n return nullableOf(types.map(toIrType));\n}\n\n/** `Omit<T, \"a\" | \"b\">`. */\nexport function tsOmit(type: TypeInput, keys: readonly string[]): IrType {\n return omitKeys(toIrType(type), keys);\n}\n\n/** `Record<K, V>`. */\nexport function tsRecord(key: TypeInput, value: TypeInput): IrType {\n return irRecord(toIrType(key), toIrType(value));\n}\n\n/**\n * The literal type of a JSON value: strings, numbers, booleans and `null` as literals, arrays as\n * tuples (an empty one as `never[]`), objects as object types; anything else is `unknown`.\n */\nexport function tsLiteral(value: unknown): IrType {\n return literalType(value);\n}\n\n/**\n * `WithRequired<T, \"a\" | \"b\">`, or the type itself for no keys. Adds the `WithRequired` helper\n * type to the footer once.\n */\nexport function tsWithRequired(\n type: TypeInput,\n keys: readonly string[],\n injectFooter: FooterEntry[],\n): IrType {\n if (keys.length === 0) {\n return toIrType(type);\n }\n const { name, text } = HELPER_TYPES.withRequired;\n if (!injectFooter.some((entry) => declaresTypeAlias(entry, name))) {\n injectFooter.push({ kind: \"rawDeclaration\", name, text });\n }\n return withRequiredKeys(toIrType(type), keys);\n}\n\nexport interface OapiRefOptions {\n /** Whether to wrap with FlattenedDeepRequired<> (default: false) */\n deep?: boolean;\n /** Array of property names to wrap with Extract<> when accessing */\n extractProperties?: string[];\n}\n\nfunction isParameterObject(\n value: ParameterObject | ReferenceObject | undefined,\n): value is ParameterObject {\n return Boolean(value && !(\"$ref\" in value && value.$ref) && (value as ParameterObject).in);\n}\n\n/**\n * The generated type a JSON Pointer refers to, as an indexed access: `#/components/schemas/Foo`\n * → `components[\"schemas\"][\"Foo\"]`. Object `properties` are skipped, and a referenced parameter\n * is indexed by its location (`resolved`).\n */\nexport function oapiRef(\n path: string,\n resolved?: ParameterObject | ReferenceObject,\n options: OapiRefOptions = {},\n): IrType {\n return refType(path, {\n isDeep: options.deep ?? false,\n extractProperties: options.extractProperties ?? [],\n parameter: isParameterObject(resolved) ? { in: resolved.in, name: resolved.name } : null,\n });\n}\n"],"names":[],"mappings":";;;;;;;;;;AA4BO,MAAM,OAAA,GAAkB,MAAA,CAAO,MAAA,CAAO,SAAA,CAAU,SAAS,CAAC;AAC1D,MAAM,KAAA,GAAgB,MAAA,CAAO,MAAA,CAAO,SAAA,CAAU,KAAK,CAAC;AACpD,MAAM,KAAA,GAAgB,MAAA,CAAO,MAAA,CAAO,SAAA,CAAU,OAAO,CAAC;AACtD,MAAM,IAAA,GAAe,MAAA,CAAO,MAAA,CAAO,SAAA,CAAU,MAAM,CAAC;AACpD,MAAM,MAAA,GAAiB,MAAA,CAAO,MAAA,CAAO,SAAA,CAAU,QAAQ,CAAC;AACxD,MAAM,MAAA,GAAiB,MAAA,CAAO,MAAA,CAAO,SAAA,CAAU,QAAQ,CAAC;AACxD,MAAM,IAAA,GAAe,MAAA,CAAO,MAAA,CAAO,SAAA,CAAU,IAAI,CAAC;AAClD,MAAM,SAAA,GAAoB,MAAA,CAAO,MAAA,CAAO,SAAA,CAAU,WAAW,CAAC;AAE9D,MAAM,OAAA,GAAkB;AAG/B,SAAS,SAAS,IAAA,EAAiC;AACjD,EAAA,OAAO,OAAO,KAAK,IAAA,KAAS,QAAA;AAC9B;AAGO,SAAS,SAAS,IAAA,EAAyB;AAChD,EAAA,OAAO,SAAS,IAAI,CAAA,GAAI,OAAO,YAAA,CAAa,cAAA,IAAkB,IAAI,CAAA;AACpE;AAGO,SAAS,QAAQ,KAAA,EAAqC;AAC3D,EAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,GAAA,CAAI,QAAQ,CAAC,CAAA;AACpC;AAGO,SAAS,eAAe,KAAA,EAAqC;AAClE,EAAA,OAAO,cAAA,CAAe,KAAA,CAAM,GAAA,CAAI,QAAQ,CAAC,CAAA;AAC3C;AAGO,SAAS,WAAW,KAAA,EAAqC;AAC9D,EAAA,OAAO,UAAA,CAAW,KAAA,CAAM,GAAA,CAAI,QAAQ,CAAC,CAAA;AACvC;AAGO,SAAS,MAAA,CAAO,MAAiB,IAAA,EAAiC;AACvE,EAAA,OAAO,QAAA,CAAS,QAAA,CAAS,IAAI,CAAA,EAAG,IAAI,CAAA;AACtC;AAGO,SAAS,QAAA,CAAS,KAAgB,KAAA,EAA0B;AACjE,EAAA,OAAO,SAAS,QAAA,CAAS,GAAG,CAAA,EAAG,QAAA,CAAS,KAAK,CAAC,CAAA;AAChD;AAMO,SAAS,UAAU,KAAA,EAAwB;AAChD,EAAA,OAAO,YAAY,KAAK,CAAA;AAC1B;AAMO,SAAS,cAAA,CACd,IAAA,EACA,IAAA,EACA,YAAA,EACQ;AACR,EAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,IAAA,OAAO,SAAS,IAAI,CAAA;AAAA,EACtB;AACA,EAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAK,GAAI,YAAA,CAAa,YAAA;AACpC,EAAA,IAAI,CAAC,aAAa,IAAA,CAAK,CAAC,UAAU,iBAAA,CAAkB,KAAA,EAAO,IAAI,CAAC,CAAA,EAAG;AACjE,IAAA,YAAA,CAAa,KAAK,EAAE,IAAA,EAAM,gBAAA,EAAkB,IAAA,EAAM,MAAM,CAAA;AAAA,EAC1D;AACA,EAAA,OAAO,gBAAA,CAAiB,QAAA,CAAS,IAAI,CAAA,EAAG,IAAI,CAAA;AAC9C;AASA,SAAS,kBACP,KAAA,EAC0B;AAC1B,EAAA,OAAO,OAAA,CAAQ,SAAS,EAAE,MAAA,IAAU,SAAS,KAAA,CAAM,IAAA,CAAA,IAAU,MAA0B,EAAE,CAAA;AAC3F;AAOO,SAAS,OAAA,CACd,IAAA,EACA,QAAA,EACA,OAAA,GAA0B,EAAC,EACnB;AACR,EAAA,OAAO,QAAQ,IAAA,EAAM;AAAA,IACnB,MAAA,EAAQ,QAAQ,IAAA,IAAQ,KAAA;AAAA,IACxB,iBAAA,EAAmB,OAAA,CAAQ,iBAAA,IAAqB,EAAC;AAAA,IACjD,SAAA,EAAW,iBAAA,CAAkB,QAAQ,CAAA,GAAI,EAAE,EAAA,EAAI,QAAA,CAAS,EAAA,EAAI,IAAA,EAAM,QAAA,CAAS,IAAA,EAAK,GAAI;AAAA,GACrF,CAAA;AACH;;"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const unsupportedFeatures = require('../domain/openapi/unsupported-features.cjs');
|
|
4
|
+
const warnings = require('../domain/warnings.cjs');
|
|
5
|
+
|
|
6
|
+
const DOCS_BASE_URL = "https://github.com/openapi-typesafe/openapi-typesafe/blob/main/docs";
|
|
7
|
+
const SUPPORT_DOCS_URL = `${DOCS_BASE_URL}/introduction.md#openapi-3-2-support`;
|
|
8
|
+
const REASONS = {
|
|
9
|
+
[unsupportedFeatures.UnsupportedFeature.QUERYSTRING_NEXT_TO_QUERY]: 'is an "in: querystring" parameter next to "in: query" parameters, which OpenAPI 3.2 does not allow; the query parameters keep their types and this parameter is not in the generated types'
|
|
10
|
+
};
|
|
11
|
+
const CODES = {
|
|
12
|
+
[unsupportedFeatures.UnsupportedFeature.QUERYSTRING_NEXT_TO_QUERY]: warnings.WARNING_CODES.QUERYSTRING_NEXT_TO_QUERY
|
|
13
|
+
};
|
|
14
|
+
function warnUnsupportedFeatures(document, logger) {
|
|
15
|
+
for (const { feature, pointer } of unsupportedFeatures.findUnsupportedFeatures(document)) {
|
|
16
|
+
const message = `${pointer} ${REASONS[feature]}. See ${SUPPORT_DOCS_URL}`;
|
|
17
|
+
logger.warn(warnings.warningText(message, CODES[feature]));
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
exports.warnUnsupportedFeatures = warnUnsupportedFeatures;
|
|
22
|
+
//# sourceMappingURL=unsupported-feature-warnings.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unsupported-feature-warnings.cjs","sources":["../../src/api/unsupported-feature-warnings.ts"],"sourcesContent":["import type { Logger } from \"../application/ports/logger.js\";\nimport {\n findUnsupportedFeatures,\n UnsupportedFeature,\n} from \"../domain/openapi/unsupported-features.js\";\nimport { WARNING_CODES, type WarningCode, warningText } from \"../domain/warnings.js\";\n\nconst DOCS_BASE_URL = \"https://github.com/openapi-typesafe/openapi-typesafe/blob/main/docs\";\nconst SUPPORT_DOCS_URL = `${DOCS_BASE_URL}/introduction.md#openapi-3-2-support`;\n\n/** Why each feature is not in the generated types. */\nconst REASONS: Readonly<Record<UnsupportedFeature, string>> = {\n [UnsupportedFeature.QUERYSTRING_NEXT_TO_QUERY]:\n 'is an \"in: querystring\" parameter next to \"in: query\" parameters, which OpenAPI 3.2 does ' +\n \"not allow; the query parameters keep their types and this parameter is not in the \" +\n \"generated types\",\n};\n\n/** The warning code of each feature. */\nconst CODES: Readonly<Record<UnsupportedFeature, WarningCode>> = {\n [UnsupportedFeature.QUERYSTRING_NEXT_TO_QUERY]: WARNING_CODES.QUERYSTRING_NEXT_TO_QUERY,\n};\n\n/**\n * Warn once per use of an OpenAPI 3.2 feature that the generated types leave out, so a missing\n * parameter is never silent (CODING_PRINCIPLES §8.7).\n */\nexport function warnUnsupportedFeatures(document: unknown, logger: Logger): void {\n for (const { feature, pointer } of findUnsupportedFeatures(document)) {\n const message = `${pointer} ${REASONS[feature]}. See ${SUPPORT_DOCS_URL}`;\n logger.warn(warningText(message, CODES[feature]));\n }\n}\n"],"names":["UnsupportedFeature","WARNING_CODES","findUnsupportedFeatures","warningText"],"mappings":";;;;;AAOA,MAAM,aAAA,GAAgB,qEAAA;AACtB,MAAM,gBAAA,GAAmB,GAAG,aAAa,CAAA,oCAAA,CAAA;AAGzC,MAAM,OAAA,GAAwD;AAAA,EAC5D,CAACA,sCAAA,CAAmB,yBAAyB,GAC3C;AAGJ,CAAA;AAGA,MAAM,KAAA,GAA2D;AAAA,EAC/D,CAACA,sCAAA,CAAmB,yBAAyB,GAAGC,sBAAA,CAAc;AAChE,CAAA;AAMO,SAAS,uBAAA,CAAwB,UAAmB,MAAA,EAAsB;AAC/E,EAAA,KAAA,MAAW,EAAE,OAAA,EAAS,OAAA,EAAQ,IAAKC,2CAAA,CAAwB,QAAQ,CAAA,EAAG;AACpE,IAAA,MAAM,OAAA,GAAU,GAAG,OAAO,CAAA,CAAA,EAAI,QAAQ,OAAO,CAAC,SAAS,gBAAgB,CAAA,CAAA;AACvE,IAAA,MAAA,CAAO,KAAKC,oBAAA,CAAY,OAAA,EAAS,KAAA,CAAM,OAAO,CAAC,CAAC,CAAA;AAAA,EAClD;AACF;;"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { findUnsupportedFeatures, UnsupportedFeature } from '../domain/openapi/unsupported-features.mjs';
|
|
2
|
+
import { warningText, WARNING_CODES } from '../domain/warnings.mjs';
|
|
3
|
+
|
|
4
|
+
const DOCS_BASE_URL = "https://github.com/openapi-typesafe/openapi-typesafe/blob/main/docs";
|
|
5
|
+
const SUPPORT_DOCS_URL = `${DOCS_BASE_URL}/introduction.md#openapi-3-2-support`;
|
|
6
|
+
const REASONS = {
|
|
7
|
+
[UnsupportedFeature.QUERYSTRING_NEXT_TO_QUERY]: 'is an "in: querystring" parameter next to "in: query" parameters, which OpenAPI 3.2 does not allow; the query parameters keep their types and this parameter is not in the generated types'
|
|
8
|
+
};
|
|
9
|
+
const CODES = {
|
|
10
|
+
[UnsupportedFeature.QUERYSTRING_NEXT_TO_QUERY]: WARNING_CODES.QUERYSTRING_NEXT_TO_QUERY
|
|
11
|
+
};
|
|
12
|
+
function warnUnsupportedFeatures(document, logger) {
|
|
13
|
+
for (const { feature, pointer } of findUnsupportedFeatures(document)) {
|
|
14
|
+
const message = `${pointer} ${REASONS[feature]}. See ${SUPPORT_DOCS_URL}`;
|
|
15
|
+
logger.warn(warningText(message, CODES[feature]));
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export { warnUnsupportedFeatures };
|
|
20
|
+
//# sourceMappingURL=unsupported-feature-warnings.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unsupported-feature-warnings.mjs","sources":["../../src/api/unsupported-feature-warnings.ts"],"sourcesContent":["import type { Logger } from \"../application/ports/logger.js\";\nimport {\n findUnsupportedFeatures,\n UnsupportedFeature,\n} from \"../domain/openapi/unsupported-features.js\";\nimport { WARNING_CODES, type WarningCode, warningText } from \"../domain/warnings.js\";\n\nconst DOCS_BASE_URL = \"https://github.com/openapi-typesafe/openapi-typesafe/blob/main/docs\";\nconst SUPPORT_DOCS_URL = `${DOCS_BASE_URL}/introduction.md#openapi-3-2-support`;\n\n/** Why each feature is not in the generated types. */\nconst REASONS: Readonly<Record<UnsupportedFeature, string>> = {\n [UnsupportedFeature.QUERYSTRING_NEXT_TO_QUERY]:\n 'is an \"in: querystring\" parameter next to \"in: query\" parameters, which OpenAPI 3.2 does ' +\n \"not allow; the query parameters keep their types and this parameter is not in the \" +\n \"generated types\",\n};\n\n/** The warning code of each feature. */\nconst CODES: Readonly<Record<UnsupportedFeature, WarningCode>> = {\n [UnsupportedFeature.QUERYSTRING_NEXT_TO_QUERY]: WARNING_CODES.QUERYSTRING_NEXT_TO_QUERY,\n};\n\n/**\n * Warn once per use of an OpenAPI 3.2 feature that the generated types leave out, so a missing\n * parameter is never silent (CODING_PRINCIPLES §8.7).\n */\nexport function warnUnsupportedFeatures(document: unknown, logger: Logger): void {\n for (const { feature, pointer } of findUnsupportedFeatures(document)) {\n const message = `${pointer} ${REASONS[feature]}. See ${SUPPORT_DOCS_URL}`;\n logger.warn(warningText(message, CODES[feature]));\n }\n}\n"],"names":[],"mappings":";;;AAOA,MAAM,aAAA,GAAgB,qEAAA;AACtB,MAAM,gBAAA,GAAmB,GAAG,aAAa,CAAA,oCAAA,CAAA;AAGzC,MAAM,OAAA,GAAwD;AAAA,EAC5D,CAAC,kBAAA,CAAmB,yBAAyB,GAC3C;AAGJ,CAAA;AAGA,MAAM,KAAA,GAA2D;AAAA,EAC/D,CAAC,kBAAA,CAAmB,yBAAyB,GAAG,aAAA,CAAc;AAChE,CAAA;AAMO,SAAS,uBAAA,CAAwB,UAAmB,MAAA,EAAsB;AAC/E,EAAA,KAAA,MAAW,EAAE,OAAA,EAAS,OAAA,EAAQ,IAAK,uBAAA,CAAwB,QAAQ,CAAA,EAAG;AACpE,IAAA,MAAM,OAAA,GAAU,GAAG,OAAO,CAAA,CAAA,EAAI,QAAQ,OAAO,CAAC,SAAS,gBAAgB,CAAA,CAAA;AACvE,IAAA,MAAA,CAAO,KAAK,WAAA,CAAY,OAAA,EAAS,KAAA,CAAM,OAAO,CAAC,CAAC,CAAA;AAAA,EAClD;AACF;;"}
|