openapi-typesafe 0.0.0 → 1.0.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +22 -0
- package/README.md +71 -1
- package/bin/cli.js +4 -0
- package/dist/adapters/node-file-system/node-file-system.cjs +46 -0
- package/dist/adapters/node-file-system/node-file-system.cjs.map +1 -0
- package/dist/adapters/node-file-system/node-file-system.mjs +40 -0
- package/dist/adapters/node-file-system/node-file-system.mjs.map +1 -0
- package/dist/adapters/redocly-loader/alias-limit.cjs +16 -0
- package/dist/adapters/redocly-loader/alias-limit.cjs.map +1 -0
- package/dist/adapters/redocly-loader/alias-limit.mjs +14 -0
- package/dist/adapters/redocly-loader/alias-limit.mjs.map +1 -0
- package/dist/adapters/redocly-loader/allowed-hosts.cjs +42 -0
- package/dist/adapters/redocly-loader/allowed-hosts.cjs.map +1 -0
- package/dist/adapters/redocly-loader/allowed-hosts.mjs +40 -0
- package/dist/adapters/redocly-loader/allowed-hosts.mjs.map +1 -0
- package/dist/adapters/redocly-loader/bundled-ref-repair.cjs +53 -0
- package/dist/adapters/redocly-loader/bundled-ref-repair.cjs.map +1 -0
- package/dist/adapters/redocly-loader/bundled-ref-repair.mjs +51 -0
- package/dist/adapters/redocly-loader/bundled-ref-repair.mjs.map +1 -0
- package/dist/adapters/redocly-loader/malformed-refs.cjs +41 -0
- package/dist/adapters/redocly-loader/malformed-refs.cjs.map +1 -0
- package/dist/adapters/redocly-loader/malformed-refs.mjs +38 -0
- package/dist/adapters/redocly-loader/malformed-refs.mjs.map +1 -0
- package/dist/adapters/redocly-loader/redocly-config-source.cjs +61 -0
- package/dist/adapters/redocly-loader/redocly-config-source.cjs.map +1 -0
- package/dist/adapters/redocly-loader/redocly-config-source.mjs +54 -0
- package/dist/adapters/redocly-loader/redocly-config-source.mjs.map +1 -0
- package/dist/adapters/redocly-loader/redocly-schema-loader.cjs +179 -0
- package/dist/adapters/redocly-loader/redocly-schema-loader.cjs.map +1 -0
- package/dist/adapters/redocly-loader/redocly-schema-loader.mjs +177 -0
- package/dist/adapters/redocly-loader/redocly-schema-loader.mjs.map +1 -0
- package/dist/adapters/redocly-loader/ref-access.cjs +107 -0
- package/dist/adapters/redocly-loader/ref-access.cjs.map +1 -0
- package/dist/adapters/redocly-loader/ref-access.mjs +99 -0
- package/dist/adapters/redocly-loader/ref-access.mjs.map +1 -0
- package/dist/adapters/redocly-loader/ref-holders.cjs +31 -0
- package/dist/adapters/redocly-loader/ref-holders.cjs.map +1 -0
- package/dist/adapters/redocly-loader/ref-holders.mjs +29 -0
- package/dist/adapters/redocly-loader/ref-holders.mjs.map +1 -0
- package/dist/adapters/redocly-loader/remote-fetch.cjs +60 -0
- package/dist/adapters/redocly-loader/remote-fetch.cjs.map +1 -0
- package/dist/adapters/redocly-loader/remote-fetch.mjs +56 -0
- package/dist/adapters/redocly-loader/remote-fetch.mjs.map +1 -0
- package/dist/adapters/redocly-loader/schema-load-errors.cjs +87 -0
- package/dist/adapters/redocly-loader/schema-load-errors.cjs.map +1 -0
- package/dist/adapters/redocly-loader/schema-load-errors.mjs +77 -0
- package/dist/adapters/redocly-loader/schema-load-errors.mjs.map +1 -0
- package/dist/adapters/redocly-loader/schema-source.cjs +104 -0
- package/dist/adapters/redocly-loader/schema-source.cjs.map +1 -0
- package/dist/adapters/redocly-loader/schema-source.mjs +98 -0
- package/dist/adapters/redocly-loader/schema-source.mjs.map +1 -0
- package/dist/adapters/redocly-loader/unsupported-keys.cjs +62 -0
- package/dist/adapters/redocly-loader/unsupported-keys.cjs.map +1 -0
- package/dist/adapters/redocly-loader/unsupported-keys.mjs +58 -0
- package/dist/adapters/redocly-loader/unsupported-keys.mjs.map +1 -0
- package/dist/adapters/terminal-logger/terminal-logger.cjs +67 -0
- package/dist/adapters/terminal-logger/terminal-logger.cjs.map +1 -0
- package/dist/adapters/terminal-logger/terminal-logger.mjs +59 -0
- package/dist/adapters/terminal-logger/terminal-logger.mjs.map +1 -0
- package/dist/adapters/type-ast-bridge/footer-nodes.cjs +21 -0
- package/dist/adapters/type-ast-bridge/footer-nodes.cjs.map +1 -0
- package/dist/adapters/type-ast-bridge/footer-nodes.mjs +17 -0
- package/dist/adapters/type-ast-bridge/footer-nodes.mjs.map +1 -0
- package/dist/adapters/type-ast-bridge/ir-declarations-to-typescript.cjs +75 -0
- package/dist/adapters/type-ast-bridge/ir-declarations-to-typescript.cjs.map +1 -0
- package/dist/adapters/type-ast-bridge/ir-declarations-to-typescript.mjs +71 -0
- package/dist/adapters/type-ast-bridge/ir-declarations-to-typescript.mjs.map +1 -0
- package/dist/adapters/type-ast-bridge/ir-to-typescript.cjs +148 -0
- package/dist/adapters/type-ast-bridge/ir-to-typescript.cjs.map +1 -0
- package/dist/adapters/type-ast-bridge/ir-to-typescript.mjs +142 -0
- package/dist/adapters/type-ast-bridge/ir-to-typescript.mjs.map +1 -0
- package/dist/adapters/type-ast-bridge/lazy-node.cjs +23 -0
- package/dist/adapters/type-ast-bridge/lazy-node.cjs.map +1 -0
- package/dist/adapters/type-ast-bridge/lazy-node.mjs +21 -0
- package/dist/adapters/type-ast-bridge/lazy-node.mjs.map +1 -0
- package/dist/adapters/type-ast-bridge/load-typescript.cjs +57 -0
- package/dist/adapters/type-ast-bridge/load-typescript.cjs.map +1 -0
- package/dist/adapters/type-ast-bridge/load-typescript.mjs +51 -0
- package/dist/adapters/type-ast-bridge/load-typescript.mjs.map +1 -0
- package/dist/adapters/type-ast-bridge/print-typescript.cjs +21 -0
- package/dist/adapters/type-ast-bridge/print-typescript.cjs.map +1 -0
- package/dist/adapters/type-ast-bridge/print-typescript.mjs +19 -0
- package/dist/adapters/type-ast-bridge/print-typescript.mjs.map +1 -0
- package/dist/adapters/type-ast-bridge/typescript-raw-text.cjs +33 -0
- package/dist/adapters/type-ast-bridge/typescript-raw-text.cjs.map +1 -0
- package/dist/adapters/type-ast-bridge/typescript-raw-text.mjs +29 -0
- package/dist/adapters/type-ast-bridge/typescript-raw-text.mjs.map +1 -0
- package/dist/adapters/type-ast-bridge/typescript-to-ir.cjs +210 -0
- package/dist/adapters/type-ast-bridge/typescript-to-ir.cjs.map +1 -0
- package/dist/adapters/type-ast-bridge/typescript-to-ir.mjs +207 -0
- package/dist/adapters/type-ast-bridge/typescript-to-ir.mjs.map +1 -0
- package/dist/api/ast-to-string.cjs +39 -0
- package/dist/api/ast-to-string.cjs.map +1 -0
- package/dist/api/ast-to-string.mjs +37 -0
- package/dist/api/ast-to-string.mjs.map +1 -0
- package/dist/api/comment-header.cjs +11 -0
- package/dist/api/comment-header.cjs.map +1 -0
- package/dist/api/comment-header.mjs +9 -0
- package/dist/api/comment-header.mjs.map +1 -0
- package/dist/api/default-ports.cjs +38 -0
- package/dist/api/default-ports.cjs.map +1 -0
- package/dist/api/default-ports.mjs +28 -0
- package/dist/api/default-ports.mjs.map +1 -0
- package/dist/api/discriminator-conflict-warnings.cjs +25 -0
- package/dist/api/discriminator-conflict-warnings.cjs.map +1 -0
- package/dist/api/discriminator-conflict-warnings.mjs +23 -0
- package/dist/api/discriminator-conflict-warnings.mjs.map +1 -0
- package/dist/api/discriminator-enum-names.cjs +19 -0
- package/dist/api/discriminator-enum-names.cjs.map +1 -0
- package/dist/api/discriminator-enum-names.mjs +17 -0
- package/dist/api/discriminator-enum-names.mjs.map +1 -0
- package/dist/api/discriminator-enum-parent.cjs +59 -0
- package/dist/api/discriminator-enum-parent.cjs.map +1 -0
- package/dist/api/discriminator-enum-parent.mjs +57 -0
- package/dist/api/discriminator-enum-parent.mjs.map +1 -0
- package/dist/api/discriminator-enum.cjs +69 -0
- package/dist/api/discriminator-enum.cjs.map +1 -0
- package/dist/api/discriminator-enum.mjs +66 -0
- package/dist/api/discriminator-enum.mjs.map +1 -0
- package/dist/api/discriminator-other-owners.cjs +67 -0
- package/dist/api/discriminator-other-owners.cjs.map +1 -0
- package/dist/api/discriminator-other-owners.mjs +64 -0
- package/dist/api/discriminator-other-owners.mjs.map +1 -0
- package/dist/api/discriminator-patch.cjs +88 -0
- package/dist/api/discriminator-patch.cjs.map +1 -0
- package/dist/api/discriminator-patch.mjs +82 -0
- package/dist/api/discriminator-patch.mjs.map +1 -0
- package/dist/api/discriminator-scan.cjs +153 -0
- package/dist/api/discriminator-scan.cjs.map +1 -0
- package/dist/api/discriminator-scan.mjs +150 -0
- package/dist/api/discriminator-scan.mjs.map +1 -0
- package/dist/api/document-declarations.cjs +28 -0
- package/dist/api/document-declarations.cjs.map +1 -0
- package/dist/api/document-declarations.mjs +26 -0
- package/dist/api/document-declarations.mjs.map +1 -0
- package/dist/api/document-refs.cjs +53 -0
- package/dist/api/document-refs.cjs.map +1 -0
- package/dist/api/document-refs.mjs +50 -0
- package/dist/api/document-refs.mjs.map +1 -0
- package/dist/api/document-run.cjs +122 -0
- package/dist/api/document-run.cjs.map +1 -0
- package/dist/api/document-run.mjs +116 -0
- package/dist/api/document-run.mjs.map +1 -0
- package/dist/api/enum-values-warnings.cjs +16 -0
- package/dist/api/enum-values-warnings.cjs.map +1 -0
- package/dist/api/enum-values-warnings.mjs +14 -0
- package/dist/api/enum-values-warnings.mjs.map +1 -0
- package/dist/api/footer-entry.cjs +18 -0
- package/dist/api/footer-entry.cjs.map +1 -0
- package/dist/api/footer-entry.mjs +15 -0
- package/dist/api/footer-entry.mjs.map +1 -0
- package/dist/api/footer-sink.cjs +53 -0
- package/dist/api/footer-sink.cjs.map +1 -0
- package/dist/api/footer-sink.mjs +51 -0
- package/dist/api/footer-sink.mjs.map +1 -0
- package/dist/api/legacy-callback-warning.cjs +25 -0
- package/dist/api/legacy-callback-warning.cjs.map +1 -0
- package/dist/api/legacy-callback-warning.mjs +22 -0
- package/dist/api/legacy-callback-warning.mjs.map +1 -0
- package/dist/api/legacy-ts-helpers.cjs +203 -0
- package/dist/api/legacy-ts-helpers.cjs.map +1 -0
- package/dist/api/legacy-ts-helpers.mjs +187 -0
- package/dist/api/legacy-ts-helpers.mjs.map +1 -0
- package/dist/api/legacy-utils.cjs +65 -0
- package/dist/api/legacy-utils.cjs.map +1 -0
- package/dist/api/legacy-utils.mjs +50 -0
- package/dist/api/legacy-utils.mjs.map +1 -0
- package/dist/api/openapi-ts.cjs +40 -0
- package/dist/api/openapi-ts.cjs.map +1 -0
- package/dist/api/openapi-ts.mjs +34 -0
- package/dist/api/openapi-ts.mjs.map +1 -0
- package/dist/api/path-template-warnings.cjs +21 -0
- package/dist/api/path-template-warnings.cjs.map +1 -0
- package/dist/api/path-template-warnings.mjs +19 -0
- package/dist/api/path-template-warnings.mjs.map +1 -0
- package/dist/api/schema-callbacks.cjs +140 -0
- package/dist/api/schema-callbacks.cjs.map +1 -0
- package/dist/api/schema-callbacks.mjs +136 -0
- package/dist/api/schema-callbacks.mjs.map +1 -0
- package/dist/api/string-to-ast.cjs +21 -0
- package/dist/api/string-to-ast.cjs.map +1 -0
- package/dist/api/string-to-ast.mjs +18 -0
- package/dist/api/string-to-ast.mjs.map +1 -0
- package/dist/api/transform-context.cjs +84 -0
- package/dist/api/transform-context.cjs.map +1 -0
- package/dist/api/transform-context.mjs +67 -0
- package/dist/api/transform-context.mjs.map +1 -0
- package/dist/api/transform-schema.cjs +80 -0
- package/dist/api/transform-schema.cjs.map +1 -0
- package/dist/api/transform-schema.mjs +75 -0
- package/dist/api/transform-schema.mjs.map +1 -0
- package/dist/api/type-helpers.cjs +85 -0
- package/dist/api/type-helpers.cjs.map +1 -0
- package/dist/api/type-helpers.mjs +66 -0
- package/dist/api/type-helpers.mjs.map +1 -0
- package/dist/api/unsupported-feature-warnings.cjs +22 -0
- package/dist/api/unsupported-feature-warnings.cjs.map +1 -0
- package/dist/api/unsupported-feature-warnings.mjs +20 -0
- package/dist/api/unsupported-feature-warnings.mjs.map +1 -0
- package/dist/application/print/comment-writer.cjs +95 -0
- package/dist/application/print/comment-writer.cjs.map +1 -0
- package/dist/application/print/comment-writer.mjs +93 -0
- package/dist/application/print/comment-writer.mjs.map +1 -0
- package/dist/application/print/declaration-printer.cjs +83 -0
- package/dist/application/print/declaration-printer.cjs.map +1 -0
- package/dist/application/print/declaration-printer.mjs +81 -0
- package/dist/application/print/declaration-printer.mjs.map +1 -0
- package/dist/application/print/literal-text.cjs +52 -0
- package/dist/application/print/literal-text.cjs.map +1 -0
- package/dist/application/print/literal-text.mjs +48 -0
- package/dist/application/print/literal-text.mjs.map +1 -0
- package/dist/application/print/print-nodes.cjs +38 -0
- package/dist/application/print/print-nodes.cjs.map +1 -0
- package/dist/application/print/print-nodes.mjs +36 -0
- package/dist/application/print/print-nodes.mjs.map +1 -0
- package/dist/application/print/print-options.cjs +6 -0
- package/dist/application/print/print-options.cjs.map +1 -0
- package/dist/application/print/print-options.mjs +4 -0
- package/dist/application/print/print-options.mjs.map +1 -0
- package/dist/application/print/text-writer.cjs +63 -0
- package/dist/application/print/text-writer.cjs.map +1 -0
- package/dist/application/print/text-writer.mjs +60 -0
- package/dist/application/print/text-writer.mjs.map +1 -0
- package/dist/application/print/type-printer.cjs +219 -0
- package/dist/application/print/type-printer.cjs.map +1 -0
- package/dist/application/print/type-printer.mjs +215 -0
- package/dist/application/print/type-printer.mjs.map +1 -0
- package/dist/application/stack-overflow.cjs +36 -0
- package/dist/application/stack-overflow.cjs.map +1 -0
- package/dist/application/stack-overflow.mjs +31 -0
- package/dist/application/stack-overflow.mjs.map +1 -0
- package/dist/application/transform/document/assignability.cjs +144 -0
- package/dist/application/transform/document/assignability.cjs.map +1 -0
- package/dist/application/transform/document/assignability.mjs +138 -0
- package/dist/application/transform/document/assignability.mjs.map +1 -0
- package/dist/application/transform/document/components.cjs +104 -0
- package/dist/application/transform/document/components.cjs.map +1 -0
- package/dist/application/transform/document/components.mjs +102 -0
- package/dist/application/transform/document/components.mjs.map +1 -0
- package/dist/application/transform/document/declared-types.cjs +66 -0
- package/dist/application/transform/document/declared-types.cjs.map +1 -0
- package/dist/application/transform/document/declared-types.mjs +63 -0
- package/dist/application/transform/document/declared-types.mjs.map +1 -0
- package/dist/application/transform/document/defs-root.cjs +18 -0
- package/dist/application/transform/document/defs-root.cjs.map +1 -0
- package/dist/application/transform/document/defs-root.mjs +16 -0
- package/dist/application/transform/document/defs-root.mjs.map +1 -0
- package/dist/application/transform/document/document-member.cjs +13 -0
- package/dist/application/transform/document/document-member.cjs.map +1 -0
- package/dist/application/transform/document/document-member.mjs +11 -0
- package/dist/application/transform/document/document-member.mjs.map +1 -0
- package/dist/application/transform/document/document.cjs +109 -0
- package/dist/application/transform/document/document.cjs.map +1 -0
- package/dist/application/transform/document/document.mjs +106 -0
- package/dist/application/transform/document/document.mjs.map +1 -0
- package/dist/application/transform/document/exploded-query.cjs +46 -0
- package/dist/application/transform/document/exploded-query.cjs.map +1 -0
- package/dist/application/transform/document/exploded-query.mjs +43 -0
- package/dist/application/transform/document/exploded-query.mjs.map +1 -0
- package/dist/application/transform/document/global-type-references.cjs +63 -0
- package/dist/application/transform/document/global-type-references.cjs.map +1 -0
- package/dist/application/transform/document/global-type-references.mjs +61 -0
- package/dist/application/transform/document/global-type-references.mjs.map +1 -0
- package/dist/application/transform/document/header.cjs +27 -0
- package/dist/application/transform/document/header.cjs.map +1 -0
- package/dist/application/transform/document/header.mjs +25 -0
- package/dist/application/transform/document/header.mjs.map +1 -0
- package/dist/application/transform/document/kept-deprecated.cjs +96 -0
- package/dist/application/transform/document/kept-deprecated.cjs.map +1 -0
- package/dist/application/transform/document/kept-deprecated.mjs +94 -0
- package/dist/application/transform/document/kept-deprecated.mjs.map +1 -0
- package/dist/application/transform/document/list-assignability.cjs +54 -0
- package/dist/application/transform/document/list-assignability.cjs.map +1 -0
- package/dist/application/transform/document/list-assignability.mjs +52 -0
- package/dist/application/transform/document/list-assignability.mjs.map +1 -0
- package/dist/application/transform/document/media-type.cjs +42 -0
- package/dist/application/transform/document/media-type.cjs.map +1 -0
- package/dist/application/transform/document/media-type.mjs +38 -0
- package/dist/application/transform/document/media-type.mjs.map +1 -0
- package/dist/application/transform/document/operation.cjs +45 -0
- package/dist/application/transform/document/operation.cjs.map +1 -0
- package/dist/application/transform/document/operation.mjs +43 -0
- package/dist/application/transform/document/operation.mjs.map +1 -0
- package/dist/application/transform/document/parameter.cjs +25 -0
- package/dist/application/transform/document/parameter.cjs.map +1 -0
- package/dist/application/transform/document/parameter.mjs +23 -0
- package/dist/application/transform/document/parameter.mjs.map +1 -0
- package/dist/application/transform/document/parameters.cjs +146 -0
- package/dist/application/transform/document/parameters.cjs.map +1 -0
- package/dist/application/transform/document/parameters.mjs +144 -0
- package/dist/application/transform/document/parameters.mjs.map +1 -0
- package/dist/application/transform/document/path-item.cjs +82 -0
- package/dist/application/transform/document/path-item.cjs.map +1 -0
- package/dist/application/transform/document/path-item.mjs +80 -0
- package/dist/application/transform/document/path-item.mjs.map +1 -0
- package/dist/application/transform/document/path-key-overlaps.cjs +107 -0
- package/dist/application/transform/document/path-key-overlaps.cjs.map +1 -0
- package/dist/application/transform/document/path-key-overlaps.mjs +105 -0
- package/dist/application/transform/document/path-key-overlaps.mjs.map +1 -0
- package/dist/application/transform/document/path-template-replace.cjs +48 -0
- package/dist/application/transform/document/path-template-replace.cjs.map +1 -0
- package/dist/application/transform/document/path-template-replace.mjs +45 -0
- package/dist/application/transform/document/path-template-replace.mjs.map +1 -0
- package/dist/application/transform/document/paths-enum.cjs +75 -0
- package/dist/application/transform/document/paths-enum.cjs.map +1 -0
- package/dist/application/transform/document/paths-enum.mjs +72 -0
- package/dist/application/transform/document/paths-enum.mjs.map +1 -0
- package/dist/application/transform/document/paths.cjs +153 -0
- package/dist/application/transform/document/paths.cjs.map +1 -0
- package/dist/application/transform/document/paths.mjs +149 -0
- package/dist/application/transform/document/paths.mjs.map +1 -0
- package/dist/application/transform/document/request-body.cjs +36 -0
- package/dist/application/transform/document/request-body.cjs.map +1 -0
- package/dist/application/transform/document/request-body.mjs +34 -0
- package/dist/application/transform/document/request-body.mjs.map +1 -0
- package/dist/application/transform/document/response.cjs +59 -0
- package/dist/application/transform/document/response.cjs.map +1 -0
- package/dist/application/transform/document/response.mjs +57 -0
- package/dist/application/transform/document/response.mjs.map +1 -0
- package/dist/application/transform/document/responses.cjs +23 -0
- package/dist/application/transform/document/responses.cjs.map +1 -0
- package/dist/application/transform/document/responses.mjs +21 -0
- package/dist/application/transform/document/responses.mjs.map +1 -0
- package/dist/application/transform/document/root-type-aliases.cjs +70 -0
- package/dist/application/transform/document/root-type-aliases.cjs.map +1 -0
- package/dist/application/transform/document/root-type-aliases.mjs +67 -0
- package/dist/application/transform/document/root-type-aliases.mjs.map +1 -0
- package/dist/application/transform/document/template-key-match.cjs +128 -0
- package/dist/application/transform/document/template-key-match.cjs.map +1 -0
- package/dist/application/transform/document/template-key-match.mjs +125 -0
- package/dist/application/transform/document/template-key-match.mjs.map +1 -0
- package/dist/application/transform/document/type-assignability.cjs +192 -0
- package/dist/application/transform/document/type-assignability.cjs.map +1 -0
- package/dist/application/transform/document/type-assignability.mjs +190 -0
- package/dist/application/transform/document/type-assignability.mjs.map +1 -0
- package/dist/application/transform/document/type-key.cjs +70 -0
- package/dist/application/transform/document/type-key.cjs.map +1 -0
- package/dist/application/transform/document/type-key.mjs +68 -0
- package/dist/application/transform/document/type-key.mjs.map +1 -0
- package/dist/application/transform/document/type-resolution.cjs +131 -0
- package/dist/application/transform/document/type-resolution.cjs.map +1 -0
- package/dist/application/transform/document/type-resolution.mjs +125 -0
- package/dist/application/transform/document/type-resolution.mjs.map +1 -0
- package/dist/application/transform/document/webhooks.cjs +19 -0
- package/dist/application/transform/document/webhooks.cjs.map +1 -0
- package/dist/application/transform/document/webhooks.mjs +17 -0
- package/dist/application/transform/document/webhooks.mjs.map +1 -0
- package/dist/application/transform/document-entries.cjs +17 -0
- package/dist/application/transform/document-entries.cjs.map +1 -0
- package/dist/application/transform/document-entries.mjs +14 -0
- package/dist/application/transform/document-entries.mjs.map +1 -0
- package/dist/application/transform/footer/document-footer.cjs +150 -0
- package/dist/application/transform/footer/document-footer.cjs.map +1 -0
- package/dist/application/transform/footer/document-footer.mjs +148 -0
- package/dist/application/transform/footer/document-footer.mjs.map +1 -0
- package/dist/application/transform/footer/enum-naming.cjs +138 -0
- package/dist/application/transform/footer/enum-naming.cjs.map +1 -0
- package/dist/application/transform/footer/enum-naming.mjs +131 -0
- package/dist/application/transform/footer/enum-naming.mjs.map +1 -0
- package/dist/application/transform/footer/enum-values-check.cjs +129 -0
- package/dist/application/transform/footer/enum-values-check.cjs.map +1 -0
- package/dist/application/transform/footer/enum-values-check.mjs +127 -0
- package/dist/application/transform/footer/enum-values-check.mjs.map +1 -0
- package/dist/application/transform/footer/evaluation.cjs +33 -0
- package/dist/application/transform/footer/evaluation.cjs.map +1 -0
- package/dist/application/transform/footer/evaluation.mjs +26 -0
- package/dist/application/transform/footer/evaluation.mjs.map +1 -0
- package/dist/application/transform/footer/shared-enum-names.cjs +60 -0
- package/dist/application/transform/footer/shared-enum-names.cjs.map +1 -0
- package/dist/application/transform/footer/shared-enum-names.mjs +57 -0
- package/dist/application/transform/footer/shared-enum-names.mjs.map +1 -0
- package/dist/application/transform/footer/type-evaluation.cjs +246 -0
- package/dist/application/transform/footer/type-evaluation.cjs.map +1 -0
- package/dist/application/transform/footer/type-evaluation.mjs +244 -0
- package/dist/application/transform/footer/type-evaluation.mjs.map +1 -0
- package/dist/application/transform/footer/type-rules.cjs +172 -0
- package/dist/application/transform/footer/type-rules.cjs.map +1 -0
- package/dist/application/transform/footer/type-rules.mjs +166 -0
- package/dist/application/transform/footer/type-rules.mjs.map +1 -0
- package/dist/application/transform/helper-types.cjs +68 -0
- package/dist/application/transform/helper-types.cjs.map +1 -0
- package/dist/application/transform/helper-types.mjs +65 -0
- package/dist/application/transform/helper-types.mjs.map +1 -0
- package/dist/application/transform/literal-type.cjs +36 -0
- package/dist/application/transform/literal-type.cjs.map +1 -0
- package/dist/application/transform/literal-type.mjs +34 -0
- package/dist/application/transform/literal-type.mjs.map +1 -0
- package/dist/application/transform/numbered-names.cjs +18 -0
- package/dist/application/transform/numbered-names.cjs.map +1 -0
- package/dist/application/transform/numbered-names.mjs +16 -0
- package/dist/application/transform/numbered-names.mjs.map +1 -0
- package/dist/application/transform/ref-pointer/generated-location.cjs +138 -0
- package/dist/application/transform/ref-pointer/generated-location.cjs.map +1 -0
- package/dist/application/transform/ref-pointer/generated-location.mjs +136 -0
- package/dist/application/transform/ref-pointer/generated-location.mjs.map +1 -0
- package/dist/application/transform/ref-pointer/generated-shape.cjs +171 -0
- package/dist/application/transform/ref-pointer/generated-shape.cjs.map +1 -0
- package/dist/application/transform/ref-pointer/generated-shape.mjs +162 -0
- package/dist/application/transform/ref-pointer/generated-shape.mjs.map +1 -0
- package/dist/application/transform/ref-pointer/inline-cycles.cjs +44 -0
- package/dist/application/transform/ref-pointer/inline-cycles.cjs.map +1 -0
- package/dist/application/transform/ref-pointer/inline-cycles.mjs +42 -0
- package/dist/application/transform/ref-pointer/inline-cycles.mjs.map +1 -0
- package/dist/application/transform/ref-pointer/original-index.cjs +62 -0
- package/dist/application/transform/ref-pointer/original-index.cjs.map +1 -0
- package/dist/application/transform/ref-pointer/original-index.mjs +60 -0
- package/dist/application/transform/ref-pointer/original-index.mjs.map +1 -0
- package/dist/application/transform/ref-pointer/pointer-type.cjs +60 -0
- package/dist/application/transform/ref-pointer/pointer-type.cjs.map +1 -0
- package/dist/application/transform/ref-pointer/pointer-type.mjs +57 -0
- package/dist/application/transform/ref-pointer/pointer-type.mjs.map +1 -0
- package/dist/application/transform/ref-pointer/pointer-walk.cjs +66 -0
- package/dist/application/transform/ref-pointer/pointer-walk.cjs.map +1 -0
- package/dist/application/transform/ref-pointer/pointer-walk.mjs +56 -0
- package/dist/application/transform/ref-pointer/pointer-walk.mjs.map +1 -0
- package/dist/application/transform/ref-pointer/typed-walk.cjs +124 -0
- package/dist/application/transform/ref-pointer/typed-walk.cjs.map +1 -0
- package/dist/application/transform/ref-pointer/typed-walk.mjs +122 -0
- package/dist/application/transform/ref-pointer/typed-walk.mjs.map +1 -0
- package/dist/application/transform/ref-type.cjs +62 -0
- package/dist/application/transform/ref-type.cjs.map +1 -0
- package/dist/application/transform/ref-type.mjs +55 -0
- package/dist/application/transform/ref-type.mjs.map +1 -0
- package/dist/application/transform/schema/access-flags.cjs +38 -0
- package/dist/application/transform/schema/access-flags.cjs.map +1 -0
- package/dist/application/transform/schema/access-flags.mjs +36 -0
- package/dist/application/transform/schema/access-flags.mjs.map +1 -0
- package/dist/application/transform/schema/array-type.cjs +136 -0
- package/dist/application/transform/schema/array-type.cjs.map +1 -0
- package/dist/application/transform/schema/array-type.mjs +134 -0
- package/dist/application/transform/schema/array-type.mjs.map +1 -0
- package/dist/application/transform/schema/composition-type.cjs +142 -0
- package/dist/application/transform/schema/composition-type.cjs.map +1 -0
- package/dist/application/transform/schema/composition-type.mjs +140 -0
- package/dist/application/transform/schema/composition-type.mjs.map +1 -0
- package/dist/application/transform/schema/core-type.cjs +86 -0
- package/dist/application/transform/schema/core-type.cjs.map +1 -0
- package/dist/application/transform/schema/core-type.mjs +84 -0
- package/dist/application/transform/schema/core-type.mjs.map +1 -0
- package/dist/application/transform/schema/discriminated-union.cjs +30 -0
- package/dist/application/transform/schema/discriminated-union.cjs.map +1 -0
- package/dist/application/transform/schema/discriminated-union.mjs +27 -0
- package/dist/application/transform/schema/discriminated-union.mjs.map +1 -0
- package/dist/application/transform/schema/discriminator-property.cjs +22 -0
- package/dist/application/transform/schema/discriminator-property.cjs.map +1 -0
- package/dist/application/transform/schema/discriminator-property.mjs +20 -0
- package/dist/application/transform/schema/discriminator-property.mjs.map +1 -0
- package/dist/application/transform/schema/enum-rule.cjs +163 -0
- package/dist/application/transform/schema/enum-rule.cjs.map +1 -0
- package/dist/application/transform/schema/enum-rule.mjs +160 -0
- package/dist/application/transform/schema/enum-rule.mjs.map +1 -0
- package/dist/application/transform/schema/inherited-discriminator.cjs +29 -0
- package/dist/application/transform/schema/inherited-discriminator.cjs.map +1 -0
- package/dist/application/transform/schema/inherited-discriminator.mjs +26 -0
- package/dist/application/transform/schema/inherited-discriminator.mjs.map +1 -0
- package/dist/application/transform/schema/object-type.cjs +186 -0
- package/dist/application/transform/schema/object-type.cjs.map +1 -0
- package/dist/application/transform/schema/object-type.mjs +182 -0
- package/dist/application/transform/schema/object-type.mjs.map +1 -0
- package/dist/application/transform/schema/presence-members.cjs +59 -0
- package/dist/application/transform/schema/presence-members.cjs.map +1 -0
- package/dist/application/transform/schema/presence-members.mjs +57 -0
- package/dist/application/transform/schema/presence-members.mjs.map +1 -0
- package/dist/application/transform/schema/required-variants.cjs +45 -0
- package/dist/application/transform/schema/required-variants.cjs.map +1 -0
- package/dist/application/transform/schema/required-variants.mjs +42 -0
- package/dist/application/transform/schema/required-variants.mjs.map +1 -0
- package/dist/application/transform/schema/schema-transform.cjs +72 -0
- package/dist/application/transform/schema/schema-transform.cjs.map +1 -0
- package/dist/application/transform/schema/schema-transform.mjs +68 -0
- package/dist/application/transform/schema/schema-transform.mjs.map +1 -0
- package/dist/application/transform/schema/unevaluated-properties.cjs +61 -0
- package/dist/application/transform/schema/unevaluated-properties.cjs.map +1 -0
- package/dist/application/transform/schema/unevaluated-properties.mjs +59 -0
- package/dist/application/transform/schema/unevaluated-properties.mjs.map +1 -0
- package/dist/application/transform/schema-comment.cjs +130 -0
- package/dist/application/transform/schema-comment.cjs.map +1 -0
- package/dist/application/transform/schema-comment.mjs +125 -0
- package/dist/application/transform/schema-comment.mjs.map +1 -0
- package/dist/application/transform/shared-types.cjs +8 -0
- package/dist/application/transform/shared-types.cjs.map +1 -0
- package/dist/application/transform/shared-types.mjs +6 -0
- package/dist/application/transform/shared-types.mjs.map +1 -0
- package/dist/application/transform/type-combinators.cjs +49 -0
- package/dist/application/transform/type-combinators.cjs.map +1 -0
- package/dist/application/transform/type-combinators.mjs +42 -0
- package/dist/application/transform/type-combinators.mjs.map +1 -0
- package/dist/cli/cli-arguments.cjs +145 -0
- package/dist/cli/cli-arguments.cjs.map +1 -0
- package/dist/cli/cli-arguments.mjs +137 -0
- package/dist/cli/cli-arguments.mjs.map +1 -0
- package/dist/cli/cli-errors.cjs +81 -0
- package/dist/cli/cli-errors.cjs.map +1 -0
- package/dist/cli/cli-errors.mjs +77 -0
- package/dist/cli/cli-errors.mjs.map +1 -0
- package/dist/cli/cli-output.cjs +42 -0
- package/dist/cli/cli-output.cjs.map +1 -0
- package/dist/cli/cli-output.mjs +35 -0
- package/dist/cli/cli-output.mjs.map +1 -0
- package/dist/cli/docs-links.cjs +6 -0
- package/dist/cli/docs-links.cjs.map +1 -0
- package/dist/cli/docs-links.mjs +4 -0
- package/dist/cli/docs-links.mjs.map +1 -0
- package/dist/cli/fix-option.cjs +19 -0
- package/dist/cli/fix-option.cjs.map +1 -0
- package/dist/cli/fix-option.mjs +16 -0
- package/dist/cli/fix-option.mjs.map +1 -0
- package/dist/cli/help-text.cjs +44 -0
- package/dist/cli/help-text.cjs.map +1 -0
- package/dist/cli/help-text.mjs +42 -0
- package/dist/cli/help-text.mjs.map +1 -0
- package/dist/cli/main.cjs +67 -0
- package/dist/cli/main.cjs.map +1 -0
- package/dist/cli/main.d.cts +2 -0
- package/dist/cli/main.d.mts +2 -0
- package/dist/cli/main.d.ts +2 -0
- package/dist/cli/main.mjs +59 -0
- package/dist/cli/main.mjs.map +1 -0
- package/dist/cli/redocly-apis.cjs +69 -0
- package/dist/cli/redocly-apis.cjs.map +1 -0
- package/dist/cli/redocly-apis.mjs +66 -0
- package/dist/cli/redocly-apis.mjs.map +1 -0
- package/dist/cli/ref-limits.cjs +14 -0
- package/dist/cli/ref-limits.cjs.map +1 -0
- package/dist/cli/ref-limits.mjs +12 -0
- package/dist/cli/ref-limits.mjs.map +1 -0
- package/dist/cli/run-cli.cjs +113 -0
- package/dist/cli/run-cli.cjs.map +1 -0
- package/dist/cli/run-cli.mjs +111 -0
- package/dist/cli/run-cli.mjs.map +1 -0
- package/dist/domain/assert-never.cjs +8 -0
- package/dist/domain/assert-never.cjs.map +1 -0
- package/dist/domain/assert-never.mjs +6 -0
- package/dist/domain/assert-never.mjs.map +1 -0
- package/dist/domain/errors.cjs +52 -0
- package/dist/domain/errors.cjs.map +1 -0
- package/dist/domain/errors.mjs +48 -0
- package/dist/domain/errors.mjs.map +1 -0
- package/dist/domain/ir/constructors.cjs +93 -0
- package/dist/domain/ir/constructors.cjs.map +1 -0
- package/dist/domain/ir/constructors.mjs +74 -0
- package/dist/domain/ir/constructors.mjs.map +1 -0
- package/dist/domain/ir/identifier-text.cjs +29 -0
- package/dist/domain/ir/identifier-text.cjs.map +1 -0
- package/dist/domain/ir/identifier-text.mjs +25 -0
- package/dist/domain/ir/identifier-text.mjs.map +1 -0
- package/dist/domain/ir/newer-identifier-ranges.cjs +109 -0
- package/dist/domain/ir/newer-identifier-ranges.cjs.map +1 -0
- package/dist/domain/ir/newer-identifier-ranges.mjs +106 -0
- package/dist/domain/ir/newer-identifier-ranges.mjs.map +1 -0
- package/dist/domain/ir/normalize.cjs +32 -0
- package/dist/domain/ir/normalize.cjs.map +1 -0
- package/dist/domain/ir/normalize.mjs +29 -0
- package/dist/domain/ir/normalize.mjs.map +1 -0
- package/dist/domain/ir/property-name.cjs +19 -0
- package/dist/domain/ir/property-name.cjs.map +1 -0
- package/dist/domain/ir/property-name.mjs +16 -0
- package/dist/domain/ir/property-name.mjs.map +1 -0
- package/dist/domain/ir/raw-text-escapes.cjs +25 -0
- package/dist/domain/ir/raw-text-escapes.cjs.map +1 -0
- package/dist/domain/ir/raw-text-escapes.mjs +22 -0
- package/dist/domain/ir/raw-text-escapes.mjs.map +1 -0
- package/dist/domain/openapi/admitted-values.cjs +75 -0
- package/dist/domain/openapi/admitted-values.cjs.map +1 -0
- package/dist/domain/openapi/admitted-values.mjs +72 -0
- package/dist/domain/openapi/admitted-values.mjs.map +1 -0
- package/dist/domain/openapi/alias-expansion.cjs +50 -0
- package/dist/domain/openapi/alias-expansion.cjs.map +1 -0
- package/dist/domain/openapi/alias-expansion.mjs +45 -0
- package/dist/domain/openapi/alias-expansion.mjs.map +1 -0
- package/dist/domain/openapi/binary-content.cjs +48 -0
- package/dist/domain/openapi/binary-content.cjs.map +1 -0
- package/dist/domain/openapi/binary-content.mjs +45 -0
- package/dist/domain/openapi/binary-content.mjs.map +1 -0
- package/dist/domain/openapi/components-object.cjs +29 -0
- package/dist/domain/openapi/components-object.cjs.map +1 -0
- package/dist/domain/openapi/components-object.mjs +24 -0
- package/dist/domain/openapi/components-object.mjs.map +1 -0
- package/dist/domain/openapi/discriminated-union.cjs +68 -0
- package/dist/domain/openapi/discriminated-union.cjs.map +1 -0
- package/dist/domain/openapi/discriminated-union.mjs +62 -0
- package/dist/domain/openapi/discriminated-union.mjs.map +1 -0
- package/dist/domain/openapi/discriminator-conflicts.cjs +143 -0
- package/dist/domain/openapi/discriminator-conflicts.cjs.map +1 -0
- package/dist/domain/openapi/discriminator-conflicts.mjs +141 -0
- package/dist/domain/openapi/discriminator-conflicts.mjs.map +1 -0
- package/dist/domain/openapi/json-pointer.cjs +31 -0
- package/dist/domain/openapi/json-pointer.cjs.map +1 -0
- package/dist/domain/openapi/json-pointer.mjs +27 -0
- package/dist/domain/openapi/json-pointer.mjs.map +1 -0
- package/dist/domain/openapi/media-type-object.cjs +14 -0
- package/dist/domain/openapi/media-type-object.cjs.map +1 -0
- package/dist/domain/openapi/media-type-object.mjs +11 -0
- package/dist/domain/openapi/media-type-object.mjs.map +1 -0
- package/dist/domain/openapi/parameter-object.cjs +13 -0
- package/dist/domain/openapi/parameter-object.cjs.map +1 -0
- package/dist/domain/openapi/parameter-object.mjs +10 -0
- package/dist/domain/openapi/parameter-object.mjs.map +1 -0
- package/dist/domain/openapi/path-item-object.cjs +35 -0
- package/dist/domain/openapi/path-item-object.cjs.map +1 -0
- package/dist/domain/openapi/path-item-object.mjs +30 -0
- package/dist/domain/openapi/path-item-object.mjs.map +1 -0
- package/dist/domain/openapi/path-templates.cjs +23 -0
- package/dist/domain/openapi/path-templates.cjs.map +1 -0
- package/dist/domain/openapi/path-templates.mjs +21 -0
- package/dist/domain/openapi/path-templates.mjs.map +1 -0
- package/dist/domain/openapi/unsupported-features.cjs +87 -0
- package/dist/domain/openapi/unsupported-features.cjs.map +1 -0
- package/dist/domain/openapi/unsupported-features.mjs +84 -0
- package/dist/domain/openapi/unsupported-features.mjs.map +1 -0
- package/dist/domain/output-fixes.cjs +101 -0
- package/dist/domain/output-fixes.cjs.map +1 -0
- package/dist/domain/output-fixes.mjs +94 -0
- package/dist/domain/output-fixes.mjs.map +1 -0
- package/dist/domain/warnings.cjs +15 -0
- package/dist/domain/warnings.cjs.map +1 -0
- package/dist/domain/warnings.mjs +12 -0
- package/dist/domain/warnings.mjs.map +1 -0
- package/dist/index.cjs +98 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +841 -0
- package/dist/index.d.mts +841 -0
- package/dist/index.d.ts +841 -0
- package/dist/index.mjs +27 -0
- package/dist/index.mjs.map +1 -0
- package/dist/transform/components-object.cjs +15 -0
- package/dist/transform/components-object.cjs.map +1 -0
- package/dist/transform/components-object.mjs +11 -0
- package/dist/transform/components-object.mjs.map +1 -0
- package/dist/transform/header-object.cjs +12 -0
- package/dist/transform/header-object.cjs.map +1 -0
- package/dist/transform/header-object.mjs +10 -0
- package/dist/transform/header-object.mjs.map +1 -0
- package/dist/transform/media-type-object.cjs +12 -0
- package/dist/transform/media-type-object.cjs.map +1 -0
- package/dist/transform/media-type-object.mjs +10 -0
- package/dist/transform/media-type-object.mjs.map +1 -0
- package/dist/transform/operation-object.cjs +26 -0
- package/dist/transform/operation-object.cjs.map +1 -0
- package/dist/transform/operation-object.mjs +21 -0
- package/dist/transform/operation-object.mjs.map +1 -0
- package/dist/transform/parameter-object.cjs +12 -0
- package/dist/transform/parameter-object.cjs.map +1 -0
- package/dist/transform/parameter-object.mjs +10 -0
- package/dist/transform/parameter-object.mjs.map +1 -0
- package/dist/transform/path-item-object.cjs +12 -0
- package/dist/transform/path-item-object.cjs.map +1 -0
- package/dist/transform/path-item-object.mjs +10 -0
- package/dist/transform/path-item-object.mjs.map +1 -0
- package/dist/transform/paths-object.cjs +11 -0
- package/dist/transform/paths-object.cjs.map +1 -0
- package/dist/transform/paths-object.mjs +9 -0
- package/dist/transform/paths-object.mjs.map +1 -0
- package/dist/transform/request-body-object.cjs +12 -0
- package/dist/transform/request-body-object.cjs.map +1 -0
- package/dist/transform/request-body-object.mjs +10 -0
- package/dist/transform/request-body-object.mjs.map +1 -0
- package/dist/transform/response-object.cjs +12 -0
- package/dist/transform/response-object.cjs.map +1 -0
- package/dist/transform/response-object.mjs +10 -0
- package/dist/transform/response-object.mjs.map +1 -0
- package/dist/transform/responses-object.cjs +12 -0
- package/dist/transform/responses-object.cjs.map +1 -0
- package/dist/transform/responses-object.mjs +10 -0
- package/dist/transform/responses-object.mjs.map +1 -0
- package/dist/transform/schema-object.cjs +21 -0
- package/dist/transform/schema-object.cjs.map +1 -0
- package/dist/transform/schema-object.mjs +16 -0
- package/dist/transform/schema-object.mjs.map +1 -0
- package/package.json +115 -4
- package/src/adapters/node-file-system/node-file-system.ts +44 -0
- package/src/adapters/redocly-loader/alias-limit.ts +20 -0
- package/src/adapters/redocly-loader/allowed-hosts.ts +62 -0
- package/src/adapters/redocly-loader/bundled-ref-repair.ts +65 -0
- package/src/adapters/redocly-loader/malformed-refs.ts +61 -0
- package/src/adapters/redocly-loader/redocly-config-source.ts +78 -0
- package/src/adapters/redocly-loader/redocly-schema-loader.ts +262 -0
- package/src/adapters/redocly-loader/ref-access.ts +146 -0
- package/src/adapters/redocly-loader/ref-holders.ts +43 -0
- package/src/adapters/redocly-loader/remote-fetch.ts +104 -0
- package/src/adapters/redocly-loader/schema-load-errors.ts +124 -0
- package/src/adapters/redocly-loader/schema-source.ts +151 -0
- package/src/adapters/redocly-loader/unsupported-keys.ts +102 -0
- package/src/adapters/terminal-logger/terminal-logger.ts +98 -0
- package/src/adapters/type-ast-bridge/footer-nodes.ts +38 -0
- package/src/adapters/type-ast-bridge/ir-declarations-to-typescript.ts +100 -0
- package/src/adapters/type-ast-bridge/ir-to-typescript.ts +223 -0
- package/src/adapters/type-ast-bridge/lazy-node.ts +24 -0
- package/src/adapters/type-ast-bridge/load-typescript.ts +84 -0
- package/src/adapters/type-ast-bridge/print-typescript.ts +33 -0
- package/src/adapters/type-ast-bridge/typescript-raw-text.ts +49 -0
- package/src/adapters/type-ast-bridge/typescript-to-ir.ts +294 -0
- package/src/adapters/type-ast-bridge/typescript-types.ts +8 -0
- package/src/api/ast-to-string.ts +59 -0
- package/src/api/comment-header.ts +7 -0
- package/src/api/default-ports.ts +44 -0
- package/src/api/discriminator-conflict-warnings.ts +43 -0
- package/src/api/discriminator-enum-names.ts +26 -0
- package/src/api/discriminator-enum-parent.ts +129 -0
- package/src/api/discriminator-enum.ts +115 -0
- package/src/api/discriminator-other-owners.ts +97 -0
- package/src/api/discriminator-patch.ts +147 -0
- package/src/api/discriminator-scan.ts +260 -0
- package/src/api/document-declarations.ts +41 -0
- package/src/api/document-refs.ts +71 -0
- package/src/api/document-run.ts +177 -0
- package/src/api/enum-values-warnings.ts +21 -0
- package/src/api/footer-entry.ts +23 -0
- package/src/api/footer-sink.ts +67 -0
- package/src/api/legacy-callback-warning.ts +29 -0
- package/src/api/legacy-ts-helpers.ts +311 -0
- package/src/api/legacy-utils.ts +118 -0
- package/src/api/openapi-ts.ts +62 -0
- package/src/api/path-template-warnings.ts +27 -0
- package/src/api/schema-callbacks.ts +211 -0
- package/src/api/string-to-ast.ts +27 -0
- package/src/api/transform-context.ts +93 -0
- package/src/api/transform-schema.ts +123 -0
- package/src/api/type-helpers.ts +130 -0
- package/src/api/unsupported-feature-warnings.ts +33 -0
- package/src/application/ports/file-system.ts +12 -0
- package/src/application/ports/logger.ts +16 -0
- package/src/application/ports/redocly-config-source.ts +20 -0
- package/src/application/ports/schema-loader.ts +32 -0
- package/src/application/print/comment-writer.ts +91 -0
- package/src/application/print/declaration-printer.ts +100 -0
- package/src/application/print/literal-text.ts +62 -0
- package/src/application/print/print-nodes.ts +62 -0
- package/src/application/print/print-options.ts +11 -0
- package/src/application/print/text-writer.ts +83 -0
- package/src/application/print/type-printer.ts +287 -0
- package/src/application/stack-overflow.ts +54 -0
- package/src/application/transform/document/assignability.ts +203 -0
- package/src/application/transform/document/components.ts +189 -0
- package/src/application/transform/document/declared-types.ts +93 -0
- package/src/application/transform/document/defs-root.ts +25 -0
- package/src/application/transform/document/document-member.ts +20 -0
- package/src/application/transform/document/document.ts +215 -0
- package/src/application/transform/document/exploded-query.ts +91 -0
- package/src/application/transform/document/global-type-references.ts +78 -0
- package/src/application/transform/document/header.ts +34 -0
- package/src/application/transform/document/kept-deprecated.ts +135 -0
- package/src/application/transform/document/list-assignability.ts +87 -0
- package/src/application/transform/document/media-type.ts +78 -0
- package/src/application/transform/document/operation.ts +64 -0
- package/src/application/transform/document/parameter.ts +45 -0
- package/src/application/transform/document/parameters.ts +265 -0
- package/src/application/transform/document/path-item.ts +168 -0
- package/src/application/transform/document/path-key-overlaps.ts +201 -0
- package/src/application/transform/document/path-template-replace.ts +90 -0
- package/src/application/transform/document/paths-enum.ts +127 -0
- package/src/application/transform/document/paths.ts +273 -0
- package/src/application/transform/document/request-body.ts +50 -0
- package/src/application/transform/document/response.ts +109 -0
- package/src/application/transform/document/responses.ts +29 -0
- package/src/application/transform/document/root-type-aliases.ts +107 -0
- package/src/application/transform/document/template-key-match.ts +183 -0
- package/src/application/transform/document/type-assignability.ts +268 -0
- package/src/application/transform/document/type-key.ts +80 -0
- package/src/application/transform/document/type-resolution.ts +163 -0
- package/src/application/transform/document/webhooks.ts +22 -0
- package/src/application/transform/document-entries.ts +28 -0
- package/src/application/transform/footer/document-footer.ts +212 -0
- package/src/application/transform/footer/enum-naming.ts +210 -0
- package/src/application/transform/footer/enum-values-check.ts +171 -0
- package/src/application/transform/footer/evaluation.ts +47 -0
- package/src/application/transform/footer/shared-enum-names.ts +86 -0
- package/src/application/transform/footer/type-evaluation.ts +294 -0
- package/src/application/transform/footer/type-rules.ts +269 -0
- package/src/application/transform/helper-types.ts +92 -0
- package/src/application/transform/literal-type.ts +54 -0
- package/src/application/transform/numbered-names.ts +20 -0
- package/src/application/transform/ref-pointer/generated-location.ts +211 -0
- package/src/application/transform/ref-pointer/generated-shape.ts +275 -0
- package/src/application/transform/ref-pointer/inline-cycles.ts +56 -0
- package/src/application/transform/ref-pointer/original-index.ts +95 -0
- package/src/application/transform/ref-pointer/pointer-type.ts +92 -0
- package/src/application/transform/ref-pointer/pointer-walk.ts +96 -0
- package/src/application/transform/ref-pointer/typed-walk.ts +192 -0
- package/src/application/transform/ref-type.ts +102 -0
- package/src/application/transform/schema/access-flags.ts +63 -0
- package/src/application/transform/schema/array-type.ts +213 -0
- package/src/application/transform/schema/composition-type.ts +255 -0
- package/src/application/transform/schema/core-type.ts +119 -0
- package/src/application/transform/schema/discriminated-union.ts +58 -0
- package/src/application/transform/schema/discriminator-property.ts +33 -0
- package/src/application/transform/schema/enum-rule.ts +280 -0
- package/src/application/transform/schema/inherited-discriminator.ts +54 -0
- package/src/application/transform/schema/object-type.ts +289 -0
- package/src/application/transform/schema/presence-members.ts +96 -0
- package/src/application/transform/schema/required-variants.ts +88 -0
- package/src/application/transform/schema/schema-context.ts +136 -0
- package/src/application/transform/schema/schema-rule.ts +29 -0
- package/src/application/transform/schema/schema-transform.ts +99 -0
- package/src/application/transform/schema/unevaluated-properties.ts +105 -0
- package/src/application/transform/schema-comment.ts +196 -0
- package/src/application/transform/shared-types.ts +9 -0
- package/src/application/transform/transform-context.ts +51 -0
- package/src/application/transform/type-combinators.ts +57 -0
- package/src/cli/cli-arguments.ts +208 -0
- package/src/cli/cli-dependencies.ts +47 -0
- package/src/cli/cli-errors.ts +127 -0
- package/src/cli/cli-output.ts +67 -0
- package/src/cli/docs-links.ts +6 -0
- package/src/cli/fix-option.ts +29 -0
- package/src/cli/help-text.ts +52 -0
- package/src/cli/main.ts +73 -0
- package/src/cli/redocly-apis.ts +95 -0
- package/src/cli/ref-limits.ts +16 -0
- package/src/cli/run-cli.ts +131 -0
- package/src/domain/assert-never.ts +8 -0
- package/src/domain/errors.ts +76 -0
- package/src/domain/ir/constructors.ts +142 -0
- package/src/domain/ir/identifier-text.ts +49 -0
- package/src/domain/ir/newer-identifier-ranges.ts +109 -0
- package/src/domain/ir/nodes.ts +225 -0
- package/src/domain/ir/normalize.ts +51 -0
- package/src/domain/ir/property-name.ts +28 -0
- package/src/domain/ir/raw-text-escapes.ts +37 -0
- package/src/domain/openapi/admitted-values.ts +113 -0
- package/src/domain/openapi/alias-expansion.ts +72 -0
- package/src/domain/openapi/binary-content.ts +74 -0
- package/src/domain/openapi/components-object.ts +52 -0
- package/src/domain/openapi/discriminated-union.ts +109 -0
- package/src/domain/openapi/discriminator-conflicts.ts +251 -0
- package/src/domain/openapi/document-object.ts +12 -0
- package/src/domain/openapi/header-object.ts +9 -0
- package/src/domain/openapi/json-pointer.ts +46 -0
- package/src/domain/openapi/media-type-object.ts +26 -0
- package/src/domain/openapi/operation-object.ts +13 -0
- package/src/domain/openapi/parameter-object.ts +34 -0
- package/src/domain/openapi/path-item-object.ts +70 -0
- package/src/domain/openapi/path-templates.ts +31 -0
- package/src/domain/openapi/request-body-object.ts +7 -0
- package/src/domain/openapi/response-object.ts +14 -0
- package/src/domain/openapi/schema-object.ts +61 -0
- package/src/domain/openapi/unsupported-features.ts +139 -0
- package/src/domain/output-fixes.ts +136 -0
- package/src/domain/warnings.ts +20 -0
- package/src/index.ts +67 -0
- package/src/transform/components-object.ts +27 -0
- package/src/transform/header-object.ts +19 -0
- package/src/transform/media-type-object.ts +19 -0
- package/src/transform/operation-object.ts +36 -0
- package/src/transform/parameter-object.ts +19 -0
- package/src/transform/parameters-array.ts +19 -0
- package/src/transform/path-item-object.ts +22 -0
- package/src/transform/paths-enum.ts +8 -0
- package/src/transform/paths-object.ts +15 -0
- package/src/transform/request-body-object.ts +19 -0
- package/src/transform/response-object.ts +19 -0
- package/src/transform/responses-object.ts +19 -0
- package/src/transform/schema-object.ts +36 -0
- package/src/transform/webhooks-object.ts +15 -0
- package/src/types/generator-options.ts +278 -0
- package/src/types/openapi-common.ts +100 -0
- package/src/types/openapi-document.ts +196 -0
- package/src/types/openapi-path-item.ts +130 -0
- package/src/types/openapi-request.ts +209 -0
- package/src/types/openapi-response.ts +81 -0
- package/src/types/openapi-schema.ts +169 -0
- package/src/types/openapi-security.ts +116 -0
- package/src/types.ts +12 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-rules.mjs","sources":["../../../../src/application/transform/footer/type-rules.ts"],"sourcesContent":["import { irObject, irProperty } from \"../../../domain/ir/constructors.js\";\nimport type {\n IrMember,\n IrObjectType,\n IrPropertySignature,\n IrType,\n} from \"../../../domain/ir/nodes.js\";\nimport { toPropertyName } from \"../../../domain/ir/property-name.js\";\nimport {\n type Evaluated,\n type Evaluation,\n MISSING,\n OPAQUE,\n propertyKey,\n unionType,\n} from \"./evaluation.js\";\n\n/**\n * Rules of TypeScript about intersections, `Omit` and `Extract` that the `--enum-values` check\n * needs (ADR-027). They read the types as written, before `FlattenedDeepRequired`.\n */\n\n/** The part of the evaluator these rules use. */\nexport interface TypeExpansion {\n membersOf(value: Evaluated): readonly Evaluation[];\n}\n\n/** A unit value of a type: a literal, `null` or `undefined`. */\ntype Unit = string;\n\n/**\n * The parts an intersection is made of, nested intersections flattened: each object type, or\n * `null` for a part that is not one.\n */\nfunction objectParts(\n types: TypeExpansion,\n value: Evaluated,\n parts: readonly IrType[],\n): (IrObjectType | null)[] {\n return parts.flatMap((part) => {\n const members = types.membersOf({ ...value, type: part });\n const [only] = members;\n if (members.length !== 1 || only?.kind !== \"type\") {\n return [null];\n }\n if (only.type.kind === \"intersection\") {\n return objectParts(types, only, only.type.types);\n }\n return [only.type.kind === \"object\" ? only.type : null];\n });\n}\n\nfunction unitOf(type: IrType): Unit | null {\n switch (type.kind) {\n case \"stringLiteral\":\n return `s:${type.value}`;\n case \"numberLiteral\":\n return `n:${type.value}`;\n case \"booleanLiteral\":\n return `b:${type.value}`;\n case \"keyword\":\n return type.keyword === \"null\" || type.keyword === \"undefined\" ? type.keyword : null;\n default:\n return null;\n }\n}\n\n/** The unit values of a type made only of units, or `null` where it has other values. */\nfunction unitsOf(types: TypeExpansion, value: Evaluated, type: IrType): ReadonlySet<Unit> | null {\n const units = types.membersOf({ ...value, type }).map((member) => {\n return member.kind === \"type\" ? unitOf(member.type) : null;\n });\n return units.includes(null) ? null : new Set(units as Unit[]);\n}\n\nfunction propertiesNamed(objects: readonly IrObjectType[], key: string): IrPropertySignature[] {\n return objects.flatMap((object) => {\n const members: readonly IrMember[] = object.members;\n return members.filter(\n (member): member is IrPropertySignature =>\n member.kind === \"property\" && propertyKey(member.name) === key,\n );\n });\n}\n\n/** Whether properties of the same name share no unit value, one of them required. */\nfunction isNeverProperty(\n types: TypeExpansion,\n value: Evaluated,\n found: IrPropertySignature[],\n): boolean {\n if (found.length < 2 || found.every((property) => property.isOptional)) {\n return false;\n }\n const sets = found.map((property) => unitsOf(types, value, property.type));\n if (sets.includes(null)) {\n return false;\n }\n // At least two properties, so at least two sets.\n const [first, ...rest] = sets as [ReadonlySet<Unit>, ...ReadonlySet<Unit>[]];\n const shared = [...first].filter((unit) => rest.every((set) => set.has(unit)));\n return shared.length === 0;\n}\n\n/** Whether an intersection has `null` or `undefined` next to an object: `null & { a: 1 }`. */\nfunction isNullishObject(types: TypeExpansion, value: Evaluated, parts: readonly IrType[]) {\n const singles = parts.map((part) => {\n const members = types.membersOf({ ...value, type: part });\n const [only] = members;\n return members.length === 1 && only?.kind === \"type\" ? only.type : null;\n });\n const isNullish = (type: IrType | null) =>\n type?.kind === \"keyword\" && (type.keyword === \"null\" || type.keyword === \"undefined\");\n return singles.some(isNullish) && singles.some((type) => type?.kind === \"object\");\n}\n\n/**\n * Whether TypeScript reduces an intersection to `never`: `null` or `undefined` meets an object,\n * or objects share a property with literal types that have no value in common, one of them\n * requiring it (`{ a: \"x\" } & { a: \"y\" }`). Other properties are left alone, so the answer is\n * sure where it is yes.\n */\nexport function isNeverIntersection(\n types: TypeExpansion,\n value: Evaluated,\n parts: readonly IrType[],\n): boolean {\n if (isNullishObject(types, value, parts)) {\n return true;\n }\n const objects = objectParts(types, value, parts).filter((part) => part !== null);\n if (objects.length < 2) {\n return false;\n }\n const keys = new Set(\n objects.flatMap((object) =>\n object.members.flatMap((member) =>\n member.kind === \"property\" ? [propertyKey(member.name)] : [],\n ),\n ),\n );\n const valueOfKeys = { ...value, deep: false };\n return [...keys].some((key) =>\n isNeverProperty(types, valueOfKeys, propertiesNamed(objects, key)),\n );\n}\n\n/** Whether `key` reaches only an index signature of this object: it declares no such property. */\nfunction isSignatureOnly(types: TypeExpansion, value: Evaluated, key: string | null): boolean {\n const members = types.membersOf(value);\n const [only] = members;\n if (\n key === null ||\n members.length !== 1 ||\n only?.kind !== \"type\" ||\n only.type.kind !== \"object\"\n ) {\n return false;\n }\n const { members: declared } = only.type;\n const hasSignature = declared.some((member) => member.kind === \"indexSignature\");\n return hasSignature && propertiesNamed([only.type], key).length === 0;\n}\n\n/**\n * The parts of an intersection indexed by `index`, as TypeScript reads them: where one part\n * declares the property, the index signatures of the others do not take part\n * (`{ a: X } & { [key: string]: Y }` gives `X` for `a`).\n */\nexport function declaredFirst(\n types: TypeExpansion,\n value: Evaluated,\n key: string | null,\n parts: readonly { readonly type: IrType; readonly found: Evaluation }[],\n): Evaluation[] {\n const bySignature = parts.map(({ type }) => isSignatureOnly(types, { ...value, type }, key));\n const isDeclared = parts.some(({ found }, at) => found.kind === \"type\" && !bySignature[at]);\n return parts.filter((_, at) => !(isDeclared && bySignature[at])).map(({ found }) => found);\n}\n\n/**\n * Whether a member of `membersOf` has `key` as a property that `{ key: unknown }` accepts: written\n * and, outside `FlattenedDeepRequired`, required. An index signature does not count, as in\n * TypeScript. Such a member is expanded, parts included, so it is an object, an intersection of\n * members, or a primitive or array type, which has no such property; a type the evaluator cannot\n * read makes `membersOf` opaque instead.\n */\nfunction hasKey(value: Evaluated, key: string): boolean {\n const { type } = value;\n if (type.kind === \"intersection\") {\n return type.types.some((part) => hasKey({ ...value, type: part }, key));\n }\n if (type.kind !== \"object\") {\n return false;\n }\n return propertiesNamed([type], key).some((property) => value.deep || !property.isOptional);\n}\n\n/**\n * `Extract<T, { key: unknown }>`: the members of `T` that have `key`. When none has it the\n * result is `never`; it is `missing` here, as the location then types nothing.\n */\nexport function extracted(types: TypeExpansion, value: Evaluated, key: string): Evaluation {\n const members = types.membersOf(value);\n if (members.some((member) => member.kind !== \"type\")) {\n return OPAQUE;\n }\n const kept = (members as Evaluated[]).filter((member) => hasKey(member, key));\n if (kept.length === 0) {\n return MISSING;\n }\n return { ...value, type: unionType(kept.map((member) => member.type)) };\n}\n\nfunction omittedKeys(types: TypeExpansion, value: Evaluated, keys: IrType): Set<string> | null {\n const members = types.membersOf({ ...value, type: keys });\n const names = members.map((member) =>\n member.kind === \"type\" && member.type.kind === \"stringLiteral\" ? member.type.value : null,\n );\n return names.includes(null) ? null : new Set(names as string[]);\n}\n\n/** Whether two members name the same property: merging them would need their intersection. */\nfunction hasSharedProperty(members: readonly IrMember[]): boolean {\n const names = members.flatMap((member) =>\n member.kind === \"property\" ? [propertyKey(member.name)] : [],\n );\n return new Set(names).size !== names.length;\n}\n\n/**\n * `Omit<T, K>` for literal keys `K` over an object or an intersection of objects. A string index\n * signature makes `keyof T` all strings, so only the index signatures are left.\n */\nexport function omitted(types: TypeExpansion, value: Evaluated, keys: IrType): Evaluation {\n const names = omittedKeys(types, value, keys);\n const objects = objectParts(types, value, [value.type]);\n if (names === null || objects.length === 0 || objects.includes(null)) {\n return OPAQUE;\n }\n const members = (objects as IrObjectType[]).flatMap((object) => object.members);\n if (hasSharedProperty(members)) {\n return OPAQUE;\n }\n const signatures = members.filter((member) => member.kind === \"indexSignature\");\n const kept =\n signatures.length > 0\n ? signatures\n : members.filter(\n (member) => member.kind !== \"property\" || !names.has(propertyKey(member.name)),\n );\n return { ...value, type: { kind: \"object\", members: kept } };\n}\n\n/** The `--read-write-markers` types and their one member (`READ_WRITE_MARKER_TYPES`). */\nconst READ_WRITE_MARKER_KEYS: ReadonlyMap<string, string> = new Map([\n [\"$Read\", \"$read\"],\n [\"$Write\", \"$write\"],\n]);\n\n/** `$Read<T>` is `{ readonly $read: T }`: an object, which holds no enum value. */\nexport function markerObject(name: string, argument: Evaluated): Evaluated | null {\n const key = READ_WRITE_MARKER_KEYS.get(name);\n if (key === undefined) {\n return null;\n }\n const member = irProperty(toPropertyName(key), argument.type, { isReadonly: true });\n return { ...argument, type: irObject([member]) };\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
function lines(...parts) {
|
|
4
|
+
return parts.join("\n");
|
|
5
|
+
}
|
|
6
|
+
const HELPER_TYPES = {
|
|
7
|
+
withRequired: {
|
|
8
|
+
name: "WithRequired",
|
|
9
|
+
text: lines("type WithRequired<T, K extends keyof T> = T & {", " [P in K]-?: T[P];", "};")
|
|
10
|
+
},
|
|
11
|
+
// `unevaluated-properties` (roadmap R11): the value types of every member of a union, so a
|
|
12
|
+
// `$ref` to a `oneOf` schema gives the values of each variant, not only of the shared keys.
|
|
13
|
+
propertyValues: {
|
|
14
|
+
name: "PropertyValues",
|
|
15
|
+
text: "type PropertyValues<T> = T extends unknown ? T[keyof T] : never;"
|
|
16
|
+
},
|
|
17
|
+
// Task 7.4 changes the original text on purpose: `readonly unknown[]` also flattens the arrays
|
|
18
|
+
// of `--immutable` (upstream #2714, #2749), and `NonNullable` looks through nullable parents
|
|
19
|
+
// (upstream #2737). The old text did not compile for those schemas.
|
|
20
|
+
flattenedDeepRequired: {
|
|
21
|
+
name: "FlattenedDeepRequired",
|
|
22
|
+
text: lines(
|
|
23
|
+
"type FlattenedDeepRequired<T> = {",
|
|
24
|
+
" [K in keyof T]-?: FlattenedDeepRequired<T[K] extends readonly unknown[] | undefined | null ? Extract<T[K], readonly unknown[]>[number] : NonNullable<T[K]>>;",
|
|
25
|
+
"};"
|
|
26
|
+
)
|
|
27
|
+
},
|
|
28
|
+
// `readonly unknown[]`: a readonly array value type stays as is (upstream #2749).
|
|
29
|
+
readonlyArray: {
|
|
30
|
+
name: "ReadonlyArray",
|
|
31
|
+
text: lines(
|
|
32
|
+
"type ReadonlyArray<T> = [",
|
|
33
|
+
" Exclude<T, undefined>",
|
|
34
|
+
"] extends [",
|
|
35
|
+
" readonly unknown[]",
|
|
36
|
+
"] ? Readonly<Exclude<T, undefined>> : Readonly<Exclude<T, undefined>[]>;"
|
|
37
|
+
)
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
const READ_WRITE_MARKER_TYPES = lines(
|
|
41
|
+
"export type $Read<T> = {",
|
|
42
|
+
" readonly $read: T;",
|
|
43
|
+
"};",
|
|
44
|
+
"export type $Write<T> = {",
|
|
45
|
+
" readonly $write: T;",
|
|
46
|
+
"};",
|
|
47
|
+
"type ReadWritePrimitive = string | number | boolean | bigint | symbol | null | undefined;",
|
|
48
|
+
"type ReadWriteLeaf = ReadWritePrimitive | ((...args: never) => unknown);",
|
|
49
|
+
"type ReadWriteMarkedKeys<T, Marker> = {",
|
|
50
|
+
" [K in keyof T]-?: NonNullable<T[K]> extends never ? never : NonNullable<T[K]> extends Marker ? K : never;",
|
|
51
|
+
"}[keyof T];",
|
|
52
|
+
'type ReadWriteResolveArray<T extends readonly unknown[], Resolved extends "read" | "write"> = T[number][] extends T ? T extends unknown[] ? ReadWriteResolve<T[number], Resolved>[] : readonly ReadWriteResolve<T[number], Resolved>[] : {',
|
|
53
|
+
" [K in keyof T]: ReadWriteResolve<T[K], Resolved>;",
|
|
54
|
+
"};",
|
|
55
|
+
'type ReadWriteResolve<T, Resolved extends "read" | "write"> = Resolved extends "read" ? Readable<T> : Writable<T>;',
|
|
56
|
+
'export type Readable<T> = T extends $Write<any> ? never : T extends $Read<infer U> ? Readable<U> : T extends ReadWriteLeaf ? T : T extends readonly unknown[] ? ReadWriteResolveArray<T, "read"> : T extends object ? {',
|
|
57
|
+
" [K in keyof T as K extends ReadWriteMarkedKeys<T, $Write<any>> ? never : K]: Readable<T[K]>;",
|
|
58
|
+
"} : T;",
|
|
59
|
+
'export type Writable<T> = T extends $Read<any> ? never : T extends $Write<infer U> ? Writable<U> : T extends ReadWriteLeaf ? T : T extends readonly unknown[] ? ReadWriteResolveArray<T, "write"> : T extends object ? {',
|
|
60
|
+
" [K in keyof T as K extends ReadWriteMarkedKeys<T, $Read<any>> ? never : K]: Writable<T[K]>;",
|
|
61
|
+
"} & {",
|
|
62
|
+
" [K in ReadWriteMarkedKeys<T, $Read<any>>]?: never;",
|
|
63
|
+
"} : T;"
|
|
64
|
+
);
|
|
65
|
+
|
|
66
|
+
exports.HELPER_TYPES = HELPER_TYPES;
|
|
67
|
+
exports.READ_WRITE_MARKER_TYPES = READ_WRITE_MARKER_TYPES;
|
|
68
|
+
//# sourceMappingURL=helper-types.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helper-types.cjs","sources":["../../../src/application/transform/helper-types.ts"],"sourcesContent":["/**\n * The helper type aliases the generator adds to the footer, declared once each. The text is the\n * original's source text as the TypeScript printer printed it, so printing it as written gives\n * the original output (ENGINEERING_PLAN 6.2 and 6.6), except for the fixes noted below.\n */\nexport interface HelperType {\n readonly name: string;\n readonly text: string;\n}\n\nfunction lines(...parts: readonly string[]): string {\n return parts.join(\"\\n\");\n}\n\nexport const HELPER_TYPES = {\n withRequired: {\n name: \"WithRequired\",\n text: lines(\"type WithRequired<T, K extends keyof T> = T & {\", \" [P in K]-?: T[P];\", \"};\"),\n },\n // `unevaluated-properties` (roadmap R11): the value types of every member of a union, so a\n // `$ref` to a `oneOf` schema gives the values of each variant, not only of the shared keys.\n propertyValues: {\n name: \"PropertyValues\",\n text: \"type PropertyValues<T> = T extends unknown ? T[keyof T] : never;\",\n },\n // Task 7.4 changes the original text on purpose: `readonly unknown[]` also flattens the arrays\n // of `--immutable` (upstream #2714, #2749), and `NonNullable` looks through nullable parents\n // (upstream #2737). The old text did not compile for those schemas.\n flattenedDeepRequired: {\n name: \"FlattenedDeepRequired\",\n text: lines(\n \"type FlattenedDeepRequired<T> = {\",\n \" [K in keyof T]-?: FlattenedDeepRequired<T[K] extends readonly unknown[] | undefined | \" +\n \"null ? Extract<T[K], readonly unknown[]>[number] : NonNullable<T[K]>>;\",\n \"};\",\n ),\n },\n // `readonly unknown[]`: a readonly array value type stays as is (upstream #2749).\n readonlyArray: {\n name: \"ReadonlyArray\",\n text: lines(\n \"type ReadonlyArray<T> = [\",\n \" Exclude<T, undefined>\",\n \"] extends [\",\n \" readonly unknown[]\",\n \"] ? Readonly<Exclude<T, undefined>> : Readonly<Exclude<T, undefined>[]>;\",\n ),\n },\n} as const satisfies Readonly<Record<string, HelperType>>;\n\n/**\n * The `--read-write-markers` helper types, written before the root types. Task 7.6 replaces the\n * original text on purpose (ADR-014): primitives (also branded), readonly arrays, tuples,\n * intersected arrays and null-only properties keep their types (upstream #2615, #2620, #2632,\n * #2717, #2765). The declarations equal `Readable` / `Writable` of openapi-typesafe-helpers\n * (`test/api/read-write-marker-types.test.ts`); the text is what the TypeScript printer prints.\n */\nexport const READ_WRITE_MARKER_TYPES = lines(\n \"export type $Read<T> = {\",\n \" readonly $read: T;\",\n \"};\",\n \"export type $Write<T> = {\",\n \" readonly $write: T;\",\n \"};\",\n \"type ReadWritePrimitive = string | number | boolean | bigint | symbol | null | undefined;\",\n \"type ReadWriteLeaf = ReadWritePrimitive | ((...args: never) => unknown);\",\n \"type ReadWriteMarkedKeys<T, Marker> = {\",\n \" [K in keyof T]-?: NonNullable<T[K]> extends never ? never : NonNullable<T[K]> \" +\n \"extends Marker ? K : never;\",\n \"}[keyof T];\",\n 'type ReadWriteResolveArray<T extends readonly unknown[], Resolved extends \"read\" | ' +\n '\"write\"> = T[number][] extends T ? T extends unknown[] ? ReadWriteResolve<T[number], ' +\n \"Resolved>[] : readonly ReadWriteResolve<T[number], Resolved>[] : {\",\n \" [K in keyof T]: ReadWriteResolve<T[K], Resolved>;\",\n \"};\",\n 'type ReadWriteResolve<T, Resolved extends \"read\" | \"write\"> = Resolved extends \"read\" ? ' +\n \"Readable<T> : Writable<T>;\",\n \"export type Readable<T> = T extends $Write<any> ? never : T extends $Read<infer U> ? \" +\n \"Readable<U> : T extends ReadWriteLeaf ? T : T extends readonly unknown[] ? \" +\n 'ReadWriteResolveArray<T, \"read\"> : T extends object ? {',\n \" [K in keyof T as K extends ReadWriteMarkedKeys<T, $Write<any>> ? never : K]: \" +\n \"Readable<T[K]>;\",\n \"} : T;\",\n \"export type Writable<T> = T extends $Read<any> ? never : T extends $Write<infer U> ? \" +\n \"Writable<U> : T extends ReadWriteLeaf ? T : T extends readonly unknown[] ? \" +\n 'ReadWriteResolveArray<T, \"write\"> : T extends object ? {',\n \" [K in keyof T as K extends ReadWriteMarkedKeys<T, $Read<any>> ? never : K]: \" +\n \"Writable<T[K]>;\",\n \"} & {\",\n \" [K in ReadWriteMarkedKeys<T, $Read<any>>]?: never;\",\n \"} : T;\",\n);\n"],"names":[],"mappings":";;AAUA,SAAS,SAAS,KAAA,EAAkC;AAClD,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAEO,MAAM,YAAA,GAAe;AAAA,EAC1B,YAAA,EAAc;AAAA,IACZ,IAAA,EAAM,cAAA;AAAA,IACN,IAAA,EAAM,KAAA,CAAM,iDAAA,EAAmD,uBAAA,EAAyB,IAAI;AAAA,GAC9F;AAAA;AAAA;AAAA,EAGA,cAAA,EAAgB;AAAA,IACd,IAAA,EAAM,gBAAA;AAAA,IACN,IAAA,EAAM;AAAA,GACR;AAAA;AAAA;AAAA;AAAA,EAIA,qBAAA,EAAuB;AAAA,IACrB,IAAA,EAAM,uBAAA;AAAA,IACN,IAAA,EAAM,KAAA;AAAA,MACJ,mCAAA;AAAA,MACA,kKAAA;AAAA,MAEA;AAAA;AACF,GACF;AAAA;AAAA,EAEA,aAAA,EAAe;AAAA,IACb,IAAA,EAAM,eAAA;AAAA,IACN,IAAA,EAAM,KAAA;AAAA,MACJ,2BAAA;AAAA,MACA,2BAAA;AAAA,MACA,aAAA;AAAA,MACA,wBAAA;AAAA,MACA;AAAA;AACF;AAEJ;AASO,MAAM,uBAAA,GAA0B,KAAA;AAAA,EACrC,0BAAA;AAAA,EACA,wBAAA;AAAA,EACA,IAAA;AAAA,EACA,2BAAA;AAAA,EACA,yBAAA;AAAA,EACA,IAAA;AAAA,EACA,2FAAA;AAAA,EACA,0EAAA;AAAA,EACA,yCAAA;AAAA,EACA,+GAAA;AAAA,EAEA,aAAA;AAAA,EACA,4OAAA;AAAA,EAGA,uDAAA;AAAA,EACA,IAAA;AAAA,EACA,oHAAA;AAAA,EAEA,yNAAA;AAAA,EAGA,kGAAA;AAAA,EAEA,QAAA;AAAA,EACA,0NAAA;AAAA,EAGA,iGAAA;AAAA,EAEA,OAAA;AAAA,EACA,wDAAA;AAAA,EACA;AACF;;;"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
function lines(...parts) {
|
|
2
|
+
return parts.join("\n");
|
|
3
|
+
}
|
|
4
|
+
const HELPER_TYPES = {
|
|
5
|
+
withRequired: {
|
|
6
|
+
name: "WithRequired",
|
|
7
|
+
text: lines("type WithRequired<T, K extends keyof T> = T & {", " [P in K]-?: T[P];", "};")
|
|
8
|
+
},
|
|
9
|
+
// `unevaluated-properties` (roadmap R11): the value types of every member of a union, so a
|
|
10
|
+
// `$ref` to a `oneOf` schema gives the values of each variant, not only of the shared keys.
|
|
11
|
+
propertyValues: {
|
|
12
|
+
name: "PropertyValues",
|
|
13
|
+
text: "type PropertyValues<T> = T extends unknown ? T[keyof T] : never;"
|
|
14
|
+
},
|
|
15
|
+
// Task 7.4 changes the original text on purpose: `readonly unknown[]` also flattens the arrays
|
|
16
|
+
// of `--immutable` (upstream #2714, #2749), and `NonNullable` looks through nullable parents
|
|
17
|
+
// (upstream #2737). The old text did not compile for those schemas.
|
|
18
|
+
flattenedDeepRequired: {
|
|
19
|
+
name: "FlattenedDeepRequired",
|
|
20
|
+
text: lines(
|
|
21
|
+
"type FlattenedDeepRequired<T> = {",
|
|
22
|
+
" [K in keyof T]-?: FlattenedDeepRequired<T[K] extends readonly unknown[] | undefined | null ? Extract<T[K], readonly unknown[]>[number] : NonNullable<T[K]>>;",
|
|
23
|
+
"};"
|
|
24
|
+
)
|
|
25
|
+
},
|
|
26
|
+
// `readonly unknown[]`: a readonly array value type stays as is (upstream #2749).
|
|
27
|
+
readonlyArray: {
|
|
28
|
+
name: "ReadonlyArray",
|
|
29
|
+
text: lines(
|
|
30
|
+
"type ReadonlyArray<T> = [",
|
|
31
|
+
" Exclude<T, undefined>",
|
|
32
|
+
"] extends [",
|
|
33
|
+
" readonly unknown[]",
|
|
34
|
+
"] ? Readonly<Exclude<T, undefined>> : Readonly<Exclude<T, undefined>[]>;"
|
|
35
|
+
)
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
const READ_WRITE_MARKER_TYPES = lines(
|
|
39
|
+
"export type $Read<T> = {",
|
|
40
|
+
" readonly $read: T;",
|
|
41
|
+
"};",
|
|
42
|
+
"export type $Write<T> = {",
|
|
43
|
+
" readonly $write: T;",
|
|
44
|
+
"};",
|
|
45
|
+
"type ReadWritePrimitive = string | number | boolean | bigint | symbol | null | undefined;",
|
|
46
|
+
"type ReadWriteLeaf = ReadWritePrimitive | ((...args: never) => unknown);",
|
|
47
|
+
"type ReadWriteMarkedKeys<T, Marker> = {",
|
|
48
|
+
" [K in keyof T]-?: NonNullable<T[K]> extends never ? never : NonNullable<T[K]> extends Marker ? K : never;",
|
|
49
|
+
"}[keyof T];",
|
|
50
|
+
'type ReadWriteResolveArray<T extends readonly unknown[], Resolved extends "read" | "write"> = T[number][] extends T ? T extends unknown[] ? ReadWriteResolve<T[number], Resolved>[] : readonly ReadWriteResolve<T[number], Resolved>[] : {',
|
|
51
|
+
" [K in keyof T]: ReadWriteResolve<T[K], Resolved>;",
|
|
52
|
+
"};",
|
|
53
|
+
'type ReadWriteResolve<T, Resolved extends "read" | "write"> = Resolved extends "read" ? Readable<T> : Writable<T>;',
|
|
54
|
+
'export type Readable<T> = T extends $Write<any> ? never : T extends $Read<infer U> ? Readable<U> : T extends ReadWriteLeaf ? T : T extends readonly unknown[] ? ReadWriteResolveArray<T, "read"> : T extends object ? {',
|
|
55
|
+
" [K in keyof T as K extends ReadWriteMarkedKeys<T, $Write<any>> ? never : K]: Readable<T[K]>;",
|
|
56
|
+
"} : T;",
|
|
57
|
+
'export type Writable<T> = T extends $Read<any> ? never : T extends $Write<infer U> ? Writable<U> : T extends ReadWriteLeaf ? T : T extends readonly unknown[] ? ReadWriteResolveArray<T, "write"> : T extends object ? {',
|
|
58
|
+
" [K in keyof T as K extends ReadWriteMarkedKeys<T, $Read<any>> ? never : K]: Writable<T[K]>;",
|
|
59
|
+
"} & {",
|
|
60
|
+
" [K in ReadWriteMarkedKeys<T, $Read<any>>]?: never;",
|
|
61
|
+
"} : T;"
|
|
62
|
+
);
|
|
63
|
+
|
|
64
|
+
export { HELPER_TYPES, READ_WRITE_MARKER_TYPES };
|
|
65
|
+
//# sourceMappingURL=helper-types.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helper-types.mjs","sources":["../../../src/application/transform/helper-types.ts"],"sourcesContent":["/**\n * The helper type aliases the generator adds to the footer, declared once each. The text is the\n * original's source text as the TypeScript printer printed it, so printing it as written gives\n * the original output (ENGINEERING_PLAN 6.2 and 6.6), except for the fixes noted below.\n */\nexport interface HelperType {\n readonly name: string;\n readonly text: string;\n}\n\nfunction lines(...parts: readonly string[]): string {\n return parts.join(\"\\n\");\n}\n\nexport const HELPER_TYPES = {\n withRequired: {\n name: \"WithRequired\",\n text: lines(\"type WithRequired<T, K extends keyof T> = T & {\", \" [P in K]-?: T[P];\", \"};\"),\n },\n // `unevaluated-properties` (roadmap R11): the value types of every member of a union, so a\n // `$ref` to a `oneOf` schema gives the values of each variant, not only of the shared keys.\n propertyValues: {\n name: \"PropertyValues\",\n text: \"type PropertyValues<T> = T extends unknown ? T[keyof T] : never;\",\n },\n // Task 7.4 changes the original text on purpose: `readonly unknown[]` also flattens the arrays\n // of `--immutable` (upstream #2714, #2749), and `NonNullable` looks through nullable parents\n // (upstream #2737). The old text did not compile for those schemas.\n flattenedDeepRequired: {\n name: \"FlattenedDeepRequired\",\n text: lines(\n \"type FlattenedDeepRequired<T> = {\",\n \" [K in keyof T]-?: FlattenedDeepRequired<T[K] extends readonly unknown[] | undefined | \" +\n \"null ? Extract<T[K], readonly unknown[]>[number] : NonNullable<T[K]>>;\",\n \"};\",\n ),\n },\n // `readonly unknown[]`: a readonly array value type stays as is (upstream #2749).\n readonlyArray: {\n name: \"ReadonlyArray\",\n text: lines(\n \"type ReadonlyArray<T> = [\",\n \" Exclude<T, undefined>\",\n \"] extends [\",\n \" readonly unknown[]\",\n \"] ? Readonly<Exclude<T, undefined>> : Readonly<Exclude<T, undefined>[]>;\",\n ),\n },\n} as const satisfies Readonly<Record<string, HelperType>>;\n\n/**\n * The `--read-write-markers` helper types, written before the root types. Task 7.6 replaces the\n * original text on purpose (ADR-014): primitives (also branded), readonly arrays, tuples,\n * intersected arrays and null-only properties keep their types (upstream #2615, #2620, #2632,\n * #2717, #2765). The declarations equal `Readable` / `Writable` of openapi-typesafe-helpers\n * (`test/api/read-write-marker-types.test.ts`); the text is what the TypeScript printer prints.\n */\nexport const READ_WRITE_MARKER_TYPES = lines(\n \"export type $Read<T> = {\",\n \" readonly $read: T;\",\n \"};\",\n \"export type $Write<T> = {\",\n \" readonly $write: T;\",\n \"};\",\n \"type ReadWritePrimitive = string | number | boolean | bigint | symbol | null | undefined;\",\n \"type ReadWriteLeaf = ReadWritePrimitive | ((...args: never) => unknown);\",\n \"type ReadWriteMarkedKeys<T, Marker> = {\",\n \" [K in keyof T]-?: NonNullable<T[K]> extends never ? never : NonNullable<T[K]> \" +\n \"extends Marker ? K : never;\",\n \"}[keyof T];\",\n 'type ReadWriteResolveArray<T extends readonly unknown[], Resolved extends \"read\" | ' +\n '\"write\"> = T[number][] extends T ? T extends unknown[] ? ReadWriteResolve<T[number], ' +\n \"Resolved>[] : readonly ReadWriteResolve<T[number], Resolved>[] : {\",\n \" [K in keyof T]: ReadWriteResolve<T[K], Resolved>;\",\n \"};\",\n 'type ReadWriteResolve<T, Resolved extends \"read\" | \"write\"> = Resolved extends \"read\" ? ' +\n \"Readable<T> : Writable<T>;\",\n \"export type Readable<T> = T extends $Write<any> ? never : T extends $Read<infer U> ? \" +\n \"Readable<U> : T extends ReadWriteLeaf ? T : T extends readonly unknown[] ? \" +\n 'ReadWriteResolveArray<T, \"read\"> : T extends object ? {',\n \" [K in keyof T as K extends ReadWriteMarkedKeys<T, $Write<any>> ? never : K]: \" +\n \"Readable<T[K]>;\",\n \"} : T;\",\n \"export type Writable<T> = T extends $Read<any> ? never : T extends $Write<infer U> ? \" +\n \"Writable<U> : T extends ReadWriteLeaf ? T : T extends readonly unknown[] ? \" +\n 'ReadWriteResolveArray<T, \"write\"> : T extends object ? {',\n \" [K in keyof T as K extends ReadWriteMarkedKeys<T, $Read<any>> ? never : K]: \" +\n \"Writable<T[K]>;\",\n \"} & {\",\n \" [K in ReadWriteMarkedKeys<T, $Read<any>>]?: never;\",\n \"} : T;\",\n);\n"],"names":[],"mappings":"AAUA,SAAS,SAAS,KAAA,EAAkC;AAClD,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAEO,MAAM,YAAA,GAAe;AAAA,EAC1B,YAAA,EAAc;AAAA,IACZ,IAAA,EAAM,cAAA;AAAA,IACN,IAAA,EAAM,KAAA,CAAM,iDAAA,EAAmD,uBAAA,EAAyB,IAAI;AAAA,GAC9F;AAAA;AAAA;AAAA,EAGA,cAAA,EAAgB;AAAA,IACd,IAAA,EAAM,gBAAA;AAAA,IACN,IAAA,EAAM;AAAA,GACR;AAAA;AAAA;AAAA;AAAA,EAIA,qBAAA,EAAuB;AAAA,IACrB,IAAA,EAAM,uBAAA;AAAA,IACN,IAAA,EAAM,KAAA;AAAA,MACJ,mCAAA;AAAA,MACA,kKAAA;AAAA,MAEA;AAAA;AACF,GACF;AAAA;AAAA,EAEA,aAAA,EAAe;AAAA,IACb,IAAA,EAAM,eAAA;AAAA,IACN,IAAA,EAAM,KAAA;AAAA,MACJ,2BAAA;AAAA,MACA,2BAAA;AAAA,MACA,aAAA;AAAA,MACA,wBAAA;AAAA,MACA;AAAA;AACF;AAEJ;AASO,MAAM,uBAAA,GAA0B,KAAA;AAAA,EACrC,0BAAA;AAAA,EACA,wBAAA;AAAA,EACA,IAAA;AAAA,EACA,2BAAA;AAAA,EACA,yBAAA;AAAA,EACA,IAAA;AAAA,EACA,2FAAA;AAAA,EACA,0EAAA;AAAA,EACA,yCAAA;AAAA,EACA,+GAAA;AAAA,EAEA,aAAA;AAAA,EACA,4OAAA;AAAA,EAGA,uDAAA;AAAA,EACA,IAAA;AAAA,EACA,oHAAA;AAAA,EAEA,yNAAA;AAAA,EAGA,kGAAA;AAAA,EAEA,QAAA;AAAA,EACA,0NAAA;AAAA,EAGA,iGAAA;AAAA,EAEA,OAAA;AAAA,EACA,wDAAA;AAAA,EACA;AACF;;"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const constructors = require('../../domain/ir/constructors.cjs');
|
|
4
|
+
const propertyName = require('../../domain/ir/property-name.cjs');
|
|
5
|
+
const sharedTypes = require('./shared-types.cjs');
|
|
6
|
+
|
|
7
|
+
function objectLiteralType(value) {
|
|
8
|
+
const members = Object.entries(value).map(
|
|
9
|
+
([key, entry]) => constructors.irProperty(propertyName.toPropertyName(key), literalType(entry))
|
|
10
|
+
);
|
|
11
|
+
return members.length > 0 ? constructors.irObject(members) : constructors.irRecord(constructors.irKeyword("string"), constructors.irKeyword("never"));
|
|
12
|
+
}
|
|
13
|
+
function arrayLiteralType(value) {
|
|
14
|
+
return value.length === 0 ? constructors.irArray(constructors.irKeyword("never")) : constructors.irTuple(value.map((item) => constructors.irTupleElement(literalType(item))));
|
|
15
|
+
}
|
|
16
|
+
function literalType(value) {
|
|
17
|
+
if (typeof value === "string") {
|
|
18
|
+
return constructors.irString(value, "json");
|
|
19
|
+
}
|
|
20
|
+
if (typeof value === "number") {
|
|
21
|
+
return Number.isFinite(value) ? constructors.irNumber(value) : constructors.irRaw(String(value));
|
|
22
|
+
}
|
|
23
|
+
if (typeof value === "boolean") {
|
|
24
|
+
return constructors.irBoolean(value);
|
|
25
|
+
}
|
|
26
|
+
if (value === null) {
|
|
27
|
+
return constructors.irKeyword("null");
|
|
28
|
+
}
|
|
29
|
+
if (Array.isArray(value)) {
|
|
30
|
+
return arrayLiteralType(value);
|
|
31
|
+
}
|
|
32
|
+
return typeof value === "object" ? objectLiteralType(value) : sharedTypes.UNKNOWN_TYPE;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
exports.literalType = literalType;
|
|
36
|
+
//# sourceMappingURL=literal-type.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"literal-type.cjs","sources":["../../../src/application/transform/literal-type.ts"],"sourcesContent":["import {\n irArray,\n irBoolean,\n irKeyword,\n irNumber,\n irObject,\n irProperty,\n irRaw,\n irRecord,\n irString,\n irTuple,\n irTupleElement,\n} from \"../../domain/ir/constructors.js\";\nimport type { IrType } from \"../../domain/ir/nodes.js\";\nimport { toPropertyName } from \"../../domain/ir/property-name.js\";\nimport { UNKNOWN_TYPE } from \"./shared-types.js\";\n\nfunction objectLiteralType(value: object): IrType {\n const members = Object.entries(value).map(([key, entry]) =>\n irProperty(toPropertyName(key), literalType(entry)),\n );\n return members.length > 0 ? irObject(members) : irRecord(irKeyword(\"string\"), irKeyword(\"never\"));\n}\n\nfunction arrayLiteralType(value: readonly unknown[]): IrType {\n return value.length === 0\n ? irArray(irKeyword(\"never\"))\n : irTuple(value.map((item) => irTupleElement(literalType(item))));\n}\n\n/**\n * The literal type of a JSON value (the original `tsLiteral`): strings as JSON text, arrays as\n * tuples (an empty one as `never[]`), objects as object types (an empty one as\n * `Record<string, never>`), and anything else (`undefined`, functions) as `unknown`.\n */\nexport function literalType(value: unknown): IrType {\n if (typeof value === \"string\") {\n return irString(value, \"json\");\n }\n if (typeof value === \"number\") {\n // YAML `.nan` and `.inf` have no literal type; the original prints them as `NaN`, `-Infinity`.\n return Number.isFinite(value) ? irNumber(value) : irRaw(String(value));\n }\n if (typeof value === \"boolean\") {\n return irBoolean(value);\n }\n if (value === null) {\n return irKeyword(\"null\");\n }\n if (Array.isArray(value)) {\n return arrayLiteralType(value);\n }\n return typeof value === \"object\" ? objectLiteralType(value) : UNKNOWN_TYPE;\n}\n"],"names":["irProperty","toPropertyName","irObject","irRecord","irKeyword","irArray","irTuple","irTupleElement","irString","irNumber","irRaw","irBoolean","UNKNOWN_TYPE"],"mappings":";;;;;;AAiBA,SAAS,kBAAkB,KAAA,EAAuB;AAChD,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,CAAE,GAAA;AAAA,IAAI,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KACpDA,uBAAA,CAAWC,2BAAA,CAAe,GAAG,CAAA,EAAG,WAAA,CAAY,KAAK,CAAC;AAAA,GACpD;AACA,EAAA,OAAO,OAAA,CAAQ,MAAA,GAAS,CAAA,GAAIC,qBAAA,CAAS,OAAO,CAAA,GAAIC,qBAAA,CAASC,sBAAA,CAAU,QAAQ,CAAA,EAAGA,sBAAA,CAAU,OAAO,CAAC,CAAA;AAClG;AAEA,SAAS,iBAAiB,KAAA,EAAmC;AAC3D,EAAA,OAAO,MAAM,MAAA,KAAW,CAAA,GACpBC,qBAAQD,sBAAA,CAAU,OAAO,CAAC,CAAA,GAC1BE,oBAAA,CAAQ,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAASC,2BAAA,CAAe,YAAY,IAAI,CAAC,CAAC,CAAC,CAAA;AACpE;AAOO,SAAS,YAAY,KAAA,EAAwB;AAClD,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAOC,qBAAA,CAAS,OAAO,MAAM,CAAA;AAAA,EAC/B;AACA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAE7B,IAAA,OAAO,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA,GAAIC,qBAAA,CAAS,KAAK,CAAA,GAAIC,kBAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,EACvE;AACA,EAAA,IAAI,OAAO,UAAU,SAAA,EAAW;AAC9B,IAAA,OAAOC,uBAAU,KAAK,CAAA;AAAA,EACxB;AACA,EAAA,IAAI,UAAU,IAAA,EAAM;AAClB,IAAA,OAAOP,uBAAU,MAAM,CAAA;AAAA,EACzB;AACA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,OAAO,iBAAiB,KAAK,CAAA;AAAA,EAC/B;AACA,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,GAAW,iBAAA,CAAkB,KAAK,CAAA,GAAIQ,wBAAA;AAChE;;"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { irString, irNumber, irRaw, irBoolean, irKeyword, irArray, irTuple, irTupleElement, irProperty, irObject, irRecord } from '../../domain/ir/constructors.mjs';
|
|
2
|
+
import { toPropertyName } from '../../domain/ir/property-name.mjs';
|
|
3
|
+
import { UNKNOWN_TYPE } from './shared-types.mjs';
|
|
4
|
+
|
|
5
|
+
function objectLiteralType(value) {
|
|
6
|
+
const members = Object.entries(value).map(
|
|
7
|
+
([key, entry]) => irProperty(toPropertyName(key), literalType(entry))
|
|
8
|
+
);
|
|
9
|
+
return members.length > 0 ? irObject(members) : irRecord(irKeyword("string"), irKeyword("never"));
|
|
10
|
+
}
|
|
11
|
+
function arrayLiteralType(value) {
|
|
12
|
+
return value.length === 0 ? irArray(irKeyword("never")) : irTuple(value.map((item) => irTupleElement(literalType(item))));
|
|
13
|
+
}
|
|
14
|
+
function literalType(value) {
|
|
15
|
+
if (typeof value === "string") {
|
|
16
|
+
return irString(value, "json");
|
|
17
|
+
}
|
|
18
|
+
if (typeof value === "number") {
|
|
19
|
+
return Number.isFinite(value) ? irNumber(value) : irRaw(String(value));
|
|
20
|
+
}
|
|
21
|
+
if (typeof value === "boolean") {
|
|
22
|
+
return irBoolean(value);
|
|
23
|
+
}
|
|
24
|
+
if (value === null) {
|
|
25
|
+
return irKeyword("null");
|
|
26
|
+
}
|
|
27
|
+
if (Array.isArray(value)) {
|
|
28
|
+
return arrayLiteralType(value);
|
|
29
|
+
}
|
|
30
|
+
return typeof value === "object" ? objectLiteralType(value) : UNKNOWN_TYPE;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export { literalType };
|
|
34
|
+
//# sourceMappingURL=literal-type.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"literal-type.mjs","sources":["../../../src/application/transform/literal-type.ts"],"sourcesContent":["import {\n irArray,\n irBoolean,\n irKeyword,\n irNumber,\n irObject,\n irProperty,\n irRaw,\n irRecord,\n irString,\n irTuple,\n irTupleElement,\n} from \"../../domain/ir/constructors.js\";\nimport type { IrType } from \"../../domain/ir/nodes.js\";\nimport { toPropertyName } from \"../../domain/ir/property-name.js\";\nimport { UNKNOWN_TYPE } from \"./shared-types.js\";\n\nfunction objectLiteralType(value: object): IrType {\n const members = Object.entries(value).map(([key, entry]) =>\n irProperty(toPropertyName(key), literalType(entry)),\n );\n return members.length > 0 ? irObject(members) : irRecord(irKeyword(\"string\"), irKeyword(\"never\"));\n}\n\nfunction arrayLiteralType(value: readonly unknown[]): IrType {\n return value.length === 0\n ? irArray(irKeyword(\"never\"))\n : irTuple(value.map((item) => irTupleElement(literalType(item))));\n}\n\n/**\n * The literal type of a JSON value (the original `tsLiteral`): strings as JSON text, arrays as\n * tuples (an empty one as `never[]`), objects as object types (an empty one as\n * `Record<string, never>`), and anything else (`undefined`, functions) as `unknown`.\n */\nexport function literalType(value: unknown): IrType {\n if (typeof value === \"string\") {\n return irString(value, \"json\");\n }\n if (typeof value === \"number\") {\n // YAML `.nan` and `.inf` have no literal type; the original prints them as `NaN`, `-Infinity`.\n return Number.isFinite(value) ? irNumber(value) : irRaw(String(value));\n }\n if (typeof value === \"boolean\") {\n return irBoolean(value);\n }\n if (value === null) {\n return irKeyword(\"null\");\n }\n if (Array.isArray(value)) {\n return arrayLiteralType(value);\n }\n return typeof value === \"object\" ? objectLiteralType(value) : UNKNOWN_TYPE;\n}\n"],"names":[],"mappings":";;;;AAiBA,SAAS,kBAAkB,KAAA,EAAuB;AAChD,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,CAAE,GAAA;AAAA,IAAI,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KACpD,UAAA,CAAW,cAAA,CAAe,GAAG,CAAA,EAAG,WAAA,CAAY,KAAK,CAAC;AAAA,GACpD;AACA,EAAA,OAAO,OAAA,CAAQ,MAAA,GAAS,CAAA,GAAI,QAAA,CAAS,OAAO,CAAA,GAAI,QAAA,CAAS,SAAA,CAAU,QAAQ,CAAA,EAAG,SAAA,CAAU,OAAO,CAAC,CAAA;AAClG;AAEA,SAAS,iBAAiB,KAAA,EAAmC;AAC3D,EAAA,OAAO,MAAM,MAAA,KAAW,CAAA,GACpB,QAAQ,SAAA,CAAU,OAAO,CAAC,CAAA,GAC1B,OAAA,CAAQ,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS,cAAA,CAAe,YAAY,IAAI,CAAC,CAAC,CAAC,CAAA;AACpE;AAOO,SAAS,YAAY,KAAA,EAAwB;AAClD,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,QAAA,CAAS,OAAO,MAAM,CAAA;AAAA,EAC/B;AACA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAE7B,IAAA,OAAO,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA,GAAI,QAAA,CAAS,KAAK,CAAA,GAAI,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,EACvE;AACA,EAAA,IAAI,OAAO,UAAU,SAAA,EAAW;AAC9B,IAAA,OAAO,UAAU,KAAK,CAAA;AAAA,EACxB;AACA,EAAA,IAAI,UAAU,IAAA,EAAM;AAClB,IAAA,OAAO,UAAU,MAAM,CAAA;AAAA,EACzB;AACA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,OAAO,iBAAiB,KAAK,CAAA;AAAA,EAC/B;AACA,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,GAAW,iBAAA,CAAkB,KAAK,CAAA,GAAI,YAAA;AAChE;;"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
function withNumberedRepeats(names, numbered) {
|
|
4
|
+
const written = new Set(names);
|
|
5
|
+
const taken = /* @__PURE__ */ new Set();
|
|
6
|
+
return names.map((name) => {
|
|
7
|
+
let unique = name;
|
|
8
|
+
for (let count = 2; taken.has(unique); count += 1) {
|
|
9
|
+
const candidate = numbered(name, count);
|
|
10
|
+
unique = written.has(candidate) ? unique : candidate;
|
|
11
|
+
}
|
|
12
|
+
taken.add(unique);
|
|
13
|
+
return unique;
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
exports.withNumberedRepeats = withNumberedRepeats;
|
|
18
|
+
//# sourceMappingURL=numbered-names.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"numbered-names.cjs","sources":["../../../src/application/transform/numbered-names.ts"],"sourcesContent":["/** Builds the name for the `count`-th use of `name` (2, 3…). */\nexport type NumberedName = (name: string, count: number) => string;\n\n/**\n * Names made unique, in order: the first use of a name keeps it, each repeat gets the lowest\n * number from 2 whose name is not written anywhere in the list.\n */\nexport function withNumberedRepeats(names: readonly string[], numbered: NumberedName): string[] {\n const written = new Set(names);\n const taken = new Set<string>();\n return names.map((name) => {\n let unique = name;\n for (let count = 2; taken.has(unique); count += 1) {\n const candidate = numbered(name, count);\n unique = written.has(candidate) ? unique : candidate;\n }\n taken.add(unique);\n return unique;\n });\n}\n"],"names":[],"mappings":";;AAOO,SAAS,mBAAA,CAAoB,OAA0B,QAAA,EAAkC;AAC9F,EAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,KAAK,CAAA;AAC7B,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAY;AAC9B,EAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS;AACzB,IAAA,IAAI,MAAA,GAAS,IAAA;AACb,IAAA,KAAA,IAAS,QAAQ,CAAA,EAAG,KAAA,CAAM,IAAI,MAAM,CAAA,EAAG,SAAS,CAAA,EAAG;AACjD,MAAA,MAAM,SAAA,GAAY,QAAA,CAAS,IAAA,EAAM,KAAK,CAAA;AACtC,MAAA,MAAA,GAAS,OAAA,CAAQ,GAAA,CAAI,SAAS,CAAA,GAAI,MAAA,GAAS,SAAA;AAAA,IAC7C;AACA,IAAA,KAAA,CAAM,IAAI,MAAM,CAAA;AAChB,IAAA,OAAO,MAAA;AAAA,EACT,CAAC,CAAA;AACH;;"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
function withNumberedRepeats(names, numbered) {
|
|
2
|
+
const written = new Set(names);
|
|
3
|
+
const taken = /* @__PURE__ */ new Set();
|
|
4
|
+
return names.map((name) => {
|
|
5
|
+
let unique = name;
|
|
6
|
+
for (let count = 2; taken.has(unique); count += 1) {
|
|
7
|
+
const candidate = numbered(name, count);
|
|
8
|
+
unique = written.has(candidate) ? unique : candidate;
|
|
9
|
+
}
|
|
10
|
+
taken.add(unique);
|
|
11
|
+
return unique;
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export { withNumberedRepeats };
|
|
16
|
+
//# sourceMappingURL=numbered-names.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"numbered-names.mjs","sources":["../../../src/application/transform/numbered-names.ts"],"sourcesContent":["/** Builds the name for the `count`-th use of `name` (2, 3…). */\nexport type NumberedName = (name: string, count: number) => string;\n\n/**\n * Names made unique, in order: the first use of a name keeps it, each repeat gets the lowest\n * number from 2 whose name is not written anywhere in the list.\n */\nexport function withNumberedRepeats(names: readonly string[], numbered: NumberedName): string[] {\n const written = new Set(names);\n const taken = new Set<string>();\n return names.map((name) => {\n let unique = name;\n for (let count = 2; taken.has(unique); count += 1) {\n const candidate = numbered(name, count);\n unique = written.has(candidate) ? unique : candidate;\n }\n taken.add(unique);\n return unique;\n });\n}\n"],"names":[],"mappings":"AAOO,SAAS,mBAAA,CAAoB,OAA0B,QAAA,EAAkC;AAC9F,EAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,KAAK,CAAA;AAC7B,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAY;AAC9B,EAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS;AACzB,IAAA,IAAI,MAAA,GAAS,IAAA;AACb,IAAA,KAAA,IAAS,QAAQ,CAAA,EAAG,KAAA,CAAM,IAAI,MAAM,CAAA,EAAG,SAAS,CAAA,EAAG;AACjD,MAAA,MAAM,SAAA,GAAY,QAAA,CAAS,IAAA,EAAM,KAAK,CAAA;AACtC,MAAA,MAAA,GAAS,OAAA,CAAQ,GAAA,CAAI,SAAS,CAAA,GAAI,MAAA,GAAS,SAAA;AAAA,IAC7C;AACA,IAAA,KAAA,CAAM,IAAI,MAAM,CAAA;AAChB,IAAA,OAAO,MAAA;AAAA,EACT,CAAC,CAAA;AACH;;"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const jsonPointer = require('../../../domain/openapi/json-pointer.cjs');
|
|
4
|
+
const generatedShape = require('./generated-shape.cjs');
|
|
5
|
+
const pointerWalk = require('./pointer-walk.cjs');
|
|
6
|
+
|
|
7
|
+
const PARENT_LOCATION_PAIRS = /* @__PURE__ */ new Set([
|
|
8
|
+
"allOf",
|
|
9
|
+
"prefixItems",
|
|
10
|
+
"patternProperties"
|
|
11
|
+
]);
|
|
12
|
+
const RECORD_VALUE_KEYWORDS = /* @__PURE__ */ new Set([
|
|
13
|
+
"additionalProperties",
|
|
14
|
+
"unevaluatedProperties"
|
|
15
|
+
]);
|
|
16
|
+
const KEPT_PAIRS = /* @__PURE__ */ new Set(["anyOf", "oneOf", "$defs"]);
|
|
17
|
+
const PARENT_LOCATION_KEYWORDS = /* @__PURE__ */ new Set(["items", ...RECORD_VALUE_KEYWORDS]);
|
|
18
|
+
const INDEX_RE = /^\d+$/;
|
|
19
|
+
function childOf(node, segment) {
|
|
20
|
+
return (generatedShape.isJsonObject(node) || Array.isArray(node)) && segment !== void 0 ? node[segment] : void 0;
|
|
21
|
+
}
|
|
22
|
+
function pairStep(value, next, path) {
|
|
23
|
+
return { path, child: childOf(value, next), length: 2, isSchema: true };
|
|
24
|
+
}
|
|
25
|
+
function schemaStep(node, segment, next) {
|
|
26
|
+
const value = childOf(node, segment);
|
|
27
|
+
const named = next === void 0 ? [] : [next];
|
|
28
|
+
if (segment === "properties") {
|
|
29
|
+
return pairStep(value, next, named);
|
|
30
|
+
}
|
|
31
|
+
if (PARENT_LOCATION_PAIRS.has(segment) || segment === "items" && Array.isArray(value)) {
|
|
32
|
+
return pairStep(value, next, []);
|
|
33
|
+
}
|
|
34
|
+
if (KEPT_PAIRS.has(segment)) {
|
|
35
|
+
return pairStep(value, next, [segment, ...named]);
|
|
36
|
+
}
|
|
37
|
+
if (!PARENT_LOCATION_KEYWORDS.has(segment)) {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
const isRecordValue = RECORD_VALUE_KEYWORDS.has(segment);
|
|
41
|
+
return {
|
|
42
|
+
path: [],
|
|
43
|
+
child: value,
|
|
44
|
+
length: 1,
|
|
45
|
+
isSchema: true,
|
|
46
|
+
isFromAdditionalProperties: isRecordValue
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
function isPathItem(path) {
|
|
50
|
+
const [root, section] = path;
|
|
51
|
+
return path.length === 2 && (root === "paths" || root === "webhooks") || path.length === 3 && root === "components" && section === "pathItems";
|
|
52
|
+
}
|
|
53
|
+
function parameterStep(walk, next) {
|
|
54
|
+
const entry = childOf(childOf(walk.node, "parameters"), next);
|
|
55
|
+
const where = generatedShape.isJsonObject(entry) ? [String(entry.in), String(entry.name)] : [];
|
|
56
|
+
const prefix = isPathItem(walk.path) ? ["parameters"] : [];
|
|
57
|
+
return { path: [...prefix, "parameters", ...where], child: entry, length: 2, isSchema: false };
|
|
58
|
+
}
|
|
59
|
+
function documentStep(walk, segments, index) {
|
|
60
|
+
const segment = segments[index];
|
|
61
|
+
const next = segments[index + 1];
|
|
62
|
+
const value = childOf(walk.node, segment);
|
|
63
|
+
if (segment === "schema") {
|
|
64
|
+
return { path: [], child: value, length: 1, isSchema: true };
|
|
65
|
+
}
|
|
66
|
+
if (segment === "parameters" && next !== void 0 && INDEX_RE.test(next)) {
|
|
67
|
+
return parameterStep(walk, next);
|
|
68
|
+
}
|
|
69
|
+
if (segment === "content" && segments[index - 2] === "headers") {
|
|
70
|
+
const path = next === void 0 ? [] : [next];
|
|
71
|
+
return { path, child: childOf(value, next), length: 2, isSchema: false };
|
|
72
|
+
}
|
|
73
|
+
return { path: [segment], child: value, length: 1, isSchema: false };
|
|
74
|
+
}
|
|
75
|
+
function stepAt(walk, pointer, index) {
|
|
76
|
+
const { segments } = pointer;
|
|
77
|
+
const segment = segments[index];
|
|
78
|
+
if (index < pointerWalk.leadingSegmentsOf(pointer)) {
|
|
79
|
+
const child = childOf(walk.node, segment);
|
|
80
|
+
return { path: [segment], child, length: 1, isSchema: pointerWalk.startsInSchema(pointer) };
|
|
81
|
+
}
|
|
82
|
+
return walk.isSchema ? schemaStep(walk.node, segment, segments[index + 1]) : documentStep(walk, segments, index);
|
|
83
|
+
}
|
|
84
|
+
function refOf(node) {
|
|
85
|
+
return generatedShape.isJsonObject(node) && typeof node.$ref === "string" ? node.$ref : null;
|
|
86
|
+
}
|
|
87
|
+
function crossed(walk, ref, refs, seen) {
|
|
88
|
+
if (seen.includes(ref)) {
|
|
89
|
+
return { ...walk, node: void 0 };
|
|
90
|
+
}
|
|
91
|
+
const target = walkTo(ref, refs, seen);
|
|
92
|
+
const inner = refOf(target?.node);
|
|
93
|
+
return target === null || inner === null ? target : crossed(target, inner, refs, [...seen, ref]);
|
|
94
|
+
}
|
|
95
|
+
function walkTo(ref, refs, seen) {
|
|
96
|
+
const pointer = pointerWalk.refPointerOf(ref);
|
|
97
|
+
if (pointer === null || seen.includes(ref)) {
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
const root = pointer.rootSegment;
|
|
101
|
+
let walk = {
|
|
102
|
+
path: [root],
|
|
103
|
+
node: refs.resolve(`#/${root}`),
|
|
104
|
+
isSchema: false,
|
|
105
|
+
isFromAdditionalProperties: false
|
|
106
|
+
};
|
|
107
|
+
for (let index = 0; index < pointer.segments.length; ) {
|
|
108
|
+
const step = stepAt(walk, pointer, index);
|
|
109
|
+
if (step === null) {
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
index += step.length;
|
|
113
|
+
walk = {
|
|
114
|
+
path: [...walk.path, ...step.path],
|
|
115
|
+
node: step.child,
|
|
116
|
+
isSchema: step.isSchema,
|
|
117
|
+
isFromAdditionalProperties: step.isFromAdditionalProperties === true
|
|
118
|
+
};
|
|
119
|
+
const inner = refOf(walk.node);
|
|
120
|
+
const target = inner !== null && index < pointer.segments.length;
|
|
121
|
+
const next = target ? crossed(walk, inner, refs, [...seen, ref]) : walk;
|
|
122
|
+
if (next === null) {
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
walk = next;
|
|
126
|
+
}
|
|
127
|
+
return walk;
|
|
128
|
+
}
|
|
129
|
+
function generatedLocationOf(ref, refs) {
|
|
130
|
+
const walk = walkTo(ref, refs, []);
|
|
131
|
+
return {
|
|
132
|
+
path: walk === null ? ref : jsonPointer.createRef(walk.path),
|
|
133
|
+
isFromAdditionalProperties: walk?.isFromAdditionalProperties ?? false
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
exports.generatedLocationOf = generatedLocationOf;
|
|
138
|
+
//# sourceMappingURL=generated-location.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generated-location.cjs","sources":["../../../../src/application/transform/ref-pointer/generated-location.ts"],"sourcesContent":["import { createRef } from \"../../../domain/openapi/json-pointer.js\";\nimport type { RefResolver } from \"../schema/schema-context.js\";\nimport { isJsonObject } from \"./generated-shape.js\";\nimport {\n leadingSegmentsOf,\n type RefPointer,\n refPointerOf,\n startsInSchema,\n} from \"./pointer-walk.js\";\n\n/**\n * Where the generator types the node a `$ref` points at: the location path it passes down, which\n * also names the node's `--enum` declaration and `--enum-values` array. A target written inline\n * (ADR-026) is typed there, so it shares the generator's enum instead of declaring a second one\n * named after the pointer: two TypeScript enums with the same members are not assignable.\n *\n * The path follows the generator: `properties` is skipped; `allOf/N`, `items`, `prefixItems/N`,\n * `patternProperties/P` and `additionalProperties` type their schema at the parent's location;\n * the `schema` of a parameter, header or media type is typed at the container's; a positional\n * parameter is named by `in` and `name`. A `$ref` crossed on the way continues at its target's\n * location. A node under a schema keyword the generator does not type (`definitions/A`, `not`) is\n * typed nowhere else, so it keeps its pointer as its location.\n */\n\nexport interface GeneratedLocation {\n readonly path: string;\n /** The node is an `additionalProperties` value, as `transformNested` is told. */\n readonly isFromAdditionalProperties: boolean;\n}\n\ninterface LocationWalk {\n readonly path: readonly string[];\n readonly node: unknown;\n readonly isSchema: boolean;\n readonly isFromAdditionalProperties: boolean;\n}\n\n/** One step: the segments it adds to the path, the node it moves to, the segments it reads. */\ninterface Step {\n readonly path: readonly string[];\n readonly child: unknown;\n readonly length: 1 | 2;\n readonly isSchema: boolean;\n readonly isFromAdditionalProperties?: boolean;\n}\n\n/** Keywords followed by a name or position whose schema is typed at the parent's location. */\nconst PARENT_LOCATION_PAIRS: ReadonlySet<string> = new Set([\n \"allOf\",\n \"prefixItems\",\n \"patternProperties\",\n]);\n/** Keywords whose schema is typed at the parent's location as a record value. */\nconst RECORD_VALUE_KEYWORDS: ReadonlySet<string> = new Set([\n \"additionalProperties\",\n \"unevaluatedProperties\",\n]);\n/** Keywords followed by a name or position that both stay in the location. */\nconst KEPT_PAIRS: ReadonlySet<string> = new Set([\"anyOf\", \"oneOf\", \"$defs\"]);\n/** The other schema keywords the generator types: at the parent's location. */\nconst PARENT_LOCATION_KEYWORDS: ReadonlySet<string> = new Set([\"items\", ...RECORD_VALUE_KEYWORDS]);\nconst INDEX_RE = /^\\d+$/;\n\nfunction childOf(node: unknown, segment: string | undefined): unknown {\n return (isJsonObject(node) || Array.isArray(node)) && segment !== undefined\n ? (node as Readonly<Record<string, unknown>>)[segment]\n : undefined;\n}\n\nfunction pairStep(value: unknown, next: string | undefined, path: readonly string[]): Step {\n return { path, child: childOf(value, next), length: 2, isSchema: true };\n}\n\n/** The step through a schema keyword; null for a keyword the generator does not type. */\nfunction schemaStep(node: unknown, segment: string, next: string | undefined): Step | null {\n const value = childOf(node, segment);\n const named = next === undefined ? [] : [next];\n if (segment === \"properties\") {\n return pairStep(value, next, named);\n }\n if (PARENT_LOCATION_PAIRS.has(segment) || (segment === \"items\" && Array.isArray(value))) {\n return pairStep(value, next, []);\n }\n if (KEPT_PAIRS.has(segment)) {\n return pairStep(value, next, [segment, ...named]);\n }\n if (!PARENT_LOCATION_KEYWORDS.has(segment)) {\n return null;\n }\n const isRecordValue = RECORD_VALUE_KEYWORDS.has(segment);\n return {\n path: [],\n child: value,\n length: 1,\n isSchema: true,\n isFromAdditionalProperties: isRecordValue,\n };\n}\n\n/** A path item's own parameters sit under one more `parameters` segment (`pathItemType`). */\nfunction isPathItem(path: readonly string[]): boolean {\n const [root, section] = path;\n return (\n (path.length === 2 && (root === \"paths\" || root === \"webhooks\")) ||\n (path.length === 3 && root === \"components\" && section === \"pathItems\")\n );\n}\n\n/** `parameters/N`: the parameter is named by `in` and `name` (a `$ref` one is crossed later). */\nfunction parameterStep(walk: LocationWalk, next: string): Step {\n const entry = childOf(childOf(walk.node, \"parameters\"), next);\n const where = isJsonObject(entry) ? [String(entry.in), String(entry.name)] : [];\n const prefix = isPathItem(walk.path) ? [\"parameters\"] : [];\n return { path: [...prefix, \"parameters\", ...where], child: entry, length: 2, isSchema: false };\n}\n\nfunction documentStep(walk: LocationWalk, segments: readonly string[], index: number): Step {\n const segment = segments[index] as string;\n const next = segments[index + 1];\n const value = childOf(walk.node, segment);\n if (segment === \"schema\") {\n return { path: [], child: value, length: 1, isSchema: true };\n }\n if (segment === \"parameters\" && next !== undefined && INDEX_RE.test(next)) {\n return parameterStep(walk, next);\n }\n // A header's `content` entries are typed at `headers/<name>/<media type>` (`headerType`).\n if (segment === \"content\" && segments[index - 2] === \"headers\") {\n const path = next === undefined ? [] : [next];\n return { path, child: childOf(value, next), length: 2, isSchema: false };\n }\n return { path: [segment], child: value, length: 1, isSchema: false };\n}\n\nfunction stepAt(walk: LocationWalk, pointer: RefPointer, index: number): Step | null {\n const { segments } = pointer;\n const segment = segments[index] as string;\n if (index < leadingSegmentsOf(pointer)) {\n const child = childOf(walk.node, segment);\n return { path: [segment], child, length: 1, isSchema: startsInSchema(pointer) };\n }\n return walk.isSchema\n ? schemaStep(walk.node, segment, segments[index + 1])\n : documentStep(walk, segments, index);\n}\n\nfunction refOf(node: unknown): string | null {\n return isJsonObject(node) && typeof node.$ref === \"string\" ? node.$ref : null;\n}\n\n/**\n * The walk at a crossed `$ref`'s target, through `$ref`s to `$ref`s; null where the target has\n * no generated location. A cycle of `$ref`s has no node.\n */\nfunction crossed(\n walk: LocationWalk,\n ref: string,\n refs: RefResolver,\n seen: readonly string[],\n): LocationWalk | null {\n if (seen.includes(ref)) {\n return { ...walk, node: undefined };\n }\n const target = walkTo(ref, refs, seen);\n const inner = refOf(target?.node);\n return target === null || inner === null ? target : crossed(target, inner, refs, [...seen, ref]);\n}\n\nfunction walkTo(ref: string, refs: RefResolver, seen: readonly string[]): LocationWalk | null {\n const pointer = refPointerOf(ref);\n if (pointer === null || seen.includes(ref)) {\n return null;\n }\n const root = pointer.rootSegment;\n let walk: LocationWalk = {\n path: [root],\n node: refs.resolve(`#/${root}`),\n isSchema: false,\n isFromAdditionalProperties: false,\n };\n for (let index = 0; index < pointer.segments.length; ) {\n const step = stepAt(walk, pointer, index);\n if (step === null) {\n return null;\n }\n index += step.length;\n walk = {\n path: [...walk.path, ...step.path],\n node: step.child,\n isSchema: step.isSchema,\n isFromAdditionalProperties: step.isFromAdditionalProperties === true,\n };\n const inner = refOf(walk.node);\n const target = inner !== null && index < pointer.segments.length;\n const next = target ? crossed(walk, inner, refs, [...seen, ref]) : walk;\n if (next === null) {\n return null;\n }\n walk = next;\n }\n return walk;\n}\n\n/** The location the generator types the node at `ref` with; see the module comment. */\nexport function generatedLocationOf(ref: string, refs: RefResolver): GeneratedLocation {\n const walk = walkTo(ref, refs, []);\n return {\n path: walk === null ? ref : createRef(walk.path),\n isFromAdditionalProperties: walk?.isFromAdditionalProperties ?? false,\n };\n}\n"],"names":["isJsonObject","leadingSegmentsOf","startsInSchema","refPointerOf","createRef"],"mappings":"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"}
|