Amp-Thread-ID: https://ampcode.com/threads/T-01a02d1c-27fc-7761-9f51-ed97b2dd4e3e Co-authored-by: Heaust Azure <heaust.azure@gmail.com>
47 lines
1.3 KiB
JavaScript
47 lines
1.3 KiB
JavaScript
import { mkdtemp, readdir, rm } from "node:fs/promises";
|
|
import { tmpdir } from "node:os";
|
|
import { basename, join } from "node:path";
|
|
import { fileURLToPath } from "node:url";
|
|
import { spawnSync } from "node:child_process";
|
|
import { build } from "esbuild";
|
|
|
|
const directory = fileURLToPath(new URL(".", import.meta.url));
|
|
const mock = join(directory, "core-mock.ts");
|
|
const output = await mkdtemp(join(tmpdir(), "yawn-handles-tests-"));
|
|
|
|
try {
|
|
const entries = (await readdir(directory))
|
|
.filter((name) => name.endsWith(".test.ts"))
|
|
.sort()
|
|
.map((name) => join(directory, name));
|
|
await build({
|
|
entryPoints: entries,
|
|
outdir: output,
|
|
entryNames: "[name]",
|
|
outExtension: { ".js": ".mjs" },
|
|
bundle: true,
|
|
format: "esm",
|
|
platform: "node",
|
|
target: "node20",
|
|
sourcemap: "inline",
|
|
plugins: [
|
|
{
|
|
name: "mock-yawn-core",
|
|
setup(build) {
|
|
build.onResolve({ filter: /^@yawn\/core$/ }, () => ({ path: mock }));
|
|
},
|
|
},
|
|
],
|
|
});
|
|
const tests = entries.map((entry) =>
|
|
join(output, `${basename(entry, ".ts")}.mjs`),
|
|
);
|
|
const result = spawnSync(process.execPath, ["--test", ...tests], {
|
|
stdio: "inherit",
|
|
});
|
|
if (result.error) throw result.error;
|
|
process.exitCode = result.status ?? 1;
|
|
} finally {
|
|
await rm(output, { force: true, recursive: true });
|
|
}
|