mirror of
https://github.com/morluto/rea
synced 2026-10-26 14:25:49 -04:00
52 lines
1.6 KiB
TypeScript
52 lines
1.6 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
|
|
import { analyzeJavaScriptStaticSource } from "./javascriptStaticAnalysis.js";
|
|
|
|
describe("native addon loader provenance", () => {
|
|
it("distinguishes CommonJS and ESM re-exports", () => {
|
|
const analysis = analyzeJavaScriptStaticSource(`
|
|
const required = require("./addon.node#literal.node");
|
|
module.exports = require("./addon.node#literal.node");
|
|
import imported from "./addon.node#literal.node";
|
|
export { default } from "./addon.node#literal.node";
|
|
`);
|
|
expect(analysis.electron.native_addon_bindings).toHaveLength(4);
|
|
expect(analysis.electron.native_addon_bindings).toEqual(
|
|
expect.arrayContaining([
|
|
expect.objectContaining({
|
|
binding_kind: "require",
|
|
module_kind: "require",
|
|
}),
|
|
expect.objectContaining({
|
|
binding_kind: "import",
|
|
module_kind: "import",
|
|
}),
|
|
expect.objectContaining({
|
|
binding_kind: "re-export",
|
|
module_kind: "require",
|
|
}),
|
|
expect.objectContaining({
|
|
binding_kind: "re-export",
|
|
module_kind: "import",
|
|
}),
|
|
]),
|
|
);
|
|
});
|
|
|
|
it.each(["#", "?"])(
|
|
"classifies require filenames literally for %s",
|
|
(punctuation) => {
|
|
const analysis = analyzeJavaScriptStaticSource(`
|
|
const script = require("./addon.node${punctuation}helper.js");
|
|
import native from "./addon.node${punctuation}helper.js";
|
|
`);
|
|
expect(analysis.electron.native_addon_bindings).toEqual([
|
|
expect.objectContaining({
|
|
binding_kind: "import",
|
|
module_kind: "import",
|
|
}),
|
|
]);
|
|
},
|
|
);
|
|
});
|