// @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;}
// @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;
}