mirror of
https://github.com/VibedByKaKi/t3-code-android-nightly.git
synced 2026-10-09 11:51:15 +02:00
Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: codex <codex@users.noreply.github.com>
173 lines
5.6 KiB
TypeScript
173 lines
5.6 KiB
TypeScript
// @effect-diagnostics nodeBuiltinImport:off - Build bootstrap reads optional root env files before an Effect runtime exists.
|
|
import * as NodeFS from "node:fs";
|
|
import * as NodePath from "node:path";
|
|
import * as NodeURL from "node:url";
|
|
import * as NodeUtil from "node:util";
|
|
|
|
export interface T3CodePublicConfig {
|
|
readonly clerkPublishableKey: string | undefined;
|
|
readonly clerkJwtTemplate: string | undefined;
|
|
readonly clerkCliOAuthClientId: string | undefined;
|
|
readonly relayUrl: string | undefined;
|
|
readonly mobileOtlpTracesUrl: string | undefined;
|
|
readonly mobileOtlpTracesDataset: string | undefined;
|
|
readonly mobileOtlpTracesToken: string | undefined;
|
|
readonly relayClientOtlpTracesUrl: string | undefined;
|
|
readonly relayClientOtlpTracesDataset: string | undefined;
|
|
readonly relayClientOtlpTracesToken: string | undefined;
|
|
}
|
|
|
|
type Environment = Readonly<Record<string, string | undefined>>;
|
|
|
|
const REPO_ROOT = NodePath.dirname(
|
|
NodePath.dirname(NodePath.dirname(NodeURL.fileURLToPath(import.meta.url))),
|
|
);
|
|
|
|
export function loadRepoEnv({
|
|
baseEnv = process.env,
|
|
repoRoot = REPO_ROOT,
|
|
}: {
|
|
readonly baseEnv?: Environment;
|
|
readonly repoRoot?: string;
|
|
} = {}): Record<string, string | undefined> {
|
|
const rootEnv = readEnvFile(NodePath.join(repoRoot, ".env"));
|
|
const localEnv = readEnvFile(NodePath.join(repoRoot, ".env.local"));
|
|
const config = resolvePublicConfig(baseEnv, localEnv, rootEnv);
|
|
|
|
return {
|
|
...rootEnv,
|
|
...localEnv,
|
|
...baseEnv,
|
|
...(config.clerkPublishableKey
|
|
? {
|
|
T3CODE_CLERK_PUBLISHABLE_KEY: config.clerkPublishableKey,
|
|
VITE_CLERK_PUBLISHABLE_KEY: config.clerkPublishableKey,
|
|
EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY: config.clerkPublishableKey,
|
|
}
|
|
: {}),
|
|
...(config.clerkJwtTemplate
|
|
? {
|
|
T3CODE_CLERK_JWT_TEMPLATE: config.clerkJwtTemplate,
|
|
VITE_CLERK_JWT_TEMPLATE: config.clerkJwtTemplate,
|
|
EXPO_PUBLIC_CLERK_JWT_TEMPLATE: config.clerkJwtTemplate,
|
|
}
|
|
: {}),
|
|
...(config.clerkCliOAuthClientId
|
|
? {
|
|
T3CODE_CLERK_CLI_OAUTH_CLIENT_ID: config.clerkCliOAuthClientId,
|
|
VITE_CLERK_CLI_OAUTH_CLIENT_ID: config.clerkCliOAuthClientId,
|
|
}
|
|
: {}),
|
|
...(config.relayUrl
|
|
? {
|
|
T3CODE_RELAY_URL: config.relayUrl,
|
|
VITE_T3CODE_RELAY_URL: config.relayUrl,
|
|
}
|
|
: {}),
|
|
...(config.mobileOtlpTracesUrl
|
|
? {
|
|
T3CODE_MOBILE_OTLP_TRACES_URL: config.mobileOtlpTracesUrl,
|
|
EXPO_PUBLIC_OTLP_TRACES_URL: config.mobileOtlpTracesUrl,
|
|
}
|
|
: {}),
|
|
...(config.mobileOtlpTracesDataset
|
|
? {
|
|
T3CODE_MOBILE_OTLP_TRACES_DATASET: config.mobileOtlpTracesDataset,
|
|
EXPO_PUBLIC_OTLP_TRACES_DATASET: config.mobileOtlpTracesDataset,
|
|
}
|
|
: {}),
|
|
...(config.mobileOtlpTracesToken
|
|
? {
|
|
T3CODE_MOBILE_OTLP_TRACES_TOKEN: config.mobileOtlpTracesToken,
|
|
EXPO_PUBLIC_OTLP_TRACES_TOKEN: config.mobileOtlpTracesToken,
|
|
}
|
|
: {}),
|
|
...(config.relayClientOtlpTracesUrl
|
|
? {
|
|
T3CODE_RELAY_CLIENT_OTLP_TRACES_URL: config.relayClientOtlpTracesUrl,
|
|
VITE_RELAY_OTLP_TRACES_URL: config.relayClientOtlpTracesUrl,
|
|
}
|
|
: {}),
|
|
...(config.relayClientOtlpTracesDataset
|
|
? {
|
|
T3CODE_RELAY_CLIENT_OTLP_TRACES_DATASET: config.relayClientOtlpTracesDataset,
|
|
VITE_RELAY_OTLP_TRACES_DATASET: config.relayClientOtlpTracesDataset,
|
|
}
|
|
: {}),
|
|
...(config.relayClientOtlpTracesToken
|
|
? {
|
|
T3CODE_RELAY_CLIENT_OTLP_TRACES_TOKEN: config.relayClientOtlpTracesToken,
|
|
VITE_RELAY_OTLP_TRACES_TOKEN: config.relayClientOtlpTracesToken,
|
|
}
|
|
: {}),
|
|
};
|
|
}
|
|
|
|
export function resolvePublicConfig(...sources: readonly Environment[]): T3CodePublicConfig {
|
|
return {
|
|
clerkPublishableKey: firstNonEmpty(
|
|
sources,
|
|
"T3CODE_CLERK_PUBLISHABLE_KEY",
|
|
"VITE_CLERK_PUBLISHABLE_KEY",
|
|
"EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY",
|
|
),
|
|
clerkJwtTemplate: firstNonEmpty(
|
|
sources,
|
|
"T3CODE_CLERK_JWT_TEMPLATE",
|
|
"VITE_CLERK_JWT_TEMPLATE",
|
|
"EXPO_PUBLIC_CLERK_JWT_TEMPLATE",
|
|
),
|
|
clerkCliOAuthClientId: firstNonEmpty(
|
|
sources,
|
|
"T3CODE_CLERK_CLI_OAUTH_CLIENT_ID",
|
|
"VITE_CLERK_CLI_OAUTH_CLIENT_ID",
|
|
),
|
|
relayUrl: firstNonEmpty(sources, "T3CODE_RELAY_URL", "VITE_T3CODE_RELAY_URL"),
|
|
mobileOtlpTracesUrl: firstNonEmpty(
|
|
sources,
|
|
"T3CODE_MOBILE_OTLP_TRACES_URL",
|
|
"EXPO_PUBLIC_OTLP_TRACES_URL",
|
|
),
|
|
mobileOtlpTracesDataset: firstNonEmpty(
|
|
sources,
|
|
"T3CODE_MOBILE_OTLP_TRACES_DATASET",
|
|
"EXPO_PUBLIC_OTLP_TRACES_DATASET",
|
|
),
|
|
mobileOtlpTracesToken: firstNonEmpty(
|
|
sources,
|
|
"T3CODE_MOBILE_OTLP_TRACES_TOKEN",
|
|
"EXPO_PUBLIC_OTLP_TRACES_TOKEN",
|
|
),
|
|
relayClientOtlpTracesUrl: firstNonEmpty(
|
|
sources,
|
|
"T3CODE_RELAY_CLIENT_OTLP_TRACES_URL",
|
|
"VITE_RELAY_OTLP_TRACES_URL",
|
|
),
|
|
relayClientOtlpTracesDataset: firstNonEmpty(
|
|
sources,
|
|
"T3CODE_RELAY_CLIENT_OTLP_TRACES_DATASET",
|
|
"VITE_RELAY_OTLP_TRACES_DATASET",
|
|
),
|
|
relayClientOtlpTracesToken: firstNonEmpty(
|
|
sources,
|
|
"T3CODE_RELAY_CLIENT_OTLP_TRACES_TOKEN",
|
|
"VITE_RELAY_OTLP_TRACES_TOKEN",
|
|
),
|
|
};
|
|
}
|
|
|
|
function firstNonEmpty(sources: readonly Environment[], ...names: readonly string[]) {
|
|
for (const source of sources) {
|
|
for (const name of names) {
|
|
const value = source[name]?.trim();
|
|
if (value) {
|
|
return value;
|
|
}
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
|
|
function readEnvFile(path: string): Record<string, string | undefined> {
|
|
return NodeFS.existsSync(path) ? NodeUtil.parseEnv(NodeFS.readFileSync(path, "utf8")) : {};
|
|
}
|