rwsdk
Version:
Build fast, server-driven webapps on Cloudflare with SSR, RSC, and realtime
73 lines (72 loc) • 2.66 kB
JavaScript
import { describe, expect, it } from "vitest";
import { compatTransform } from "./viteCompat.mjs";
function getHookHandler(hook) {
if (typeof hook === "function") {
return hook;
}
if (hook && typeof hook === "object" && "handler" in hook) {
const handler = hook.handler;
if (typeof handler === "function") {
return handler;
}
}
throw new Error("Expected plugin hook to be registered");
}
function getCompatPlugin() {
const plugins = compatTransform([], { viteVersion: 7 });
const compatPlugin = plugins.find((plugin) => plugin?.name === "rwsdk:vite7-compat");
if (!compatPlugin) {
throw new Error("Expected Vite 7 compat plugin to be present");
}
return compatPlugin;
}
describe("viteCompat", () => {
it("translates optimizeDeps plugins added after configEnvironment", async () => {
const firstPlugin = {
name: "first",
resolveId(id) {
if (id === "first") {
return "first-result";
}
},
};
const latePlugin = {
name: "late",
resolveId(id) {
if (id === "late") {
return "\0late-result";
}
},
};
const environmentConfig = {
optimizeDeps: {
rolldownOptions: {
plugins: [firstPlugin],
},
},
};
const compatPlugin = getCompatPlugin();
const configEnvironment = getHookHandler(compatPlugin.configEnvironment);
const configResolved = getHookHandler(compatPlugin.configResolved);
await configEnvironment("worker", environmentConfig);
expect(environmentConfig.optimizeDeps.esbuildOptions?.plugins).toHaveLength(1);
environmentConfig.optimizeDeps.rolldownOptions.plugins.push(latePlugin);
await configResolved({ environments: { worker: environmentConfig } });
const esbuildPlugins = environmentConfig.optimizeDeps.esbuildOptions?.plugins;
expect(esbuildPlugins).toHaveLength(2);
if (!esbuildPlugins?.[1]) {
throw new Error("Expected late esbuild plugin to be translated");
}
const resolveCallbacks = [];
await esbuildPlugins[1].setup({
onResolve(_options, callback) {
resolveCallbacks.push(callback);
},
});
await expect(resolveCallbacks[0]({ path: "late" })).resolves.toEqual({
path: "late-result",
namespace: "late",
external: undefined,
});
});
});