mirror of
https://github.com/morluto/rea.git
synced 2026-11-11 01:13:39 +00:00
fix(javascript): honor effective symbolic descriptor values (#7222)
Resolve ordered descriptor values at the shared JavaScript fact owner and preserve uncertain intrinsic writes instead of stale exports. Normalize ordinary method values and reuse canonical primitive, prototype, ambient identity and ordering facts across consumers. 384 selected tests, format/static/docs checks, all final CI jobs and reviews pass. Actual Node controls cover 35 bundles; one possibly repeated factory explicitly stays unknown. Shipped Obsidian selected-source complete Evidence matches base/fixed CLI and MCP, with coverage and resource measurements in the PR. Co-authored-by: gensokyo-dev <342580529+gensokyo-dev@users.noreply.github.com>
This commit is contained in:
1 parent
d54f5b07b4
commit
d4c511ae6e
12 files changed
+1117
-102
No files matched your search
@@ -757,3 +757,181 @@ it.each([
|
||||
expect(resolver.unresolved).toBe(true);
|
||||
},
|
||||
);
|
||||
|
||||
it.each([
|
||||
["unknown spread", `{value:require("electron"),...input}`, "unknown"],
|
||||
["unknown descriptor", `input`, "unknown"],
|
||||
["negative number spread", `{value:require("electron"),...-1}`, "external"],
|
||||
["negative bigint spread", `{value:require("electron"),...-1n}`, "external"],
|
||||
[
|
||||
"ordinary method value",
|
||||
`{value(){return require("electron")}}`,
|
||||
"function",
|
||||
],
|
||||
["null prototype", `{__proto__:null,value:require("electron")}`, "external"],
|
||||
[
|
||||
"ignored primitive prototype",
|
||||
`{__proto__:0,value:require("electron")}`,
|
||||
"external",
|
||||
],
|
||||
[
|
||||
"function spread",
|
||||
`{value:require("electron"),...function(){}}`,
|
||||
"external",
|
||||
],
|
||||
["regexp spread", `{value:require("electron"),.../x/}`, "external"],
|
||||
[
|
||||
"interpolated string spread",
|
||||
'{value:require("electron"),...`x${input}`}',
|
||||
"external",
|
||||
],
|
||||
["empty array spread", `{value:require("electron"),...[]}`, "external"],
|
||||
["array spread", `{value:require("electron"),...[1]}`, "external"],
|
||||
["sparse array spread", `{value:require("electron"),...[,1]}`, "external"],
|
||||
[
|
||||
"unknown iterable array spread",
|
||||
`{value:require("electron"),...[...input]}`,
|
||||
"external",
|
||||
],
|
||||
[
|
||||
"patched defineProperty",
|
||||
`{get:()=>replacement}`,
|
||||
"external",
|
||||
"Object.defineProperty=()=>{};",
|
||||
],
|
||||
[
|
||||
"literal-return no-op replacement",
|
||||
`{enumerable:true}`,
|
||||
"external",
|
||||
"Object.defineProperty=(_target,_key)=>0;",
|
||||
],
|
||||
[
|
||||
"successive no-op replacements",
|
||||
`{enumerable:true}`,
|
||||
"external",
|
||||
"Object.defineProperty=()=>{};Object.defineProperty=()=>{};",
|
||||
],
|
||||
[
|
||||
"literal stub with effectful parameter binding",
|
||||
`{enumerable:true}`,
|
||||
"unknown",
|
||||
"Object.defineProperty=(target=mutate())=>0;",
|
||||
],
|
||||
[
|
||||
"mixed getter and spread value",
|
||||
`{get:()=>0,...{value:require("electron")}}`,
|
||||
"unknown",
|
||||
],
|
||||
[
|
||||
"mixed setter and value",
|
||||
`{value:require("electron"),set:()=>{}}`,
|
||||
"unknown",
|
||||
],
|
||||
[
|
||||
"erased descriptor assertion",
|
||||
`({value:require("electron")} as const)`,
|
||||
"external",
|
||||
],
|
||||
["string spread", `{value:require("electron"),..."x"}`, "external"],
|
||||
["accessor getter", `{get(){return replacement}}`, "unknown"],
|
||||
["accessor setter", `{set(value){replacement=value}}`, "unknown"],
|
||||
["absent accessor", `{get:undefined}`, "unknown"],
|
||||
["unknown key", `{value:require("electron"),[key]:replacement}`, "unknown"],
|
||||
[
|
||||
"getter",
|
||||
`{value:require("electron"),get value(){return replacement}}`,
|
||||
"unknown",
|
||||
],
|
||||
[
|
||||
"unknown spread may supply accessors",
|
||||
`{...input,value:require("electron")}`,
|
||||
"unknown",
|
||||
],
|
||||
[
|
||||
"known spread before value",
|
||||
`{...{enumerable:true},value:require("electron")}`,
|
||||
"external",
|
||||
],
|
||||
["null spread", `{value:require("electron"),...null}`, "external"],
|
||||
["undefined spread", `{value:require("electron"),...undefined}`, "external"],
|
||||
["void spread", `{value:require("electron"),...void 0}`, "external"],
|
||||
[
|
||||
"shadowed undefined",
|
||||
`{value:require("electron"),...undefined}`,
|
||||
"unknown",
|
||||
"const undefined=input;",
|
||||
],
|
||||
["unchanged value", `{enumerable:true}`, "external"],
|
||||
])(
|
||||
"preserves effective descriptor value uncertainty for %s",
|
||||
(_name, descriptor, kind, setup = "") => {
|
||||
const value = inspectOne(`(() => {
|
||||
const modules = {
|
||||
1(module,exports) {
|
||||
${setup}
|
||||
exports.api = require("electron");
|
||||
Object.defineProperty(exports,"api",${descriptor});
|
||||
},
|
||||
2(module,exports,load) { inspect(load(1).api); }
|
||||
};
|
||||
function load(id) {const m={exports:{}};modules[id](m,m.exports,load);return m.exports;}
|
||||
load(2);
|
||||
})();`);
|
||||
expect(value.kind).toBe(kind);
|
||||
if (kind === "external")
|
||||
expect(value).toEqual({ kind: "external", path: ["electron"] });
|
||||
},
|
||||
);
|
||||
|
||||
it("reads a literal prototype only from its actual prototype setter", () => {
|
||||
expect(
|
||||
inspectOne('inspect(({ordinary:require("electron")}).__proto__);').kind,
|
||||
).toBe("unknown");
|
||||
expect(
|
||||
inspectOne(
|
||||
'inspect(({__proto__:require("electron"),ordinary:1}).__proto__);',
|
||||
),
|
||||
).toEqual({ kind: "external", path: ["electron"] });
|
||||
});
|
||||
|
||||
it.each(["local", "outer"])(
|
||||
"does not resurrect an export when the intrinsic changes %s after replacement",
|
||||
(position) => {
|
||||
const value = inspectOne(`(() => {
|
||||
const modules = {
|
||||
1(module,exports) {
|
||||
exports.api = require("electron");
|
||||
Object.defineProperty(exports,"api",{value:null});
|
||||
${position === "local" ? "Object.defineProperty=()=>{};" : ""}
|
||||
},
|
||||
2(module,exports,load) {inspect(load(1).api);}
|
||||
};
|
||||
function load(id){const m={exports:{}};modules[id](m,m.exports,load);return m.exports;}
|
||||
load(2);
|
||||
${position === "outer" ? "Object.defineProperty=()=>{};" : ""}
|
||||
})();`);
|
||||
expect(value.kind).not.toBe("external");
|
||||
},
|
||||
);
|
||||
|
||||
it("does not preserve a sender through a possibly mutating intrinsic replacement", () => {
|
||||
const value = inspectOne(`(() => {
|
||||
const modules={
|
||||
1(module,exports){exports.api=require("electron");Object.defineProperty=(target,key)=>{target[key]=null;};Object.defineProperty(exports,"api",{value:require("electron")});},
|
||||
2(module,exports,load){inspect(load(1).api);}
|
||||
};
|
||||
function load(id){const m={exports:{}};modules[id](m,m.exports,load);return m.exports;}load(2);
|
||||
})();`);
|
||||
expect(value.kind).toBe("unknown");
|
||||
});
|
||||
|
||||
it("keeps a possibly repeated factory's native descriptor value unknown", () => {
|
||||
const value = inspectOne(`(() => {
|
||||
const modules={
|
||||
1(module,exports){exports.api=null;Object.defineProperty(exports,"api",{value:require("electron")});Object.defineProperty=()=>{};},
|
||||
2(module,exports,load){inspect(load(1).api);}
|
||||
};
|
||||
function load(id){const m={exports:{}};modules[id](m,m.exports,load);return m.exports;}load(2);
|
||||
})();`);
|
||||
expect(value.kind).toBe("unknown");
|
||||
});
|
||||
Reference in new issue
Block a user