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,45 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const outputFixes = require('../../../domain/output-fixes.cjs');
|
|
4
|
+
const typeCombinators = require('../type-combinators.cjs');
|
|
5
|
+
const objectType = require('./object-type.cjs');
|
|
6
|
+
|
|
7
|
+
const ANNOTATION_KEYS = /* @__PURE__ */ new Set(["required", "description", "title"]);
|
|
8
|
+
function requiredOnlyKeys(variant) {
|
|
9
|
+
if (typeof variant !== "object" || variant === null || "$ref" in variant) {
|
|
10
|
+
return null;
|
|
11
|
+
}
|
|
12
|
+
const { required } = variant;
|
|
13
|
+
const isRequiredOnly = Object.keys(variant).every((key) => ANNOTATION_KEYS.has(key));
|
|
14
|
+
return isRequiredOnly && Array.isArray(required) && required.length > 0 ? required : null;
|
|
15
|
+
}
|
|
16
|
+
function isObjectTyped(schema) {
|
|
17
|
+
const { type } = schema;
|
|
18
|
+
return type === void 0 || type === "object" || Array.isArray(type) && type.includes("object");
|
|
19
|
+
}
|
|
20
|
+
function requiredKeyLists(schema, variants, request) {
|
|
21
|
+
const keyLists = variants.map(requiredOnlyKeys);
|
|
22
|
+
const isApplicable = keyLists.length > 0 && keyLists.every((keys) => keys?.every((key) => objectType.isKeptProperty(schema, key, request)) === true);
|
|
23
|
+
return isApplicable ? keyLists : null;
|
|
24
|
+
}
|
|
25
|
+
function hasRequiredVariants(schema, variants, request) {
|
|
26
|
+
return request.context.options.fixes.has(outputFixes.OutputFix.ANYOF_ONEOF_REQUIRED) && isObjectTyped(schema) && requiredKeyLists(schema, variants, request) !== null;
|
|
27
|
+
}
|
|
28
|
+
function requiredVariantsType(previous, schema, variants, request) {
|
|
29
|
+
if (!request.context.options.fixes.has(outputFixes.OutputFix.ANYOF_ONEOF_REQUIRED) || previous === null) {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
const keyLists = isObjectTyped(schema) ? requiredKeyLists(schema, variants, request) : null;
|
|
33
|
+
if (keyLists === null) {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
if (Array.isArray(schema.type)) {
|
|
37
|
+
return previous;
|
|
38
|
+
}
|
|
39
|
+
request.context.footer.requireWithRequired();
|
|
40
|
+
return typeCombinators.unionOf(keyLists.map((keys) => typeCombinators.withRequiredKeys(previous, keys)));
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
exports.hasRequiredVariants = hasRequiredVariants;
|
|
44
|
+
exports.requiredVariantsType = requiredVariantsType;
|
|
45
|
+
//# sourceMappingURL=required-variants.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"required-variants.cjs","sources":["../../../../src/application/transform/schema/required-variants.ts"],"sourcesContent":["import type { IrType } from \"../../../domain/ir/nodes.js\";\nimport type { Schema, SchemaObject } from \"../../../domain/openapi/schema-object.js\";\nimport { OutputFix } from \"../../../domain/output-fixes.js\";\nimport { unionOf, withRequiredKeys } from \"../type-combinators.js\";\nimport { isKeptProperty } from \"./object-type.js\";\nimport type { SchemaRequest } from \"./schema-rule.js\";\n\n/**\n * The `anyof-oneof-required` fix. `anyOf: [{ required: [a] }, { required: [b] }]` next to\n * `properties` says which of the properties must be there. Each such variant has no type of its\n * own (`unknown`), so the original gives `Props | unknown`, which is `unknown`. With the fix each\n * variant is the parent with its keys required:\n * `WithRequired<Props, \"a\"> | WithRequired<Props, \"b\">`.\n */\n\n/** Keywords that do not change a value's type: a variant of these and `required` counts. */\nconst ANNOTATION_KEYS: ReadonlySet<string> = new Set([\"required\", \"description\", \"title\"]);\n\n/** The `required` keys of a variant that has nothing else, or null for any other variant. */\nfunction requiredOnlyKeys(variant: Schema): readonly string[] | null {\n if (typeof variant !== \"object\" || variant === null || \"$ref\" in variant) {\n return null;\n }\n const { required } = variant as SchemaObject;\n const isRequiredOnly = Object.keys(variant).every((key) => ANNOTATION_KEYS.has(key));\n return isRequiredOnly && Array.isArray(required) && required.length > 0 ? required : null;\n}\n\n/** Whether the schema's type is an object: no `type`, `object`, or a list with `object`. */\nfunction isObjectTyped(schema: SchemaObject): boolean {\n const { type } = schema;\n return (\n type === undefined || type === \"object\" || (Array.isArray(type) && type.includes(\"object\"))\n );\n}\n\n/** The variants' key lists, or null unless each requires only properties the type keeps. */\nfunction requiredKeyLists(\n schema: SchemaObject,\n variants: readonly Schema[],\n request: SchemaRequest,\n): (readonly string[])[] | null {\n const keyLists = variants.map(requiredOnlyKeys);\n // A key of a property the type leaves out (`--exclude-deprecated`) is no key of `WithRequired`.\n const isApplicable =\n keyLists.length > 0 &&\n keyLists.every((keys) => keys?.every((key) => isKeptProperty(schema, key, request)) === true);\n return isApplicable ? (keyLists as (readonly string[])[]) : null;\n}\n\n/** Whether the fix gives `variants` of the schema their keys of its properties. */\nexport function hasRequiredVariants(\n schema: SchemaObject,\n variants: readonly Schema[],\n request: SchemaRequest,\n): boolean {\n return (\n request.context.options.fixes.has(OutputFix.ANYOF_ONEOF_REQUIRED) &&\n isObjectTyped(schema) &&\n requiredKeyLists(schema, variants, request) !== null\n );\n}\n\n/**\n * The union of the parent type with each variant's keys required, or null where the fix is off\n * or the variants are not all required-only ones over the parent's own, kept properties. Only an\n * object has the keys. For a `type` list, the `object` member has required them already\n * (`multipleTypes`), so the list is the whole type.\n */\nexport function requiredVariantsType(\n previous: IrType | null,\n schema: SchemaObject,\n variants: readonly Schema[],\n request: SchemaRequest,\n): IrType | null {\n if (!request.context.options.fixes.has(OutputFix.ANYOF_ONEOF_REQUIRED) || previous === null) {\n return null;\n }\n const keyLists = isObjectTyped(schema) ? requiredKeyLists(schema, variants, request) : null;\n if (keyLists === null) {\n return null;\n }\n if (Array.isArray(schema.type)) {\n return previous;\n }\n request.context.footer.requireWithRequired();\n return unionOf(keyLists.map((keys) => withRequiredKeys(previous, keys)));\n}\n"],"names":["isKeptProperty","OutputFix","unionOf","withRequiredKeys"],"mappings":";;;;;;AAgBA,MAAM,kCAAuC,IAAI,GAAA,CAAI,CAAC,UAAA,EAAY,aAAA,EAAe,OAAO,CAAC,CAAA;AAGzF,SAAS,iBAAiB,OAAA,EAA2C;AACnE,EAAA,IAAI,OAAO,OAAA,KAAY,QAAA,IAAY,OAAA,KAAY,IAAA,IAAQ,UAAU,OAAA,EAAS;AACxE,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAM,EAAE,UAAS,GAAI,OAAA;AACrB,EAAA,MAAM,cAAA,GAAiB,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,KAAA,CAAM,CAAC,GAAA,KAAQ,eAAA,CAAgB,GAAA,CAAI,GAAG,CAAC,CAAA;AACnF,EAAA,OAAO,cAAA,IAAkB,MAAM,OAAA,CAAQ,QAAQ,KAAK,QAAA,CAAS,MAAA,GAAS,IAAI,QAAA,GAAW,IAAA;AACvF;AAGA,SAAS,cAAc,MAAA,EAA+B;AACpD,EAAA,MAAM,EAAE,MAAK,GAAI,MAAA;AACjB,EAAA,OACE,IAAA,KAAS,MAAA,IAAa,IAAA,KAAS,QAAA,IAAa,KAAA,CAAM,QAAQ,IAAI,CAAA,IAAK,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA;AAE7F;AAGA,SAAS,gBAAA,CACP,MAAA,EACA,QAAA,EACA,OAAA,EAC8B;AAC9B,EAAA,MAAM,QAAA,GAAW,QAAA,CAAS,GAAA,CAAI,gBAAgB,CAAA;AAE9C,EAAA,MAAM,eACJ,QAAA,CAAS,MAAA,GAAS,KAClB,QAAA,CAAS,KAAA,CAAM,CAAC,IAAA,KAAS,IAAA,EAAM,KAAA,CAAM,CAAC,QAAQA,yBAAA,CAAe,MAAA,EAAQ,KAAK,OAAO,CAAC,MAAM,IAAI,CAAA;AAC9F,EAAA,OAAO,eAAgB,QAAA,GAAqC,IAAA;AAC9D;AAGO,SAAS,mBAAA,CACd,MAAA,EACA,QAAA,EACA,OAAA,EACS;AACT,EAAA,OACE,OAAA,CAAQ,OAAA,CAAQ,OAAA,CAAQ,KAAA,CAAM,IAAIC,qBAAA,CAAU,oBAAoB,CAAA,IAChE,aAAA,CAAc,MAAM,CAAA,IACpB,gBAAA,CAAiB,MAAA,EAAQ,QAAA,EAAU,OAAO,CAAA,KAAM,IAAA;AAEpD;AAQO,SAAS,oBAAA,CACd,QAAA,EACA,MAAA,EACA,QAAA,EACA,OAAA,EACe;AACf,EAAA,IAAI,CAAC,OAAA,CAAQ,OAAA,CAAQ,OAAA,CAAQ,KAAA,CAAM,IAAIA,qBAAA,CAAU,oBAAoB,CAAA,IAAK,QAAA,KAAa,IAAA,EAAM;AAC3F,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAM,QAAA,GAAW,cAAc,MAAM,CAAA,GAAI,iBAAiB,MAAA,EAAQ,QAAA,EAAU,OAAO,CAAA,GAAI,IAAA;AACvF,EAAA,IAAI,aAAa,IAAA,EAAM;AACrB,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,IAAI,CAAA,EAAG;AAC9B,IAAA,OAAO,QAAA;AAAA,EACT;AACA,EAAA,OAAA,CAAQ,OAAA,CAAQ,OAAO,mBAAA,EAAoB;AAC3C,EAAA,OAAOC,uBAAA,CAAQ,SAAS,GAAA,CAAI,CAAC,SAASC,gCAAA,CAAiB,QAAA,EAAU,IAAI,CAAC,CAAC,CAAA;AACzE;;;"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { OutputFix } from '../../../domain/output-fixes.mjs';
|
|
2
|
+
import { unionOf, withRequiredKeys } from '../type-combinators.mjs';
|
|
3
|
+
import { isKeptProperty } from './object-type.mjs';
|
|
4
|
+
|
|
5
|
+
const ANNOTATION_KEYS = /* @__PURE__ */ new Set(["required", "description", "title"]);
|
|
6
|
+
function requiredOnlyKeys(variant) {
|
|
7
|
+
if (typeof variant !== "object" || variant === null || "$ref" in variant) {
|
|
8
|
+
return null;
|
|
9
|
+
}
|
|
10
|
+
const { required } = variant;
|
|
11
|
+
const isRequiredOnly = Object.keys(variant).every((key) => ANNOTATION_KEYS.has(key));
|
|
12
|
+
return isRequiredOnly && Array.isArray(required) && required.length > 0 ? required : null;
|
|
13
|
+
}
|
|
14
|
+
function isObjectTyped(schema) {
|
|
15
|
+
const { type } = schema;
|
|
16
|
+
return type === void 0 || type === "object" || Array.isArray(type) && type.includes("object");
|
|
17
|
+
}
|
|
18
|
+
function requiredKeyLists(schema, variants, request) {
|
|
19
|
+
const keyLists = variants.map(requiredOnlyKeys);
|
|
20
|
+
const isApplicable = keyLists.length > 0 && keyLists.every((keys) => keys?.every((key) => isKeptProperty(schema, key, request)) === true);
|
|
21
|
+
return isApplicable ? keyLists : null;
|
|
22
|
+
}
|
|
23
|
+
function hasRequiredVariants(schema, variants, request) {
|
|
24
|
+
return request.context.options.fixes.has(OutputFix.ANYOF_ONEOF_REQUIRED) && isObjectTyped(schema) && requiredKeyLists(schema, variants, request) !== null;
|
|
25
|
+
}
|
|
26
|
+
function requiredVariantsType(previous, schema, variants, request) {
|
|
27
|
+
if (!request.context.options.fixes.has(OutputFix.ANYOF_ONEOF_REQUIRED) || previous === null) {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
const keyLists = isObjectTyped(schema) ? requiredKeyLists(schema, variants, request) : null;
|
|
31
|
+
if (keyLists === null) {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
if (Array.isArray(schema.type)) {
|
|
35
|
+
return previous;
|
|
36
|
+
}
|
|
37
|
+
request.context.footer.requireWithRequired();
|
|
38
|
+
return unionOf(keyLists.map((keys) => withRequiredKeys(previous, keys)));
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export { hasRequiredVariants, requiredVariantsType };
|
|
42
|
+
//# sourceMappingURL=required-variants.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"required-variants.mjs","sources":["../../../../src/application/transform/schema/required-variants.ts"],"sourcesContent":["import type { IrType } from \"../../../domain/ir/nodes.js\";\nimport type { Schema, SchemaObject } from \"../../../domain/openapi/schema-object.js\";\nimport { OutputFix } from \"../../../domain/output-fixes.js\";\nimport { unionOf, withRequiredKeys } from \"../type-combinators.js\";\nimport { isKeptProperty } from \"./object-type.js\";\nimport type { SchemaRequest } from \"./schema-rule.js\";\n\n/**\n * The `anyof-oneof-required` fix. `anyOf: [{ required: [a] }, { required: [b] }]` next to\n * `properties` says which of the properties must be there. Each such variant has no type of its\n * own (`unknown`), so the original gives `Props | unknown`, which is `unknown`. With the fix each\n * variant is the parent with its keys required:\n * `WithRequired<Props, \"a\"> | WithRequired<Props, \"b\">`.\n */\n\n/** Keywords that do not change a value's type: a variant of these and `required` counts. */\nconst ANNOTATION_KEYS: ReadonlySet<string> = new Set([\"required\", \"description\", \"title\"]);\n\n/** The `required` keys of a variant that has nothing else, or null for any other variant. */\nfunction requiredOnlyKeys(variant: Schema): readonly string[] | null {\n if (typeof variant !== \"object\" || variant === null || \"$ref\" in variant) {\n return null;\n }\n const { required } = variant as SchemaObject;\n const isRequiredOnly = Object.keys(variant).every((key) => ANNOTATION_KEYS.has(key));\n return isRequiredOnly && Array.isArray(required) && required.length > 0 ? required : null;\n}\n\n/** Whether the schema's type is an object: no `type`, `object`, or a list with `object`. */\nfunction isObjectTyped(schema: SchemaObject): boolean {\n const { type } = schema;\n return (\n type === undefined || type === \"object\" || (Array.isArray(type) && type.includes(\"object\"))\n );\n}\n\n/** The variants' key lists, or null unless each requires only properties the type keeps. */\nfunction requiredKeyLists(\n schema: SchemaObject,\n variants: readonly Schema[],\n request: SchemaRequest,\n): (readonly string[])[] | null {\n const keyLists = variants.map(requiredOnlyKeys);\n // A key of a property the type leaves out (`--exclude-deprecated`) is no key of `WithRequired`.\n const isApplicable =\n keyLists.length > 0 &&\n keyLists.every((keys) => keys?.every((key) => isKeptProperty(schema, key, request)) === true);\n return isApplicable ? (keyLists as (readonly string[])[]) : null;\n}\n\n/** Whether the fix gives `variants` of the schema their keys of its properties. */\nexport function hasRequiredVariants(\n schema: SchemaObject,\n variants: readonly Schema[],\n request: SchemaRequest,\n): boolean {\n return (\n request.context.options.fixes.has(OutputFix.ANYOF_ONEOF_REQUIRED) &&\n isObjectTyped(schema) &&\n requiredKeyLists(schema, variants, request) !== null\n );\n}\n\n/**\n * The union of the parent type with each variant's keys required, or null where the fix is off\n * or the variants are not all required-only ones over the parent's own, kept properties. Only an\n * object has the keys. For a `type` list, the `object` member has required them already\n * (`multipleTypes`), so the list is the whole type.\n */\nexport function requiredVariantsType(\n previous: IrType | null,\n schema: SchemaObject,\n variants: readonly Schema[],\n request: SchemaRequest,\n): IrType | null {\n if (!request.context.options.fixes.has(OutputFix.ANYOF_ONEOF_REQUIRED) || previous === null) {\n return null;\n }\n const keyLists = isObjectTyped(schema) ? requiredKeyLists(schema, variants, request) : null;\n if (keyLists === null) {\n return null;\n }\n if (Array.isArray(schema.type)) {\n return previous;\n }\n request.context.footer.requireWithRequired();\n return unionOf(keyLists.map((keys) => withRequiredKeys(previous, keys)));\n}\n"],"names":[],"mappings":";;;;AAgBA,MAAM,kCAAuC,IAAI,GAAA,CAAI,CAAC,UAAA,EAAY,aAAA,EAAe,OAAO,CAAC,CAAA;AAGzF,SAAS,iBAAiB,OAAA,EAA2C;AACnE,EAAA,IAAI,OAAO,OAAA,KAAY,QAAA,IAAY,OAAA,KAAY,IAAA,IAAQ,UAAU,OAAA,EAAS;AACxE,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAM,EAAE,UAAS,GAAI,OAAA;AACrB,EAAA,MAAM,cAAA,GAAiB,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,KAAA,CAAM,CAAC,GAAA,KAAQ,eAAA,CAAgB,GAAA,CAAI,GAAG,CAAC,CAAA;AACnF,EAAA,OAAO,cAAA,IAAkB,MAAM,OAAA,CAAQ,QAAQ,KAAK,QAAA,CAAS,MAAA,GAAS,IAAI,QAAA,GAAW,IAAA;AACvF;AAGA,SAAS,cAAc,MAAA,EAA+B;AACpD,EAAA,MAAM,EAAE,MAAK,GAAI,MAAA;AACjB,EAAA,OACE,IAAA,KAAS,MAAA,IAAa,IAAA,KAAS,QAAA,IAAa,KAAA,CAAM,QAAQ,IAAI,CAAA,IAAK,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA;AAE7F;AAGA,SAAS,gBAAA,CACP,MAAA,EACA,QAAA,EACA,OAAA,EAC8B;AAC9B,EAAA,MAAM,QAAA,GAAW,QAAA,CAAS,GAAA,CAAI,gBAAgB,CAAA;AAE9C,EAAA,MAAM,eACJ,QAAA,CAAS,MAAA,GAAS,KAClB,QAAA,CAAS,KAAA,CAAM,CAAC,IAAA,KAAS,IAAA,EAAM,KAAA,CAAM,CAAC,QAAQ,cAAA,CAAe,MAAA,EAAQ,KAAK,OAAO,CAAC,MAAM,IAAI,CAAA;AAC9F,EAAA,OAAO,eAAgB,QAAA,GAAqC,IAAA;AAC9D;AAGO,SAAS,mBAAA,CACd,MAAA,EACA,QAAA,EACA,OAAA,EACS;AACT,EAAA,OACE,OAAA,CAAQ,OAAA,CAAQ,OAAA,CAAQ,KAAA,CAAM,IAAI,SAAA,CAAU,oBAAoB,CAAA,IAChE,aAAA,CAAc,MAAM,CAAA,IACpB,gBAAA,CAAiB,MAAA,EAAQ,QAAA,EAAU,OAAO,CAAA,KAAM,IAAA;AAEpD;AAQO,SAAS,oBAAA,CACd,QAAA,EACA,MAAA,EACA,QAAA,EACA,OAAA,EACe;AACf,EAAA,IAAI,CAAC,OAAA,CAAQ,OAAA,CAAQ,OAAA,CAAQ,KAAA,CAAM,IAAI,SAAA,CAAU,oBAAoB,CAAA,IAAK,QAAA,KAAa,IAAA,EAAM;AAC3F,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAM,QAAA,GAAW,cAAc,MAAM,CAAA,GAAI,iBAAiB,MAAA,EAAQ,QAAA,EAAU,OAAO,CAAA,GAAI,IAAA;AACvF,EAAA,IAAI,aAAa,IAAA,EAAM;AACrB,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,IAAI,CAAA,EAAG;AAC9B,IAAA,OAAO,QAAA;AAAA,EACT;AACA,EAAA,OAAA,CAAQ,OAAA,CAAQ,OAAO,mBAAA,EAAoB;AAC3C,EAAA,OAAO,OAAA,CAAQ,SAAS,GAAA,CAAI,CAAC,SAAS,gBAAA,CAAiB,QAAA,EAAU,IAAI,CAAC,CAAC,CAAA;AACzE;;"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const errors = require('../../../domain/errors.cjs');
|
|
4
|
+
const constructors = require('../../../domain/ir/constructors.cjs');
|
|
5
|
+
const literalType = require('../literal-type.cjs');
|
|
6
|
+
const pointerType = require('../ref-pointer/pointer-type.cjs');
|
|
7
|
+
const sharedTypes = require('../shared-types.cjs');
|
|
8
|
+
const compositionType = require('./composition-type.cjs');
|
|
9
|
+
const enumRule = require('./enum-rule.cjs');
|
|
10
|
+
|
|
11
|
+
class InvalidSchemaError extends errors.OpenAPITypesafeError {
|
|
12
|
+
constructor(schema, path) {
|
|
13
|
+
const received = Array.isArray(schema) ? "Array" : typeof schema;
|
|
14
|
+
super({
|
|
15
|
+
code: errors.ERROR_CODES.SCHEMA_OBJECT_INVALID,
|
|
16
|
+
message: `Expected SchemaObject, received ${received} at ${path}`,
|
|
17
|
+
details: { path, received }
|
|
18
|
+
});
|
|
19
|
+
this.name = "InvalidSchemaError";
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
const SHAPE_RULES = [
|
|
23
|
+
{
|
|
24
|
+
name: "$ref",
|
|
25
|
+
matches: (schema) => "$ref" in schema,
|
|
26
|
+
transform: (schema, request2) => pointerType.schemaRefType(schema.$ref, request2)
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
name: "const",
|
|
30
|
+
matches: (schema) => schema.const !== null && schema.const !== void 0,
|
|
31
|
+
transform: (schema) => literalType.literalType(schema.const)
|
|
32
|
+
},
|
|
33
|
+
enumRule.enumRule
|
|
34
|
+
];
|
|
35
|
+
function checkSchema(schema, path) {
|
|
36
|
+
if (!schema) {
|
|
37
|
+
return { type: constructors.irKeyword("never") };
|
|
38
|
+
}
|
|
39
|
+
if (schema === true) {
|
|
40
|
+
return { type: sharedTypes.UNKNOWN_TYPE };
|
|
41
|
+
}
|
|
42
|
+
if (Array.isArray(schema) || typeof schema !== "object") {
|
|
43
|
+
throw new InvalidSchemaError(schema, path);
|
|
44
|
+
}
|
|
45
|
+
return { schema };
|
|
46
|
+
}
|
|
47
|
+
function request(location, context, isFromAdditionalProperties) {
|
|
48
|
+
return {
|
|
49
|
+
location,
|
|
50
|
+
context,
|
|
51
|
+
isFromAdditionalProperties,
|
|
52
|
+
transformNested: (schema, nestedLocation, isNestedFromAdditionalProperties = false) => transformSchema(schema, nestedLocation, context, isNestedFromAdditionalProperties)
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
function transformSchemaShape(schema, location, context, isFromAdditionalProperties = false) {
|
|
56
|
+
const checked = checkSchema(schema, location.path);
|
|
57
|
+
if ("type" in checked) {
|
|
58
|
+
return checked.type;
|
|
59
|
+
}
|
|
60
|
+
const current = request(location, context, isFromAdditionalProperties);
|
|
61
|
+
const rule = SHAPE_RULES.find((candidate) => candidate.matches(checked.schema));
|
|
62
|
+
return rule ? rule.transform(checked.schema, current) : compositionType.compositionType(checked.schema, current);
|
|
63
|
+
}
|
|
64
|
+
function transformSchema(schema, location, context, isFromAdditionalProperties = false) {
|
|
65
|
+
const type = transformSchemaShape(schema, location, context, isFromAdditionalProperties);
|
|
66
|
+
return context.callbacks.postTransform(type, location) ?? type;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
exports.InvalidSchemaError = InvalidSchemaError;
|
|
70
|
+
exports.transformSchema = transformSchema;
|
|
71
|
+
exports.transformSchemaShape = transformSchemaShape;
|
|
72
|
+
//# sourceMappingURL=schema-transform.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-transform.cjs","sources":["../../../../src/application/transform/schema/schema-transform.ts"],"sourcesContent":["import { ERROR_CODES, OpenAPITypesafeError } from \"../../../domain/errors.js\";\nimport { irKeyword } from \"../../../domain/ir/constructors.js\";\nimport type { IrType } from \"../../../domain/ir/nodes.js\";\nimport type { Schema, SchemaObject } from \"../../../domain/openapi/schema-object.js\";\nimport { literalType } from \"../literal-type.js\";\nimport { schemaRefType } from \"../ref-pointer/pointer-type.js\";\nimport { UNKNOWN_TYPE } from \"../shared-types.js\";\nimport { compositionType } from \"./composition-type.js\";\nimport { enumRule } from \"./enum-rule.js\";\nimport type { SchemaContext, SchemaLocation } from \"./schema-context.js\";\nimport type { SchemaRequest, SchemaRule } from \"./schema-rule.js\";\n\nexport class InvalidSchemaError extends OpenAPITypesafeError {\n constructor(schema: unknown, path: string | undefined) {\n const received = Array.isArray(schema) ? \"Array\" : typeof schema;\n super({\n code: ERROR_CODES.SCHEMA_OBJECT_INVALID,\n message: `Expected SchemaObject, received ${received} at ${path}`,\n details: { path, received },\n });\n this.name = \"InvalidSchemaError\";\n }\n}\n\n/** Shape rules in the original precedence; composition handles everything they do not match. */\nconst SHAPE_RULES: readonly SchemaRule[] = [\n {\n name: \"$ref\",\n matches: (schema) => \"$ref\" in schema,\n transform: (schema, request) => schemaRefType((schema as { $ref: string }).$ref, request),\n },\n {\n name: \"const\",\n matches: (schema) => schema.const !== null && schema.const !== undefined,\n transform: (schema) => literalType(schema.const),\n },\n enumRule,\n];\n\n/** A schema checked for its input shape, or the type of a non-object schema. */\ntype CheckedSchema = { readonly type: IrType } | { readonly schema: SchemaObject };\n\n/** A missing schema is `never`; `true` allows anything; other non-objects are invalid. */\nfunction checkSchema(schema: unknown, path: string | undefined): CheckedSchema {\n if (!schema) {\n return { type: irKeyword(\"never\") };\n }\n if (schema === true) {\n return { type: UNKNOWN_TYPE };\n }\n if (Array.isArray(schema) || typeof schema !== \"object\") {\n throw new InvalidSchemaError(schema, path);\n }\n return { schema: schema as SchemaObject };\n}\n\nfunction request(\n location: SchemaLocation,\n context: SchemaContext,\n isFromAdditionalProperties: boolean,\n): SchemaRequest {\n return {\n location,\n context,\n isFromAdditionalProperties,\n transformNested: (schema, nestedLocation, isNestedFromAdditionalProperties = false) =>\n transformSchema(schema, nestedLocation, context, isNestedFromAdditionalProperties),\n };\n}\n\n/**\n * Transform a schema without the `postTransform` callback (the original\n * `transformSchemaObjectWithComposition`). Nested schemas still get `postTransform`.\n */\nexport function transformSchemaShape(\n schema: Schema | null | undefined,\n location: SchemaLocation,\n context: SchemaContext,\n isFromAdditionalProperties = false,\n): IrType {\n const checked = checkSchema(schema, location.path);\n if (\"type\" in checked) {\n return checked.type;\n }\n const current = request(location, context, isFromAdditionalProperties);\n const rule = SHAPE_RULES.find((candidate) => candidate.matches(checked.schema));\n return rule ? rule.transform(checked.schema, current) : compositionType(checked.schema, current);\n}\n\n/** Transform a schema to IR, then apply `postTransform` (the original `transformSchemaObject`). */\nexport function transformSchema(\n schema: Schema | null | undefined,\n location: SchemaLocation,\n context: SchemaContext,\n isFromAdditionalProperties = false,\n): IrType {\n const type = transformSchemaShape(schema, location, context, isFromAdditionalProperties);\n return context.callbacks.postTransform(type, location) ?? type;\n}\n"],"names":["OpenAPITypesafeError","ERROR_CODES","request","schemaRefType","literalType","enumRule","irKeyword","UNKNOWN_TYPE","compositionType"],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { OpenAPITypesafeError, ERROR_CODES } from '../../../domain/errors.mjs';
|
|
2
|
+
import { irKeyword } from '../../../domain/ir/constructors.mjs';
|
|
3
|
+
import { literalType } from '../literal-type.mjs';
|
|
4
|
+
import { schemaRefType } from '../ref-pointer/pointer-type.mjs';
|
|
5
|
+
import { UNKNOWN_TYPE } from '../shared-types.mjs';
|
|
6
|
+
import { compositionType } from './composition-type.mjs';
|
|
7
|
+
import { enumRule } from './enum-rule.mjs';
|
|
8
|
+
|
|
9
|
+
class InvalidSchemaError extends OpenAPITypesafeError {
|
|
10
|
+
constructor(schema, path) {
|
|
11
|
+
const received = Array.isArray(schema) ? "Array" : typeof schema;
|
|
12
|
+
super({
|
|
13
|
+
code: ERROR_CODES.SCHEMA_OBJECT_INVALID,
|
|
14
|
+
message: `Expected SchemaObject, received ${received} at ${path}`,
|
|
15
|
+
details: { path, received }
|
|
16
|
+
});
|
|
17
|
+
this.name = "InvalidSchemaError";
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
const SHAPE_RULES = [
|
|
21
|
+
{
|
|
22
|
+
name: "$ref",
|
|
23
|
+
matches: (schema) => "$ref" in schema,
|
|
24
|
+
transform: (schema, request2) => schemaRefType(schema.$ref, request2)
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
name: "const",
|
|
28
|
+
matches: (schema) => schema.const !== null && schema.const !== void 0,
|
|
29
|
+
transform: (schema) => literalType(schema.const)
|
|
30
|
+
},
|
|
31
|
+
enumRule
|
|
32
|
+
];
|
|
33
|
+
function checkSchema(schema, path) {
|
|
34
|
+
if (!schema) {
|
|
35
|
+
return { type: irKeyword("never") };
|
|
36
|
+
}
|
|
37
|
+
if (schema === true) {
|
|
38
|
+
return { type: UNKNOWN_TYPE };
|
|
39
|
+
}
|
|
40
|
+
if (Array.isArray(schema) || typeof schema !== "object") {
|
|
41
|
+
throw new InvalidSchemaError(schema, path);
|
|
42
|
+
}
|
|
43
|
+
return { schema };
|
|
44
|
+
}
|
|
45
|
+
function request(location, context, isFromAdditionalProperties) {
|
|
46
|
+
return {
|
|
47
|
+
location,
|
|
48
|
+
context,
|
|
49
|
+
isFromAdditionalProperties,
|
|
50
|
+
transformNested: (schema, nestedLocation, isNestedFromAdditionalProperties = false) => transformSchema(schema, nestedLocation, context, isNestedFromAdditionalProperties)
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
function transformSchemaShape(schema, location, context, isFromAdditionalProperties = false) {
|
|
54
|
+
const checked = checkSchema(schema, location.path);
|
|
55
|
+
if ("type" in checked) {
|
|
56
|
+
return checked.type;
|
|
57
|
+
}
|
|
58
|
+
const current = request(location, context, isFromAdditionalProperties);
|
|
59
|
+
const rule = SHAPE_RULES.find((candidate) => candidate.matches(checked.schema));
|
|
60
|
+
return rule ? rule.transform(checked.schema, current) : compositionType(checked.schema, current);
|
|
61
|
+
}
|
|
62
|
+
function transformSchema(schema, location, context, isFromAdditionalProperties = false) {
|
|
63
|
+
const type = transformSchemaShape(schema, location, context, isFromAdditionalProperties);
|
|
64
|
+
return context.callbacks.postTransform(type, location) ?? type;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export { InvalidSchemaError, transformSchema, transformSchemaShape };
|
|
68
|
+
//# sourceMappingURL=schema-transform.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-transform.mjs","sources":["../../../../src/application/transform/schema/schema-transform.ts"],"sourcesContent":["import { ERROR_CODES, OpenAPITypesafeError } from \"../../../domain/errors.js\";\nimport { irKeyword } from \"../../../domain/ir/constructors.js\";\nimport type { IrType } from \"../../../domain/ir/nodes.js\";\nimport type { Schema, SchemaObject } from \"../../../domain/openapi/schema-object.js\";\nimport { literalType } from \"../literal-type.js\";\nimport { schemaRefType } from \"../ref-pointer/pointer-type.js\";\nimport { UNKNOWN_TYPE } from \"../shared-types.js\";\nimport { compositionType } from \"./composition-type.js\";\nimport { enumRule } from \"./enum-rule.js\";\nimport type { SchemaContext, SchemaLocation } from \"./schema-context.js\";\nimport type { SchemaRequest, SchemaRule } from \"./schema-rule.js\";\n\nexport class InvalidSchemaError extends OpenAPITypesafeError {\n constructor(schema: unknown, path: string | undefined) {\n const received = Array.isArray(schema) ? \"Array\" : typeof schema;\n super({\n code: ERROR_CODES.SCHEMA_OBJECT_INVALID,\n message: `Expected SchemaObject, received ${received} at ${path}`,\n details: { path, received },\n });\n this.name = \"InvalidSchemaError\";\n }\n}\n\n/** Shape rules in the original precedence; composition handles everything they do not match. */\nconst SHAPE_RULES: readonly SchemaRule[] = [\n {\n name: \"$ref\",\n matches: (schema) => \"$ref\" in schema,\n transform: (schema, request) => schemaRefType((schema as { $ref: string }).$ref, request),\n },\n {\n name: \"const\",\n matches: (schema) => schema.const !== null && schema.const !== undefined,\n transform: (schema) => literalType(schema.const),\n },\n enumRule,\n];\n\n/** A schema checked for its input shape, or the type of a non-object schema. */\ntype CheckedSchema = { readonly type: IrType } | { readonly schema: SchemaObject };\n\n/** A missing schema is `never`; `true` allows anything; other non-objects are invalid. */\nfunction checkSchema(schema: unknown, path: string | undefined): CheckedSchema {\n if (!schema) {\n return { type: irKeyword(\"never\") };\n }\n if (schema === true) {\n return { type: UNKNOWN_TYPE };\n }\n if (Array.isArray(schema) || typeof schema !== \"object\") {\n throw new InvalidSchemaError(schema, path);\n }\n return { schema: schema as SchemaObject };\n}\n\nfunction request(\n location: SchemaLocation,\n context: SchemaContext,\n isFromAdditionalProperties: boolean,\n): SchemaRequest {\n return {\n location,\n context,\n isFromAdditionalProperties,\n transformNested: (schema, nestedLocation, isNestedFromAdditionalProperties = false) =>\n transformSchema(schema, nestedLocation, context, isNestedFromAdditionalProperties),\n };\n}\n\n/**\n * Transform a schema without the `postTransform` callback (the original\n * `transformSchemaObjectWithComposition`). Nested schemas still get `postTransform`.\n */\nexport function transformSchemaShape(\n schema: Schema | null | undefined,\n location: SchemaLocation,\n context: SchemaContext,\n isFromAdditionalProperties = false,\n): IrType {\n const checked = checkSchema(schema, location.path);\n if (\"type\" in checked) {\n return checked.type;\n }\n const current = request(location, context, isFromAdditionalProperties);\n const rule = SHAPE_RULES.find((candidate) => candidate.matches(checked.schema));\n return rule ? rule.transform(checked.schema, current) : compositionType(checked.schema, current);\n}\n\n/** Transform a schema to IR, then apply `postTransform` (the original `transformSchemaObject`). */\nexport function transformSchema(\n schema: Schema | null | undefined,\n location: SchemaLocation,\n context: SchemaContext,\n isFromAdditionalProperties = false,\n): IrType {\n const type = transformSchemaShape(schema, location, context, isFromAdditionalProperties);\n return context.callbacks.postTransform(type, location) ?? type;\n}\n"],"names":["request"],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const constructors = require('../../../domain/ir/constructors.cjs');
|
|
4
|
+
const outputFixes = require('../../../domain/output-fixes.cjs');
|
|
5
|
+
const helperTypes = require('../helper-types.cjs');
|
|
6
|
+
const sharedTypes = require('../shared-types.cjs');
|
|
7
|
+
const typeCombinators = require('../type-combinators.cjs');
|
|
8
|
+
|
|
9
|
+
function unevaluatedSchemaOf(schema, request) {
|
|
10
|
+
const { unevaluatedProperties } = schema;
|
|
11
|
+
if (!request.context.options.fixes.has(outputFixes.OutputFix.UNEVALUATED_PROPERTIES) || unevaluatedProperties === void 0 || unevaluatedProperties === false || schema.additionalProperties !== void 0) {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
return schema.type === void 0 || schema.type === "object" ? unevaluatedProperties : null;
|
|
15
|
+
}
|
|
16
|
+
function isAnySchema(schema) {
|
|
17
|
+
return schema === true || typeof schema === "object" && Object.keys(schema).length === 0;
|
|
18
|
+
}
|
|
19
|
+
function memberValueTypes(member) {
|
|
20
|
+
if (member.kind === "indexSignature") {
|
|
21
|
+
return [member.type];
|
|
22
|
+
}
|
|
23
|
+
return member.isOptional ? [member.type, constructors.irKeyword("undefined")] : [member.type];
|
|
24
|
+
}
|
|
25
|
+
function declaredValueTypes(type, request) {
|
|
26
|
+
switch (type.kind) {
|
|
27
|
+
case "object":
|
|
28
|
+
return type.members.flatMap(memberValueTypes);
|
|
29
|
+
case "union":
|
|
30
|
+
case "intersection":
|
|
31
|
+
return type.types.flatMap((member) => declaredValueTypes(member, request));
|
|
32
|
+
case "reference":
|
|
33
|
+
case "indexedAccess":
|
|
34
|
+
case "raw":
|
|
35
|
+
request.context.footer.requirePropertyValues();
|
|
36
|
+
return [constructors.irReference(helperTypes.HELPER_TYPES.propertyValues.name, [type])];
|
|
37
|
+
case "keyword":
|
|
38
|
+
case "stringLiteral":
|
|
39
|
+
case "numberLiteral":
|
|
40
|
+
case "booleanLiteral":
|
|
41
|
+
case "array":
|
|
42
|
+
case "tuple":
|
|
43
|
+
case "readonly":
|
|
44
|
+
return [];
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
function unevaluatedPropertiesType(schema, composed, request) {
|
|
48
|
+
const unevaluated = unevaluatedSchemaOf(schema, request);
|
|
49
|
+
if (unevaluated === null) {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
const valueTypes = isAnySchema(unevaluated) ? [sharedTypes.UNKNOWN_TYPE] : [
|
|
53
|
+
request.transformNested(unevaluated, request.location, true),
|
|
54
|
+
...composed === null ? [] : declaredValueTypes(composed, request)
|
|
55
|
+
];
|
|
56
|
+
const { immutable } = request.context.options;
|
|
57
|
+
return constructors.irObject([constructors.irStringIndexSignature("key", typeCombinators.unionOf(valueTypes), immutable)]);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
exports.unevaluatedPropertiesType = unevaluatedPropertiesType;
|
|
61
|
+
//# sourceMappingURL=unevaluated-properties.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unevaluated-properties.cjs","sources":["../../../../src/application/transform/schema/unevaluated-properties.ts"],"sourcesContent":["import {\n irKeyword,\n irObject,\n irReference,\n irStringIndexSignature,\n} from \"../../../domain/ir/constructors.js\";\nimport type { IrMember, IrType } from \"../../../domain/ir/nodes.js\";\nimport type { Schema, SchemaObject } from \"../../../domain/openapi/schema-object.js\";\nimport { OutputFix } from \"../../../domain/output-fixes.js\";\nimport { HELPER_TYPES } from \"../helper-types.js\";\nimport { UNKNOWN_TYPE } from \"../shared-types.js\";\nimport { unionOf } from \"../type-combinators.js\";\nimport type { SchemaRequest } from \"./schema-rule.js\";\n\n/**\n * The `unevaluated-properties` fix (ADR-021, roadmap R11; upstream #2839, #2880). Without it\n * `unevaluatedProperties` is ignored, so its value type is lost and an object with only that\n * keyword is `Record<string, never>`. With it the composed type is intersected with an index\n * signature, as `additionalProperties` gives: every key that no other keyword declares has the\n * `unevaluatedProperties` type. TypeScript checks that index signature against every key of a\n * value, declared ones included, so its type also holds the types of the declared properties\n * (of this schema and of its `allOf`, `anyOf` and `oneOf` members); otherwise a valid value would\n * not be assignable. `false` adds nothing, like `additionalProperties: false`: TypeScript has no\n * closed object type.\n */\n\n/**\n * Whether `unevaluatedProperties` applies. It types the keys left over at this level, so it\n * does nothing next to `additionalProperties` (which already types them all), and only an object\n * schema has keys. A `type` list is typed one listed type at a time, so its object gets it.\n */\nfunction unevaluatedSchemaOf(schema: SchemaObject, request: SchemaRequest): Schema | null {\n const { unevaluatedProperties } = schema;\n if (\n !request.context.options.fixes.has(OutputFix.UNEVALUATED_PROPERTIES) ||\n unevaluatedProperties === undefined ||\n unevaluatedProperties === false ||\n schema.additionalProperties !== undefined\n ) {\n return null;\n }\n return schema.type === undefined || schema.type === \"object\" ? unevaluatedProperties : null;\n}\n\nfunction isAnySchema(schema: Schema): boolean {\n return schema === true || (typeof schema === \"object\" && Object.keys(schema).length === 0);\n}\n\nfunction memberValueTypes(member: IrMember): IrType[] {\n if (member.kind === \"indexSignature\") {\n return [member.type];\n }\n return member.isOptional ? [member.type, irKeyword(\"undefined\")] : [member.type];\n}\n\n/**\n * The value types a key of the composed type can have, read from its IR: the members of object\n * types, through unions and intersections. A reference (a `$ref`, `Omit`, `WithRequired`) or a raw\n * type is read with `PropertyValues`. Primitives, literals and arrays declare no keys.\n */\nfunction declaredValueTypes(type: IrType, request: SchemaRequest): IrType[] {\n switch (type.kind) {\n case \"object\":\n return type.members.flatMap(memberValueTypes);\n case \"union\":\n case \"intersection\":\n return type.types.flatMap((member) => declaredValueTypes(member, request));\n case \"reference\":\n case \"indexedAccess\":\n case \"raw\":\n request.context.footer.requirePropertyValues();\n return [irReference(HELPER_TYPES.propertyValues.name, [type])];\n case \"keyword\":\n case \"stringLiteral\":\n case \"numberLiteral\":\n case \"booleanLiteral\":\n case \"array\":\n case \"tuple\":\n case \"readonly\":\n return [];\n }\n}\n\n/**\n * The index signature object for `unevaluatedProperties`, given the composed type of the other\n * keywords (null when there is none). Null when the fix is off or the keyword does not apply.\n */\nexport function unevaluatedPropertiesType(\n schema: SchemaObject,\n composed: IrType | null,\n request: SchemaRequest,\n): IrType | null {\n const unevaluated = unevaluatedSchemaOf(schema, request);\n if (unevaluated === null) {\n return null;\n }\n const valueTypes = isAnySchema(unevaluated)\n ? [UNKNOWN_TYPE]\n : [\n request.transformNested(unevaluated, request.location, true),\n ...(composed === null ? [] : declaredValueTypes(composed, request)),\n ];\n const { immutable } = request.context.options;\n return irObject([irStringIndexSignature(\"key\", unionOf(valueTypes), immutable)]);\n}\n"],"names":["OutputFix","irKeyword","irReference","HELPER_TYPES","UNKNOWN_TYPE","irObject","irStringIndexSignature","unionOf"],"mappings":";;;;;;;;AA+BA,SAAS,mBAAA,CAAoB,QAAsB,OAAA,EAAuC;AACxF,EAAA,MAAM,EAAE,uBAAsB,GAAI,MAAA;AAClC,EAAA,IACE,CAAC,OAAA,CAAQ,OAAA,CAAQ,OAAA,CAAQ,MAAM,GAAA,CAAIA,qBAAA,CAAU,sBAAsB,CAAA,IACnE,0BAA0B,MAAA,IAC1B,qBAAA,KAA0B,KAAA,IAC1B,MAAA,CAAO,yBAAyB,MAAA,EAChC;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,OAAO,IAAA,KAAS,MAAA,IAAa,MAAA,CAAO,IAAA,KAAS,WAAW,qBAAA,GAAwB,IAAA;AACzF;AAEA,SAAS,YAAY,MAAA,EAAyB;AAC5C,EAAA,OAAO,MAAA,KAAW,QAAS,OAAO,MAAA,KAAW,YAAY,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,CAAE,MAAA,KAAW,CAAA;AAC1F;AAEA,SAAS,iBAAiB,MAAA,EAA4B;AACpD,EAAA,IAAI,MAAA,CAAO,SAAS,gBAAA,EAAkB;AACpC,IAAA,OAAO,CAAC,OAAO,IAAI,CAAA;AAAA,EACrB;AACA,EAAA,OAAO,MAAA,CAAO,UAAA,GAAa,CAAC,MAAA,CAAO,IAAA,EAAMC,sBAAA,CAAU,WAAW,CAAC,CAAA,GAAI,CAAC,MAAA,CAAO,IAAI,CAAA;AACjF;AAOA,SAAS,kBAAA,CAAmB,MAAc,OAAA,EAAkC;AAC1E,EAAA,QAAQ,KAAK,IAAA;AAAM,IACjB,KAAK,QAAA;AACH,MAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,gBAAgB,CAAA;AAAA,IAC9C,KAAK,OAAA;AAAA,IACL,KAAK,cAAA;AACH,MAAA,OAAO,IAAA,CAAK,MAAM,OAAA,CAAQ,CAAC,WAAW,kBAAA,CAAmB,MAAA,EAAQ,OAAO,CAAC,CAAA;AAAA,IAC3E,KAAK,WAAA;AAAA,IACL,KAAK,eAAA;AAAA,IACL,KAAK,KAAA;AACH,MAAA,OAAA,CAAQ,OAAA,CAAQ,OAAO,qBAAA,EAAsB;AAC7C,MAAA,OAAO,CAACC,yBAAYC,wBAAA,CAAa,cAAA,CAAe,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;AAAA,IAC/D,KAAK,SAAA;AAAA,IACL,KAAK,eAAA;AAAA,IACL,KAAK,eAAA;AAAA,IACL,KAAK,gBAAA;AAAA,IACL,KAAK,OAAA;AAAA,IACL,KAAK,OAAA;AAAA,IACL,KAAK,UAAA;AACH,MAAA,OAAO,EAAC;AAAA;AAEd;AAMO,SAAS,yBAAA,CACd,MAAA,EACA,QAAA,EACA,OAAA,EACe;AACf,EAAA,MAAM,WAAA,GAAc,mBAAA,CAAoB,MAAA,EAAQ,OAAO,CAAA;AACvD,EAAA,IAAI,gBAAgB,IAAA,EAAM;AACxB,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAM,aAAa,WAAA,CAAY,WAAW,CAAA,GACtC,CAACC,wBAAY,CAAA,GACb;AAAA,IACE,OAAA,CAAQ,eAAA,CAAgB,WAAA,EAAa,OAAA,CAAQ,UAAU,IAAI,CAAA;AAAA,IAC3D,GAAI,QAAA,KAAa,IAAA,GAAO,EAAC,GAAI,kBAAA,CAAmB,UAAU,OAAO;AAAA,GACnE;AACJ,EAAA,MAAM,EAAE,SAAA,EAAU,GAAI,OAAA,CAAQ,OAAA,CAAQ,OAAA;AACtC,EAAA,OAAOC,qBAAA,CAAS,CAACC,mCAAA,CAAuB,KAAA,EAAOC,wBAAQ,UAAU,CAAA,EAAG,SAAS,CAAC,CAAC,CAAA;AACjF;;"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { irObject, irStringIndexSignature, irReference, irKeyword } from '../../../domain/ir/constructors.mjs';
|
|
2
|
+
import { OutputFix } from '../../../domain/output-fixes.mjs';
|
|
3
|
+
import { HELPER_TYPES } from '../helper-types.mjs';
|
|
4
|
+
import { UNKNOWN_TYPE } from '../shared-types.mjs';
|
|
5
|
+
import { unionOf } from '../type-combinators.mjs';
|
|
6
|
+
|
|
7
|
+
function unevaluatedSchemaOf(schema, request) {
|
|
8
|
+
const { unevaluatedProperties } = schema;
|
|
9
|
+
if (!request.context.options.fixes.has(OutputFix.UNEVALUATED_PROPERTIES) || unevaluatedProperties === void 0 || unevaluatedProperties === false || schema.additionalProperties !== void 0) {
|
|
10
|
+
return null;
|
|
11
|
+
}
|
|
12
|
+
return schema.type === void 0 || schema.type === "object" ? unevaluatedProperties : null;
|
|
13
|
+
}
|
|
14
|
+
function isAnySchema(schema) {
|
|
15
|
+
return schema === true || typeof schema === "object" && Object.keys(schema).length === 0;
|
|
16
|
+
}
|
|
17
|
+
function memberValueTypes(member) {
|
|
18
|
+
if (member.kind === "indexSignature") {
|
|
19
|
+
return [member.type];
|
|
20
|
+
}
|
|
21
|
+
return member.isOptional ? [member.type, irKeyword("undefined")] : [member.type];
|
|
22
|
+
}
|
|
23
|
+
function declaredValueTypes(type, request) {
|
|
24
|
+
switch (type.kind) {
|
|
25
|
+
case "object":
|
|
26
|
+
return type.members.flatMap(memberValueTypes);
|
|
27
|
+
case "union":
|
|
28
|
+
case "intersection":
|
|
29
|
+
return type.types.flatMap((member) => declaredValueTypes(member, request));
|
|
30
|
+
case "reference":
|
|
31
|
+
case "indexedAccess":
|
|
32
|
+
case "raw":
|
|
33
|
+
request.context.footer.requirePropertyValues();
|
|
34
|
+
return [irReference(HELPER_TYPES.propertyValues.name, [type])];
|
|
35
|
+
case "keyword":
|
|
36
|
+
case "stringLiteral":
|
|
37
|
+
case "numberLiteral":
|
|
38
|
+
case "booleanLiteral":
|
|
39
|
+
case "array":
|
|
40
|
+
case "tuple":
|
|
41
|
+
case "readonly":
|
|
42
|
+
return [];
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function unevaluatedPropertiesType(schema, composed, request) {
|
|
46
|
+
const unevaluated = unevaluatedSchemaOf(schema, request);
|
|
47
|
+
if (unevaluated === null) {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
const valueTypes = isAnySchema(unevaluated) ? [UNKNOWN_TYPE] : [
|
|
51
|
+
request.transformNested(unevaluated, request.location, true),
|
|
52
|
+
...composed === null ? [] : declaredValueTypes(composed, request)
|
|
53
|
+
];
|
|
54
|
+
const { immutable } = request.context.options;
|
|
55
|
+
return irObject([irStringIndexSignature("key", unionOf(valueTypes), immutable)]);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export { unevaluatedPropertiesType };
|
|
59
|
+
//# sourceMappingURL=unevaluated-properties.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unevaluated-properties.mjs","sources":["../../../../src/application/transform/schema/unevaluated-properties.ts"],"sourcesContent":["import {\n irKeyword,\n irObject,\n irReference,\n irStringIndexSignature,\n} from \"../../../domain/ir/constructors.js\";\nimport type { IrMember, IrType } from \"../../../domain/ir/nodes.js\";\nimport type { Schema, SchemaObject } from \"../../../domain/openapi/schema-object.js\";\nimport { OutputFix } from \"../../../domain/output-fixes.js\";\nimport { HELPER_TYPES } from \"../helper-types.js\";\nimport { UNKNOWN_TYPE } from \"../shared-types.js\";\nimport { unionOf } from \"../type-combinators.js\";\nimport type { SchemaRequest } from \"./schema-rule.js\";\n\n/**\n * The `unevaluated-properties` fix (ADR-021, roadmap R11; upstream #2839, #2880). Without it\n * `unevaluatedProperties` is ignored, so its value type is lost and an object with only that\n * keyword is `Record<string, never>`. With it the composed type is intersected with an index\n * signature, as `additionalProperties` gives: every key that no other keyword declares has the\n * `unevaluatedProperties` type. TypeScript checks that index signature against every key of a\n * value, declared ones included, so its type also holds the types of the declared properties\n * (of this schema and of its `allOf`, `anyOf` and `oneOf` members); otherwise a valid value would\n * not be assignable. `false` adds nothing, like `additionalProperties: false`: TypeScript has no\n * closed object type.\n */\n\n/**\n * Whether `unevaluatedProperties` applies. It types the keys left over at this level, so it\n * does nothing next to `additionalProperties` (which already types them all), and only an object\n * schema has keys. A `type` list is typed one listed type at a time, so its object gets it.\n */\nfunction unevaluatedSchemaOf(schema: SchemaObject, request: SchemaRequest): Schema | null {\n const { unevaluatedProperties } = schema;\n if (\n !request.context.options.fixes.has(OutputFix.UNEVALUATED_PROPERTIES) ||\n unevaluatedProperties === undefined ||\n unevaluatedProperties === false ||\n schema.additionalProperties !== undefined\n ) {\n return null;\n }\n return schema.type === undefined || schema.type === \"object\" ? unevaluatedProperties : null;\n}\n\nfunction isAnySchema(schema: Schema): boolean {\n return schema === true || (typeof schema === \"object\" && Object.keys(schema).length === 0);\n}\n\nfunction memberValueTypes(member: IrMember): IrType[] {\n if (member.kind === \"indexSignature\") {\n return [member.type];\n }\n return member.isOptional ? [member.type, irKeyword(\"undefined\")] : [member.type];\n}\n\n/**\n * The value types a key of the composed type can have, read from its IR: the members of object\n * types, through unions and intersections. A reference (a `$ref`, `Omit`, `WithRequired`) or a raw\n * type is read with `PropertyValues`. Primitives, literals and arrays declare no keys.\n */\nfunction declaredValueTypes(type: IrType, request: SchemaRequest): IrType[] {\n switch (type.kind) {\n case \"object\":\n return type.members.flatMap(memberValueTypes);\n case \"union\":\n case \"intersection\":\n return type.types.flatMap((member) => declaredValueTypes(member, request));\n case \"reference\":\n case \"indexedAccess\":\n case \"raw\":\n request.context.footer.requirePropertyValues();\n return [irReference(HELPER_TYPES.propertyValues.name, [type])];\n case \"keyword\":\n case \"stringLiteral\":\n case \"numberLiteral\":\n case \"booleanLiteral\":\n case \"array\":\n case \"tuple\":\n case \"readonly\":\n return [];\n }\n}\n\n/**\n * The index signature object for `unevaluatedProperties`, given the composed type of the other\n * keywords (null when there is none). Null when the fix is off or the keyword does not apply.\n */\nexport function unevaluatedPropertiesType(\n schema: SchemaObject,\n composed: IrType | null,\n request: SchemaRequest,\n): IrType | null {\n const unevaluated = unevaluatedSchemaOf(schema, request);\n if (unevaluated === null) {\n return null;\n }\n const valueTypes = isAnySchema(unevaluated)\n ? [UNKNOWN_TYPE]\n : [\n request.transformNested(unevaluated, request.location, true),\n ...(composed === null ? [] : declaredValueTypes(composed, request)),\n ];\n const { immutable } = request.context.options;\n return irObject([irStringIndexSignature(\"key\", unionOf(valueTypes), immutable)]);\n}\n"],"names":[],"mappings":";;;;;;AA+BA,SAAS,mBAAA,CAAoB,QAAsB,OAAA,EAAuC;AACxF,EAAA,MAAM,EAAE,uBAAsB,GAAI,MAAA;AAClC,EAAA,IACE,CAAC,OAAA,CAAQ,OAAA,CAAQ,OAAA,CAAQ,MAAM,GAAA,CAAI,SAAA,CAAU,sBAAsB,CAAA,IACnE,0BAA0B,MAAA,IAC1B,qBAAA,KAA0B,KAAA,IAC1B,MAAA,CAAO,yBAAyB,MAAA,EAChC;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,OAAO,IAAA,KAAS,MAAA,IAAa,MAAA,CAAO,IAAA,KAAS,WAAW,qBAAA,GAAwB,IAAA;AACzF;AAEA,SAAS,YAAY,MAAA,EAAyB;AAC5C,EAAA,OAAO,MAAA,KAAW,QAAS,OAAO,MAAA,KAAW,YAAY,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,CAAE,MAAA,KAAW,CAAA;AAC1F;AAEA,SAAS,iBAAiB,MAAA,EAA4B;AACpD,EAAA,IAAI,MAAA,CAAO,SAAS,gBAAA,EAAkB;AACpC,IAAA,OAAO,CAAC,OAAO,IAAI,CAAA;AAAA,EACrB;AACA,EAAA,OAAO,MAAA,CAAO,UAAA,GAAa,CAAC,MAAA,CAAO,IAAA,EAAM,SAAA,CAAU,WAAW,CAAC,CAAA,GAAI,CAAC,MAAA,CAAO,IAAI,CAAA;AACjF;AAOA,SAAS,kBAAA,CAAmB,MAAc,OAAA,EAAkC;AAC1E,EAAA,QAAQ,KAAK,IAAA;AAAM,IACjB,KAAK,QAAA;AACH,MAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,gBAAgB,CAAA;AAAA,IAC9C,KAAK,OAAA;AAAA,IACL,KAAK,cAAA;AACH,MAAA,OAAO,IAAA,CAAK,MAAM,OAAA,CAAQ,CAAC,WAAW,kBAAA,CAAmB,MAAA,EAAQ,OAAO,CAAC,CAAA;AAAA,IAC3E,KAAK,WAAA;AAAA,IACL,KAAK,eAAA;AAAA,IACL,KAAK,KAAA;AACH,MAAA,OAAA,CAAQ,OAAA,CAAQ,OAAO,qBAAA,EAAsB;AAC7C,MAAA,OAAO,CAAC,YAAY,YAAA,CAAa,cAAA,CAAe,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;AAAA,IAC/D,KAAK,SAAA;AAAA,IACL,KAAK,eAAA;AAAA,IACL,KAAK,eAAA;AAAA,IACL,KAAK,gBAAA;AAAA,IACL,KAAK,OAAA;AAAA,IACL,KAAK,OAAA;AAAA,IACL,KAAK,UAAA;AACH,MAAA,OAAO,EAAC;AAAA;AAEd;AAMO,SAAS,yBAAA,CACd,MAAA,EACA,QAAA,EACA,OAAA,EACe;AACf,EAAA,MAAM,WAAA,GAAc,mBAAA,CAAoB,MAAA,EAAQ,OAAO,CAAA;AACvD,EAAA,IAAI,gBAAgB,IAAA,EAAM;AACxB,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAM,aAAa,WAAA,CAAY,WAAW,CAAA,GACtC,CAAC,YAAY,CAAA,GACb;AAAA,IACE,OAAA,CAAQ,eAAA,CAAgB,WAAA,EAAa,OAAA,CAAQ,UAAU,IAAI,CAAA;AAAA,IAC3D,GAAI,QAAA,KAAa,IAAA,GAAO,EAAC,GAAI,kBAAA,CAAmB,UAAU,OAAO;AAAA,GACnE;AACJ,EAAA,MAAM,EAAE,SAAA,EAAU,GAAI,OAAA,CAAQ,OAAA,CAAQ,OAAA;AACtC,EAAA,OAAO,QAAA,CAAS,CAAC,sBAAA,CAAuB,KAAA,EAAO,QAAQ,UAAU,CAAA,EAAG,SAAS,CAAC,CAAC,CAAA;AACjF;;"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const outputFixes = require('../../domain/output-fixes.cjs');
|
|
4
|
+
|
|
5
|
+
const LINE_BREAK_RE = /\r?\n/g;
|
|
6
|
+
const CONTINUATION = "\n * ";
|
|
7
|
+
const COMMENT_END_RE = /\*\//g;
|
|
8
|
+
const VALUE_TAGS = ["description", "default", "example"];
|
|
9
|
+
const TAGS_KEEPING_EMPTY_STRING = /* @__PURE__ */ new Set(["default", "example"]);
|
|
10
|
+
const JSON_INDENT = 2;
|
|
11
|
+
const MEMBER_LISTS = [
|
|
12
|
+
["anyOf", "Any of:"],
|
|
13
|
+
["oneOf", "One of:"]
|
|
14
|
+
];
|
|
15
|
+
const BULLET_CONTINUATION = "\n ";
|
|
16
|
+
const ORIGINAL_SCHEMA_COMMENT = { hasMemberDescriptions: false };
|
|
17
|
+
function schemaCommentOptionsOf(fixes) {
|
|
18
|
+
return { hasMemberDescriptions: fixes.has(outputFixes.OutputFix.ANYOF_ONEOF_DESCRIPTIONS) };
|
|
19
|
+
}
|
|
20
|
+
function formatValue(value) {
|
|
21
|
+
const text = typeof value === "object" ? JSON.stringify(value, null, JSON_INDENT) : value;
|
|
22
|
+
return String(text).trim().replace(LINE_BREAK_RE, CONTINUATION);
|
|
23
|
+
}
|
|
24
|
+
function plainLines(schema) {
|
|
25
|
+
const lines = [];
|
|
26
|
+
for (const text of [schema.title, schema.summary]) {
|
|
27
|
+
if (typeof text === "string" && text) {
|
|
28
|
+
lines.push(text.trim().replace(LINE_BREAK_RE, CONTINUATION));
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
if (schema.format) {
|
|
32
|
+
lines.push(`Format: ${schema.format}`);
|
|
33
|
+
}
|
|
34
|
+
if (schema.deprecated) {
|
|
35
|
+
lines.push("@deprecated");
|
|
36
|
+
}
|
|
37
|
+
return lines;
|
|
38
|
+
}
|
|
39
|
+
function valueTagLines(schema) {
|
|
40
|
+
const lines = [];
|
|
41
|
+
for (const tag of VALUE_TAGS) {
|
|
42
|
+
const value = schema[tag];
|
|
43
|
+
if (value === void 0 || value === "" && !TAGS_KEEPING_EMPTY_STRING.has(tag)) {
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
lines.push(`@${tag} ${formatValue(value)}`);
|
|
47
|
+
}
|
|
48
|
+
if (Array.isArray(schema.examples)) {
|
|
49
|
+
lines.push(...schema.examples.map((example) => `@example ${formatValue(example)}`));
|
|
50
|
+
}
|
|
51
|
+
return lines;
|
|
52
|
+
}
|
|
53
|
+
function enumTypeName(schema) {
|
|
54
|
+
if (Array.isArray(schema.type)) {
|
|
55
|
+
return schema.type.join("|");
|
|
56
|
+
}
|
|
57
|
+
return typeof schema.type === "string" ? schema.type : "unknown";
|
|
58
|
+
}
|
|
59
|
+
function constantAndEnumLines(schema) {
|
|
60
|
+
const lines = [];
|
|
61
|
+
if ("const" in schema) {
|
|
62
|
+
lines.push("@constant");
|
|
63
|
+
}
|
|
64
|
+
if (schema.enum) {
|
|
65
|
+
lines.push(`@enum {${enumTypeName(schema)}${schema.nullable ? "|null" : ""}}`);
|
|
66
|
+
}
|
|
67
|
+
return lines;
|
|
68
|
+
}
|
|
69
|
+
function memberDescriptions(members) {
|
|
70
|
+
if (!Array.isArray(members)) {
|
|
71
|
+
return [];
|
|
72
|
+
}
|
|
73
|
+
return members.flatMap((member) => {
|
|
74
|
+
const description = isSchemaObject(member) ? member.description : void 0;
|
|
75
|
+
return typeof description === "string" && description.trim() !== "" ? [description.trim()] : [];
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
function memberDescriptionLists(schema) {
|
|
79
|
+
return MEMBER_LISTS.flatMap(([keyword, heading]) => {
|
|
80
|
+
const descriptions = memberDescriptions(schema[keyword]);
|
|
81
|
+
if (descriptions.length === 0) {
|
|
82
|
+
return [];
|
|
83
|
+
}
|
|
84
|
+
const bullets = descriptions.map(
|
|
85
|
+
(description) => `- ${description.replace(LINE_BREAK_RE, BULLET_CONTINUATION)}`
|
|
86
|
+
);
|
|
87
|
+
return [[heading, ...bullets].join("\n")];
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
function withMemberDescriptions(schema) {
|
|
91
|
+
const lists = memberDescriptionLists(schema);
|
|
92
|
+
const own = schema.description;
|
|
93
|
+
if (lists.length === 0 || own !== void 0 && typeof own !== "string") {
|
|
94
|
+
return schema;
|
|
95
|
+
}
|
|
96
|
+
const ownLines = typeof own === "string" && own.trim() !== "" ? [own.trim()] : [];
|
|
97
|
+
return { ...schema, description: [...ownLines, ...lists].join("\n") };
|
|
98
|
+
}
|
|
99
|
+
function isSchemaObject(value) {
|
|
100
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
101
|
+
}
|
|
102
|
+
function schemaComment(schema, options = ORIGINAL_SCHEMA_COMMENT) {
|
|
103
|
+
if (!isSchemaObject(schema)) {
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
106
|
+
const annotated = options.hasMemberDescriptions ? withMemberDescriptions(schema) : schema;
|
|
107
|
+
const lines = [
|
|
108
|
+
...plainLines(annotated),
|
|
109
|
+
...valueTagLines(annotated),
|
|
110
|
+
...constantAndEnumLines(annotated)
|
|
111
|
+
];
|
|
112
|
+
if (lines.length === 0) {
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
const isSingleLine = lines.length === 1 && !lines.some((line) => line.includes("\n"));
|
|
116
|
+
const text = isSingleLine ? `* ${lines.join("\n")} ` : `*
|
|
117
|
+
* ${lines.join("\n * ")}
|
|
118
|
+
`;
|
|
119
|
+
return { kind: "block", text: text.replace(COMMENT_END_RE, "*\\/") };
|
|
120
|
+
}
|
|
121
|
+
function withSchemaComment(property, schema, options = ORIGINAL_SCHEMA_COMMENT) {
|
|
122
|
+
const comment = schemaComment(schema, options);
|
|
123
|
+
return comment === null ? property : { ...property, comments: [...property.comments, comment] };
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
exports.ORIGINAL_SCHEMA_COMMENT = ORIGINAL_SCHEMA_COMMENT;
|
|
127
|
+
exports.schemaComment = schemaComment;
|
|
128
|
+
exports.schemaCommentOptionsOf = schemaCommentOptionsOf;
|
|
129
|
+
exports.withSchemaComment = withSchemaComment;
|
|
130
|
+
//# sourceMappingURL=schema-comment.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-comment.cjs","sources":["../../../src/application/transform/schema-comment.ts"],"sourcesContent":["import type { IrComment, IrPropertySignature } from \"../../domain/ir/nodes.js\";\nimport { OutputFix } from \"../../domain/output-fixes.js\";\n\n/** Schema fields that produce JSDoc lines (the original `AnnotatedSchemaObject`). */\nexport interface AnnotatedSchema {\n readonly const?: unknown;\n readonly default?: unknown;\n readonly deprecated?: boolean;\n readonly description?: string;\n readonly enum?: unknown[];\n readonly example?: unknown;\n readonly examples?: unknown;\n readonly format?: string;\n readonly nullable?: boolean;\n readonly summary?: string;\n readonly title?: string;\n readonly type?: string | string[];\n}\n\nconst LINE_BREAK_RE = /\\r?\\n/g;\n/** Continuation lines of a multi-line value are indented under the tag. */\nconst CONTINUATION = \"\\n * \";\nconst COMMENT_END_RE = /\\*\\//g;\n/** Tags written as `@tag value`; an empty string is kept only where it is a meaningful value. */\nconst VALUE_TAGS = [\"description\", \"default\", \"example\"] as const;\nconst TAGS_KEEPING_EMPTY_STRING: ReadonlySet<string> = new Set([\"default\", \"example\"]);\nconst JSON_INDENT = 2;\n/** The member lists whose descriptions `anyof-oneof-descriptions` adds, with their headings. */\nconst MEMBER_LISTS = [\n [\"anyOf\", \"Any of:\"],\n [\"oneOf\", \"One of:\"],\n] as const;\n/** The later lines of a member's description are indented under its bullet. */\nconst BULLET_CONTINUATION = \"\\n \";\n\n/** How a schema's JSDoc is written. */\nexport interface SchemaCommentOptions {\n /** `anyof-oneof-descriptions`: the descriptions of `anyOf` and `oneOf` members are listed. */\n readonly hasMemberDescriptions: boolean;\n}\n\n/** The JSDoc the original writes. */\nexport const ORIGINAL_SCHEMA_COMMENT: SchemaCommentOptions = { hasMemberDescriptions: false };\n\n/** How the fixes turned on write a schema's JSDoc. */\nexport function schemaCommentOptionsOf(fixes: ReadonlySet<OutputFix>): SchemaCommentOptions {\n return { hasMemberDescriptions: fixes.has(OutputFix.ANYOF_ONEOF_DESCRIPTIONS) };\n}\n\nfunction formatValue(value: unknown): string {\n const text = typeof value === \"object\" ? JSON.stringify(value, null, JSON_INDENT) : value;\n return String(text).trim().replace(LINE_BREAK_RE, CONTINUATION);\n}\n\nfunction plainLines(schema: AnnotatedSchema): string[] {\n const lines: string[] = [];\n for (const text of [schema.title, schema.summary]) {\n // The document is not validated against the schema dialect: a property named `summary`\n // written without `properties:` makes `summary` an object (upstream #2349).\n if (typeof text === \"string\" && text) {\n lines.push(text.trim().replace(LINE_BREAK_RE, CONTINUATION));\n }\n }\n if (schema.format) {\n lines.push(`Format: ${schema.format}`);\n }\n if (schema.deprecated) {\n lines.push(\"@deprecated\");\n }\n return lines;\n}\n\nfunction valueTagLines(schema: AnnotatedSchema): string[] {\n const lines: string[] = [];\n for (const tag of VALUE_TAGS) {\n const value = schema[tag];\n if (value === undefined || (value === \"\" && !TAGS_KEEPING_EMPTY_STRING.has(tag))) {\n continue;\n }\n lines.push(`@${tag} ${formatValue(value)}`);\n }\n if (Array.isArray(schema.examples)) {\n lines.push(...schema.examples.map((example: unknown) => `@example ${formatValue(example)}`));\n }\n return lines;\n}\n\nfunction enumTypeName(schema: AnnotatedSchema): string {\n if (Array.isArray(schema.type)) {\n return schema.type.join(\"|\");\n }\n return typeof schema.type === \"string\" ? schema.type : \"unknown\";\n}\n\nfunction constantAndEnumLines(schema: AnnotatedSchema): string[] {\n const lines: string[] = [];\n if (\"const\" in schema) {\n lines.push(\"@constant\");\n }\n if (schema.enum) {\n lines.push(`@enum {${enumTypeName(schema)}${schema.nullable ? \"|null\" : \"\"}}`);\n }\n return lines;\n}\n\n/** The own, non-blank `description` of each member; a member without one is left out. */\nfunction memberDescriptions(members: unknown): string[] {\n if (!Array.isArray(members)) {\n return [];\n }\n return members.flatMap((member: unknown) => {\n const description = isSchemaObject(member) ? member.description : undefined;\n return typeof description === \"string\" && description.trim() !== \"\" ? [description.trim()] : [];\n });\n}\n\n/** Each member list with a described member, as a heading and one bullet per description. */\nfunction memberDescriptionLists(schema: SchemaRecord): string[] {\n return MEMBER_LISTS.flatMap(([keyword, heading]) => {\n const descriptions = memberDescriptions(schema[keyword]);\n if (descriptions.length === 0) {\n return [];\n }\n const bullets = descriptions.map(\n (description) => `- ${description.replace(LINE_BREAK_RE, BULLET_CONTINUATION)}`,\n );\n return [[heading, ...bullets].join(\"\\n\")];\n });\n}\n\n/**\n * The schema with the descriptions of its `anyOf` and `oneOf` members after its own description\n * (upstream #2142). A member's description holds only where that member applies, so each one is\n * listed under its keyword rather than merged into one sentence. A `description` that is not a\n * string is kept as it is.\n */\nfunction withMemberDescriptions(schema: SchemaRecord): AnnotatedSchema {\n const lists = memberDescriptionLists(schema);\n const own = schema.description;\n if (lists.length === 0 || (own !== undefined && typeof own !== \"string\")) {\n // As the original, the keywords are read as they are, without validating them.\n return schema as AnnotatedSchema;\n }\n const ownLines = typeof own === \"string\" && own.trim() !== \"\" ? [own.trim()] : [];\n return { ...(schema as AnnotatedSchema), description: [...ownLines, ...lists].join(\"\\n\") };\n}\n\n/** A schema object read without knowing its keywords. */\ninterface SchemaRecord {\n readonly description?: unknown;\n readonly [keyword: string]: unknown;\n}\n\nfunction isSchemaObject(value: unknown): value is SchemaRecord {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/**\n * The JSDoc comment the original writes for a schema (`addJSDocComment`): title, summary and\n * format, then `@deprecated`, `@description`, `@default`, `@example`, `@constant` and `@enum`\n * tags. One short line stays on the `/**` line; anything else is a block. Returns null when there\n * is nothing to say, or when the value is not a schema object.\n */\nexport function schemaComment(\n schema: unknown,\n options: SchemaCommentOptions = ORIGINAL_SCHEMA_COMMENT,\n): IrComment | null {\n if (!isSchemaObject(schema)) {\n return null;\n }\n const annotated = options.hasMemberDescriptions\n ? withMemberDescriptions(schema)\n : (schema as AnnotatedSchema);\n const lines = [\n ...plainLines(annotated),\n ...valueTagLines(annotated),\n ...constantAndEnumLines(annotated),\n ];\n if (lines.length === 0) {\n return null;\n }\n const isSingleLine = lines.length === 1 && !lines.some((line) => line.includes(\"\\n\"));\n const text = isSingleLine ? `* ${lines.join(\"\\n\")} ` : `*\\n * ${lines.join(\"\\n * \")}\\n `;\n // A `*/` inside a value would end the comment early.\n return { kind: \"block\", text: text.replace(COMMENT_END_RE, \"*\\\\/\") };\n}\n\n/** The property with the schema's JSDoc added after the comments it already has. */\nexport function withSchemaComment(\n property: IrPropertySignature,\n schema: unknown,\n options: SchemaCommentOptions = ORIGINAL_SCHEMA_COMMENT,\n): IrPropertySignature {\n const comment = schemaComment(schema, options);\n return comment === null ? property : { ...property, comments: [...property.comments, comment] };\n}\n"],"names":["OutputFix"],"mappings":"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"}
|