UNPKG

one

Version:

One is a new React Framework that makes Vite serve both native and web.

139 lines (123 loc) 4.78 kB
import { describe, expect, it } from "vitest"; import { transformTreeShakeClient } from "./clientTreeShakePlugin.native.js"; describe("clientTreeShakePlugin", function () { describe("transformTreeShakeClient", function () { it("should remove loader export and its imports", async function () { var code = ` import { serverOnlyModule } from 'server-only-pkg' import { Text } from 'react-native' import { useLoader } from 'one' export function loader() { return serverOnlyModule() } export default function Page() { const data = useLoader(loader) return <Text>{data}</Text> } `, result = await transformTreeShakeClient(code, "/app/index.tsx"); expect(result).toBeDefined(), expect(result.code).not.toContain("server-only-pkg"), expect(result.code).toContain("react-native"), expect(result.code).toContain("one"); }), it("should remove loader export with dynamic import", async function () { var code = ` import { Text } from 'react-native' import { useLoader } from 'one' export async function loader() { const { serverFn } = await import('server-only-pkg') return serverFn() } export default function Page() { const data = useLoader(loader) return <Text>{data}</Text> } `, result = await transformTreeShakeClient(code, "/app/index.tsx"); expect(result).toBeDefined(), expect(result.code).not.toContain("server-only-pkg"); }), it("should remove loader with const arrow function export", async function () { var code = ` import { serverOnlyModule } from 'server-only-pkg' import { Text } from 'react-native' import { useLoader } from 'one' export const loader = async () => { return serverOnlyModule() } export default function Page() { const data = useLoader(loader) return <Text>{data}</Text> } `, result = await transformTreeShakeClient(code, "/app/index.tsx"); expect(result).toBeDefined(), expect(result.code).not.toContain("server-only-pkg"); }), it("should handle multiple imports where only some are used in loader", async function () { var code = ` import { serverFn } from 'server-only-pkg' import { sharedUtil } from 'shared-pkg' import { Text } from 'react-native' import { useLoader } from 'one' export function loader() { return serverFn() } export default function Page() { const data = useLoader(loader) return <Text>{sharedUtil(data)}</Text> } `, result = await transformTreeShakeClient(code, "/app/index.tsx"); expect(result).toBeDefined(), expect(result.code).not.toContain("server-only-pkg"), expect(result.code).toContain("shared-pkg"); }), it("should remove generateStaticParams and its imports", async function () { var code = ` import { getRoutes } from 'server-only-pkg' import { Text } from 'react-native' export function generateStaticParams() { return getRoutes() } export default function Page() { return <Text>Hello</Text> } `, result = await transformTreeShakeClient(code, "/app/[slug].tsx"); expect(result).toBeDefined(), expect(result.code).not.toContain("server-only-pkg"); }), it("should not transform files without loader or generateStaticParams", async function () { var code = ` import { Text } from 'react-native' export default function Page() { return <Text>Hello</Text> } `, result = await transformTreeShakeClient(code, "/app/index.tsx"); expect(result).toBeUndefined(); }), it("should preserve type-only imports during tree shaking", async function () { var code = ` import type { SomeType } from 'types-pkg' import { serverFn } from 'server-only-pkg' import { Text } from 'react-native' import { useLoader } from 'one' export function loader(): SomeType { return serverFn() } export default function Page() { const data = useLoader(loader) return <Text>{data}</Text> } `, result = await transformTreeShakeClient(code, "/app/index.tsx"); expect(result).toBeDefined(), expect(result.code).toContain("types-pkg"), expect(result.code).not.toContain("server-only-pkg"); }), it("should preserve type imports even when used only in loader", async function () { var code = ` import type { APIGuildMember } from '@discordjs/core' import { getClient } from 'discord-client' import { Text } from 'react-native' import { useLoader } from 'one' export function loader(): APIGuildMember { return getClient() } export default function Page() { const data = useLoader(loader) return <Text>{JSON.stringify(data)}</Text> } `, result = await transformTreeShakeClient(code, "/app/index.tsx"); expect(result).toBeDefined(), expect(result.code).toContain("@discordjs/core"), expect(result.code).not.toContain("discord-client"); }); }); }); //# sourceMappingURL=clientTreeShakePlugin.test.native.js.map