mirror of
https://github.com/morluto/rea
synced 2026-10-27 06:33:32 -04:00
@@ -77,3 +77,36 @@ it.each(cases)(
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
it.each(["call", "apply"] as const)(
|
||||
"does not treat an owned local %s replacement as a loader invocation",
|
||||
(method) => {
|
||||
const args = method === "call" ? "null,'node:path'" : "null,['node:path']";
|
||||
const analysis = analyzeJavaScriptStaticSource(
|
||||
`${named}const load=make(import.meta.url);load.${method}=()=>({kind:'local'});load.${method}(${args});`,
|
||||
);
|
||||
expect(analysis.parse_error_count).toBe(0);
|
||||
expect(
|
||||
analysis.references.filter(({ kind }) => kind === "require"),
|
||||
).toEqual([]);
|
||||
},
|
||||
);
|
||||
|
||||
it("keeps uncertainty for conditional call-member replacement", () => {
|
||||
const analysis = analyzeJavaScriptStaticSource(
|
||||
`${named}const load=make(import.meta.url);if(flag)load.call=()=>({kind:'local'});load.call(null,'node:path');`,
|
||||
);
|
||||
expect(analysis.parse_error_count).toBe(0);
|
||||
expect(analysis.references.filter(({ kind }) => kind === "require")).toEqual([
|
||||
expect.objectContaining({ kind: "require", specifier: null }),
|
||||
]);
|
||||
});
|
||||
|
||||
it("uses the restored call member after a local replacement", () => {
|
||||
const source = `${named}const load=make(import.meta.url);load.call=()=>({kind:'local'});load.call=Function.prototype.call;load.call(null,'node:path');`;
|
||||
const analysis = analyzeJavaScriptStaticSource(source);
|
||||
expect(analysis.parse_error_count).toBe(0);
|
||||
expect(analysis.references.filter(({ kind }) => kind === "require")).toEqual([
|
||||
expect.objectContaining({ kind: "require", specifier: null }),
|
||||
]);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user