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":"terminal-logger.mjs","sources":["../../../src/adapters/terminal-logger/terminal-logger.ts"],"sourcesContent":["import colors from \"ansi-colors\";\nimport type { DebugGroup, Logger } from \"../../application/ports/logger.js\";\n\n/**\n * The Logger port on a terminal, with the original output format: ` ⚠ ` warnings, ` ✘ `\n * errors, and `openapi-ts:<group>` debug lines filtered by `DEBUG` (ENGINEERING_PLAN 4.5).\n */\n\n/** Where the lines go: `console` in production, a recording sink in tests. */\nexport interface TerminalSink {\n debug(line: string): void;\n warn(line: string): void;\n error(line: string): void;\n}\n\nexport interface TerminalLoggerOptions {\n /** Drop warnings (errors and debug lines are still written). */\n readonly silent: boolean;\n /** The value of `DEBUG`: `*`, `openapi-ts:*` or `openapi-ts:<group>` turn debug lines on. */\n readonly debugFilter: string | undefined;\n readonly useColors: boolean;\n readonly sink: TerminalSink;\n}\n\ntype Colors = ReturnType<typeof colors.create>;\n\nconst MILLISECONDS_PER_SECOND = 1000;\nconst MILLISECONDS_PER_MINUTE = 60_000;\n\n/** A duration as the original prints it: one decimal, in ms, s or m. */\nexport function formatDuration(milliseconds: number): string {\n if (milliseconds < MILLISECONDS_PER_SECOND) {\n return `${Math.round(10 * milliseconds) / 10}ms`;\n }\n if (milliseconds < MILLISECONDS_PER_MINUTE) {\n return `${Math.round(milliseconds / 100) / 10}s`;\n }\n return `${Math.round(milliseconds / 6000) / 10}m`;\n}\n\nfunction groupColor(palette: Colors, group: DebugGroup | undefined): (text: string) => string {\n const byGroup: Readonly<Partial<Record<DebugGroup, (text: string) => string>>> = {\n redoc: palette.cyanBright,\n lint: palette.yellowBright,\n bundle: palette.magentaBright,\n ts: palette.blueBright,\n };\n return (group && byGroup[group]) || palette.whiteBright;\n}\n\n/** Whether `DEBUG` asks for this group (the original check, case-insensitive for the group). */\nexport function isDebugEnabled(filter: string | undefined, group: DebugGroup | undefined): boolean {\n if (!filter) {\n return false;\n }\n return (\n !group ||\n filter === \"*\" ||\n filter === \"openapi-ts:*\" ||\n filter.toLocaleLowerCase() === `openapi-ts:${group.toLocaleLowerCase()}`\n );\n}\n\nclass TerminalLogger implements Logger {\n readonly #options: TerminalLoggerOptions;\n readonly #palette: Colors;\n\n constructor(options: TerminalLoggerOptions) {\n this.#options = options;\n this.#palette = colors.create();\n this.#palette.enabled = options.useColors;\n }\n\n debug(message: string, group?: DebugGroup, durationMs?: number): void {\n if (!isDebugEnabled(this.#options.debugFilter, group)) {\n return;\n }\n const name = groupColor(this.#palette, group)(`openapi-ts:${group ?? \"info\"}`);\n const time =\n durationMs === undefined ? \"\" : this.#palette.green(` ${formatDuration(durationMs)} `);\n this.#options.sink.debug(` ${this.#palette.bold(name)}${time}${message}`);\n }\n\n warn(message: string): void {\n if (!this.#options.silent) {\n this.#options.sink.warn(this.#palette.yellow(` ⚠ ${message}`));\n }\n }\n\n error(message: string): void {\n this.#options.sink.error(this.#palette.red(` ✘ ${message}`));\n }\n}\n\n/** A Logger that writes to a terminal sink. */\nexport function createTerminalLogger(options: TerminalLoggerOptions): Logger {\n return new TerminalLogger(options);\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const irToTypescript = require('./ir-to-typescript.cjs');
|
|
4
|
+
|
|
5
|
+
function isTypeAliasNamed(ts, node, name) {
|
|
6
|
+
return ts.isTypeAliasDeclaration(node) && node.name.text === name;
|
|
7
|
+
}
|
|
8
|
+
function asInterfaceNamed(ts, node, name) {
|
|
9
|
+
return ts.isInterfaceDeclaration(node) && node.name.text === name ? node : null;
|
|
10
|
+
}
|
|
11
|
+
function appendMember(ts, node, member) {
|
|
12
|
+
node.members = ts.factory.createNodeArray([
|
|
13
|
+
...node.members,
|
|
14
|
+
irToTypescript.toPropertySignature(ts, member)
|
|
15
|
+
]);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
exports.appendMember = appendMember;
|
|
19
|
+
exports.asInterfaceNamed = asInterfaceNamed;
|
|
20
|
+
exports.isTypeAliasNamed = isTypeAliasNamed;
|
|
21
|
+
//# sourceMappingURL=footer-nodes.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"footer-nodes.cjs","sources":["../../../src/adapters/type-ast-bridge/footer-nodes.ts"],"sourcesContent":["import type ts from \"typescript\";\nimport type { IrPropertySignature } from \"../../domain/ir/nodes.js\";\nimport { toPropertySignature } from \"./ir-to-typescript.js\";\nimport type { TypeScriptModule } from \"./load-typescript.js\";\n\n/**\n * TypeScript nodes that user code adds to the footer (`ctx.injectFooter`). The generator's own\n * footer entries are IR; these functions are the only places that read or change a user's node.\n */\n\n/** Whether the node is a type alias with this name (the original's helper check). */\nexport function isTypeAliasNamed(ts: TypeScriptModule, node: ts.Node, name: string): boolean {\n return ts.isTypeAliasDeclaration(node) && node.name.text === name;\n}\n\n/** The node as an interface with this name, or null. */\nexport function asInterfaceNamed(\n ts: TypeScriptModule,\n node: ts.Node,\n name: string,\n): ts.InterfaceDeclaration | null {\n return ts.isInterfaceDeclaration(node) && node.name.text === name ? node : null;\n}\n\n/**\n * Add a member to a user's interface in place, as the original `injectOperationObject` did:\n * other references to the node see the member.\n */\nexport function appendMember(\n ts: TypeScriptModule,\n node: ts.InterfaceDeclaration,\n member: IrPropertySignature,\n): void {\n (node as { members: ts.NodeArray<ts.TypeElement> }).members = ts.factory.createNodeArray([\n ...node.members,\n toPropertySignature(ts, member),\n ]);\n}\n"],"names":["toPropertySignature"],"mappings":";;;;AAWO,SAAS,gBAAA,CAAiB,EAAA,EAAsB,IAAA,EAAe,IAAA,EAAuB;AAC3F,EAAA,OAAO,GAAG,sBAAA,CAAuB,IAAI,CAAA,IAAK,IAAA,CAAK,KAAK,IAAA,KAAS,IAAA;AAC/D;AAGO,SAAS,gBAAA,CACd,EAAA,EACA,IAAA,EACA,IAAA,EACgC;AAChC,EAAA,OAAO,EAAA,CAAG,uBAAuB,IAAI,CAAA,IAAK,KAAK,IAAA,CAAK,IAAA,KAAS,OAAO,IAAA,GAAO,IAAA;AAC7E;AAMO,SAAS,YAAA,CACd,EAAA,EACA,IAAA,EACA,MAAA,EACM;AACN,EAAC,IAAA,CAAmD,OAAA,GAAU,EAAA,CAAG,OAAA,CAAQ,eAAA,CAAgB;AAAA,IACvF,GAAG,IAAA,CAAK,OAAA;AAAA,IACRA,kCAAA,CAAoB,IAAI,MAAM;AAAA,GAC/B,CAAA;AACH;;;;"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { toPropertySignature } from './ir-to-typescript.mjs';
|
|
2
|
+
|
|
3
|
+
function isTypeAliasNamed(ts, node, name) {
|
|
4
|
+
return ts.isTypeAliasDeclaration(node) && node.name.text === name;
|
|
5
|
+
}
|
|
6
|
+
function asInterfaceNamed(ts, node, name) {
|
|
7
|
+
return ts.isInterfaceDeclaration(node) && node.name.text === name ? node : null;
|
|
8
|
+
}
|
|
9
|
+
function appendMember(ts, node, member) {
|
|
10
|
+
node.members = ts.factory.createNodeArray([
|
|
11
|
+
...node.members,
|
|
12
|
+
toPropertySignature(ts, member)
|
|
13
|
+
]);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export { appendMember, asInterfaceNamed, isTypeAliasNamed };
|
|
17
|
+
//# sourceMappingURL=footer-nodes.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"footer-nodes.mjs","sources":["../../../src/adapters/type-ast-bridge/footer-nodes.ts"],"sourcesContent":["import type ts from \"typescript\";\nimport type { IrPropertySignature } from \"../../domain/ir/nodes.js\";\nimport { toPropertySignature } from \"./ir-to-typescript.js\";\nimport type { TypeScriptModule } from \"./load-typescript.js\";\n\n/**\n * TypeScript nodes that user code adds to the footer (`ctx.injectFooter`). The generator's own\n * footer entries are IR; these functions are the only places that read or change a user's node.\n */\n\n/** Whether the node is a type alias with this name (the original's helper check). */\nexport function isTypeAliasNamed(ts: TypeScriptModule, node: ts.Node, name: string): boolean {\n return ts.isTypeAliasDeclaration(node) && node.name.text === name;\n}\n\n/** The node as an interface with this name, or null. */\nexport function asInterfaceNamed(\n ts: TypeScriptModule,\n node: ts.Node,\n name: string,\n): ts.InterfaceDeclaration | null {\n return ts.isInterfaceDeclaration(node) && node.name.text === name ? node : null;\n}\n\n/**\n * Add a member to a user's interface in place, as the original `injectOperationObject` did:\n * other references to the node see the member.\n */\nexport function appendMember(\n ts: TypeScriptModule,\n node: ts.InterfaceDeclaration,\n member: IrPropertySignature,\n): void {\n (node as { members: ts.NodeArray<ts.TypeElement> }).members = ts.factory.createNodeArray([\n ...node.members,\n toPropertySignature(ts, member),\n ]);\n}\n"],"names":[],"mappings":";;AAWO,SAAS,gBAAA,CAAiB,EAAA,EAAsB,IAAA,EAAe,IAAA,EAAuB;AAC3F,EAAA,OAAO,GAAG,sBAAA,CAAuB,IAAI,CAAA,IAAK,IAAA,CAAK,KAAK,IAAA,KAAS,IAAA;AAC/D;AAGO,SAAS,gBAAA,CACd,EAAA,EACA,IAAA,EACA,IAAA,EACgC;AAChC,EAAA,OAAO,EAAA,CAAG,uBAAuB,IAAI,CAAA,IAAK,KAAK,IAAA,CAAK,IAAA,KAAS,OAAO,IAAA,GAAO,IAAA;AAC7E;AAMO,SAAS,YAAA,CACd,EAAA,EACA,IAAA,EACA,MAAA,EACM;AACN,EAAC,IAAA,CAAmD,OAAA,GAAU,EAAA,CAAG,OAAA,CAAQ,eAAA,CAAgB;AAAA,IACvF,GAAG,IAAA,CAAK,OAAA;AAAA,IACR,mBAAA,CAAoB,IAAI,MAAM;AAAA,GAC/B,CAAA;AACH;;"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const assertNever = require('../../domain/assert-never.cjs');
|
|
4
|
+
const irToTypescript = require('./ir-to-typescript.cjs');
|
|
5
|
+
|
|
6
|
+
function exportModifiers(ts, isExported) {
|
|
7
|
+
return isExported ? [ts.factory.createModifier(ts.SyntaxKind.ExportKeyword)] : void 0;
|
|
8
|
+
}
|
|
9
|
+
function toConstArrayStatement(ts, declaration) {
|
|
10
|
+
const initializer = ts.factory.createArrayLiteralExpression(
|
|
11
|
+
declaration.values.map((value) => irToTypescript.toValueExpression(ts, value))
|
|
12
|
+
);
|
|
13
|
+
const variable = ts.factory.createVariableDeclaration(
|
|
14
|
+
declaration.name,
|
|
15
|
+
void 0,
|
|
16
|
+
irToTypescript.toTypeNode(ts, declaration.type),
|
|
17
|
+
initializer
|
|
18
|
+
);
|
|
19
|
+
const list = ts.factory.createVariableDeclarationList([variable], ts.NodeFlags.Const);
|
|
20
|
+
return ts.factory.createVariableStatement(exportModifiers(ts, declaration.isExported), list);
|
|
21
|
+
}
|
|
22
|
+
function parseStatements(ts, text) {
|
|
23
|
+
return ts.createSourceFile("raw.ts", text, ts.ScriptTarget.ESNext).statements;
|
|
24
|
+
}
|
|
25
|
+
function toStatements(ts, declaration) {
|
|
26
|
+
return declaration.kind === "rawDeclaration" ? [...parseStatements(ts, declaration.text)] : [toStatement(ts, declaration)];
|
|
27
|
+
}
|
|
28
|
+
function toEnumStatement(ts, declaration) {
|
|
29
|
+
const members = declaration.members.map(
|
|
30
|
+
(member) => irToTypescript.withComments(
|
|
31
|
+
ts,
|
|
32
|
+
ts.factory.createEnumMember(member.name, irToTypescript.toValueExpression(ts, member.value)),
|
|
33
|
+
member.comments
|
|
34
|
+
)
|
|
35
|
+
);
|
|
36
|
+
const modifiers = exportModifiers(ts, declaration.isExported);
|
|
37
|
+
return ts.factory.createEnumDeclaration(modifiers, declaration.name, members);
|
|
38
|
+
}
|
|
39
|
+
function toInterfaceStatement(ts, declaration) {
|
|
40
|
+
const members = declaration.members.map((member) => irToTypescript.toTypeElement(ts, member));
|
|
41
|
+
const modifiers = exportModifiers(ts, declaration.isExported);
|
|
42
|
+
return ts.factory.createInterfaceDeclaration(
|
|
43
|
+
modifiers,
|
|
44
|
+
declaration.name,
|
|
45
|
+
void 0,
|
|
46
|
+
void 0,
|
|
47
|
+
members
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
function toTypeAliasStatement(ts, declaration) {
|
|
51
|
+
const type = irToTypescript.toTypeNode(ts, declaration.type);
|
|
52
|
+
const modifiers = exportModifiers(ts, declaration.isExported);
|
|
53
|
+
return ts.factory.createTypeAliasDeclaration(modifiers, declaration.name, void 0, type);
|
|
54
|
+
}
|
|
55
|
+
function toStatement(ts, declaration) {
|
|
56
|
+
switch (declaration.kind) {
|
|
57
|
+
case "interface":
|
|
58
|
+
return irToTypescript.withComments(ts, toInterfaceStatement(ts, declaration), declaration.comments);
|
|
59
|
+
case "typeAlias":
|
|
60
|
+
return irToTypescript.withComments(ts, toTypeAliasStatement(ts, declaration), declaration.comments);
|
|
61
|
+
case "enum":
|
|
62
|
+
return irToTypescript.withComments(ts, toEnumStatement(ts, declaration), declaration.comments);
|
|
63
|
+
case "constArray":
|
|
64
|
+
return irToTypescript.withComments(ts, toConstArrayStatement(ts, declaration), declaration.comments);
|
|
65
|
+
case "rawDeclaration":
|
|
66
|
+
return parseStatements(ts, declaration.text)[0];
|
|
67
|
+
default:
|
|
68
|
+
return assertNever.assertNever(declaration);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
exports.parseStatements = parseStatements;
|
|
73
|
+
exports.toStatement = toStatement;
|
|
74
|
+
exports.toStatements = toStatements;
|
|
75
|
+
//# sourceMappingURL=ir-declarations-to-typescript.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ir-declarations-to-typescript.cjs","sources":["../../../src/adapters/type-ast-bridge/ir-declarations-to-typescript.ts"],"sourcesContent":["import type ts from \"typescript\";\nimport { assertNever } from \"../../domain/assert-never.js\";\nimport type { IrDeclaration } from \"../../domain/ir/nodes.js\";\nimport { toTypeElement, toTypeNode, toValueExpression, withComments } from \"./ir-to-typescript.js\";\nimport type { TypeScriptModule } from \"./load-typescript.js\";\n\n/**\n * Convert IR declarations to TypeScript statements, with the factory calls the original makes\n * (see `ir-to-typescript.ts` for types and members).\n */\n\nfunction exportModifiers(ts: TypeScriptModule, isExported: boolean): ts.Modifier[] | undefined {\n return isExported ? [ts.factory.createModifier(ts.SyntaxKind.ExportKeyword)] : undefined;\n}\n\nfunction toConstArrayStatement(\n ts: TypeScriptModule,\n declaration: Extract<IrDeclaration, { kind: \"constArray\" }>,\n): ts.Statement {\n const initializer = ts.factory.createArrayLiteralExpression(\n declaration.values.map((value) => toValueExpression(ts, value)),\n );\n const variable = ts.factory.createVariableDeclaration(\n declaration.name,\n undefined,\n toTypeNode(ts, declaration.type),\n initializer,\n );\n const list = ts.factory.createVariableDeclarationList([variable], ts.NodeFlags.Const);\n return ts.factory.createVariableStatement(exportModifiers(ts, declaration.isExported), list);\n}\n\n/** Parse source text into statements, like the original's `stringToAST`. */\nexport function parseStatements(ts: TypeScriptModule, text: string): readonly ts.Statement[] {\n return ts.createSourceFile(\"raw.ts\", text, ts.ScriptTarget.ESNext).statements;\n}\n\n/** Convert one IR declaration; a raw declaration gives every statement its text holds. */\nexport function toStatements(ts: TypeScriptModule, declaration: IrDeclaration): ts.Statement[] {\n return declaration.kind === \"rawDeclaration\"\n ? [...parseStatements(ts, declaration.text)]\n : [toStatement(ts, declaration)];\n}\n\nfunction toEnumStatement(\n ts: TypeScriptModule,\n declaration: Extract<IrDeclaration, { kind: \"enum\" }>,\n): ts.Statement {\n const members = declaration.members.map((member) =>\n withComments(\n ts,\n ts.factory.createEnumMember(member.name, toValueExpression(ts, member.value)),\n member.comments,\n ),\n );\n const modifiers = exportModifiers(ts, declaration.isExported);\n return ts.factory.createEnumDeclaration(modifiers, declaration.name, members);\n}\n\nfunction toInterfaceStatement(\n ts: TypeScriptModule,\n declaration: Extract<IrDeclaration, { kind: \"interface\" }>,\n): ts.Statement {\n const members = declaration.members.map((member) => toTypeElement(ts, member));\n const modifiers = exportModifiers(ts, declaration.isExported);\n return ts.factory.createInterfaceDeclaration(\n modifiers,\n declaration.name,\n undefined,\n undefined,\n members,\n );\n}\n\nfunction toTypeAliasStatement(\n ts: TypeScriptModule,\n declaration: Extract<IrDeclaration, { kind: \"typeAlias\" }>,\n): ts.Statement {\n const type = toTypeNode(ts, declaration.type);\n const modifiers = exportModifiers(ts, declaration.isExported);\n return ts.factory.createTypeAliasDeclaration(modifiers, declaration.name, undefined, type);\n}\n\n/** Convert one IR declaration. A raw declaration is parsed, like the original's `stringToAST`. */\nexport function toStatement(ts: TypeScriptModule, declaration: IrDeclaration): ts.Statement {\n switch (declaration.kind) {\n case \"interface\":\n return withComments(ts, toInterfaceStatement(ts, declaration), declaration.comments);\n case \"typeAlias\":\n return withComments(ts, toTypeAliasStatement(ts, declaration), declaration.comments);\n case \"enum\":\n return withComments(ts, toEnumStatement(ts, declaration), declaration.comments);\n case \"constArray\":\n return withComments(ts, toConstArrayStatement(ts, declaration), declaration.comments);\n case \"rawDeclaration\":\n return parseStatements(ts, declaration.text)[0] as ts.Statement;\n default:\n return assertNever(declaration);\n }\n}\n"],"names":["toValueExpression","toTypeNode","withComments","toTypeElement","assertNever"],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { assertNever } from '../../domain/assert-never.mjs';
|
|
2
|
+
import { withComments, toValueExpression, toTypeNode, toTypeElement } from './ir-to-typescript.mjs';
|
|
3
|
+
|
|
4
|
+
function exportModifiers(ts, isExported) {
|
|
5
|
+
return isExported ? [ts.factory.createModifier(ts.SyntaxKind.ExportKeyword)] : void 0;
|
|
6
|
+
}
|
|
7
|
+
function toConstArrayStatement(ts, declaration) {
|
|
8
|
+
const initializer = ts.factory.createArrayLiteralExpression(
|
|
9
|
+
declaration.values.map((value) => toValueExpression(ts, value))
|
|
10
|
+
);
|
|
11
|
+
const variable = ts.factory.createVariableDeclaration(
|
|
12
|
+
declaration.name,
|
|
13
|
+
void 0,
|
|
14
|
+
toTypeNode(ts, declaration.type),
|
|
15
|
+
initializer
|
|
16
|
+
);
|
|
17
|
+
const list = ts.factory.createVariableDeclarationList([variable], ts.NodeFlags.Const);
|
|
18
|
+
return ts.factory.createVariableStatement(exportModifiers(ts, declaration.isExported), list);
|
|
19
|
+
}
|
|
20
|
+
function parseStatements(ts, text) {
|
|
21
|
+
return ts.createSourceFile("raw.ts", text, ts.ScriptTarget.ESNext).statements;
|
|
22
|
+
}
|
|
23
|
+
function toStatements(ts, declaration) {
|
|
24
|
+
return declaration.kind === "rawDeclaration" ? [...parseStatements(ts, declaration.text)] : [toStatement(ts, declaration)];
|
|
25
|
+
}
|
|
26
|
+
function toEnumStatement(ts, declaration) {
|
|
27
|
+
const members = declaration.members.map(
|
|
28
|
+
(member) => withComments(
|
|
29
|
+
ts,
|
|
30
|
+
ts.factory.createEnumMember(member.name, toValueExpression(ts, member.value)),
|
|
31
|
+
member.comments
|
|
32
|
+
)
|
|
33
|
+
);
|
|
34
|
+
const modifiers = exportModifiers(ts, declaration.isExported);
|
|
35
|
+
return ts.factory.createEnumDeclaration(modifiers, declaration.name, members);
|
|
36
|
+
}
|
|
37
|
+
function toInterfaceStatement(ts, declaration) {
|
|
38
|
+
const members = declaration.members.map((member) => toTypeElement(ts, member));
|
|
39
|
+
const modifiers = exportModifiers(ts, declaration.isExported);
|
|
40
|
+
return ts.factory.createInterfaceDeclaration(
|
|
41
|
+
modifiers,
|
|
42
|
+
declaration.name,
|
|
43
|
+
void 0,
|
|
44
|
+
void 0,
|
|
45
|
+
members
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
function toTypeAliasStatement(ts, declaration) {
|
|
49
|
+
const type = toTypeNode(ts, declaration.type);
|
|
50
|
+
const modifiers = exportModifiers(ts, declaration.isExported);
|
|
51
|
+
return ts.factory.createTypeAliasDeclaration(modifiers, declaration.name, void 0, type);
|
|
52
|
+
}
|
|
53
|
+
function toStatement(ts, declaration) {
|
|
54
|
+
switch (declaration.kind) {
|
|
55
|
+
case "interface":
|
|
56
|
+
return withComments(ts, toInterfaceStatement(ts, declaration), declaration.comments);
|
|
57
|
+
case "typeAlias":
|
|
58
|
+
return withComments(ts, toTypeAliasStatement(ts, declaration), declaration.comments);
|
|
59
|
+
case "enum":
|
|
60
|
+
return withComments(ts, toEnumStatement(ts, declaration), declaration.comments);
|
|
61
|
+
case "constArray":
|
|
62
|
+
return withComments(ts, toConstArrayStatement(ts, declaration), declaration.comments);
|
|
63
|
+
case "rawDeclaration":
|
|
64
|
+
return parseStatements(ts, declaration.text)[0];
|
|
65
|
+
default:
|
|
66
|
+
return assertNever(declaration);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export { parseStatements, toStatement, toStatements };
|
|
71
|
+
//# sourceMappingURL=ir-declarations-to-typescript.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ir-declarations-to-typescript.mjs","sources":["../../../src/adapters/type-ast-bridge/ir-declarations-to-typescript.ts"],"sourcesContent":["import type ts from \"typescript\";\nimport { assertNever } from \"../../domain/assert-never.js\";\nimport type { IrDeclaration } from \"../../domain/ir/nodes.js\";\nimport { toTypeElement, toTypeNode, toValueExpression, withComments } from \"./ir-to-typescript.js\";\nimport type { TypeScriptModule } from \"./load-typescript.js\";\n\n/**\n * Convert IR declarations to TypeScript statements, with the factory calls the original makes\n * (see `ir-to-typescript.ts` for types and members).\n */\n\nfunction exportModifiers(ts: TypeScriptModule, isExported: boolean): ts.Modifier[] | undefined {\n return isExported ? [ts.factory.createModifier(ts.SyntaxKind.ExportKeyword)] : undefined;\n}\n\nfunction toConstArrayStatement(\n ts: TypeScriptModule,\n declaration: Extract<IrDeclaration, { kind: \"constArray\" }>,\n): ts.Statement {\n const initializer = ts.factory.createArrayLiteralExpression(\n declaration.values.map((value) => toValueExpression(ts, value)),\n );\n const variable = ts.factory.createVariableDeclaration(\n declaration.name,\n undefined,\n toTypeNode(ts, declaration.type),\n initializer,\n );\n const list = ts.factory.createVariableDeclarationList([variable], ts.NodeFlags.Const);\n return ts.factory.createVariableStatement(exportModifiers(ts, declaration.isExported), list);\n}\n\n/** Parse source text into statements, like the original's `stringToAST`. */\nexport function parseStatements(ts: TypeScriptModule, text: string): readonly ts.Statement[] {\n return ts.createSourceFile(\"raw.ts\", text, ts.ScriptTarget.ESNext).statements;\n}\n\n/** Convert one IR declaration; a raw declaration gives every statement its text holds. */\nexport function toStatements(ts: TypeScriptModule, declaration: IrDeclaration): ts.Statement[] {\n return declaration.kind === \"rawDeclaration\"\n ? [...parseStatements(ts, declaration.text)]\n : [toStatement(ts, declaration)];\n}\n\nfunction toEnumStatement(\n ts: TypeScriptModule,\n declaration: Extract<IrDeclaration, { kind: \"enum\" }>,\n): ts.Statement {\n const members = declaration.members.map((member) =>\n withComments(\n ts,\n ts.factory.createEnumMember(member.name, toValueExpression(ts, member.value)),\n member.comments,\n ),\n );\n const modifiers = exportModifiers(ts, declaration.isExported);\n return ts.factory.createEnumDeclaration(modifiers, declaration.name, members);\n}\n\nfunction toInterfaceStatement(\n ts: TypeScriptModule,\n declaration: Extract<IrDeclaration, { kind: \"interface\" }>,\n): ts.Statement {\n const members = declaration.members.map((member) => toTypeElement(ts, member));\n const modifiers = exportModifiers(ts, declaration.isExported);\n return ts.factory.createInterfaceDeclaration(\n modifiers,\n declaration.name,\n undefined,\n undefined,\n members,\n );\n}\n\nfunction toTypeAliasStatement(\n ts: TypeScriptModule,\n declaration: Extract<IrDeclaration, { kind: \"typeAlias\" }>,\n): ts.Statement {\n const type = toTypeNode(ts, declaration.type);\n const modifiers = exportModifiers(ts, declaration.isExported);\n return ts.factory.createTypeAliasDeclaration(modifiers, declaration.name, undefined, type);\n}\n\n/** Convert one IR declaration. A raw declaration is parsed, like the original's `stringToAST`. */\nexport function toStatement(ts: TypeScriptModule, declaration: IrDeclaration): ts.Statement {\n switch (declaration.kind) {\n case \"interface\":\n return withComments(ts, toInterfaceStatement(ts, declaration), declaration.comments);\n case \"typeAlias\":\n return withComments(ts, toTypeAliasStatement(ts, declaration), declaration.comments);\n case \"enum\":\n return withComments(ts, toEnumStatement(ts, declaration), declaration.comments);\n case \"constArray\":\n return withComments(ts, toConstArrayStatement(ts, declaration), declaration.comments);\n case \"rawDeclaration\":\n return parseStatements(ts, declaration.text)[0] as ts.Statement;\n default:\n return assertNever(declaration);\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const assertNever = require('../../domain/assert-never.cjs');
|
|
4
|
+
|
|
5
|
+
function keywordKind(ts, keyword) {
|
|
6
|
+
const kinds = {
|
|
7
|
+
string: ts.SyntaxKind.StringKeyword,
|
|
8
|
+
number: ts.SyntaxKind.NumberKeyword,
|
|
9
|
+
boolean: ts.SyntaxKind.BooleanKeyword,
|
|
10
|
+
undefined: ts.SyntaxKind.UndefinedKeyword,
|
|
11
|
+
unknown: ts.SyntaxKind.UnknownKeyword,
|
|
12
|
+
never: ts.SyntaxKind.NeverKeyword
|
|
13
|
+
};
|
|
14
|
+
return kinds[keyword];
|
|
15
|
+
}
|
|
16
|
+
function toKeywordType(ts, keyword) {
|
|
17
|
+
return keyword === "null" ? ts.factory.createLiteralTypeNode(ts.factory.createNull()) : ts.factory.createKeywordTypeNode(keywordKind(ts, keyword));
|
|
18
|
+
}
|
|
19
|
+
function toNumberExpression(ts, value) {
|
|
20
|
+
return value < 0 ? ts.factory.createPrefixUnaryExpression(
|
|
21
|
+
ts.SyntaxKind.MinusToken,
|
|
22
|
+
ts.factory.createNumericLiteral(Math.abs(value))
|
|
23
|
+
) : ts.factory.createNumericLiteral(value);
|
|
24
|
+
}
|
|
25
|
+
function toValueExpression(ts, value) {
|
|
26
|
+
return typeof value === "number" ? toNumberExpression(ts, value) : ts.factory.createStringLiteral(value);
|
|
27
|
+
}
|
|
28
|
+
function toStringLiteralType(ts, value, encoding) {
|
|
29
|
+
return encoding === "json" ? ts.factory.createIdentifier(JSON.stringify(value)) : ts.factory.createLiteralTypeNode(ts.factory.createStringLiteral(value));
|
|
30
|
+
}
|
|
31
|
+
function toTupleElement(ts, element) {
|
|
32
|
+
const type = toTypeNode(ts, element.type);
|
|
33
|
+
if (element.isOptional) {
|
|
34
|
+
return ts.factory.createOptionalTypeNode(type);
|
|
35
|
+
}
|
|
36
|
+
return element.isRest ? ts.factory.createRestTypeNode(type) : type;
|
|
37
|
+
}
|
|
38
|
+
function toLeafTypeNode(ts, type) {
|
|
39
|
+
switch (type.kind) {
|
|
40
|
+
case "keyword":
|
|
41
|
+
return toKeywordType(ts, type.keyword);
|
|
42
|
+
case "stringLiteral":
|
|
43
|
+
return toStringLiteralType(ts, type.value, type.encoding);
|
|
44
|
+
case "numberLiteral":
|
|
45
|
+
return ts.factory.createLiteralTypeNode(toNumberExpression(ts, type.value));
|
|
46
|
+
case "booleanLiteral":
|
|
47
|
+
return ts.factory.createLiteralTypeNode(
|
|
48
|
+
type.value ? ts.factory.createTrue() : ts.factory.createFalse()
|
|
49
|
+
);
|
|
50
|
+
case "raw":
|
|
51
|
+
return type.origin ?? ts.factory.createIdentifier(type.text);
|
|
52
|
+
default:
|
|
53
|
+
return assertNever.assertNever(type);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function toReferenceNode(ts, type) {
|
|
57
|
+
const typeArguments = type.typeArguments.length > 0 ? type.typeArguments.map((argument) => toTypeNode(ts, argument)) : void 0;
|
|
58
|
+
return ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(type.name), typeArguments);
|
|
59
|
+
}
|
|
60
|
+
function toTypeNode(ts, type) {
|
|
61
|
+
const convert = (inner) => toTypeNode(ts, inner);
|
|
62
|
+
const { factory } = ts;
|
|
63
|
+
switch (type.kind) {
|
|
64
|
+
case "keyword":
|
|
65
|
+
case "stringLiteral":
|
|
66
|
+
case "numberLiteral":
|
|
67
|
+
case "booleanLiteral":
|
|
68
|
+
case "raw":
|
|
69
|
+
return toLeafTypeNode(ts, type);
|
|
70
|
+
case "reference":
|
|
71
|
+
return toReferenceNode(ts, type);
|
|
72
|
+
case "array":
|
|
73
|
+
return factory.createArrayTypeNode(convert(type.element));
|
|
74
|
+
case "tuple":
|
|
75
|
+
return factory.createTupleTypeNode(
|
|
76
|
+
type.elements.map((element) => toTupleElement(ts, element))
|
|
77
|
+
);
|
|
78
|
+
case "union":
|
|
79
|
+
return factory.createUnionTypeNode(type.types.map(convert));
|
|
80
|
+
case "intersection":
|
|
81
|
+
return factory.createIntersectionTypeNode(type.types.map(convert));
|
|
82
|
+
case "object":
|
|
83
|
+
return factory.createTypeLiteralNode(type.members.map((member) => toTypeElement(ts, member)));
|
|
84
|
+
case "indexedAccess":
|
|
85
|
+
return factory.createIndexedAccessTypeNode(convert(type.object), convert(type.index));
|
|
86
|
+
case "readonly":
|
|
87
|
+
return factory.createTypeOperatorNode(ts.SyntaxKind.ReadonlyKeyword, convert(type.type));
|
|
88
|
+
default:
|
|
89
|
+
return assertNever.assertNever(type);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
function withComments(ts, node, comments) {
|
|
93
|
+
for (const comment of comments) {
|
|
94
|
+
const kind = comment.kind === "block" ? ts.SyntaxKind.MultiLineCommentTrivia : ts.SyntaxKind.SingleLineCommentTrivia;
|
|
95
|
+
ts.addSyntheticLeadingComment(node, kind, comment.text, true);
|
|
96
|
+
}
|
|
97
|
+
return node;
|
|
98
|
+
}
|
|
99
|
+
function toPropertyName(ts, name) {
|
|
100
|
+
switch (name.kind) {
|
|
101
|
+
case "identifier":
|
|
102
|
+
return ts.factory.createIdentifier(name.text);
|
|
103
|
+
case "string":
|
|
104
|
+
return ts.factory.createStringLiteral(name.value);
|
|
105
|
+
case "number":
|
|
106
|
+
return ts.factory.createNumericLiteral(name.text);
|
|
107
|
+
default:
|
|
108
|
+
return assertNever.assertNever(name);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
function readonlyModifiers(ts, isReadonly) {
|
|
112
|
+
return isReadonly ? [ts.factory.createModifier(ts.SyntaxKind.ReadonlyKeyword)] : void 0;
|
|
113
|
+
}
|
|
114
|
+
function toPropertySignature(ts, property) {
|
|
115
|
+
const questionToken = property.isOptional ? ts.factory.createToken(ts.SyntaxKind.QuestionToken) : void 0;
|
|
116
|
+
const signature = ts.factory.createPropertySignature(
|
|
117
|
+
readonlyModifiers(ts, property.isReadonly),
|
|
118
|
+
toPropertyName(ts, property.name),
|
|
119
|
+
questionToken,
|
|
120
|
+
toTypeNode(ts, property.type)
|
|
121
|
+
);
|
|
122
|
+
return withComments(ts, signature, property.comments);
|
|
123
|
+
}
|
|
124
|
+
function toTypeElement(ts, member) {
|
|
125
|
+
if (member.kind === "property") {
|
|
126
|
+
return toPropertySignature(ts, member);
|
|
127
|
+
}
|
|
128
|
+
const parameter = ts.factory.createParameterDeclaration(
|
|
129
|
+
void 0,
|
|
130
|
+
void 0,
|
|
131
|
+
member.parameterName,
|
|
132
|
+
void 0,
|
|
133
|
+
toTypeNode(ts, member.parameterType)
|
|
134
|
+
);
|
|
135
|
+
const signature = ts.factory.createIndexSignature(
|
|
136
|
+
readonlyModifiers(ts, member.isReadonly),
|
|
137
|
+
[parameter],
|
|
138
|
+
toTypeNode(ts, member.type)
|
|
139
|
+
);
|
|
140
|
+
return withComments(ts, signature, member.comments);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
exports.toPropertySignature = toPropertySignature;
|
|
144
|
+
exports.toTypeElement = toTypeElement;
|
|
145
|
+
exports.toTypeNode = toTypeNode;
|
|
146
|
+
exports.toValueExpression = toValueExpression;
|
|
147
|
+
exports.withComments = withComments;
|
|
148
|
+
//# sourceMappingURL=ir-to-typescript.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ir-to-typescript.cjs","sources":["../../../src/adapters/type-ast-bridge/ir-to-typescript.ts"],"sourcesContent":["import type ts from \"typescript\";\nimport { assertNever } from \"../../domain/assert-never.js\";\nimport type {\n IrComment,\n IrKeyword,\n IrMember,\n IrPropertyName,\n IrPropertySignature,\n IrTupleElement,\n IrType,\n} from \"../../domain/ir/nodes.js\";\nimport type { TypeScriptModule } from \"./load-typescript.js\";\n\n/**\n * Convert IR to TypeScript AST nodes with the same factory calls the original generator makes.\n * Printing the result with the TypeScript printer gives the original output, which is how the\n * printer parity tests (ENGINEERING_PLAN 4.3) define \"byte-identical\". Every function takes the\n * TypeScript module to build with (ADR-004, decision 4): the nodes must come from the same module\n * that later reads or prints them.\n */\n\ntype KeywordName = Exclude<IrKeyword, \"null\">;\n\nfunction keywordKind(ts: TypeScriptModule, keyword: KeywordName): ts.KeywordTypeSyntaxKind {\n const kinds: Readonly<Record<KeywordName, ts.KeywordTypeSyntaxKind>> = {\n string: ts.SyntaxKind.StringKeyword,\n number: ts.SyntaxKind.NumberKeyword,\n boolean: ts.SyntaxKind.BooleanKeyword,\n undefined: ts.SyntaxKind.UndefinedKeyword,\n unknown: ts.SyntaxKind.UnknownKeyword,\n never: ts.SyntaxKind.NeverKeyword,\n };\n return kinds[keyword];\n}\n\nfunction toKeywordType(ts: TypeScriptModule, keyword: IrKeyword): ts.TypeNode {\n return keyword === \"null\"\n ? ts.factory.createLiteralTypeNode(ts.factory.createNull())\n : ts.factory.createKeywordTypeNode(keywordKind(ts, keyword));\n}\n\n/**\n * Numbers as the original writes them: a negative value is a prefix minus on its absolute value.\n */\nfunction toNumberExpression(\n ts: TypeScriptModule,\n value: number,\n): ts.PrefixUnaryExpression | ts.NumericLiteral {\n return value < 0\n ? ts.factory.createPrefixUnaryExpression(\n ts.SyntaxKind.MinusToken,\n ts.factory.createNumericLiteral(Math.abs(value)),\n )\n : ts.factory.createNumericLiteral(value);\n}\n\n/** An enum member or array element value, written as the original writes it. */\nexport function toValueExpression(ts: TypeScriptModule, value: string | number): ts.Expression {\n return typeof value === \"number\"\n ? toNumberExpression(ts, value)\n : ts.factory.createStringLiteral(value);\n}\n\n/** The original writes JSON-encoded literal types as identifiers to keep UTF-8 readable. */\nfunction toStringLiteralType(\n ts: TypeScriptModule,\n value: string,\n encoding: \"json\" | \"escaped\",\n): ts.TypeNode {\n return encoding === \"json\"\n ? (ts.factory.createIdentifier(JSON.stringify(value)) as unknown as ts.TypeNode)\n : ts.factory.createLiteralTypeNode(ts.factory.createStringLiteral(value));\n}\n\nfunction toTupleElement(ts: TypeScriptModule, element: IrTupleElement): ts.TypeNode {\n const type = toTypeNode(ts, element.type);\n if (element.isOptional) {\n return ts.factory.createOptionalTypeNode(type);\n }\n return element.isRest ? ts.factory.createRestTypeNode(type) : type;\n}\n\ntype LeafType = Extract<\n IrType,\n { kind: \"keyword\" | \"stringLiteral\" | \"numberLiteral\" | \"booleanLiteral\" | \"raw\" }\n>;\n\nfunction toLeafTypeNode(ts: TypeScriptModule, type: LeafType): ts.TypeNode {\n switch (type.kind) {\n case \"keyword\":\n return toKeywordType(ts, type.keyword);\n case \"stringLiteral\":\n return toStringLiteralType(ts, type.value, type.encoding);\n case \"numberLiteral\":\n return ts.factory.createLiteralTypeNode(toNumberExpression(ts, type.value));\n case \"booleanLiteral\":\n return ts.factory.createLiteralTypeNode(\n type.value ? ts.factory.createTrue() : ts.factory.createFalse(),\n );\n case \"raw\":\n // A node read from TypeScript goes back as it was, so the TypeScript printer indents it.\n return (\n (type.origin as ts.TypeNode | undefined) ??\n (ts.factory.createIdentifier(type.text) as unknown as ts.TypeNode)\n );\n default:\n return assertNever(type);\n }\n}\n\nfunction toReferenceNode(\n ts: TypeScriptModule,\n type: Extract<IrType, { kind: \"reference\" }>,\n): ts.TypeNode {\n const typeArguments =\n type.typeArguments.length > 0\n ? type.typeArguments.map((argument) => toTypeNode(ts, argument))\n : undefined;\n return ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(type.name), typeArguments);\n}\n\n/** Convert one IR type. */\nexport function toTypeNode(ts: TypeScriptModule, type: IrType): ts.TypeNode {\n const convert = (inner: IrType) => toTypeNode(ts, inner);\n const { factory } = ts;\n switch (type.kind) {\n case \"keyword\":\n case \"stringLiteral\":\n case \"numberLiteral\":\n case \"booleanLiteral\":\n case \"raw\":\n return toLeafTypeNode(ts, type);\n case \"reference\":\n return toReferenceNode(ts, type);\n case \"array\":\n return factory.createArrayTypeNode(convert(type.element));\n case \"tuple\":\n return factory.createTupleTypeNode(\n type.elements.map((element) => toTupleElement(ts, element)),\n );\n case \"union\":\n return factory.createUnionTypeNode(type.types.map(convert));\n case \"intersection\":\n return factory.createIntersectionTypeNode(type.types.map(convert));\n case \"object\":\n return factory.createTypeLiteralNode(type.members.map((member) => toTypeElement(ts, member)));\n case \"indexedAccess\":\n return factory.createIndexedAccessTypeNode(convert(type.object), convert(type.index));\n case \"readonly\":\n return factory.createTypeOperatorNode(ts.SyntaxKind.ReadonlyKeyword, convert(type.type));\n default:\n return assertNever(type);\n }\n}\n\n/** Attach IR comments to a node as synthetic leading comments, as the original does. */\nexport function withComments<T extends ts.Node>(\n ts: TypeScriptModule,\n node: T,\n comments: readonly IrComment[],\n): T {\n for (const comment of comments) {\n const kind =\n comment.kind === \"block\"\n ? ts.SyntaxKind.MultiLineCommentTrivia\n : ts.SyntaxKind.SingleLineCommentTrivia;\n ts.addSyntheticLeadingComment(node, kind, comment.text, true);\n }\n return node;\n}\n\nfunction toPropertyName(ts: TypeScriptModule, name: IrPropertyName): ts.PropertyName {\n switch (name.kind) {\n case \"identifier\":\n return ts.factory.createIdentifier(name.text);\n case \"string\":\n return ts.factory.createStringLiteral(name.value);\n case \"number\":\n return ts.factory.createNumericLiteral(name.text);\n default:\n return assertNever(name);\n }\n}\n\nfunction readonlyModifiers(ts: TypeScriptModule, isReadonly: boolean): ts.Modifier[] | undefined {\n return isReadonly ? [ts.factory.createModifier(ts.SyntaxKind.ReadonlyKeyword)] : undefined;\n}\n\n/** Convert one property signature (for callbacks that receive a `ts.PropertySignature`). */\nexport function toPropertySignature(\n ts: TypeScriptModule,\n property: IrPropertySignature,\n): ts.PropertySignature {\n const questionToken = property.isOptional\n ? ts.factory.createToken(ts.SyntaxKind.QuestionToken)\n : undefined;\n const signature = ts.factory.createPropertySignature(\n readonlyModifiers(ts, property.isReadonly),\n toPropertyName(ts, property.name),\n questionToken,\n toTypeNode(ts, property.type),\n );\n return withComments(ts, signature, property.comments);\n}\n\nexport function toTypeElement(ts: TypeScriptModule, member: IrMember): ts.TypeElement {\n if (member.kind === \"property\") {\n return toPropertySignature(ts, member);\n }\n const parameter = ts.factory.createParameterDeclaration(\n undefined,\n undefined,\n member.parameterName,\n undefined,\n toTypeNode(ts, member.parameterType),\n );\n const signature = ts.factory.createIndexSignature(\n readonlyModifiers(ts, member.isReadonly),\n [parameter],\n toTypeNode(ts, member.type),\n );\n return withComments(ts, signature, member.comments);\n}\n"],"names":["assertNever"],"mappings":"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"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { assertNever } from '../../domain/assert-never.mjs';
|
|
2
|
+
|
|
3
|
+
function keywordKind(ts, keyword) {
|
|
4
|
+
const kinds = {
|
|
5
|
+
string: ts.SyntaxKind.StringKeyword,
|
|
6
|
+
number: ts.SyntaxKind.NumberKeyword,
|
|
7
|
+
boolean: ts.SyntaxKind.BooleanKeyword,
|
|
8
|
+
undefined: ts.SyntaxKind.UndefinedKeyword,
|
|
9
|
+
unknown: ts.SyntaxKind.UnknownKeyword,
|
|
10
|
+
never: ts.SyntaxKind.NeverKeyword
|
|
11
|
+
};
|
|
12
|
+
return kinds[keyword];
|
|
13
|
+
}
|
|
14
|
+
function toKeywordType(ts, keyword) {
|
|
15
|
+
return keyword === "null" ? ts.factory.createLiteralTypeNode(ts.factory.createNull()) : ts.factory.createKeywordTypeNode(keywordKind(ts, keyword));
|
|
16
|
+
}
|
|
17
|
+
function toNumberExpression(ts, value) {
|
|
18
|
+
return value < 0 ? ts.factory.createPrefixUnaryExpression(
|
|
19
|
+
ts.SyntaxKind.MinusToken,
|
|
20
|
+
ts.factory.createNumericLiteral(Math.abs(value))
|
|
21
|
+
) : ts.factory.createNumericLiteral(value);
|
|
22
|
+
}
|
|
23
|
+
function toValueExpression(ts, value) {
|
|
24
|
+
return typeof value === "number" ? toNumberExpression(ts, value) : ts.factory.createStringLiteral(value);
|
|
25
|
+
}
|
|
26
|
+
function toStringLiteralType(ts, value, encoding) {
|
|
27
|
+
return encoding === "json" ? ts.factory.createIdentifier(JSON.stringify(value)) : ts.factory.createLiteralTypeNode(ts.factory.createStringLiteral(value));
|
|
28
|
+
}
|
|
29
|
+
function toTupleElement(ts, element) {
|
|
30
|
+
const type = toTypeNode(ts, element.type);
|
|
31
|
+
if (element.isOptional) {
|
|
32
|
+
return ts.factory.createOptionalTypeNode(type);
|
|
33
|
+
}
|
|
34
|
+
return element.isRest ? ts.factory.createRestTypeNode(type) : type;
|
|
35
|
+
}
|
|
36
|
+
function toLeafTypeNode(ts, type) {
|
|
37
|
+
switch (type.kind) {
|
|
38
|
+
case "keyword":
|
|
39
|
+
return toKeywordType(ts, type.keyword);
|
|
40
|
+
case "stringLiteral":
|
|
41
|
+
return toStringLiteralType(ts, type.value, type.encoding);
|
|
42
|
+
case "numberLiteral":
|
|
43
|
+
return ts.factory.createLiteralTypeNode(toNumberExpression(ts, type.value));
|
|
44
|
+
case "booleanLiteral":
|
|
45
|
+
return ts.factory.createLiteralTypeNode(
|
|
46
|
+
type.value ? ts.factory.createTrue() : ts.factory.createFalse()
|
|
47
|
+
);
|
|
48
|
+
case "raw":
|
|
49
|
+
return type.origin ?? ts.factory.createIdentifier(type.text);
|
|
50
|
+
default:
|
|
51
|
+
return assertNever(type);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
function toReferenceNode(ts, type) {
|
|
55
|
+
const typeArguments = type.typeArguments.length > 0 ? type.typeArguments.map((argument) => toTypeNode(ts, argument)) : void 0;
|
|
56
|
+
return ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(type.name), typeArguments);
|
|
57
|
+
}
|
|
58
|
+
function toTypeNode(ts, type) {
|
|
59
|
+
const convert = (inner) => toTypeNode(ts, inner);
|
|
60
|
+
const { factory } = ts;
|
|
61
|
+
switch (type.kind) {
|
|
62
|
+
case "keyword":
|
|
63
|
+
case "stringLiteral":
|
|
64
|
+
case "numberLiteral":
|
|
65
|
+
case "booleanLiteral":
|
|
66
|
+
case "raw":
|
|
67
|
+
return toLeafTypeNode(ts, type);
|
|
68
|
+
case "reference":
|
|
69
|
+
return toReferenceNode(ts, type);
|
|
70
|
+
case "array":
|
|
71
|
+
return factory.createArrayTypeNode(convert(type.element));
|
|
72
|
+
case "tuple":
|
|
73
|
+
return factory.createTupleTypeNode(
|
|
74
|
+
type.elements.map((element) => toTupleElement(ts, element))
|
|
75
|
+
);
|
|
76
|
+
case "union":
|
|
77
|
+
return factory.createUnionTypeNode(type.types.map(convert));
|
|
78
|
+
case "intersection":
|
|
79
|
+
return factory.createIntersectionTypeNode(type.types.map(convert));
|
|
80
|
+
case "object":
|
|
81
|
+
return factory.createTypeLiteralNode(type.members.map((member) => toTypeElement(ts, member)));
|
|
82
|
+
case "indexedAccess":
|
|
83
|
+
return factory.createIndexedAccessTypeNode(convert(type.object), convert(type.index));
|
|
84
|
+
case "readonly":
|
|
85
|
+
return factory.createTypeOperatorNode(ts.SyntaxKind.ReadonlyKeyword, convert(type.type));
|
|
86
|
+
default:
|
|
87
|
+
return assertNever(type);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
function withComments(ts, node, comments) {
|
|
91
|
+
for (const comment of comments) {
|
|
92
|
+
const kind = comment.kind === "block" ? ts.SyntaxKind.MultiLineCommentTrivia : ts.SyntaxKind.SingleLineCommentTrivia;
|
|
93
|
+
ts.addSyntheticLeadingComment(node, kind, comment.text, true);
|
|
94
|
+
}
|
|
95
|
+
return node;
|
|
96
|
+
}
|
|
97
|
+
function toPropertyName(ts, name) {
|
|
98
|
+
switch (name.kind) {
|
|
99
|
+
case "identifier":
|
|
100
|
+
return ts.factory.createIdentifier(name.text);
|
|
101
|
+
case "string":
|
|
102
|
+
return ts.factory.createStringLiteral(name.value);
|
|
103
|
+
case "number":
|
|
104
|
+
return ts.factory.createNumericLiteral(name.text);
|
|
105
|
+
default:
|
|
106
|
+
return assertNever(name);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
function readonlyModifiers(ts, isReadonly) {
|
|
110
|
+
return isReadonly ? [ts.factory.createModifier(ts.SyntaxKind.ReadonlyKeyword)] : void 0;
|
|
111
|
+
}
|
|
112
|
+
function toPropertySignature(ts, property) {
|
|
113
|
+
const questionToken = property.isOptional ? ts.factory.createToken(ts.SyntaxKind.QuestionToken) : void 0;
|
|
114
|
+
const signature = ts.factory.createPropertySignature(
|
|
115
|
+
readonlyModifiers(ts, property.isReadonly),
|
|
116
|
+
toPropertyName(ts, property.name),
|
|
117
|
+
questionToken,
|
|
118
|
+
toTypeNode(ts, property.type)
|
|
119
|
+
);
|
|
120
|
+
return withComments(ts, signature, property.comments);
|
|
121
|
+
}
|
|
122
|
+
function toTypeElement(ts, member) {
|
|
123
|
+
if (member.kind === "property") {
|
|
124
|
+
return toPropertySignature(ts, member);
|
|
125
|
+
}
|
|
126
|
+
const parameter = ts.factory.createParameterDeclaration(
|
|
127
|
+
void 0,
|
|
128
|
+
void 0,
|
|
129
|
+
member.parameterName,
|
|
130
|
+
void 0,
|
|
131
|
+
toTypeNode(ts, member.parameterType)
|
|
132
|
+
);
|
|
133
|
+
const signature = ts.factory.createIndexSignature(
|
|
134
|
+
readonlyModifiers(ts, member.isReadonly),
|
|
135
|
+
[parameter],
|
|
136
|
+
toTypeNode(ts, member.type)
|
|
137
|
+
);
|
|
138
|
+
return withComments(ts, signature, member.comments);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
export { toPropertySignature, toTypeElement, toTypeNode, toValueExpression, withComments };
|
|
142
|
+
//# sourceMappingURL=ir-to-typescript.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ir-to-typescript.mjs","sources":["../../../src/adapters/type-ast-bridge/ir-to-typescript.ts"],"sourcesContent":["import type ts from \"typescript\";\nimport { assertNever } from \"../../domain/assert-never.js\";\nimport type {\n IrComment,\n IrKeyword,\n IrMember,\n IrPropertyName,\n IrPropertySignature,\n IrTupleElement,\n IrType,\n} from \"../../domain/ir/nodes.js\";\nimport type { TypeScriptModule } from \"./load-typescript.js\";\n\n/**\n * Convert IR to TypeScript AST nodes with the same factory calls the original generator makes.\n * Printing the result with the TypeScript printer gives the original output, which is how the\n * printer parity tests (ENGINEERING_PLAN 4.3) define \"byte-identical\". Every function takes the\n * TypeScript module to build with (ADR-004, decision 4): the nodes must come from the same module\n * that later reads or prints them.\n */\n\ntype KeywordName = Exclude<IrKeyword, \"null\">;\n\nfunction keywordKind(ts: TypeScriptModule, keyword: KeywordName): ts.KeywordTypeSyntaxKind {\n const kinds: Readonly<Record<KeywordName, ts.KeywordTypeSyntaxKind>> = {\n string: ts.SyntaxKind.StringKeyword,\n number: ts.SyntaxKind.NumberKeyword,\n boolean: ts.SyntaxKind.BooleanKeyword,\n undefined: ts.SyntaxKind.UndefinedKeyword,\n unknown: ts.SyntaxKind.UnknownKeyword,\n never: ts.SyntaxKind.NeverKeyword,\n };\n return kinds[keyword];\n}\n\nfunction toKeywordType(ts: TypeScriptModule, keyword: IrKeyword): ts.TypeNode {\n return keyword === \"null\"\n ? ts.factory.createLiteralTypeNode(ts.factory.createNull())\n : ts.factory.createKeywordTypeNode(keywordKind(ts, keyword));\n}\n\n/**\n * Numbers as the original writes them: a negative value is a prefix minus on its absolute value.\n */\nfunction toNumberExpression(\n ts: TypeScriptModule,\n value: number,\n): ts.PrefixUnaryExpression | ts.NumericLiteral {\n return value < 0\n ? ts.factory.createPrefixUnaryExpression(\n ts.SyntaxKind.MinusToken,\n ts.factory.createNumericLiteral(Math.abs(value)),\n )\n : ts.factory.createNumericLiteral(value);\n}\n\n/** An enum member or array element value, written as the original writes it. */\nexport function toValueExpression(ts: TypeScriptModule, value: string | number): ts.Expression {\n return typeof value === \"number\"\n ? toNumberExpression(ts, value)\n : ts.factory.createStringLiteral(value);\n}\n\n/** The original writes JSON-encoded literal types as identifiers to keep UTF-8 readable. */\nfunction toStringLiteralType(\n ts: TypeScriptModule,\n value: string,\n encoding: \"json\" | \"escaped\",\n): ts.TypeNode {\n return encoding === \"json\"\n ? (ts.factory.createIdentifier(JSON.stringify(value)) as unknown as ts.TypeNode)\n : ts.factory.createLiteralTypeNode(ts.factory.createStringLiteral(value));\n}\n\nfunction toTupleElement(ts: TypeScriptModule, element: IrTupleElement): ts.TypeNode {\n const type = toTypeNode(ts, element.type);\n if (element.isOptional) {\n return ts.factory.createOptionalTypeNode(type);\n }\n return element.isRest ? ts.factory.createRestTypeNode(type) : type;\n}\n\ntype LeafType = Extract<\n IrType,\n { kind: \"keyword\" | \"stringLiteral\" | \"numberLiteral\" | \"booleanLiteral\" | \"raw\" }\n>;\n\nfunction toLeafTypeNode(ts: TypeScriptModule, type: LeafType): ts.TypeNode {\n switch (type.kind) {\n case \"keyword\":\n return toKeywordType(ts, type.keyword);\n case \"stringLiteral\":\n return toStringLiteralType(ts, type.value, type.encoding);\n case \"numberLiteral\":\n return ts.factory.createLiteralTypeNode(toNumberExpression(ts, type.value));\n case \"booleanLiteral\":\n return ts.factory.createLiteralTypeNode(\n type.value ? ts.factory.createTrue() : ts.factory.createFalse(),\n );\n case \"raw\":\n // A node read from TypeScript goes back as it was, so the TypeScript printer indents it.\n return (\n (type.origin as ts.TypeNode | undefined) ??\n (ts.factory.createIdentifier(type.text) as unknown as ts.TypeNode)\n );\n default:\n return assertNever(type);\n }\n}\n\nfunction toReferenceNode(\n ts: TypeScriptModule,\n type: Extract<IrType, { kind: \"reference\" }>,\n): ts.TypeNode {\n const typeArguments =\n type.typeArguments.length > 0\n ? type.typeArguments.map((argument) => toTypeNode(ts, argument))\n : undefined;\n return ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(type.name), typeArguments);\n}\n\n/** Convert one IR type. */\nexport function toTypeNode(ts: TypeScriptModule, type: IrType): ts.TypeNode {\n const convert = (inner: IrType) => toTypeNode(ts, inner);\n const { factory } = ts;\n switch (type.kind) {\n case \"keyword\":\n case \"stringLiteral\":\n case \"numberLiteral\":\n case \"booleanLiteral\":\n case \"raw\":\n return toLeafTypeNode(ts, type);\n case \"reference\":\n return toReferenceNode(ts, type);\n case \"array\":\n return factory.createArrayTypeNode(convert(type.element));\n case \"tuple\":\n return factory.createTupleTypeNode(\n type.elements.map((element) => toTupleElement(ts, element)),\n );\n case \"union\":\n return factory.createUnionTypeNode(type.types.map(convert));\n case \"intersection\":\n return factory.createIntersectionTypeNode(type.types.map(convert));\n case \"object\":\n return factory.createTypeLiteralNode(type.members.map((member) => toTypeElement(ts, member)));\n case \"indexedAccess\":\n return factory.createIndexedAccessTypeNode(convert(type.object), convert(type.index));\n case \"readonly\":\n return factory.createTypeOperatorNode(ts.SyntaxKind.ReadonlyKeyword, convert(type.type));\n default:\n return assertNever(type);\n }\n}\n\n/** Attach IR comments to a node as synthetic leading comments, as the original does. */\nexport function withComments<T extends ts.Node>(\n ts: TypeScriptModule,\n node: T,\n comments: readonly IrComment[],\n): T {\n for (const comment of comments) {\n const kind =\n comment.kind === \"block\"\n ? ts.SyntaxKind.MultiLineCommentTrivia\n : ts.SyntaxKind.SingleLineCommentTrivia;\n ts.addSyntheticLeadingComment(node, kind, comment.text, true);\n }\n return node;\n}\n\nfunction toPropertyName(ts: TypeScriptModule, name: IrPropertyName): ts.PropertyName {\n switch (name.kind) {\n case \"identifier\":\n return ts.factory.createIdentifier(name.text);\n case \"string\":\n return ts.factory.createStringLiteral(name.value);\n case \"number\":\n return ts.factory.createNumericLiteral(name.text);\n default:\n return assertNever(name);\n }\n}\n\nfunction readonlyModifiers(ts: TypeScriptModule, isReadonly: boolean): ts.Modifier[] | undefined {\n return isReadonly ? [ts.factory.createModifier(ts.SyntaxKind.ReadonlyKeyword)] : undefined;\n}\n\n/** Convert one property signature (for callbacks that receive a `ts.PropertySignature`). */\nexport function toPropertySignature(\n ts: TypeScriptModule,\n property: IrPropertySignature,\n): ts.PropertySignature {\n const questionToken = property.isOptional\n ? ts.factory.createToken(ts.SyntaxKind.QuestionToken)\n : undefined;\n const signature = ts.factory.createPropertySignature(\n readonlyModifiers(ts, property.isReadonly),\n toPropertyName(ts, property.name),\n questionToken,\n toTypeNode(ts, property.type),\n );\n return withComments(ts, signature, property.comments);\n}\n\nexport function toTypeElement(ts: TypeScriptModule, member: IrMember): ts.TypeElement {\n if (member.kind === \"property\") {\n return toPropertySignature(ts, member);\n }\n const parameter = ts.factory.createParameterDeclaration(\n undefined,\n undefined,\n member.parameterName,\n undefined,\n toTypeNode(ts, member.parameterType),\n );\n const signature = ts.factory.createIndexSignature(\n readonlyModifiers(ts, member.isReadonly),\n [parameter],\n toTypeNode(ts, member.type),\n );\n return withComments(ts, signature, member.comments);\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
function lazyNode(create) {
|
|
4
|
+
let node;
|
|
5
|
+
const target = () => {
|
|
6
|
+
node ??= create();
|
|
7
|
+
return node;
|
|
8
|
+
};
|
|
9
|
+
return new Proxy({}, {
|
|
10
|
+
get: (_, key) => Reflect.get(target(), key),
|
|
11
|
+
set: (_, key, value) => Reflect.set(target(), key, value),
|
|
12
|
+
has: (_, key) => Reflect.has(target(), key),
|
|
13
|
+
ownKeys: () => Reflect.ownKeys(target()),
|
|
14
|
+
getOwnPropertyDescriptor: (_, key) => {
|
|
15
|
+
const descriptor = Reflect.getOwnPropertyDescriptor(target(), key);
|
|
16
|
+
return descriptor === void 0 ? void 0 : { ...descriptor, configurable: true };
|
|
17
|
+
},
|
|
18
|
+
getPrototypeOf: () => Reflect.getPrototypeOf(target())
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
exports.lazyNode = lazyNode;
|
|
23
|
+
//# sourceMappingURL=lazy-node.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lazy-node.cjs","sources":["../../../src/adapters/type-ast-bridge/lazy-node.ts"],"sourcesContent":["/**\n * A TypeScript node that is created on first use (for the deprecated `QUESTION_TOKEN` export):\n * the package must import without TypeScript installed (ADR-004, decision 4). Every property read,\n * write and check goes to the node, so the TypeScript factory and printer see a normal node.\n */\nexport function lazyNode<T extends object>(create: () => T): T {\n let node: T | undefined;\n const target = (): T => {\n node ??= create();\n return node;\n };\n return new Proxy({} as T, {\n get: (_, key) => Reflect.get(target(), key),\n set: (_, key, value) => Reflect.set(target(), key, value),\n has: (_, key) => Reflect.has(target(), key),\n ownKeys: () => Reflect.ownKeys(target()),\n getOwnPropertyDescriptor: (_, key) => {\n const descriptor = Reflect.getOwnPropertyDescriptor(target(), key);\n // A proxy may report a property only as configurable when its own (empty) target lacks it.\n return descriptor === undefined ? undefined : { ...descriptor, configurable: true };\n },\n getPrototypeOf: () => Reflect.getPrototypeOf(target()),\n });\n}\n"],"names":[],"mappings":";;AAKO,SAAS,SAA2B,MAAA,EAAoB;AAC7D,EAAA,IAAI,IAAA;AACJ,EAAA,MAAM,SAAS,MAAS;AACtB,IAAA,IAAA,KAAS,MAAA,EAAO;AAChB,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AACA,EAAA,OAAO,IAAI,KAAA,CAAM,EAAC,EAAQ;AAAA,IACxB,GAAA,EAAK,CAAC,CAAA,EAAG,GAAA,KAAQ,QAAQ,GAAA,CAAI,MAAA,IAAU,GAAG,CAAA;AAAA,IAC1C,GAAA,EAAK,CAAC,CAAA,EAAG,GAAA,EAAK,KAAA,KAAU,QAAQ,GAAA,CAAI,MAAA,EAAO,EAAG,GAAA,EAAK,KAAK,CAAA;AAAA,IACxD,GAAA,EAAK,CAAC,CAAA,EAAG,GAAA,KAAQ,QAAQ,GAAA,CAAI,MAAA,IAAU,GAAG,CAAA;AAAA,IAC1C,OAAA,EAAS,MAAM,OAAA,CAAQ,OAAA,CAAQ,QAAQ,CAAA;AAAA,IACvC,wBAAA,EAA0B,CAAC,CAAA,EAAG,GAAA,KAAQ;AACpC,MAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,wBAAA,CAAyB,MAAA,IAAU,GAAG,CAAA;AAEjE,MAAA,OAAO,eAAe,MAAA,GAAY,MAAA,GAAY,EAAE,GAAG,UAAA,EAAY,cAAc,IAAA,EAAK;AAAA,IACpF,CAAA;AAAA,IACA,cAAA,EAAgB,MAAM,OAAA,CAAQ,cAAA,CAAe,QAAQ;AAAA,GACtD,CAAA;AACH;;"}
|