Initial Commit
This commit is contained in:
52
packages/foundation/data/mime/tests/tree-shake.test.ts
Normal file
52
packages/foundation/data/mime/tests/tree-shake.test.ts
Normal file
@@ -0,0 +1,52 @@
|
||||
/**
|
||||
* Tree-shake guard: verifies subpath imports work independently and the
|
||||
* `sideEffects` allowlist is narrowly scoped (only the magic-byte
|
||||
* signature registry is preserved).
|
||||
*/
|
||||
import { describe, expect, it } from "@suaveplan/testing/runner";
|
||||
import pkg from "../package.json";
|
||||
|
||||
describe("tree-shake compatibility", () => {
|
||||
it("package.json sideEffects allowlist is narrow", {
|
||||
timeout: 5000,
|
||||
}, () => {
|
||||
// The magic-byte signature registry registers entries via the
|
||||
// side-effecting `signatures/index.ts` module — keep it on the
|
||||
// sideEffects allowlist so bundlers don't tree-shake the
|
||||
// registration loop. Every OTHER module must be side-effect-free.
|
||||
expect(pkg.sideEffects).toEqual([
|
||||
"**/detection/from-magic-bytes/signatures/index.{ts,js}",
|
||||
]);
|
||||
});
|
||||
|
||||
it("has subpath exports for core modules", { timeout: 5000 }, () => {
|
||||
const exports = pkg.exports as Record<string, unknown>;
|
||||
expect(exports["."]).toBeDefined();
|
||||
expect(exports["./content-type"]).toBeDefined();
|
||||
expect(exports["./detection"]).toBeDefined();
|
||||
expect(exports["./db"]).toBeDefined();
|
||||
expect(exports["./charset"]).toBeDefined();
|
||||
expect(exports["./errors"]).toBeDefined();
|
||||
expect(exports["./schemas"]).toBeDefined();
|
||||
});
|
||||
});
|
||||
|
||||
describe("subpath import smoke test", () => {
|
||||
it("can import from content-type subpath", { timeout: 30000 }, async () => {
|
||||
// Dynamic import simulates tree-shaking consumer
|
||||
const m = await import("../src/content-type/index.js");
|
||||
expect(typeof m.parseContentType).toBe("function");
|
||||
expect(typeof m.formatContentType).toBe("function");
|
||||
});
|
||||
|
||||
it("can import from charset subpath", { timeout: 30000 }, async () => {
|
||||
const m = await import("../src/charset/index.js");
|
||||
expect(typeof m.sniffBom).toBe("function");
|
||||
});
|
||||
|
||||
it("can import from db subpath", { timeout: 30000 }, async () => {
|
||||
const m = await import("../src/db/index.js");
|
||||
expect(typeof m.getMimeEntry).toBe("function");
|
||||
expect(Array.isArray(m.BUILTIN_DB)).toBe(true);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user