fix: recognize aliased createRequire bindings

Fixes #6612

Fixes #6678
This commit is contained in:
morluto committed 2026-10-23 21:28:11 +08:00
1 parent f09dde0cc9
commit 6cb0684372
2 files changed
+21 -8

No files matched your search

@@ -5,7 +5,7 @@ import { expect, it } from "vitest";
import { analyzeJavaScriptStaticSource } from "./javascriptStaticAnalysis.js";
import { parseJavaScriptSource } from "./javascriptSourceParser.js";
import { unshadowedReferenceSourceRequireCalls } from "../referenceSourceRequireBindings.js";
import { referenceSourceRequireCallBases } from "../referenceSourceRequireBindings.js";
it.each(["require", "require.resolve", "require.main"])(
"distinguishes invoked loading from reference association for %s",
@@ -25,9 +25,7 @@ it.each(["require", "require.resolve", "require.main"])(
);
const parsed = parseJavaScriptSource(source);
if (parsed === null) throw new Error("Expected loader association fixture");
expect(
unshadowedReferenceSourceRequireCalls(parsed, "entry.cjs").size,
).toBe(1);
expect(referenceSourceRequireCallBases(parsed, "entry.cjs").size).toBe(1);
},
);
@@ -39,6 +37,12 @@ it.each([
1,
"node:path",
],
[
"renamed proven factory",
`${imported}const load=make(import.meta.url);load('node:path');`,
1,
"node:path",
],
[
"opaque replacement factory",
"import*as mod from'node:module';mod.default.createRequire=replacement;const require=mod.default.createRequire(import.meta.url);require('node:path');",
@@ -50,9 +54,9 @@ it.each([
(_name, source, associated, specifier) => {
const parsed = parseJavaScriptSource(source);
if (parsed === null) throw new Error("Expected factory proof fixture");
expect(
unshadowedReferenceSourceRequireCalls(parsed, "entry.mjs").size,
).toBe(associated);
expect(referenceSourceRequireCallBases(parsed, "entry.mjs").size).toBe(
associated,
);
const analysis = analyzeJavaScriptStaticSource(source);
expect(analysis.parse_error_count).toBe(0);
expect(
@@ -61,6 +65,14 @@ it.each([
},
);
it("associates a renamed createRequire resolve method with search options", () => {
const parsed = parseJavaScriptSource(
`${imported}const load=make(import.meta.url);load.resolve('node:path',{paths:[]});`,
);
if (parsed === null) throw new Error("Expected factory proof fixture");
expect(referenceSourceRequireCallBases(parsed, "entry.mjs").size).toBe(1);
});
it.each([
[
"captured wrapper",