154 lines · 6.5 KB · TypeScript
RawDownload
// @effect-diagnostics nodeBuiltinImport:off - Tests exercise root env file precedence directly.import * as NodeFS from "node:fs";import * as NodeOS from "node:os";import * as NodePath from "node:path";import { afterEach, describe, expect, it } from "vite-plus/test"; import { loadRepoEnv, resolvePublicConfig } from "./public-config.ts"; const temporaryDirectories: string[] = []; afterEach(() => {  for (const directory of temporaryDirectories.splice(0)) {    NodeFS.rmSync(directory, { recursive: true, force: true });  }}); describe("loadRepoEnv", () => {  it("does not project cloud configuration for an unconfigured clone", () => {    const env = loadRepoEnv({ baseEnv: {}, repoRoot: makeTemporaryDirectory() });     expect(env.T3CODE_CLERK_PUBLISHABLE_KEY).toBeUndefined();    expect(env.T3CODE_CLERK_CLI_OAUTH_CLIENT_ID).toBeUndefined();    expect(env.VITE_CLERK_PUBLISHABLE_KEY).toBeUndefined();    expect(env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY).toBeUndefined();    expect(env.T3CODE_CLERK_JWT_TEMPLATE).toBeUndefined();    expect(env.VITE_CLERK_JWT_TEMPLATE).toBeUndefined();    expect(env.EXPO_PUBLIC_CLERK_JWT_TEMPLATE).toBeUndefined();    expect(env.T3CODE_RELAY_URL).toBeUndefined();    expect(env.VITE_T3CODE_RELAY_URL).toBeUndefined();    expect(env.T3CODE_MOBILE_OTLP_TRACES_URL).toBeUndefined();    expect(env.T3CODE_MOBILE_OTLP_TRACES_DATASET).toBeUndefined();    expect(env.T3CODE_MOBILE_OTLP_TRACES_TOKEN).toBeUndefined();    expect(env.EXPO_PUBLIC_OTLP_TRACES_URL).toBeUndefined();    expect(env.EXPO_PUBLIC_OTLP_TRACES_DATASET).toBeUndefined();    expect(env.EXPO_PUBLIC_OTLP_TRACES_TOKEN).toBeUndefined();    expect(env.T3CODE_RELAY_CLIENT_OTLP_TRACES_URL).toBeUndefined();    expect(env.T3CODE_RELAY_CLIENT_OTLP_TRACES_DATASET).toBeUndefined();    expect(env.T3CODE_RELAY_CLIENT_OTLP_TRACES_TOKEN).toBeUndefined();    expect(env.VITE_RELAY_OTLP_TRACES_URL).toBeUndefined();    expect(env.VITE_RELAY_OTLP_TRACES_DATASET).toBeUndefined();    expect(env.VITE_RELAY_OTLP_TRACES_TOKEN).toBeUndefined();  });   it("applies process, root local, and root precedence in that order", () => {    const repoRoot = makeTemporaryDirectory();    NodeFS.writeFileSync(      NodePath.join(repoRoot, ".env"),      "T3CODE_CLERK_PUBLISHABLE_KEY=pk_root\nT3CODE_CLERK_JWT_TEMPLATE=template_root\nT3CODE_CLERK_CLI_OAUTH_CLIENT_ID=oauth_root\nT3CODE_RELAY_URL=https://root.example.test\n",    );    NodeFS.writeFileSync(      NodePath.join(repoRoot, ".env.local"),      "T3CODE_CLERK_PUBLISHABLE_KEY=pk_local\nT3CODE_CLERK_JWT_TEMPLATE=template_local\nT3CODE_CLERK_CLI_OAUTH_CLIENT_ID=oauth_local\nT3CODE_RELAY_URL=https://local.example.test\n",    );     expect(loadRepoEnv({ baseEnv: {}, repoRoot }).T3CODE_RELAY_URL).toBe(      "https://local.example.test",    );    expect(      loadRepoEnv({        baseEnv: {          T3CODE_CLERK_PUBLISHABLE_KEY: "pk_ci",          T3CODE_CLERK_JWT_TEMPLATE: "template_ci",          T3CODE_CLERK_CLI_OAUTH_CLIENT_ID: "oauth_ci",          T3CODE_RELAY_URL: "https://ci.example.test",        },        repoRoot,      }),    ).toMatchObject({      T3CODE_CLERK_PUBLISHABLE_KEY: "pk_ci",      T3CODE_CLERK_CLI_OAUTH_CLIENT_ID: "oauth_ci",      VITE_CLERK_PUBLISHABLE_KEY: "pk_ci",      EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY: "pk_ci",      T3CODE_CLERK_JWT_TEMPLATE: "template_ci",      VITE_CLERK_JWT_TEMPLATE: "template_ci",      EXPO_PUBLIC_CLERK_JWT_TEMPLATE: "template_ci",      T3CODE_RELAY_URL: "https://ci.example.test",      VITE_T3CODE_RELAY_URL: "https://ci.example.test",    });  });   it("accepts legacy framework aliases as root overrides", () => {    expect(      resolvePublicConfig({        VITE_CLERK_PUBLISHABLE_KEY: "pk_legacy",        VITE_CLERK_JWT_TEMPLATE: "template_legacy",        T3CODE_CLERK_CLI_OAUTH_CLIENT_ID: "oauth_canonical",        VITE_T3CODE_RELAY_URL: "https://legacy.example.test",        EXPO_PUBLIC_OTLP_TRACES_URL: "https://api.axiom.co/v1/traces",        EXPO_PUBLIC_OTLP_TRACES_DATASET: "mobile-traces",        EXPO_PUBLIC_OTLP_TRACES_TOKEN: "mobile-token",      }),    ).toEqual({      clerkPublishableKey: "pk_legacy",      clerkJwtTemplate: "template_legacy",      clerkCliOAuthClientId: "oauth_canonical",      relayUrl: "https://legacy.example.test",      mobileOtlpTracesUrl: "https://api.axiom.co/v1/traces",      mobileOtlpTracesDataset: "mobile-traces",      mobileOtlpTracesToken: "mobile-token",      relayClientOtlpTracesUrl: undefined,      relayClientOtlpTracesDataset: undefined,      relayClientOtlpTracesToken: undefined,    });  });   it("projects canonical relay client tracing values to web build aliases", () => {    expect(      loadRepoEnv({        baseEnv: {          T3CODE_RELAY_CLIENT_OTLP_TRACES_URL: "https://api.axiom.co/v1/traces",          T3CODE_RELAY_CLIENT_OTLP_TRACES_DATASET: "relay-client-traces",          T3CODE_RELAY_CLIENT_OTLP_TRACES_TOKEN: "relay-client-token",        },        repoRoot: makeTemporaryDirectory(),      }),    ).toEqual({      T3CODE_RELAY_CLIENT_OTLP_TRACES_URL: "https://api.axiom.co/v1/traces",      T3CODE_RELAY_CLIENT_OTLP_TRACES_DATASET: "relay-client-traces",      T3CODE_RELAY_CLIENT_OTLP_TRACES_TOKEN: "relay-client-token",      VITE_RELAY_OTLP_TRACES_URL: "https://api.axiom.co/v1/traces",      VITE_RELAY_OTLP_TRACES_DATASET: "relay-client-traces",      VITE_RELAY_OTLP_TRACES_TOKEN: "relay-client-token",    });  });   it("projects canonical mobile tracing values to Expo public aliases", () => {    expect(      loadRepoEnv({        baseEnv: {          T3CODE_RELAY_URL: "https://relay.example.test",          T3CODE_MOBILE_OTLP_TRACES_URL: "https://api.axiom.co/v1/traces",          T3CODE_MOBILE_OTLP_TRACES_DATASET: "mobile-traces",          T3CODE_MOBILE_OTLP_TRACES_TOKEN: "mobile-token",        },        repoRoot: makeTemporaryDirectory(),      }),    ).toEqual({      T3CODE_RELAY_URL: "https://relay.example.test",      VITE_T3CODE_RELAY_URL: "https://relay.example.test",      T3CODE_MOBILE_OTLP_TRACES_URL: "https://api.axiom.co/v1/traces",      T3CODE_MOBILE_OTLP_TRACES_DATASET: "mobile-traces",      T3CODE_MOBILE_OTLP_TRACES_TOKEN: "mobile-token",      EXPO_PUBLIC_OTLP_TRACES_URL: "https://api.axiom.co/v1/traces",      EXPO_PUBLIC_OTLP_TRACES_DATASET: "mobile-traces",      EXPO_PUBLIC_OTLP_TRACES_TOKEN: "mobile-token",    });  });}); function makeTemporaryDirectory() {  const directory = NodeFS.mkdtempSync(NodePath.join(NodeOS.tmpdir(), "t3code-public-config-"));  temporaryDirectories.push(directory);  return directory;}