90 lines · 2.7 KB · TypeScript
RawDownload
import { fromLenientJson } from "@t3tools/shared/schemaJson";import * as Option from "effect/Option";import * as Schema from "effect/Schema"; import {  DEFAULT_LINUX_PASSWORD_STORE,  normalizeLinuxPasswordStorePreference,  resolveLinuxPasswordStoreSwitch,  type LinuxPasswordStoreSwitch,  type LinuxPasswordStorePreference,} from "../linuxSecretStorage.ts";import {  resolveDesktopBaseDir,  resolveDesktopStateDir,  type JoinPath,} from "./DesktopStatePaths.ts"; interface EarlyDesktopSettingsInput {  readonly env: NodeJS.ProcessEnv;  readonly homeDirectory: string;  readonly joinPath: JoinPath;  readonly readFileString: (path: string) => string;} type EarlyLinuxElectronOptionsInput = EarlyDesktopSettingsInput; export interface EarlyLinuxElectronOptions {  readonly linuxWmClass: string;  readonly passwordStore: LinuxPasswordStoreSwitch | null;} const trimNonEmpty = (value: string | undefined): string | null => {  const trimmed = value?.trim();  return trimmed && trimmed.length > 0 ? trimmed : null;}; const EarlyDesktopSettingsJson = fromLenientJson(  Schema.Struct({    linuxPasswordStore: Schema.optionalKey(Schema.Unknown),  }),);const decodeEarlyDesktopSettingsJson = Schema.decodeSync(EarlyDesktopSettingsJson); const isDevelopmentEnvironment = (env: NodeJS.ProcessEnv): boolean =>  trimNonEmpty(env.VITE_DEV_SERVER_URL) !== null; function resolveEarlyDesktopSettingsPath(input: {  readonly env: NodeJS.ProcessEnv;  readonly homeDirectory: string;  readonly joinPath: JoinPath;}): string {  const t3Home = Option.fromUndefinedOr(input.env.T3CODE_HOME);  const baseDir = resolveDesktopBaseDir({    homeDirectory: input.homeDirectory,    joinPath: input.joinPath,    t3Home,  });  const stateDir = resolveDesktopStateDir({    baseDir,    isDevelopment: isDevelopmentEnvironment(input.env),    joinPath: input.joinPath,    t3Home,  });  return input.joinPath(stateDir, "desktop-settings.json");} export function resolveEarlyLinuxPasswordStorePreference(  input: EarlyDesktopSettingsInput,): LinuxPasswordStorePreference {  const settingsPath = resolveEarlyDesktopSettingsPath(input);  try {    const parsed = decodeEarlyDesktopSettingsJson(input.readFileString(settingsPath));    return normalizeLinuxPasswordStorePreference(parsed.linuxPasswordStore);  } catch {    return DEFAULT_LINUX_PASSWORD_STORE;  }} export function resolveEarlyLinuxElectronOptions(  input: EarlyLinuxElectronOptionsInput,): EarlyLinuxElectronOptions {  const preference = resolveEarlyLinuxPasswordStorePreference(input);  return {    linuxWmClass: isDevelopmentEnvironment(input.env) ? "t3code-dev" : "t3code",    passwordStore: resolveLinuxPasswordStoreSwitch({      preference,      env: input.env,    }),  };}