mirror of
https://github.com/vercel-labs/scriptc.git
synced 2026-10-19 05:29:46 +08:00
- Preserve async factory results and mixed table layouts through inference and destructuring. - Support checked Map and Object.fromEntries construction with native weak collections. - Keep native weak-key lifetimes and engine-backed collection identities intact.
36 lines
1.2 KiB
JavaScript
36 lines
1.2 KiB
JavaScript
function makeMap(entries) { return new Map(entries); }
|
|
const value = { count: 3 };
|
|
const objectKey = {};
|
|
const entries = JSON.parse('[["a",0],["key",4],[0,5],["a",0],[0,6]]');
|
|
entries[0][1] = value;
|
|
entries[1][0] = objectKey;
|
|
entries[2][0] = NaN;
|
|
entries[3][1] = value;
|
|
entries[4][0] = NaN;
|
|
const map = makeMap(entries);
|
|
console.log(map.size, map.get("a") === value, map.get(objectKey), map.get(NaN));
|
|
console.log(makeMap(null).size, makeMap(undefined).size, makeMap("").size);
|
|
console.log(makeMap([["missing"], []]).has(undefined));
|
|
console.log(makeMap([["missing"], []]).get("missing") === undefined);
|
|
|
|
const live = [];
|
|
const pair = {};
|
|
let reads = 0;
|
|
Object.defineProperty(pair, "0", { get() {
|
|
reads++;
|
|
live.push(["second", 2]);
|
|
return "first";
|
|
} });
|
|
Object.defineProperty(pair, "1", { get() {
|
|
reads++;
|
|
return 1;
|
|
} });
|
|
live.push(pair);
|
|
const grown = makeMap(live);
|
|
console.log(reads, grown.size, grown.get("first"), grown.get("second"));
|
|
/** @type {any[]} */
|
|
const invalidCases = [[1], [null], [undefined], [false], ["abc"], "abc", 7, {}];
|
|
for (const invalid of invalidCases) {
|
|
try { makeMap(invalid); } catch (error) { console.log(error.name, error.message); }
|
|
}
|