47 lines
1.5 KiB
TypeScript
47 lines
1.5 KiB
TypeScript
import { mkdtempSync, readFileSync, readdirSync, rmSync, statSync } from "node:fs";
|
|
import { tmpdir } from "node:os";
|
|
import { join } from "node:path";
|
|
import { build } from "vite";
|
|
import { describe, expect, test } from "vitest";
|
|
|
|
describe("production mock graph", () => {
|
|
test("excludes the browser mock module from the production bundle", async () => {
|
|
// Given
|
|
const outDir = mkdtempSync(join(tmpdir(), "ai-character-admin-prod-"));
|
|
const previousNodeEnv = process.env.NODE_ENV;
|
|
|
|
try {
|
|
process.env.NODE_ENV = "production";
|
|
|
|
// When
|
|
await build({
|
|
build: { emptyOutDir: true, outDir },
|
|
configFile: "vite.config.ts",
|
|
logLevel: "silent",
|
|
mode: "production",
|
|
});
|
|
const outputFiles = collectFiles(outDir);
|
|
const output = outputFiles
|
|
.filter((filePath) => filePath.endsWith(".js"))
|
|
.map((filePath) => readFileSync(filePath, "utf8"))
|
|
.join("\n");
|
|
|
|
// Then
|
|
expect(outputFiles.some((filePath) => filePath.endsWith("mockServiceWorker.js"))).toBe(false);
|
|
expect(output).not.toContain("mockServiceWorker.js");
|
|
expect(output).not.toContain("startMockWorker");
|
|
} finally {
|
|
process.env.NODE_ENV = previousNodeEnv;
|
|
rmSync(outDir, { force: true, recursive: true });
|
|
}
|
|
});
|
|
});
|
|
|
|
function collectFiles(directory: string): readonly string[] {
|
|
return readdirSync(directory).flatMap((entry) => {
|
|
const path = join(directory, entry);
|
|
|
|
return statSync(path).isDirectory() ? collectFiles(path) : [path];
|
|
});
|
|
}
|