UNPKG

one

Version:

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

152 lines (151 loc) 7.26 kB
import { describe, expect, it } from "vitest"; import { resolveEnvironmentGuard, loadEnvironmentGuard } from "./environmentGuardPlugin.mjs"; describe("environmentGuardPlugin", () => { describe("resolveEnvironmentGuard", () => { it("returns null for non-guard specifiers", () => { expect(resolveEnvironmentGuard("react", "client")).toBeNull(); expect(resolveEnvironmentGuard("vite", "ssr")).toBeNull(); expect(resolveEnvironmentGuard("some-other-pkg", "ios")).toBeNull(); }); it("returns virtual id for server-only (with consumer)", () => { const id = resolveEnvironmentGuard("server-only", "ssr", "server"); expect(id).toBe("\0one-env-guard:server-only:ssr:server"); }); it("returns virtual id for client-only (with consumer)", () => { const id = resolveEnvironmentGuard("client-only", "client", "client"); expect(id).toBe("\0one-env-guard:client-only:client:client"); }); it("returns virtual id for native-only", () => { const id = resolveEnvironmentGuard("native-only", "ios"); expect(id).toBe("\0one-env-guard:native-only:ios:unknown"); }); it("returns virtual id for web-only", () => { const id = resolveEnvironmentGuard("web-only", "client"); expect(id).toBe("\0one-env-guard:web-only:client:unknown"); }); it("encodes worker consumer for cloudflare deploy", () => { const id = resolveEnvironmentGuard("server-only", "worker", "server"); expect(id).toBe("\0one-env-guard:server-only:worker:server"); }); }); describe("loadEnvironmentGuard", () => { it("returns null for non-virtual ids", () => { expect(loadEnvironmentGuard("react")).toBeNull(); expect(loadEnvironmentGuard("/some/path.ts")).toBeNull(); }); it("server-only: allowed in any server-consumer env", () => { expect(loadEnvironmentGuard("\0one-env-guard:server-only:ssr:server")).toBe("export {}"); expect(loadEnvironmentGuard("\0one-env-guard:server-only:worker:server")).toBe("export {}"); expect(loadEnvironmentGuard("\0one-env-guard:server-only:edge:server")).toBe("export {}"); }); it("server-only: legacy 2-part form still allowed in ssr", () => { const result = loadEnvironmentGuard("\0one-env-guard:server-only:ssr"); expect(result).toBe("export {}"); }); it("server-only: forbidden in client", () => { const result = loadEnvironmentGuard("\0one-env-guard:server-only:client:client"); expect(result).toContain("throw new Error"); expect(result).toContain("server-only"); expect(result).toContain("client"); }); it("server-only: forbidden in ios", () => { const result = loadEnvironmentGuard("\0one-env-guard:server-only:ios:client"); expect(result).toContain("throw new Error"); }); it("server-only: forbidden in android", () => { const result = loadEnvironmentGuard("\0one-env-guard:server-only:android:client"); expect(result).toContain("throw new Error"); }); it("client-only: allowed in client", () => { const result = loadEnvironmentGuard("\0one-env-guard:client-only:client:client"); expect(result).toBe("export {}"); }); it("client-only: legacy 2-part form still allowed in client", () => { const result = loadEnvironmentGuard("\0one-env-guard:client-only:client"); expect(result).toBe("export {}"); }); it("client-only: forbidden in ssr", () => { const result = loadEnvironmentGuard("\0one-env-guard:client-only:ssr:server"); expect(result).toContain("throw new Error"); }); it("client-only: forbidden in ios", () => { const result = loadEnvironmentGuard("\0one-env-guard:client-only:ios:server"); expect(result).toContain("throw new Error"); }); it("client-only: forbidden in android", () => { const result = loadEnvironmentGuard("\0one-env-guard:client-only:android:server"); expect(result).toContain("throw new Error"); }); it("native-only: allowed in ios", () => { const result = loadEnvironmentGuard("\0one-env-guard:native-only:ios:unknown"); expect(result).toBe("export {}"); }); it("native-only: allowed in android", () => { const result = loadEnvironmentGuard("\0one-env-guard:native-only:android:unknown"); expect(result).toBe("export {}"); }); it("native-only: forbidden in client", () => { const result = loadEnvironmentGuard("\0one-env-guard:native-only:client:client"); expect(result).toContain("throw new Error"); }); it("native-only: forbidden in ssr", () => { const result = loadEnvironmentGuard("\0one-env-guard:native-only:ssr:server"); expect(result).toContain("throw new Error"); }); it("web-only: allowed in client", () => { const result = loadEnvironmentGuard("\0one-env-guard:web-only:client:client"); expect(result).toBe("export {}"); }); it("web-only: allowed in ssr", () => { const result = loadEnvironmentGuard("\0one-env-guard:web-only:ssr:server"); expect(result).toBe("export {}"); }); it("web-only: forbidden in ios", () => { const result = loadEnvironmentGuard("\0one-env-guard:web-only:ios:unknown"); expect(result).toContain("throw new Error"); }); it("web-only: forbidden in android", () => { const result = loadEnvironmentGuard("\0one-env-guard:web-only:android:unknown"); expect(result).toContain("throw new Error"); }); it("disabled guards always pass", () => { const result = loadEnvironmentGuard("\0one-env-guard:client-only:disabled"); expect(result).toBe("export {}"); }); }); describe("options", () => { it("disabled: true makes all guards no-ops", () => { const id = resolveEnvironmentGuard("client-only", "ssr", "server", { disabled: true }); expect(id).toBe("\0one-env-guard:client-only:disabled"); expect(loadEnvironmentGuard(id)).toBe("export {}"); }); it("disableGuards: disables specific guard types", () => { const id1 = resolveEnvironmentGuard("client-only", "ssr", "server", { disableGuards: ["client-only"] }); expect(id1).toBe("\0one-env-guard:client-only:disabled"); const id2 = resolveEnvironmentGuard("server-only", "client", "client", { disableGuards: ["client-only"] }); expect(id2).toBe("\0one-env-guard:server-only:client:client"); expect(loadEnvironmentGuard(id2)).toContain("throw new Error"); }); it("disableGuards: can disable multiple guards", () => { const id1 = resolveEnvironmentGuard("client-only", "ssr", "server", { disableGuards: ["client-only", "server-only"] }); expect(id1).toBe("\0one-env-guard:client-only:disabled"); const id2 = resolveEnvironmentGuard("server-only", "client", "client", { disableGuards: ["client-only", "server-only"] }); expect(id2).toBe("\0one-env-guard:server-only:disabled"); const id3 = resolveEnvironmentGuard("native-only", "client", "client", { disableGuards: ["client-only", "server-only"] }); expect(id3).toBe("\0one-env-guard:native-only:client:client"); }); }); }); //# sourceMappingURL=environmentGuardPlugin.test.mjs.map