openapi-typesafe 0.0.0 → 1.0.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +22 -0
- package/README.md +71 -1
- package/bin/cli.js +4 -0
- package/dist/adapters/node-file-system/node-file-system.cjs +46 -0
- package/dist/adapters/node-file-system/node-file-system.cjs.map +1 -0
- package/dist/adapters/node-file-system/node-file-system.mjs +40 -0
- package/dist/adapters/node-file-system/node-file-system.mjs.map +1 -0
- package/dist/adapters/redocly-loader/alias-limit.cjs +16 -0
- package/dist/adapters/redocly-loader/alias-limit.cjs.map +1 -0
- package/dist/adapters/redocly-loader/alias-limit.mjs +14 -0
- package/dist/adapters/redocly-loader/alias-limit.mjs.map +1 -0
- package/dist/adapters/redocly-loader/allowed-hosts.cjs +42 -0
- package/dist/adapters/redocly-loader/allowed-hosts.cjs.map +1 -0
- package/dist/adapters/redocly-loader/allowed-hosts.mjs +40 -0
- package/dist/adapters/redocly-loader/allowed-hosts.mjs.map +1 -0
- package/dist/adapters/redocly-loader/bundled-ref-repair.cjs +53 -0
- package/dist/adapters/redocly-loader/bundled-ref-repair.cjs.map +1 -0
- package/dist/adapters/redocly-loader/bundled-ref-repair.mjs +51 -0
- package/dist/adapters/redocly-loader/bundled-ref-repair.mjs.map +1 -0
- package/dist/adapters/redocly-loader/malformed-refs.cjs +41 -0
- package/dist/adapters/redocly-loader/malformed-refs.cjs.map +1 -0
- package/dist/adapters/redocly-loader/malformed-refs.mjs +38 -0
- package/dist/adapters/redocly-loader/malformed-refs.mjs.map +1 -0
- package/dist/adapters/redocly-loader/redocly-config-source.cjs +42 -0
- package/dist/adapters/redocly-loader/redocly-config-source.cjs.map +1 -0
- package/dist/adapters/redocly-loader/redocly-config-source.mjs +35 -0
- package/dist/adapters/redocly-loader/redocly-config-source.mjs.map +1 -0
- package/dist/adapters/redocly-loader/redocly-schema-loader.cjs +169 -0
- package/dist/adapters/redocly-loader/redocly-schema-loader.cjs.map +1 -0
- package/dist/adapters/redocly-loader/redocly-schema-loader.mjs +167 -0
- package/dist/adapters/redocly-loader/redocly-schema-loader.mjs.map +1 -0
- package/dist/adapters/redocly-loader/ref-access.cjs +107 -0
- package/dist/adapters/redocly-loader/ref-access.cjs.map +1 -0
- package/dist/adapters/redocly-loader/ref-access.mjs +99 -0
- package/dist/adapters/redocly-loader/ref-access.mjs.map +1 -0
- package/dist/adapters/redocly-loader/ref-holders.cjs +31 -0
- package/dist/adapters/redocly-loader/ref-holders.cjs.map +1 -0
- package/dist/adapters/redocly-loader/ref-holders.mjs +29 -0
- package/dist/adapters/redocly-loader/ref-holders.mjs.map +1 -0
- package/dist/adapters/redocly-loader/remote-fetch.cjs +60 -0
- package/dist/adapters/redocly-loader/remote-fetch.cjs.map +1 -0
- package/dist/adapters/redocly-loader/remote-fetch.mjs +56 -0
- package/dist/adapters/redocly-loader/remote-fetch.mjs.map +1 -0
- package/dist/adapters/redocly-loader/schema-load-errors.cjs +87 -0
- package/dist/adapters/redocly-loader/schema-load-errors.cjs.map +1 -0
- package/dist/adapters/redocly-loader/schema-load-errors.mjs +77 -0
- package/dist/adapters/redocly-loader/schema-load-errors.mjs.map +1 -0
- package/dist/adapters/redocly-loader/schema-source.cjs +104 -0
- package/dist/adapters/redocly-loader/schema-source.cjs.map +1 -0
- package/dist/adapters/redocly-loader/schema-source.mjs +98 -0
- package/dist/adapters/redocly-loader/schema-source.mjs.map +1 -0
- package/dist/adapters/redocly-loader/unsupported-keys.cjs +62 -0
- package/dist/adapters/redocly-loader/unsupported-keys.cjs.map +1 -0
- package/dist/adapters/redocly-loader/unsupported-keys.mjs +58 -0
- package/dist/adapters/redocly-loader/unsupported-keys.mjs.map +1 -0
- package/dist/adapters/terminal-logger/terminal-logger.cjs +67 -0
- package/dist/adapters/terminal-logger/terminal-logger.cjs.map +1 -0
- package/dist/adapters/terminal-logger/terminal-logger.mjs +59 -0
- package/dist/adapters/terminal-logger/terminal-logger.mjs.map +1 -0
- package/dist/adapters/type-ast-bridge/footer-nodes.cjs +21 -0
- package/dist/adapters/type-ast-bridge/footer-nodes.cjs.map +1 -0
- package/dist/adapters/type-ast-bridge/footer-nodes.mjs +17 -0
- package/dist/adapters/type-ast-bridge/footer-nodes.mjs.map +1 -0
- package/dist/adapters/type-ast-bridge/ir-declarations-to-typescript.cjs +75 -0
- package/dist/adapters/type-ast-bridge/ir-declarations-to-typescript.cjs.map +1 -0
- package/dist/adapters/type-ast-bridge/ir-declarations-to-typescript.mjs +71 -0
- package/dist/adapters/type-ast-bridge/ir-declarations-to-typescript.mjs.map +1 -0
- package/dist/adapters/type-ast-bridge/ir-to-typescript.cjs +145 -0
- package/dist/adapters/type-ast-bridge/ir-to-typescript.cjs.map +1 -0
- package/dist/adapters/type-ast-bridge/ir-to-typescript.mjs +139 -0
- package/dist/adapters/type-ast-bridge/ir-to-typescript.mjs.map +1 -0
- package/dist/adapters/type-ast-bridge/lazy-node.cjs +23 -0
- package/dist/adapters/type-ast-bridge/lazy-node.cjs.map +1 -0
- package/dist/adapters/type-ast-bridge/lazy-node.mjs +21 -0
- package/dist/adapters/type-ast-bridge/lazy-node.mjs.map +1 -0
- package/dist/adapters/type-ast-bridge/load-typescript.cjs +57 -0
- package/dist/adapters/type-ast-bridge/load-typescript.cjs.map +1 -0
- package/dist/adapters/type-ast-bridge/load-typescript.mjs +51 -0
- package/dist/adapters/type-ast-bridge/load-typescript.mjs.map +1 -0
- package/dist/adapters/type-ast-bridge/print-typescript.cjs +21 -0
- package/dist/adapters/type-ast-bridge/print-typescript.cjs.map +1 -0
- package/dist/adapters/type-ast-bridge/print-typescript.mjs +19 -0
- package/dist/adapters/type-ast-bridge/print-typescript.mjs.map +1 -0
- package/dist/adapters/type-ast-bridge/typescript-raw-text.cjs +33 -0
- package/dist/adapters/type-ast-bridge/typescript-raw-text.cjs.map +1 -0
- package/dist/adapters/type-ast-bridge/typescript-raw-text.mjs +29 -0
- package/dist/adapters/type-ast-bridge/typescript-raw-text.mjs.map +1 -0
- package/dist/adapters/type-ast-bridge/typescript-to-ir.cjs +204 -0
- package/dist/adapters/type-ast-bridge/typescript-to-ir.cjs.map +1 -0
- package/dist/adapters/type-ast-bridge/typescript-to-ir.mjs +201 -0
- package/dist/adapters/type-ast-bridge/typescript-to-ir.mjs.map +1 -0
- package/dist/api/ast-to-string.cjs +39 -0
- package/dist/api/ast-to-string.cjs.map +1 -0
- package/dist/api/ast-to-string.mjs +37 -0
- package/dist/api/ast-to-string.mjs.map +1 -0
- package/dist/api/comment-header.cjs +11 -0
- package/dist/api/comment-header.cjs.map +1 -0
- package/dist/api/comment-header.mjs +9 -0
- package/dist/api/comment-header.mjs.map +1 -0
- package/dist/api/default-ports.cjs +38 -0
- package/dist/api/default-ports.cjs.map +1 -0
- package/dist/api/default-ports.mjs +28 -0
- package/dist/api/default-ports.mjs.map +1 -0
- package/dist/api/discriminator-enum.cjs +44 -0
- package/dist/api/discriminator-enum.cjs.map +1 -0
- package/dist/api/discriminator-enum.mjs +42 -0
- package/dist/api/discriminator-enum.mjs.map +1 -0
- package/dist/api/discriminator-scan.cjs +168 -0
- package/dist/api/discriminator-scan.cjs.map +1 -0
- package/dist/api/discriminator-scan.mjs +165 -0
- package/dist/api/discriminator-scan.mjs.map +1 -0
- package/dist/api/document-declarations.cjs +28 -0
- package/dist/api/document-declarations.cjs.map +1 -0
- package/dist/api/document-declarations.mjs +26 -0
- package/dist/api/document-declarations.mjs.map +1 -0
- package/dist/api/document-refs.cjs +53 -0
- package/dist/api/document-refs.cjs.map +1 -0
- package/dist/api/document-refs.mjs +50 -0
- package/dist/api/document-refs.mjs.map +1 -0
- package/dist/api/document-run.cjs +107 -0
- package/dist/api/document-run.cjs.map +1 -0
- package/dist/api/document-run.mjs +101 -0
- package/dist/api/document-run.mjs.map +1 -0
- package/dist/api/footer-entry.cjs +18 -0
- package/dist/api/footer-entry.cjs.map +1 -0
- package/dist/api/footer-entry.mjs +15 -0
- package/dist/api/footer-entry.mjs.map +1 -0
- package/dist/api/footer-sink.cjs +53 -0
- package/dist/api/footer-sink.cjs.map +1 -0
- package/dist/api/footer-sink.mjs +51 -0
- package/dist/api/footer-sink.mjs.map +1 -0
- package/dist/api/legacy-callback-warning.cjs +25 -0
- package/dist/api/legacy-callback-warning.cjs.map +1 -0
- package/dist/api/legacy-callback-warning.mjs +22 -0
- package/dist/api/legacy-callback-warning.mjs.map +1 -0
- package/dist/api/legacy-ts-helpers.cjs +203 -0
- package/dist/api/legacy-ts-helpers.cjs.map +1 -0
- package/dist/api/legacy-ts-helpers.mjs +187 -0
- package/dist/api/legacy-ts-helpers.mjs.map +1 -0
- package/dist/api/legacy-utils.cjs +65 -0
- package/dist/api/legacy-utils.cjs.map +1 -0
- package/dist/api/legacy-utils.mjs +50 -0
- package/dist/api/legacy-utils.mjs.map +1 -0
- package/dist/api/openapi-ts.cjs +40 -0
- package/dist/api/openapi-ts.cjs.map +1 -0
- package/dist/api/openapi-ts.mjs +34 -0
- package/dist/api/openapi-ts.mjs.map +1 -0
- package/dist/api/schema-callbacks.cjs +140 -0
- package/dist/api/schema-callbacks.cjs.map +1 -0
- package/dist/api/schema-callbacks.mjs +136 -0
- package/dist/api/schema-callbacks.mjs.map +1 -0
- package/dist/api/string-to-ast.cjs +21 -0
- package/dist/api/string-to-ast.cjs.map +1 -0
- package/dist/api/string-to-ast.mjs +18 -0
- package/dist/api/string-to-ast.mjs.map +1 -0
- package/dist/api/transform-context.cjs +82 -0
- package/dist/api/transform-context.cjs.map +1 -0
- package/dist/api/transform-context.mjs +65 -0
- package/dist/api/transform-context.mjs.map +1 -0
- package/dist/api/transform-schema.cjs +31 -0
- package/dist/api/transform-schema.cjs.map +1 -0
- package/dist/api/transform-schema.mjs +26 -0
- package/dist/api/transform-schema.mjs.map +1 -0
- package/dist/api/type-helpers.cjs +85 -0
- package/dist/api/type-helpers.cjs.map +1 -0
- package/dist/api/type-helpers.mjs +66 -0
- package/dist/api/type-helpers.mjs.map +1 -0
- package/dist/api/unsupported-feature-warnings.cjs +17 -0
- package/dist/api/unsupported-feature-warnings.cjs.map +1 -0
- package/dist/api/unsupported-feature-warnings.mjs +15 -0
- package/dist/api/unsupported-feature-warnings.mjs.map +1 -0
- package/dist/application/print/comment-writer.cjs +95 -0
- package/dist/application/print/comment-writer.cjs.map +1 -0
- package/dist/application/print/comment-writer.mjs +93 -0
- package/dist/application/print/comment-writer.mjs.map +1 -0
- package/dist/application/print/declaration-printer.cjs +83 -0
- package/dist/application/print/declaration-printer.cjs.map +1 -0
- package/dist/application/print/declaration-printer.mjs +81 -0
- package/dist/application/print/declaration-printer.mjs.map +1 -0
- package/dist/application/print/literal-text.cjs +52 -0
- package/dist/application/print/literal-text.cjs.map +1 -0
- package/dist/application/print/literal-text.mjs +48 -0
- package/dist/application/print/literal-text.mjs.map +1 -0
- package/dist/application/print/print-nodes.cjs +38 -0
- package/dist/application/print/print-nodes.cjs.map +1 -0
- package/dist/application/print/print-nodes.mjs +36 -0
- package/dist/application/print/print-nodes.mjs.map +1 -0
- package/dist/application/print/print-options.cjs +6 -0
- package/dist/application/print/print-options.cjs.map +1 -0
- package/dist/application/print/print-options.mjs +4 -0
- package/dist/application/print/print-options.mjs.map +1 -0
- package/dist/application/print/text-writer.cjs +63 -0
- package/dist/application/print/text-writer.cjs.map +1 -0
- package/dist/application/print/text-writer.mjs +60 -0
- package/dist/application/print/text-writer.mjs.map +1 -0
- package/dist/application/print/type-printer.cjs +214 -0
- package/dist/application/print/type-printer.cjs.map +1 -0
- package/dist/application/print/type-printer.mjs +210 -0
- package/dist/application/print/type-printer.mjs.map +1 -0
- package/dist/application/stack-overflow.cjs +36 -0
- package/dist/application/stack-overflow.cjs.map +1 -0
- package/dist/application/stack-overflow.mjs +31 -0
- package/dist/application/stack-overflow.mjs.map +1 -0
- package/dist/application/transform/document/components.cjs +104 -0
- package/dist/application/transform/document/components.cjs.map +1 -0
- package/dist/application/transform/document/components.mjs +102 -0
- package/dist/application/transform/document/components.mjs.map +1 -0
- package/dist/application/transform/document/defs-root.cjs +18 -0
- package/dist/application/transform/document/defs-root.cjs.map +1 -0
- package/dist/application/transform/document/defs-root.mjs +16 -0
- package/dist/application/transform/document/defs-root.mjs.map +1 -0
- package/dist/application/transform/document/document-member.cjs +13 -0
- package/dist/application/transform/document/document-member.cjs.map +1 -0
- package/dist/application/transform/document/document-member.mjs +11 -0
- package/dist/application/transform/document/document-member.mjs.map +1 -0
- package/dist/application/transform/document/document.cjs +86 -0
- package/dist/application/transform/document/document.cjs.map +1 -0
- package/dist/application/transform/document/document.mjs +83 -0
- package/dist/application/transform/document/document.mjs.map +1 -0
- package/dist/application/transform/document/header.cjs +27 -0
- package/dist/application/transform/document/header.cjs.map +1 -0
- package/dist/application/transform/document/header.mjs +25 -0
- package/dist/application/transform/document/header.mjs.map +1 -0
- package/dist/application/transform/document/kept-deprecated.cjs +96 -0
- package/dist/application/transform/document/kept-deprecated.cjs.map +1 -0
- package/dist/application/transform/document/kept-deprecated.mjs +94 -0
- package/dist/application/transform/document/kept-deprecated.mjs.map +1 -0
- package/dist/application/transform/document/media-type.cjs +42 -0
- package/dist/application/transform/document/media-type.cjs.map +1 -0
- package/dist/application/transform/document/media-type.mjs +38 -0
- package/dist/application/transform/document/media-type.mjs.map +1 -0
- package/dist/application/transform/document/operation.cjs +45 -0
- package/dist/application/transform/document/operation.cjs.map +1 -0
- package/dist/application/transform/document/operation.mjs +43 -0
- package/dist/application/transform/document/operation.mjs.map +1 -0
- package/dist/application/transform/document/parameter.cjs +25 -0
- package/dist/application/transform/document/parameter.cjs.map +1 -0
- package/dist/application/transform/document/parameter.mjs +23 -0
- package/dist/application/transform/document/parameter.mjs.map +1 -0
- package/dist/application/transform/document/parameters.cjs +114 -0
- package/dist/application/transform/document/parameters.cjs.map +1 -0
- package/dist/application/transform/document/parameters.mjs +112 -0
- package/dist/application/transform/document/parameters.mjs.map +1 -0
- package/dist/application/transform/document/path-item-conflicts.cjs +51 -0
- package/dist/application/transform/document/path-item-conflicts.cjs.map +1 -0
- package/dist/application/transform/document/path-item-conflicts.mjs +49 -0
- package/dist/application/transform/document/path-item-conflicts.mjs.map +1 -0
- package/dist/application/transform/document/path-item.cjs +82 -0
- package/dist/application/transform/document/path-item.cjs.map +1 -0
- package/dist/application/transform/document/path-item.mjs +80 -0
- package/dist/application/transform/document/path-item.mjs.map +1 -0
- package/dist/application/transform/document/path-key-overlaps.cjs +57 -0
- package/dist/application/transform/document/path-key-overlaps.cjs.map +1 -0
- package/dist/application/transform/document/path-key-overlaps.mjs +55 -0
- package/dist/application/transform/document/path-key-overlaps.mjs.map +1 -0
- package/dist/application/transform/document/paths-enum.cjs +75 -0
- package/dist/application/transform/document/paths-enum.cjs.map +1 -0
- package/dist/application/transform/document/paths-enum.mjs +72 -0
- package/dist/application/transform/document/paths-enum.mjs.map +1 -0
- package/dist/application/transform/document/paths.cjs +127 -0
- package/dist/application/transform/document/paths.cjs.map +1 -0
- package/dist/application/transform/document/paths.mjs +125 -0
- package/dist/application/transform/document/paths.mjs.map +1 -0
- package/dist/application/transform/document/request-body.cjs +36 -0
- package/dist/application/transform/document/request-body.cjs.map +1 -0
- package/dist/application/transform/document/request-body.mjs +34 -0
- package/dist/application/transform/document/request-body.mjs.map +1 -0
- package/dist/application/transform/document/response.cjs +59 -0
- package/dist/application/transform/document/response.cjs.map +1 -0
- package/dist/application/transform/document/response.mjs +57 -0
- package/dist/application/transform/document/response.mjs.map +1 -0
- package/dist/application/transform/document/responses.cjs +23 -0
- package/dist/application/transform/document/responses.cjs.map +1 -0
- package/dist/application/transform/document/responses.mjs +21 -0
- package/dist/application/transform/document/responses.mjs.map +1 -0
- package/dist/application/transform/document/root-type-aliases.cjs +69 -0
- package/dist/application/transform/document/root-type-aliases.cjs.map +1 -0
- package/dist/application/transform/document/root-type-aliases.mjs +65 -0
- package/dist/application/transform/document/root-type-aliases.mjs.map +1 -0
- package/dist/application/transform/document/webhooks.cjs +19 -0
- package/dist/application/transform/document/webhooks.cjs.map +1 -0
- package/dist/application/transform/document/webhooks.mjs +17 -0
- package/dist/application/transform/document/webhooks.mjs.map +1 -0
- package/dist/application/transform/document-entries.cjs +17 -0
- package/dist/application/transform/document-entries.cjs.map +1 -0
- package/dist/application/transform/document-entries.mjs +14 -0
- package/dist/application/transform/document-entries.mjs.map +1 -0
- package/dist/application/transform/footer/document-footer.cjs +88 -0
- package/dist/application/transform/footer/document-footer.cjs.map +1 -0
- package/dist/application/transform/footer/document-footer.mjs +86 -0
- package/dist/application/transform/footer/document-footer.mjs.map +1 -0
- package/dist/application/transform/footer/enum-naming.cjs +121 -0
- package/dist/application/transform/footer/enum-naming.cjs.map +1 -0
- package/dist/application/transform/footer/enum-naming.mjs +115 -0
- package/dist/application/transform/footer/enum-naming.mjs.map +1 -0
- package/dist/application/transform/helper-types.cjs +68 -0
- package/dist/application/transform/helper-types.cjs.map +1 -0
- package/dist/application/transform/helper-types.mjs +65 -0
- package/dist/application/transform/helper-types.mjs.map +1 -0
- package/dist/application/transform/literal-type.cjs +36 -0
- package/dist/application/transform/literal-type.cjs.map +1 -0
- package/dist/application/transform/literal-type.mjs +34 -0
- package/dist/application/transform/literal-type.mjs.map +1 -0
- package/dist/application/transform/numbered-names.cjs +18 -0
- package/dist/application/transform/numbered-names.cjs.map +1 -0
- package/dist/application/transform/numbered-names.mjs +16 -0
- package/dist/application/transform/numbered-names.mjs.map +1 -0
- package/dist/application/transform/ref-type.cjs +57 -0
- package/dist/application/transform/ref-type.cjs.map +1 -0
- package/dist/application/transform/ref-type.mjs +54 -0
- package/dist/application/transform/ref-type.mjs.map +1 -0
- package/dist/application/transform/schema/array-type.cjs +105 -0
- package/dist/application/transform/schema/array-type.cjs.map +1 -0
- package/dist/application/transform/schema/array-type.mjs +103 -0
- package/dist/application/transform/schema/array-type.mjs.map +1 -0
- package/dist/application/transform/schema/composition-type.cjs +107 -0
- package/dist/application/transform/schema/composition-type.cjs.map +1 -0
- package/dist/application/transform/schema/composition-type.mjs +105 -0
- package/dist/application/transform/schema/composition-type.mjs.map +1 -0
- package/dist/application/transform/schema/core-type.cjs +84 -0
- package/dist/application/transform/schema/core-type.cjs.map +1 -0
- package/dist/application/transform/schema/core-type.mjs +82 -0
- package/dist/application/transform/schema/core-type.mjs.map +1 -0
- package/dist/application/transform/schema/discriminator-property.cjs +21 -0
- package/dist/application/transform/schema/discriminator-property.cjs.map +1 -0
- package/dist/application/transform/schema/discriminator-property.mjs +19 -0
- package/dist/application/transform/schema/discriminator-property.mjs.map +1 -0
- package/dist/application/transform/schema/enum-rule.cjs +107 -0
- package/dist/application/transform/schema/enum-rule.cjs.map +1 -0
- package/dist/application/transform/schema/enum-rule.mjs +105 -0
- package/dist/application/transform/schema/enum-rule.mjs.map +1 -0
- package/dist/application/transform/schema/object-type.cjs +173 -0
- package/dist/application/transform/schema/object-type.cjs.map +1 -0
- package/dist/application/transform/schema/object-type.mjs +170 -0
- package/dist/application/transform/schema/object-type.mjs.map +1 -0
- package/dist/application/transform/schema/presence-members.cjs +59 -0
- package/dist/application/transform/schema/presence-members.cjs.map +1 -0
- package/dist/application/transform/schema/presence-members.mjs +57 -0
- package/dist/application/transform/schema/presence-members.mjs.map +1 -0
- package/dist/application/transform/schema/schema-transform.cjs +72 -0
- package/dist/application/transform/schema/schema-transform.cjs.map +1 -0
- package/dist/application/transform/schema/schema-transform.mjs +68 -0
- package/dist/application/transform/schema/schema-transform.mjs.map +1 -0
- package/dist/application/transform/schema/unevaluated-properties.cjs +61 -0
- package/dist/application/transform/schema/unevaluated-properties.cjs.map +1 -0
- package/dist/application/transform/schema/unevaluated-properties.mjs +59 -0
- package/dist/application/transform/schema/unevaluated-properties.mjs.map +1 -0
- package/dist/application/transform/schema-comment.cjs +84 -0
- package/dist/application/transform/schema-comment.cjs.map +1 -0
- package/dist/application/transform/schema-comment.mjs +81 -0
- package/dist/application/transform/schema-comment.mjs.map +1 -0
- package/dist/application/transform/shared-types.cjs +8 -0
- package/dist/application/transform/shared-types.cjs.map +1 -0
- package/dist/application/transform/shared-types.mjs +6 -0
- package/dist/application/transform/shared-types.mjs.map +1 -0
- package/dist/application/transform/type-combinators.cjs +49 -0
- package/dist/application/transform/type-combinators.cjs.map +1 -0
- package/dist/application/transform/type-combinators.mjs +42 -0
- package/dist/application/transform/type-combinators.mjs.map +1 -0
- package/dist/cli/cli-arguments.cjs +137 -0
- package/dist/cli/cli-arguments.cjs.map +1 -0
- package/dist/cli/cli-arguments.mjs +129 -0
- package/dist/cli/cli-arguments.mjs.map +1 -0
- package/dist/cli/cli-errors.cjs +80 -0
- package/dist/cli/cli-errors.cjs.map +1 -0
- package/dist/cli/cli-errors.mjs +76 -0
- package/dist/cli/cli-errors.mjs.map +1 -0
- package/dist/cli/cli-output.cjs +37 -0
- package/dist/cli/cli-output.cjs.map +1 -0
- package/dist/cli/cli-output.mjs +30 -0
- package/dist/cli/cli-output.mjs.map +1 -0
- package/dist/cli/docs-links.cjs +6 -0
- package/dist/cli/docs-links.cjs.map +1 -0
- package/dist/cli/docs-links.mjs +4 -0
- package/dist/cli/docs-links.mjs.map +1 -0
- package/dist/cli/fix-option.cjs +19 -0
- package/dist/cli/fix-option.cjs.map +1 -0
- package/dist/cli/fix-option.mjs +16 -0
- package/dist/cli/fix-option.mjs.map +1 -0
- package/dist/cli/help-text.cjs +44 -0
- package/dist/cli/help-text.cjs.map +1 -0
- package/dist/cli/help-text.mjs +42 -0
- package/dist/cli/help-text.mjs.map +1 -0
- package/dist/cli/main.cjs +62 -0
- package/dist/cli/main.cjs.map +1 -0
- package/dist/cli/main.d.cts +2 -0
- package/dist/cli/main.d.mts +2 -0
- package/dist/cli/main.d.ts +2 -0
- package/dist/cli/main.mjs +54 -0
- package/dist/cli/main.mjs.map +1 -0
- package/dist/cli/redocly-apis.cjs +65 -0
- package/dist/cli/redocly-apis.cjs.map +1 -0
- package/dist/cli/redocly-apis.mjs +62 -0
- package/dist/cli/redocly-apis.mjs.map +1 -0
- package/dist/cli/ref-limits.cjs +14 -0
- package/dist/cli/ref-limits.cjs.map +1 -0
- package/dist/cli/ref-limits.mjs +12 -0
- package/dist/cli/ref-limits.mjs.map +1 -0
- package/dist/cli/run-cli.cjs +100 -0
- package/dist/cli/run-cli.cjs.map +1 -0
- package/dist/cli/run-cli.mjs +98 -0
- package/dist/cli/run-cli.mjs.map +1 -0
- package/dist/domain/assert-never.cjs +8 -0
- package/dist/domain/assert-never.cjs.map +1 -0
- package/dist/domain/assert-never.mjs +6 -0
- package/dist/domain/assert-never.mjs.map +1 -0
- package/dist/domain/errors.cjs +50 -0
- package/dist/domain/errors.cjs.map +1 -0
- package/dist/domain/errors.mjs +46 -0
- package/dist/domain/errors.mjs.map +1 -0
- package/dist/domain/ir/constructors.cjs +89 -0
- package/dist/domain/ir/constructors.cjs.map +1 -0
- package/dist/domain/ir/constructors.mjs +71 -0
- package/dist/domain/ir/constructors.mjs.map +1 -0
- package/dist/domain/ir/identifier-text.cjs +29 -0
- package/dist/domain/ir/identifier-text.cjs.map +1 -0
- package/dist/domain/ir/identifier-text.mjs +25 -0
- package/dist/domain/ir/identifier-text.mjs.map +1 -0
- package/dist/domain/ir/newer-identifier-ranges.cjs +109 -0
- package/dist/domain/ir/newer-identifier-ranges.cjs.map +1 -0
- package/dist/domain/ir/newer-identifier-ranges.mjs +106 -0
- package/dist/domain/ir/newer-identifier-ranges.mjs.map +1 -0
- package/dist/domain/ir/normalize.cjs +32 -0
- package/dist/domain/ir/normalize.cjs.map +1 -0
- package/dist/domain/ir/normalize.mjs +29 -0
- package/dist/domain/ir/normalize.mjs.map +1 -0
- package/dist/domain/ir/property-name.cjs +19 -0
- package/dist/domain/ir/property-name.cjs.map +1 -0
- package/dist/domain/ir/property-name.mjs +16 -0
- package/dist/domain/ir/property-name.mjs.map +1 -0
- package/dist/domain/ir/raw-text-escapes.cjs +25 -0
- package/dist/domain/ir/raw-text-escapes.cjs.map +1 -0
- package/dist/domain/ir/raw-text-escapes.mjs +22 -0
- package/dist/domain/ir/raw-text-escapes.mjs.map +1 -0
- package/dist/domain/openapi/alias-expansion.cjs +50 -0
- package/dist/domain/openapi/alias-expansion.cjs.map +1 -0
- package/dist/domain/openapi/alias-expansion.mjs +45 -0
- package/dist/domain/openapi/alias-expansion.mjs.map +1 -0
- package/dist/domain/openapi/binary-content.cjs +48 -0
- package/dist/domain/openapi/binary-content.cjs.map +1 -0
- package/dist/domain/openapi/binary-content.mjs +45 -0
- package/dist/domain/openapi/binary-content.mjs.map +1 -0
- package/dist/domain/openapi/components-object.cjs +29 -0
- package/dist/domain/openapi/components-object.cjs.map +1 -0
- package/dist/domain/openapi/components-object.mjs +24 -0
- package/dist/domain/openapi/components-object.mjs.map +1 -0
- package/dist/domain/openapi/json-pointer.cjs +31 -0
- package/dist/domain/openapi/json-pointer.cjs.map +1 -0
- package/dist/domain/openapi/json-pointer.mjs +27 -0
- package/dist/domain/openapi/json-pointer.mjs.map +1 -0
- package/dist/domain/openapi/media-type-object.cjs +14 -0
- package/dist/domain/openapi/media-type-object.cjs.map +1 -0
- package/dist/domain/openapi/media-type-object.mjs +11 -0
- package/dist/domain/openapi/media-type-object.mjs.map +1 -0
- package/dist/domain/openapi/parameter-object.cjs +13 -0
- package/dist/domain/openapi/parameter-object.cjs.map +1 -0
- package/dist/domain/openapi/parameter-object.mjs +10 -0
- package/dist/domain/openapi/parameter-object.mjs.map +1 -0
- package/dist/domain/openapi/path-item-object.cjs +35 -0
- package/dist/domain/openapi/path-item-object.cjs.map +1 -0
- package/dist/domain/openapi/path-item-object.mjs +30 -0
- package/dist/domain/openapi/path-item-object.mjs.map +1 -0
- package/dist/domain/openapi/unsupported-features.cjs +87 -0
- package/dist/domain/openapi/unsupported-features.cjs.map +1 -0
- package/dist/domain/openapi/unsupported-features.mjs +84 -0
- package/dist/domain/openapi/unsupported-features.mjs.map +1 -0
- package/dist/domain/output-fixes.cjs +66 -0
- package/dist/domain/output-fixes.cjs.map +1 -0
- package/dist/domain/output-fixes.mjs +59 -0
- package/dist/domain/output-fixes.mjs.map +1 -0
- package/dist/index.cjs +98 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +812 -0
- package/dist/index.d.mts +812 -0
- package/dist/index.d.ts +812 -0
- package/dist/index.mjs +27 -0
- package/dist/index.mjs.map +1 -0
- package/dist/transform/components-object.cjs +14 -0
- package/dist/transform/components-object.cjs.map +1 -0
- package/dist/transform/components-object.mjs +10 -0
- package/dist/transform/components-object.mjs.map +1 -0
- package/dist/transform/header-object.cjs +12 -0
- package/dist/transform/header-object.cjs.map +1 -0
- package/dist/transform/header-object.mjs +10 -0
- package/dist/transform/header-object.mjs.map +1 -0
- package/dist/transform/media-type-object.cjs +12 -0
- package/dist/transform/media-type-object.cjs.map +1 -0
- package/dist/transform/media-type-object.mjs +10 -0
- package/dist/transform/media-type-object.mjs.map +1 -0
- package/dist/transform/operation-object.cjs +26 -0
- package/dist/transform/operation-object.cjs.map +1 -0
- package/dist/transform/operation-object.mjs +21 -0
- package/dist/transform/operation-object.mjs.map +1 -0
- package/dist/transform/parameter-object.cjs +12 -0
- package/dist/transform/parameter-object.cjs.map +1 -0
- package/dist/transform/parameter-object.mjs +10 -0
- package/dist/transform/parameter-object.mjs.map +1 -0
- package/dist/transform/path-item-object.cjs +12 -0
- package/dist/transform/path-item-object.cjs.map +1 -0
- package/dist/transform/path-item-object.mjs +10 -0
- package/dist/transform/path-item-object.mjs.map +1 -0
- package/dist/transform/paths-object.cjs +11 -0
- package/dist/transform/paths-object.cjs.map +1 -0
- package/dist/transform/paths-object.mjs +9 -0
- package/dist/transform/paths-object.mjs.map +1 -0
- package/dist/transform/request-body-object.cjs +12 -0
- package/dist/transform/request-body-object.cjs.map +1 -0
- package/dist/transform/request-body-object.mjs +10 -0
- package/dist/transform/request-body-object.mjs.map +1 -0
- package/dist/transform/response-object.cjs +12 -0
- package/dist/transform/response-object.cjs.map +1 -0
- package/dist/transform/response-object.mjs +10 -0
- package/dist/transform/response-object.mjs.map +1 -0
- package/dist/transform/responses-object.cjs +12 -0
- package/dist/transform/responses-object.cjs.map +1 -0
- package/dist/transform/responses-object.mjs +10 -0
- package/dist/transform/responses-object.mjs.map +1 -0
- package/dist/transform/schema-object.cjs +21 -0
- package/dist/transform/schema-object.cjs.map +1 -0
- package/dist/transform/schema-object.mjs +16 -0
- package/dist/transform/schema-object.mjs.map +1 -0
- package/package.json +115 -4
- package/src/adapters/node-file-system/node-file-system.ts +44 -0
- package/src/adapters/redocly-loader/alias-limit.ts +20 -0
- package/src/adapters/redocly-loader/allowed-hosts.ts +62 -0
- package/src/adapters/redocly-loader/bundled-ref-repair.ts +65 -0
- package/src/adapters/redocly-loader/malformed-refs.ts +61 -0
- package/src/adapters/redocly-loader/redocly-config-source.ts +43 -0
- package/src/adapters/redocly-loader/redocly-schema-loader.ts +246 -0
- package/src/adapters/redocly-loader/ref-access.ts +146 -0
- package/src/adapters/redocly-loader/ref-holders.ts +43 -0
- package/src/adapters/redocly-loader/remote-fetch.ts +104 -0
- package/src/adapters/redocly-loader/schema-load-errors.ts +124 -0
- package/src/adapters/redocly-loader/schema-source.ts +151 -0
- package/src/adapters/redocly-loader/unsupported-keys.ts +102 -0
- package/src/adapters/terminal-logger/terminal-logger.ts +98 -0
- package/src/adapters/type-ast-bridge/footer-nodes.ts +38 -0
- package/src/adapters/type-ast-bridge/ir-declarations-to-typescript.ts +100 -0
- package/src/adapters/type-ast-bridge/ir-to-typescript.ts +220 -0
- package/src/adapters/type-ast-bridge/lazy-node.ts +24 -0
- package/src/adapters/type-ast-bridge/load-typescript.ts +84 -0
- package/src/adapters/type-ast-bridge/print-typescript.ts +33 -0
- package/src/adapters/type-ast-bridge/typescript-raw-text.ts +49 -0
- package/src/adapters/type-ast-bridge/typescript-to-ir.ts +280 -0
- package/src/adapters/type-ast-bridge/typescript-types.ts +8 -0
- package/src/api/ast-to-string.ts +59 -0
- package/src/api/comment-header.ts +7 -0
- package/src/api/default-ports.ts +44 -0
- package/src/api/discriminator-enum.ts +76 -0
- package/src/api/discriminator-scan.ts +272 -0
- package/src/api/document-declarations.ts +41 -0
- package/src/api/document-refs.ts +71 -0
- package/src/api/document-run.ts +159 -0
- package/src/api/footer-entry.ts +23 -0
- package/src/api/footer-sink.ts +67 -0
- package/src/api/legacy-callback-warning.ts +29 -0
- package/src/api/legacy-ts-helpers.ts +311 -0
- package/src/api/legacy-utils.ts +118 -0
- package/src/api/openapi-ts.ts +62 -0
- package/src/api/schema-callbacks.ts +211 -0
- package/src/api/string-to-ast.ts +27 -0
- package/src/api/transform-context.ts +87 -0
- package/src/api/transform-schema.ts +39 -0
- package/src/api/type-helpers.ts +130 -0
- package/src/api/unsupported-feature-warnings.ts +26 -0
- package/src/application/ports/file-system.ts +12 -0
- package/src/application/ports/logger.ts +16 -0
- package/src/application/ports/redocly-config-source.ts +16 -0
- package/src/application/ports/schema-loader.ts +32 -0
- package/src/application/print/comment-writer.ts +91 -0
- package/src/application/print/declaration-printer.ts +100 -0
- package/src/application/print/literal-text.ts +62 -0
- package/src/application/print/print-nodes.ts +62 -0
- package/src/application/print/print-options.ts +11 -0
- package/src/application/print/text-writer.ts +83 -0
- package/src/application/print/type-printer.ts +281 -0
- package/src/application/stack-overflow.ts +54 -0
- package/src/application/transform/document/components.ts +189 -0
- package/src/application/transform/document/defs-root.ts +25 -0
- package/src/application/transform/document/document-member.ts +20 -0
- package/src/application/transform/document/document.ts +157 -0
- package/src/application/transform/document/header.ts +34 -0
- package/src/application/transform/document/kept-deprecated.ts +135 -0
- package/src/application/transform/document/media-type.ts +78 -0
- package/src/application/transform/document/operation.ts +64 -0
- package/src/application/transform/document/parameter.ts +45 -0
- package/src/application/transform/document/parameters.ts +200 -0
- package/src/application/transform/document/path-item-conflicts.ts +79 -0
- package/src/application/transform/document/path-item.ts +168 -0
- package/src/application/transform/document/path-key-overlaps.ts +112 -0
- package/src/application/transform/document/paths-enum.ts +127 -0
- package/src/application/transform/document/paths.ts +211 -0
- package/src/application/transform/document/request-body.ts +50 -0
- package/src/application/transform/document/response.ts +109 -0
- package/src/application/transform/document/responses.ts +29 -0
- package/src/application/transform/document/root-type-aliases.ts +106 -0
- package/src/application/transform/document/webhooks.ts +22 -0
- package/src/application/transform/document-entries.ts +28 -0
- package/src/application/transform/footer/document-footer.ts +127 -0
- package/src/application/transform/footer/enum-naming.ts +181 -0
- package/src/application/transform/helper-types.ts +92 -0
- package/src/application/transform/literal-type.ts +54 -0
- package/src/application/transform/numbered-names.ts +20 -0
- package/src/application/transform/ref-type.ts +97 -0
- package/src/application/transform/schema/array-type.ts +152 -0
- package/src/application/transform/schema/composition-type.ts +183 -0
- package/src/application/transform/schema/core-type.ts +115 -0
- package/src/application/transform/schema/discriminator-property.ts +28 -0
- package/src/application/transform/schema/enum-rule.ts +157 -0
- package/src/application/transform/schema/object-type.ts +271 -0
- package/src/application/transform/schema/presence-members.ts +96 -0
- package/src/application/transform/schema/schema-context.ts +110 -0
- package/src/application/transform/schema/schema-rule.ts +29 -0
- package/src/application/transform/schema/schema-transform.ts +99 -0
- package/src/application/transform/schema/unevaluated-properties.ts +105 -0
- package/src/application/transform/schema-comment.ts +116 -0
- package/src/application/transform/shared-types.ts +9 -0
- package/src/application/transform/transform-context.ts +51 -0
- package/src/application/transform/type-combinators.ts +57 -0
- package/src/cli/cli-arguments.ts +198 -0
- package/src/cli/cli-dependencies.ts +42 -0
- package/src/cli/cli-errors.ts +125 -0
- package/src/cli/cli-output.ts +53 -0
- package/src/cli/docs-links.ts +6 -0
- package/src/cli/fix-option.ts +29 -0
- package/src/cli/help-text.ts +52 -0
- package/src/cli/main.ts +67 -0
- package/src/cli/redocly-apis.ts +91 -0
- package/src/cli/ref-limits.ts +16 -0
- package/src/cli/run-cli.ts +114 -0
- package/src/domain/assert-never.ts +8 -0
- package/src/domain/errors.ts +74 -0
- package/src/domain/ir/constructors.ts +137 -0
- package/src/domain/ir/identifier-text.ts +49 -0
- package/src/domain/ir/newer-identifier-ranges.ts +109 -0
- package/src/domain/ir/nodes.ts +224 -0
- package/src/domain/ir/normalize.ts +51 -0
- package/src/domain/ir/property-name.ts +28 -0
- package/src/domain/ir/raw-text-escapes.ts +37 -0
- package/src/domain/openapi/alias-expansion.ts +72 -0
- package/src/domain/openapi/binary-content.ts +74 -0
- package/src/domain/openapi/components-object.ts +52 -0
- package/src/domain/openapi/document-object.ts +12 -0
- package/src/domain/openapi/header-object.ts +9 -0
- package/src/domain/openapi/json-pointer.ts +46 -0
- package/src/domain/openapi/media-type-object.ts +26 -0
- package/src/domain/openapi/operation-object.ts +13 -0
- package/src/domain/openapi/parameter-object.ts +30 -0
- package/src/domain/openapi/path-item-object.ts +70 -0
- package/src/domain/openapi/request-body-object.ts +7 -0
- package/src/domain/openapi/response-object.ts +14 -0
- package/src/domain/openapi/schema-object.ts +59 -0
- package/src/domain/openapi/unsupported-features.ts +139 -0
- package/src/domain/output-fixes.ts +95 -0
- package/src/index.ts +67 -0
- package/src/transform/components-object.ts +25 -0
- package/src/transform/header-object.ts +19 -0
- package/src/transform/media-type-object.ts +19 -0
- package/src/transform/operation-object.ts +36 -0
- package/src/transform/parameter-object.ts +19 -0
- package/src/transform/parameters-array.ts +19 -0
- package/src/transform/path-item-object.ts +22 -0
- package/src/transform/paths-enum.ts +8 -0
- package/src/transform/paths-object.ts +15 -0
- package/src/transform/request-body-object.ts +19 -0
- package/src/transform/response-object.ts +19 -0
- package/src/transform/responses-object.ts +19 -0
- package/src/transform/schema-object.ts +36 -0
- package/src/transform/webhooks-object.ts +15 -0
- package/src/types/generator-options.ts +267 -0
- package/src/types/openapi-common.ts +100 -0
- package/src/types/openapi-document.ts +196 -0
- package/src/types/openapi-path-item.ts +130 -0
- package/src/types/openapi-request.ts +209 -0
- package/src/types/openapi-response.ts +81 -0
- package/src/types/openapi-schema.ts +169 -0
- package/src/types/openapi-security.ts +116 -0
- package/src/types.ts +12 -0
|
@@ -0,0 +1,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,145 @@
|
|
|
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
|
+
return element.isRest ? ts.factory.createRestTypeNode(type) : type;
|
|
34
|
+
}
|
|
35
|
+
function toLeafTypeNode(ts, type) {
|
|
36
|
+
switch (type.kind) {
|
|
37
|
+
case "keyword":
|
|
38
|
+
return toKeywordType(ts, type.keyword);
|
|
39
|
+
case "stringLiteral":
|
|
40
|
+
return toStringLiteralType(ts, type.value, type.encoding);
|
|
41
|
+
case "numberLiteral":
|
|
42
|
+
return ts.factory.createLiteralTypeNode(toNumberExpression(ts, type.value));
|
|
43
|
+
case "booleanLiteral":
|
|
44
|
+
return ts.factory.createLiteralTypeNode(
|
|
45
|
+
type.value ? ts.factory.createTrue() : ts.factory.createFalse()
|
|
46
|
+
);
|
|
47
|
+
case "raw":
|
|
48
|
+
return type.origin ?? ts.factory.createIdentifier(type.text);
|
|
49
|
+
default:
|
|
50
|
+
return assertNever.assertNever(type);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
function toReferenceNode(ts, type) {
|
|
54
|
+
const typeArguments = type.typeArguments.length > 0 ? type.typeArguments.map((argument) => toTypeNode(ts, argument)) : void 0;
|
|
55
|
+
return ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(type.name), typeArguments);
|
|
56
|
+
}
|
|
57
|
+
function toTypeNode(ts, type) {
|
|
58
|
+
const convert = (inner) => toTypeNode(ts, inner);
|
|
59
|
+
const { factory } = ts;
|
|
60
|
+
switch (type.kind) {
|
|
61
|
+
case "keyword":
|
|
62
|
+
case "stringLiteral":
|
|
63
|
+
case "numberLiteral":
|
|
64
|
+
case "booleanLiteral":
|
|
65
|
+
case "raw":
|
|
66
|
+
return toLeafTypeNode(ts, type);
|
|
67
|
+
case "reference":
|
|
68
|
+
return toReferenceNode(ts, type);
|
|
69
|
+
case "array":
|
|
70
|
+
return factory.createArrayTypeNode(convert(type.element));
|
|
71
|
+
case "tuple":
|
|
72
|
+
return factory.createTupleTypeNode(
|
|
73
|
+
type.elements.map((element) => toTupleElement(ts, element))
|
|
74
|
+
);
|
|
75
|
+
case "union":
|
|
76
|
+
return factory.createUnionTypeNode(type.types.map(convert));
|
|
77
|
+
case "intersection":
|
|
78
|
+
return factory.createIntersectionTypeNode(type.types.map(convert));
|
|
79
|
+
case "object":
|
|
80
|
+
return factory.createTypeLiteralNode(type.members.map((member) => toTypeElement(ts, member)));
|
|
81
|
+
case "indexedAccess":
|
|
82
|
+
return factory.createIndexedAccessTypeNode(convert(type.object), convert(type.index));
|
|
83
|
+
case "readonly":
|
|
84
|
+
return factory.createTypeOperatorNode(ts.SyntaxKind.ReadonlyKeyword, convert(type.type));
|
|
85
|
+
default:
|
|
86
|
+
return assertNever.assertNever(type);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
function withComments(ts, node, comments) {
|
|
90
|
+
for (const comment of comments) {
|
|
91
|
+
const kind = comment.kind === "block" ? ts.SyntaxKind.MultiLineCommentTrivia : ts.SyntaxKind.SingleLineCommentTrivia;
|
|
92
|
+
ts.addSyntheticLeadingComment(node, kind, comment.text, true);
|
|
93
|
+
}
|
|
94
|
+
return node;
|
|
95
|
+
}
|
|
96
|
+
function toPropertyName(ts, name) {
|
|
97
|
+
switch (name.kind) {
|
|
98
|
+
case "identifier":
|
|
99
|
+
return ts.factory.createIdentifier(name.text);
|
|
100
|
+
case "string":
|
|
101
|
+
return ts.factory.createStringLiteral(name.value);
|
|
102
|
+
case "number":
|
|
103
|
+
return ts.factory.createNumericLiteral(name.text);
|
|
104
|
+
default:
|
|
105
|
+
return assertNever.assertNever(name);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
function readonlyModifiers(ts, isReadonly) {
|
|
109
|
+
return isReadonly ? [ts.factory.createModifier(ts.SyntaxKind.ReadonlyKeyword)] : void 0;
|
|
110
|
+
}
|
|
111
|
+
function toPropertySignature(ts, property) {
|
|
112
|
+
const questionToken = property.isOptional ? ts.factory.createToken(ts.SyntaxKind.QuestionToken) : void 0;
|
|
113
|
+
const signature = ts.factory.createPropertySignature(
|
|
114
|
+
readonlyModifiers(ts, property.isReadonly),
|
|
115
|
+
toPropertyName(ts, property.name),
|
|
116
|
+
questionToken,
|
|
117
|
+
toTypeNode(ts, property.type)
|
|
118
|
+
);
|
|
119
|
+
return withComments(ts, signature, property.comments);
|
|
120
|
+
}
|
|
121
|
+
function toTypeElement(ts, member) {
|
|
122
|
+
if (member.kind === "property") {
|
|
123
|
+
return toPropertySignature(ts, member);
|
|
124
|
+
}
|
|
125
|
+
const parameter = ts.factory.createParameterDeclaration(
|
|
126
|
+
void 0,
|
|
127
|
+
void 0,
|
|
128
|
+
member.parameterName,
|
|
129
|
+
void 0,
|
|
130
|
+
toTypeNode(ts, member.parameterType)
|
|
131
|
+
);
|
|
132
|
+
const signature = ts.factory.createIndexSignature(
|
|
133
|
+
readonlyModifiers(ts, member.isReadonly),
|
|
134
|
+
[parameter],
|
|
135
|
+
toTypeNode(ts, member.type)
|
|
136
|
+
);
|
|
137
|
+
return withComments(ts, signature, member.comments);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
exports.toPropertySignature = toPropertySignature;
|
|
141
|
+
exports.toTypeElement = toTypeElement;
|
|
142
|
+
exports.toTypeNode = toTypeNode;
|
|
143
|
+
exports.toValueExpression = toValueExpression;
|
|
144
|
+
exports.withComments = withComments;
|
|
145
|
+
//# 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 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,139 @@
|
|
|
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
|
+
return element.isRest ? ts.factory.createRestTypeNode(type) : type;
|
|
32
|
+
}
|
|
33
|
+
function toLeafTypeNode(ts, type) {
|
|
34
|
+
switch (type.kind) {
|
|
35
|
+
case "keyword":
|
|
36
|
+
return toKeywordType(ts, type.keyword);
|
|
37
|
+
case "stringLiteral":
|
|
38
|
+
return toStringLiteralType(ts, type.value, type.encoding);
|
|
39
|
+
case "numberLiteral":
|
|
40
|
+
return ts.factory.createLiteralTypeNode(toNumberExpression(ts, type.value));
|
|
41
|
+
case "booleanLiteral":
|
|
42
|
+
return ts.factory.createLiteralTypeNode(
|
|
43
|
+
type.value ? ts.factory.createTrue() : ts.factory.createFalse()
|
|
44
|
+
);
|
|
45
|
+
case "raw":
|
|
46
|
+
return type.origin ?? ts.factory.createIdentifier(type.text);
|
|
47
|
+
default:
|
|
48
|
+
return assertNever(type);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
function toReferenceNode(ts, type) {
|
|
52
|
+
const typeArguments = type.typeArguments.length > 0 ? type.typeArguments.map((argument) => toTypeNode(ts, argument)) : void 0;
|
|
53
|
+
return ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(type.name), typeArguments);
|
|
54
|
+
}
|
|
55
|
+
function toTypeNode(ts, type) {
|
|
56
|
+
const convert = (inner) => toTypeNode(ts, inner);
|
|
57
|
+
const { factory } = ts;
|
|
58
|
+
switch (type.kind) {
|
|
59
|
+
case "keyword":
|
|
60
|
+
case "stringLiteral":
|
|
61
|
+
case "numberLiteral":
|
|
62
|
+
case "booleanLiteral":
|
|
63
|
+
case "raw":
|
|
64
|
+
return toLeafTypeNode(ts, type);
|
|
65
|
+
case "reference":
|
|
66
|
+
return toReferenceNode(ts, type);
|
|
67
|
+
case "array":
|
|
68
|
+
return factory.createArrayTypeNode(convert(type.element));
|
|
69
|
+
case "tuple":
|
|
70
|
+
return factory.createTupleTypeNode(
|
|
71
|
+
type.elements.map((element) => toTupleElement(ts, element))
|
|
72
|
+
);
|
|
73
|
+
case "union":
|
|
74
|
+
return factory.createUnionTypeNode(type.types.map(convert));
|
|
75
|
+
case "intersection":
|
|
76
|
+
return factory.createIntersectionTypeNode(type.types.map(convert));
|
|
77
|
+
case "object":
|
|
78
|
+
return factory.createTypeLiteralNode(type.members.map((member) => toTypeElement(ts, member)));
|
|
79
|
+
case "indexedAccess":
|
|
80
|
+
return factory.createIndexedAccessTypeNode(convert(type.object), convert(type.index));
|
|
81
|
+
case "readonly":
|
|
82
|
+
return factory.createTypeOperatorNode(ts.SyntaxKind.ReadonlyKeyword, convert(type.type));
|
|
83
|
+
default:
|
|
84
|
+
return assertNever(type);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
function withComments(ts, node, comments) {
|
|
88
|
+
for (const comment of comments) {
|
|
89
|
+
const kind = comment.kind === "block" ? ts.SyntaxKind.MultiLineCommentTrivia : ts.SyntaxKind.SingleLineCommentTrivia;
|
|
90
|
+
ts.addSyntheticLeadingComment(node, kind, comment.text, true);
|
|
91
|
+
}
|
|
92
|
+
return node;
|
|
93
|
+
}
|
|
94
|
+
function toPropertyName(ts, name) {
|
|
95
|
+
switch (name.kind) {
|
|
96
|
+
case "identifier":
|
|
97
|
+
return ts.factory.createIdentifier(name.text);
|
|
98
|
+
case "string":
|
|
99
|
+
return ts.factory.createStringLiteral(name.value);
|
|
100
|
+
case "number":
|
|
101
|
+
return ts.factory.createNumericLiteral(name.text);
|
|
102
|
+
default:
|
|
103
|
+
return assertNever(name);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
function readonlyModifiers(ts, isReadonly) {
|
|
107
|
+
return isReadonly ? [ts.factory.createModifier(ts.SyntaxKind.ReadonlyKeyword)] : void 0;
|
|
108
|
+
}
|
|
109
|
+
function toPropertySignature(ts, property) {
|
|
110
|
+
const questionToken = property.isOptional ? ts.factory.createToken(ts.SyntaxKind.QuestionToken) : void 0;
|
|
111
|
+
const signature = ts.factory.createPropertySignature(
|
|
112
|
+
readonlyModifiers(ts, property.isReadonly),
|
|
113
|
+
toPropertyName(ts, property.name),
|
|
114
|
+
questionToken,
|
|
115
|
+
toTypeNode(ts, property.type)
|
|
116
|
+
);
|
|
117
|
+
return withComments(ts, signature, property.comments);
|
|
118
|
+
}
|
|
119
|
+
function toTypeElement(ts, member) {
|
|
120
|
+
if (member.kind === "property") {
|
|
121
|
+
return toPropertySignature(ts, member);
|
|
122
|
+
}
|
|
123
|
+
const parameter = ts.factory.createParameterDeclaration(
|
|
124
|
+
void 0,
|
|
125
|
+
void 0,
|
|
126
|
+
member.parameterName,
|
|
127
|
+
void 0,
|
|
128
|
+
toTypeNode(ts, member.parameterType)
|
|
129
|
+
);
|
|
130
|
+
const signature = ts.factory.createIndexSignature(
|
|
131
|
+
readonlyModifiers(ts, member.isReadonly),
|
|
132
|
+
[parameter],
|
|
133
|
+
toTypeNode(ts, member.type)
|
|
134
|
+
);
|
|
135
|
+
return withComments(ts, signature, member.comments);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
export { toPropertySignature, toTypeElement, toTypeNode, toValueExpression, withComments };
|
|
139
|
+
//# 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 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;;"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
function lazyNode(create) {
|
|
2
|
+
let node;
|
|
3
|
+
const target = () => {
|
|
4
|
+
node ??= create();
|
|
5
|
+
return node;
|
|
6
|
+
};
|
|
7
|
+
return new Proxy({}, {
|
|
8
|
+
get: (_, key) => Reflect.get(target(), key),
|
|
9
|
+
set: (_, key, value) => Reflect.set(target(), key, value),
|
|
10
|
+
has: (_, key) => Reflect.has(target(), key),
|
|
11
|
+
ownKeys: () => Reflect.ownKeys(target()),
|
|
12
|
+
getOwnPropertyDescriptor: (_, key) => {
|
|
13
|
+
const descriptor = Reflect.getOwnPropertyDescriptor(target(), key);
|
|
14
|
+
return descriptor === void 0 ? void 0 : { ...descriptor, configurable: true };
|
|
15
|
+
},
|
|
16
|
+
getPrototypeOf: () => Reflect.getPrototypeOf(target())
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export { lazyNode };
|
|
21
|
+
//# sourceMappingURL=lazy-node.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lazy-node.mjs","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;;"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const node_module = require('node:module');
|
|
4
|
+
const path = require('node:path');
|
|
5
|
+
const errors = require('../../domain/errors.cjs');
|
|
6
|
+
|
|
7
|
+
var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
|
|
8
|
+
const TYPESCRIPT_PACKAGES = ["typescript", "@typescript/typescript6"];
|
|
9
|
+
const UNAVAILABLE_CODES = /* @__PURE__ */ new Set([
|
|
10
|
+
"MODULE_NOT_FOUND",
|
|
11
|
+
"ERR_REQUIRE_ESM",
|
|
12
|
+
"ERR_PACKAGE_PATH_NOT_EXPORTED"
|
|
13
|
+
]);
|
|
14
|
+
class TypeScriptNotFoundError extends errors.OpenAPITypesafeError {
|
|
15
|
+
constructor() {
|
|
16
|
+
super({
|
|
17
|
+
code: errors.ERROR_CODES.TYPESCRIPT_NOT_FOUND,
|
|
18
|
+
message: 'A callback or helper uses TypeScript compiler nodes, which needs the TypeScript JavaScript API. Install "typescript" version 6 or earlier, or "@typescript/typescript6" on TypeScript 7, or use IR callbacks (irCallbacks: true).',
|
|
19
|
+
details: { packages: [...TYPESCRIPT_PACKAGES] }
|
|
20
|
+
});
|
|
21
|
+
this.name = "TypeScriptNotFoundError";
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function defaultModuleRequires() {
|
|
25
|
+
return [node_module.createRequire(path.join(process.cwd(), "package.json")), node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('adapters/type-ast-bridge/load-typescript.cjs', document.baseURI).href)))];
|
|
26
|
+
}
|
|
27
|
+
function hasCompilerApi(value) {
|
|
28
|
+
const module = value;
|
|
29
|
+
return typeof module?.factory?.createTypeReferenceNode === "function" && typeof module.createPrinter === "function";
|
|
30
|
+
}
|
|
31
|
+
function tryRequire(load, id) {
|
|
32
|
+
try {
|
|
33
|
+
return load(id);
|
|
34
|
+
} catch (error) {
|
|
35
|
+
if (UNAVAILABLE_CODES.has(error.code ?? "")) {
|
|
36
|
+
return void 0;
|
|
37
|
+
}
|
|
38
|
+
throw error;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function loadTypeScript(requires = defaultModuleRequires()) {
|
|
42
|
+
for (const id of TYPESCRIPT_PACKAGES) {
|
|
43
|
+
for (const load of requires) {
|
|
44
|
+
const module = tryRequire(load, id);
|
|
45
|
+
if (hasCompilerApi(module)) {
|
|
46
|
+
return module;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
throw new TypeScriptNotFoundError();
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
exports.TYPESCRIPT_PACKAGES = TYPESCRIPT_PACKAGES;
|
|
54
|
+
exports.TypeScriptNotFoundError = TypeScriptNotFoundError;
|
|
55
|
+
exports.defaultModuleRequires = defaultModuleRequires;
|
|
56
|
+
exports.loadTypeScript = loadTypeScript;
|
|
57
|
+
//# sourceMappingURL=load-typescript.cjs.map
|