@scriptc/compiler 0.1.6 → 0.2.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/ambient/scriptc-node-fallback.d.ts +73 -25
- package/ambient/scriptc-overrides.d.ts +10 -6
- package/ambient/scriptc.d.ts +28 -5
- package/dist/backend/build-cache.d.ts +1 -3
- package/dist/backend/build-cache.js +3 -22
- package/dist/backend/build-cache.js.map +1 -1
- package/dist/backend/cache-root.d.ts +3 -0
- package/dist/backend/cache-root.js +23 -0
- package/dist/backend/cache-root.js.map +1 -0
- package/dist/backend/cycle-analysis.d.ts +15 -0
- package/dist/backend/cycle-analysis.js +107 -0
- package/dist/backend/cycle-analysis.js.map +1 -0
- package/dist/backend/cycle-analysis.test.js +124 -0
- package/dist/backend/cycle-analysis.test.js.map +1 -0
- package/dist/backend/debug-symbols.d.ts +8 -0
- package/dist/backend/debug-symbols.js +52 -0
- package/dist/backend/debug-symbols.js.map +1 -0
- package/dist/backend/executable-features.d.ts +4 -0
- package/dist/backend/executable-features.js +42 -0
- package/dist/backend/executable-features.js.map +1 -0
- package/dist/backend/external-c.d.ts +5 -27
- package/dist/backend/external-c.js +5 -40
- package/dist/backend/external-c.js.map +1 -1
- package/dist/backend/ffi-callbacks.d.ts +2 -3
- package/dist/backend/ffi-callbacks.js +2 -3
- package/dist/backend/ffi-callbacks.js.map +1 -1
- package/dist/backend/library-identity-markers.d.ts +4 -9
- package/dist/backend/library-identity-markers.js +11 -49
- package/dist/backend/library-identity-markers.js.map +1 -1
- package/dist/backend/library-pack.d.ts +5 -0
- package/dist/backend/library-pack.js +123 -0
- package/dist/backend/library-pack.js.map +1 -0
- package/dist/backend/link-plan-core.d.ts +20 -0
- package/dist/backend/link-plan-core.js +18 -0
- package/dist/backend/link-plan-core.js.map +1 -0
- package/dist/backend/link-plan.d.ts +2 -1
- package/dist/backend/link-plan.js +18 -17
- package/dist/backend/link-plan.js.map +1 -1
- package/dist/backend/link-trace.d.ts +2 -0
- package/dist/backend/link-trace.js +24 -0
- package/dist/backend/link-trace.js.map +1 -0
- package/dist/backend/linker.js +9 -1
- package/dist/backend/linker.js.map +1 -1
- package/dist/backend/literals.d.ts +9 -0
- package/dist/backend/literals.js +35 -0
- package/dist/backend/literals.js.map +1 -0
- package/dist/backend/literals.test.d.ts +1 -0
- package/dist/backend/literals.test.js +53 -0
- package/dist/backend/literals.test.js.map +1 -0
- package/dist/backend/llvm/blocks.d.ts +4 -0
- package/dist/backend/llvm/blocks.js +25 -4
- package/dist/backend/llvm/blocks.js.map +1 -1
- package/dist/backend/llvm/blocks.test.d.ts +1 -0
- package/dist/backend/llvm/blocks.test.js +91 -0
- package/dist/backend/llvm/blocks.test.js.map +1 -0
- package/dist/backend/llvm/classes.d.ts +14 -8
- package/dist/backend/llvm/classes.js +70 -28
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/common.d.ts +5 -1
- package/dist/backend/llvm/common.js +45 -4
- package/dist/backend/llvm/common.js.map +1 -1
- package/dist/backend/llvm/debug-info.d.ts +32 -0
- package/dist/backend/llvm/debug-info.js +198 -0
- package/dist/backend/llvm/debug-info.js.map +1 -0
- package/dist/backend/llvm/debug-info.test.d.ts +1 -0
- package/dist/backend/llvm/debug-info.test.js +110 -0
- package/dist/backend/llvm/debug-info.test.js.map +1 -0
- package/dist/backend/llvm/dyn.d.ts +16 -2
- package/dist/backend/llvm/dyn.js +498 -175
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +598 -1
- package/dist/backend/llvm/emitter.js +739 -409
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/emitter.test.d.ts +1 -0
- package/dist/backend/llvm/emitter.test.js +179 -0
- package/dist/backend/llvm/emitter.test.js.map +1 -0
- package/dist/backend/llvm/expr-async.js +23 -14
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-bytes.d.ts +1 -1
- package/dist/backend/llvm/expr-bytes.js +32 -14
- package/dist/backend/llvm/expr-bytes.js.map +1 -1
- package/dist/backend/llvm/expr-callbacks.d.ts +1 -1
- package/dist/backend/llvm/expr-callbacks.js +25 -22
- package/dist/backend/llvm/expr-callbacks.js.map +1 -1
- package/dist/backend/llvm/expr-calls.js +136 -35
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-containers.d.ts +1 -1
- package/dist/backend/llvm/expr-containers.js +43 -14
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-context.d.ts +5 -260
- package/dist/backend/llvm/expr-control.js +9 -5
- package/dist/backend/llvm/expr-control.js.map +1 -1
- package/dist/backend/llvm/expr-dispatch.d.ts +1 -1
- package/dist/backend/llvm/expr-dispatch.js +2 -0
- package/dist/backend/llvm/expr-dispatch.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.js +72 -74
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-island.d.ts +1 -1
- package/dist/backend/llvm/expr-island.js +11 -7
- package/dist/backend/llvm/expr-island.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.d.ts +1 -1
- package/dist/backend/llvm/expr-primitives.js +51 -30
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.test.js +1 -1
- package/dist/backend/llvm/expr-records.d.ts +5 -1
- package/dist/backend/llvm/expr-records.js +43 -4
- package/dist/backend/llvm/expr-records.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.d.ts +4 -4
- package/dist/backend/llvm/expr-stream-bridges.js +102 -121
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.test.d.ts +1 -0
- package/dist/backend/llvm/expr-stream-bridges.test.js +55 -0
- package/dist/backend/llvm/expr-stream-bridges.test.js.map +1 -0
- package/dist/backend/llvm/expr-stream-callbacks.d.ts +1 -1
- package/dist/backend/llvm/expr-stream-callbacks.js +12 -12
- package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
- package/dist/backend/llvm/layouts.d.ts +19 -0
- package/dist/backend/llvm/layouts.js +12 -0
- package/dist/backend/llvm/layouts.js.map +1 -0
- package/dist/backend/llvm/lib-abi.d.ts +19 -0
- package/dist/backend/llvm/lib-abi.js +82 -0
- package/dist/backend/llvm/lib-abi.js.map +1 -0
- package/dist/backend/llvm/lib-connect.d.ts +2 -0
- package/dist/backend/llvm/lib-connect.js +51 -0
- package/dist/backend/llvm/lib-connect.js.map +1 -0
- package/dist/backend/llvm/lib-datagram.d.ts +2 -0
- package/dist/backend/llvm/lib-datagram.js +135 -0
- package/dist/backend/llvm/lib-datagram.js.map +1 -0
- package/dist/backend/llvm/lib-dispatch.js +50 -6
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +59 -18
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-http2.d.ts +2 -0
- package/dist/backend/llvm/lib-http2.js +215 -0
- package/dist/backend/llvm/lib-http2.js.map +1 -0
- package/dist/backend/llvm/lib-lookup.d.ts +2 -0
- package/dist/backend/llvm/lib-lookup.js +39 -0
- package/dist/backend/llvm/lib-lookup.js.map +1 -0
- package/dist/backend/llvm/lib-network.js +25 -2
- package/dist/backend/llvm/lib-network.js.map +1 -1
- package/dist/backend/llvm/lib-process.js +21 -16
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +125 -1
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/lib-stream.js +3 -2
- package/dist/backend/llvm/lib-stream.js.map +1 -1
- package/dist/backend/llvm/lib-test.d.ts +2 -0
- package/dist/backend/llvm/lib-test.js +34 -0
- package/dist/backend/llvm/lib-test.js.map +1 -0
- package/dist/backend/llvm/lib-tls.d.ts +2 -0
- package/dist/backend/llvm/lib-tls.js +82 -0
- package/dist/backend/llvm/lib-tls.js.map +1 -0
- package/dist/backend/llvm/shapes.d.ts +10 -9
- package/dist/backend/llvm/shapes.js +35 -130
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/split.js +4 -1
- package/dist/backend/llvm/split.js.map +1 -1
- package/dist/backend/llvm/split.test.js +26 -1
- package/dist/backend/llvm/split.test.js.map +1 -1
- package/dist/backend/llvm/unsupported.d.ts +1 -0
- package/dist/backend/llvm/unsupported.js +1 -2
- package/dist/backend/llvm/unsupported.js.map +1 -1
- package/dist/backend/llvm/walkers.js +1 -7
- package/dist/backend/llvm/walkers.js.map +1 -1
- package/dist/backend/mangle.d.ts +2 -2
- package/dist/backend/mangle.js +16 -5
- package/dist/backend/mangle.js.map +1 -1
- package/dist/backend/{c/may-throw.d.ts → may-throw.d.ts} +1 -1
- package/dist/backend/{c/may-throw.js → may-throw.js} +51 -46
- package/dist/backend/may-throw.js.map +1 -0
- package/dist/backend/may-throw.test.d.ts +1 -0
- package/dist/backend/may-throw.test.js +58 -0
- package/dist/backend/may-throw.test.js.map +1 -0
- package/dist/backend/native-codegen-core.d.ts +22 -0
- package/dist/backend/native-codegen-core.js +44 -0
- package/dist/backend/native-codegen-core.js.map +1 -0
- package/dist/backend/native-codegen.d.ts +3 -19
- package/dist/backend/native-codegen.js +5 -44
- package/dist/backend/native-codegen.js.map +1 -1
- package/dist/backend/native-codegen.test.js +2 -2
- package/dist/backend/native-codegen.test.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +94 -0
- package/dist/backend/native-link-info-core.js +62 -0
- package/dist/backend/native-link-info-core.js.map +1 -0
- package/dist/backend/native-link-info.d.ts +3 -88
- package/dist/backend/native-link-info.js +12 -243
- package/dist/backend/native-link-info.js.map +1 -1
- package/dist/backend/native-link-info.test.js +41 -146
- package/dist/backend/native-link-info.test.js.map +1 -1
- package/dist/backend/native-toolchain.d.ts +10 -25
- package/dist/backend/native-toolchain.js +89 -219
- package/dist/backend/native-toolchain.js.map +1 -1
- package/dist/backend/native-toolchain.test.js +15 -5
- package/dist/backend/native-toolchain.test.js.map +1 -1
- package/dist/backend/native-tools.d.ts +24 -0
- package/dist/backend/native-tools.js +33 -0
- package/dist/backend/native-tools.js.map +1 -0
- package/dist/backend/object-localize.js +19 -8
- package/dist/backend/object-localize.js.map +1 -1
- package/dist/backend/object-localize.test.js +22 -0
- package/dist/backend/object-localize.test.js.map +1 -1
- package/dist/backend/runtime-abi.d.ts +2 -2
- package/dist/backend/runtime-abi.js +2 -2
- package/dist/backend/runtime-pack-core.d.ts +101 -0
- package/dist/backend/runtime-pack-core.js +172 -0
- package/dist/backend/runtime-pack-core.js.map +1 -0
- package/dist/backend/runtime-pack-native.d.ts +21 -0
- package/dist/backend/runtime-pack-native.js +70 -0
- package/dist/backend/runtime-pack-native.js.map +1 -0
- package/dist/backend/runtime-pack-targets.test.js +1 -1
- package/dist/backend/runtime-pack.d.ts +3 -83
- package/dist/backend/runtime-pack.js +8 -151
- package/dist/backend/runtime-pack.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +24 -1
- package/dist/backend/runtime-pack.test.js.map +1 -1
- package/dist/backend/source-locations.d.ts +12 -0
- package/dist/backend/source-locations.js +32 -0
- package/dist/backend/source-locations.js.map +1 -0
- package/dist/backend/source-locations.test.d.ts +1 -0
- package/dist/backend/source-locations.test.js +16 -0
- package/dist/backend/source-locations.test.js.map +1 -0
- package/dist/backend/target-diagnostics.d.ts +22 -0
- package/dist/backend/target-diagnostics.js +108 -0
- package/dist/backend/target-diagnostics.js.map +1 -0
- package/dist/backend/target-platform.d.ts +15 -0
- package/dist/backend/target-platform.js +72 -0
- package/dist/backend/target-platform.js.map +1 -0
- package/dist/backend/targets.d.ts +13 -4
- package/dist/backend/targets.js +95 -30
- package/dist/backend/targets.js.map +1 -1
- package/dist/backend/targets.test.js +65 -4
- package/dist/backend/targets.test.js.map +1 -1
- package/dist/backend/toolchain-environment.d.ts +6 -0
- package/dist/backend/toolchain-environment.js +99 -0
- package/dist/backend/toolchain-environment.js.map +1 -0
- package/dist/backend/vendor-archives.d.ts +1 -9
- package/dist/backend/vendor-archives.js +2 -9
- package/dist/backend/vendor-archives.js.map +1 -1
- package/dist/backend/vendor-inputs.d.ts +9 -0
- package/dist/backend/vendor-inputs.js +10 -0
- package/dist/backend/vendor-inputs.js.map +1 -0
- package/dist/backend/warm-cache.d.ts +3 -0
- package/dist/backend/warm-cache.js +41 -0
- package/dist/backend/warm-cache.js.map +1 -0
- package/dist/cli/command.d.ts +3 -0
- package/dist/cli/command.js +328 -0
- package/dist/cli/command.js.map +1 -0
- package/dist/cli/host.d.ts +24 -0
- package/dist/cli/host.js +2 -0
- package/dist/cli/host.js.map +1 -0
- package/dist/cli/output-options.d.ts +26 -0
- package/dist/cli/output-options.js +60 -0
- package/dist/cli/output-options.js.map +1 -0
- package/dist/cli/paths.d.ts +12 -0
- package/dist/cli/paths.js +42 -0
- package/dist/cli/paths.js.map +1 -0
- package/dist/cli/usage.d.ts +74 -0
- package/dist/cli/usage.js +86 -0
- package/dist/cli/usage.js.map +1 -0
- package/dist/cli/wasi-paths.d.ts +8 -0
- package/dist/cli/wasi-paths.js +41 -0
- package/dist/cli/wasi-paths.js.map +1 -0
- package/dist/cli/wasi-runner.d.ts +2 -0
- package/dist/cli/wasi-runner.js +28 -0
- package/dist/cli/wasi-runner.js.map +1 -0
- package/dist/compat/fetch-profile.js +3 -3
- package/dist/compat/fetch-profile.js.map +1 -1
- package/dist/compile-types.d.ts +162 -0
- package/dist/compile-types.js +2 -0
- package/dist/compile-types.js.map +1 -0
- package/dist/coverage/report.js +11 -5
- package/dist/coverage/report.js.map +1 -1
- package/dist/coverage/surface-manifest.js +5 -2
- package/dist/coverage/surface-manifest.js.map +1 -1
- package/dist/diagnostics/diagnostic.d.ts +4 -0
- package/dist/diagnostics/diagnostic.js +15 -3
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/executable/executable-cache.d.ts +3 -4
- package/dist/executable/executable-cache.js +33 -10
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +38 -16
- package/dist/executable/executable-cache.test.js.map +1 -1
- package/dist/executable/prepare.d.ts +14 -0
- package/dist/executable/prepare.js +66 -0
- package/dist/executable/prepare.js.map +1 -0
- package/dist/ffi/ffi-manifest.d.ts +11 -4
- package/dist/ffi/ffi-manifest.js +170 -58
- package/dist/ffi/ffi-manifest.js.map +1 -1
- package/dist/ffi/ffi-manifest.test.d.ts +1 -0
- package/dist/ffi/ffi-manifest.test.js +111 -0
- package/dist/ffi/ffi-manifest.test.js.map +1 -0
- package/dist/format-integer.d.ts +3 -0
- package/dist/format-integer.js +14 -0
- package/dist/format-integer.js.map +1 -0
- package/dist/frontend/analysis.d.ts +5 -0
- package/dist/frontend/analysis.js +88 -0
- package/dist/frontend/analysis.js.map +1 -0
- package/dist/frontend/arguments-usage.d.ts +4 -0
- package/dist/frontend/arguments-usage.js +40 -0
- package/dist/frontend/arguments-usage.js.map +1 -0
- package/dist/frontend/binding-source.d.ts +4 -0
- package/dist/frontend/binding-source.js +18 -0
- package/dist/frontend/binding-source.js.map +1 -0
- package/dist/frontend/builtin-modules.d.ts +1 -1
- package/dist/frontend/builtin-modules.js +1 -1
- package/dist/frontend/builtin-modules.js.map +1 -1
- package/dist/frontend/cjs-lexer.d.ts +4 -25
- package/dist/frontend/cjs-lexer.js +6 -806
- package/dist/frontend/cjs-lexer.js.map +1 -1
- package/dist/frontend/cjs-resolve.d.ts +5 -0
- package/dist/frontend/cjs-resolve.js +429 -0
- package/dist/frontend/cjs-resolve.js.map +1 -0
- package/dist/frontend/cjs-syntax.d.ts +26 -0
- package/dist/frontend/cjs-syntax.js +806 -0
- package/dist/frontend/cjs-syntax.js.map +1 -0
- package/dist/frontend/comptime-node.d.ts +4 -0
- package/dist/frontend/comptime-node.js +16 -0
- package/dist/frontend/comptime-node.js.map +1 -0
- package/dist/frontend/comptime-node.test.d.ts +1 -0
- package/dist/frontend/comptime-node.test.js +37 -0
- package/dist/frontend/comptime-node.test.js.map +1 -0
- package/dist/frontend/dts-paths.d.ts +3 -4
- package/dist/frontend/dts-paths.js +15 -8
- package/dist/frontend/dts-paths.js.map +1 -1
- package/dist/frontend/fork-target.js +2 -2
- package/dist/frontend/fork-target.js.map +1 -1
- package/dist/frontend/helper-tokens.d.ts +1 -0
- package/dist/frontend/helper-tokens.js +147 -0
- package/dist/frontend/helper-tokens.js.map +1 -0
- package/dist/frontend/helper-tokens.test.d.ts +1 -0
- package/dist/frontend/helper-tokens.test.js +35 -0
- package/dist/frontend/helper-tokens.test.js.map +1 -0
- package/dist/frontend/inferred-js-diagnostics.d.ts +5 -0
- package/dist/frontend/inferred-js-diagnostics.js +69 -0
- package/dist/frontend/inferred-js-diagnostics.js.map +1 -0
- package/dist/frontend/inferred-js-diagnostics.test.d.ts +1 -0
- package/dist/frontend/inferred-js-diagnostics.test.js +58 -0
- package/dist/frontend/inferred-js-diagnostics.test.js.map +1 -0
- package/dist/frontend/input-tracker.d.ts +5 -2
- package/dist/frontend/input-tracker.js +24 -3
- package/dist/frontend/input-tracker.js.map +1 -1
- package/dist/frontend/input-tracker.test.js +23 -0
- package/dist/frontend/input-tracker.test.js.map +1 -1
- package/dist/frontend/lib-contract.js +32 -24
- package/dist/frontend/lib-contract.js.map +1 -1
- package/dist/frontend/literal-values.d.ts +4 -0
- package/dist/frontend/literal-values.js +21 -0
- package/dist/frontend/literal-values.js.map +1 -0
- package/dist/frontend/literal-values.test.d.ts +1 -0
- package/dist/frontend/literal-values.test.js +91 -0
- package/dist/frontend/literal-values.test.js.map +1 -0
- package/dist/frontend/lowering/abstract-equality.d.ts +1 -1
- package/dist/frontend/lowering/abstract-equality.js +3 -0
- package/dist/frontend/lowering/abstract-equality.js.map +1 -1
- package/dist/frontend/lowering/array-indexed-mutation.js +11 -6
- package/dist/frontend/lowering/array-indexed-mutation.js.map +1 -1
- package/dist/frontend/lowering/array-values.d.ts +4 -1
- package/dist/frontend/lowering/array-values.js +43 -1
- package/dist/frontend/lowering/array-values.js.map +1 -1
- package/dist/frontend/lowering/callback-arg.js +1 -0
- package/dist/frontend/lowering/callback-arg.js.map +1 -1
- package/dist/frontend/lowering/class-callbacks.d.ts +12 -0
- package/dist/frontend/lowering/class-callbacks.js +63 -0
- package/dist/frontend/lowering/class-callbacks.js.map +1 -0
- package/dist/frontend/lowering/class-descriptors.d.ts +9 -0
- package/dist/frontend/lowering/class-descriptors.js +73 -0
- package/dist/frontend/lowering/class-descriptors.js.map +1 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +41 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.js +803 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.test.d.ts +1 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js +92 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -0
- package/dist/frontend/lowering/class-instance-constructor.d.ts +7 -0
- package/dist/frontend/lowering/class-instance-constructor.js +64 -0
- package/dist/frontend/lowering/class-instance-constructor.js.map +1 -0
- package/dist/frontend/lowering/class-method-values.d.ts +10 -0
- package/dist/frontend/lowering/class-method-values.js +170 -0
- package/dist/frontend/lowering/class-method-values.js.map +1 -0
- package/dist/frontend/lowering/class-prototypes.d.ts +16 -0
- package/dist/frontend/lowering/class-prototypes.js +134 -0
- package/dist/frontend/lowering/class-prototypes.js.map +1 -0
- package/dist/frontend/lowering/class-static-data.d.ts +6 -0
- package/dist/frontend/lowering/class-static-data.js +56 -0
- package/dist/frontend/lowering/class-static-data.js.map +1 -0
- package/dist/frontend/lowering/containers/buffer-numeric-methods.d.ts +4 -0
- package/dist/frontend/lowering/containers/buffer-numeric-methods.js +26 -0
- package/dist/frontend/lowering/containers/buffer-numeric-methods.js.map +1 -0
- package/dist/frontend/lowering/containers/bytes.d.ts +11 -7
- package/dist/frontend/lowering/containers/bytes.js +164 -155
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/containers/string-and-regexp.d.ts +2 -2
- package/dist/frontend/lowering/containers/string-and-regexp.js +39 -16
- package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
- package/dist/frontend/lowering/containers/string-replacement.d.ts +7 -0
- package/dist/frontend/lowering/containers/string-replacement.js +217 -0
- package/dist/frontend/lowering/containers/string-replacement.js.map +1 -0
- package/dist/frontend/lowering/error-methods.d.ts +11 -0
- package/dist/frontend/lowering/error-methods.js +78 -0
- package/dist/frontend/lowering/error-methods.js.map +1 -0
- package/dist/frontend/lowering/expressions/global-symbols.d.ts +6 -0
- package/dist/frontend/lowering/expressions/global-symbols.js +11 -0
- package/dist/frontend/lowering/expressions/global-symbols.js.map +1 -0
- package/dist/frontend/lowering/expressions/native-proxy.d.ts +7 -0
- package/dist/frontend/lowering/expressions/native-proxy.js +49 -0
- package/dist/frontend/lowering/expressions/native-proxy.js.map +1 -0
- package/dist/frontend/lowering/expressions/nullish-assignment.d.ts +6 -0
- package/dist/frontend/lowering/expressions/nullish-assignment.js +124 -0
- package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -0
- package/dist/frontend/lowering/expressions/object-literals.d.ts +8 -8
- package/dist/frontend/lowering/expressions/object-literals.js +485 -185
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/optional-chains.d.ts +5 -6
- package/dist/frontend/lowering/expressions/optional-chains.js +27 -14
- package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
- package/dist/frontend/lowering/expressions/try-lower-expression.js +1 -0
- package/dist/frontend/lowering/expressions/try-lower-expression.js.map +1 -1
- package/dist/frontend/lowering/expressions/union-field-write.d.ts +8 -0
- package/dist/frontend/lowering/expressions/union-field-write.js +71 -0
- package/dist/frontend/lowering/expressions/union-field-write.js.map +1 -0
- package/dist/frontend/lowering/function-context.d.ts +93 -0
- package/dist/frontend/lowering/function-context.js +103 -0
- package/dist/frontend/lowering/function-context.js.map +1 -0
- package/dist/frontend/lowering/generator-delegation.d.ts +7 -0
- package/dist/frontend/lowering/generator-delegation.js +85 -0
- package/dist/frontend/lowering/generator-delegation.js.map +1 -0
- package/dist/frontend/lowering/generator-dynamic-dispatch.d.ts +10 -0
- package/dist/frontend/lowering/generator-dynamic-dispatch.js +105 -0
- package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -0
- package/dist/frontend/lowering/lib-boundary.d.ts +2 -1
- package/dist/frontend/lowering/lib-boundary.js +59 -20
- package/dist/frontend/lowering/lib-boundary.js.map +1 -1
- package/dist/frontend/lowering/lib-boundary.test.d.ts +1 -0
- package/dist/frontend/lowering/lib-boundary.test.js +45 -0
- package/dist/frontend/lowering/lib-boundary.test.js.map +1 -0
- package/dist/frontend/lowering/lower-array-sort.d.ts +1 -1
- package/dist/frontend/lowering/lower-assert.d.ts +1 -1
- package/dist/frontend/lowering/lower-assert.js.map +1 -1
- package/dist/frontend/lowering/lower-async-iteration.d.ts +1 -1
- package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
- package/dist/frontend/lowering/lower-builtin-values.d.ts +12 -0
- package/dist/frontend/lowering/lower-builtin-values.js +139 -0
- package/dist/frontend/lowering/lower-builtin-values.js.map +1 -0
- package/dist/frontend/lowering/lower-builtins.d.ts +27 -41
- package/dist/frontend/lowering/lower-builtins.js +553 -346
- package/dist/frontend/lowering/lower-builtins.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.d.ts +22 -26
- package/dist/frontend/lowering/lower-calls.js +1373 -380
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +83 -45
- package/dist/frontend/lowering/lower-classes.js +952 -339
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-comptime.d.ts +1 -1
- package/dist/frontend/lowering/lower-comptime.js +23 -32
- package/dist/frontend/lowering/lower-comptime.js.map +1 -1
- package/dist/frontend/lowering/lower-containers.d.ts +27 -32
- package/dist/frontend/lowering/lower-containers.js +796 -151
- package/dist/frontend/lowering/lower-containers.js.map +1 -1
- package/dist/frontend/lowering/lower-dgram.d.ts +1 -1
- package/dist/frontend/lowering/lower-dgram.js.map +1 -1
- package/dist/frontend/lowering/lower-enums.d.ts +1 -1
- package/dist/frontend/lowering/lower-enums.js.map +1 -1
- package/dist/frontend/lowering/lower-event-emitter.d.ts +30 -1
- package/dist/frontend/lowering/lower-event-emitter.js +58 -26
- package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
- package/dist/frontend/lowering/lower-expando.d.ts +7 -1
- package/dist/frontend/lowering/lower-expando.js +14 -6
- package/dist/frontend/lowering/lower-expando.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.d.ts +35 -11
- package/dist/frontend/lowering/lower-exprs.js +1785 -790
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-generators.d.ts +2 -5
- package/dist/frontend/lowering/lower-generators.js +77 -46
- package/dist/frontend/lowering/lower-generators.js.map +1 -1
- package/dist/frontend/lowering/lower-global-value.d.ts +7 -0
- package/dist/frontend/lowering/lower-global-value.js +17 -0
- package/dist/frontend/lowering/lower-global-value.js.map +1 -0
- package/dist/frontend/lowering/lower-inspect.d.ts +1 -1
- package/dist/frontend/lowering/lower-inspect.js +17 -8
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-island.d.ts +5 -8
- package/dist/frontend/lowering/lower-island.js +34 -23
- package/dist/frontend/lowering/lower-island.js.map +1 -1
- package/dist/frontend/lowering/lower-mixins.d.ts +2 -2
- package/dist/frontend/lowering/lower-mixins.js +5 -3
- package/dist/frontend/lowering/lower-mixins.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.d.ts +1 -1
- package/dist/frontend/lowering/lower-modules.js +252 -38
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-namespaces.d.ts +1 -1
- package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
- package/dist/frontend/lowering/lower-node-module.d.ts +1 -1
- package/dist/frontend/lowering/lower-node-module.js +13 -10
- package/dist/frontend/lowering/lower-node-module.js.map +1 -1
- package/dist/frontend/lowering/lower-server.d.ts +1 -1
- package/dist/frontend/lowering/lower-server.js +6 -10
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.d.ts +10 -14
- package/dist/frontend/lowering/lower-stmts.js +731 -532
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.d.ts +1 -1
- package/dist/frontend/lowering/lower-stream.js +19 -10
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lower-test.d.ts +1 -1
- package/dist/frontend/lowering/lower-test.js.map +1 -1
- package/dist/frontend/lowering/lower-url.d.ts +6 -0
- package/dist/frontend/lowering/lower-url.js +77 -0
- package/dist/frontend/lowering/lower-url.js.map +1 -0
- package/dist/frontend/lowering/lowerer.d.ts +113 -189
- package/dist/frontend/lowering/lowerer.js +1033 -663
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/lowerer.test.d.ts +1 -0
- package/dist/frontend/lowering/lowerer.test.js +26 -0
- package/dist/frontend/lowering/lowerer.test.js.map +1 -0
- package/dist/frontend/lowering/native-ffi.d.ts +5 -0
- package/dist/frontend/lowering/native-ffi.js +40 -0
- package/dist/frontend/lowering/native-ffi.js.map +1 -0
- package/dist/frontend/lowering/object-enumeration-receiver.d.ts +7 -0
- package/dist/frontend/lowering/object-enumeration-receiver.js +33 -0
- package/dist/frontend/lowering/object-enumeration-receiver.js.map +1 -0
- package/dist/frontend/lowering/object-factory-new.d.ts +8 -0
- package/dist/frontend/lowering/object-factory-new.js +68 -0
- package/dist/frontend/lowering/object-factory-new.js.map +1 -0
- package/dist/frontend/lowering/optional-arguments.js +6 -1
- package/dist/frontend/lowering/optional-arguments.js.map +1 -1
- package/dist/frontend/lowering/pairs-snapshot.js +2 -1
- package/dist/frontend/lowering/pairs-snapshot.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-locals.d.ts +14 -0
- package/dist/frontend/lowering/runtime-optional-locals.js +41 -0
- package/dist/frontend/lowering/runtime-optional-locals.js.map +1 -0
- package/dist/frontend/lowering/runtime-optional-locals.test.d.ts +1 -0
- package/dist/frontend/lowering/runtime-optional-locals.test.js +85 -0
- package/dist/frontend/lowering/runtime-optional-locals.test.js.map +1 -0
- package/dist/frontend/lowering/sanitize-class-types.d.ts +8 -0
- package/dist/frontend/lowering/sanitize-class-types.js +79 -0
- package/dist/frontend/lowering/sanitize-class-types.js.map +1 -0
- package/dist/frontend/lowering/sanitize-class-types.test.d.ts +1 -0
- package/dist/frontend/lowering/sanitize-class-types.test.js +60 -0
- package/dist/frontend/lowering/sanitize-class-types.test.js.map +1 -0
- package/dist/frontend/lowering/static-this.d.ts +5 -1
- package/dist/frontend/lowering/static-this.js +28 -2
- package/dist/frontend/lowering/static-this.js.map +1 -1
- package/dist/frontend/lowering/string-index.d.ts +7 -0
- package/dist/frontend/lowering/string-index.js +39 -0
- package/dist/frontend/lowering/string-index.js.map +1 -0
- package/dist/frontend/lowering/surfaces.d.ts +9 -4
- package/dist/frontend/lowering/surfaces.js +98 -35
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/lowering/symbol-fields.d.ts +22 -0
- package/dist/frontend/lowering/symbol-fields.js +183 -0
- package/dist/frontend/lowering/symbol-fields.js.map +1 -0
- package/dist/frontend/lowering/symbol-methods.d.ts +7 -0
- package/dist/frontend/lowering/symbol-methods.js +30 -0
- package/dist/frontend/lowering/symbol-methods.js.map +1 -0
- package/dist/frontend/lowering/text-decoder-encoding.d.ts +10 -0
- package/dist/frontend/lowering/text-decoder-encoding.js +77 -0
- package/dist/frontend/lowering/text-decoder-encoding.js.map +1 -0
- package/dist/frontend/lowering/text-decoder-encoding.test.d.ts +1 -0
- package/dist/frontend/lowering/text-decoder-encoding.test.js +38 -0
- package/dist/frontend/lowering/text-decoder-encoding.test.js.map +1 -0
- package/dist/frontend/lowering/union-narrow.d.ts +9 -0
- package/dist/frontend/lowering/union-narrow.js +59 -0
- package/dist/frontend/lowering/union-narrow.js.map +1 -0
- package/dist/frontend/lowering/union-narrow.test.d.ts +1 -0
- package/dist/frontend/lowering/union-narrow.test.js +72 -0
- package/dist/frontend/lowering/union-narrow.test.js.map +1 -0
- package/dist/frontend/lowering/union-retag.d.ts +43 -0
- package/dist/frontend/lowering/union-retag.js +259 -0
- package/dist/frontend/lowering/union-retag.js.map +1 -0
- package/dist/frontend/lowering/union-retag.test.d.ts +1 -0
- package/dist/frontend/lowering/union-retag.test.js +405 -0
- package/dist/frontend/lowering/union-retag.test.js.map +1 -0
- package/dist/frontend/lowering/unregistered-class-types.d.ts +14 -0
- package/dist/frontend/lowering/unregistered-class-types.js +94 -0
- package/dist/frontend/lowering/unregistered-class-types.js.map +1 -0
- package/dist/frontend/lowering/unregistered-class-types.test.d.ts +1 -0
- package/dist/frontend/lowering/unregistered-class-types.test.js +65 -0
- package/dist/frontend/lowering/unregistered-class-types.test.js.map +1 -0
- package/dist/frontend/lowering/width-lift.d.ts +40 -0
- package/dist/frontend/lowering/width-lift.js +2 -0
- package/dist/frontend/lowering/width-lift.js.map +1 -0
- package/dist/frontend/module-syntax.d.ts +58 -0
- package/dist/frontend/module-syntax.js +123 -0
- package/dist/frontend/module-syntax.js.map +1 -0
- package/dist/frontend/module-syntax.test.d.ts +1 -0
- package/dist/frontend/module-syntax.test.js +78 -0
- package/dist/frontend/module-syntax.test.js.map +1 -0
- package/dist/frontend/npm-fetch-analysis.d.ts +17 -0
- package/dist/frontend/npm-fetch-analysis.js +100 -0
- package/dist/frontend/npm-fetch-analysis.js.map +1 -0
- package/dist/frontend/npm-fetch-analysis.test.d.ts +1 -0
- package/dist/frontend/npm-fetch-analysis.test.js +107 -0
- package/dist/frontend/npm-fetch-analysis.test.js.map +1 -0
- package/dist/frontend/npm-fetch-node.d.ts +2 -0
- package/dist/frontend/npm-fetch-node.js +12 -0
- package/dist/frontend/npm-fetch-node.js.map +1 -0
- package/dist/frontend/npm-fetch-syntax.d.ts +6 -0
- package/dist/frontend/npm-fetch-syntax.js +207 -0
- package/dist/frontend/npm-fetch-syntax.js.map +1 -0
- package/dist/frontend/npm-node.d.ts +10 -0
- package/dist/frontend/npm-node.js +14 -0
- package/dist/frontend/npm-node.js.map +1 -0
- package/dist/frontend/npm-static-bundled-cjs.d.ts +8 -0
- package/dist/frontend/npm-static-bundled-cjs.js +236 -0
- package/dist/frontend/npm-static-bundled-cjs.js.map +1 -0
- package/dist/frontend/npm-static-bundled-cjs.test.d.ts +1 -0
- package/dist/frontend/npm-static-bundled-cjs.test.js +69 -0
- package/dist/frontend/npm-static-bundled-cjs.test.js.map +1 -0
- package/dist/frontend/npm-static-declaration-syntax.d.ts +57 -0
- package/dist/frontend/npm-static-declaration-syntax.js +944 -0
- package/dist/frontend/npm-static-declaration-syntax.js.map +1 -0
- package/dist/frontend/npm-static-declarations.d.ts +11 -39
- package/dist/frontend/npm-static-declarations.js +22 -561
- package/dist/frontend/npm-static-declarations.js.map +1 -1
- package/dist/frontend/npm-static-declarations.test.js +245 -6
- package/dist/frontend/npm-static-declarations.test.js.map +1 -1
- package/dist/frontend/npm-static-prune.d.ts +1 -1
- package/dist/frontend/npm-static-prune.js +5 -4
- package/dist/frontend/npm-static-prune.js.map +1 -1
- package/dist/frontend/npm-static-prune.test.js +1 -1
- package/dist/frontend/npm-static-prune.test.js.map +1 -1
- package/dist/frontend/npm-static-rewrite-host.d.ts +4 -0
- package/dist/frontend/npm-static-rewrite-host.js +179 -0
- package/dist/frontend/npm-static-rewrite-host.js.map +1 -0
- package/dist/frontend/npm-static-rewrite-syntax.d.ts +16 -0
- package/dist/frontend/npm-static-rewrite-syntax.js +905 -0
- package/dist/frontend/npm-static-rewrite-syntax.js.map +1 -0
- package/dist/frontend/npm-static-rewrite.d.ts +0 -5
- package/dist/frontend/npm-static-rewrite.js +2 -1079
- package/dist/frontend/npm-static-rewrite.js.map +1 -1
- package/dist/frontend/npm-static-subtyping.d.ts +5 -0
- package/dist/frontend/npm-static-subtyping.js +55 -0
- package/dist/frontend/npm-static-subtyping.js.map +1 -0
- package/dist/frontend/npm-static-subtyping.test.d.ts +1 -0
- package/dist/frontend/npm-static-subtyping.test.js +58 -0
- package/dist/frontend/npm-static-subtyping.test.js.map +1 -0
- package/dist/frontend/npm-static.d.ts +7 -15
- package/dist/frontend/npm-static.js +19 -28
- package/dist/frontend/npm-static.js.map +1 -1
- package/dist/frontend/npm.d.ts +8 -69
- package/dist/frontend/npm.js +21 -361
- package/dist/frontend/npm.js.map +1 -1
- package/dist/frontend/npm.test.js +2 -2
- package/dist/frontend/npm.test.js.map +1 -1
- package/dist/frontend/pipeline-native.d.ts +6 -0
- package/dist/frontend/pipeline-native.js +32 -0
- package/dist/frontend/pipeline-native.js.map +1 -0
- package/dist/frontend/pipeline.d.ts +54 -0
- package/dist/frontend/pipeline.js +382 -0
- package/dist/frontend/pipeline.js.map +1 -0
- package/dist/frontend/pipeline.test.d.ts +1 -0
- package/dist/frontend/pipeline.test.js +77 -0
- package/dist/frontend/pipeline.test.js.map +1 -0
- package/dist/frontend/program-analysis.d.ts +10 -0
- package/dist/frontend/program-analysis.js +14 -0
- package/dist/frontend/program-analysis.js.map +1 -0
- package/dist/frontend/program-node.d.ts +9 -0
- package/dist/frontend/program-node.js +48 -0
- package/dist/frontend/program-node.js.map +1 -0
- package/dist/frontend/program.d.ts +43 -19
- package/dist/frontend/program.js +556 -197
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/program.test.d.ts +1 -0
- package/dist/frontend/program.test.js +202 -0
- package/dist/frontend/program.test.js.map +1 -0
- package/dist/frontend/provenance-core.d.ts +9 -0
- package/dist/frontend/provenance-core.js +435 -0
- package/dist/frontend/provenance-core.js.map +1 -0
- package/dist/frontend/provenance.d.ts +0 -4
- package/dist/frontend/provenance.js +4 -459
- package/dist/frontend/provenance.js.map +1 -1
- package/dist/frontend/resolve.d.ts +3 -1
- package/dist/frontend/resolve.js +6 -3
- package/dist/frontend/resolve.js.map +1 -1
- package/dist/frontend/runtime-resolve.d.ts +4 -3
- package/dist/frontend/runtime-resolve.js +22 -18
- package/dist/frontend/runtime-resolve.js.map +1 -1
- package/dist/frontend/runtime-resolve.test.js +53 -0
- package/dist/frontend/runtime-resolve.test.js.map +1 -1
- package/dist/frontend/services-node.d.ts +5 -0
- package/dist/frontend/services-node.js +19 -0
- package/dist/frontend/services-node.js.map +1 -0
- package/dist/frontend/services-node.test.d.ts +1 -0
- package/dist/frontend/services-node.test.js +70 -0
- package/dist/frontend/services-node.test.js.map +1 -0
- package/dist/frontend/services.d.ts +44 -0
- package/dist/frontend/services.js +90 -0
- package/dist/frontend/services.js.map +1 -0
- package/dist/frontend/services.test.d.ts +1 -0
- package/dist/frontend/services.test.js +174 -0
- package/dist/frontend/services.test.js.map +1 -0
- package/dist/frontend/ts7/adapter.d.ts +3 -3
- package/dist/frontend/ts7/adapter.js +14 -31
- package/dist/frontend/ts7/adapter.js.map +1 -1
- package/dist/frontend/ts7/api.d.ts +16 -0
- package/dist/frontend/ts7/api.js +24 -0
- package/dist/frontend/ts7/api.js.map +1 -0
- package/dist/frontend/ts7/ast-bytes.d.ts +31 -0
- package/dist/frontend/ts7/ast-bytes.js +137 -0
- package/dist/frontend/ts7/ast-bytes.js.map +1 -0
- package/dist/frontend/ts7/ast-bytes.test.d.ts +1 -0
- package/dist/frontend/ts7/ast-bytes.test.js +73 -0
- package/dist/frontend/ts7/ast-bytes.test.js.map +1 -0
- package/dist/frontend/ts7/ast-guards.generated.d.ts +353 -0
- package/dist/frontend/ts7/ast-guards.generated.js +1951 -0
- package/dist/frontend/ts7/ast-guards.generated.js.map +1 -0
- package/dist/frontend/ts7/ast-guards.test.d.ts +1 -0
- package/dist/frontend/ts7/ast-guards.test.js +43 -0
- package/dist/frontend/ts7/ast-guards.test.js.map +1 -0
- package/dist/frontend/ts7/ast-node.d.ts +194 -0
- package/dist/frontend/ts7/ast-node.js +448 -0
- package/dist/frontend/ts7/ast-node.js.map +1 -0
- package/dist/frontend/ts7/ast-node.test.d.ts +1 -0
- package/dist/frontend/ts7/ast-node.test.js +266 -0
- package/dist/frontend/ts7/ast-node.test.js.map +1 -0
- package/dist/frontend/ts7/ast-schema.generated.d.ts +503 -0
- package/dist/frontend/ts7/ast-schema.generated.js +1446 -0
- package/dist/frontend/ts7/ast-schema.generated.js.map +1 -0
- package/dist/frontend/ts7/ast-text.d.ts +6 -0
- package/dist/frontend/ts7/ast-text.js +124 -0
- package/dist/frontend/ts7/ast-text.js.map +1 -0
- package/dist/frontend/ts7/ast-text.test.d.ts +1 -0
- package/dist/frontend/ts7/ast-text.test.js +38 -0
- package/dist/frontend/ts7/ast-text.test.js.map +1 -0
- package/dist/frontend/ts7/ast-tokens.generated.d.ts +2 -0
- package/dist/frontend/ts7/ast-tokens.generated.js +155 -0
- package/dist/frontend/ts7/ast-tokens.generated.js.map +1 -0
- package/dist/frontend/ts7/ast-types.d.ts +42 -0
- package/dist/frontend/ts7/ast-types.generated.d.ts +1615 -0
- package/dist/frontend/ts7/ast-types.generated.js +5 -0
- package/dist/frontend/ts7/ast-types.generated.js.map +1 -0
- package/dist/frontend/ts7/ast-types.js +3 -0
- package/dist/frontend/ts7/ast-types.js.map +1 -0
- package/dist/frontend/ts7/ast-wire.d.ts +58 -0
- package/dist/frontend/ts7/ast-wire.js +267 -0
- package/dist/frontend/ts7/ast-wire.js.map +1 -0
- package/dist/frontend/ts7/ast-wire.test.d.ts +1 -0
- package/dist/frontend/ts7/ast-wire.test.js +151 -0
- package/dist/frontend/ts7/ast-wire.test.js.map +1 -0
- package/dist/frontend/ts7/ast.d.ts +14 -14
- package/dist/frontend/ts7/ast.js +21 -15
- package/dist/frontend/ts7/ast.js.map +1 -1
- package/dist/frontend/ts7/census-check.js +1 -0
- package/dist/frontend/ts7/census-check.js.map +1 -1
- package/dist/frontend/ts7/checker-cache.d.ts +48 -0
- package/dist/frontend/ts7/checker-cache.js +92 -0
- package/dist/frontend/ts7/checker-cache.js.map +1 -0
- package/dist/frontend/ts7/checker.d.ts +19 -46
- package/dist/frontend/ts7/checker.js +231 -161
- package/dist/frontend/ts7/checker.js.map +1 -1
- package/dist/frontend/ts7/checker.test.d.ts +1 -0
- package/dist/frontend/ts7/checker.test.js +335 -0
- package/dist/frontend/ts7/checker.test.js.map +1 -0
- package/dist/frontend/ts7/enums.d.ts +4 -27
- package/dist/frontend/ts7/enums.generated.d.ts +878 -0
- package/dist/frontend/ts7/enums.generated.js +1313 -0
- package/dist/frontend/ts7/enums.generated.js.map +1 -0
- package/dist/frontend/ts7/enums.js +4 -45
- package/dist/frontend/ts7/enums.js.map +1 -1
- package/dist/frontend/ts7/enums.test.d.ts +1 -0
- package/dist/frontend/ts7/enums.test.js +48 -0
- package/dist/frontend/ts7/enums.test.js.map +1 -0
- package/dist/frontend/ts7/native-api.d.ts +10 -0
- package/dist/frontend/ts7/native-api.js +10 -0
- package/dist/frontend/ts7/native-api.js.map +1 -0
- package/dist/frontend/ts7/native-host.d.ts +2 -0
- package/dist/frontend/ts7/native-host.js +11 -0
- package/dist/frontend/ts7/native-host.js.map +1 -0
- package/dist/frontend/ts7/native-process.d.ts +14 -0
- package/dist/frontend/ts7/native-process.js +62 -0
- package/dist/frontend/ts7/native-process.js.map +1 -0
- package/dist/frontend/ts7/program-adapter.d.ts +10 -98
- package/dist/frontend/ts7/program-adapter.js +16 -310
- package/dist/frontend/ts7/program-adapter.js.map +1 -1
- package/dist/frontend/ts7/program-host.d.ts +115 -0
- package/dist/frontend/ts7/program-host.js +347 -0
- package/dist/frontend/ts7/program-host.js.map +1 -0
- package/dist/frontend/ts7/program-host.test.d.ts +1 -0
- package/dist/frontend/ts7/program-host.test.js +207 -0
- package/dist/frontend/ts7/program-host.test.js.map +1 -0
- package/dist/frontend/ts7/rpc-api.d.ts +12 -0
- package/dist/frontend/ts7/rpc-api.js +23 -0
- package/dist/frontend/ts7/rpc-api.js.map +1 -0
- package/dist/frontend/ts7/rpc-client.d.ts +27 -0
- package/dist/frontend/ts7/rpc-client.js +102 -0
- package/dist/frontend/ts7/rpc-client.js.map +1 -0
- package/dist/frontend/ts7/rpc-client.test.d.ts +1 -0
- package/dist/frontend/ts7/rpc-client.test.js +133 -0
- package/dist/frontend/ts7/rpc-client.test.js.map +1 -0
- package/dist/frontend/ts7/rpc-filesystem.d.ts +16 -0
- package/dist/frontend/ts7/rpc-filesystem.js +42 -0
- package/dist/frontend/ts7/rpc-filesystem.js.map +1 -0
- package/dist/frontend/ts7/rpc-filesystem.test.d.ts +1 -0
- package/dist/frontend/ts7/rpc-filesystem.test.js +89 -0
- package/dist/frontend/ts7/rpc-filesystem.test.js.map +1 -0
- package/dist/frontend/ts7/rpc-process.d.ts +2 -0
- package/dist/frontend/ts7/rpc-process.js +148 -0
- package/dist/frontend/ts7/rpc-process.js.map +1 -0
- package/dist/frontend/ts7/rpc-process.test.d.ts +1 -0
- package/dist/frontend/ts7/rpc-process.test.js +29 -0
- package/dist/frontend/ts7/rpc-process.test.js.map +1 -0
- package/dist/frontend/ts7/rpc-wire.d.ts +46 -0
- package/dist/frontend/ts7/rpc-wire.js +195 -0
- package/dist/frontend/ts7/rpc-wire.js.map +1 -0
- package/dist/frontend/ts7/rpc-wire.test.d.ts +1 -0
- package/dist/frontend/ts7/rpc-wire.test.js +168 -0
- package/dist/frontend/ts7/rpc-wire.test.js.map +1 -0
- package/dist/frontend/ts7/semantic-checker.d.ts +137 -0
- package/dist/frontend/ts7/semantic-checker.js +221 -0
- package/dist/frontend/ts7/semantic-checker.js.map +1 -0
- package/dist/frontend/ts7/semantic-checker.test.d.ts +1 -0
- package/dist/frontend/ts7/semantic-checker.test.js +119 -0
- package/dist/frontend/ts7/semantic-checker.test.js.map +1 -0
- package/dist/frontend/ts7/semantic-json.d.ts +5 -0
- package/dist/frontend/ts7/semantic-json.js +52 -0
- package/dist/frontend/ts7/semantic-json.js.map +1 -0
- package/dist/frontend/ts7/semantic-json.test.d.ts +1 -0
- package/dist/frontend/ts7/semantic-json.test.js +42 -0
- package/dist/frontend/ts7/semantic-json.test.js.map +1 -0
- package/dist/frontend/ts7/semantic-model.d.ts +222 -0
- package/dist/frontend/ts7/semantic-model.js +423 -0
- package/dist/frontend/ts7/semantic-model.js.map +1 -0
- package/dist/frontend/ts7/semantic-model.test.d.ts +1 -0
- package/dist/frontend/ts7/semantic-model.test.js +322 -0
- package/dist/frontend/ts7/semantic-model.test.js.map +1 -0
- package/dist/frontend/ts7/semantic-schema.generated.d.ts +283 -0
- package/dist/frontend/ts7/semantic-schema.generated.js +222 -0
- package/dist/frontend/ts7/semantic-schema.generated.js.map +1 -0
- package/dist/frontend/ts7/semantic-types.d.ts +5 -0
- package/dist/frontend/ts7/semantic-types.js +2 -0
- package/dist/frontend/ts7/semantic-types.js.map +1 -0
- package/dist/frontend/ts7/session-cache.d.ts +17 -0
- package/dist/frontend/ts7/session-cache.js +97 -0
- package/dist/frontend/ts7/session-cache.js.map +1 -0
- package/dist/frontend/ts7/session-cache.test.d.ts +1 -0
- package/dist/frontend/ts7/session-cache.test.js +87 -0
- package/dist/frontend/ts7/session-cache.test.js.map +1 -0
- package/dist/frontend/ts7/session-path.d.ts +18 -0
- package/dist/frontend/ts7/session-path.js +203 -0
- package/dist/frontend/ts7/session-path.js.map +1 -0
- package/dist/frontend/ts7/session-path.test.d.ts +1 -0
- package/dist/frontend/ts7/session-path.test.js +34 -0
- package/dist/frontend/ts7/session-path.test.js.map +1 -0
- package/dist/frontend/ts7/session-schema.generated.d.ts +167 -0
- package/dist/frontend/ts7/session-schema.generated.js +5 -0
- package/dist/frontend/ts7/session-schema.generated.js.map +1 -0
- package/dist/frontend/ts7/session-timing.d.ts +50 -0
- package/dist/frontend/ts7/session-timing.js +61 -0
- package/dist/frontend/ts7/session-timing.js.map +1 -0
- package/dist/frontend/ts7/session-timing.test.d.ts +1 -0
- package/dist/frontend/ts7/session-timing.test.js +52 -0
- package/dist/frontend/ts7/session-timing.test.js.map +1 -0
- package/dist/frontend/ts7/session.d.ts +105 -0
- package/dist/frontend/ts7/session.js +233 -0
- package/dist/frontend/ts7/session.js.map +1 -0
- package/dist/frontend/ts7/session.test.d.ts +1 -0
- package/dist/frontend/ts7/session.test.js +215 -0
- package/dist/frontend/ts7/session.test.js.map +1 -0
- package/dist/frontend/ts7/source-parser-node.d.ts +6 -0
- package/dist/frontend/ts7/source-parser-node.js +15 -0
- package/dist/frontend/ts7/source-parser-node.js.map +1 -0
- package/dist/frontend/ts7/source-parser.d.ts +25 -0
- package/dist/frontend/ts7/source-parser.js +96 -0
- package/dist/frontend/ts7/source-parser.js.map +1 -0
- package/dist/frontend/ts7/source-parser.test.d.ts +1 -0
- package/dist/frontend/ts7/source-parser.test.js +151 -0
- package/dist/frontend/ts7/source-parser.test.js.map +1 -0
- package/dist/frontend/ts7/syntax.d.ts +3 -0
- package/dist/frontend/ts7/syntax.js +4 -0
- package/dist/frontend/ts7/syntax.js.map +1 -0
- package/dist/frontend/tsc-codes.js +3 -0
- package/dist/frontend/tsc-codes.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +29 -19
- package/dist/frontend/type-mapper.js +713 -306
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/frontend/type-mapper.test.d.ts +1 -0
- package/dist/frontend/type-mapper.test.js +207 -0
- package/dist/frontend/type-mapper.test.js.map +1 -0
- package/dist/frontend/union-discriminants.d.ts +16 -0
- package/dist/frontend/union-discriminants.js +98 -0
- package/dist/frontend/union-discriminants.js.map +1 -0
- package/dist/frontend/union-discriminants.test.d.ts +1 -0
- package/dist/frontend/union-discriminants.test.js +182 -0
- package/dist/frontend/union-discriminants.test.js.map +1 -0
- package/dist/index.d.ts +7 -197
- package/dist/index.js +369 -1567
- package/dist/index.js.map +1 -1
- package/dist/ir/analysis.d.ts +16 -4
- package/dist/ir/analysis.js +25 -6
- package/dist/ir/analysis.js.map +1 -1
- package/dist/ir/analysis.test.js +15 -2
- package/dist/ir/analysis.test.js.map +1 -1
- package/dist/ir/constant-tables.js +67 -49
- package/dist/ir/constant-tables.js.map +1 -1
- package/dist/ir/constant-tables.test.js +1 -1
- package/dist/ir/control-flow.d.ts +6 -0
- package/dist/ir/control-flow.js +142 -0
- package/dist/ir/control-flow.js.map +1 -0
- package/dist/ir/control-flow.test.d.ts +1 -0
- package/dist/ir/control-flow.test.js +113 -0
- package/dist/ir/control-flow.test.js.map +1 -0
- package/dist/ir/integer-loops.js +7 -18
- package/dist/ir/integer-loops.js.map +1 -1
- package/dist/ir/integer-ranges.js +53 -27
- package/dist/ir/integer-ranges.js.map +1 -1
- package/dist/ir/ir.d.ts +309 -164
- package/dist/ir/ir.js +588 -879
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/ir.test.js +127 -1
- package/dist/ir/ir.test.js.map +1 -1
- package/dist/ir/scalar-records.js +165 -134
- package/dist/ir/scalar-records.js.map +1 -1
- package/dist/ir/scalar-records.test.js +1 -1
- package/dist/ir/serialize.d.ts +4 -2
- package/dist/ir/serialize.js +19 -12
- package/dist/ir/serialize.js.map +1 -1
- package/dist/ir/serialize.test.d.ts +1 -0
- package/dist/ir/serialize.test.js +53 -0
- package/dist/ir/serialize.test.js.map +1 -0
- package/dist/ir/traverse.d.ts +41 -0
- package/dist/ir/traverse.js +660 -0
- package/dist/ir/traverse.js.map +1 -0
- package/dist/ir/traverse.test.d.ts +1 -0
- package/dist/ir/traverse.test.js +242 -0
- package/dist/ir/traverse.test.js.map +1 -0
- package/dist/ir/validate.js +1956 -1496
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +476 -2
- package/dist/ir/validate.test.js.map +1 -1
- package/dist/library/cache-primitives.d.ts +2 -3
- package/dist/library/cache-primitives.js +4 -6
- package/dist/library/cache-primitives.js.map +1 -1
- package/dist/library/compiler-self-identity.d.ts +1 -1
- package/dist/library/compiler-self-identity.js +31 -15
- package/dist/library/compiler-self-identity.js.map +1 -1
- package/dist/library/compiler-self-identity.test.d.ts +1 -0
- package/dist/library/compiler-self-identity.test.js +93 -0
- package/dist/library/compiler-self-identity.test.js.map +1 -0
- package/dist/library/fence-eval.js +2 -2
- package/dist/library/fence-eval.js.map +1 -1
- package/dist/library/int-infer.js +7 -6
- package/dist/library/int-infer.js.map +1 -1
- package/dist/library/int-infer.test.js +4 -4
- package/dist/library/library-cache.d.ts +3 -2
- package/dist/library/library-cache.js +5 -17
- package/dist/library/library-cache.js.map +1 -1
- package/dist/library/library-cache.test.js +54 -41
- package/dist/library/library-cache.test.js.map +1 -1
- package/dist/library/library-profile.d.ts +3 -1
- package/dist/library/library-profile.js +15 -6
- package/dist/library/library-profile.js.map +1 -1
- package/dist/library/prepare.d.ts +15 -0
- package/dist/library/prepare.js +584 -0
- package/dist/library/prepare.js.map +1 -0
- package/dist/library/semantic-source.d.ts +1 -1
- package/dist/library/semantic-source.js +8 -6
- package/dist/library/semantic-source.js.map +1 -1
- package/dist/library/sidecar-validate.js +4 -4
- package/dist/library/sidecar-validate.js.map +1 -1
- package/dist/library/sidecar.d.ts +2 -0
- package/dist/library/sidecar.js +10 -3
- package/dist/library/sidecar.js.map +1 -1
- package/dist/native/cache.d.ts +11 -0
- package/dist/native/cache.js +113 -0
- package/dist/native/cache.js.map +1 -0
- package/dist/native/cache.test.d.ts +1 -0
- package/dist/native/cache.test.js +66 -0
- package/dist/native/cache.test.js.map +1 -0
- package/dist/native/cli.d.ts +1 -0
- package/dist/native/cli.js +112 -0
- package/dist/native/cli.js.map +1 -0
- package/dist/native/compiler.d.ts +15 -0
- package/dist/native/compiler.js +336 -0
- package/dist/native/compiler.js.map +1 -0
- package/dist/native/compiler.test.d.ts +1 -0
- package/dist/native/compiler.test.js +174 -0
- package/dist/native/compiler.test.js.map +1 -0
- package/dist/native/comptime.d.ts +5 -0
- package/dist/native/comptime.js +73 -0
- package/dist/native/comptime.js.map +1 -0
- package/dist/native/comptime.test.d.ts +1 -0
- package/dist/native/comptime.test.js +65 -0
- package/dist/native/comptime.test.js.map +1 -0
- package/dist/native/executable-cache.d.ts +26 -0
- package/dist/native/executable-cache.js +228 -0
- package/dist/native/executable-cache.js.map +1 -0
- package/dist/native/executable-cache.test.d.ts +1 -0
- package/dist/native/executable-cache.test.js +151 -0
- package/dist/native/executable-cache.test.js.map +1 -0
- package/dist/native/file-identity.d.ts +4 -0
- package/dist/native/file-identity.js +14 -0
- package/dist/native/file-identity.js.map +1 -0
- package/dist/native/file-identity.test.d.ts +1 -0
- package/dist/native/file-identity.test.js +43 -0
- package/dist/native/file-identity.test.js.map +1 -0
- package/dist/native/library.d.ts +22 -0
- package/dist/native/library.js +83 -0
- package/dist/native/library.js.map +1 -0
- package/dist/native/prepare.d.ts +21 -0
- package/dist/native/prepare.js +174 -0
- package/dist/native/prepare.js.map +1 -0
- package/dist/native/prepare.test.d.ts +1 -0
- package/dist/native/prepare.test.js +70 -0
- package/dist/native/prepare.test.js.map +1 -0
- package/dist/native/sanitizer.d.ts +11 -0
- package/dist/native/sanitizer.js +135 -0
- package/dist/native/sanitizer.js.map +1 -0
- package/dist/native/sanitizer.test.d.ts +1 -0
- package/dist/native/sanitizer.test.js +58 -0
- package/dist/native/sanitizer.test.js.map +1 -0
- package/dist/native/task.d.ts +4 -0
- package/dist/native/task.js +16 -0
- package/dist/native/task.js.map +1 -0
- package/dist/native/task.test.d.ts +1 -0
- package/dist/native/task.test.js +17 -0
- package/dist/native/task.test.js.map +1 -0
- package/dist/native/toolchain.d.ts +45 -0
- package/dist/native/toolchain.js +74 -0
- package/dist/native/toolchain.js.map +1 -0
- package/dist/native/toolchain.test.d.ts +1 -0
- package/dist/native/toolchain.test.js +33 -0
- package/dist/native/toolchain.test.js.map +1 -0
- package/dist/startup-cache.d.ts +1 -1
- package/dist/startup-cache.js +2 -5
- package/dist/startup-cache.js.map +1 -1
- package/dist/timing.d.ts +4 -0
- package/dist/timing.js +19 -0
- package/dist/timing.js.map +1 -0
- package/dist/wasi-paths.js +10 -7
- package/dist/wasi-paths.js.map +1 -1
- package/package.json +28 -19
- package/surface-manifest.json +171 -18
- package/dist/backend/c/async.d.ts +0 -171
- package/dist/backend/c/async.js +0 -1317
- package/dist/backend/c/async.js.map +0 -1
- package/dist/backend/c/c-emitter.d.ts +0 -531
- package/dist/backend/c/c-emitter.js +0 -1917
- package/dist/backend/c/c-emitter.js.map +0 -1
- package/dist/backend/c/exprs.d.ts +0 -15
- package/dist/backend/c/exprs.js +0 -8803
- package/dist/backend/c/exprs.js.map +0 -1
- package/dist/backend/c/island.d.ts +0 -45
- package/dist/backend/c/island.js +0 -281
- package/dist/backend/c/island.js.map +0 -1
- package/dist/backend/c/may-throw.js.map +0 -1
- package/dist/backend/c/shapes.d.ts +0 -142
- package/dist/backend/c/shapes.js +0 -603
- package/dist/backend/c/shapes.js.map +0 -1
- package/dist/backend/c/stmts.d.ts +0 -76
- package/dist/backend/c/stmts.js +0 -1084
- package/dist/backend/c/stmts.js.map +0 -1
- package/dist/backend/c/types.d.ts +0 -71
- package/dist/backend/c/types.js +0 -459
- package/dist/backend/c/types.js.map +0 -1
- package/dist/backend/c/types.test.js +0 -32
- package/dist/backend/c/types.test.js.map +0 -1
- package/dist/backend/c/walkers.d.ts +0 -134
- package/dist/backend/c/walkers.js +0 -1773
- package/dist/backend/c/walkers.js.map +0 -1
- /package/dist/backend/{c/types.test.d.ts → cycle-analysis.test.d.ts} +0 -0
|
@@ -1,1082 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
* shapes. A bundler-emitted CJS dist exports through runtime plumbing the
|
|
3
|
-
* checker cannot model — the `__export(target, { name: () => value, ... })`
|
|
4
|
-
* getter table behind `module.exports = __toCommonJS(target)`, the
|
|
5
|
-
* `Object.defineProperty(exports, 'n', { get })` family, and the
|
|
6
|
-
* transpiler star re-exports (`__exportStar(require('./x'), exports)`,
|
|
7
|
-
* `__reExport(target, require('./x'), module.exports)`). Node's CJS lexer
|
|
8
|
-
* SEES those named exports (cjs-lexer.ts mirrors it exactly), so named
|
|
9
|
-
* imports link under Node — but the inferred surface the opted-in
|
|
10
|
-
* resolution feeds the checker is an opaque object, and every import site
|
|
11
|
-
* reports "X has no exported member" (the SC0001 storm that used to gate
|
|
12
|
-
* the whole build).
|
|
13
|
-
*
|
|
14
|
-
* THE REWRITE. For an opted-in package's CJS file whose exports come from
|
|
15
|
-
* these shapes, the fs shadow (npm-static.ts) serves BOTH worlds — the
|
|
16
|
-
* checker and the lowering ride one program — a text rewrite that spells
|
|
17
|
-
* the same export surface in the plain CJS the whole existing machinery
|
|
18
|
-
* already models:
|
|
19
|
-
*
|
|
20
|
-
* - the recognized plumbing statements are SPACE-PADDED in place
|
|
21
|
-
* (newlines kept, so every original line/offset survives): the
|
|
22
|
-
* `module.exports = __toCommonJS(target)` assignment, the
|
|
23
|
-
* `__export(target, {...})` call, the star-pattern calls, the
|
|
24
|
-
* recognized defineProperty exports, and the dead esbuild annotation
|
|
25
|
-
* `0 && (module.exports = {...})` (left live it poisons the checker's
|
|
26
|
-
* alias resolution — multiple module.exports assignments make import
|
|
27
|
-
* aliases land on properties no lowering path resolves);
|
|
28
|
-
* - one canonical export table is APPENDED at the tail:
|
|
29
|
-
* `module.exports = { ...require("./star"), own: local, ... };`
|
|
30
|
-
* Each getter body the chase can follow types the export by its
|
|
31
|
-
* resolved VALUE (`() => localBinding` resolves to the binding's
|
|
32
|
-
* inferred type; member chains and scalar literals hoist to a tail
|
|
33
|
-
* const first), and every lexer-visible name the chase cannot follow
|
|
34
|
-
* falls back to a checked-dynamic `any` binding (value undefined —
|
|
35
|
-
* exactly what Node's import binds for a lexer-visible name the
|
|
36
|
-
* runtime export object never carries).
|
|
37
|
-
*
|
|
38
|
-
* LEXER PARITY IS THE CONTRACT: the rewritten text must answer the SAME
|
|
39
|
-
* name set to cjs-lexer.ts that the original answers to Node — named
|
|
40
|
-
* imports must link exactly where Node's would. The table is formatted
|
|
41
|
-
* for merve's byte rules (`name: IDENT,` — value ident runs directly
|
|
42
|
-
* followed by ','), star re-exports ride spread entries (recorded as
|
|
43
|
-
* reexports and resolved recursively, exactly Node's union), and the
|
|
44
|
-
* esbuild `__esModule: !0` marker is spelled as a deliberate SCAN STOPPER
|
|
45
|
-
* so it stays lexer-invisible (Node never lexes __esModule out of
|
|
46
|
-
* __toCommonJS) while member-access star entries after it are covered by
|
|
47
|
-
* the spread records.
|
|
48
|
-
*
|
|
49
|
-
* SNAPSHOT SEMANTICS (the documented divergence): the getter table reads
|
|
50
|
-
* its locals LIVE at every access; the canonical table captures values
|
|
51
|
-
* ONCE, at module tail — after every top-level statement ran, so ordinary
|
|
52
|
-
* modules see identical values, and only post-evaluation reassignment of
|
|
53
|
-
* an exported local (the lazy-cache counter idiom) can diverge. Star
|
|
54
|
-
* re-export targets load at module tail instead of their original
|
|
55
|
-
* statement positions (visible only to load-order-sensitive side
|
|
56
|
-
* effects). Node's __esModule marker survives on the rewritten object.
|
|
57
|
-
*
|
|
58
|
-
* THE IMPORT-SIDE TWIN: the same pass erases esbuild's __toESM interop
|
|
59
|
-
* wrapper around EXTERNAL dependencies (`var import_x =
|
|
60
|
-
* __toESM(require("x"))`, the `, 1` node-mode variant, inline
|
|
61
|
-
* member-accessed forms) — see the section header at planToEsmInterop.
|
|
62
|
-
* The wrapper pads down to the bare require it wraps and module-valued
|
|
63
|
-
* `.default` accesses pad down to their binding, so member accesses model
|
|
64
|
-
* on the required package's canonical table through the ordinary require
|
|
65
|
-
* machinery. Interop the recognizers cannot finish answers `{ degrade }`:
|
|
66
|
-
* the caller reports the package as an offender (naming the construct)
|
|
67
|
-
* and it serves from the island — never a failed build.
|
|
68
|
-
*
|
|
69
|
-
* Everything here is SYNTACTIC (typescript5 world, the cjs-lexer's
|
|
70
|
-
* sanctioned island): the chase decides only what TEXT to emit — the
|
|
71
|
-
* checker then infers the types from the emitted spellings. A file whose
|
|
72
|
-
* export mechanism the recognizers cannot fully account for is left
|
|
73
|
-
* untouched (null): its import-site errors stay, and the frontend's
|
|
74
|
-
* offender attribution degrades the PACKAGE to the island with a note. */
|
|
75
|
-
import { dirname, join, resolve as resolvePath } from "node:path";
|
|
76
|
-
import ts from "typescript5";
|
|
77
|
-
import { bareRequireSpecOf, cjsLexedExportsOf, cjsLexerVisibleNames, isExportsIdent, isModuleExports } from "./cjs-lexer.js";
|
|
78
|
-
import { trackedDirectoryExists, trackedFileExists, trackedReadFile } from "./input-tracker.js";
|
|
79
|
-
import { resolveExports } from "./resolve.js";
|
|
80
|
-
import { packageNameOfSpecifier } from "./workspace-registry.js";
|
|
81
|
-
const NODE_REQUIRE_CONDITIONS = new Set(["require", "node", "default"]);
|
|
82
|
-
/** The last NAME of a callee: bare identifier or any member chain's final
|
|
83
|
-
* name (`tslib_1.__exportStar` → "__exportStar"). */
|
|
84
|
-
function calleeNameOf(call) {
|
|
85
|
-
const callee = call.expression;
|
|
86
|
-
if (ts.isIdentifier(callee))
|
|
87
|
-
return callee.text;
|
|
88
|
-
if (ts.isPropertyAccessExpression(callee) && ts.isIdentifier(callee.name))
|
|
89
|
-
return callee.name.text;
|
|
90
|
-
return null;
|
|
91
|
-
}
|
|
92
|
-
/** A chaseable getter/descriptor VALUE: a plain identifier, an
|
|
93
|
-
* identifier-rooted member/element chain (string keys only), or a scalar
|
|
94
|
-
* literal. Answers the classification or null (not chaseable). */
|
|
95
|
-
function chaseValue(e) {
|
|
96
|
-
let cur = e;
|
|
97
|
-
while (ts.isParenthesizedExpression(cur))
|
|
98
|
-
cur = cur.expression;
|
|
99
|
-
if (ts.isIdentifier(cur))
|
|
100
|
-
return { kind: "ident", text: cur.text };
|
|
101
|
-
if (ts.isNumericLiteral(cur) ||
|
|
102
|
-
ts.isStringLiteral(cur) ||
|
|
103
|
-
ts.isNoSubstitutionTemplateLiteral(cur) ||
|
|
104
|
-
cur.kind === ts.SyntaxKind.TrueKeyword ||
|
|
105
|
-
cur.kind === ts.SyntaxKind.FalseKeyword ||
|
|
106
|
-
cur.kind === ts.SyntaxKind.NullKeyword) {
|
|
107
|
-
return { kind: "hoist", text: cur.getText() };
|
|
108
|
-
}
|
|
109
|
-
// ident-rooted member chains: this.x / a.b.c / a["k"].d — side-effect
|
|
110
|
-
// free reads the tail const can evaluate once.
|
|
111
|
-
let walk = cur;
|
|
112
|
-
while ((ts.isPropertyAccessExpression(walk) && walk.questionDotToken === undefined && ts.isIdentifier(walk.name)) ||
|
|
113
|
-
(ts.isElementAccessExpression(walk) && walk.questionDotToken === undefined && ts.isStringLiteral(walk.argumentExpression))) {
|
|
114
|
-
walk = walk.expression;
|
|
115
|
-
}
|
|
116
|
-
if (ts.isIdentifier(walk))
|
|
117
|
-
return { kind: "hoist", text: cur.getText() };
|
|
118
|
-
return null;
|
|
119
|
-
}
|
|
120
|
-
/** The getter body's returned expression for the two descriptor getter
|
|
121
|
-
* spellings (`get() { return X }` / `get: function () { return X }`) and
|
|
122
|
-
* the arrow forms the esbuild table uses (`() => X`, `() => { return X }`). */
|
|
123
|
-
function getterReturnOf(fn) {
|
|
124
|
-
let body;
|
|
125
|
-
if (ts.isArrowFunction(fn) && fn.parameters.length === 0)
|
|
126
|
-
body = fn.body;
|
|
127
|
-
else if (ts.isFunctionExpression(fn) && fn.parameters.length === 0)
|
|
128
|
-
body = fn.body;
|
|
129
|
-
else if (ts.isMethodDeclaration(fn) && fn.parameters.length === 0 && fn.body !== undefined)
|
|
130
|
-
body = fn.body;
|
|
131
|
-
else
|
|
132
|
-
return null;
|
|
133
|
-
if (body === undefined)
|
|
134
|
-
return null;
|
|
135
|
-
if (!ts.isBlock(body))
|
|
136
|
-
return body; // expression-bodied arrow
|
|
137
|
-
if (body.statements.length !== 1)
|
|
138
|
-
return null;
|
|
139
|
-
const ret = body.statements[0];
|
|
140
|
-
return ts.isReturnStatement(ret) && ret.expression !== undefined ? ret.expression : null;
|
|
141
|
-
}
|
|
142
|
-
/** The `__export(IDENT, { name: () => value, ... })` call's parts, or null.
|
|
143
|
-
* Every property must be a `name: <function>` assignment (identifier or
|
|
144
|
-
* string-literal name) — anything else is not the esbuild table. */
|
|
145
|
-
function exportCallOf(call) {
|
|
146
|
-
if (calleeNameOf(call) !== "__export")
|
|
147
|
-
return null;
|
|
148
|
-
if (call.arguments.length !== 2)
|
|
149
|
-
return null;
|
|
150
|
-
const [target, table] = call.arguments;
|
|
151
|
-
if (!ts.isIdentifier(target) || !ts.isObjectLiteralExpression(table))
|
|
152
|
-
return null;
|
|
153
|
-
const entries = [];
|
|
154
|
-
for (const prop of table.properties) {
|
|
155
|
-
if (!ts.isPropertyAssignment(prop))
|
|
156
|
-
return null;
|
|
157
|
-
let name;
|
|
158
|
-
if (ts.isIdentifier(prop.name))
|
|
159
|
-
name = prop.name.text;
|
|
160
|
-
else if (ts.isStringLiteral(prop.name))
|
|
161
|
-
name = prop.name.text;
|
|
162
|
-
else
|
|
163
|
-
return null;
|
|
164
|
-
entries.push([name, getterReturnOf(prop.initializer)]);
|
|
165
|
-
}
|
|
166
|
-
return { target: target.text, entries };
|
|
167
|
-
}
|
|
168
|
-
/** `Object.defineProperty(exports|module.exports, 'name', {...})` — the
|
|
169
|
-
* name plus the chased descriptor value (getter return or `value:`), or
|
|
170
|
-
* null when the statement is not that shape at all. `value: null` means
|
|
171
|
-
* recognized but unchaseable. */
|
|
172
|
-
function definePropertyExportOf(call) {
|
|
173
|
-
const callee = call.expression;
|
|
174
|
-
if (!ts.isPropertyAccessExpression(callee) ||
|
|
175
|
-
!ts.isIdentifier(callee.expression) ||
|
|
176
|
-
callee.expression.text !== "Object" ||
|
|
177
|
-
!ts.isIdentifier(callee.name) ||
|
|
178
|
-
callee.name.text !== "defineProperty") {
|
|
179
|
-
return null;
|
|
180
|
-
}
|
|
181
|
-
if (call.arguments.length !== 3)
|
|
182
|
-
return null;
|
|
183
|
-
const [recv, nameArg, desc] = call.arguments;
|
|
184
|
-
if (!isExportsIdent(recv) && !isModuleExports(recv))
|
|
185
|
-
return null;
|
|
186
|
-
if (!ts.isStringLiteral(nameArg) || !ts.isObjectLiteralExpression(desc))
|
|
187
|
-
return null;
|
|
188
|
-
const name = nameArg.text;
|
|
189
|
-
let value = null;
|
|
190
|
-
for (const p of desc.properties) {
|
|
191
|
-
if (ts.isPropertyAssignment(p) && ts.isIdentifier(p.name)) {
|
|
192
|
-
if (p.name.text === "value")
|
|
193
|
-
value = p.initializer;
|
|
194
|
-
else if (p.name.text === "get")
|
|
195
|
-
value = getterReturnOf(p.initializer);
|
|
196
|
-
}
|
|
197
|
-
else if (ts.isMethodDeclaration(p) && ts.isIdentifier(p.name) && p.name.text === "get") {
|
|
198
|
-
value = getterReturnOf(p);
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
const esModuleStamp = name === "__esModule" && value !== null && value.kind === ts.SyntaxKind.TrueKeyword;
|
|
202
|
-
return { name, value, esModuleStamp };
|
|
203
|
-
}
|
|
204
|
-
/** Node's file-first CJS probes over an ABSOLUTE base (the dist-tree
|
|
205
|
-
* subset: exact, .js/.cjs, /index.js, package.json "main" for
|
|
206
|
-
* directories). */
|
|
207
|
-
function resolveCjsBase(base) {
|
|
208
|
-
const candidates = [base, `${base}.js`, `${base}.cjs`];
|
|
209
|
-
for (const c of candidates) {
|
|
210
|
-
if (trackedFileExists(c) && /\.(js|cjs)$/.test(c))
|
|
211
|
-
return c;
|
|
212
|
-
}
|
|
213
|
-
try {
|
|
214
|
-
if (trackedDirectoryExists(base)) {
|
|
215
|
-
const pkgPath = resolvePath(base, "package.json");
|
|
216
|
-
const pkgText = trackedReadFile(pkgPath);
|
|
217
|
-
if (pkgText !== null) {
|
|
218
|
-
const main = JSON.parse(pkgText).main;
|
|
219
|
-
if (typeof main === "string") {
|
|
220
|
-
const m = resolvePath(base, main);
|
|
221
|
-
for (const c of [m, `${m}.js`, `${m}.cjs`, resolvePath(m, "index.js")]) {
|
|
222
|
-
if (trackedFileExists(c) && /\.(js|cjs)$/.test(c))
|
|
223
|
-
return c;
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
const idx = resolvePath(base, "index.js");
|
|
228
|
-
if (trackedFileExists(idx))
|
|
229
|
-
return idx;
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
catch {
|
|
233
|
-
/* unresolved */
|
|
234
|
-
}
|
|
235
|
-
return null;
|
|
236
|
-
}
|
|
237
|
-
/** Resolves a RELATIVE CJS require target (resolveCjsBase over the
|
|
238
|
-
* importer-anchored path). Bare specifiers answer null — their names ride
|
|
239
|
-
* the spread entry and the program resolver. */
|
|
240
|
-
function resolveRelativeCjs(fromFile, spec) {
|
|
241
|
-
if (!spec.startsWith("./") && !spec.startsWith("../"))
|
|
242
|
-
return null;
|
|
243
|
-
return resolveCjsBase(resolvePath(dirname(fromFile), spec));
|
|
244
|
-
}
|
|
245
|
-
/** Resolves a BARE require target the way Node's CJS resolution would (the
|
|
246
|
-
* __toESM default-shape probe's subset): node_modules/<name> walked up from
|
|
247
|
-
* the requiring file, "exports" honored with the require condition, then
|
|
248
|
-
* main/index. Best-effort — null keeps the caller conservative. */
|
|
249
|
-
function resolveBareRequireCjs(fromFile, spec) {
|
|
250
|
-
if (spec.startsWith("#") || spec.startsWith("node:"))
|
|
251
|
-
return null;
|
|
252
|
-
const parts = spec.split("/");
|
|
253
|
-
const name = packageNameOfSpecifier(spec);
|
|
254
|
-
const subparts = spec.startsWith("@") ? parts.slice(2) : parts.slice(1);
|
|
255
|
-
const subpath = subparts.length > 0 ? `./${subparts.join("/")}` : ".";
|
|
256
|
-
for (let dir = dirname(fromFile);;) {
|
|
257
|
-
const pkgDir = join(dir, "node_modules", name);
|
|
258
|
-
try {
|
|
259
|
-
if (trackedDirectoryExists(pkgDir)) {
|
|
260
|
-
const pkgPath = join(pkgDir, "package.json");
|
|
261
|
-
let exports;
|
|
262
|
-
try {
|
|
263
|
-
const pkgText = trackedReadFile(pkgPath);
|
|
264
|
-
exports = pkgText === null
|
|
265
|
-
? undefined
|
|
266
|
-
: JSON.parse(pkgText).exports;
|
|
267
|
-
}
|
|
268
|
-
catch {
|
|
269
|
-
return null;
|
|
270
|
-
}
|
|
271
|
-
if (exports !== undefined) {
|
|
272
|
-
const target = resolveExports(exports, subpath, NODE_REQUIRE_CONDITIONS);
|
|
273
|
-
return target === null ? null : resolveCjsBase(join(pkgDir, target));
|
|
274
|
-
}
|
|
275
|
-
return resolveCjsBase(subpath === "." ? pkgDir : join(pkgDir, subpath));
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
catch {
|
|
279
|
-
return null;
|
|
280
|
-
}
|
|
281
|
-
const parent = dirname(dir);
|
|
282
|
-
if (parent === dir)
|
|
283
|
-
return null;
|
|
284
|
-
dir = parent;
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
/** Whether `require(spec)` from `fromFile` answers an object whose
|
|
288
|
-
* `__esModule` is TRUTHY at runtime under Node — the branch esbuild's
|
|
289
|
-
* __toESM takes to decide what `default` binds. True for the transpiled-ESM
|
|
290
|
-
* stamps (the lexer-visible `exports.__esModule =` / defineProperty forms,
|
|
291
|
-
* esbuild's own `module.exports = __toCommonJS(…)` where the stamp hides
|
|
292
|
-
* from the lexer inside the helper) and for real ES-module targets
|
|
293
|
-
* (require(esm) marks the namespace for interop); `module.exports =
|
|
294
|
-
* require(…)` forwarding chains follow. False (the CJS answer: `default`
|
|
295
|
-
* IS module.exports) everywhere else, unresolvable targets included —
|
|
296
|
-
* their require throws before `default` matters. */
|
|
297
|
-
function requireTargetEsModuleStamped(fromFile, spec, depth = 0) {
|
|
298
|
-
if (depth > 8)
|
|
299
|
-
return false;
|
|
300
|
-
const file = spec.startsWith("./") || spec.startsWith("../") || spec.startsWith("/")
|
|
301
|
-
? resolveCjsBase(spec.startsWith("/") ? spec : resolvePath(dirname(fromFile), spec))
|
|
302
|
-
: resolveBareRequireCjs(fromFile, spec);
|
|
303
|
-
if (file === null)
|
|
304
|
-
return false;
|
|
305
|
-
if (file.endsWith(".mjs"))
|
|
306
|
-
return true;
|
|
307
|
-
if (file.endsWith(".json"))
|
|
308
|
-
return false;
|
|
309
|
-
if (file.endsWith(".js")) {
|
|
310
|
-
// the nearest package.json "type" decides the .js format
|
|
311
|
-
for (let dir = dirname(file);;) {
|
|
312
|
-
const pkgPath = join(dir, "package.json");
|
|
313
|
-
const pkgText = trackedReadFile(pkgPath);
|
|
314
|
-
if (pkgText !== null) {
|
|
315
|
-
try {
|
|
316
|
-
if (JSON.parse(pkgText).type === "module")
|
|
317
|
-
return true;
|
|
318
|
-
}
|
|
319
|
-
catch {
|
|
320
|
-
/* unreadable — treat as CJS */
|
|
321
|
-
}
|
|
322
|
-
break;
|
|
323
|
-
}
|
|
324
|
-
const parent = dirname(dir);
|
|
325
|
-
if (parent === dir)
|
|
326
|
-
break;
|
|
327
|
-
dir = parent;
|
|
328
|
-
}
|
|
329
|
-
}
|
|
330
|
-
const src = trackedReadFile(file);
|
|
331
|
-
if (src === null)
|
|
332
|
-
return false;
|
|
333
|
-
try {
|
|
334
|
-
if (cjsLexedExportsOf(src, file).exports.has("__esModule"))
|
|
335
|
-
return true;
|
|
336
|
-
}
|
|
337
|
-
catch {
|
|
338
|
-
/* unlexable — keep probing */
|
|
339
|
-
}
|
|
340
|
-
if (src.includes("__toCommonJS("))
|
|
341
|
-
return true;
|
|
342
|
-
const fwd = /module\.exports\s*=\s*require\(\s*["']([^"']+)["']\s*\)/.exec(src);
|
|
343
|
-
if (fwd !== null)
|
|
344
|
-
return requireTargetEsModuleStamped(file, fwd[1], depth + 1);
|
|
345
|
-
return false;
|
|
346
|
-
}
|
|
347
|
-
/** The Node-visible named-export set of a star-re-export TARGET file:
|
|
348
|
-
* its recursive lexer-visible names (relative edges only — exactly what
|
|
349
|
-
* the emitted member entries must enumerate). */
|
|
350
|
-
function starTargetNames(file) {
|
|
351
|
-
try {
|
|
352
|
-
return cjsLexerVisibleNames(file, (f) => {
|
|
353
|
-
const source = trackedReadFile(f);
|
|
354
|
-
if (source === null)
|
|
355
|
-
throw new Error(`cannot read ${f}`);
|
|
356
|
-
return source;
|
|
357
|
-
}, (from, spec) => resolveRelativeCjs(from, spec));
|
|
358
|
-
}
|
|
359
|
-
catch {
|
|
360
|
-
return new Set();
|
|
361
|
-
}
|
|
362
|
-
}
|
|
363
|
-
/** Space-pads [start, end) of `text` preserving newlines — the recognized
|
|
364
|
-
* statement disappears while every original offset survives. */
|
|
365
|
-
function padSpan(text, start, end) {
|
|
366
|
-
let pad = "";
|
|
367
|
-
for (let i = start; i < end; i++)
|
|
368
|
-
pad += text[i] === "\n" ? "\n" : " ";
|
|
369
|
-
return text.slice(0, start) + pad + text.slice(end);
|
|
370
|
-
}
|
|
371
|
-
/** A valid identifier-run export name (the table can spell it bare). */
|
|
372
|
-
function isPlainName(name) {
|
|
373
|
-
return /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(name);
|
|
374
|
-
}
|
|
375
|
-
/** Structural recognition of esbuild's vendored __toESM helper:
|
|
376
|
-
* `var __toESM = (mod, isNodeMode, target) => (target = …, __copyProps(
|
|
377
|
-
* isNodeMode || !mod || !mod.__esModule
|
|
378
|
-
* ? __defProp(target, "default", { value: mod, enumerable: true })
|
|
379
|
-
* : target,
|
|
380
|
-
* mod))`
|
|
381
|
-
* — an arrow over (mod, isNodeMode[, target]) whose result is a
|
|
382
|
-
* __copyProps(…, mod) call copying onto a conditional that tests
|
|
383
|
-
* isNodeMode/__esModule and defines "default" with value mod. Comments and
|
|
384
|
-
* formatting are free; the SHAPE is the contract. */
|
|
385
|
-
function recognizedToEsmDecl(stmt) {
|
|
386
|
-
if (!ts.isVariableStatement(stmt))
|
|
387
|
-
return false;
|
|
388
|
-
const decls = stmt.declarationList.declarations;
|
|
389
|
-
if (decls.length !== 1)
|
|
390
|
-
return false;
|
|
391
|
-
const d = decls[0];
|
|
392
|
-
if (!ts.isIdentifier(d.name) || d.name.text !== "__toESM" || d.initializer === undefined)
|
|
393
|
-
return false;
|
|
394
|
-
let init = d.initializer;
|
|
395
|
-
while (ts.isParenthesizedExpression(init))
|
|
396
|
-
init = init.expression;
|
|
397
|
-
if (!ts.isArrowFunction(init))
|
|
398
|
-
return false;
|
|
399
|
-
if (init.parameters.length < 2 || init.parameters.length > 3)
|
|
400
|
-
return false;
|
|
401
|
-
const p0 = init.parameters[0];
|
|
402
|
-
const p1 = init.parameters[1];
|
|
403
|
-
if (!ts.isIdentifier(p0.name) || !ts.isIdentifier(p1.name))
|
|
404
|
-
return false;
|
|
405
|
-
const mod = p0.name.text;
|
|
406
|
-
const isNodeMode = p1.name.text;
|
|
407
|
-
if (ts.isBlock(init.body))
|
|
408
|
-
return false;
|
|
409
|
-
let expr = init.body;
|
|
410
|
-
while (ts.isParenthesizedExpression(expr))
|
|
411
|
-
expr = expr.expression;
|
|
412
|
-
// the rightmost comma operand carries the result
|
|
413
|
-
while (ts.isBinaryExpression(expr) && expr.operatorToken.kind === ts.SyntaxKind.CommaToken) {
|
|
414
|
-
expr = expr.right;
|
|
415
|
-
}
|
|
416
|
-
while (ts.isParenthesizedExpression(expr))
|
|
417
|
-
expr = expr.expression;
|
|
418
|
-
if (!ts.isCallExpression(expr) || !ts.isIdentifier(expr.expression) || expr.expression.text !== "__copyProps")
|
|
419
|
-
return false;
|
|
420
|
-
if (expr.arguments.length < 2)
|
|
421
|
-
return false;
|
|
422
|
-
const from = expr.arguments[1];
|
|
423
|
-
if (!ts.isIdentifier(from) || from.text !== mod)
|
|
424
|
-
return false;
|
|
425
|
-
let to = expr.arguments[0];
|
|
426
|
-
while (ts.isParenthesizedExpression(to))
|
|
427
|
-
to = to.expression;
|
|
428
|
-
if (!ts.isConditionalExpression(to))
|
|
429
|
-
return false;
|
|
430
|
-
const condText = to.condition.getText();
|
|
431
|
-
if (!condText.includes(isNodeMode) || !condText.includes("__esModule"))
|
|
432
|
-
return false;
|
|
433
|
-
let stamp = to.whenTrue;
|
|
434
|
-
while (ts.isParenthesizedExpression(stamp))
|
|
435
|
-
stamp = stamp.expression;
|
|
436
|
-
if (!ts.isCallExpression(stamp) || !ts.isIdentifier(stamp.expression) || stamp.expression.text !== "__defProp")
|
|
437
|
-
return false;
|
|
438
|
-
if (stamp.arguments.length !== 3)
|
|
439
|
-
return false;
|
|
440
|
-
const nameArg = stamp.arguments[1];
|
|
441
|
-
if (!ts.isStringLiteral(nameArg) || nameArg.text !== "default")
|
|
442
|
-
return false;
|
|
443
|
-
const desc = stamp.arguments[2];
|
|
444
|
-
if (!ts.isObjectLiteralExpression(desc))
|
|
445
|
-
return false;
|
|
446
|
-
return desc.properties.some((p) => ts.isPropertyAssignment(p) &&
|
|
447
|
-
ts.isIdentifier(p.name) &&
|
|
448
|
-
p.name.text === "value" &&
|
|
449
|
-
ts.isIdentifier(p.initializer) &&
|
|
450
|
-
p.initializer.text === mod);
|
|
451
|
-
}
|
|
452
|
-
const TO_ESM_SHAPE_DEGRADE = "its shipped JS calls the __toESM bundler-interop helper but spells it in a shape the " +
|
|
453
|
-
"recognizer cannot verify — the package serves from the island instead";
|
|
454
|
-
const TO_ESM_ESCAPE_DEGRADE = "a __toESM(require(…)) bundler-interop object escapes into a use the static rewrite cannot " +
|
|
455
|
-
"follow (only module-scope bindings and direct member reads compile) — the package serves " +
|
|
456
|
-
"from the island instead";
|
|
457
|
-
const TO_ESM_ARG_DEGRADE = "it calls the __toESM bundler-interop helper on something other than require(…) of a string " +
|
|
458
|
-
"literal — the package serves from the island instead";
|
|
459
|
-
const TO_ESM_MIXED_DEGRADE = "its bundler-emitted export surface cannot be respelled around its __toESM interop imports " +
|
|
460
|
-
"— the package serves from the island instead";
|
|
461
|
-
/** The interop-erasure plan for one CJS file (see the section header). */
|
|
462
|
-
function planToEsmInterop(sf) {
|
|
463
|
-
const pads = [];
|
|
464
|
-
const moduleBindings = new Set();
|
|
465
|
-
const plan = { pads, moduleBindings, degrade: null };
|
|
466
|
-
const fail = (reason) => ({ pads: [], moduleBindings: new Set(), degrade: reason });
|
|
467
|
-
const declStmts = sf.statements.filter((s) => ts.isVariableStatement(s) &&
|
|
468
|
-
s.declarationList.declarations.some((d) => ts.isIdentifier(d.name) && d.name.text === "__toESM"));
|
|
469
|
-
const refs = [];
|
|
470
|
-
const calls = [];
|
|
471
|
-
const collect = (n) => {
|
|
472
|
-
if (ts.isIdentifier(n) && n.text === "__toESM")
|
|
473
|
-
refs.push(n);
|
|
474
|
-
if (ts.isCallExpression(n) && ts.isIdentifier(n.expression) && n.expression.text === "__toESM")
|
|
475
|
-
calls.push(n);
|
|
476
|
-
ts.forEachChild(n, collect);
|
|
477
|
-
};
|
|
478
|
-
collect(sf);
|
|
479
|
-
if (calls.length === 0 && refs.length === 0)
|
|
480
|
-
return plan;
|
|
481
|
-
// Every reference must be the declarator's own name or a call's callee —
|
|
482
|
-
// a helper that escapes as a VALUE is outside the recognized shape.
|
|
483
|
-
const callees = new Set(calls.map((c) => c.expression));
|
|
484
|
-
const declNames = new Set();
|
|
485
|
-
for (const s of declStmts) {
|
|
486
|
-
for (const d of s.declarationList.declarations) {
|
|
487
|
-
if (ts.isIdentifier(d.name) && d.name.text === "__toESM")
|
|
488
|
-
declNames.add(d.name);
|
|
489
|
-
}
|
|
490
|
-
}
|
|
491
|
-
if (refs.some((r) => !callees.has(r) && !declNames.has(r)))
|
|
492
|
-
return fail(TO_ESM_ESCAPE_DEGRADE);
|
|
493
|
-
if (calls.length === 0)
|
|
494
|
-
return plan; // declared but never called — dead helper
|
|
495
|
-
if (declStmts.length !== 1 || !recognizedToEsmDecl(declStmts[0]))
|
|
496
|
-
return fail(TO_ESM_SHAPE_DEGRADE);
|
|
497
|
-
/** Module-scope interop bindings: name → whether `.default` IS the
|
|
498
|
-
* module (pad the access) rather than a member read of its `default`. */
|
|
499
|
-
const bindings = new Map();
|
|
500
|
-
for (const call of calls) {
|
|
501
|
-
const arg0 = call.arguments[0];
|
|
502
|
-
const spec = arg0 !== undefined ? bareRequireSpecOf(arg0) : null;
|
|
503
|
-
if (spec === null || call.arguments.length > 2)
|
|
504
|
-
return fail(TO_ESM_ARG_DEGRADE);
|
|
505
|
-
let isNodeMode = false;
|
|
506
|
-
if (call.arguments.length === 2) {
|
|
507
|
-
const modeArg = call.arguments[1];
|
|
508
|
-
if (ts.isNumericLiteral(modeArg))
|
|
509
|
-
isNodeMode = Number(modeArg.text) !== 0;
|
|
510
|
-
else if (modeArg.kind === ts.SyntaxKind.TrueKeyword)
|
|
511
|
-
isNodeMode = true;
|
|
512
|
-
else if (modeArg.kind === ts.SyntaxKind.FalseKeyword)
|
|
513
|
-
isNodeMode = false;
|
|
514
|
-
else
|
|
515
|
-
return fail(TO_ESM_ARG_DEGRADE);
|
|
516
|
-
}
|
|
517
|
-
const defaultIsModule = isNodeMode || !requireTargetEsModuleStamped(sf.fileName, spec);
|
|
518
|
-
// classify the call's use: a variable binding, or an immediate member
|
|
519
|
-
// read; anything else escapes.
|
|
520
|
-
let child = call;
|
|
521
|
-
let parent = call.parent;
|
|
522
|
-
while (ts.isParenthesizedExpression(parent)) {
|
|
523
|
-
child = parent;
|
|
524
|
-
parent = parent.parent;
|
|
525
|
-
}
|
|
526
|
-
if (ts.isVariableDeclaration(parent) && parent.initializer === child && ts.isIdentifier(parent.name)) {
|
|
527
|
-
if (bindings.has(parent.name.text))
|
|
528
|
-
return fail(TO_ESM_ESCAPE_DEGRADE);
|
|
529
|
-
bindings.set(parent.name.text, defaultIsModule);
|
|
530
|
-
if (defaultIsModule)
|
|
531
|
-
moduleBindings.add(parent.name.text);
|
|
532
|
-
}
|
|
533
|
-
else if (ts.isPropertyAccessExpression(parent) && parent.expression === child && ts.isIdentifier(parent.name)) {
|
|
534
|
-
if (parent.name.text === "default" && defaultIsModule) {
|
|
535
|
-
if (!readOnlyAccess(parent))
|
|
536
|
-
return fail(TO_ESM_ESCAPE_DEGRADE);
|
|
537
|
-
pads.push({ start: child.getEnd(), end: parent.getEnd() });
|
|
538
|
-
}
|
|
539
|
-
}
|
|
540
|
-
else {
|
|
541
|
-
return fail(TO_ESM_ESCAPE_DEGRADE);
|
|
542
|
-
}
|
|
543
|
-
// the wrapper itself: callee + '(' down, and everything after the
|
|
544
|
-
// require argument (`, 1` included) — the bare require survives at its
|
|
545
|
-
// original offsets.
|
|
546
|
-
pads.push({ start: call.getStart(sf), end: arg0.getStart(sf) });
|
|
547
|
-
pads.push({ start: arg0.getEnd(), end: call.getEnd() });
|
|
548
|
-
}
|
|
549
|
-
if (bindings.size > 0) {
|
|
550
|
-
// Binding safety: the erased binding must be declared exactly once and
|
|
551
|
-
// never written — the `.default` mapping below matches receivers by
|
|
552
|
-
// NAME (syntactic, like the rest of this file), so a shadow or a
|
|
553
|
-
// reassignment would silently change what a padded access reads.
|
|
554
|
-
const declCount = new Map();
|
|
555
|
-
const bump = (name) => {
|
|
556
|
-
if (bindings.has(name))
|
|
557
|
-
declCount.set(name, (declCount.get(name) ?? 0) + 1);
|
|
558
|
-
};
|
|
559
|
-
let violated = false;
|
|
560
|
-
const scan = (n) => {
|
|
561
|
-
if (violated)
|
|
562
|
-
return;
|
|
563
|
-
if ((ts.isVariableDeclaration(n) || ts.isBindingElement(n) || ts.isParameter(n)) &&
|
|
564
|
-
ts.isIdentifier(n.name)) {
|
|
565
|
-
bump(n.name.text);
|
|
566
|
-
}
|
|
567
|
-
else if ((ts.isFunctionDeclaration(n) || ts.isClassDeclaration(n)) && n.name !== undefined) {
|
|
568
|
-
bump(n.name.text);
|
|
569
|
-
}
|
|
570
|
-
else if (ts.isBinaryExpression(n) &&
|
|
571
|
-
n.operatorToken.kind >= ts.SyntaxKind.FirstAssignment &&
|
|
572
|
-
n.operatorToken.kind <= ts.SyntaxKind.LastAssignment &&
|
|
573
|
-
ts.isIdentifier(n.left) &&
|
|
574
|
-
bindings.has(n.left.text)) {
|
|
575
|
-
violated = true;
|
|
576
|
-
}
|
|
577
|
-
else if ((ts.isPrefixUnaryExpression(n) || ts.isPostfixUnaryExpression(n)) &&
|
|
578
|
-
(n.operator === ts.SyntaxKind.PlusPlusToken || n.operator === ts.SyntaxKind.MinusMinusToken) &&
|
|
579
|
-
ts.isIdentifier(n.operand) &&
|
|
580
|
-
bindings.has(n.operand.text)) {
|
|
581
|
-
violated = true;
|
|
582
|
-
}
|
|
583
|
-
ts.forEachChild(n, scan);
|
|
584
|
-
};
|
|
585
|
-
scan(sf);
|
|
586
|
-
if (violated || [...bindings.keys()].some((name) => (declCount.get(name) ?? 0) !== 1)) {
|
|
587
|
-
return fail(TO_ESM_ESCAPE_DEGRADE);
|
|
588
|
-
}
|
|
589
|
-
// `.default` reads on a module-valued binding pad down to the binding.
|
|
590
|
-
const padDefaults = (n) => {
|
|
591
|
-
if (ts.isPropertyAccessExpression(n) &&
|
|
592
|
-
ts.isIdentifier(n.expression) &&
|
|
593
|
-
bindings.get(n.expression.text) === true &&
|
|
594
|
-
ts.isIdentifier(n.name) &&
|
|
595
|
-
n.name.text === "default") {
|
|
596
|
-
if (!readOnlyAccess(n)) {
|
|
597
|
-
violated = true;
|
|
598
|
-
return;
|
|
599
|
-
}
|
|
600
|
-
pads.push({ start: n.expression.getEnd(), end: n.getEnd() });
|
|
601
|
-
}
|
|
602
|
-
ts.forEachChild(n, padDefaults);
|
|
603
|
-
};
|
|
604
|
-
padDefaults(sf);
|
|
605
|
-
if (violated)
|
|
606
|
-
return fail(TO_ESM_ESCAPE_DEGRADE);
|
|
607
|
-
}
|
|
608
|
-
return plan;
|
|
609
|
-
}
|
|
610
|
-
/** True when a padded-away `.default` access is a plain READ — an
|
|
611
|
-
* assignment target or delete operand cannot lose its member spelling. */
|
|
612
|
-
function readOnlyAccess(access) {
|
|
613
|
-
const p = access.parent;
|
|
614
|
-
if (p !== undefined && ts.isDeleteExpression(p))
|
|
615
|
-
return false;
|
|
616
|
-
if (p !== undefined &&
|
|
617
|
-
ts.isBinaryExpression(p) &&
|
|
618
|
-
p.left === access &&
|
|
619
|
-
p.operatorToken.kind >= ts.SyntaxKind.FirstAssignment &&
|
|
620
|
-
p.operatorToken.kind <= ts.SyntaxKind.LastAssignment) {
|
|
621
|
-
return false;
|
|
622
|
-
}
|
|
623
|
-
if (p !== undefined &&
|
|
624
|
-
(ts.isPrefixUnaryExpression(p) || ts.isPostfixUnaryExpression(p)) &&
|
|
625
|
-
(p.operator === ts.SyntaxKind.PlusPlusToken || p.operator === ts.SyntaxKind.MinusMinusToken)) {
|
|
626
|
-
return false;
|
|
627
|
-
}
|
|
628
|
-
return true;
|
|
629
|
-
}
|
|
630
|
-
const RESERVED_KEYS = new Set(["__proto__"]);
|
|
631
|
-
/** The rewrite (see the header). Null = not a recognized bundle shape (or
|
|
632
|
-
* nothing to fix) — serve the file untouched. A `{ degrade }` answer means
|
|
633
|
-
* the file carries a bundler-interop construct the recognizers cannot
|
|
634
|
-
* finish: the caller reports the PACKAGE as an offender with the reason
|
|
635
|
-
* and the fallback loop islands it — never a failed build. */
|
|
1
|
+
import { nodeFrontendServices } from "./services-node.js";
|
|
636
2
|
export function rewriteBundlerCjsExports(source, filePath) {
|
|
637
|
-
|
|
638
|
-
// fingerprints; files without any are never candidates.
|
|
639
|
-
if (!source.includes("__toCommonJS") &&
|
|
640
|
-
!source.includes("__toESM") &&
|
|
641
|
-
!source.includes("__exportStar") &&
|
|
642
|
-
!source.includes("__reExport") &&
|
|
643
|
-
!(source.includes("Object.defineProperty(exports") && source.includes("get"))) {
|
|
644
|
-
return null;
|
|
645
|
-
}
|
|
646
|
-
// parents ON: the helper sweep excludes declarator-name self references
|
|
647
|
-
// and the chase reads expression text through the tree
|
|
648
|
-
const sf = ts.createSourceFile(filePath, source, ts.ScriptTarget.Latest, true, ts.ScriptKind.JS);
|
|
649
|
-
// ESM syntax → not CJS; leave alone — except when the ES module CALLS
|
|
650
|
-
// the __toESM interop helper (esbuild's ESM output around __require of
|
|
651
|
-
// an external): no static story respells that, and served untouched the
|
|
652
|
-
// helper's `var __create = Object.create;` chain fences at MODULE LOAD,
|
|
653
|
-
// so the honest answer is the per-package degrade.
|
|
654
|
-
for (const stmt of sf.statements) {
|
|
655
|
-
if (ts.isImportDeclaration(stmt) || ts.isExportDeclaration(stmt) || ts.isExportAssignment(stmt)) {
|
|
656
|
-
return source.includes("__toESM(")
|
|
657
|
-
? {
|
|
658
|
-
degrade: "its ES-module dist routes an external dependency through the __toESM " +
|
|
659
|
-
"bundler-interop helper, which has no static story in ESM output — the " +
|
|
660
|
-
"package serves from the island instead",
|
|
661
|
-
}
|
|
662
|
-
: null;
|
|
663
|
-
}
|
|
664
|
-
}
|
|
665
|
-
// The __toESM interop pass (see the section header): wrapper call sites
|
|
666
|
-
// pad down to the bare require they wrap, module-valued `.default`
|
|
667
|
-
// accesses pad down to their binding, and a file whose interop deviates
|
|
668
|
-
// beyond recognition degrades the package.
|
|
669
|
-
const toEsm = planToEsmInterop(sf);
|
|
670
|
-
if (toEsm.degrade !== null)
|
|
671
|
-
return { degrade: toEsm.degrade };
|
|
672
|
-
const neutralize = [];
|
|
673
|
-
const exportTables = [];
|
|
674
|
-
const definePropEntries = [];
|
|
675
|
-
const memberStmts = [];
|
|
676
|
-
/** Star spec → require-load emission order (statement order). */
|
|
677
|
-
const starSpecsInOrder = [];
|
|
678
|
-
let esbuildMainTarget = null;
|
|
679
|
-
let tablePos = null;
|
|
680
|
-
let sawBundleShape = false;
|
|
681
|
-
const addStarSpec = (spec) => {
|
|
682
|
-
if (!starSpecsInOrder.includes(spec))
|
|
683
|
-
starSpecsInOrder.push(spec);
|
|
684
|
-
};
|
|
685
|
-
for (const stmt of sf.statements) {
|
|
686
|
-
if (!ts.isExpressionStatement(stmt))
|
|
687
|
-
continue;
|
|
688
|
-
const e = stmt.expression;
|
|
689
|
-
// `module.exports = <rhs>`
|
|
690
|
-
if (ts.isBinaryExpression(e) && e.operatorToken.kind === ts.SyntaxKind.EqualsToken && isModuleExports(e.left)) {
|
|
691
|
-
const rhs = e.right;
|
|
692
|
-
if (ts.isCallExpression(rhs) && calleeNameOf(rhs) === "__toCommonJS" && rhs.arguments.length === 1 && ts.isIdentifier(rhs.arguments[0])) {
|
|
693
|
-
esbuildMainTarget = rhs.arguments[0].text;
|
|
694
|
-
tablePos = stmt.getStart(sf);
|
|
695
|
-
neutralize.push({ start: stmt.getStart(sf), end: stmt.getEnd() });
|
|
696
|
-
sawBundleShape = true;
|
|
697
|
-
continue;
|
|
698
|
-
}
|
|
699
|
-
// Any other real module.exports assignment: the file has an export
|
|
700
|
-
// mechanism the checker already models (or a shape outside the
|
|
701
|
-
// recognizers) — not ours to rewrite.
|
|
702
|
-
return null;
|
|
703
|
-
}
|
|
704
|
-
// member exports — `exports.N = RHS;` / `module.exports.N = RHS;`,
|
|
705
|
-
// chains included (`exports.a = exports.b = void 0;` — the tsc
|
|
706
|
-
// void-init preamble collects every name with the chain's final RHS).
|
|
707
|
-
{
|
|
708
|
-
let cur = e;
|
|
709
|
-
const names = [];
|
|
710
|
-
let viaBareExports = false;
|
|
711
|
-
while (ts.isBinaryExpression(cur) &&
|
|
712
|
-
cur.operatorToken.kind === ts.SyntaxKind.EqualsToken &&
|
|
713
|
-
ts.isPropertyAccessExpression(cur.left) &&
|
|
714
|
-
cur.left.questionDotToken === undefined &&
|
|
715
|
-
ts.isIdentifier(cur.left.name) &&
|
|
716
|
-
(isExportsIdent(cur.left.expression) || isModuleExports(cur.left.expression))) {
|
|
717
|
-
names.push(cur.left.name.text);
|
|
718
|
-
if (isExportsIdent(cur.left.expression))
|
|
719
|
-
viaBareExports = true;
|
|
720
|
-
cur = cur.right;
|
|
721
|
-
}
|
|
722
|
-
if (names.length > 0) {
|
|
723
|
-
memberStmts.push({
|
|
724
|
-
names,
|
|
725
|
-
finalRhs: cur,
|
|
726
|
-
viaBareExports,
|
|
727
|
-
pos: stmt.getStart(sf),
|
|
728
|
-
start: stmt.getStart(sf),
|
|
729
|
-
end: stmt.getEnd(),
|
|
730
|
-
});
|
|
731
|
-
continue; // classified later (only when a rewrite actually happens)
|
|
732
|
-
}
|
|
733
|
-
}
|
|
734
|
-
// the dead esbuild annotation: `0 && (module.exports = { ... });`
|
|
735
|
-
if (ts.isBinaryExpression(e) &&
|
|
736
|
-
e.operatorToken.kind === ts.SyntaxKind.AmpersandAmpersandToken &&
|
|
737
|
-
ts.isNumericLiteral(e.left) &&
|
|
738
|
-
e.left.text === "0") {
|
|
739
|
-
let inner = e.right;
|
|
740
|
-
while (ts.isParenthesizedExpression(inner))
|
|
741
|
-
inner = inner.expression;
|
|
742
|
-
if (ts.isBinaryExpression(inner) &&
|
|
743
|
-
inner.operatorToken.kind === ts.SyntaxKind.EqualsToken &&
|
|
744
|
-
isModuleExports(inner.left) &&
|
|
745
|
-
ts.isObjectLiteralExpression(inner.right)) {
|
|
746
|
-
neutralize.push({ start: stmt.getStart(sf), end: stmt.getEnd() });
|
|
747
|
-
sawBundleShape = true;
|
|
748
|
-
continue;
|
|
749
|
-
}
|
|
750
|
-
}
|
|
751
|
-
if (!ts.isCallExpression(e))
|
|
752
|
-
continue;
|
|
753
|
-
const name = calleeNameOf(e);
|
|
754
|
-
// `__export(TARGET, { getter table });`
|
|
755
|
-
const table = exportCallOf(e);
|
|
756
|
-
if (table !== null) {
|
|
757
|
-
exportTables.push(table);
|
|
758
|
-
neutralize.push({ start: stmt.getStart(sf), end: stmt.getEnd() });
|
|
759
|
-
sawBundleShape = true;
|
|
760
|
-
continue;
|
|
761
|
-
}
|
|
762
|
-
// `__exportStar(require('spec'), exports);` — the tsc/tslib spelling —
|
|
763
|
-
// and `__export(require('spec'))`, the legacy twin.
|
|
764
|
-
if ((name === "__exportStar" || name === "__export") && e.arguments.length >= 1) {
|
|
765
|
-
const spec = bareRequireSpecOf(e.arguments[0]);
|
|
766
|
-
if (spec !== null) {
|
|
767
|
-
addStarSpec(spec);
|
|
768
|
-
neutralize.push({ start: stmt.getStart(sf), end: stmt.getEnd() });
|
|
769
|
-
sawBundleShape = true;
|
|
770
|
-
continue;
|
|
771
|
-
}
|
|
772
|
-
}
|
|
773
|
-
// `__reExport(TARGET, require('spec')[, module.exports]);` — esbuild's
|
|
774
|
-
// `export * from` plumbing.
|
|
775
|
-
if (name === "__reExport" && e.arguments.length >= 2) {
|
|
776
|
-
const spec = bareRequireSpecOf(e.arguments[1]);
|
|
777
|
-
if (spec !== null) {
|
|
778
|
-
addStarSpec(spec);
|
|
779
|
-
neutralize.push({ start: stmt.getStart(sf), end: stmt.getEnd() });
|
|
780
|
-
sawBundleShape = true;
|
|
781
|
-
continue;
|
|
782
|
-
}
|
|
783
|
-
}
|
|
784
|
-
// Object.defineProperty(exports, 'n', {...})
|
|
785
|
-
const def = definePropertyExportOf(e);
|
|
786
|
-
if (def !== null) {
|
|
787
|
-
if (def.esModuleStamp) {
|
|
788
|
-
neutralize.push({ start: stmt.getStart(sf), end: stmt.getEnd() });
|
|
789
|
-
// the canonical table re-stamps it (lexer-visibly — merve detects
|
|
790
|
-
// this defineProperty form, so parity wants a visible entry)
|
|
791
|
-
continue;
|
|
792
|
-
}
|
|
793
|
-
const chased = def.value !== null ? chaseValue(def.value) : null;
|
|
794
|
-
if (chased !== null) {
|
|
795
|
-
definePropEntries.push({ name: def.name, value: def.value });
|
|
796
|
-
neutralize.push({ start: stmt.getStart(sf), end: stmt.getEnd() });
|
|
797
|
-
sawBundleShape = true;
|
|
798
|
-
}
|
|
799
|
-
// unchaseable descriptor: LEAVE the statement (its runtime fence is
|
|
800
|
-
// loud where an undefined-valued entry would be a silent lie); the
|
|
801
|
-
// name still types through the any-fallback below.
|
|
802
|
-
continue;
|
|
803
|
-
}
|
|
804
|
-
}
|
|
805
|
-
const lexed = cjsLexedExportsOf(source, filePath);
|
|
806
|
-
let emitTable = sawBundleShape && (lexed.exports.size > 0 || lexed.reexports.length > 0);
|
|
807
|
-
const starSpecs = [];
|
|
808
|
-
const entries = new Map();
|
|
809
|
-
const starMembers = [];
|
|
810
|
-
const requireConsts = [];
|
|
811
|
-
if (emitTable) {
|
|
812
|
-
/* Star specs Node actually honors are the lexer's SURVIVING reexports
|
|
813
|
-
* (annotation spreads for esbuild bundles, star-pattern calls for tsc
|
|
814
|
-
* output). The statements walked above contribute load order; specs the
|
|
815
|
-
* lexer dropped (cleared by a later module.exports=) drop here too. */
|
|
816
|
-
const lexerSpecs = new Set(lexed.reexports);
|
|
817
|
-
starSpecs.push(...starSpecsInOrder.filter((s) => lexerSpecs.has(s)));
|
|
818
|
-
for (const s of lexed.reexports) {
|
|
819
|
-
if (!starSpecs.includes(s))
|
|
820
|
-
starSpecs.push(s);
|
|
821
|
-
}
|
|
822
|
-
/* The entry list, first-wins per name: own getter-table entries, then
|
|
823
|
-
* defineProperty entries, then surviving top-level member exports, then
|
|
824
|
-
* (for names still uncovered) star enumerations in spec order, then the
|
|
825
|
-
* any fallback for every remaining lexer-visible name. */
|
|
826
|
-
const claim = (name, spec) => {
|
|
827
|
-
if (name === "__esModule" || RESERVED_KEYS.has(name))
|
|
828
|
-
return;
|
|
829
|
-
if (!entries.has(name))
|
|
830
|
-
entries.set(name, spec);
|
|
831
|
-
};
|
|
832
|
-
const classify = (name, value) => {
|
|
833
|
-
const chased = value !== null ? chaseValue(value) : null;
|
|
834
|
-
if (chased === null)
|
|
835
|
-
return { name, kind: "any" };
|
|
836
|
-
if (chased.kind === "ident")
|
|
837
|
-
return { name, kind: "ident", value: chased.text };
|
|
838
|
-
return { name, kind: "hoist", value: chased.text };
|
|
839
|
-
};
|
|
840
|
-
// Own names: the getter table(s) — the one feeding module.exports first.
|
|
841
|
-
const tablesOrdered = [
|
|
842
|
-
...exportTables.filter((t) => t.target === esbuildMainTarget),
|
|
843
|
-
...exportTables.filter((t) => t.target !== esbuildMainTarget),
|
|
844
|
-
];
|
|
845
|
-
for (const t of tablesOrdered) {
|
|
846
|
-
for (const [name, value] of t.entries)
|
|
847
|
-
claim(name, classify(name, value));
|
|
848
|
-
}
|
|
849
|
-
for (const d of definePropEntries)
|
|
850
|
-
claim(d.name, classify(d.name, d.value));
|
|
851
|
-
/* Top-level member exports. Node's export-object identity rules decide
|
|
852
|
-
* each statement's fate against the ORIGINAL table (esbuildMainTarget's
|
|
853
|
-
* assignment): a member attached BEFORE it was discarded (the table
|
|
854
|
-
* replaced the object), a bare `exports.N =` AFTER it wrote the stale
|
|
855
|
-
* object — both keep only their lexer-visible NAME (value undefined,
|
|
856
|
-
* exactly Node's link answer: the any fallback below). A surviving
|
|
857
|
-
* member (`module.exports.N =` after the table, or any spelling when no
|
|
858
|
-
* table exists) re-emits its VALUE as a canonical entry — identifier
|
|
859
|
-
* RHS only; any other RHS would need a second evaluation, so the file
|
|
860
|
-
* is left alone (the offender path owns it — and when the file also
|
|
861
|
-
* carries erased interop wrappers, "untouched" is not on the menu:
|
|
862
|
-
* the live helper chain would fence at module load, so the package
|
|
863
|
-
* degrades with the note instead). Every member statement is then
|
|
864
|
-
* NEUTRALIZED: the canonical tail table replaces the object, and a
|
|
865
|
-
* stray earlier attach would meet the lowering's discard fence. */
|
|
866
|
-
for (const m of memberStmts) {
|
|
867
|
-
let cur = m.finalRhs;
|
|
868
|
-
while (ts.isParenthesizedExpression(cur))
|
|
869
|
-
cur = cur.expression;
|
|
870
|
-
const isVoidInit = cur.kind === ts.SyntaxKind.VoidExpression || (ts.isIdentifier(cur) && cur.text === "undefined");
|
|
871
|
-
const discarded = tablePos !== null && (m.pos < tablePos || m.viaBareExports);
|
|
872
|
-
if (!isVoidInit) {
|
|
873
|
-
// Only side-effect-free RHS shapes may be neutralized (identifiers,
|
|
874
|
-
// scalar literals, ident-rooted member chains — chaseValue's set);
|
|
875
|
-
// anything else keeps the file untouched (the offender path owns
|
|
876
|
-
// it: neutralizing would drop an evaluation, keeping it meets the
|
|
877
|
-
// lowering's discard fence at load).
|
|
878
|
-
const chased = chaseValue(cur);
|
|
879
|
-
if (chased === null) {
|
|
880
|
-
return toEsm.pads.length > 0 ? { degrade: TO_ESM_MIXED_DEGRADE } : null;
|
|
881
|
-
}
|
|
882
|
-
if (!discarded) {
|
|
883
|
-
for (const name of m.names)
|
|
884
|
-
claim(name, { name, kind: chased.kind, value: chased.text });
|
|
885
|
-
}
|
|
886
|
-
// discarded members keep only their lexer-visible NAME (the any
|
|
887
|
-
// fallback below) — value undefined, exactly Node's link answer
|
|
888
|
-
}
|
|
889
|
-
neutralize.push({ start: m.start, end: m.end });
|
|
890
|
-
}
|
|
891
|
-
/* Direct-vs-hoist for ident entries: only bindings declared by a
|
|
892
|
-
* top-level const/function/class may be spelled directly (alias
|
|
893
|
-
* plumbing needs an immutable target — a `var`/`let` in the table would
|
|
894
|
-
* fence the whole statement). Everything else snapshots via a tail
|
|
895
|
-
* const. */
|
|
896
|
-
const immutableTopLevel = new Set();
|
|
897
|
-
for (const stmt of sf.statements) {
|
|
898
|
-
if (ts.isFunctionDeclaration(stmt) && stmt.name !== undefined)
|
|
899
|
-
immutableTopLevel.add(stmt.name.text);
|
|
900
|
-
else if (ts.isClassDeclaration(stmt) && stmt.name !== undefined)
|
|
901
|
-
immutableTopLevel.add(stmt.name.text);
|
|
902
|
-
else if (ts.isVariableStatement(stmt) && (stmt.declarationList.flags & ts.NodeFlags.Const) !== 0) {
|
|
903
|
-
for (const d of stmt.declarationList.declarations) {
|
|
904
|
-
if (ts.isIdentifier(d.name))
|
|
905
|
-
immutableTopLevel.add(d.name.text);
|
|
906
|
-
}
|
|
907
|
-
}
|
|
908
|
-
}
|
|
909
|
-
for (const spec of entries.values()) {
|
|
910
|
-
if (spec.kind === "ident" && !immutableTopLevel.has(spec.value))
|
|
911
|
-
spec.kind = "hoist";
|
|
912
|
-
}
|
|
913
|
-
// Star enumerations for names the own entries left uncovered.
|
|
914
|
-
starSpecs.forEach((spec, i) => {
|
|
915
|
-
const target = resolveRelativeCjs(filePath, spec);
|
|
916
|
-
if (target === null)
|
|
917
|
-
return; // bare/unresolved: the spread entry carries it
|
|
918
|
-
const names = starTargetNames(target);
|
|
919
|
-
let refVar = null;
|
|
920
|
-
for (const n of names) {
|
|
921
|
-
if (n === "default" || n === "__esModule" || entries.has(n) || RESERVED_KEYS.has(n))
|
|
922
|
-
continue;
|
|
923
|
-
if (starMembers.some((m) => m.name === n))
|
|
924
|
-
continue; // earlier spec wins
|
|
925
|
-
if (refVar === null) {
|
|
926
|
-
refVar = `__scriptc_r${i}`;
|
|
927
|
-
requireConsts.push(`const ${refVar} = require(${JSON.stringify(spec)});`);
|
|
928
|
-
}
|
|
929
|
-
starMembers.push({ name: n, ref: refVar });
|
|
930
|
-
}
|
|
931
|
-
});
|
|
932
|
-
// The any fallback: every lexer-visible name nothing above covered.
|
|
933
|
-
for (const n of lexed.exports)
|
|
934
|
-
claim(n, { name: n, kind: "any" });
|
|
935
|
-
emitTable = entries.size > 0 || starSpecs.length > 0;
|
|
936
|
-
}
|
|
937
|
-
/* A file with interop pads but no canonical table still rewrites: the
|
|
938
|
-
* pads erase the __toESM wrappers and the sweep below drops the dead
|
|
939
|
-
* helper chain — but nothing replaces the export plumbing, so none of
|
|
940
|
-
* it may be neutralized (the surviving text keeps exactly its
|
|
941
|
-
* untouched-file behavior). */
|
|
942
|
-
if (!emitTable) {
|
|
943
|
-
if (toEsm.pads.length === 0)
|
|
944
|
-
return null;
|
|
945
|
-
neutralize.length = 0;
|
|
946
|
-
}
|
|
947
|
-
// Interop pads join the neutralized set BEFORE the sweep: the erased
|
|
948
|
-
// __toESM call sites read as dead references, so the helper declaration
|
|
949
|
-
// sweeps away and its __create/__getProtoOf chain follows.
|
|
950
|
-
neutralize.push(...toEsm.pads);
|
|
951
|
-
/* Bundler HELPPER declarations left unused once the plumbing statements
|
|
952
|
-
* are gone would still fence at module load (`var __defProp =
|
|
953
|
-
* Object.defineProperty;` — a stdlib generic method as a value has no
|
|
954
|
-
* lowering, and a top-level declaration's fence throws when init runs
|
|
955
|
-
* it). Mark-and-sweep the RECOGNIZED helper names: a helper whose every
|
|
956
|
-
* reference lies inside an already-neutralized span (the plumbing
|
|
957
|
-
* calls, the erased __toESM interop wrappers, or another swept helper's
|
|
958
|
-
* declaration) is neutralized too. Helpers live code still calls
|
|
959
|
-
* (__commonJS chunk factories) stay — their declarations are plain
|
|
960
|
-
* function values whose bodies defer per the JS function-poison rule. */
|
|
961
|
-
{
|
|
962
|
-
const HELPER_NAMES = new Set([
|
|
963
|
-
"__create", "__defProp", "__defProps", "__getOwnPropDesc", "__getOwnPropDescs",
|
|
964
|
-
"__getOwnPropNames", "__getOwnPropSymbols", "__getProtoOf", "__hasOwnProp",
|
|
965
|
-
"__propIsEnum", "__export", "__copyProps", "__reExport", "__toESM", "__toCommonJS",
|
|
966
|
-
"__exportStar", "__createBinding", "__setModuleDefault", "__importStar", "__importDefault",
|
|
967
|
-
]);
|
|
968
|
-
const helperDecls = new Map();
|
|
969
|
-
for (const stmt of sf.statements) {
|
|
970
|
-
if (!ts.isVariableStatement(stmt))
|
|
971
|
-
continue;
|
|
972
|
-
const decls = stmt.declarationList.declarations;
|
|
973
|
-
if (decls.length !== 1)
|
|
974
|
-
continue;
|
|
975
|
-
const d = decls[0];
|
|
976
|
-
if (ts.isIdentifier(d.name) && HELPER_NAMES.has(d.name.text)) {
|
|
977
|
-
helperDecls.set(d.name.text, { start: stmt.getStart(sf), end: stmt.getEnd() });
|
|
978
|
-
}
|
|
979
|
-
}
|
|
980
|
-
// every identifier occurrence of a helper name outside its own
|
|
981
|
-
// declarator name node, position-recorded for the span test
|
|
982
|
-
const refs = new Map();
|
|
983
|
-
const record = (node) => {
|
|
984
|
-
ts.forEachChild(node, record);
|
|
985
|
-
if (ts.isIdentifier(node) && helperDecls.has(node.text)) {
|
|
986
|
-
const parent = node.parent;
|
|
987
|
-
if (parent !== undefined && ts.isVariableDeclaration(parent) && parent.name === node)
|
|
988
|
-
return;
|
|
989
|
-
const list = refs.get(node.text);
|
|
990
|
-
if (list === undefined)
|
|
991
|
-
refs.set(node.text, [node.getStart(sf)]);
|
|
992
|
-
else
|
|
993
|
-
list.push(node.getStart(sf));
|
|
994
|
-
}
|
|
995
|
-
};
|
|
996
|
-
record(sf);
|
|
997
|
-
const dead = [...neutralize];
|
|
998
|
-
const inDead = (pos) => dead.some((s) => pos >= s.start && pos < s.end);
|
|
999
|
-
const removed = new Set();
|
|
1000
|
-
for (let changed = true; changed;) {
|
|
1001
|
-
changed = false;
|
|
1002
|
-
for (const [name, span] of helperDecls) {
|
|
1003
|
-
if (removed.has(name))
|
|
1004
|
-
continue;
|
|
1005
|
-
// SELF-references inside the candidate's own declaration don't
|
|
1006
|
-
// keep it alive (`var __createBinding = (this && this.__createBinding)
|
|
1007
|
-
// || ...` — the tsc helper's UMD-style self probe).
|
|
1008
|
-
const live = (refs.get(name) ?? []).filter((p) => p < span.start || p >= span.end);
|
|
1009
|
-
if (live.every(inDead)) {
|
|
1010
|
-
removed.add(name);
|
|
1011
|
-
dead.push(span);
|
|
1012
|
-
changed = true;
|
|
1013
|
-
}
|
|
1014
|
-
}
|
|
1015
|
-
}
|
|
1016
|
-
neutralize.length = 0;
|
|
1017
|
-
neutralize.push(...dead);
|
|
1018
|
-
}
|
|
1019
|
-
/* ── emission ─────────────────────────────────────────────────────── */
|
|
1020
|
-
let text = source;
|
|
1021
|
-
// pad from the END so earlier spans' offsets stay valid
|
|
1022
|
-
for (const n of [...neutralize].sort((a, b) => b.start - a.start)) {
|
|
1023
|
-
text = padSpan(text, n.start, n.end);
|
|
1024
|
-
}
|
|
1025
|
-
if (!emitTable)
|
|
1026
|
-
return text; // interop pads only — nothing appends
|
|
1027
|
-
const lines = [""];
|
|
1028
|
-
const hasAnyFallback = [...entries.values()].some((s) => s.kind === "any");
|
|
1029
|
-
if (hasAnyFallback) {
|
|
1030
|
-
// checked-dynamic undefined: an implicit-any IIFE result registers a
|
|
1031
|
-
// dyn module global the table's alias plumbing can resolve.
|
|
1032
|
-
lines.push("const __scriptc_any = (() => { let u; return u; })();");
|
|
1033
|
-
}
|
|
1034
|
-
lines.push(...requireConsts);
|
|
1035
|
-
const hoists = [];
|
|
1036
|
-
let hoistN = 0;
|
|
1037
|
-
const keyOf = (name) => (isPlainName(name) ? name : JSON.stringify(name));
|
|
1038
|
-
/* Hoist texts are COPIED off the original source, where a `.default`
|
|
1039
|
-
* access on a module-valued interop binding still carries its member
|
|
1040
|
-
* spelling (the pads erase only source spans) — drop it here exactly
|
|
1041
|
-
* like the pads do, or the tail const would read a member the module
|
|
1042
|
-
* never exports. */
|
|
1043
|
-
const dropInteropDefault = (text) => {
|
|
1044
|
-
let out = text;
|
|
1045
|
-
for (const b of toEsm.moduleBindings) {
|
|
1046
|
-
out = out.replace(new RegExp(`\\b${b}\\s*\\.\\s*default\\b`, "g"), b);
|
|
1047
|
-
}
|
|
1048
|
-
return out;
|
|
1049
|
-
};
|
|
1050
|
-
const plainParts = [];
|
|
1051
|
-
for (const spec of entries.values()) {
|
|
1052
|
-
if (spec.kind === "ident") {
|
|
1053
|
-
plainParts.push(`${keyOf(spec.name)}: ${spec.value},`);
|
|
1054
|
-
}
|
|
1055
|
-
else if (spec.kind === "hoist") {
|
|
1056
|
-
const v = `__scriptc_e${hoistN++}`;
|
|
1057
|
-
hoists.push(`const ${v} = ${dropInteropDefault(spec.value)};`);
|
|
1058
|
-
plainParts.push(`${keyOf(spec.name)}: ${v},`);
|
|
1059
|
-
}
|
|
1060
|
-
else {
|
|
1061
|
-
plainParts.push(`${keyOf(spec.name)}: __scriptc_any,`);
|
|
1062
|
-
}
|
|
1063
|
-
}
|
|
1064
|
-
lines.push(...hoists);
|
|
1065
|
-
/* The table. Spread entries first (REVERSED: Node's star copies are
|
|
1066
|
-
* first-wins, an object literal's later-wins — reversing makes them
|
|
1067
|
-
* agree), then the scan-visible plain entries, then — only where the
|
|
1068
|
-
* original stamped it LEXER-DETECTABLY (the tsc defineProperty form;
|
|
1069
|
-
* Node links `import { __esModule }` there) — the `__esModule: true`
|
|
1070
|
-
* entry, then the member-access star entries whose names the spread
|
|
1071
|
-
* records already cover. esbuild's marker lives inside __toCommonJS
|
|
1072
|
-
* where Node's lexer never saw it, and spelling it here would flip the
|
|
1073
|
-
* checker's default-import interop (an __esModule-stamped surface binds
|
|
1074
|
-
* `import def` to exports.default) away from Node's CJS answer — so it
|
|
1075
|
-
* is deliberately OMITTED from the canonical table. */
|
|
1076
|
-
const spreadParts = [...starSpecs].reverse().map((s) => `...require(${JSON.stringify(s)}),`);
|
|
1077
|
-
const esModulePart = lexed.exports.has("__esModule") ? "__esModule: true," : "";
|
|
1078
|
-
const memberParts = starMembers.map((m) => `${keyOf(m.name)}: ${m.ref}${isPlainName(m.name) ? `.${m.name}` : `[${JSON.stringify(m.name)}]`},`);
|
|
1079
|
-
lines.push(`module.exports = {${spreadParts.join("")}${plainParts.join("")}${esModulePart}${memberParts.join("")}};`);
|
|
1080
|
-
return text + lines.join("\n") + "\n";
|
|
3
|
+
return nodeFrontendServices().rewriteCjs(source, filePath);
|
|
1081
4
|
}
|
|
1082
5
|
//# sourceMappingURL=npm-static-rewrite.js.map
|