one
Version:
One is a new React Framework that makes Vite serve both native and web.
141 lines (124 loc) • 5.63 kB
JavaScript
"use strict";
var import_vitest = require("vitest"),
import_clientTreeShakePlugin = require("./clientTreeShakePlugin.native.js");
(0, import_vitest.describe)("clientTreeShakePlugin", function () {
(0, import_vitest.describe)("transformTreeShakeClient", function () {
(0, import_vitest.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 (0, import_clientTreeShakePlugin.transformTreeShakeClient)(code, "/app/index.tsx");
(0, import_vitest.expect)(result).toBeDefined(), (0, import_vitest.expect)(result.code).not.toContain("server-only-pkg"), (0, import_vitest.expect)(result.code).toContain("react-native"), (0, import_vitest.expect)(result.code).toContain("one");
}), (0, import_vitest.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 (0, import_clientTreeShakePlugin.transformTreeShakeClient)(code, "/app/index.tsx");
(0, import_vitest.expect)(result).toBeDefined(), (0, import_vitest.expect)(result.code).not.toContain("server-only-pkg");
}), (0, import_vitest.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 (0, import_clientTreeShakePlugin.transformTreeShakeClient)(code, "/app/index.tsx");
(0, import_vitest.expect)(result).toBeDefined(), (0, import_vitest.expect)(result.code).not.toContain("server-only-pkg");
}), (0, import_vitest.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 (0, import_clientTreeShakePlugin.transformTreeShakeClient)(code, "/app/index.tsx");
(0, import_vitest.expect)(result).toBeDefined(), (0, import_vitest.expect)(result.code).not.toContain("server-only-pkg"), (0, import_vitest.expect)(result.code).toContain("shared-pkg");
}), (0, import_vitest.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 (0, import_clientTreeShakePlugin.transformTreeShakeClient)(code, "/app/[slug].tsx");
(0, import_vitest.expect)(result).toBeDefined(), (0, import_vitest.expect)(result.code).not.toContain("server-only-pkg");
}), (0, import_vitest.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 (0, import_clientTreeShakePlugin.transformTreeShakeClient)(code, "/app/index.tsx");
(0, import_vitest.expect)(result).toBeUndefined();
}), (0, import_vitest.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 (0, import_clientTreeShakePlugin.transformTreeShakeClient)(code, "/app/index.tsx");
(0, import_vitest.expect)(result).toBeDefined(), (0, import_vitest.expect)(result.code).toContain("types-pkg"), (0, import_vitest.expect)(result.code).not.toContain("server-only-pkg");
}), (0, import_vitest.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 (0, import_clientTreeShakePlugin.transformTreeShakeClient)(code, "/app/index.tsx");
(0, import_vitest.expect)(result).toBeDefined(), (0, import_vitest.expect)(result.code).toContain("@discordjs/core"), (0, import_vitest.expect)(result.code).not.toContain("discord-client");
});
});
});
//# sourceMappingURL=clientTreeShakePlugin.test.native.js.map