singularity-forge/scripts/dist-test-resolve.mjs
2026-05-05 14:46:18 +02:00

60 lines
1.8 KiB
JavaScript

/**
* Minimal Node.js import hook for running tests from dist-test/.
*
* esbuild with bundle:false preserves import specifiers verbatim, so compiled
* .js files still import '../foo.ts'. This hook redirects those to '.js' so
* Node can find the compiled output.
*
* Also redirects @sf bare imports to their compiled counterparts in dist-test.
*/
// dist-test root — everything compiled lands here
const DIST_TEST = new URL("../dist-test/", import.meta.url).href;
// Absolute paths to compiled @singularity-forge/* entry points
const SF_ALIASES = {
"@singularity-forge/pi-coding-agent": new URL(
"../dist-test/packages/pi-coding-agent/src/index.js",
import.meta.url,
).href,
"@singularity-forge/pi-ai/oauth": new URL(
"../dist-test/packages/pi-ai/src/utils/oauth/index.js",
import.meta.url,
).href,
"@singularity-forge/pi-ai": new URL(
"../dist-test/packages/pi-ai/src/index.js",
import.meta.url,
).href,
"@singularity-forge/pi-agent-core": new URL(
"../dist-test/packages/pi-agent-core/src/index.js",
import.meta.url,
).href,
"@singularity-forge/pi-tui": new URL(
"../dist-test/packages/pi-tui/src/index.js",
import.meta.url,
).href,
"@singularity-forge/native": new URL(
"../dist-test/packages/native/src/index.js",
import.meta.url,
).href,
};
export function resolve(specifier, context, nextResolve) {
// 1. @singularity-forge/* bare imports → compiled dist-test counterpart
if (specifier in SF_ALIASES) {
return nextResolve(SF_ALIASES[specifier], context);
}
// 2. .ts relative imports inside dist-test → .js
if (
specifier.endsWith(".ts") &&
(specifier.startsWith("./") || specifier.startsWith("../")) &&
context.parentURL &&
context.parentURL.startsWith(DIST_TEST)
) {
const jsSpecifier = specifier.slice(0, -3) + ".js";
return nextResolve(jsSpecifier, context);
}
return nextResolve(specifier, context);
}