← back to Open Seo

scripts/cli-utils.ts

42 lines

import { existsSync, readFileSync } from "node:fs";
import process from "node:process";

export function parseArgs(argv: string[]) {
  const parsed: Record<string, string> = {};
  for (let i = 0; i < argv.length; i += 1) {
    const token = argv[i];
    if (!token.startsWith("--")) continue;
    const withoutPrefix = token.slice(2);
    const sep = withoutPrefix.indexOf("=");
    if (sep >= 0) {
      parsed[withoutPrefix.slice(0, sep)] = withoutPrefix.slice(sep + 1);
      continue;
    }
    const next = argv[i + 1];
    if (!next || next.startsWith("--")) {
      parsed[withoutPrefix] = "true";
      continue;
    }
    parsed[withoutPrefix] = next;
    i += 1;
  }
  return parsed;
}

export function loadLocalEnv() {
  for (const path of [".env.local", ".env"]) {
    if (!existsSync(path)) continue;
    const content = readFileSync(path, "utf8");
    for (const line of content.split(/\r?\n/u)) {
      const trimmed = line.trim();
      if (!trimmed || trimmed.startsWith("#")) continue;
      const sep = trimmed.indexOf("=");
      if (sep < 0) continue;
      const key = trimmed.slice(0, sep).trim();
      const rawValue = trimmed.slice(sep + 1).trim();
      if (!key || process.env[key]) continue;
      process.env[key] = rawValue.replace(/^['"]|['"]$/g, "");
    }
  }
}