UNPKG

rwsdk

Version:

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

114 lines (111 loc) 5.44 kB
import { describe, expect, it } from "vitest"; import { generateAppBarrelContent, generateVendorBarrelContent, } from "./directiveModulesDevPlugin.mjs"; describe("directiveModulesDevPlugin helpers", () => { const projectRootDir = "/Users/test/project"; describe("generateVendorBarrelContent", () => { it("should generate correct content for vendor files", () => { const files = new Set([ "node_modules/lib-a/index.js", "src/app.js", "node_modules/lib-b/component.tsx", ]); const content = generateVendorBarrelContent(files, projectRootDir); const expected = `import * as M0 from '${projectRootDir}/node_modules/lib-a/index.js'; import * as M1 from '${projectRootDir}/node_modules/lib-b/component.tsx'; export default { '/node_modules/lib-a/index.js': M0, '/node_modules/lib-b/component.tsx': M1, };`; expect(content).toEqual(expected); }); it("should return empty content if no vendor files", () => { const files = new Set(["src/app.js", "src/component.tsx"]); const content = generateVendorBarrelContent(files, projectRootDir); expect(content).toEqual("\n\nexport default {\n\n};"); }); it("should handle an empty file set", () => { const files = new Set(); const content = generateVendorBarrelContent(files, projectRootDir); expect(content).toEqual("\n\nexport default {\n\n};"); }); it("should exclude files under optimizeDeps.exclude roots", () => { const files = new Set([ "node_modules/lib-a/index.js", "node_modules/lib-b/component.tsx", ]); const excludedRoots = [`${projectRootDir}/node_modules/lib-a`]; const content = generateVendorBarrelContent(files, projectRootDir, excludedRoots); const expected = `import * as M0 from '${projectRootDir}/node_modules/lib-b/component.tsx'; export default { '/node_modules/lib-b/component.tsx': M0, };`; expect(content).toEqual(expected); expect(content).not.toContain("lib-a"); }); }); describe("generateAppBarrelContent", () => { it("should generate correct content for app files", () => { const files = new Set([ "src/app.js", "node_modules/lib-a/index.js", "src/component.tsx", ]); const content = generateAppBarrelContent(files, projectRootDir); const expected = `import "${projectRootDir}/src/app.js"; import "${projectRootDir}/src/component.tsx";`; expect(content).toEqual(expected); }); it("should return empty content if no app files", () => { const files = new Set([ "node_modules/lib-a/index.js", "node_modules/lib-b/component.tsx", ]); const content = generateAppBarrelContent(files, projectRootDir); expect(content).toEqual(""); }); it("should handle an empty file set", () => { const files = new Set(); const content = generateAppBarrelContent(files, projectRootDir); expect(content).toEqual(""); }); it("should include excluded node_modules files in the app barrel", () => { const files = new Set([ "src/app.js", "node_modules/lib-a/index.js", "src/component.tsx", ]); const excludedRoots = [`${projectRootDir}/node_modules/lib-a`]; const content = generateAppBarrelContent(files, projectRootDir, excludedRoots); const expected = `import "${projectRootDir}/src/app.js"; import "${projectRootDir}/node_modules/lib-a/index.js"; import "${projectRootDir}/src/component.tsx";`; expect(content).toEqual(expected); }); it("should include excluded Vite-style /node_modules files in the app barrel", () => { const files = new Set([ "/src/app.js", "/node_modules/lib-a/index.js", "/src/component.tsx", ]); const excludedRoots = [`${projectRootDir}/node_modules/lib-a`]; const content = generateAppBarrelContent(files, projectRootDir, excludedRoots); const expected = `import "${projectRootDir}/src/app.js"; import "${projectRootDir}/node_modules/lib-a/index.js"; import "${projectRootDir}/src/component.tsx";`; expect(content).toEqual(expected); }); it("should keep transitive node_modules files in the vendor barrel unless they are also excluded", () => { const files = new Set([ "/node_modules/lib-a/index.js", "/node_modules/lib-a-utils/index.js", ]); const excludedRoots = [`${projectRootDir}/node_modules/lib-a`]; const vendorContent = generateVendorBarrelContent(files, projectRootDir, excludedRoots); expect(vendorContent).toContain("lib-a-utils"); expect(vendorContent).not.toContain("lib-a/index"); const appContent = generateAppBarrelContent(files, projectRootDir, excludedRoots); expect(appContent).toContain("lib-a/index"); expect(appContent).not.toContain("lib-a-utils"); }); }); });