import { Types } from "@monitor/client"; import { UsableResource } from "@types"; import { type ClassValue, clsx } from "clsx"; import { twMerge } from "tailwind-merge"; export function cn(...inputs: ClassValue[]) { return twMerge(clsx(inputs)); } export const object_keys = (o: T): (keyof T)[] => Object.keys(o) as (keyof T)[]; export const RESOURCE_TARGETS: UsableResource[] = [ "Procedure", "Deployment", "Server", "Build", "Repo", "Builder", "Alerter", ]; export function env_to_text(envVars: Types.EnvironmentVar[] | undefined) { return envVars?.reduce( (prev, { variable, value }) => prev + (prev ? "\n" : "") + `${variable}=${value}`, "" ); } export function text_to_env(env: string): Types.EnvironmentVar[] { return env .split("\n") .filter((line) => keep_line(line)) .map((entry) => { const [first, ...rest] = entry.replaceAll('"', "").split("="); return [first, rest.join("=")]; }) .map(([variable, value]) => ({ variable, value })); } function keep_line(line: string) { if (line.length === 0) return false; let firstIndex = -1; for (let i = 0; i < line.length; i++) { if (line[i] !== " ") { firstIndex = i; break; } } if (firstIndex === -1) return false; if (line[firstIndex] === "#") return false; return true; }