@esmx/rspack
Version:
A high-performance Rspack integration for Esmx microfrontend framework, providing Module Linking and SSR capabilities.
181 lines (180 loc) • 5.04 kB
JavaScript
import { describe, expect, it } from "vitest";
import { contentHash, generateExports } from "./pack.mjs";
describe("generateExports", () => {
it("should generate exports with both client and server files", () => {
const clientExports = {
"src/entry.client": {
file: "src/entry.client.95f6085b.final.mjs",
name: "src/entry.client",
pkg: true,
identifier: "ssr-vue2-remote/src/entry.client"
},
"src/components/index": {
file: "src/components/index.a73d6772.final.mjs",
name: "src/components/index",
pkg: true,
identifier: "ssr-vue2-remote/src/components/index"
}
};
const serverExports = {
"src/entry.server": {
file: "src/entry.server.b85ed2ff.final.mjs",
name: "src/entry.server",
pkg: true,
identifier: "ssr-vue2-remote/src/entry.server"
},
"src/components/index": {
file: "src/components/index.12b57db5.final.mjs",
name: "src/components/index",
pkg: true,
identifier: "ssr-vue2-remote/src/components/index"
}
};
const result = generateExports({
client: clientExports,
server: serverExports
});
expect(result).toEqual({
"./src/entry.client": "./client/src/entry.client.95f6085b.final.mjs",
"./src/entry.server": "./server/src/entry.server.b85ed2ff.final.mjs",
"./src/components/index": {
default: "./server/src/components/index.12b57db5.final.mjs",
browser: "./client/src/components/index.a73d6772.final.mjs"
}
});
});
it("should merge with existing exports", () => {
const clientExports = {
index: {
file: "index.js",
name: "index",
pkg: true,
identifier: "index"
}
};
const serverExports = {
index: {
file: "index.js",
name: "index",
pkg: true,
identifier: "index"
}
};
const existingExports = {
"./custom": "./custom.js"
};
const result = generateExports({
client: clientExports,
server: serverExports,
base: existingExports
});
expect(result).toEqual({
"./custom": "./custom.js",
".": {
default: "./server/index.js",
browser: "./client/index.js"
}
});
});
it("should handle empty exports", () => {
const clientExports = {};
const serverExports = {};
const result = generateExports({
client: clientExports,
server: serverExports
});
expect(result).toEqual({});
});
it("should handle only client exports", () => {
const clientExports = {
utils: {
file: "utils.js",
name: "utils",
pkg: true,
identifier: "utils"
}
};
const serverExports = {};
const result = generateExports({
client: clientExports,
server: serverExports
});
expect(result).toEqual({
"./utils": "./client/utils.js"
});
});
it("should handle only server exports", () => {
const clientExports = {};
const serverExports = {
api: {
file: "api.js",
name: "api",
pkg: true,
identifier: "api"
}
};
const result = generateExports({
client: clientExports,
server: serverExports
});
expect(result).toEqual({
"./api": "./server/api.js"
});
});
it("should handle index export correctly", () => {
const clientExports = {
index: {
file: "index.js",
name: "index",
pkg: true,
identifier: "index"
}
};
const serverExports = {
index: {
file: "index.js",
name: "index",
pkg: true,
identifier: "index"
}
};
const result = generateExports({
client: clientExports,
server: serverExports
});
expect(result).toEqual({
".": {
default: "./server/index.js",
browser: "./client/index.js"
}
});
});
});
describe("contentHash", () => {
it("should generate SHA256 hash for buffer", () => {
const buffer = Buffer.from("test content");
const result = contentHash(buffer);
expect(result).toMatch(/^sha256-[a-f0-9]{64}$/);
expect(result).toBe(
"sha256-6ae8a75555209fd6c44157c0aed8016e763ff435a19cf186f76863140143ff72"
);
});
it("should use custom algorithm when provided", () => {
const buffer = Buffer.from("test content");
const result = contentHash(buffer, "md5");
expect(result).toMatch(/^md5-[a-f0-9]{32}$/);
expect(result).toBe("md5-9473fdd0d880a43c21b7778d34872157");
});
it("should handle empty buffer", () => {
const buffer = Buffer.from("");
const result = contentHash(buffer);
expect(result).toBe(
"sha256-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
);
});
it("should handle binary data", () => {
const buffer = Buffer.from([0, 1, 2, 3, 255]);
const result = contentHash(buffer);
expect(result).toMatch(/^sha256-[a-f0-9]{64}$/);
});
});