@scriptc/compiler 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ambient/scriptc-node-fallback.d.ts +25 -15
- package/dist/backend/cycle-analysis.js +1 -0
- package/dist/backend/cycle-analysis.js.map +1 -1
- package/dist/backend/llvm/classes.js +21 -5
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/dyn.d.ts +5 -0
- package/dist/backend/llvm/dyn.js +166 -99
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +2 -2
- package/dist/backend/llvm/emitter.js +79 -20
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/expr-bytes.d.ts +1 -1
- package/dist/backend/llvm/expr-bytes.js +28 -17
- package/dist/backend/llvm/expr-bytes.js.map +1 -1
- package/dist/backend/llvm/expr-control.js +1 -1
- package/dist/backend/llvm/expr-control.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.js +18 -9
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +11 -1
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-records.js +11 -3
- package/dist/backend/llvm/expr-records.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.js +125 -17
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/lib-process.js +23 -3
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +45 -2
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/shapes.js +8 -2
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/native-toolchain.d.ts +3 -6
- package/dist/backend/native-toolchain.js +53 -23
- package/dist/backend/native-toolchain.js.map +1 -1
- package/dist/backend/native-toolchain.test.js +72 -0
- package/dist/backend/native-toolchain.test.js.map +1 -1
- package/dist/backend/runtime-abi.d.ts +2 -2
- package/dist/backend/runtime-abi.js +2 -2
- package/dist/backend/runtime-pack-native.js +4 -1
- package/dist/backend/runtime-pack-native.js.map +1 -1
- package/dist/backend/runtime-pack-targets.test.js +1 -1
- package/dist/backend/runtime-pack.test.js +1 -1
- package/dist/backend/targets.js +10 -6
- package/dist/backend/targets.js.map +1 -1
- package/dist/backend/targets.test.js +7 -0
- package/dist/backend/targets.test.js.map +1 -1
- package/dist/compat/fetch-profile.js +34 -4
- package/dist/compat/fetch-profile.js.map +1 -1
- package/dist/diagnostics/diagnostic.js +2 -7
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/frontend/lowering/class-callbacks.d.ts +3 -3
- package/dist/frontend/lowering/class-callbacks.js +26 -15
- package/dist/frontend/lowering/class-callbacks.js.map +1 -1
- package/dist/frontend/lowering/class-construction.d.ts +12 -0
- package/dist/frontend/lowering/class-construction.js +156 -0
- package/dist/frontend/lowering/class-construction.js.map +1 -0
- package/dist/frontend/lowering/class-descriptors.d.ts +1 -0
- package/dist/frontend/lowering/class-descriptors.js +46 -5
- package/dist/frontend/lowering/class-descriptors.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +11 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.js +403 -48
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js +2 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
- package/dist/frontend/lowering/class-instance-constructor.js +4 -1
- package/dist/frontend/lowering/class-instance-constructor.js.map +1 -1
- package/dist/frontend/lowering/class-method-values.d.ts +4 -1
- package/dist/frontend/lowering/class-method-values.js +72 -7
- package/dist/frontend/lowering/class-method-values.js.map +1 -1
- package/dist/frontend/lowering/class-prototypes.d.ts +5 -2
- package/dist/frontend/lowering/class-prototypes.js +121 -13
- 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 +66 -0
- package/dist/frontend/lowering/class-runtime-statics.js.map +1 -0
- package/dist/frontend/lowering/class-static-data.js +2 -2
- package/dist/frontend/lowering/class-static-data.js.map +1 -1
- package/dist/frontend/lowering/containers/bytes.js +49 -13
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/containers/string-and-regexp.js +19 -47
- package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
- package/dist/frontend/lowering/error-methods.d.ts +4 -1
- package/dist/frontend/lowering/error-methods.js +100 -1
- package/dist/frontend/lowering/error-methods.js.map +1 -1
- package/dist/frontend/lowering/expressions/native-proxy.js +3 -1
- package/dist/frontend/lowering/expressions/native-proxy.js.map +1 -1
- package/dist/frontend/lowering/expressions/nullish-assignment.js +19 -11
- package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
- package/dist/frontend/lowering/expressions/object-literals.js +38 -7
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/optional-chains.d.ts +3 -4
- package/dist/frontend/lowering/expressions/optional-chains.js +69 -17
- package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
- package/dist/frontend/lowering/function-context.d.ts +11 -3
- package/dist/frontend/lowering/function-context.js +11 -5
- package/dist/frontend/lowering/function-context.js.map +1 -1
- package/dist/frontend/lowering/generator-dynamic-dispatch.d.ts +1 -0
- package/dist/frontend/lowering/generator-dynamic-dispatch.js +39 -1
- package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/lib-boundary.d.ts +2 -0
- package/dist/frontend/lowering/lib-boundary.js +54 -1
- package/dist/frontend/lowering/lib-boundary.js.map +1 -1
- package/dist/frontend/lowering/lower-builtin-values.d.ts +7 -1
- package/dist/frontend/lowering/lower-builtin-values.js +113 -3
- package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
- package/dist/frontend/lowering/lower-builtins.d.ts +6 -5
- package/dist/frontend/lowering/lower-builtins.js +156 -41
- package/dist/frontend/lowering/lower-builtins.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.d.ts +8 -5
- package/dist/frontend/lowering/lower-calls.js +448 -83
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +13 -13
- package/dist/frontend/lowering/lower-classes.js +650 -176
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-containers.d.ts +9 -0
- package/dist/frontend/lowering/lower-containers.js +135 -36
- package/dist/frontend/lowering/lower-containers.js.map +1 -1
- package/dist/frontend/lowering/lower-dgram.js +3 -2
- package/dist/frontend/lowering/lower-dgram.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.d.ts +2 -2
- package/dist/frontend/lowering/lower-exprs.js +531 -126
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-generators.js +12 -1
- package/dist/frontend/lowering/lower-generators.js.map +1 -1
- package/dist/frontend/lowering/lower-island.d.ts +2 -0
- package/dist/frontend/lowering/lower-island.js +32 -10
- package/dist/frontend/lowering/lower-island.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.js +220 -17
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.test.d.ts +1 -0
- package/dist/frontend/lowering/lower-modules.test.js +39 -0
- package/dist/frontend/lowering/lower-modules.test.js.map +1 -0
- package/dist/frontend/lowering/lower-stmts.d.ts +7 -3
- package/dist/frontend/lowering/lower-stmts.js +135 -26
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.js +1 -1
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +27 -1
- package/dist/frontend/lowering/lowerer.js +172 -50
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/lowerer.test.js +149 -3
- package/dist/frontend/lowering/lowerer.test.js.map +1 -1
- package/dist/frontend/lowering/surfaces.d.ts +2 -0
- package/dist/frontend/lowering/surfaces.js +25 -8
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/lowering/text-decoder-encoding.d.ts +2 -0
- package/dist/frontend/lowering/text-decoder-encoding.js +5 -0
- package/dist/frontend/lowering/text-decoder-encoding.js.map +1 -1
- package/dist/frontend/lowering/unregistered-class-types.test.js +3 -3
- package/dist/frontend/lowering/unregistered-class-types.test.js.map +1 -1
- package/dist/frontend/npm-static-prune.js +116 -34
- package/dist/frontend/npm-static-prune.js.map +1 -1
- package/dist/frontend/npm-static-prune.test.js +8 -0
- package/dist/frontend/npm-static-prune.test.js.map +1 -1
- package/dist/frontend/program.d.ts +1 -1
- package/dist/frontend/program.js +53 -24
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/program.test.js +18 -0
- package/dist/frontend/program.test.js.map +1 -1
- package/dist/frontend/ts7/ast.js +4 -3
- package/dist/frontend/ts7/ast.js.map +1 -1
- package/dist/frontend/ts7/semantic-json.js +5 -10
- package/dist/frontend/ts7/semantic-json.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +9 -1
- package/dist/frontend/type-mapper.js +90 -13
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/frontend/type-mapper.test.js +23 -0
- package/dist/frontend/type-mapper.test.js.map +1 -1
- package/dist/frontend/union-discriminants.d.ts +1 -1
- package/dist/frontend/union-discriminants.js +2 -2
- package/dist/frontend/union-discriminants.js.map +1 -1
- package/dist/ir/analysis.js +2 -0
- package/dist/ir/analysis.js.map +1 -1
- package/dist/ir/ir.d.ts +52 -33
- package/dist/ir/ir.js +142 -42
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/ir.test.js +35 -0
- package/dist/ir/ir.test.js.map +1 -1
- package/dist/ir/serialize.js +15 -3
- package/dist/ir/serialize.js.map +1 -1
- package/dist/ir/serialize.test.js +5 -1
- package/dist/ir/serialize.test.js.map +1 -1
- package/dist/ir/validate.js +80 -11
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +61 -1
- package/dist/ir/validate.test.js.map +1 -1
- package/dist/native/sanitizer.js +3 -1
- package/dist/native/sanitizer.js.map +1 -1
- package/dist/native/toolchain.d.ts +1 -1
- package/dist/native/toolchain.js +26 -6
- package/dist/native/toolchain.js.map +1 -1
- package/dist/native/toolchain.test.js +53 -1
- package/dist/native/toolchain.test.js.map +1 -1
- package/package.json +20 -20
- package/surface-manifest.json +56 -81
|
@@ -5,6 +5,24 @@ import { expect, test, vi } from "vitest";
|
|
|
5
5
|
import { checkPreflight, isNodeEsmFile, loadProgram, makeCycleAdmission } from "./program-node.js";
|
|
6
6
|
import * as ts from "./ts7/ast.js";
|
|
7
7
|
import { AstNode } from "./ts7/ast-node.js";
|
|
8
|
+
import { SemanticChecker } from "./ts7/semantic-checker.js";
|
|
9
|
+
test("program-root discovery does not fetch types for unrelated string calls", () => {
|
|
10
|
+
const dir = mkdtempSync(join(tmpdir(), "scriptc-root-queries-"));
|
|
11
|
+
const entry = join(dir, "main.ts");
|
|
12
|
+
writeFileSync(join(dir, "package.json"), '{"type":"module"}');
|
|
13
|
+
writeFileSync(entry, 'function label(text: string) { return text; } console.log(label("ready"));\n');
|
|
14
|
+
const types = vi.spyOn(SemanticChecker.prototype, "getTypeOfSymbol");
|
|
15
|
+
const load = loadProgram(entry);
|
|
16
|
+
try {
|
|
17
|
+
expect(types).not.toHaveBeenCalled();
|
|
18
|
+
expect(checkPreflight(load)).toEqual([]);
|
|
19
|
+
}
|
|
20
|
+
finally {
|
|
21
|
+
types.mockRestore();
|
|
22
|
+
load.dispose();
|
|
23
|
+
rmSync(dir, { recursive: true, force: true });
|
|
24
|
+
}
|
|
25
|
+
});
|
|
8
26
|
test("ambiguous module classification bounds ancestor work on deep expressions", () => {
|
|
9
27
|
const directory = mkdtempSync(join(process.platform === "win32" ? tmpdir() : "/tmp", "scriptc-module-depth-"));
|
|
10
28
|
const entry = join(directory, "main.js");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"program.test.js","sourceRoot":"","sources":["../../src/frontend/program.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,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,kBAAkB,EAAkB,MAAM,mBAAmB,CAAC;AACnH,OAAO,KAAK,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"program.test.js","sourceRoot":"","sources":["../../src/frontend/program.test.ts"],"names":[],"mappings":"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"}
|
package/dist/frontend/ts7/ast.js
CHANGED
|
@@ -62,6 +62,9 @@ export function walkPreorder(root, cb) {
|
|
|
62
62
|
const stack = [root];
|
|
63
63
|
const depths = [0];
|
|
64
64
|
const children = [];
|
|
65
|
+
// The buffer belongs to this walk. Reuse its visitor too: constructing a
|
|
66
|
+
// closure per node adds allocation and cycle-collection work natively.
|
|
67
|
+
const appendChild = (child) => { children.push(child); };
|
|
65
68
|
while (stack.length > 0) {
|
|
66
69
|
const n = stack.pop();
|
|
67
70
|
const depth = depths.pop();
|
|
@@ -71,9 +74,7 @@ export function walkPreorder(root, cb) {
|
|
|
71
74
|
if (verdict === "skip")
|
|
72
75
|
continue;
|
|
73
76
|
children.length = 0;
|
|
74
|
-
n.forEachChild(
|
|
75
|
-
children.push(c);
|
|
76
|
-
});
|
|
77
|
+
n.forEachChild(appendChild);
|
|
77
78
|
for (let i = children.length - 1; i >= 0; i--) {
|
|
78
79
|
stack.push(children[i]);
|
|
79
80
|
depths.push(depth + 1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ast.js","sourceRoot":"","sources":["../../../src/frontend/ts7/ast.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;+CAkB+C;AAe/C,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,wBAAwB,EACxB,gBAAgB,EAChB,sBAAsB,EACtB,8BAA8B,EAC9B,wBAAwB,EACxB,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,EACrB,yBAAyB,EACzB,mBAAmB,GACpB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEvD,qDAAqD;AAErD,2EAA2E;AAC3E,6EAA6E;AAC7E,cAAc,gBAAgB,CAAC;AAC/B,cAAc,2BAA2B,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,iEAAiE;AAEjE,MAAM,CAAC,MAAM,WAAW,GAA6D,sBAAsB,CAAC;AAC5G,MAAM,CAAC,MAAM,mBAAmB,GAC9B,8BAA8B,CAAC;AACjC,MAAM,CAAC,MAAM,mBAAmB,GAA8D,uBAAuB,CAAC;AACtH,MAAM,CAAC,MAAM,aAAa,GAA+D,wBAAwB,CAAC;AAClH,MAAM,CAAC,MAAM,aAAa,GAA+D,wBAAwB,CAAC;AAClH,MAAM,CAAC,MAAM,UAAU,GAA4D,qBAAqB,CAAC;AAOzG;;;;+DAI+D;AAC/D,MAAM,UAAU,cAAc,CAAC,IAAsB;IACnD,OAAO,sBAAsB,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC;AAChE,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,gBAAgB,CAAC,IAAgB;IAC/C,OAAO,IAAI,CAAC,uBAAuB,KAAK,SAAS,CAAC;AACpD,CAAC;AAED,0DAA0D;AAE1D,MAAM,UAAU,YAAY,CAC1B,IAAU,EACV,MAAqC,EACrC,OAAmD;IAEnD,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC;AAED;;;;;;;;;4CAS4C;AAC5C,MAAM,UAAU,YAAY,CAC1B,IAAU,EACV,EAAyD;IAEzD,MAAM,KAAK,GAAW,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,MAAM,GAAa,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,QAAQ,GAAW,EAAE,CAAC;IAC5B,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,EAAG,CAAC;QACvB,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,EAAG,CAAC;QAC5B,MAAM,OAAO,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC7B,IAAI,OAAO,KAAK,MAAM;YAAE,OAAO;QAC/B,IAAI,OAAO,KAAK,MAAM;YAAE,SAAS;QACjC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QACpB,CAAC,CAAC,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"ast.js","sourceRoot":"","sources":["../../../src/frontend/ts7/ast.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,17 +2,12 @@
|
|
|
2
2
|
* JSON.parse itself validates grammar. A valid surrogate pair is preserved;
|
|
3
3
|
* a lone escape must not silently change a type literal or symbol name. */
|
|
4
4
|
export function checkSemanticJsonStrings(json, preservesSurrogates) {
|
|
5
|
-
|
|
5
|
+
// Most checker responses contain no Unicode escapes. Inspect only escape
|
|
6
|
+
// sequences instead of mapping every native string index to UTF-16. Valid
|
|
7
|
+
// JSON has no backslashes outside strings; JSON.parse checks the grammar.
|
|
8
|
+
if (preservesSurrogates || !json.includes("\\u"))
|
|
6
9
|
return;
|
|
7
|
-
let
|
|
8
|
-
for (let index = 0; index < json.length; index++) {
|
|
9
|
-
const code = json.charCodeAt(index);
|
|
10
|
-
if (code === 34) {
|
|
11
|
-
inString = !inString;
|
|
12
|
-
continue;
|
|
13
|
-
}
|
|
14
|
-
if (!inString || code !== 92)
|
|
15
|
-
continue;
|
|
10
|
+
for (let index = json.indexOf("\\"); index >= 0; index = json.indexOf("\\", index + 1)) {
|
|
16
11
|
if (json.charCodeAt(++index) !== 117)
|
|
17
12
|
continue;
|
|
18
13
|
const unit = jsonHexUnit(json, index + 1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"semantic-json.js","sourceRoot":"","sources":["../../../src/frontend/ts7/semantic-json.ts"],"names":[],"mappings":"AAAA;;2EAE2E;AAC3E,MAAM,UAAU,wBAAwB,CAAC,IAAY,EAAE,mBAA4B;IACjF,
|
|
1
|
+
{"version":3,"file":"semantic-json.js","sourceRoot":"","sources":["../../../src/frontend/ts7/semantic-json.ts"],"names":[],"mappings":"AAAA;;2EAE2E;AAC3E,MAAM,UAAU,wBAAwB,CAAC,IAAY,EAAE,mBAA4B;IACjF,yEAAyE;IACzE,0EAA0E;IAC1E,0EAA0E;IAC1E,IAAI,mBAAmB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO;IACzD,KAAK,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;QACvF,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,KAAK,GAAG;YAAE,SAAS;QAC/C,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QAC1C,KAAK,IAAI,CAAC,CAAC;QACX,IAAI,IAAI,GAAG,MAAM,IAAI,IAAI,GAAG,MAAM;YAAE,SAAS;QAC7C,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YAC9F,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;YAC1C,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;gBAAC,KAAK,IAAI,CAAC,CAAC;gBAAC,SAAS;YAAC,CAAC;QACjE,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,8EAA8E,CAAC,CAAC;IAClG,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,IAAY,EAAE,MAAc;IAC/C,IAAI,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM;QAAE,OAAO,CAAC,CAAC,CAAC;IACxC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,KAAK,GAAG,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;QACrD,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvI,IAAI,KAAK,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC,CAAC;QACzB,KAAK,GAAG,KAAK,GAAG,EAAE,GAAG,KAAK,CAAC;IAC7B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,wEAAwE;AACxE,4EAA4E;AAC5E,MAAM,uBAAuB,GAAI,IAAI,CAAC,KAAK,CAAC,WAAW,CAAY,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC;AAE7F,MAAM,UAAU,iBAAiB,CAAI,IAAY;IAC/C,wBAAwB,CAAC,IAAI,EAAE,uBAAuB,CAAC,CAAC;IACxD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAM,CAAC;AAC/B,CAAC"}
|
|
@@ -13,7 +13,7 @@ export declare function jsOpenObjectType(decl: ts.Node | undefined, type: IrType
|
|
|
13
13
|
* dynamic-only even though response.headers is native.
|
|
14
14
|
* Declaration provenance is checked in mapType so user types with the
|
|
15
15
|
* same names keep their ordinary structural representation. */
|
|
16
|
-
export declare const ISLAND_AMBIENT_TYPES: readonly ["Response", "ResponseInit", "RequestInit", "Event", "EventTarget", "AbortController", "AbortSignal", "Headers", "ReadableStream", "ReadableStreamDefaultReader", "ReadableStreamDefaultController", "ReadableStreamReadResult", "ReadableStreamReadValueResult", "ReadableStreamReadDoneResult"];
|
|
16
|
+
export declare const ISLAND_AMBIENT_TYPES: readonly ["Response", "Request", "ResponseInit", "RequestInit", "Event", "EventTarget", "AbortController", "AbortSignal", "Headers", "ReadableStream", "ReadableStreamDefaultReader", "ReadableStreamDefaultController", "ReadableStreamReadResult", "ReadableStreamReadValueResult", "ReadableStreamReadDoneResult"];
|
|
17
17
|
/** True for the parseArgs type family that deliberately rides dyn. Exported
|
|
18
18
|
* for the property-read bridge after TypeScript narrows a token union arm. */
|
|
19
19
|
export declare function isParseArgsDynTypeName(name: string): boolean;
|
|
@@ -27,6 +27,8 @@ export type DeclaredOrderPriority = readonly number[] | DeclaredOrderPriorityRef
|
|
|
27
27
|
* struct). Owned by the Lowerer; `mapType` needs it to intern the object
|
|
28
28
|
* types it encounters, which is why it is threaded through as a parameter. */
|
|
29
29
|
export declare class ShapeRegistry {
|
|
30
|
+
/** Existing layouts change only when a recursive placeholder closes. */
|
|
31
|
+
revision: number;
|
|
30
32
|
private readonly byKey;
|
|
31
33
|
private readonly byId;
|
|
32
34
|
/** Historical emit-order rank of the declaration-order metadata each
|
|
@@ -122,8 +124,11 @@ export declare class ShapeRegistry {
|
|
|
122
124
|
* discriminator contract. An arm's index in that list IS its runtime tag.
|
|
123
125
|
* Owned by the Lowerer; threaded through mapType like ShapeRegistry. */
|
|
124
126
|
export declare class UnionRegistry {
|
|
127
|
+
/** Existing arm/discriminator contracts change when a placeholder closes. */
|
|
128
|
+
revision: number;
|
|
125
129
|
private readonly byKey;
|
|
126
130
|
private readonly byId;
|
|
131
|
+
private readonly armTags;
|
|
127
132
|
/** All interned unions in first-seen (`u0`, `u1`, ...) order. */
|
|
128
133
|
readonly unions: IrUnionDef[];
|
|
129
134
|
/** ts.Types currently being mapped — a back-reference to one is the
|
|
@@ -155,6 +160,9 @@ export declare class UnionRegistry {
|
|
|
155
160
|
/** An exact arm transformation keeps the source's semantic variants. */
|
|
156
161
|
transform(source: IrUnionDef, arms: IrType[]): string;
|
|
157
162
|
get(unionId: string): IrUnionDef | undefined;
|
|
163
|
+
/** Index large arm lists once. Exact equality still resolves type-key
|
|
164
|
+
* collisions, including optional function ABI flags. */
|
|
165
|
+
armTag(unionId: string, arm: IrType): number;
|
|
158
166
|
}
|
|
159
167
|
/** Human-readable rendering of an IrType for diagnostics (records expand to
|
|
160
168
|
* their canonical field list, unions to their arms; `checker.typeToString`
|
|
@@ -18,10 +18,26 @@ export function jsOpenObjectType(decl, type, shapes, unions) {
|
|
|
18
18
|
return type;
|
|
19
19
|
const arms = type.kind === "union" ? unions.get(type.unionId)?.arms : [type];
|
|
20
20
|
const present = arms?.filter((arm) => arm.kind !== "undefinedT");
|
|
21
|
+
const parameter = ts.isParameter(decl) ? decl : decl.parent && ts.isParameter(decl.parent) ? decl.parent : null;
|
|
22
|
+
// Numeric array parameters in JavaScript also accept typed arrays. Keep
|
|
23
|
+
// their runtime storage at the boundary, including default [] parameters.
|
|
24
|
+
if (parameter && !parameter.dotDotDotToken && present?.length === 1 &&
|
|
25
|
+
present[0].kind === "array" && present[0].elem.kind === "f64")
|
|
26
|
+
return DYN;
|
|
27
|
+
// An unannotated JavaScript parameter's object default is a fallback,
|
|
28
|
+
// not a closed class contract. Published code routinely passes another
|
|
29
|
+
// implementation of the same protocol through a boxed callable.
|
|
30
|
+
if (parameter?.initializer && !parameter.type &&
|
|
31
|
+
present?.some((arm) => arm.kind === "object") &&
|
|
32
|
+
arms?.every((arm) => canConvertToDyn(arm, (id) => shapes.get(id), (id) => unions.get(id))))
|
|
33
|
+
return DYN;
|
|
21
34
|
if (present?.length !== 1 || present[0].kind !== "record")
|
|
22
35
|
return type;
|
|
23
36
|
const shape = shapes.get(present[0].shapeId);
|
|
24
|
-
|
|
37
|
+
const unitOnly = (field) => isUnitType(field) || field.kind === "void" ||
|
|
38
|
+
field.kind === "union" && unions.get(field.unionId)?.arms.every(isUnitType) === true;
|
|
39
|
+
return shape && !shape.tuple && !shape.indexValue &&
|
|
40
|
+
(shape.fields.length === 0 || shape.fields.some((field) => unitOnly(field.type))) ? DYN : type;
|
|
25
41
|
}
|
|
26
42
|
/** The ambient TYPE names of the fetch slice. Under --dynamic their
|
|
27
43
|
* values live in the embedded engine and map to island handles (jsval).
|
|
@@ -33,6 +49,7 @@ export function jsOpenObjectType(decl, type, shapes, unions) {
|
|
|
33
49
|
* same names keep their ordinary structural representation. */
|
|
34
50
|
export const ISLAND_AMBIENT_TYPES = [
|
|
35
51
|
"Response",
|
|
52
|
+
"Request",
|
|
36
53
|
"ResponseInit",
|
|
37
54
|
"RequestInit",
|
|
38
55
|
"Event",
|
|
@@ -100,6 +117,8 @@ function comparePriority(left, right) {
|
|
|
100
117
|
* struct). Owned by the Lowerer; `mapType` needs it to intern the object
|
|
101
118
|
* types it encounters, which is why it is threaded through as a parameter. */
|
|
102
119
|
export class ShapeRegistry {
|
|
120
|
+
/** Existing layouts change only when a recursive placeholder closes. */
|
|
121
|
+
revision = 0;
|
|
103
122
|
byKey = new Map();
|
|
104
123
|
byId = new Map();
|
|
105
124
|
/** Historical emit-order rank of the declaration-order metadata each
|
|
@@ -259,6 +278,7 @@ export class ShapeRegistry {
|
|
|
259
278
|
shape.indexValue = indexValue;
|
|
260
279
|
this.adoptDeclaredOrder(shape, declaredOrder);
|
|
261
280
|
this.pendingRec.delete(id);
|
|
281
|
+
this.revision++;
|
|
262
282
|
const key = this.keyOf(fields, false, indexValue);
|
|
263
283
|
if (!this.byKey.has(key))
|
|
264
284
|
this.byKey.set(key, id);
|
|
@@ -312,8 +332,11 @@ export class ShapeRegistry {
|
|
|
312
332
|
* discriminator contract. An arm's index in that list IS its runtime tag.
|
|
313
333
|
* Owned by the Lowerer; threaded through mapType like ShapeRegistry. */
|
|
314
334
|
export class UnionRegistry {
|
|
335
|
+
/** Existing arm/discriminator contracts change when a placeholder closes. */
|
|
336
|
+
revision = 0;
|
|
315
337
|
byKey = new Map();
|
|
316
338
|
byId = new Map();
|
|
339
|
+
armTags = new Map();
|
|
317
340
|
/** All interned unions in first-seen (`u0`, `u1`, ...) order. */
|
|
318
341
|
unions = [];
|
|
319
342
|
/** ts.Types currently being mapped — a back-reference to one is the
|
|
@@ -366,6 +389,8 @@ export class UnionRegistry {
|
|
|
366
389
|
if (discriminant)
|
|
367
390
|
def.discriminant = discriminant;
|
|
368
391
|
this.pendingRec.delete(id);
|
|
392
|
+
this.armTags.delete(id);
|
|
393
|
+
this.revision++;
|
|
369
394
|
const key = JSON.stringify([arms.map(typeKey), discriminant]);
|
|
370
395
|
if (!this.byKey.has(key))
|
|
371
396
|
this.byKey.set(key, id);
|
|
@@ -392,6 +417,29 @@ export class UnionRegistry {
|
|
|
392
417
|
get(unionId) {
|
|
393
418
|
return this.byId.get(unionId);
|
|
394
419
|
}
|
|
420
|
+
/** Index large arm lists once. Exact equality still resolves type-key
|
|
421
|
+
* collisions, including optional function ABI flags. */
|
|
422
|
+
armTag(unionId, arm) {
|
|
423
|
+
const def = this.byId.get(unionId);
|
|
424
|
+
if (!def)
|
|
425
|
+
return -1;
|
|
426
|
+
if (def.arms.length < 8)
|
|
427
|
+
return def.arms.findIndex((candidate) => typeEquals(candidate, arm));
|
|
428
|
+
let tags = this.armTags.get(unionId);
|
|
429
|
+
if (!tags) {
|
|
430
|
+
tags = new Map();
|
|
431
|
+
def.arms.forEach((candidate, tag) => {
|
|
432
|
+
const key = typeKey(candidate);
|
|
433
|
+
const previous = tags.get(key);
|
|
434
|
+
if (previous)
|
|
435
|
+
previous.push(tag);
|
|
436
|
+
else
|
|
437
|
+
tags.set(key, [tag]);
|
|
438
|
+
});
|
|
439
|
+
this.armTags.set(unionId, tags);
|
|
440
|
+
}
|
|
441
|
+
return tags.get(typeKey(arm))?.find((tag) => typeEquals(def.arms[tag], arm)) ?? -1;
|
|
442
|
+
}
|
|
395
443
|
}
|
|
396
444
|
/** Human-readable rendering of an IrType for diagnostics (records expand to
|
|
397
445
|
* their canonical field list, unions to their arms; `checker.typeToString`
|
|
@@ -717,11 +765,8 @@ export function containsUnion(t) {
|
|
|
717
765
|
* sentinel; any/unknown ride dyn; undefined-only yields have no C value
|
|
718
766
|
* form (null); else the mapped type.
|
|
719
767
|
* - return: void/undefined/never carry no value (VOID — the done-value is
|
|
720
|
-
* the undefined arm); any/unknown
|
|
721
|
-
*
|
|
722
|
-
* "no modeled return value" — VOID, not dyn (a dyn return channel would
|
|
723
|
-
* force the yield channel dyn too; bodies that `return v` under a
|
|
724
|
-
* defaulted TReturn keep their fence at the return site).
|
|
768
|
+
* the undefined arm); any/unknown carry checked values. A defaulted or
|
|
769
|
+
* inferred return channel can still return a value and must preserve it.
|
|
725
770
|
* - next: void/undefined/never mean valueless resumes (the undefined
|
|
726
771
|
* unit); any/unknown ride dyn; else the mapped type (`.next(v)` then
|
|
727
772
|
* requires its argument — fenced at the call site).
|
|
@@ -744,9 +789,9 @@ function genChannels(yieldTs, retTs, nextTs, ctx) {
|
|
|
744
789
|
}
|
|
745
790
|
if (!yieldT)
|
|
746
791
|
return null;
|
|
747
|
-
const retT = retTs === undefined || retTs.flags &
|
|
792
|
+
const retT = retTs === undefined || retTs.flags & UNITISH
|
|
748
793
|
? VOID
|
|
749
|
-
: mapType(retTs, ctx);
|
|
794
|
+
: retTs.flags & ANYISH ? DYN : mapType(retTs, ctx);
|
|
750
795
|
if (!retT || (retT.kind !== "void" && isUnitType(retT)))
|
|
751
796
|
return null;
|
|
752
797
|
const nextT = nextTs === undefined || nextTs.flags & UNITISH
|
|
@@ -1201,7 +1246,7 @@ function mapTypeInner(type, ctx) {
|
|
|
1201
1246
|
}
|
|
1202
1247
|
const fields = [];
|
|
1203
1248
|
for (let i = 0; i < args.length; i++) {
|
|
1204
|
-
let et = mapType(args[i], ctx);
|
|
1249
|
+
let et = !ctx.dynamic && (args[i].flags & ts.TypeFlags.Any) !== 0 ? DYN : mapType(args[i], ctx);
|
|
1205
1250
|
// A unit-only element (`[number, undefined]`) rides the unit-only
|
|
1206
1251
|
// union, the record-field rule.
|
|
1207
1252
|
if (et?.kind === "void" && isUnitOnlyTsType(args[i], ctx.resolveTypeParam))
|
|
@@ -1495,7 +1540,7 @@ function mapTypeInner(type, ctx) {
|
|
|
1495
1540
|
checker.declarationsOf(psym).some((d) => (ts.isInterfaceDeclaration(d) || ts.isClassDeclaration(d)) && ctx.isStdlibFile(d.getSourceFile()))) {
|
|
1496
1541
|
return {
|
|
1497
1542
|
kind: "record",
|
|
1498
|
-
shapeId: ctx.shapes.intern([{ name: `%${psym.name}`, type: F64 }], false, undefined, []),
|
|
1543
|
+
shapeId: ctx.shapes.intern([{ name: `%${psym.name}`, type: F64 }, ...(psym.name === "TextDecoder" ? [{ name: "%fatal", type: BOOL }, { name: "%ignoreBOM", type: BOOL }, { name: "%state", type: DYN }] : [])], false, undefined, []),
|
|
1499
1544
|
};
|
|
1500
1545
|
}
|
|
1501
1546
|
// string_decoder.StringDecoder: the decoder value is a two-field record
|
|
@@ -1562,6 +1607,10 @@ function mapTypeInner(type, ctx) {
|
|
|
1562
1607
|
// read has its own lowering (errno/syscall/path stay per-member fences).
|
|
1563
1608
|
if (isStdlibInterface("ErrnoException"))
|
|
1564
1609
|
return { kind: "object", className: "%Error" };
|
|
1610
|
+
// spawn consumes a presence-sensitive option bag, including optional
|
|
1611
|
+
// stdio and env values. Keep it checked-dynamic for native normalization.
|
|
1612
|
+
if (isStdlibInterface("SpawnOptions"))
|
|
1613
|
+
return DYN;
|
|
1565
1614
|
// The fetch ambient slice: under --dynamic these are island handles
|
|
1566
1615
|
// exactly like npm-declared types. Static fetch has one deliberately
|
|
1567
1616
|
// narrower native representation: Response is an opaque checked-
|
|
@@ -1705,6 +1754,8 @@ function mapTypeInner(type, ctx) {
|
|
|
1705
1754
|
return F64;
|
|
1706
1755
|
if (isStdlibInterface("ArrayBuffer") || isStdlibInterface("PropertyDescriptor") || isStdlibInterface("ProcessVersions"))
|
|
1707
1756
|
return DYN;
|
|
1757
|
+
if (Object.values(BYTES_ELEMENT_NAME).some((name) => isStdlibInterface(`${name}Constructor`)))
|
|
1758
|
+
return DYN;
|
|
1708
1759
|
if (isStdlibInterface("Uint8Array"))
|
|
1709
1760
|
return bytesOf("u8");
|
|
1710
1761
|
if (isStdlibInterface("Uint32Array"))
|
|
@@ -2053,6 +2104,9 @@ function mapTypeInner(type, ctx) {
|
|
|
2053
2104
|
return null;
|
|
2054
2105
|
return { kind: "promise", inner };
|
|
2055
2106
|
}
|
|
2107
|
+
// Native collection iterators use checked runtime iterator objects.
|
|
2108
|
+
if (isStdlibInterface("MapIterator") || isStdlibInterface("SetIterator"))
|
|
2109
|
+
return DYN;
|
|
2056
2110
|
// Generator<T, TReturn, TNext>, AsyncGenerator<T, TReturn, TNext> (and
|
|
2057
2111
|
// the lib's IterableIterator<T, ...>, the older sync annotation spelling):
|
|
2058
2112
|
// the generator kind. Channel normalization keeps the runtime honest:
|
|
@@ -2370,6 +2424,11 @@ function mapTypeInner(type, ctx) {
|
|
|
2370
2424
|
const hybrid = mapHybridCallableIntersection(widened, ctx);
|
|
2371
2425
|
if (hybrid)
|
|
2372
2426
|
return hybrid;
|
|
2427
|
+
// Recursive and Symbol-keyed callable objects need their complete live
|
|
2428
|
+
// property table; dropping those members into a plain closure loses data.
|
|
2429
|
+
if (!ctx.dynamic && checker.getCallSignatures(widened).length > 0 &&
|
|
2430
|
+
checker.getPropertiesOfType(widened).length > 0)
|
|
2431
|
+
return DYN;
|
|
2373
2432
|
}
|
|
2374
2433
|
const callSigs = checker.getCallSignatures(widened);
|
|
2375
2434
|
if (callSigs.length === 1) {
|
|
@@ -2410,6 +2469,12 @@ function mapTypeInner(type, ctx) {
|
|
|
2410
2469
|
ts.isParameter(decl) &&
|
|
2411
2470
|
(decl.questionToken !== undefined || decl.initializer !== undefined);
|
|
2412
2471
|
let pt = mapType(checker.getTypeOfSymbol(p), ctx);
|
|
2472
|
+
// An inferred JavaScript binding pattern consumes an iterable; it
|
|
2473
|
+
// does not require the caller's array to have exactly this length.
|
|
2474
|
+
if (decl && ts.isParameter(decl) && ts.isArrayBindingPattern(decl.name) &&
|
|
2475
|
+
isJsSourceFile(decl.getSourceFile()) && !decl.type &&
|
|
2476
|
+
!/@(?:param|type)\b/.test(decl.getSourceFile().text.slice(decl.parent?.pos ?? decl.pos, decl.getStart())))
|
|
2477
|
+
pt = DYN;
|
|
2413
2478
|
if (pt)
|
|
2414
2479
|
pt = jsOpenObjectType(decl, pt, ctx.shapes, ctx.unions);
|
|
2415
2480
|
// Belt and braces for non-strict type worlds: an optional param's
|
|
@@ -2443,7 +2508,10 @@ function mapTypeInner(type, ctx) {
|
|
|
2443
2508
|
const sigDecl = checker.signatureDeclaration(sig);
|
|
2444
2509
|
const jsUnitReturn = sigDecl !== undefined && isJsSourceFile(sigDecl.getSourceFile()) &&
|
|
2445
2510
|
(retT.flags & (ts.TypeFlags.Null | ts.TypeFlags.Undefined)) !== 0;
|
|
2446
|
-
|
|
2511
|
+
let ret = jsUnitReturn || (!ctx.dynamic && (retT.flags & ts.TypeFlags.Any) !== 0)
|
|
2512
|
+
? DYN : retT.flags & ts.TypeFlags.Never ? VOID : mapType(retT, ctx);
|
|
2513
|
+
if (sigDecl && isJsSourceFile(sigDecl.getSourceFile()) && ret?.kind === "array" && ret.elem.kind === "f64")
|
|
2514
|
+
ret = DYN;
|
|
2447
2515
|
if (!ret)
|
|
2448
2516
|
return null;
|
|
2449
2517
|
return typedRest
|
|
@@ -3465,8 +3533,11 @@ function recordProvenanceOk(t, ctx) {
|
|
|
3465
3533
|
return true;
|
|
3466
3534
|
const tSym = t.getSymbol();
|
|
3467
3535
|
const decls = tSym ? checker.declarationsOf(tSym) : undefined;
|
|
3468
|
-
if (!decls || decls.length === 0)
|
|
3469
|
-
|
|
3536
|
+
if (!decls || decls.length === 0) {
|
|
3537
|
+
// Inferred destructuring parameters can have a synthesized anonymous
|
|
3538
|
+
// shape with no declaration or member symbols to trace to a source.
|
|
3539
|
+
return checker.getPropertiesOfType(t).every((property) => checker.declarationsOf(property).every((decl) => !decl.getSourceFile().isDeclarationFile || ctx.isExternalTypeFile(decl.getSourceFile())));
|
|
3540
|
+
}
|
|
3470
3541
|
return !decls.some((d) => {
|
|
3471
3542
|
const sf = d.getSourceFile();
|
|
3472
3543
|
return sf.isDeclarationFile && !ctx.isExternalTypeFile(sf);
|
|
@@ -3687,6 +3758,10 @@ function mapRecordTypeInner(widened, ctx) {
|
|
|
3687
3758
|
const computed = widened.isIntersectionType() || isMappedShape(widened);
|
|
3688
3759
|
{
|
|
3689
3760
|
const props = checker.getPropertiesOfType(widened);
|
|
3761
|
+
// Symbol-keyed records use the checked object's descriptor table. A
|
|
3762
|
+
// checker-internal __@ name is not a string field in a native struct.
|
|
3763
|
+
if (props.some((property) => property.name.startsWith("__@")))
|
|
3764
|
+
return DYN;
|
|
3690
3765
|
// A computed shape with NO members is not a real empty record: inside a
|
|
3691
3766
|
// generic body `Partial<T>` resolves to no members at all (keyof T is
|
|
3692
3767
|
// still unknown there) — interning `{}` would be silently wrong. The
|
|
@@ -3807,6 +3882,8 @@ function mapRecordTypeInner(widened, ctx) {
|
|
|
3807
3882
|
if ((pt === null || pt.kind === "jsval") && (fieldTs.flags & ts.TypeFlags.Any) !== 0 && constAssertedEmptyArrayProp(p, ctx)) {
|
|
3808
3883
|
pt = arrayOf(unitOnlyUnion(ctx.unions));
|
|
3809
3884
|
}
|
|
3885
|
+
if (pt === null && !ctx.dynamic && (fieldTs.flags & ts.TypeFlags.Any) !== 0)
|
|
3886
|
+
pt = DYN;
|
|
3810
3887
|
// Unit-only FIELDS (`{ msg?: undefined }` — the discriminated-union
|
|
3811
3888
|
// absent-field idiom — and `{ p: undefined }` spellings): the
|
|
3812
3889
|
// unit-only union. The runtime value is the interned unit, JSON
|