alinea
Version:
Headless git-based CMS
50 lines (48 loc) • 1.42 kB
JavaScript
import "../../chunks/chunk-NZLE2WMY.js";
// src/cli/util/EnsureEnv.ts
import fs from "node:fs";
import path from "node:path";
var attempt = [".env.local", ".env"];
function ensureEnv(cwd = process.cwd()) {
const LINE = /(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/gm;
let src = void 0;
for (const file of attempt) {
try {
const dotEnvFile = path.resolve(cwd, file);
src = fs.readFileSync(dotEnvFile, "utf-8");
break;
} catch {
}
}
if (src === void 0) {
const parent = path.dirname(cwd);
if (parent === cwd) return;
return ensureEnv(path.dirname(cwd));
}
const obj = {};
let lines = src.toString();
lines = lines.replace(/\r\n?/gm, "\n");
let match;
while ((match = LINE.exec(lines)) != null) {
const key = match[1];
let value = match[2] || "";
value = value.trim();
const maybeQuote = value[0];
value = value.replace(/^(['"`])([\s\S]*)\1$/gm, "$2");
if (maybeQuote === '"') {
value = value.replace(/\\n/g, "\n");
value = value.replace(/\\r/g, "\r");
}
obj[key] = value;
const processEnv = process.env;
for (const key2 of Object.keys(obj)) {
if (Object.prototype.hasOwnProperty.call(processEnv, key2)) {
} else {
processEnv[key2] = obj[key2];
}
}
}
}
export {
ensureEnv
};