UNPKG

rwsdk

Version:

Build fast, server-driven webapps on Cloudflare with SSR, RSC, and realtime

73 lines (72 loc) 2.66 kB
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, }); }); });