Files
reverse-engineering-anything/tests/boundary/filesystem/referenceSourceLoaderConstructors.test.ts
T

121 lines
4.0 KiB
TypeScript

import { writeFile } from "node:fs/promises";
import { join } from "node:path";
import { expect, it } from "vitest";
import { createTestTempDirectory } from "../../fixtures/temporaryDirectory.js";
import { importReferenceSource } from "../../support/referenceSourceResourceScope.js";
const constructorSources = {
".MJS": 'import {join} from "node:path"; require("./dep.cjs");',
".TS": 'import {join} from "node:path"; require("./dep.cjs");',
"child-call.cjs": 'require.call.extra=1; require.call(null,"./dep.cjs");',
"child-apply.cjs":
'require.apply.extra=1; require.apply(null,["./dep.cjs"]);',
"child-resolve.cjs": 'require.resolve.extra=1; require.resolve("./dep.cjs");',
"direct.cjs": 'new require("./dep.cjs");',
"wrapped.cts": 'new (require as any)("./dep.cjs");',
"wrapped-call.cts": '(require as any)("./dep.cjs");',
"alias-direct.cjs": 'const box={load:require};box.load("./dep.cjs");',
"alias-direct-replaced.cjs":
'const box={load:require};box.load=()=>0;box.load("./dep.cjs");',
"alias-direct-deferred.cjs":
'const box={load:require};function replace(){box.load=()=>0} replace();box.load("./dep.cjs");',
"nested-call.cjs":
'const box={load:require};box.load.call(null,"./dep.cjs");',
"nested-mutated.cjs":
'const box={load:require};box.load.call=()=>0;box.load.call(null,"./dep.cjs");',
"nested-parent.cjs":
'const box={load:require};box.load=()=>0;box.load.call(null,"./dep.cjs");',
"nested-child.cjs":
'const box={load:require};box.load.call.extra=1;box.load.call(null,"./dep.cjs");',
"nested-apply.cjs":
'const box={load:require};box.load.apply(null,["./dep.cjs"]);',
"nested-unknown.MJS":
'const box={load:require};box.load.call(null,"./dep.cjs");',
"wrapped-receiver.TS": '(require as any).resolve("./dep.cjs");',
"wrapped-resolve.cts": '(require as any).resolve("./dep.cjs");',
"wrapped-mutated.cts":
'require.call=()=>0; (require.call as any)(null,"./dep.cjs");',
"alias.MJS": 'const load=require; new load("./dep.cjs");',
"shadow.MJS": 'const require=function() {}; new require("./dep.cjs");',
"dep.cjs": "module.exports = {};",
};
it("retains constructor loader requests without inventing host authority", async () => {
const root = await createTestTempDirectory("rea-reference-loader-new-");
await Promise.all(
Object.entries(constructorSources).map(([name, source]) =>
writeFile(join(root, name), source),
),
);
const result = await importReferenceSource({
root,
caller: "reference-loader-constructor-test",
policy: { secretPatterns: [] },
});
if (!result.ok) throw result.error;
expect(result.value.parse_failures).toEqual([]);
expect(result.value.entries).toEqual(
expect.arrayContaining([
expect.objectContaining({
path: ".MJS",
language: "JavaScript",
classifications: ["source"],
}),
expect.objectContaining({
path: ".TS",
language: "TypeScript",
classifications: ["source"],
}),
]),
);
for (const from_path of [
"direct.cjs",
"child-call.cjs",
"child-apply.cjs",
"child-resolve.cjs",
"wrapped.cts",
"wrapped-call.cts",
"nested-call.cjs",
"alias-direct.cjs",
"nested-child.cjs",
"nested-apply.cjs",
"wrapped-resolve.cts",
]) {
expect(result.value.relationships).toContainEqual({
from_path,
to: "dep.cjs",
kind: "requires",
resolution: "internal",
parse_state: "parsed",
});
}
for (const from_path of [
"nested-unknown.MJS",
"alias.MJS",
".MJS",
".TS",
"wrapped-receiver.TS",
"alias-direct-replaced.cjs",
"alias-direct-deferred.cjs",
]) {
expect(result.value.relationships).toContainEqual({
from_path,
to: "./dep.cjs",
kind: "requires",
resolution: "unknown",
parse_state: "partial",
});
}
expect(
result.value.relationships.some(({ from_path }) =>
[
"shadow.MJS",
"wrapped-mutated.cts",
"nested-mutated.cjs",
"nested-parent.cjs",
].includes(from_path),
),
).toBe(false);
});