@scriptc/compiler 0.4.6 → 0.4.8
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/node-fallback/child_process.d.ts +71 -22
- package/ambient/node-fallback/crypto.d.ts +15 -7
- package/ambient/node-fallback/events.d.ts +29 -6
- package/ambient/node-fallback/fs-promises.d.ts +1 -1
- package/ambient/node-fallback/fs.d.ts +57 -12
- package/ambient/node-fallback/http.d.ts +26 -18
- package/ambient/node-fallback/https.d.ts +5 -2
- package/ambient/node-fallback/net.d.ts +25 -0
- package/ambient/node-fallback/os.d.ts +11 -1
- package/ambient/node-fallback/path-posix.d.ts +6 -0
- package/ambient/node-fallback/path-win32.d.ts +5 -0
- package/ambient/node-fallback/path.d.ts +2 -0
- package/ambient/node-fallback/querystring.d.ts +3 -3
- package/ambient/node-fallback/zlib.d.ts +31 -2
- package/ambient/scriptc-node-fallback.d.ts +95 -20
- package/ambient/scriptc.d.ts +7 -2
- package/dist/backend/executable-features.js +22 -1
- package/dist/backend/executable-features.js.map +1 -1
- package/dist/backend/immutability.d.ts +12 -1
- package/dist/backend/immutability.js +50 -4
- package/dist/backend/immutability.js.map +1 -1
- package/dist/backend/immutability.test.js +95 -1
- package/dist/backend/immutability.test.js.map +1 -1
- package/dist/backend/library-pack.d.ts +6 -0
- package/dist/backend/library-pack.js +18 -5
- package/dist/backend/library-pack.js.map +1 -1
- package/dist/backend/library-pack.test.d.ts +1 -0
- package/dist/backend/library-pack.test.js +28 -0
- package/dist/backend/library-pack.test.js.map +1 -0
- package/dist/backend/linker.d.ts +20 -2
- package/dist/backend/linker.js +221 -35
- package/dist/backend/linker.js.map +1 -1
- package/dist/backend/lld.d.ts +15 -6
- package/dist/backend/lld.js +24 -16
- package/dist/backend/lld.js.map +1 -1
- package/dist/backend/lld.test.js +13 -5
- package/dist/backend/lld.test.js.map +1 -1
- package/dist/backend/llvm/alloc.d.ts +15 -2
- package/dist/backend/llvm/alloc.js +172 -36
- package/dist/backend/llvm/alloc.js.map +1 -1
- package/dist/backend/llvm/alloc.test.js +69 -1
- package/dist/backend/llvm/alloc.test.js.map +1 -1
- package/dist/backend/llvm/arenas.d.ts +17 -4
- package/dist/backend/llvm/arenas.js +105 -10
- package/dist/backend/llvm/arenas.js.map +1 -1
- package/dist/backend/llvm/arenas.test.js +229 -0
- package/dist/backend/llvm/arenas.test.js.map +1 -1
- package/dist/backend/llvm/bytes-alias.js +10 -1
- package/dist/backend/llvm/bytes-alias.js.map +1 -1
- package/dist/backend/llvm/bytes-headers.js +6 -0
- package/dist/backend/llvm/bytes-headers.js.map +1 -1
- package/dist/backend/llvm/bytes-loop-versions.test.js +25 -0
- package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -1
- package/dist/backend/llvm/call-lifetimes.js +10 -0
- package/dist/backend/llvm/call-lifetimes.js.map +1 -1
- package/dist/backend/llvm/classes.d.ts +16 -9
- package/dist/backend/llvm/classes.js +142 -37
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/classes.test.js +42 -0
- package/dist/backend/llvm/classes.test.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.test.js +50 -1
- package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
- package/dist/backend/llvm/cpu-dispatch.d.ts +15 -5
- package/dist/backend/llvm/cpu-dispatch.js +34 -9
- package/dist/backend/llvm/cpu-dispatch.js.map +1 -1
- package/dist/backend/llvm/dyn.d.ts +64 -3
- package/dist/backend/llvm/dyn.js +251 -15
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emit-function.js +68 -5
- package/dist/backend/llvm/emit-function.js.map +1 -1
- package/dist/backend/llvm/emit-module.js +226 -77
- package/dist/backend/llvm/emit-module.js.map +1 -1
- package/dist/backend/llvm/emit-module.test.d.ts +1 -0
- package/dist/backend/llvm/emit-module.test.js +52 -0
- package/dist/backend/llvm/emit-module.test.js.map +1 -0
- package/dist/backend/llvm/emit-statements.js +138 -34
- package/dist/backend/llvm/emit-statements.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +142 -10
- package/dist/backend/llvm/emitter.js +523 -73
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/emitter.test.js +31 -3
- package/dist/backend/llvm/emitter.test.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +19 -1
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-bytes.js +16 -1
- package/dist/backend/llvm/expr-bytes.js.map +1 -1
- package/dist/backend/llvm/expr-calls.d.ts +4 -1
- package/dist/backend/llvm/expr-calls.js +38 -6
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.js +237 -23
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +123 -12
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-records.d.ts +1 -1
- package/dist/backend/llvm/expr-records.js +124 -56
- package/dist/backend/llvm/expr-records.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.d.ts +8 -0
- package/dist/backend/llvm/expr-stream-bridges.js +59 -2
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/expr-stream-callbacks.d.ts +16 -0
- package/dist/backend/llvm/expr-stream-callbacks.js +206 -20
- package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
- package/dist/backend/llvm/integer-values.d.ts +2 -0
- package/dist/backend/llvm/integer-values.js +6 -0
- package/dist/backend/llvm/integer-values.js.map +1 -1
- package/dist/backend/llvm/js-groups.d.ts +21 -0
- package/dist/backend/llvm/js-groups.js +277 -0
- package/dist/backend/llvm/js-groups.js.map +1 -0
- package/dist/backend/llvm/js-ic.d.ts +57 -1
- package/dist/backend/llvm/js-ic.js +389 -22
- package/dist/backend/llvm/js-ic.js.map +1 -1
- package/dist/backend/llvm/lib-dispatch.js +152 -1
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +116 -11
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-network.js +33 -6
- package/dist/backend/llvm/lib-network.js.map +1 -1
- package/dist/backend/llvm/lib-process.js +180 -27
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +139 -2
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/lib-stream.js +67 -0
- package/dist/backend/llvm/lib-stream.js.map +1 -1
- package/dist/backend/llvm/local-union-storage.test.js +32 -0
- package/dist/backend/llvm/local-union-storage.test.js.map +1 -1
- package/dist/backend/llvm/loop-entry-versions.d.ts +2 -2
- package/dist/backend/llvm/loop-entry-versions.js +43 -21
- package/dist/backend/llvm/loop-entry-versions.js.map +1 -1
- package/dist/backend/llvm/loop-state.d.ts +7 -1
- package/dist/backend/llvm/loop-state.js +26 -3
- package/dist/backend/llvm/loop-state.js.map +1 -1
- package/dist/backend/llvm/map-entry-fusion.d.ts +8 -0
- package/dist/backend/llvm/map-entry-fusion.js +3 -3
- package/dist/backend/llvm/map-entry-fusion.js.map +1 -1
- package/dist/backend/llvm/map-number-lookup.d.ts +3 -1
- package/dist/backend/llvm/map-number-lookup.js +7 -3
- package/dist/backend/llvm/map-number-lookup.js.map +1 -1
- package/dist/backend/llvm/map-number-lookup.test.js +58 -17
- package/dist/backend/llvm/map-number-lookup.test.js.map +1 -1
- package/dist/backend/llvm/nullable-unions.js +7 -6
- package/dist/backend/llvm/nullable-unions.js.map +1 -1
- package/dist/backend/llvm/nullable-unions.test.js +4 -1
- package/dist/backend/llvm/nullable-unions.test.js.map +1 -1
- package/dist/backend/llvm/receiver-brackets.test.d.ts +1 -0
- package/dist/backend/llvm/receiver-brackets.test.js +68 -0
- package/dist/backend/llvm/receiver-brackets.test.js.map +1 -0
- package/dist/backend/llvm/receivers.js +3 -0
- package/dist/backend/llvm/receivers.js.map +1 -1
- package/dist/backend/llvm/record-entry-fusion.d.ts +32 -0
- package/dist/backend/llvm/record-entry-fusion.js +217 -0
- package/dist/backend/llvm/record-entry-fusion.js.map +1 -0
- package/dist/backend/llvm/record-results.d.ts +5 -2
- package/dist/backend/llvm/record-results.js +13 -12
- package/dist/backend/llvm/record-results.js.map +1 -1
- package/dist/backend/llvm/record-views.d.ts +22 -2
- package/dist/backend/llvm/record-views.js +147 -12
- package/dist/backend/llvm/record-views.js.map +1 -1
- package/dist/backend/llvm/record-views.test.js +76 -0
- package/dist/backend/llvm/record-views.test.js.map +1 -1
- package/dist/backend/llvm/reference-effects.js +1 -0
- package/dist/backend/llvm/reference-effects.js.map +1 -1
- package/dist/backend/llvm/reference-writes.js +4 -0
- package/dist/backend/llvm/reference-writes.js.map +1 -1
- package/dist/backend/llvm/region-ir.js +1 -0
- package/dist/backend/llvm/region-ir.js.map +1 -1
- package/dist/backend/llvm/region-sites.d.ts +18 -0
- package/dist/backend/llvm/region-sites.js +79 -1
- package/dist/backend/llvm/region-sites.js.map +1 -1
- package/dist/backend/llvm/runtime-registries.test.js +53 -6
- package/dist/backend/llvm/runtime-registries.test.js.map +1 -1
- package/dist/backend/llvm/serialized-ir-emission.test.js +3 -1
- package/dist/backend/llvm/serialized-ir-emission.test.js.map +1 -1
- package/dist/backend/llvm/shapes.d.ts +36 -3
- package/dist/backend/llvm/shapes.js +201 -16
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/shapes.test.js +4 -0
- package/dist/backend/llvm/shapes.test.js.map +1 -1
- package/dist/backend/llvm/speculative-integers.d.ts +10 -1
- package/dist/backend/llvm/speculative-integers.js +59 -8
- package/dist/backend/llvm/speculative-integers.js.map +1 -1
- package/dist/backend/llvm/stack-objects.d.ts +1 -2
- package/dist/backend/llvm/stack-objects.js +8 -5
- package/dist/backend/llvm/stack-objects.js.map +1 -1
- package/dist/backend/llvm/unwind-abi.d.ts +3 -3
- package/dist/backend/llvm/unwind-abi.js +8 -3
- package/dist/backend/llvm/unwind-abi.js.map +1 -1
- package/dist/backend/llvm/walkers.d.ts +12 -0
- package/dist/backend/llvm/walkers.js +47 -3
- package/dist/backend/llvm/walkers.js.map +1 -1
- package/dist/backend/may-throw.js +12 -2
- package/dist/backend/may-throw.js.map +1 -1
- package/dist/backend/may-throw.test.js +13 -0
- package/dist/backend/may-throw.test.js.map +1 -1
- package/dist/backend/native/contracts.d.ts +94 -0
- package/dist/backend/native/executable.js +134 -10
- package/dist/backend/native/executable.js.map +1 -1
- package/dist/backend/native/helper-identity-record.d.ts +11 -0
- package/dist/backend/native/helper-identity-record.js +76 -0
- package/dist/backend/native/helper-identity-record.js.map +1 -0
- package/dist/backend/native/helper-identity-record.test.d.ts +1 -0
- package/dist/backend/native/helper-identity-record.test.js +101 -0
- package/dist/backend/native/helper-identity-record.test.js.map +1 -0
- package/dist/backend/native/library.js +10 -2
- package/dist/backend/native/library.js.map +1 -1
- package/dist/backend/native/runtime-inputs.js +8 -1
- package/dist/backend/native/runtime-inputs.js.map +1 -1
- package/dist/backend/native/vendor.d.ts +1 -1
- package/dist/backend/native/vendor.js +1 -1
- package/dist/backend/native/vendor.js.map +1 -1
- package/dist/backend/native-codegen-core.d.ts +13 -10
- package/dist/backend/native-codegen-core.js +26 -13
- package/dist/backend/native-codegen-core.js.map +1 -1
- package/dist/backend/native-codegen.js +30 -8
- package/dist/backend/native-codegen.js.map +1 -1
- package/dist/backend/native-codegen.test.js +110 -14
- package/dist/backend/native-codegen.test.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +72 -0
- package/dist/backend/native-link-info-core.js.map +1 -1
- package/dist/backend/native-link-info.js +1 -0
- package/dist/backend/native-link-info.js.map +1 -1
- package/dist/backend/native-profile.d.ts +4 -1
- package/dist/backend/native-profile.js +12 -1
- package/dist/backend/native-profile.js.map +1 -1
- package/dist/backend/native-profile.test.js +10 -0
- package/dist/backend/native-profile.test.js.map +1 -1
- package/dist/backend/publication.d.ts +4 -1
- package/dist/backend/publication.js +4 -2
- package/dist/backend/publication.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 +46 -7
- package/dist/backend/runtime-pack-core.js +37 -2
- package/dist/backend/runtime-pack-core.js.map +1 -1
- package/dist/backend/runtime-pack-native.d.ts +18 -1
- package/dist/backend/runtime-pack-native.js +138 -29
- package/dist/backend/runtime-pack-native.js.map +1 -1
- package/dist/backend/runtime-pack-native.test.js +166 -4
- package/dist/backend/runtime-pack-native.test.js.map +1 -1
- package/dist/backend/runtime-pack-targets.test.js +3 -1
- package/dist/backend/runtime-pack-targets.test.js.map +1 -1
- package/dist/backend/runtime-pack.d.ts +7 -0
- package/dist/backend/runtime-pack.js +25 -3
- package/dist/backend/runtime-pack.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +213 -12
- package/dist/backend/runtime-pack.test.js.map +1 -1
- package/dist/backend/tree-classes.d.ts +42 -0
- package/dist/backend/tree-classes.js +723 -0
- package/dist/backend/tree-classes.js.map +1 -0
- package/dist/backend/tree-classes.test.d.ts +1 -0
- package/dist/backend/tree-classes.test.js +338 -0
- package/dist/backend/tree-classes.test.js.map +1 -0
- package/dist/backend/vendor-archives.d.ts +8 -1
- package/dist/backend/vendor-archives.js +313 -8
- package/dist/backend/vendor-archives.js.map +1 -1
- package/dist/backend/vendor-inputs.d.ts +60 -3
- package/dist/backend/vendor-inputs.js +109 -3
- package/dist/backend/vendor-inputs.js.map +1 -1
- package/dist/backend/vendor-inputs.test.js +62 -1
- package/dist/backend/vendor-inputs.test.js.map +1 -1
- package/dist/backend/warm-cache.js +2 -0
- package/dist/backend/warm-cache.js.map +1 -1
- package/dist/compat/fetch-profile.d.ts +7 -1
- package/dist/compat/fetch-profile.js +25 -12
- package/dist/compat/fetch-profile.js.map +1 -1
- package/dist/compile-types.d.ts +7 -0
- package/dist/contracts/check.d.ts +3 -0
- package/dist/contracts/check.js +18 -5
- package/dist/contracts/check.js.map +1 -1
- package/dist/coverage/report.js +47 -0
- package/dist/coverage/report.js.map +1 -1
- package/dist/coverage/surface-manifest.js +1 -1
- package/dist/coverage/surface-manifest.js.map +1 -1
- package/dist/diagnostics/codes.d.ts +14 -0
- package/dist/diagnostics/codes.js +14 -0
- package/dist/diagnostics/codes.js.map +1 -1
- package/dist/diagnostics/diagnostic.d.ts +68 -0
- package/dist/diagnostics/diagnostic.js +186 -6
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/diagnostics/dynamic-tier.js +3 -1
- package/dist/diagnostics/dynamic-tier.js.map +1 -1
- package/dist/diagnostics/envelope.d.ts +18 -0
- package/dist/diagnostics/envelope.js.map +1 -1
- package/dist/executable/executable-cache.d.ts +48 -0
- package/dist/executable/executable-cache.js +38 -0
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +127 -1
- package/dist/executable/executable-cache.test.js.map +1 -1
- package/dist/executable/prepare.d.ts +13 -3
- package/dist/executable/prepare.js +438 -234
- package/dist/executable/prepare.js.map +1 -1
- package/dist/frontend/analysis.js +200 -18
- package/dist/frontend/analysis.js.map +1 -1
- package/dist/frontend/builtin-modules.d.ts +4 -0
- package/dist/frontend/builtin-modules.js +10 -0
- package/dist/frontend/builtin-modules.js.map +1 -1
- package/dist/frontend/early-errors.d.ts +24 -0
- package/dist/frontend/early-errors.js +836 -0
- package/dist/frontend/early-errors.js.map +1 -0
- package/dist/frontend/early-errors.test.d.ts +1 -0
- package/dist/frontend/early-errors.test.js +207 -0
- package/dist/frontend/early-errors.test.js.map +1 -0
- package/dist/frontend/inferred-js-diagnostics.test.js +88 -0
- package/dist/frontend/inferred-js-diagnostics.test.js.map +1 -1
- package/dist/frontend/input-tracker.d.ts +47 -0
- package/dist/frontend/input-tracker.js +173 -36
- package/dist/frontend/input-tracker.js.map +1 -1
- package/dist/frontend/input-tracker.test.js +86 -2
- package/dist/frontend/input-tracker.test.js.map +1 -1
- package/dist/frontend/js-inference.d.ts +2 -0
- package/dist/frontend/js-inference.js +18 -0
- package/dist/frontend/js-inference.js.map +1 -0
- package/dist/frontend/jsx-opinion-sites.test.d.ts +1 -0
- package/dist/frontend/jsx-opinion-sites.test.js +86 -0
- package/dist/frontend/jsx-opinion-sites.test.js.map +1 -0
- package/dist/frontend/lib-exports.d.ts +23 -4
- package/dist/frontend/lib-exports.js +98 -26
- package/dist/frontend/lib-exports.js.map +1 -1
- package/dist/frontend/lowering/binding-analysis.d.ts +2 -1
- package/dist/frontend/lowering/binding-analysis.js +86 -4
- package/dist/frontend/lowering/binding-analysis.js.map +1 -1
- package/dist/frontend/lowering/buffers.d.ts +8 -0
- package/dist/frontend/lowering/buffers.js +43 -0
- package/dist/frontend/lowering/buffers.js.map +1 -0
- package/dist/frontend/lowering/builtin-calls.js +13 -0
- package/dist/frontend/lowering/builtin-calls.js.map +1 -1
- package/dist/frontend/lowering/builtin-namespaces.d.ts +3 -2
- package/dist/frontend/lowering/builtin-namespaces.js +41 -3
- package/dist/frontend/lowering/builtin-namespaces.js.map +1 -1
- package/dist/frontend/lowering/builtin-statics.d.ts +24 -0
- package/dist/frontend/lowering/builtin-statics.js +407 -0
- package/dist/frontend/lowering/builtin-statics.js.map +1 -0
- package/dist/frontend/lowering/builtins/arguments.d.ts +4 -0
- package/dist/frontend/lowering/builtins/arguments.js +12 -0
- package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
- package/dist/frontend/lowering/builtins/atomics.d.ts +6 -1
- package/dist/frontend/lowering/builtins/atomics.js +87 -1
- package/dist/frontend/lowering/builtins/atomics.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-methods.d.ts +7 -0
- package/dist/frontend/lowering/builtins/child-process-methods.js +52 -12
- package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-sync.d.ts +13 -0
- package/dist/frontend/lowering/builtins/child-process-sync.js +1 -13
- package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process.d.ts +10 -4
- package/dist/frontend/lowering/builtins/child-process.js +565 -28
- package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
- package/dist/frontend/lowering/builtins/compression.d.ts +2 -2
- package/dist/frontend/lowering/builtins/compression.js +41 -21
- package/dist/frontend/lowering/builtins/compression.js.map +1 -1
- package/dist/frontend/lowering/builtins/constants.js +7 -2
- package/dist/frontend/lowering/builtins/constants.js.map +1 -1
- package/dist/frontend/lowering/builtins/dates.d.ts +1 -1
- package/dist/frontend/lowering/builtins/dates.js +23 -1
- package/dist/frontend/lowering/builtins/dates.js.map +1 -1
- package/dist/frontend/lowering/builtins/environment.d.ts +55 -0
- package/dist/frontend/lowering/builtins/environment.js +213 -2
- package/dist/frontend/lowering/builtins/environment.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +1 -0
- package/dist/frontend/lowering/builtins/filesystem-calls.js +75 -18
- package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem.d.ts +25 -7
- package/dist/frontend/lowering/builtins/filesystem.js +185 -16
- package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
- package/dist/frontend/lowering/builtins/json.js +4 -0
- package/dist/frontend/lowering/builtins/json.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-calls.js +42 -3
- package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-resolution.d.ts +8 -0
- package/dist/frontend/lowering/builtins/module-resolution.js +31 -5
- package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -1
- package/dist/frontend/lowering/builtins/numbers.d.ts +4 -1
- package/dist/frontend/lowering/builtins/numbers.js +10 -2
- package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
- package/dist/frontend/lowering/builtins/operating-system.d.ts +9 -5
- package/dist/frontend/lowering/builtins/operating-system.js +101 -20
- package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
- package/dist/frontend/lowering/builtins/process.d.ts +18 -2
- package/dist/frontend/lowering/builtins/process.js +386 -25
- package/dist/frontend/lowering/builtins/process.js.map +1 -1
- package/dist/frontend/lowering/builtins/promises.js +169 -8
- package/dist/frontend/lowering/builtins/promises.js.map +1 -1
- package/dist/frontend/lowering/builtins/properties.js +6 -2
- package/dist/frontend/lowering/builtins/properties.js.map +1 -1
- package/dist/frontend/lowering/builtins/querystring.d.ts +8 -0
- package/dist/frontend/lowering/builtins/querystring.js +202 -18
- package/dist/frontend/lowering/builtins/querystring.js.map +1 -1
- package/dist/frontend/lowering/builtins/readline.d.ts +6 -4
- package/dist/frontend/lowering/builtins/readline.js +200 -38
- package/dist/frontend/lowering/builtins/readline.js.map +1 -1
- package/dist/frontend/lowering/builtins/reflection.js +60 -1
- package/dist/frontend/lowering/builtins/reflection.js.map +1 -1
- package/dist/frontend/lowering/builtins/text-codecs.js +208 -59
- package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
- package/dist/frontend/lowering/builtins/url.js +55 -13
- package/dist/frontend/lowering/builtins/url.js.map +1 -1
- package/dist/frontend/lowering/builtins/v8.d.ts +5 -5
- package/dist/frontend/lowering/builtins/v8.js +7 -5
- package/dist/frontend/lowering/builtins/v8.js.map +1 -1
- package/dist/frontend/lowering/builtins/web-streams-dyn.d.ts +17 -2
- package/dist/frontend/lowering/builtins/web-streams-dyn.js +97 -9
- package/dist/frontend/lowering/builtins/web-streams-dyn.js.map +1 -1
- package/dist/frontend/lowering/builtins/webassembly.js +2 -0
- package/dist/frontend/lowering/builtins/webassembly.js.map +1 -1
- package/dist/frontend/lowering/call-arguments.d.ts +10 -0
- package/dist/frontend/lowering/call-arguments.js +37 -2
- package/dist/frontend/lowering/call-arguments.js.map +1 -1
- package/dist/frontend/lowering/call-signatures.d.ts +10 -0
- package/dist/frontend/lowering/call-signatures.js +180 -0
- package/dist/frontend/lowering/call-signatures.js.map +1 -1
- package/dist/frontend/lowering/cjs-exports-object.d.ts +3 -0
- package/dist/frontend/lowering/cjs-exports-object.js +1 -1
- package/dist/frontend/lowering/cjs-exports-object.js.map +1 -1
- package/dist/frontend/lowering/cjs-inline-require.js +5 -0
- package/dist/frontend/lowering/cjs-inline-require.js.map +1 -1
- package/dist/frontend/lowering/class-construction.d.ts +14 -2
- package/dist/frontend/lowering/class-construction.js +99 -5
- package/dist/frontend/lowering/class-construction.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +14 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.js +1376 -1009
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js +158 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
- package/dist/frontend/lowering/class-protocols.js +59 -10
- package/dist/frontend/lowering/class-protocols.js.map +1 -1
- package/dist/frontend/lowering/class-prototypes.js +20 -15
- package/dist/frontend/lowering/class-prototypes.js.map +1 -1
- package/dist/frontend/lowering/class-runtime-statics.d.ts +8 -0
- package/dist/frontend/lowering/class-runtime-statics.js +35 -1
- package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
- package/dist/frontend/lowering/class-unions.js +21 -4
- package/dist/frontend/lowering/class-unions.js.map +1 -1
- package/dist/frontend/lowering/class-views.d.ts +13 -0
- package/dist/frontend/lowering/class-views.js +51 -0
- package/dist/frontend/lowering/class-views.js.map +1 -0
- package/dist/frontend/lowering/coercions/function-adapters.d.ts +15 -1
- package/dist/frontend/lowering/coercions/function-adapters.js +63 -10
- package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
- package/dist/frontend/lowering/coercions/state.d.ts +15 -0
- package/dist/frontend/lowering/coercions/state.js +24 -0
- package/dist/frontend/lowering/coercions/state.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural-plans.js +75 -3
- package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural.js +39 -2
- package/dist/frontend/lowering/coercions/structural.js.map +1 -1
- package/dist/frontend/lowering/coercions/unions.d.ts +2 -1
- package/dist/frontend/lowering/coercions/unions.js +54 -10
- package/dist/frontend/lowering/coercions/unions.js.map +1 -1
- package/dist/frontend/lowering/constructor-returns.d.ts +23 -2
- package/dist/frontend/lowering/constructor-returns.js +284 -58
- package/dist/frontend/lowering/constructor-returns.js.map +1 -1
- package/dist/frontend/lowering/containers/array-callbacks.d.ts +8 -1
- package/dist/frontend/lowering/containers/array-callbacks.js +288 -90
- package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
- package/dist/frontend/lowering/containers/array-construction.js +37 -8
- package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
- package/dist/frontend/lowering/containers/array-from-async.js +139 -3
- package/dist/frontend/lowering/containers/array-from-async.js.map +1 -1
- package/dist/frontend/lowering/containers/array-iteration.d.ts +14 -4
- package/dist/frontend/lowering/containers/array-iteration.js +24 -7
- package/dist/frontend/lowering/containers/array-iteration.js.map +1 -1
- package/dist/frontend/lowering/containers/array-methods.js +30 -11
- package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/bytes.d.ts +6 -0
- package/dist/frontend/lowering/containers/bytes.js +450 -86
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/containers/callback-arguments.d.ts +16 -0
- package/dist/frontend/lowering/containers/callback-arguments.js +74 -12
- package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-grouping.js +421 -2
- package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-methods.js +52 -17
- package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/filter-predicates.d.ts +10 -0
- package/dist/frontend/lowering/containers/filter-predicates.js +69 -3
- package/dist/frontend/lowering/containers/filter-predicates.js.map +1 -1
- package/dist/frontend/lowering/containers/indexed-objects.js +46 -2
- package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
- package/dist/frontend/lowering/containers/iterator-helpers.d.ts +23 -0
- package/dist/frontend/lowering/containers/iterator-helpers.js +176 -10
- package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
- package/dist/frontend/lowering/containers/string-and-regexp.d.ts +5 -2
- package/dist/frontend/lowering/containers/string-and-regexp.js +45 -11
- package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
- package/dist/frontend/lowering/crypto-tables.d.ts +3 -3
- package/dist/frontend/lowering/crypto-tables.js +5 -5
- package/dist/frontend/lowering/dispatch-sites.js +3 -0
- package/dist/frontend/lowering/dispatch-sites.js.map +1 -1
- package/dist/frontend/lowering/divergences.d.ts +40 -0
- package/dist/frontend/lowering/divergences.js +239 -20
- package/dist/frontend/lowering/divergences.js.map +1 -1
- package/dist/frontend/lowering/effect-free.d.ts +12 -0
- package/dist/frontend/lowering/effect-free.js +44 -0
- package/dist/frontend/lowering/effect-free.js.map +1 -0
- package/dist/frontend/lowering/expressions/array-literals.d.ts +24 -0
- package/dist/frontend/lowering/expressions/array-literals.js +88 -10
- package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/binary.js +216 -14
- package/dist/frontend/lowering/expressions/binary.js.map +1 -1
- package/dist/frontend/lowering/expressions/element-access.js +272 -11
- package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/hosted-narrowing.d.ts +15 -0
- package/dist/frontend/lowering/expressions/hosted-narrowing.js +54 -1
- package/dist/frontend/lowering/expressions/hosted-narrowing.js.map +1 -1
- package/dist/frontend/lowering/expressions/identifiers.js +173 -4
- package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
- package/dist/frontend/lowering/expressions/keyed-field-targets.d.ts +11 -1
- package/dist/frontend/lowering/expressions/keyed-field-targets.js +22 -1
- package/dist/frontend/lowering/expressions/keyed-field-targets.js.map +1 -1
- package/dist/frontend/lowering/expressions/narrowing.d.ts +3 -0
- package/dist/frontend/lowering/expressions/narrowing.js +195 -18
- package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
- package/dist/frontend/lowering/expressions/object-literals.d.ts +5 -1
- package/dist/frontend/lowering/expressions/object-literals.js +951 -240
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/optional-chains.js +71 -21
- package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
- package/dist/frontend/lowering/expressions/property-access.d.ts +39 -0
- package/dist/frontend/lowering/expressions/property-access.js +1141 -87
- package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/relational.js +262 -4
- package/dist/frontend/lowering/expressions/relational.js.map +1 -1
- package/dist/frontend/lowering/expressions/typeof.js +25 -0
- package/dist/frontend/lowering/expressions/typeof.js.map +1 -1
- package/dist/frontend/lowering/expressions/union-fields.d.ts +20 -1
- package/dist/frontend/lowering/expressions/union-fields.js +103 -13
- package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
- package/dist/frontend/lowering/expressions/updates.js +156 -22
- package/dist/frontend/lowering/expressions/updates.js.map +1 -1
- package/dist/frontend/lowering/frozen-records.d.ts +6 -0
- package/dist/frontend/lowering/frozen-records.js +10 -4
- package/dist/frontend/lowering/frozen-records.js.map +1 -1
- package/dist/frontend/lowering/frozen-records.test.d.ts +1 -0
- package/dist/frontend/lowering/frozen-records.test.js +44 -0
- package/dist/frontend/lowering/frozen-records.test.js.map +1 -0
- package/dist/frontend/lowering/function-names.d.ts +9 -0
- package/dist/frontend/lowering/function-names.js +95 -0
- package/dist/frontend/lowering/function-names.js.map +1 -0
- package/dist/frontend/lowering/function-returns.js +42 -13
- package/dist/frontend/lowering/function-returns.js.map +1 -1
- package/dist/frontend/lowering/general-streams.js +5 -0
- package/dist/frontend/lowering/general-streams.js.map +1 -1
- package/dist/frontend/lowering/generator-delegation.d.ts +15 -7
- package/dist/frontend/lowering/generator-delegation.js +301 -118
- package/dist/frontend/lowering/generator-delegation.js.map +1 -1
- package/dist/frontend/lowering/generic-functions.d.ts +75 -0
- package/dist/frontend/lowering/generic-functions.js +790 -18
- package/dist/frontend/lowering/generic-functions.js.map +1 -1
- package/dist/frontend/lowering/global-function-values.d.ts +25 -0
- package/dist/frontend/lowering/global-function-values.js +193 -0
- package/dist/frontend/lowering/global-function-values.js.map +1 -0
- package/dist/frontend/lowering/global-values.d.ts +15 -4
- package/dist/frontend/lowering/global-values.js +67 -9
- package/dist/frontend/lowering/global-values.js.map +1 -1
- package/dist/frontend/lowering/handle-properties.js +34 -1
- package/dist/frontend/lowering/handle-properties.js.map +1 -1
- package/dist/frontend/lowering/host-global-values.d.ts +31 -0
- package/dist/frontend/lowering/host-global-values.js +121 -0
- package/dist/frontend/lowering/host-global-values.js.map +1 -0
- package/dist/frontend/lowering/host-globals.d.ts +74 -0
- package/dist/frontend/lowering/host-globals.js +344 -0
- package/dist/frontend/lowering/host-globals.js.map +1 -0
- package/dist/frontend/lowering/http2-constants.js +1 -1
- package/dist/frontend/lowering/iterator-adapters.js +46 -17
- package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
- package/dist/frontend/lowering/iterator-prototype.d.ts +30 -0
- package/dist/frontend/lowering/iterator-prototype.js +160 -0
- package/dist/frontend/lowering/iterator-prototype.js.map +1 -0
- package/dist/frontend/lowering/key-order-witness.d.ts +54 -0
- package/dist/frontend/lowering/key-order-witness.js +571 -9
- package/dist/frontend/lowering/key-order-witness.js.map +1 -1
- package/dist/frontend/lowering/key-order-witness.test.js +1 -0
- package/dist/frontend/lowering/key-order-witness.test.js.map +1 -1
- package/dist/frontend/lowering/lib-boundary.js +25 -3
- package/dist/frontend/lowering/lib-boundary.js.map +1 -1
- package/dist/frontend/lowering/lower-assert.js +140 -16
- package/dist/frontend/lowering/lower-assert.js.map +1 -1
- package/dist/frontend/lowering/lower-async-iteration.d.ts +11 -0
- package/dist/frontend/lowering/lower-async-iteration.js +15 -0
- package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
- package/dist/frontend/lowering/lower-builtin-values.d.ts +36 -6
- package/dist/frontend/lowering/lower-builtin-values.js +342 -58
- package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.d.ts +47 -1
- package/dist/frontend/lowering/lower-calls.js +1354 -273
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.test.d.ts +1 -0
- package/dist/frontend/lowering/lower-calls.test.js +121 -0
- package/dist/frontend/lowering/lower-calls.test.js.map +1 -0
- package/dist/frontend/lowering/lower-classes.d.ts +36 -5
- package/dist/frontend/lowering/lower-classes.js +630 -89
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-event-emitter.d.ts +15 -2
- package/dist/frontend/lowering/lower-event-emitter.js +610 -98
- package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.d.ts +15 -1
- package/dist/frontend/lowering/lower-exprs.js +96 -20
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-functions.js +27 -6
- package/dist/frontend/lowering/lower-functions.js.map +1 -1
- package/dist/frontend/lowering/lower-generators.js +57 -10
- package/dist/frontend/lowering/lower-generators.js.map +1 -1
- package/dist/frontend/lowering/lower-global-value.d.ts +6 -0
- package/dist/frontend/lowering/lower-global-value.js +14 -5
- package/dist/frontend/lowering/lower-global-value.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.d.ts +4 -0
- package/dist/frontend/lowering/lower-inspect.js +713 -92
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.js +135 -27
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-namespaces.js +18 -0
- package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
- package/dist/frontend/lowering/lower-node-island.d.ts +35 -4
- package/dist/frontend/lowering/lower-node-island.js +472 -67
- package/dist/frontend/lowering/lower-node-island.js.map +1 -1
- package/dist/frontend/lowering/lower-server.js +463 -96
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-shared-modules.js +13 -1
- package/dist/frontend/lowering/lower-shared-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-stdlib.d.ts +3 -2
- package/dist/frontend/lowering/lower-stdlib.js +77 -18
- package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.d.ts +24 -4
- package/dist/frontend/lowering/lower-stmts.js +831 -136
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.js +126 -8
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lower-timers.js +243 -48
- package/dist/frontend/lowering/lower-timers.js.map +1 -1
- package/dist/frontend/lowering/lower-url.js +6 -3
- package/dist/frontend/lowering/lower-url.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +363 -21
- package/dist/frontend/lowering/lowerer.js +1224 -129
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/lowerer.test.js +19 -1
- package/dist/frontend/lowering/lowerer.test.js.map +1 -1
- package/dist/frontend/lowering/lowering-facts.d.ts +110 -0
- package/dist/frontend/lowering/lowering-facts.js +323 -0
- package/dist/frontend/lowering/lowering-facts.js.map +1 -0
- package/dist/frontend/lowering/lowering-facts.test.d.ts +1 -0
- package/dist/frontend/lowering/lowering-facts.test.js +100 -0
- package/dist/frontend/lowering/lowering-facts.test.js.map +1 -0
- package/dist/frontend/lowering/module-namespace-elements.js +15 -0
- package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
- package/dist/frontend/lowering/nan-coded-reads.d.ts +27 -4
- package/dist/frontend/lowering/nan-coded-reads.js +112 -9
- package/dist/frontend/lowering/nan-coded-reads.js.map +1 -1
- package/dist/frontend/lowering/new-target.js +2 -2
- package/dist/frontend/lowering/nullish-empty-pattern.d.ts +17 -0
- package/dist/frontend/lowering/nullish-empty-pattern.js +118 -0
- package/dist/frontend/lowering/nullish-empty-pattern.js.map +1 -0
- package/dist/frontend/lowering/optional-arguments.d.ts +4 -0
- package/dist/frontend/lowering/optional-arguments.js +26 -2
- package/dist/frontend/lowering/optional-arguments.js.map +1 -1
- package/dist/frontend/lowering/partial-assertions.d.ts +36 -0
- package/dist/frontend/lowering/partial-assertions.js +189 -0
- package/dist/frontend/lowering/partial-assertions.js.map +1 -0
- package/dist/frontend/lowering/primitive-throws.d.ts +100 -0
- package/dist/frontend/lowering/primitive-throws.js +241 -0
- package/dist/frontend/lowering/primitive-throws.js.map +1 -0
- package/dist/frontend/lowering/primitive-wrappers.d.ts +34 -0
- package/dist/frontend/lowering/primitive-wrappers.js +221 -0
- package/dist/frontend/lowering/primitive-wrappers.js.map +1 -0
- package/dist/frontend/lowering/private-statics.d.ts +46 -0
- package/dist/frontend/lowering/private-statics.js +322 -0
- package/dist/frontend/lowering/private-statics.js.map +1 -0
- package/dist/frontend/lowering/record-inherited.d.ts +17 -1
- package/dist/frontend/lowering/record-inherited.js +16 -2
- package/dist/frontend/lowering/record-inherited.js.map +1 -1
- package/dist/frontend/lowering/record-links.d.ts +73 -0
- package/dist/frontend/lowering/record-links.js +797 -0
- package/dist/frontend/lowering/record-links.js.map +1 -0
- package/dist/frontend/lowering/record-sources.d.ts +12 -1
- package/dist/frontend/lowering/record-sources.js +60 -0
- package/dist/frontend/lowering/record-sources.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-provenance.d.ts +27 -7
- package/dist/frontend/lowering/runtime-optional-provenance.js +25 -11
- package/dist/frontend/lowering/runtime-optional-provenance.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-report.d.ts +40 -0
- package/dist/frontend/lowering/runtime-optional-report.js +300 -0
- package/dist/frontend/lowering/runtime-optional-report.js.map +1 -0
- package/dist/frontend/lowering/scoped-type-memo.test.d.ts +1 -0
- package/dist/frontend/lowering/scoped-type-memo.test.js +86 -0
- package/dist/frontend/lowering/scoped-type-memo.test.js.map +1 -0
- package/dist/frontend/lowering/static-typeof.d.ts +3 -1
- package/dist/frontend/lowering/static-typeof.js +6 -1
- package/dist/frontend/lowering/static-typeof.js.map +1 -1
- package/dist/frontend/lowering/strict-equality.d.ts +4 -0
- package/dist/frontend/lowering/strict-equality.js +14 -0
- package/dist/frontend/lowering/strict-equality.js.map +1 -1
- package/dist/frontend/lowering/strict-mode.d.ts +1 -5
- package/dist/frontend/lowering/strict-mode.js +4 -30
- package/dist/frontend/lowering/strict-mode.js.map +1 -1
- package/dist/frontend/lowering/structural-instances.d.ts +7 -0
- package/dist/frontend/lowering/structural-instances.js +23 -0
- package/dist/frontend/lowering/structural-instances.js.map +1 -1
- package/dist/frontend/lowering/surfaces.d.ts +42 -1
- package/dist/frontend/lowering/surfaces.js +212 -71
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/lowering/union-retag.d.ts +13 -1
- package/dist/frontend/lowering/union-retag.js +55 -1
- package/dist/frontend/lowering/union-retag.js.map +1 -1
- package/dist/frontend/lowering/union-retag.test.js +51 -0
- package/dist/frontend/lowering/union-retag.test.js.map +1 -1
- package/dist/frontend/lowering/unit-journal.d.ts +136 -17
- package/dist/frontend/lowering/unit-journal.js +324 -53
- package/dist/frontend/lowering/unit-journal.js.map +1 -1
- package/dist/frontend/lowering/unit-journal.test.js +126 -3
- package/dist/frontend/lowering/unit-journal.test.js.map +1 -1
- package/dist/frontend/lowering/unit-reuse.d.ts +92 -0
- package/dist/frontend/lowering/unit-reuse.js +1008 -0
- package/dist/frontend/lowering/unit-reuse.js.map +1 -0
- package/dist/frontend/lowering/width-lift.d.ts +12 -0
- package/dist/frontend/lowering/zlib-constants.js +3 -2
- package/dist/frontend/lowering/zlib-constants.js.map +1 -1
- package/dist/frontend/npm-file-import.test.d.ts +1 -0
- package/dist/frontend/npm-file-import.test.js +76 -0
- package/dist/frontend/npm-file-import.test.js.map +1 -0
- package/dist/frontend/npm-static.js +95 -11
- package/dist/frontend/npm-static.js.map +1 -1
- package/dist/frontend/npm-static.test.js +95 -2
- package/dist/frontend/npm-static.test.js.map +1 -1
- package/dist/frontend/npm.d.ts +9 -0
- package/dist/frontend/npm.js +82 -0
- package/dist/frontend/npm.js.map +1 -1
- package/dist/frontend/pipeline-native.js +2 -1
- package/dist/frontend/pipeline-native.js.map +1 -1
- package/dist/frontend/pipeline.d.ts +9 -4
- package/dist/frontend/pipeline.js +162 -38
- package/dist/frontend/pipeline.js.map +1 -1
- package/dist/frontend/pipeline.test.js +68 -11
- package/dist/frontend/pipeline.test.js.map +1 -1
- package/dist/frontend/program-node.d.ts +3 -0
- package/dist/frontend/program-node.js +13 -6
- package/dist/frontend/program-node.js.map +1 -1
- package/dist/frontend/program.d.ts +71 -2
- package/dist/frontend/program.js +836 -411
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/program.test.js +37 -1
- package/dist/frontend/program.test.js.map +1 -1
- package/dist/frontend/provenance-core.js +4 -0
- package/dist/frontend/provenance-core.js.map +1 -1
- package/dist/frontend/services-node.d.ts +7 -0
- package/dist/frontend/services-node.js +32 -1
- package/dist/frontend/services-node.js.map +1 -1
- package/dist/frontend/services-node.test.js +51 -0
- package/dist/frontend/services-node.test.js.map +1 -1
- package/dist/frontend/services.d.ts +14 -0
- package/dist/frontend/services.js +52 -2
- package/dist/frontend/services.js.map +1 -1
- package/dist/frontend/services.test.js +61 -1
- package/dist/frontend/services.test.js.map +1 -1
- package/dist/frontend/shape-inference/analyze.d.ts +5 -0
- package/dist/frontend/shape-inference/analyze.js +104 -4
- package/dist/frontend/shape-inference/analyze.js.map +1 -1
- package/dist/frontend/shape-inference/domain.js +0 -1
- package/dist/frontend/shape-inference/domain.js.map +1 -1
- package/dist/frontend/shape-inference/index.js +5 -1
- package/dist/frontend/shape-inference/index.js.map +1 -1
- package/dist/frontend/shape-inference/memo.d.ts +2 -1
- package/dist/frontend/shape-inference/memo.js +6 -2
- package/dist/frontend/shape-inference/memo.js.map +1 -1
- package/dist/frontend/shape-inference/overlay.d.ts +1 -1
- package/dist/frontend/shape-inference/overlay.js +184 -4
- package/dist/frontend/shape-inference/overlay.js.map +1 -1
- package/dist/frontend/shape-inference/static-objects.js +11 -6
- package/dist/frontend/shape-inference/static-objects.js.map +1 -1
- package/dist/frontend/source-phase-imports.test.d.ts +1 -0
- package/dist/frontend/source-phase-imports.test.js +37 -0
- package/dist/frontend/source-phase-imports.test.js.map +1 -0
- package/dist/frontend/tier-analysis.d.ts +9 -0
- package/dist/frontend/tier-analysis.js +1 -0
- package/dist/frontend/tier-analysis.js.map +1 -1
- package/dist/frontend/ts7/ast-node.d.ts +6 -1
- package/dist/frontend/ts7/ast-node.js +12 -0
- package/dist/frontend/ts7/ast-node.js.map +1 -1
- package/dist/frontend/ts7/ast-wire-protocols.test.js +11 -3
- package/dist/frontend/ts7/ast-wire-protocols.test.js.map +1 -1
- package/dist/frontend/ts7/ast-wire.js +3 -5
- package/dist/frontend/ts7/ast-wire.js.map +1 -1
- package/dist/frontend/ts7/checker-backend.d.ts +13 -0
- package/dist/frontend/ts7/checker-backend.js +84 -2
- package/dist/frontend/ts7/checker-backend.js.map +1 -1
- package/dist/frontend/ts7/checker-backend.test.js +126 -2
- package/dist/frontend/ts7/checker-backend.test.js.map +1 -1
- package/dist/frontend/ts7/program-host.d.ts +22 -1
- package/dist/frontend/ts7/program-host.js +49 -4
- package/dist/frontend/ts7/program-host.js.map +1 -1
- package/dist/frontend/ts7/program-host.test.js +83 -0
- package/dist/frontend/ts7/program-host.test.js.map +1 -1
- package/dist/frontend/ts7/rpc-process.d.ts +16 -1
- package/dist/frontend/ts7/rpc-process.js +170 -92
- package/dist/frontend/ts7/rpc-process.js.map +1 -1
- package/dist/frontend/ts7/rpc-process.test.js +49 -21
- package/dist/frontend/ts7/rpc-process.test.js.map +1 -1
- package/dist/frontend/tsc-codes.d.ts +57 -3
- package/dist/frontend/tsc-codes.js +956 -101
- package/dist/frontend/tsc-codes.js.map +1 -1
- package/dist/frontend/tsc-codes.test.js +221 -12
- package/dist/frontend/tsc-codes.test.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +98 -11
- package/dist/frontend/type-mapper.js +770 -182
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +224 -15
- package/dist/index.js.map +1 -1
- package/dist/index.test.d.ts +1 -0
- package/dist/index.test.js +60 -0
- package/dist/index.test.js.map +1 -0
- package/dist/ir/api.d.ts +1 -1
- package/dist/ir/api.js +1 -1
- package/dist/ir/api.js.map +1 -1
- package/dist/ir/build.d.ts +3 -2
- package/dist/ir/build.js +4 -2
- package/dist/ir/build.js.map +1 -1
- package/dist/ir/builtin-effects.js +96 -0
- package/dist/ir/builtin-effects.js.map +1 -1
- package/dist/ir/builtin-signatures.d.ts +1 -1
- package/dist/ir/builtin-signatures.js +453 -26
- package/dist/ir/builtin-signatures.js.map +1 -1
- package/dist/ir/callback-specialization.d.ts +3 -2
- package/dist/ir/callback-specialization.js +35 -25
- package/dist/ir/callback-specialization.js.map +1 -1
- package/dist/ir/capture-values.d.ts +8 -4
- package/dist/ir/capture-values.js +9 -6
- package/dist/ir/capture-values.js.map +1 -1
- package/dist/ir/char-unit-locals.d.ts +6 -2
- package/dist/ir/char-unit-locals.js +11 -2
- package/dist/ir/char-unit-locals.js.map +1 -1
- package/dist/ir/class-key-index.d.ts +18 -0
- package/dist/ir/class-key-index.js +29 -0
- package/dist/ir/class-key-index.js.map +1 -0
- package/dist/ir/class-key-index.test.d.ts +1 -0
- package/dist/ir/class-key-index.test.js +25 -0
- package/dist/ir/class-key-index.test.js.map +1 -0
- package/dist/ir/codec.d.ts +82 -0
- package/dist/ir/codec.generated.d.ts +13 -0
- package/dist/ir/codec.generated.js +5350 -0
- package/dist/ir/codec.generated.js.map +1 -0
- package/dist/ir/codec.js +325 -0
- package/dist/ir/codec.js.map +1 -0
- package/dist/ir/codec.test.d.ts +1 -0
- package/dist/ir/codec.test.js +225 -0
- package/dist/ir/codec.test.js.map +1 -0
- package/dist/ir/constant-globals.d.ts +5 -2
- package/dist/ir/constant-globals.js +25 -27
- package/dist/ir/constant-globals.js.map +1 -1
- package/dist/ir/expression-inlining.d.ts +4 -2
- package/dist/ir/expression-inlining.js +8 -2
- package/dist/ir/expression-inlining.js.map +1 -1
- package/dist/ir/field-values.d.ts +5 -2
- package/dist/ir/field-values.js +32 -21
- package/dist/ir/field-values.js.map +1 -1
- package/dist/ir/fields.generated.d.ts +29 -10
- package/dist/ir/fields.generated.js +1039 -11
- package/dist/ir/fields.generated.js.map +1 -1
- package/dist/ir/fields.test.js +46 -2
- package/dist/ir/fields.test.js.map +1 -1
- package/dist/ir/final-fields.js +1 -1
- package/dist/ir/final-fields.js.map +1 -1
- package/dist/ir/function-references.d.ts +6 -4
- package/dist/ir/function-references.js +11 -4
- package/dist/ir/function-references.js.map +1 -1
- package/dist/ir/function-references.test.js +14 -0
- package/dist/ir/function-references.test.js.map +1 -1
- package/dist/ir/init-only-globals.d.ts +4 -2
- package/dist/ir/init-only-globals.js +17 -18
- package/dist/ir/init-only-globals.js.map +1 -1
- package/dist/ir/inline-array-sources.js +4 -1
- package/dist/ir/inline-array-sources.js.map +1 -1
- package/dist/ir/inline-array-views.d.ts +13 -0
- package/dist/ir/inline-array-views.js +945 -0
- package/dist/ir/inline-array-views.js.map +1 -0
- package/dist/ir/inline-arrays.d.ts +7 -0
- package/dist/ir/inline-arrays.js +190 -55
- package/dist/ir/inline-arrays.js.map +1 -1
- package/dist/ir/inline-arrays.test.js +140 -2
- package/dist/ir/inline-arrays.test.js.map +1 -1
- package/dist/ir/int32-slots.js +7 -0
- package/dist/ir/int32-slots.js.map +1 -1
- package/dist/ir/integer-ranges.js +16 -6
- package/dist/ir/integer-ranges.js.map +1 -1
- package/dist/ir/ir.d.ts +130 -44
- package/dist/ir/ir.js +7 -0
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/js-groups.d.ts +51 -0
- package/dist/ir/js-groups.js +394 -0
- package/dist/ir/js-groups.js.map +1 -0
- package/dist/ir/js-groups.test.d.ts +1 -0
- package/dist/ir/js-groups.test.js +555 -0
- package/dist/ir/js-groups.test.js.map +1 -0
- package/dist/ir/js-ic.d.ts +10 -9
- package/dist/ir/js-ic.js +58 -25
- package/dist/ir/js-ic.js.map +1 -1
- package/dist/ir/js-ic.test.js +37 -3
- package/dist/ir/js-ic.test.js.map +1 -1
- package/dist/ir/jsval.js +374 -63
- package/dist/ir/jsval.js.map +1 -1
- package/dist/ir/jsval.test.js +96 -2
- package/dist/ir/jsval.test.js.map +1 -1
- package/dist/ir/loop-entry-ranges.js +112 -9
- package/dist/ir/loop-entry-ranges.js.map +1 -1
- package/dist/ir/loop-entry-ranges.test.js +40 -0
- package/dist/ir/loop-entry-ranges.test.js.map +1 -1
- package/dist/ir/node-index.d.ts +23 -6
- package/dist/ir/node-index.js +126 -49
- package/dist/ir/node-index.js.map +1 -1
- package/dist/ir/numeric-call-specialization.d.ts +4 -2
- package/dist/ir/numeric-call-specialization.js +40 -26
- package/dist/ir/numeric-call-specialization.js.map +1 -1
- package/dist/ir/paired-while-loops.d.ts +4 -2
- package/dist/ir/paired-while-loops.js +8 -2
- package/dist/ir/paired-while-loops.js.map +1 -1
- package/dist/ir/parameter-versions.d.ts +13 -3
- package/dist/ir/parameter-versions.js +63 -40
- package/dist/ir/parameter-versions.js.map +1 -1
- package/dist/ir/property-bags.d.ts +4 -2
- package/dist/ir/property-bags.js +22 -17
- package/dist/ir/property-bags.js.map +1 -1
- package/dist/ir/receiver-readers.js +58 -2
- package/dist/ir/receiver-readers.js.map +1 -1
- package/dist/ir/row-pairs.d.ts +4 -2
- package/dist/ir/row-pairs.js +12 -11
- package/dist/ir/row-pairs.js.map +1 -1
- package/dist/ir/runtime-features.d.ts +139 -5
- package/dist/ir/runtime-features.js +397 -19
- package/dist/ir/runtime-features.js.map +1 -1
- package/dist/ir/runtime-features.test.js +135 -1
- package/dist/ir/runtime-features.test.js.map +1 -1
- package/dist/ir/runtime-jam-loops.d.ts +35 -0
- package/dist/ir/runtime-jam-loops.js +604 -0
- package/dist/ir/runtime-jam-loops.js.map +1 -0
- package/dist/ir/runtime-jam-loops.test.d.ts +1 -0
- package/dist/ir/runtime-jam-loops.test.js +565 -0
- package/dist/ir/runtime-jam-loops.test.js.map +1 -0
- package/dist/ir/saturating-loop-jams.d.ts +11 -2
- package/dist/ir/saturating-loop-jams.js +56 -16
- package/dist/ir/saturating-loop-jams.js.map +1 -1
- package/dist/ir/saturating-loop-jams.test.js +39 -1
- package/dist/ir/saturating-loop-jams.test.js.map +1 -1
- package/dist/ir/scalar-records.d.ts +5 -2
- package/dist/ir/scalar-records.js +12 -2
- package/dist/ir/scalar-records.js.map +1 -1
- package/dist/ir/self-captures.d.ts +4 -2
- package/dist/ir/self-captures.js +40 -28
- package/dist/ir/self-captures.js.map +1 -1
- package/dist/ir/self-captures.test.js +15 -0
- package/dist/ir/self-captures.test.js.map +1 -1
- package/dist/ir/serialize.d.ts +8 -2
- package/dist/ir/serialize.js +92 -24
- package/dist/ir/serialize.js.map +1 -1
- package/dist/ir/serialize.test.js +26 -0
- package/dist/ir/serialize.test.js.map +1 -1
- package/dist/ir/tiers.js +1 -0
- package/dist/ir/tiers.js.map +1 -1
- package/dist/ir/traverse.js +4 -0
- package/dist/ir/traverse.js.map +1 -1
- package/dist/ir/typed-argument-clones.d.ts +30 -0
- package/dist/ir/typed-argument-clones.js +789 -0
- package/dist/ir/typed-argument-clones.js.map +1 -0
- package/dist/ir/union-arm-loops.d.ts +3 -0
- package/dist/ir/union-arm-loops.js +373 -0
- package/dist/ir/union-arm-loops.js.map +1 -0
- package/dist/ir/union-arm-loops.test.d.ts +1 -0
- package/dist/ir/union-arm-loops.test.js +230 -0
- package/dist/ir/union-arm-loops.test.js.map +1 -0
- package/dist/ir/validate.js +170 -22
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +46 -0
- package/dist/ir/validate.test.js.map +1 -1
- package/dist/library/compiler-self-identity.d.ts +8 -2
- package/dist/library/compiler-self-identity.js +92 -18
- package/dist/library/compiler-self-identity.js.map +1 -1
- package/dist/library/compiler-self-identity.test.js +150 -3
- package/dist/library/compiler-self-identity.test.js.map +1 -1
- package/dist/library/int-infer.d.ts +5 -0
- package/dist/library/int-infer.js +15 -3
- package/dist/library/int-infer.js.map +1 -1
- package/dist/library/ir-policy.js +4 -0
- package/dist/library/ir-policy.js.map +1 -1
- package/dist/library/library-cache.d.ts +4 -0
- package/dist/library/library-cache.js +2 -0
- package/dist/library/library-cache.js.map +1 -1
- package/dist/library/library-cache.test.js +26 -0
- package/dist/library/library-cache.test.js.map +1 -1
- package/dist/library/prepare.js +99 -31
- package/dist/library/prepare.js.map +1 -1
- package/dist/native/cache.d.ts +7 -0
- package/dist/native/cache.js +49 -0
- package/dist/native/cache.js.map +1 -1
- package/dist/native/cache.test.js +13 -1
- package/dist/native/cache.test.js.map +1 -1
- package/dist/native/cli.js +2 -0
- package/dist/native/cli.js.map +1 -1
- package/dist/native/compiler.js +26 -5
- package/dist/native/compiler.js.map +1 -1
- package/dist/native/executable-cache-open.test.js +31 -5
- package/dist/native/executable-cache-open.test.js.map +1 -1
- package/dist/native/executable-cache.d.ts +6 -1
- package/dist/native/executable-cache.js +7 -1
- package/dist/native/executable-cache.js.map +1 -1
- package/dist/native/prepare.d.ts +3 -0
- package/dist/native/prepare.js +74 -28
- package/dist/native/prepare.js.map +1 -1
- package/dist/native/prepare.test.js +25 -3
- package/dist/native/prepare.test.js.map +1 -1
- package/dist/native/sanitizer.js +63 -4
- package/dist/native/sanitizer.js.map +1 -1
- package/dist/native/sanitizer.test.js +93 -2
- package/dist/native/sanitizer.test.js.map +1 -1
- package/dist/native/toolchain.js +9 -2
- package/dist/native/toolchain.js.map +1 -1
- package/dist/node-islands/boundary.d.ts +37 -1
- package/dist/node-islands/boundary.js +65 -7
- package/dist/node-islands/boundary.js.map +1 -1
- package/dist/node-islands/boundary.test.d.ts +1 -0
- package/dist/node-islands/boundary.test.js +76 -0
- package/dist/node-islands/boundary.test.js.map +1 -0
- package/dist/node-islands/detect.d.ts +27 -1
- package/dist/node-islands/detect.js +475 -40
- package/dist/node-islands/detect.js.map +1 -1
- package/dist/node-islands/detect.test.js +175 -4
- package/dist/node-islands/detect.test.js.map +1 -1
- package/dist/node-islands/effect-gate.js +30 -20
- package/dist/node-islands/effect-gate.js.map +1 -1
- package/dist/node-islands/effect-gate.test.js +4 -1
- package/dist/node-islands/effect-gate.test.js.map +1 -1
- package/dist/node-islands/graph-islands.d.ts +40 -0
- package/dist/node-islands/graph-islands.js +128 -0
- package/dist/node-islands/graph-islands.js.map +1 -0
- package/dist/node-islands/growth.d.ts +57 -0
- package/dist/node-islands/growth.js +205 -0
- package/dist/node-islands/growth.js.map +1 -0
- package/dist/node-islands/libnode.d.ts +1 -1
- package/dist/node-islands/libnode.js +1 -1
- package/dist/node-islands/libnode.js.map +1 -1
- package/dist/node-islands/modules.d.ts +28 -0
- package/dist/node-islands/modules.js +156 -0
- package/dist/node-islands/modules.js.map +1 -1
- package/dist/node-islands/modules.test.js +105 -1
- package/dist/node-islands/modules.test.js.map +1 -1
- package/dist/node-islands/policy.js +2 -3
- package/dist/node-islands/policy.js.map +1 -1
- package/dist/node-islands/probe-recorder.d.ts +1 -0
- package/dist/node-islands/probe-recorder.js +596 -0
- package/dist/node-islands/probe-recorder.js.map +1 -0
- package/dist/node-islands/probe-recorder.test.d.ts +1 -0
- package/dist/node-islands/probe-recorder.test.js +80 -0
- package/dist/node-islands/probe-recorder.test.js.map +1 -0
- package/dist/node-islands/report.d.ts +12 -0
- package/dist/node-islands/report.js +28 -0
- package/dist/node-islands/report.js.map +1 -1
- package/dist/node-islands/report.test.js +4 -0
- package/dist/node-islands/report.test.js.map +1 -1
- package/dist/node-islands/rules.js +9 -0
- package/dist/node-islands/rules.js.map +1 -1
- package/dist/node-islands/scan.d.ts +16 -1
- package/dist/node-islands/scan.js +110 -9
- package/dist/node-islands/scan.js.map +1 -1
- package/dist/node-islands/snapshot.d.ts +38 -1
- package/dist/node-islands/snapshot.js +165 -161
- package/dist/node-islands/snapshot.js.map +1 -1
- package/dist/node-islands/snapshot.test.js +63 -2
- package/dist/node-islands/snapshot.test.js.map +1 -1
- package/dist/node-islands/summary.js +8 -0
- package/dist/node-islands/summary.js.map +1 -1
- package/dist/node-islands/type-strip.d.ts +11 -0
- package/dist/node-islands/type-strip.js +157 -0
- package/dist/node-islands/type-strip.js.map +1 -0
- package/dist/node-islands/type-strip.test.d.ts +1 -0
- package/dist/node-islands/type-strip.test.js +31 -0
- package/dist/node-islands/type-strip.test.js.map +1 -0
- package/dist/project-config.d.ts +4 -0
- package/dist/project-config.js +19 -0
- package/dist/project-config.js.map +1 -1
- package/dist/project-config.test.js +10 -0
- package/dist/project-config.test.js.map +1 -1
- package/dist/wasm/translate.js +11 -5
- package/dist/wasm/translate.js.map +1 -1
- package/dist/wasm/translate.test.js +35 -0
- package/dist/wasm/translate.test.js.map +1 -1
- package/package.json +20 -20
- package/surface-manifest.json +221 -122
|
@@ -12,6 +12,61 @@ export declare function recordToEnvPairs(lowerer: Lowerer, node: ts.Expression):
|
|
|
12
12
|
/** True iff `node` is THE ambient `process.env` object itself (the
|
|
13
13
|
* receiver of an env read). */
|
|
14
14
|
export declare function isProcessEnv(lowerer: Lowerer, node: ts.Expression): boolean;
|
|
15
|
+
/** Whether `node` is a value HELD from `process.env` through a chain of
|
|
16
|
+
* bindings: `const env = process.env`, `const alias = env`, or the
|
|
17
|
+
* destructured `const { env } = process`. Node's held value IS the
|
|
18
|
+
* environment object. Here the binding holds a snapshot record of it:
|
|
19
|
+
* MEMBER accesses (`env.X`, `env[k]`, their writes, `delete env.X`) reroute
|
|
20
|
+
* to the live table (see heldEnvValueType), and every BARE use re-snapshots
|
|
21
|
+
* the environment at that use (see lowerIdentifierExpr), so both observe
|
|
22
|
+
* the environment as Node's single object would.
|
|
23
|
+
*
|
|
24
|
+
* The ambient `process.env` itself is NOT a hold (depth === 0): it keeps
|
|
25
|
+
* its own direct lowering (envGet/envSet intrinsics, its existing snapshot
|
|
26
|
+
* when it escapes as a value), which is what Node's reads and writes see. */
|
|
27
|
+
export declare function holdsEnvSnapshot(lowerer: Lowerer, node: ts.Expression | undefined, depth?: number): boolean;
|
|
28
|
+
/** `a === b`, `a == b` and their negations where an operand is the
|
|
29
|
+
* environment object (denotesEnvironment). Every use of a held value reads
|
|
30
|
+
* a snapshot, so the snapshots would never be identical, while Node
|
|
31
|
+
* compares the one environment object:
|
|
32
|
+
* - two operands that both denote it compare equal, folded (neither
|
|
33
|
+
* operand has an effect: each is a binding read or `process.env`);
|
|
34
|
+
* - one compared with a primitive, `null` or `undefined` keeps the
|
|
35
|
+
* ordinary lowering, whose answer (never equal) is Node's;
|
|
36
|
+
* - one compared with another object is refused (heldEnvIdentityDiag).
|
|
37
|
+
* Null when no operand denotes the environment. */
|
|
38
|
+
export declare function lowerEnvironmentIdentity(lowerer: Lowerer, expr: ts.BinaryExpression, loc: SrcLoc): IrExpr | null;
|
|
39
|
+
/** Whether a MEMBER access (`env.X`, `env[k]`, and their writes) through a
|
|
40
|
+
* value HELD from `process.env` can go to the live environment table: the
|
|
41
|
+
* held binding's type must be exactly the env snapshot record (a pure
|
|
42
|
+
* index-signature shape whose value slot is `string | undefined`, what
|
|
43
|
+
* `process.env` maps to). Returns that value type, or null — a hold whose
|
|
44
|
+
* type differs keeps the snapshot record for reads and refuses writes (see
|
|
45
|
+
* refuseHeldEnvWrite). Member accesses alias the live table the way Node's
|
|
46
|
+
* do. A BARE use of the held value (a spread source, Object.keys, an
|
|
47
|
+
* argument, a return) is not a member access and takes a fresh snapshot of
|
|
48
|
+
* the environment at that use site (lowerIdentifierExpr). */
|
|
49
|
+
export declare function heldEnvValueType(lowerer: Lowerer, receiver: ts.Expression): IrType | null;
|
|
50
|
+
/** Refuse a BINDING that holds `process.env` under a type which is not the
|
|
51
|
+
* env record — `const env: Record<string, string> = process.env as any`, a
|
|
52
|
+
* fixed-field annotation, `const e: any = process.env`. Node's hold IS the
|
|
53
|
+
* environment object, so member reads through it see the live table;
|
|
54
|
+
* here the hold is a snapshot record taken at the initializer, so reads
|
|
55
|
+
* would silently observe the environment as it was then (writes are
|
|
56
|
+
* already refused — refuseHeldEnvWrite). Refuse the hold where it is
|
|
57
|
+
* created instead of letting its later reads drift. `name` is the bound
|
|
58
|
+
* identifier, `blame` the declaration the diagnostic points at. */
|
|
59
|
+
export declare function refuseHeldEnvCopyHold(lowerer: Lowerer, name: ts.Identifier, blame: ts.Node): void;
|
|
60
|
+
/** Refuse a write through a value HELD from `process.env` that cannot take
|
|
61
|
+
* the live path: the compound and update forms (`env.X += v`, `env.X++`)
|
|
62
|
+
* reach this wrapper, and so does any write through a hold whose type is
|
|
63
|
+
* not the env record. The held value is a snapshot record, so such a write
|
|
64
|
+
* would land on the copy while the real environment kept its old value;
|
|
65
|
+
* Node writes setenv(3) through the very same object, so a program relying
|
|
66
|
+
* on it would silently diverge. Plain `=`, computed-key and `delete` writes
|
|
67
|
+
* through the env record alias the live table instead (lower-stmts.ts,
|
|
68
|
+
* element-access.ts); `target` is the write's or delete's access node. */
|
|
69
|
+
export declare function refuseHeldEnvWrite(lowerer: Lowerer, target: ts.Node): void;
|
|
15
70
|
/** The interned `string | undefined` union — the type every env read
|
|
16
71
|
* produces (withUndefinedArm interns [string, undefined] in canonical
|
|
17
72
|
* order, so the string arm's tag is 0 and the undefined arm's is 1,
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { dynUndefinedExpr } from "../../../ir/build.js";
|
|
2
2
|
import * as ts from "../../ts7/adapter.js";
|
|
3
|
-
import {} from "../lowerer.js";
|
|
3
|
+
import { PoisonError } from "../lowerer.js";
|
|
4
4
|
import { locOf } from "../../program.js";
|
|
5
|
+
import { heldEnvHoldDiag, heldEnvIdentityDiag, heldEnvReassignedDiag, heldEnvWriteDiag, } from "../../../diagnostics/diagnostic.js";
|
|
6
|
+
import { bindingNeverReassigned } from "../binding-analysis.js";
|
|
7
|
+
import { constituentTypes } from "../../ts7/checker.js";
|
|
5
8
|
import { pairsSnapshotHelper } from "../pairs-snapshot.js";
|
|
6
|
-
import { DYN, STRING, VOID, arrayOf, typeEquals, } from "../../../ir/ir.js";
|
|
9
|
+
import { BOOL, DYN, STRING, VOID, arrayOf, typeEquals, } from "../../../ir/ir.js";
|
|
7
10
|
/** An `env` option object → the [k, v, ...] pairs array cp.execSync
|
|
8
11
|
* consumes. The value must be a record (an index-signature ProcessEnv
|
|
9
12
|
* snapshot — `{ ...process.env, X: y }` — or a plain string-map): its
|
|
@@ -27,6 +30,214 @@ export function recordToEnvPairs(lowerer, node) {
|
|
|
27
30
|
export function isProcessEnv(lowerer, node) {
|
|
28
31
|
return (ts.isPropertyAccessExpression(node) && lowerer.stdlibGlobalMember(node, "process") === "env");
|
|
29
32
|
}
|
|
33
|
+
/** Whether `node` is a value HELD from `process.env` through a chain of
|
|
34
|
+
* bindings: `const env = process.env`, `const alias = env`, or the
|
|
35
|
+
* destructured `const { env } = process`. Node's held value IS the
|
|
36
|
+
* environment object. Here the binding holds a snapshot record of it:
|
|
37
|
+
* MEMBER accesses (`env.X`, `env[k]`, their writes, `delete env.X`) reroute
|
|
38
|
+
* to the live table (see heldEnvValueType), and every BARE use re-snapshots
|
|
39
|
+
* the environment at that use (see lowerIdentifierExpr), so both observe
|
|
40
|
+
* the environment as Node's single object would.
|
|
41
|
+
*
|
|
42
|
+
* The ambient `process.env` itself is NOT a hold (depth === 0): it keeps
|
|
43
|
+
* its own direct lowering (envGet/envSet intrinsics, its existing snapshot
|
|
44
|
+
* when it escapes as a value), which is what Node's reads and writes see. */
|
|
45
|
+
export function holdsEnvSnapshot(lowerer, node, depth = 0) {
|
|
46
|
+
if (node === undefined)
|
|
47
|
+
return false;
|
|
48
|
+
let inner = node;
|
|
49
|
+
for (;;) {
|
|
50
|
+
if (ts.isParenthesizedExpression(inner) ||
|
|
51
|
+
ts.isAsExpression(inner) ||
|
|
52
|
+
ts.isNonNullExpression(inner) ||
|
|
53
|
+
ts.isSatisfiesExpression(inner)) {
|
|
54
|
+
inner = inner.expression;
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
59
|
+
// At depth 0 this IS the ambient object, not a value held from it; as a
|
|
60
|
+
// binding's initializer (depth >= 1) it is the hold's source.
|
|
61
|
+
if (isProcessEnv(lowerer, inner))
|
|
62
|
+
return depth > 0;
|
|
63
|
+
if (!ts.isIdentifier(inner) || depth >= 4)
|
|
64
|
+
return false;
|
|
65
|
+
const symbol = lowerer.checker.getSymbolAtLocation(inner);
|
|
66
|
+
const decl = symbol?.valueDeclaration ?? symbol?.declarations[0];
|
|
67
|
+
if (decl === undefined)
|
|
68
|
+
return false;
|
|
69
|
+
// `const env = process.env` (or an identifier alias of one). The symbol's
|
|
70
|
+
// value declaration is the `const` itself; the written identifier here is
|
|
71
|
+
// a different node than the declared name, so no node identity check.
|
|
72
|
+
// A binding the program reassigns holds the environment only until the
|
|
73
|
+
// reassignment, so it is not a hold (refuseHeldEnvCopyHold refuses it).
|
|
74
|
+
if (ts.isVariableDeclaration(decl)) {
|
|
75
|
+
return (holdsEnvSnapshot(lowerer, decl.initializer, depth + 1) &&
|
|
76
|
+
!reassignedBinding(lowerer, symbol, decl));
|
|
77
|
+
}
|
|
78
|
+
// `const { env } = process` (also `{ env: held }`).
|
|
79
|
+
if (ts.isBindingElement(decl) && ts.isObjectBindingPattern(decl.parent)) {
|
|
80
|
+
const declaration = decl.parent.parent;
|
|
81
|
+
const named = decl.propertyName ?? decl.name;
|
|
82
|
+
if (ts.isVariableDeclaration(declaration) &&
|
|
83
|
+
ts.isIdentifier(named) &&
|
|
84
|
+
named.text === "env" &&
|
|
85
|
+
declaration.initializer !== undefined) {
|
|
86
|
+
return (lowerer.isStdlibGlobal(declaration.initializer, "process") &&
|
|
87
|
+
!reassignedBinding(lowerer, symbol, declaration));
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
/** Whether something writes the binding after its declaration: a `let` or
|
|
93
|
+
* `var` the file assigns (bindingNeverReassigned). A `const` never is. */
|
|
94
|
+
function reassignedBinding(lowerer, symbol, declaration) {
|
|
95
|
+
const list = declaration.parent;
|
|
96
|
+
if (ts.isVariableDeclarationList(list) && (list.flags & ts.NodeFlags.Const) !== 0)
|
|
97
|
+
return false;
|
|
98
|
+
return !bindingNeverReassigned(lowerer, symbol, declaration);
|
|
99
|
+
}
|
|
100
|
+
/** Whether an expression is the environment object to Node: the ambient
|
|
101
|
+
* `process.env` or a value held from it (holdsEnvSnapshot). */
|
|
102
|
+
function denotesEnvironment(lowerer, node) {
|
|
103
|
+
return isProcessEnv(lowerer, unwrapped(node)) || holdsEnvSnapshot(lowerer, node);
|
|
104
|
+
}
|
|
105
|
+
function unwrapped(node) {
|
|
106
|
+
let inner = node;
|
|
107
|
+
while (ts.isParenthesizedExpression(inner) ||
|
|
108
|
+
ts.isAsExpression(inner) ||
|
|
109
|
+
ts.isNonNullExpression(inner) ||
|
|
110
|
+
ts.isSatisfiesExpression(inner))
|
|
111
|
+
inner = inner.expression;
|
|
112
|
+
return inner;
|
|
113
|
+
}
|
|
114
|
+
/** `a === b`, `a == b` and their negations where an operand is the
|
|
115
|
+
* environment object (denotesEnvironment). Every use of a held value reads
|
|
116
|
+
* a snapshot, so the snapshots would never be identical, while Node
|
|
117
|
+
* compares the one environment object:
|
|
118
|
+
* - two operands that both denote it compare equal, folded (neither
|
|
119
|
+
* operand has an effect: each is a binding read or `process.env`);
|
|
120
|
+
* - one compared with a primitive, `null` or `undefined` keeps the
|
|
121
|
+
* ordinary lowering, whose answer (never equal) is Node's;
|
|
122
|
+
* - one compared with another object is refused (heldEnvIdentityDiag).
|
|
123
|
+
* Null when no operand denotes the environment. */
|
|
124
|
+
export function lowerEnvironmentIdentity(lowerer, expr, loc) {
|
|
125
|
+
const op = expr.operatorToken.kind;
|
|
126
|
+
const negated = op === ts.SyntaxKind.ExclamationEqualsEqualsToken ||
|
|
127
|
+
op === ts.SyntaxKind.ExclamationEqualsToken;
|
|
128
|
+
if (!negated &&
|
|
129
|
+
op !== ts.SyntaxKind.EqualsEqualsEqualsToken &&
|
|
130
|
+
op !== ts.SyntaxKind.EqualsEqualsToken)
|
|
131
|
+
return null;
|
|
132
|
+
const left = denotesEnvironment(lowerer, expr.left);
|
|
133
|
+
const right = denotesEnvironment(lowerer, expr.right);
|
|
134
|
+
if (!left && !right)
|
|
135
|
+
return null;
|
|
136
|
+
if (left && right)
|
|
137
|
+
return { kind: "boolLit", value: !negated, type: BOOL, loc };
|
|
138
|
+
if (isPrimitiveOperand(lowerer.typeOf(left ? expr.right : expr.left)))
|
|
139
|
+
return null;
|
|
140
|
+
lowerer.pushDiag(heldEnvIdentityDiag(loc));
|
|
141
|
+
throw new PoisonError();
|
|
142
|
+
}
|
|
143
|
+
/** Whether a checker type has only primitive values (`null` and `undefined`
|
|
144
|
+
* included), which are never the environment object. */
|
|
145
|
+
function isPrimitiveOperand(type) {
|
|
146
|
+
if ((type.flags & ts.TypeFlags.Union) !== 0)
|
|
147
|
+
return constituentTypes(type).every(isPrimitiveOperand);
|
|
148
|
+
return ((type.flags &
|
|
149
|
+
(ts.TypeFlags.Null |
|
|
150
|
+
ts.TypeFlags.Undefined |
|
|
151
|
+
ts.TypeFlags.Void |
|
|
152
|
+
ts.TypeFlags.StringLike |
|
|
153
|
+
ts.TypeFlags.NumberLike |
|
|
154
|
+
ts.TypeFlags.BooleanLike |
|
|
155
|
+
ts.TypeFlags.BigIntLike |
|
|
156
|
+
ts.TypeFlags.ESSymbolLike)) !==
|
|
157
|
+
0);
|
|
158
|
+
}
|
|
159
|
+
/** The receiver expression of a write target — the assignment's or delete's
|
|
160
|
+
* access (`env.X`, `env[k]`), through any compound/update wrapping. Null for
|
|
161
|
+
* targets that write no entry of a receiver. */
|
|
162
|
+
function writeTargetReceiver(node) {
|
|
163
|
+
if (ts.isBinaryExpression(node))
|
|
164
|
+
return writeTargetReceiver(node.left);
|
|
165
|
+
if (ts.isPrefixUnaryExpression(node) || ts.isPostfixUnaryExpression(node)) {
|
|
166
|
+
return writeTargetReceiver(node.operand);
|
|
167
|
+
}
|
|
168
|
+
if (ts.isPropertyAccessExpression(node) || ts.isElementAccessExpression(node)) {
|
|
169
|
+
return node.expression;
|
|
170
|
+
}
|
|
171
|
+
return null;
|
|
172
|
+
}
|
|
173
|
+
/** Whether a MEMBER access (`env.X`, `env[k]`, and their writes) through a
|
|
174
|
+
* value HELD from `process.env` can go to the live environment table: the
|
|
175
|
+
* held binding's type must be exactly the env snapshot record (a pure
|
|
176
|
+
* index-signature shape whose value slot is `string | undefined`, what
|
|
177
|
+
* `process.env` maps to). Returns that value type, or null — a hold whose
|
|
178
|
+
* type differs keeps the snapshot record for reads and refuses writes (see
|
|
179
|
+
* refuseHeldEnvWrite). Member accesses alias the live table the way Node's
|
|
180
|
+
* do. A BARE use of the held value (a spread source, Object.keys, an
|
|
181
|
+
* argument, a return) is not a member access and takes a fresh snapshot of
|
|
182
|
+
* the environment at that use site (lowerIdentifierExpr). */
|
|
183
|
+
export function heldEnvValueType(lowerer, receiver) {
|
|
184
|
+
if (!holdsEnvSnapshot(lowerer, receiver))
|
|
185
|
+
return null;
|
|
186
|
+
return envRecordValueType(lowerer, lowerer.mapTypeOf(lowerer.typeOf(receiver)));
|
|
187
|
+
}
|
|
188
|
+
/** The env-record value type a hold must have to alias the live table —
|
|
189
|
+
* a pure index-signature record (no fields, not a tuple) whose value slot
|
|
190
|
+
* is the `string | undefined` union, which is what `process.env` maps to.
|
|
191
|
+
* Null for every other type. */
|
|
192
|
+
function envRecordValueType(lowerer, mapped) {
|
|
193
|
+
if (mapped?.kind !== "record")
|
|
194
|
+
return null;
|
|
195
|
+
const shape = lowerer.shapes.get(mapped.shapeId);
|
|
196
|
+
if (!shape || shape.tuple || shape.fields.length > 0 || shape.indexValue === undefined)
|
|
197
|
+
return null;
|
|
198
|
+
const value = lowerer.envValueType();
|
|
199
|
+
return typeEquals(shape.indexValue, value) ? value : null;
|
|
200
|
+
}
|
|
201
|
+
/** Refuse a BINDING that holds `process.env` under a type which is not the
|
|
202
|
+
* env record — `const env: Record<string, string> = process.env as any`, a
|
|
203
|
+
* fixed-field annotation, `const e: any = process.env`. Node's hold IS the
|
|
204
|
+
* environment object, so member reads through it see the live table;
|
|
205
|
+
* here the hold is a snapshot record taken at the initializer, so reads
|
|
206
|
+
* would silently observe the environment as it was then (writes are
|
|
207
|
+
* already refused — refuseHeldEnvWrite). Refuse the hold where it is
|
|
208
|
+
* created instead of letting its later reads drift. `name` is the bound
|
|
209
|
+
* identifier, `blame` the declaration the diagnostic points at. */
|
|
210
|
+
export function refuseHeldEnvCopyHold(lowerer, name, blame) {
|
|
211
|
+
if (ts.isVariableDeclaration(blame) &&
|
|
212
|
+
holdsEnvSnapshot(lowerer, blame.initializer, 1) &&
|
|
213
|
+
!holdsEnvSnapshot(lowerer, name)) {
|
|
214
|
+
// Initialized from process.env but reassigned later (holdsEnvSnapshot).
|
|
215
|
+
lowerer.pushDiag(heldEnvReassignedDiag(locOf(blame)));
|
|
216
|
+
throw new PoisonError();
|
|
217
|
+
}
|
|
218
|
+
if (!holdsEnvSnapshot(lowerer, name))
|
|
219
|
+
return;
|
|
220
|
+
if (envRecordValueType(lowerer, lowerer.mapTypeOf(lowerer.typeOf(name))) !== null)
|
|
221
|
+
return;
|
|
222
|
+
lowerer.pushDiag(heldEnvHoldDiag(locOf(blame)));
|
|
223
|
+
throw new PoisonError();
|
|
224
|
+
}
|
|
225
|
+
/** Refuse a write through a value HELD from `process.env` that cannot take
|
|
226
|
+
* the live path: the compound and update forms (`env.X += v`, `env.X++`)
|
|
227
|
+
* reach this wrapper, and so does any write through a hold whose type is
|
|
228
|
+
* not the env record. The held value is a snapshot record, so such a write
|
|
229
|
+
* would land on the copy while the real environment kept its old value;
|
|
230
|
+
* Node writes setenv(3) through the very same object, so a program relying
|
|
231
|
+
* on it would silently diverge. Plain `=`, computed-key and `delete` writes
|
|
232
|
+
* through the env record alias the live table instead (lower-stmts.ts,
|
|
233
|
+
* element-access.ts); `target` is the write's or delete's access node. */
|
|
234
|
+
export function refuseHeldEnvWrite(lowerer, target) {
|
|
235
|
+
const receiver = writeTargetReceiver(target);
|
|
236
|
+
if (receiver === null || !holdsEnvSnapshot(lowerer, receiver))
|
|
237
|
+
return;
|
|
238
|
+
lowerer.pushDiag(heldEnvWriteDiag(locOf(target)));
|
|
239
|
+
throw new PoisonError();
|
|
240
|
+
}
|
|
30
241
|
/** The interned `string | undefined` union — the type every env read
|
|
31
242
|
* produces (withUndefinedArm interns [string, undefined] in canonical
|
|
32
243
|
* order, so the string arm's tag is 0 and the undefined arm's is 1,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment.js","sourceRoot":"","sources":["../../../../src/frontend/lowering/builtins/environment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC3C,OAAO,EAAgB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"environment.js","sourceRoot":"","sources":["../../../../src/frontend/lowering/builtins/environment.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,6 +20,7 @@ export declare function lowerFsVectorOrTruncateCall(lowerer: Lowerer, expr: ts.C
|
|
|
20
20
|
member: string;
|
|
21
21
|
}, fn: BuiltinModuleFn, loc: SrcLoc, name: string): IrExpr;
|
|
22
22
|
export declare function lowerFsNumericOpenCall(lowerer: Lowerer, expr: ts.CallExpression, loc: SrcLoc): IrExpr;
|
|
23
|
+
export declare function lowerFsOpenCall(lowerer: Lowerer, expr: ts.CallExpression, loc: SrcLoc): IrExpr;
|
|
23
24
|
export declare function lowerFsPromisesOpenCall(lowerer: Lowerer, expr: ts.CallExpression, loc: SrcLoc): IrExpr;
|
|
24
25
|
export declare function lowerFsRenameCallbackCall(lowerer: Lowerer, expr: ts.CallExpression, loc: SrcLoc): IrExpr;
|
|
25
26
|
export declare function lowerFsReadSyncCall(lowerer: Lowerer, expr: ts.CallExpression, loc: SrcLoc): IrExpr;
|
|
@@ -158,9 +158,11 @@ export function lowerFsNumericOpenCall(lowerer, expr, loc) {
|
|
|
158
158
|
lowerer.noLowering("openSync with computed numeric flags", expr.arguments.nodes[1], "use an inline bitwise OR of fs.constants.O_RDONLY/O_WRONLY/O_RDWR/O_CREAT/O_EXCL/O_NOFOLLOW/O_NONBLOCK/O_TRUNC/O_APPEND");
|
|
159
159
|
}
|
|
160
160
|
const path = lowerFsPath(lowerer, expr.arguments.nodes[0]);
|
|
161
|
+
const defaultMode = { kind: "numLit", value: 0o666, type: F64, loc };
|
|
162
|
+
// Node treats an undefined creation mode as an omitted one.
|
|
161
163
|
const mode = expr.arguments.nodes[2]
|
|
162
|
-
? lowerer
|
|
163
|
-
:
|
|
164
|
+
? lowerBuiltinOptionalDefault(lowerer, expr.arguments.nodes[2], F64, defaultMode)
|
|
165
|
+
: defaultMode;
|
|
164
166
|
return {
|
|
165
167
|
kind: "libCall",
|
|
166
168
|
fn: "fs.openNumericSync",
|
|
@@ -169,6 +171,30 @@ export function lowerFsNumericOpenCall(lowerer, expr, loc) {
|
|
|
169
171
|
loc,
|
|
170
172
|
};
|
|
171
173
|
}
|
|
174
|
+
// fs.openSync(path, flags[, mode]) with Node's string flags: the runtime
|
|
175
|
+
// selects the O_* bits from the flag text, and mode is the creation mode
|
|
176
|
+
// open(2) applies when the file is created. An omitted mode passes Node's
|
|
177
|
+
// 0o666 default, so every call reaches the runtime with three arguments.
|
|
178
|
+
export function lowerFsOpenCall(lowerer, expr, loc) {
|
|
179
|
+
if (expr.arguments.nodes.length < 2 ||
|
|
180
|
+
expr.arguments.nodes.length > 3 ||
|
|
181
|
+
expr.arguments.nodes.some(ts.isSpreadElement))
|
|
182
|
+
lowerer.noLowering("openSync with this argument shape", expr);
|
|
183
|
+
const mode = expr.arguments.nodes[2];
|
|
184
|
+
const defaultMode = numLit(0o666, loc);
|
|
185
|
+
return {
|
|
186
|
+
kind: "libCall",
|
|
187
|
+
fn: "fs.openSync",
|
|
188
|
+
args: [
|
|
189
|
+
lowerFsPath(lowerer, expr.arguments.nodes[0]),
|
|
190
|
+
lowerer.lowerExprExpecting(expr.arguments.nodes[1], STRING),
|
|
191
|
+
// Node treats an undefined creation mode as an omitted one.
|
|
192
|
+
mode ? lowerBuiltinOptionalDefault(lowerer, mode, F64, defaultMode) : defaultMode,
|
|
193
|
+
],
|
|
194
|
+
type: F64,
|
|
195
|
+
loc,
|
|
196
|
+
};
|
|
197
|
+
}
|
|
172
198
|
// fs/promises.open(path[, flags[, mode]]) — string flags and numeric
|
|
173
199
|
// creation mode, with Node's "r"/0o666 defaults. The runtime wraps
|
|
174
200
|
// the descriptor in a shared FileHandle and settles/rejects exactly
|
|
@@ -738,7 +764,13 @@ export function lowerFsWriteOptionsCall(lowerer, expr, loc, promiseWriteOptions)
|
|
|
738
764
|
const operation = promiseWriteOptions ? "fs.promises.writeFile" : "writeFileSync";
|
|
739
765
|
const plainFn = promiseWriteOptions ? "fsp.writeFile" : "fs.writeFileSync";
|
|
740
766
|
const modeFn = promiseWriteOptions ? "fsp.writeFileMode" : "fs.writeFileModeSync";
|
|
767
|
+
const flagsFn = promiseWriteOptions ? "fsp.writeFileFlags" : "fs.writeFileFlagsSync";
|
|
741
768
|
const resultType = promiseWriteOptions ? { kind: "promise", inner: VOID } : VOID;
|
|
769
|
+
/** `flag: "w"` is the plain truncate-or-create write; `flag: "wx"` is
|
|
770
|
+
* open(2)'s O_EXCL (EEXIST when the path exists). Both are literals, so
|
|
771
|
+
* the bit is known here and carries no evaluation of its own. */
|
|
772
|
+
let exclusive = false;
|
|
773
|
+
let sawFlag = false;
|
|
742
774
|
// The runtime needs only `mode`, but every source option value is an
|
|
743
775
|
// ordinary JS expression. Stage path/data and then evaluate the option
|
|
744
776
|
// values in object-literal order before issuing the write; otherwise a
|
|
@@ -767,19 +799,36 @@ export function lowerFsWriteOptionsCall(lowerer, expr, loc, promiseWriteOptions)
|
|
|
767
799
|
});
|
|
768
800
|
mode = varRef(modeLocal.id, modeLocal.type, loc);
|
|
769
801
|
}
|
|
770
|
-
const result =
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
802
|
+
const result = sawFlag
|
|
803
|
+
? {
|
|
804
|
+
kind: "libCall",
|
|
805
|
+
fn: flagsFn,
|
|
806
|
+
args: [
|
|
775
807
|
varRef(pathLocal.id, pathLocal.type, loc),
|
|
776
808
|
varRef(dataLocal.id, dataLocal.type, loc),
|
|
777
|
-
mode
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
809
|
+
// Node's default creation mode when only the flag is given.
|
|
810
|
+
mode ?? { kind: "numLit", value: 0o666, type: F64, loc },
|
|
811
|
+
{ kind: "numLit", value: exclusive ? 1 : 0, type: F64, loc },
|
|
812
|
+
],
|
|
813
|
+
type: resultType,
|
|
814
|
+
loc,
|
|
815
|
+
}
|
|
816
|
+
: {
|
|
817
|
+
kind: "libCall",
|
|
818
|
+
fn: mode ? modeFn : plainFn,
|
|
819
|
+
args: mode
|
|
820
|
+
? [
|
|
821
|
+
varRef(pathLocal.id, pathLocal.type, loc),
|
|
822
|
+
varRef(dataLocal.id, dataLocal.type, loc),
|
|
823
|
+
mode,
|
|
824
|
+
]
|
|
825
|
+
: [
|
|
826
|
+
varRef(pathLocal.id, pathLocal.type, loc),
|
|
827
|
+
varRef(dataLocal.id, dataLocal.type, loc),
|
|
828
|
+
],
|
|
829
|
+
type: resultType,
|
|
830
|
+
loc,
|
|
831
|
+
};
|
|
783
832
|
return { kind: "seqExpr", stmts, result, type: resultType, loc };
|
|
784
833
|
};
|
|
785
834
|
// The bare-encoding spelling — writeFileSync(p, data, "utf-8") — is
|
|
@@ -822,19 +871,27 @@ export function lowerFsWriteOptionsCall(lowerer, expr, loc, promiseWriteOptions)
|
|
|
822
871
|
optionValues.push({ kind: "effect", value: lowerer.lowerExprExpecting(m.value, STRING) });
|
|
823
872
|
}
|
|
824
873
|
else if (m.name === "flag") {
|
|
825
|
-
//
|
|
826
|
-
//
|
|
827
|
-
|
|
874
|
+
// Node's disposition flag changes whether an existing file is
|
|
875
|
+
// truncated: "w" is the default write, "wx" the exclusive create.
|
|
876
|
+
// Every other flag (append "a"/"as", synchronous "ws", ...) writes
|
|
877
|
+
// different bytes and keeps the fence by name.
|
|
878
|
+
const t = lowerer.typeOf(m.value);
|
|
879
|
+
if (!t.isStringLiteralType() || (t.value !== "w" && t.value !== "wx")) {
|
|
880
|
+
lowerer.noLowering(`${operation} with the flag option`, p, 'the lowered flags are "w" (the default truncate-or-create) and "wx" (O_EXCL: EEXIST when the path exists); other flags write different bytes');
|
|
881
|
+
}
|
|
882
|
+
exclusive = t.value === "wx";
|
|
883
|
+
sawFlag = true;
|
|
884
|
+
optionValues.push({ kind: "effect", value: lowerer.lowerExprExpecting(m.value, STRING) });
|
|
828
885
|
}
|
|
829
886
|
else {
|
|
830
887
|
// The options-record stance: documented keys with no lowering
|
|
831
888
|
// fence by name; undocumented keys drop like Node.
|
|
832
|
-
fenceOrDropOptionKey(lowerer, p, m.name, operation, FS_WRITE_FILE_DOCUMENTED_OPTIONS, 'the supported options are { mode: <number>, encoding: "utf8" }');
|
|
889
|
+
fenceOrDropOptionKey(lowerer, p, m.name, operation, FS_WRITE_FILE_DOCUMENTED_OPTIONS, 'the supported options are { mode: <number>, encoding: "utf8", flag: "w" | "wx" }');
|
|
833
890
|
}
|
|
834
891
|
}
|
|
835
892
|
}
|
|
836
893
|
if (!ok || lowerer.mapTypeOf(lowerer.typeOf(expr.arguments.nodes[1]))?.kind !== "string") {
|
|
837
|
-
lowerer.noLowering(`${operation} with 3 arguments`, optsNode, 'the supported options are { mode: <number>, encoding: "utf8" } over string data');
|
|
894
|
+
lowerer.noLowering(`${operation} with 3 arguments`, optsNode, 'the supported options are { mode: <number>, encoding: "utf8", flag: "w" | "wx" } over string data');
|
|
838
895
|
}
|
|
839
896
|
return finishWrite(optionValues);
|
|
840
897
|
}
|