File size: 1,855 Bytes
4e23b01 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | import assert from "node:assert";
import { dirname, join, resolve } from "node:path";
import { describe, it } from "node:test";
import { pathToFileURL } from "node:url";
import { getNativeModuleCandidates } from "../src/native-module-path.ts";
describe("getNativeModuleCandidates", () => {
it("resolves native helpers from the installed TUI package when the module is bundled elsewhere", () => {
const packageRoot = resolve("virtual", "node_modules", "@moonshot-ai", "pi-tui");
const bundledModule = resolve("virtual", "pi-coding-agent", "dist", "bundle", "chunks", "chunk.js");
const nativePath = join("native", "win32", "prebuilds", "win32-arm64", "win32-platform.node");
const candidates = getNativeModuleCandidates(nativePath, {
moduleUrl: pathToFileURL(bundledModule).href,
execPath: resolve("virtual", "node", "node.exe"),
resolvePackage: (specifier) => {
assert.equal(specifier, "@moonshot-ai/pi-tui");
return join(packageRoot, "dist", "index.js");
},
});
assert.equal(candidates[0], join(packageRoot, nativePath));
assert.ok(candidates.includes(join(dirname(bundledModule), "..", nativePath)));
});
it("keeps standalone binary fallbacks when the TUI package is unavailable", () => {
const bundledModule = resolve("virtual", "pi", "bundle", "chunks", "chunk.js");
const execPath = resolve("virtual", "pi", "pi.exe");
const nativePath = join("native", "darwin", "prebuilds", "darwin-arm64", "darwin-platform.node");
const candidates = getNativeModuleCandidates(nativePath, {
moduleUrl: pathToFileURL(bundledModule).href,
execPath,
resolvePackage: () => {
throw new Error("not installed");
},
});
assert.deepEqual(candidates, [
join(dirname(bundledModule), "..", nativePath),
join(dirname(bundledModule), nativePath),
join(dirname(execPath), nativePath),
]);
});
});
|