@scriptc/compiler 0.4.7 → 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 +23 -5
- package/ambient/node-fallback/fs.d.ts +3 -2
- package/ambient/node-fallback/http.d.ts +23 -17
- package/ambient/node-fallback/https.d.ts +5 -2
- package/ambient/node-fallback/net.d.ts +6 -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/zlib.d.ts +31 -2
- package/ambient/scriptc-node-fallback.d.ts +37 -7
- package/ambient/scriptc.d.ts +7 -2
- package/dist/backend/executable-features.js +11 -3
- package/dist/backend/executable-features.js.map +1 -1
- package/dist/backend/library-pack.d.ts +6 -0
- package/dist/backend/library-pack.js +17 -6
- 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 +9 -2
- package/dist/backend/linker.js +190 -32
- package/dist/backend/linker.js.map +1 -1
- package/dist/backend/lld.d.ts +8 -4
- package/dist/backend/lld.js +19 -13
- package/dist/backend/lld.js.map +1 -1
- package/dist/backend/lld.test.js +3 -1
- 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/cpu-dispatch.d.ts +15 -5
- package/dist/backend/llvm/cpu-dispatch.js +31 -7
- package/dist/backend/llvm/cpu-dispatch.js.map +1 -1
- package/dist/backend/llvm/dyn.d.ts +12 -3
- package/dist/backend/llvm/dyn.js +31 -7
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emit-function.js +67 -4
- package/dist/backend/llvm/emit-function.js.map +1 -1
- package/dist/backend/llvm/emit-module.js +90 -39
- 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 +99 -15
- package/dist/backend/llvm/emit-statements.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +113 -8
- package/dist/backend/llvm/emitter.js +438 -67
- 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.js +18 -2
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.js +31 -10
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +31 -3
- 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.js +17 -0
- package/dist/backend/llvm/expr-stream-bridges.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 +19 -1
- package/dist/backend/llvm/js-ic.js +96 -23
- package/dist/backend/llvm/js-ic.js.map +1 -1
- package/dist/backend/llvm/lib-dispatch.js +132 -1
- package/dist/backend/llvm/lib-dispatch.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 +44 -3
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +69 -2
- package/dist/backend/llvm/lib-shared.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-state.js +7 -2
- 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.test.js +6 -6
- 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/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.js +12 -6
- package/dist/backend/llvm/record-views.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 +3 -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 +33 -3
- package/dist/backend/llvm/shapes.js +183 -13
- package/dist/backend/llvm/shapes.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/walkers.d.ts +12 -0
- package/dist/backend/llvm/walkers.js +46 -2
- 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 +48 -8
- package/dist/backend/native/executable.js +55 -13
- 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 +9 -1
- package/dist/backend/native/library.js.map +1 -1
- package/dist/backend/native/runtime-inputs.js +4 -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 +27 -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 +37 -8
- package/dist/backend/native-link-info-core.js.map +1 -1
- package/dist/backend/runtime-pack-core.d.ts +17 -2
- package/dist/backend/runtime-pack-core.js +18 -3
- package/dist/backend/runtime-pack-core.js.map +1 -1
- package/dist/backend/runtime-pack-targets.test.js +1 -1
- package/dist/backend/runtime-pack-targets.test.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +211 -2
- 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 +5 -1
- package/dist/backend/vendor-archives.js +51 -7
- package/dist/backend/vendor-archives.js.map +1 -1
- package/dist/backend/vendor-inputs.d.ts +25 -4
- package/dist/backend/vendor-inputs.js +68 -4
- package/dist/backend/vendor-inputs.js.map +1 -1
- package/dist/backend/vendor-inputs.test.js +35 -1
- package/dist/backend/vendor-inputs.test.js.map +1 -1
- package/dist/backend/warm-cache.js +1 -1
- package/dist/backend/warm-cache.js.map +1 -1
- package/dist/compat/fetch-profile.js +2 -2
- 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/diagnostics/codes.d.ts +8 -0
- package/dist/diagnostics/codes.js +8 -0
- package/dist/diagnostics/codes.js.map +1 -1
- package/dist/diagnostics/diagnostic.d.ts +27 -9
- package/dist/diagnostics/diagnostic.js +60 -19
- package/dist/diagnostics/diagnostic.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 +21 -2
- package/dist/executable/executable-cache.js +21 -1
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +123 -1
- package/dist/executable/executable-cache.test.js.map +1 -1
- package/dist/executable/prepare.js +199 -248
- 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 +12 -2
- package/dist/frontend/early-errors.js +535 -4
- package/dist/frontend/early-errors.js.map +1 -1
- package/dist/frontend/early-errors.test.js +165 -0
- package/dist/frontend/early-errors.test.js.map +1 -1
- package/dist/frontend/inferred-js-diagnostics.test.js +65 -0
- package/dist/frontend/inferred-js-diagnostics.test.js.map +1 -1
- 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.js +21 -3
- 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 +4 -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 +24 -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.js +2 -2
- 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 +560 -27
- 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/filesystem-calls.d.ts +1 -0
- package/dist/frontend/lowering/builtins/filesystem-calls.js +28 -2
- package/dist/frontend/lowering/builtins/filesystem-calls.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 +3 -1
- package/dist/frontend/lowering/builtins/module-calls.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 +6 -3
- package/dist/frontend/lowering/builtins/operating-system.js +96 -16
- package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
- package/dist/frontend/lowering/builtins/process.d.ts +2 -2
- package/dist/frontend/lowering/builtins/process.js +103 -8
- 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/readline.d.ts +6 -4
- package/dist/frontend/lowering/builtins/readline.js +180 -36
- package/dist/frontend/lowering/builtins/readline.js.map +1 -1
- package/dist/frontend/lowering/builtins/url.js +35 -12
- package/dist/frontend/lowering/builtins/url.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 +103 -0
- package/dist/frontend/lowering/call-signatures.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 +9 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.js +1283 -1030
- 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-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 +20 -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/coercions/function-adapters.js +9 -0
- package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
- package/dist/frontend/lowering/coercions/state.d.ts +8 -0
- package/dist/frontend/lowering/coercions/state.js +17 -0
- package/dist/frontend/lowering/coercions/state.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural-plans.js +20 -5
- package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural.js +10 -1
- 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.js +156 -62
- package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
- package/dist/frontend/lowering/containers/array-construction.js +21 -3
- 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 +14 -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 +446 -86
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/containers/callback-arguments.d.ts +5 -0
- package/dist/frontend/lowering/containers/callback-arguments.js +21 -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/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 +10 -0
- package/dist/frontend/lowering/expressions/array-literals.js +62 -0
- package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/binary.js +115 -5
- package/dist/frontend/lowering/expressions/binary.js.map +1 -1
- package/dist/frontend/lowering/expressions/element-access.js +151 -7
- 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 +31 -2
- package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
- package/dist/frontend/lowering/expressions/narrowing.d.ts +3 -0
- package/dist/frontend/lowering/expressions/narrowing.js +175 -22
- package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
- package/dist/frontend/lowering/expressions/object-literals.js +173 -11
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/optional-chains.js +5 -1
- package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
- package/dist/frontend/lowering/expressions/property-access.d.ts +8 -0
- package/dist/frontend/lowering/expressions/property-access.js +379 -109
- package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/relational.js +237 -7
- package/dist/frontend/lowering/expressions/relational.js.map +1 -1
- package/dist/frontend/lowering/expressions/typeof.js +8 -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 +74 -55
- package/dist/frontend/lowering/expressions/updates.js.map +1 -1
- package/dist/frontend/lowering/function-returns.js +37 -10
- 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 +27 -1
- package/dist/frontend/lowering/generic-functions.js +432 -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 +6 -4
- package/dist/frontend/lowering/global-values.js +24 -10
- package/dist/frontend/lowering/global-values.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.js +43 -22
- 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 +11 -3
- package/dist/frontend/lowering/lib-boundary.js.map +1 -1
- package/dist/frontend/lowering/lower-assert.js +30 -15
- 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.js +11 -1
- package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.d.ts +25 -0
- package/dist/frontend/lowering/lower-calls.js +929 -227
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.test.js +59 -16
- package/dist/frontend/lowering/lower-calls.test.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +20 -0
- package/dist/frontend/lowering/lower-classes.js +468 -44
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-event-emitter.d.ts +6 -2
- package/dist/frontend/lowering/lower-event-emitter.js +253 -83
- package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.d.ts +1 -1
- package/dist/frontend/lowering/lower-exprs.js +71 -20
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-functions.js +25 -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 +638 -64
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.js +48 -2
- 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.js +16 -6
- package/dist/frontend/lowering/lower-node-island.js.map +1 -1
- package/dist/frontend/lowering/lower-server.js +303 -87
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-stdlib.js +45 -0
- package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.d.ts +14 -11
- package/dist/frontend/lowering/lower-stmts.js +270 -52
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-timers.js +110 -27
- 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 +227 -21
- package/dist/frontend/lowering/lowerer.js +651 -92
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/lowerer.test.js +18 -0
- 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/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/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 +0 -3
- package/dist/frontend/lowering/partial-assertions.js +9 -15
- package/dist/frontend/lowering/partial-assertions.js.map +1 -1
- 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.js +1 -0
- package/dist/frontend/lowering/primitive-wrappers.js.map +1 -1
- 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/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-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 +15 -1
- package/dist/frontend/lowering/surfaces.js +78 -10
- 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 +8 -0
- package/dist/frontend/lowering/unit-journal.js +14 -0
- package/dist/frontend/lowering/unit-journal.js.map +1 -1
- package/dist/frontend/lowering/unit-journal.test.js +36 -1
- package/dist/frontend/lowering/unit-journal.test.js.map +1 -1
- package/dist/frontend/lowering/zlib-constants.js +3 -2
- package/dist/frontend/lowering/zlib-constants.js.map +1 -1
- package/dist/frontend/npm-static.js +78 -9
- 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/pipeline.d.ts +5 -4
- package/dist/frontend/pipeline.js +94 -31
- 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.d.ts +62 -2
- package/dist/frontend/program.js +695 -422
- 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/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/shape-inference/overlay.js +68 -2
- package/dist/frontend/shape-inference/overlay.js.map +1 -1
- 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/tsc-codes.d.ts +57 -3
- package/dist/frontend/tsc-codes.js +935 -150
- 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 +91 -9
- package/dist/frontend/type-mapper.js +622 -181
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +80 -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/builtin-effects.js +43 -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 +242 -16
- 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.generated.d.ts +1 -1
- package/dist/ir/codec.generated.js +724 -648
- package/dist/ir/codec.generated.js.map +1 -1
- 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 +11 -2
- package/dist/ir/fields.generated.js +8 -0
- package/dist/ir/fields.generated.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 +5 -4
- package/dist/ir/function-references.js +7 -4
- package/dist/ir/function-references.js.map +1 -1
- package/dist/ir/function-references.test.js +7 -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-views.js +1 -0
- package/dist/ir/inline-array-views.js.map +1 -1
- package/dist/ir/int32-slots.js +7 -0
- package/dist/ir/int32-slots.js.map +1 -1
- package/dist/ir/ir.d.ts +59 -4
- 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.js +30 -5
- package/dist/ir/js-ic.js.map +1 -1
- package/dist/ir/js-ic.test.js +27 -1
- package/dist/ir/js-ic.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 -4
- package/dist/ir/parameter-versions.js +63 -42
- 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/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 +87 -12
- package/dist/ir/runtime-features.js +263 -160
- package/dist/ir/runtime-features.js.map +1 -1
- package/dist/ir/runtime-features.test.js +109 -139
- 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 +4 -2
- package/dist/ir/saturating-loop-jams.js +11 -10
- package/dist/ir/saturating-loop-jams.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 +32 -27
- package/dist/ir/self-captures.js.map +1 -1
- package/dist/ir/serialize.d.ts +6 -1
- package/dist/ir/serialize.js +87 -23
- 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 +88 -18
- package/dist/ir/validate.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 +1 -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 +47 -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 +1 -1
- package/dist/native/cli.js.map +1 -1
- package/dist/native/compiler.js +18 -3
- 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 +43 -26
- 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 +10 -1
- package/dist/native/sanitizer.js.map +1 -1
- package/dist/native/sanitizer.test.js +7 -2
- package/dist/native/sanitizer.test.js.map +1 -1
- package/dist/node-islands/boundary.d.ts +12 -0
- package/dist/node-islands/boundary.js +38 -6
- 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 +9 -0
- package/dist/node-islands/detect.js +110 -0
- package/dist/node-islands/detect.js.map +1 -1
- package/dist/node-islands/detect.test.js +24 -0
- package/dist/node-islands/detect.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/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 +2 -0
- package/dist/node-islands/report.test.js.map +1 -1
- package/dist/node-islands/rules.js +5 -0
- package/dist/node-islands/rules.js.map +1 -1
- package/dist/node-islands/scan.d.ts +11 -2
- package/dist/node-islands/scan.js +61 -9
- package/dist/node-islands/scan.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 +184 -117
|
@@ -17,6 +17,20 @@ function diagnostics(source) {
|
|
|
17
17
|
rmSync(directory, { recursive: true, force: true });
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
|
+
/** The preflight diagnostics of an ES module (`.mjs`), the goal symbol the
|
|
21
|
+
* [Await] and top-level-`using` rules differ under. */
|
|
22
|
+
function moduleDiagnostics(source) {
|
|
23
|
+
const directory = mkdtempSync(join(tmpdir(), "scriptc-early-errors-"));
|
|
24
|
+
writeFileSync(join(directory, "main.mjs"), source);
|
|
25
|
+
const load = loadProgram(join(directory, "main.mjs"));
|
|
26
|
+
try {
|
|
27
|
+
return checkPreflight(load).map((diagnostic) => diagnostic.code);
|
|
28
|
+
}
|
|
29
|
+
finally {
|
|
30
|
+
load.dispose();
|
|
31
|
+
rmSync(directory, { recursive: true, force: true });
|
|
32
|
+
}
|
|
33
|
+
}
|
|
20
34
|
test.for([
|
|
21
35
|
// A function body's top-level function declarations are var-scoped, so
|
|
22
36
|
// duplicates are legal in strict code too.
|
|
@@ -39,4 +53,155 @@ test.for([
|
|
|
39
53
|
])("Node refuses: %s", ([source, code]) => {
|
|
40
54
|
expect(diagnostics(source)).toContain(code);
|
|
41
55
|
});
|
|
56
|
+
test.for([
|
|
57
|
+
// Legal destructuring assignment and for-in/of heads: a variable, a
|
|
58
|
+
// property access, or a pattern of them.
|
|
59
|
+
"var a, b;\n[a, b] = [1, 2];\nconsole.log(a, b);",
|
|
60
|
+
"var o = {};\n({ x: o.y = 1, ...o.rest } = { x: 2 });\nconsole.log(o.y);",
|
|
61
|
+
"var o = {};\n[o.a = 1, ...o.r] = [2];\nconsole.log(o.a);",
|
|
62
|
+
"var a;\nfor ([a] of [[1]]) a;\nfor ({ a } of [{ a: 2 }]) a;\nconsole.log(a);",
|
|
63
|
+
// A rest element and the target of a default hold a pattern as well.
|
|
64
|
+
"var a, b;\n[ ...[a] ] = [[1]];\n[ [b] = [2] ] = [];\nconsole.log(a, b);",
|
|
65
|
+
"var a;\n({ x: [a] = [3] } = {});\nconsole.log(a);",
|
|
66
|
+
// Parentheses are transparent around a target.
|
|
67
|
+
"var a;\n((a)) = 1;\nconsole.log(a);",
|
|
68
|
+
"var a;\n[ ...(a) ] = [1];\nconsole.log(a);",
|
|
69
|
+
// A private name is readable anywhere an enclosing class declares it.
|
|
70
|
+
"class C { #x = 1; m() { return this.#x; } static s() { return new C().#x; } }\nnew C().m();",
|
|
71
|
+
"class C { #x = 1; m() { class D { #x = 2; y = this.#x; } return new D().y; } }\nnew C().m();",
|
|
72
|
+
"class C { #x = 1; m(o) { return #x in o; } }\nnew C().m(new C());",
|
|
73
|
+
])("Node accepts (early targets): %s", (source) => {
|
|
74
|
+
expect(diagnostics(source)).toEqual([]);
|
|
75
|
+
});
|
|
76
|
+
test.for([
|
|
77
|
+
["import('a', {}, '');", "SC0008"],
|
|
78
|
+
["import();", "SC0008"],
|
|
79
|
+
["import('a', {}, {});", "SC0008"],
|
|
80
|
+
["import('a') -= 1;", "SC0010"],
|
|
81
|
+
["var f = function () {};\nf() += 1;", "SC0010"],
|
|
82
|
+
["var a;\n++a.b();", "SC0010"],
|
|
83
|
+
// A pattern never sits inside parentheses, and an object's rest target
|
|
84
|
+
// takes a reference only.
|
|
85
|
+
["var a;\n[ ([a]) ] = [[1]];", "SC0010"],
|
|
86
|
+
["var a;\n({ ...[a] } = {});", "SC0010"],
|
|
87
|
+
["var C = class { m() { this.#x; } };\nnew C().m();", "SC0009"],
|
|
88
|
+
["class C { #x; }\nnew C().#y;", "SC0009"],
|
|
89
|
+
// `#x in obj` is readable wherever `#x` is in scope (the accepts list
|
|
90
|
+
// above), and `#x` in no class's scope is a SyntaxError.
|
|
91
|
+
["class C { #x; }\nconsole.log(#x in {});", "SC0009"],
|
|
92
|
+
])("Node refuses (early targets): %s", ([source, code]) => {
|
|
93
|
+
expect(diagnostics(source)).toContain(code);
|
|
94
|
+
});
|
|
95
|
+
/* `await` is a ReservedWord in the contexts whose grammar passes [Await]
|
|
96
|
+
* down: an async function's body and parameters, a class static block, a
|
|
97
|
+
* module's top level — and an arrow's PARAMETERS inherit that, while an
|
|
98
|
+
* arrow's BODY and a class field initializer reset it. Node is the oracle
|
|
99
|
+
* for every row below. */
|
|
100
|
+
test.for([
|
|
101
|
+
// [Await] false: a plain function's parameter default, an arrow body, a
|
|
102
|
+
// field initializer, and the IdentifierName slots.
|
|
103
|
+
"function f(a = await) { return a; }\nconsole.log(f(2));",
|
|
104
|
+
"async function f() { (() => { var await = 1; return await; })(); }\nf();",
|
|
105
|
+
"async function f() { function g() { return 1; } return g(); }\nf();",
|
|
106
|
+
"class C { x = await2; }\nnew C();",
|
|
107
|
+
"class C { static { var o = { await: 1 }; console.log(o.await); } }\nnew C();",
|
|
108
|
+
"class C { await() { return 1; } }\nconsole.log(new C().await());",
|
|
109
|
+
// A member's computed name is evaluated where the member is defined, so an
|
|
110
|
+
// async method's own [Await] does not reach its name.
|
|
111
|
+
"function outer() { var await = 'm'; class C { async [await]() {} } return new C(); }\nconsole.log(outer());",
|
|
112
|
+
"function outer() { var await = 'k'; return { async [await]() { return 1; } }; }\nconsole.log(outer());",
|
|
113
|
+
// `let`/`const` at the top level of a script are ordinary declarations:
|
|
114
|
+
// the Using bit is what SC0013 reads, and Const carries its own bit.
|
|
115
|
+
"const a = 1;\nlet b = 2;\nconsole.log(a + b);",
|
|
116
|
+
])("Node accepts (await as an identifier): %s", (source) => {
|
|
117
|
+
expect(diagnostics(source)).toEqual([]);
|
|
118
|
+
});
|
|
119
|
+
test.for([
|
|
120
|
+
// The checker already refuses these two with its own diagnostic; the
|
|
121
|
+
// early-error pass names the same site under the rule it belongs to.
|
|
122
|
+
["async function f() { var await = 1; }\nf();", "SC0011"],
|
|
123
|
+
["async function f(await) {}\nf();", "SC0011"],
|
|
124
|
+
// tsc accepts these two, and Node does not.
|
|
125
|
+
["class C { static { ((x = await) => 0); } }\nnew C();", "SC0011"],
|
|
126
|
+
["async () => { (a = await) => 0; };", "SC0011"],
|
|
127
|
+
])("Node refuses (await as an identifier): %s", ([source, code]) => {
|
|
128
|
+
expect(diagnostics(source)).toContain(code);
|
|
129
|
+
});
|
|
130
|
+
test.for([
|
|
131
|
+
// A module's top level is an [Await] context, but a destructuring rename's
|
|
132
|
+
// property name is an IdentifierName there, not a binding.
|
|
133
|
+
"const { await: renamed } = { await: 1 };\nconsole.log(renamed);",
|
|
134
|
+
"function f({ await: renamed }) { return renamed; }\nconsole.log(f({ await: 2 }));",
|
|
135
|
+
])("Node accepts (await as an IdentifierName in a module): %s", (source) => {
|
|
136
|
+
expect(moduleDiagnostics(source)).toEqual([]);
|
|
137
|
+
});
|
|
138
|
+
test.for([
|
|
139
|
+
// The binding side of the same pattern is a BindingIdentifier, and in a
|
|
140
|
+
// module that is the reserved word.
|
|
141
|
+
["var await = 1;\nconsole.log(await);", "SC0011"],
|
|
142
|
+
["const { await } = { await: 1 };\nconsole.log(await);", "SC0011"],
|
|
143
|
+
])("Node refuses (await as a binding in a module): %s", ([source, code]) => {
|
|
144
|
+
expect(moduleDiagnostics(source)).toContain(code);
|
|
145
|
+
});
|
|
146
|
+
test.for([
|
|
147
|
+
// ContainsArguments stops at a function expression and never sees a
|
|
148
|
+
// method's own arguments or a computed element name.
|
|
149
|
+
"class C { x = function () { return arguments.length; }; }\nnew C().x();",
|
|
150
|
+
"class C { m() { return arguments.length; } }\nnew C().m();",
|
|
151
|
+
"class C { [arguments2] = 1; }\nnew C();",
|
|
152
|
+
])("Node accepts (arguments outside a field initializer): %s", (source) => {
|
|
153
|
+
expect(diagnostics(source)).toEqual([]);
|
|
154
|
+
});
|
|
155
|
+
test.for([
|
|
156
|
+
["class C { x = arguments; }\nnew C();", "SC0012"],
|
|
157
|
+
["class C { static x = arguments; }\nnew C();", "SC0012"],
|
|
158
|
+
["class C { x = (() => arguments); }\nnew C().x();", "SC0012"],
|
|
159
|
+
["class C { static { arguments; } }\nnew C();", "SC0012"],
|
|
160
|
+
])("Node refuses (arguments in a field initializer): %s", ([source, code]) => {
|
|
161
|
+
expect(diagnostics(source)).toContain(code);
|
|
162
|
+
});
|
|
163
|
+
test.for([
|
|
164
|
+
// A block, a function body, and a class static block all admit `using`.
|
|
165
|
+
"{ class R { [Symbol.dispose]() {} } using r = new R(); }",
|
|
166
|
+
"function f() { class R { [Symbol.dispose]() {} } using r = new R(); }\nf();",
|
|
167
|
+
"class C { static { class R { [Symbol.dispose]() {} } using r = new R(); } }\nnew C();",
|
|
168
|
+
])("Node accepts (nested using): %s", (source) => {
|
|
169
|
+
expect(diagnostics(source)).toEqual([]);
|
|
170
|
+
});
|
|
171
|
+
test.for([
|
|
172
|
+
["class R { [Symbol.dispose]() {} }\nusing r = new R();", "SC0013"],
|
|
173
|
+
["class R { [Symbol.dispose]() {} }\nawait using r = new R();", "SC0013"],
|
|
174
|
+
])("Node refuses (script-top-level using): %s", ([source, code]) => {
|
|
175
|
+
expect(diagnostics(source)).toContain(code);
|
|
176
|
+
});
|
|
177
|
+
test.for([
|
|
178
|
+
// Strict mode narrows the assignment target: `eval` and `arguments` stay
|
|
179
|
+
// ordinary names in sloppy code and as property names.
|
|
180
|
+
"var [eval2] = [1];\nconsole.log(eval2);",
|
|
181
|
+
"var o = {};\no.eval = 1;\nconsole.log(o.eval);",
|
|
182
|
+
])("Node accepts (sloppy eval/arguments targets): %s", (source) => {
|
|
183
|
+
expect(diagnostics(source)).toEqual([]);
|
|
184
|
+
});
|
|
185
|
+
test.for([
|
|
186
|
+
['"use strict";\narguments = 1;', "SC0014"],
|
|
187
|
+
['"use strict";\n([eval] = [1]);', "SC0014"],
|
|
188
|
+
['"use strict";\nfor (arguments of [1]) break;', "SC0014"],
|
|
189
|
+
])("Node refuses (strict eval/arguments targets): %s", ([source, code]) => {
|
|
190
|
+
expect(diagnostics(source)).toContain(code);
|
|
191
|
+
});
|
|
192
|
+
test.for([
|
|
193
|
+
// A `var` in the catch block is Annex B's, and a nested block is a
|
|
194
|
+
// different Block.
|
|
195
|
+
"try {} catch (e) { var e; }\nconsole.log(typeof e);",
|
|
196
|
+
"try { throw 1; } catch (e) { { function e() {} } }",
|
|
197
|
+
])("Node accepts (catch block declarations): %s", (source) => {
|
|
198
|
+
expect(diagnostics(source)).toEqual([]);
|
|
199
|
+
});
|
|
200
|
+
test.for([
|
|
201
|
+
["try {} catch (e) { function e() {} }", "SC0015"],
|
|
202
|
+
['"use strict";\ntry {} catch (e) { function e() {} }', "SC0015"],
|
|
203
|
+
["try {} catch ([e]) { function e() {} }", "SC0015"],
|
|
204
|
+
])("Node refuses (catch parameter redeclared): %s", ([source, code]) => {
|
|
205
|
+
expect(diagnostics(source)).toContain(code);
|
|
206
|
+
});
|
|
42
207
|
//# sourceMappingURL=early-errors.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"early-errors.test.js","sourceRoot":"","sources":["../../src/frontend/early-errors.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhE;oBACoB;AACpB,SAAS,WAAW,CAAC,MAAc;IACjC,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,uBAAuB,CAAC,CAAC,CAAC;IACvE,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;IACtD,IAAI,CAAC;QACH,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACnE,CAAC;YAAS,CAAC;QACT,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,MAAM,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;AACH,CAAC;AAED,IAAI,CAAC,GAAG,CAAC;IACP,uEAAuE;IACvE,2CAA2C;IAC3C,8EAA8E;IAC9E,kEAAkE;IAClE,6EAA6E;IAC7E,wDAAwD;IACxD,8EAA8E;IAC9E,+EAA+E;IAC/E,0CAA0C;IAC1C,oDAAoD;CACrD,CAAC,CAAC,kBAAkB,EAAE,CAAC,MAAM,EAAE,EAAE;IAChC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAC1C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,GAAG,CAAC;IACP,CAAC,uDAAuD,EAAE,QAAQ,CAAC;IACnE,CAAC,wDAAwD,EAAE,QAAQ,CAAC;IACpE,CAAC,6DAA6D,EAAE,QAAQ,CAAC;IACzE,CAAC,gFAAgF,EAAE,QAAQ,CAAC;CAC7F,CAAC,CAAC,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE;IACxC,MAAM,CAAC,WAAW,CAAC,MAAO,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC/C,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"early-errors.test.js","sourceRoot":"","sources":["../../src/frontend/early-errors.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -74,4 +74,69 @@ export function* generator() {
|
|
|
74
74
|
"'yield' expression implicitly results in an 'any' type because its containing generator lacks a return-type annotation.",
|
|
75
75
|
]);
|
|
76
76
|
});
|
|
77
|
+
test("a JavaScript module keeps the setter opinion to itself", () => {
|
|
78
|
+
const library = `export class Store {
|
|
79
|
+
constructor() {
|
|
80
|
+
this.stored = 0;
|
|
81
|
+
}
|
|
82
|
+
set value(next) {
|
|
83
|
+
this.stored = next;
|
|
84
|
+
}
|
|
85
|
+
get value() {
|
|
86
|
+
return this.stored;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
export const bag = {
|
|
90
|
+
set only(next) {
|
|
91
|
+
console.log(next);
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
`;
|
|
95
|
+
const main = 'import { Store, bag } from "./library.js"; const store = new Store(); store.value = 2; bag.only = 3; console.log(store.value);';
|
|
96
|
+
// A JavaScript setter's parameter is whatever the caller passes, and the
|
|
97
|
+
// lowering gives it checked-dynamic storage and dynamic reads; the
|
|
98
|
+
// checker's "implicitly any" opinion belongs to TypeScript input, where an
|
|
99
|
+
// annotation is a promise.
|
|
100
|
+
expect(diagnostics(library, main)).toEqual([]);
|
|
101
|
+
expect(diagnostics(library, main, "ts").map((diagnostic) => diagnostic.message)).toContain("Property 'only' implicitly has type 'any', because its set accessor lacks a parameter type annotation.");
|
|
102
|
+
});
|
|
103
|
+
test.for([
|
|
104
|
+
[
|
|
105
|
+
"2704",
|
|
106
|
+
'export const box = {};\nObject.defineProperty(box, "flag", { value: 1, configurable: true });\nexport function drop() { delete box.flag; }',
|
|
107
|
+
],
|
|
108
|
+
["2464", "export const box = {};\nexport function keyed() { return { [box]: 1 }; }"],
|
|
109
|
+
["2365", "export function joined() { return true + 1; }"],
|
|
110
|
+
["2689", "export class Derived extends AsyncIterator {}"],
|
|
111
|
+
["1166", 'export class Field { ["a" + "b"] = 1; }'],
|
|
112
|
+
[
|
|
113
|
+
"7032",
|
|
114
|
+
"export class Hidden { set #slot(next) { console.log(next); } run(value) { this.#slot = value; } }",
|
|
115
|
+
],
|
|
116
|
+
])("a JavaScript module keeps the TS%s opinion it cannot lower", ([, library]) => {
|
|
117
|
+
// These codes stay refused: each names a program the lowerer cannot build
|
|
118
|
+
// exactly (a delete of a builtin's own property, a class element's computed
|
|
119
|
+
// key, an operator on operands it cannot convert, a class over a stdlib
|
|
120
|
+
// base, a class field with no stable key), so the relaxation must not
|
|
121
|
+
// admit them. The base is the async iterator interface: `extends Iterator`
|
|
122
|
+
// is a program the lowering builds, so it no longer carries an opinion to
|
|
123
|
+
// keep. The invalid assignment-target pair (2364 `f() += g()`,
|
|
124
|
+
// 2357 `f()++`) stays refused the same way: Node calls `f`, then throws.
|
|
125
|
+
expect(diagnostics(library, 'import * as library from "./library.js"; console.log(library);').length).toBeGreaterThan(0);
|
|
126
|
+
});
|
|
127
|
+
test("a checked JavaScript file keeps a typed slot its JSDoc declared", () => {
|
|
128
|
+
// TS2322 is one of the opinion table's `checkedJs: "enforce"` rows: a
|
|
129
|
+
// project that asked tsc to check its JavaScript keeps the error, while
|
|
130
|
+
// the same file unchecked takes the opinion (nothing at runtime checks the
|
|
131
|
+
// annotation Node never reads).
|
|
132
|
+
const main = 'import * as library from "./library.js"; console.log(library);';
|
|
133
|
+
const library = "/** @type {string} */\nexport let box = 1;\n";
|
|
134
|
+
expect(diagnostics(`// @ts-check\n${library}`, main).map((d) => d.message)).toContain("Type 'number' is not assignable to type 'string'.");
|
|
135
|
+
expect(diagnostics(library, main)).toEqual([]);
|
|
136
|
+
});
|
|
137
|
+
test("a checked JavaScript file still takes the opinions its JSDoc never asked for", () => {
|
|
138
|
+
// TS7006 has no `checkedJs: "enforce"`: checkJs asks tsc to check the
|
|
139
|
+
// JSDoc a file carries, not to invent parameter annotations it does not.
|
|
140
|
+
expect(diagnostics("// @ts-check\nexport function add(a, b) { return a + b; }\n", 'import { add } from "./library.js"; console.log(add(1, 2));')).toEqual([]);
|
|
141
|
+
});
|
|
77
142
|
//# sourceMappingURL=inferred-js-diagnostics.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inferred-js-diagnostics.test.js","sourceRoot":"","sources":["../../src/frontend/inferred-js-diagnostics.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"inferred-js-diagnostics.test.js","sourceRoot":"","sources":["../../src/frontend/inferred-js-diagnostics.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { mkdtempSync, rmSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { tmpdir } from "node:os";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { expect, test } from "vitest";
|
|
5
|
+
import { checkPreflight, loadProgram } from "./program-node.js";
|
|
6
|
+
/** A checked JavaScript program whose JSX comes before the admitted site.
|
|
7
|
+
* The rewrite inserts the runtime import and replaces the element, so every
|
|
8
|
+
* offset after the first element moves by a different amount than the one
|
|
9
|
+
* before it. */
|
|
10
|
+
function jsxProject() {
|
|
11
|
+
const directory = mkdtempSync(join(tmpdir(), "scriptc-jsx-opinion-"));
|
|
12
|
+
writeFileSync(join(directory, "package.json"), '{"type":"module"}');
|
|
13
|
+
writeFileSync(join(directory, "tsconfig.json"), JSON.stringify({
|
|
14
|
+
compilerOptions: {
|
|
15
|
+
allowJs: true,
|
|
16
|
+
checkJs: true,
|
|
17
|
+
strict: true,
|
|
18
|
+
jsx: "react-jsx",
|
|
19
|
+
noEmit: true,
|
|
20
|
+
},
|
|
21
|
+
}));
|
|
22
|
+
writeFileSync(join(directory, "jsx-types.d.ts"), [
|
|
23
|
+
"declare namespace JSX {",
|
|
24
|
+
" interface IntrinsicElements { div: any }",
|
|
25
|
+
"}",
|
|
26
|
+
'declare module "react/jsx-runtime" {',
|
|
27
|
+
" export const jsx: any;",
|
|
28
|
+
" export const jsxs: any;",
|
|
29
|
+
" export const Fragment: any;",
|
|
30
|
+
"}",
|
|
31
|
+
"",
|
|
32
|
+
].join("\n"));
|
|
33
|
+
const source = [
|
|
34
|
+
'/// <reference path="./jsx-types.d.ts" />',
|
|
35
|
+
'const box = <div className="box" />;',
|
|
36
|
+
"export function pick(value) { return value; }",
|
|
37
|
+
"export { box };",
|
|
38
|
+
"",
|
|
39
|
+
].join("\n");
|
|
40
|
+
const file = join(directory, "app.jsx");
|
|
41
|
+
writeFileSync(file, source);
|
|
42
|
+
return { directory, file, source };
|
|
43
|
+
}
|
|
44
|
+
test("an admitted opinion site is recorded at its span in the text the lowering holds", () => {
|
|
45
|
+
const { directory, file } = jsxProject();
|
|
46
|
+
const load = loadProgram(file);
|
|
47
|
+
try {
|
|
48
|
+
expect(checkPreflight(load)).toEqual([]);
|
|
49
|
+
const lowered = load.jsxSources?.get(file);
|
|
50
|
+
expect(lowered).toBeDefined();
|
|
51
|
+
// The parameter's implicit any (TS7006) is admitted once: the world over
|
|
52
|
+
// the text as written and the world over the rewritten text name the
|
|
53
|
+
// same site, so the record is one entry, at the rewritten offset.
|
|
54
|
+
const sites = (load.admittedOpinions ?? []).filter((site) => site.code === 7006);
|
|
55
|
+
expect(sites).toHaveLength(1);
|
|
56
|
+
const site = sites[0];
|
|
57
|
+
expect(lowered.text.slice(site.pos, site.end)).toBe("value");
|
|
58
|
+
}
|
|
59
|
+
finally {
|
|
60
|
+
load.dispose();
|
|
61
|
+
rmSync(directory, { recursive: true, force: true });
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
test("a site with no JSX rewrite keeps its diagnostic offsets", () => {
|
|
65
|
+
const directory = mkdtempSync(join(tmpdir(), "scriptc-js-opinion-"));
|
|
66
|
+
writeFileSync(join(directory, "package.json"), '{"type":"module"}');
|
|
67
|
+
writeFileSync(join(directory, "tsconfig.json"), JSON.stringify({
|
|
68
|
+
compilerOptions: { allowJs: true, checkJs: true, strict: true, noEmit: true },
|
|
69
|
+
}));
|
|
70
|
+
const source = "export function pick(value) { return value; }\n";
|
|
71
|
+
const file = join(directory, "app.js");
|
|
72
|
+
writeFileSync(file, source);
|
|
73
|
+
const load = loadProgram(file);
|
|
74
|
+
try {
|
|
75
|
+
expect(checkPreflight(load)).toEqual([]);
|
|
76
|
+
const sites = (load.admittedOpinions ?? []).filter((site) => site.code === 7006);
|
|
77
|
+
expect(sites).toHaveLength(1);
|
|
78
|
+
const site = sites[0];
|
|
79
|
+
expect(source.slice(site.pos, site.end)).toBe("value");
|
|
80
|
+
}
|
|
81
|
+
finally {
|
|
82
|
+
load.dispose();
|
|
83
|
+
rmSync(directory, { recursive: true, force: true });
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
//# sourceMappingURL=jsx-opinion-sites.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsx-opinion-sites.test.js","sourceRoot":"","sources":["../../src/frontend/jsx-opinion-sites.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import * as ts from "./ts7/adapter.js";
|
|
2
2
|
import type { SrcLoc } from "../ir/ir.js";
|
|
3
|
-
export
|
|
3
|
+
/** An export name that resolves to a function declaration. */
|
|
4
|
+
export interface EntryFunctionExport {
|
|
5
|
+
kind: "function";
|
|
4
6
|
name: string;
|
|
7
|
+
/** The declaration site (where SC4003/SC4004/SC4007 anchor). */
|
|
5
8
|
loc: SrcLoc;
|
|
6
9
|
/** Declared type parameters — SC4007 (a profile entry needs one concrete
|
|
7
10
|
* compiled signature). */
|
|
@@ -11,6 +14,22 @@ export interface EntryExportInfo {
|
|
|
11
14
|
/** `function*` — SC4004. */
|
|
12
15
|
generator: boolean;
|
|
13
16
|
}
|
|
14
|
-
/**
|
|
15
|
-
*
|
|
16
|
-
export
|
|
17
|
+
/** An export name that resolves to something other than a function
|
|
18
|
+
* declaration: SC4002 names what the name denotes. */
|
|
19
|
+
export interface EntryValueExport {
|
|
20
|
+
kind: "value";
|
|
21
|
+
name: string;
|
|
22
|
+
loc: SrcLoc;
|
|
23
|
+
/** "a class", "a variable", "a type", … */
|
|
24
|
+
what: string;
|
|
25
|
+
}
|
|
26
|
+
export type EntryExport = EntryFunctionExport | EntryValueExport;
|
|
27
|
+
/** The symbol the entry module's export `name` denotes, with aliases (a
|
|
28
|
+
* local export list, a named re-export, and the chains they can form)
|
|
29
|
+
* resolved to the declaration that supplies the value. Null when the
|
|
30
|
+
* entry module exports nothing under that name. */
|
|
31
|
+
export declare function resolveEntryExportSymbol(checker: ts.TypeChecker, entry: ts.SourceFile, name: string): ts.Symbol | null;
|
|
32
|
+
/** Resolve the profile's export names against the entry module — the facts
|
|
33
|
+
* the SC4002/SC4004/SC4007 refusals key on, by exported name. Names the
|
|
34
|
+
* entry does not export at all are absent from the map. */
|
|
35
|
+
export declare function entryExportFacts(program: ts.Program, entry: ts.SourceFile, names: readonly string[]): Map<string, EntryExport>;
|
|
@@ -1,35 +1,107 @@
|
|
|
1
|
-
/* Library mode's export resolution input: what the ENTRY
|
|
2
|
-
*
|
|
3
|
-
* object after preflight (design §5.3) — the export map may only
|
|
4
|
-
* exports of the profile's one entry module, and
|
|
5
|
-
* surface for functions is
|
|
6
|
-
*
|
|
7
|
-
*
|
|
1
|
+
/* Library mode's export resolution input: what the ENTRY module exports,
|
|
2
|
+
* resolved through its export table. Resolution runs on the frontend's
|
|
3
|
+
* program object after preflight (design §5.3) — the export map may only
|
|
4
|
+
* name exports of the profile's one entry module, and the compilable
|
|
5
|
+
* export surface for functions is a function DECLARATION reached from
|
|
6
|
+
* that module's exports. A direct `export function f(...)`, an export
|
|
7
|
+
* list (`export { f }`, `export { f as g }`), and a re-export
|
|
8
|
+
* (`export { f } from "./m"`, `export * from "./m"`) all name the same
|
|
9
|
+
* declaration, so the facts (and, in the lowering, the unit the
|
|
10
|
+
* declaration compiles to) come from the declaration site: the one-line
|
|
11
|
+
* facade SC4002 points authors to is exactly as good as declaring the
|
|
12
|
+
* function in the entry. The per-declaration facts collected here are
|
|
8
13
|
* what the SC4002/SC4004/SC4007 refusals key on; the marshalling check
|
|
9
14
|
* (SC4003) runs later against the lowered IrFunction's types. */
|
|
10
15
|
import * as ts from "./ts7/adapter.js";
|
|
11
|
-
/**
|
|
12
|
-
*
|
|
13
|
-
|
|
16
|
+
/** The symbol the entry module's export `name` denotes, with aliases (a
|
|
17
|
+
* local export list, a named re-export, and the chains they can form)
|
|
18
|
+
* resolved to the declaration that supplies the value. Null when the
|
|
19
|
+
* entry module exports nothing under that name. */
|
|
20
|
+
export function resolveEntryExportSymbol(checker, entry, name) {
|
|
21
|
+
const moduleSymbol = checker.getSymbolAtLocation(entry);
|
|
22
|
+
if (moduleSymbol === undefined)
|
|
23
|
+
return null;
|
|
24
|
+
const exported = checker.getExportsOfModule(moduleSymbol).find((s) => ts.symbolName(s) === name);
|
|
25
|
+
if (exported === undefined)
|
|
26
|
+
return null;
|
|
27
|
+
let symbol = exported;
|
|
28
|
+
// Alias chains are bounded like any other syntactic walk: a malformed or
|
|
29
|
+
// cyclic export graph must not spin here (the checker itself refuses
|
|
30
|
+
// cycles earlier; this is the belt).
|
|
31
|
+
for (let hops = 0; hops < 32 && (symbol.flags & ts.SymbolFlags.Alias) !== 0; hops++)
|
|
32
|
+
symbol = checker.getAliasedSymbol(symbol);
|
|
33
|
+
return symbol;
|
|
34
|
+
}
|
|
35
|
+
/** Resolve the profile's export names against the entry module — the facts
|
|
36
|
+
* the SC4002/SC4004/SC4007 refusals key on, by exported name. Names the
|
|
37
|
+
* entry does not export at all are absent from the map. */
|
|
38
|
+
export function entryExportFacts(program, entry, names) {
|
|
14
39
|
const out = new Map();
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
const
|
|
20
|
-
if (
|
|
21
|
-
continue;
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
40
|
+
if (names.length === 0)
|
|
41
|
+
return out;
|
|
42
|
+
const checker = program.getTypeChecker();
|
|
43
|
+
for (const name of names) {
|
|
44
|
+
const symbol = resolveEntryExportSymbol(checker, entry, name);
|
|
45
|
+
if (symbol === null)
|
|
46
|
+
continue; // not exported: SC4002
|
|
47
|
+
out.set(name, exportFactOf(symbol, name));
|
|
48
|
+
}
|
|
49
|
+
return out;
|
|
50
|
+
}
|
|
51
|
+
/** One export symbol's fact. Overload signatures collapse onto their
|
|
52
|
+
* implementation (same symbol, one body); a name that denotes any other
|
|
53
|
+
* value or type is described by what it is so SC4002 can say so. */
|
|
54
|
+
function exportFactOf(symbol, name) {
|
|
55
|
+
const declarations = symbol.declarations;
|
|
56
|
+
const functions = declarations.filter((d) => ts.isFunctionDeclaration(d));
|
|
57
|
+
if (functions.length > 0) {
|
|
58
|
+
const impl = functions.find((d) => d.body !== undefined) ?? functions[functions.length - 1];
|
|
59
|
+
const sf = ts.getSourceFileOfNode(impl);
|
|
60
|
+
const mods = ts.canHaveModifiers(impl) ? ts.getModifiers(impl) : undefined;
|
|
61
|
+
return {
|
|
62
|
+
kind: "function",
|
|
26
63
|
name,
|
|
27
|
-
loc: { file:
|
|
28
|
-
generic: (
|
|
64
|
+
loc: { file: sf.fileName, start: ts.tokenStartOfNode(impl), end: impl.end },
|
|
65
|
+
generic: (impl.typeParameters?.nodes.length ?? 0) > 0,
|
|
29
66
|
async: mods?.some((m) => m.kind === ts.SyntaxKind.AsyncKeyword) === true,
|
|
30
|
-
generator:
|
|
31
|
-
}
|
|
67
|
+
generator: impl.asteriskToken !== undefined,
|
|
68
|
+
};
|
|
32
69
|
}
|
|
33
|
-
|
|
70
|
+
const declaration = symbol.valueDeclaration ?? declarations[0];
|
|
71
|
+
const loc = declaration === undefined
|
|
72
|
+
? { file: "", start: 0, end: 0 }
|
|
73
|
+
: {
|
|
74
|
+
file: ts.getSourceFileOfNode(declaration).fileName,
|
|
75
|
+
start: ts.tokenStartOfNode(declaration),
|
|
76
|
+
end: declaration.end,
|
|
77
|
+
};
|
|
78
|
+
return { kind: "value", name, loc, what: whatItIs(symbol, declaration) };
|
|
79
|
+
}
|
|
80
|
+
/** A short noun phrase for what a non-function export denotes, for the
|
|
81
|
+
* SC4002 message. */
|
|
82
|
+
function whatItIs(symbol, declaration) {
|
|
83
|
+
if (declaration !== undefined) {
|
|
84
|
+
if (ts.isClassDeclaration(declaration) || ts.isClassExpression(declaration))
|
|
85
|
+
return "a class";
|
|
86
|
+
if (ts.isEnumDeclaration(declaration))
|
|
87
|
+
return "an enum";
|
|
88
|
+
if (ts.isVariableDeclaration(declaration))
|
|
89
|
+
return "a variable";
|
|
90
|
+
if (ts.isImportSpecifier(declaration) || ts.isImportClause(declaration))
|
|
91
|
+
return "an imported binding";
|
|
92
|
+
if (ts.isInterfaceDeclaration(declaration) || ts.isTypeAliasDeclaration(declaration))
|
|
93
|
+
return "a type";
|
|
94
|
+
if (ts.isModuleDeclaration(declaration))
|
|
95
|
+
return "a namespace";
|
|
96
|
+
}
|
|
97
|
+
if ((symbol.flags & ts.SymbolFlags.Class) !== 0)
|
|
98
|
+
return "a class";
|
|
99
|
+
if ((symbol.flags & ts.SymbolFlags.Enum) !== 0)
|
|
100
|
+
return "an enum";
|
|
101
|
+
if ((symbol.flags & ts.SymbolFlags.Variable) !== 0)
|
|
102
|
+
return "a variable";
|
|
103
|
+
if ((symbol.flags & (ts.SymbolFlags.Interface | ts.SymbolFlags.TypeAlias)) !== 0)
|
|
104
|
+
return "a type";
|
|
105
|
+
return "a non-function value";
|
|
34
106
|
}
|
|
35
107
|
//# sourceMappingURL=lib-exports.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib-exports.js","sourceRoot":"","sources":["../../src/frontend/lib-exports.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"lib-exports.js","sourceRoot":"","sources":["../../src/frontend/lib-exports.ts"],"names":[],"mappings":"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"}
|
|
@@ -264,6 +264,15 @@ export function nullishGenericBindingUnitOf(lowerer, sym) {
|
|
|
264
264
|
return null;
|
|
265
265
|
const declared = lowerer.checker.getTypeOfSymbol(sym);
|
|
266
266
|
const mapped = lowerer.mapTypeOf(declared);
|
|
267
|
+
// A DECLARED generic signature (`let a: <T>() => T = null!`) maps to its
|
|
268
|
+
// erased func type, but a nullish value has no func slot either: the
|
|
269
|
+
// no-storage family keeps the binding, exactly as it does for the empty
|
|
270
|
+
// record below. A non-generic func slot keeps its storage and its
|
|
271
|
+
// representation error.
|
|
272
|
+
if (mapped !== null &&
|
|
273
|
+
mapped.kind === "func" &&
|
|
274
|
+
lowerer.checker.getCallSignatures(declared).some((sig) => sig.getTypeParameters().length > 0))
|
|
275
|
+
return unit;
|
|
267
276
|
if (mapped !== null) {
|
|
268
277
|
// Only the EMPTY interned shape qualifies among record mappings —
|
|
269
278
|
// the all-generic-signature interface (`I<A & B>`) whose struct has
|
|
@@ -402,9 +411,18 @@ export function deadUnmappableBinding(lowerer, sym, decl) {
|
|
|
402
411
|
// The type gate LAST among the cheap checks: querying the checker for
|
|
403
412
|
// a type is the expensive step (and can panic upstream — the 1e999
|
|
404
413
|
// bug), so only survivors of the syntactic filters pay it. Mappable
|
|
405
|
-
// types keep their real storage
|
|
406
|
-
|
|
407
|
-
|
|
414
|
+
// types keep their real storage, EXCEPT a generic signature, which now
|
|
415
|
+
// maps to its erased func type (`var a1: { <T, U extends T>(): void }`):
|
|
416
|
+
// a dead binding of one is still materialized and dropped by Node, so
|
|
417
|
+
// it keeps this family's zero code instead of gaining a func slot.
|
|
418
|
+
const declared = lowerer.checker.getTypeOfSymbol(sym);
|
|
419
|
+
const mapped = lowerer.mapTypeOf(declared);
|
|
420
|
+
if (mapped !== null) {
|
|
421
|
+
const erasedSignature = mapped.kind === "func" &&
|
|
422
|
+
lowerer.checker.getCallSignatures(declared).some((sig) => sig.getTypeParameters().length > 0);
|
|
423
|
+
if (!erasedSignature)
|
|
424
|
+
return false;
|
|
425
|
+
}
|
|
408
426
|
const symText = ts.symbolName(sym);
|
|
409
427
|
const namesSym = (e) => ts.isIdentifier(e) && e.text === symText && lowerer.resolveValueSymbol(e) === sym;
|
|
410
428
|
let dead = true;
|