Files
suaveplan/packages/security-stack/crypto/crypto-browser/tests/tree-shake.test.ts
2026-05-27 23:47:53 +01:00

50 lines
1.9 KiB
TypeScript

import { describe, expect, it } from "@suaveplan/testing/runner";
describe("tree-shake: selective imports work", () => {
it("importing only availability does not throw", {
timeout: 30000,
}, async () => {
const { isWebCryptoAvailable } = await import(
"../src/availability/availability.js"
);
expect(typeof isWebCryptoAvailable).toBe("function");
expect(isWebCryptoAvailable()).toBe(true);
});
it("importing only AEAD engine does not throw", {
timeout: 30000,
}, async () => {
const { webCryptoAeadEngine } = await import(
"../src/engines/webcrypto-aead-engine/webcrypto-aead-engine.js"
);
expect(typeof webCryptoAeadEngine.encrypt).toBe("function");
expect(typeof webCryptoAeadEngine.decrypt).toBe("function");
});
it("importing only errors does not throw", { timeout: 30000 }, async () => {
const { BrowserCryptoError, BROWSER_CRYPTO_CODES } = await import(
"../src/errors/index.js"
);
expect(BrowserCryptoError).toBeDefined();
expect(BROWSER_CRYPTO_CODES["NOT_AVAILABLE"]).toBe(
"BROWSER_CRYPTO.NOT_AVAILABLE"
);
});
it("barrel index exports all expected symbols", {
timeout: 30000,
}, async () => {
const mod = await import("../src/index.js");
expect(typeof mod.isWebCryptoAvailable).toBe("function");
expect(typeof mod.webCryptoAeadEngine).toBe("object");
expect(typeof mod.webCryptoSignEngine).toBe("object");
expect(typeof mod.webCryptoAgreeEngine).toBe("object");
expect(typeof mod.rsa).toBe("object");
expect(typeof mod.aesKw).toBe("object");
expect(typeof mod.ecdsaP384).toBe("object");
expect(typeof mod.ecdhP384).toBe("object");
expect(typeof mod.nonExtractableKey).toBe("function");
expect(mod.BrowserCryptoError).toBeDefined();
});
});