Files
vendoo/lib/config-store.mjs
T
Masterluke77andGitHub 6f48827f4d Vendoo 1.41.2 – Git Ignore Boundary & Module Tracking Hotfix (#18)
* docs: prepare Vendoo 1.41.2 git-ignore boundary hotfix

* fix: track native source modules with root-anchored runtime ignores
2026-07-09 17:09:00 +02:00

40 lines
1.6 KiB
JavaScript

import { chmodSync, existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
import { dirname, isAbsolute, join, resolve } from 'node:path';
import { fileURLToPath } from 'node:url';
const appRoot = resolve(dirname(fileURLToPath(import.meta.url)), '..');
const configured = String(process.env.VENDOO_CONFIG_PATH || '').trim();
export const CONFIG_PATH = resolve(isAbsolute(configured) ? configured : join(appRoot, configured || '.env'));
export function readRuntimeConfig() {
return existsSync(CONFIG_PATH) ? readFileSync(CONFIG_PATH, 'utf8') : '';
}
export function setConfigValue(content, key, value) {
if (value === undefined || value === null) return content;
const clean = String(value);
if (/\r|\n/.test(clean)) throw new Error(`Mehrzeilige Konfigurationswerte sind für ${key} nicht erlaubt.`);
const escaped = key.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
const regex = new RegExp(`^${escaped}=.*$`, 'm');
const line = `${key}=${clean}`;
if (regex.test(content)) return content.replace(regex, line);
return `${content.trimEnd()}\n${line}\n`;
}
export function writeRuntimeConfig(content) {
mkdirSync(dirname(CONFIG_PATH), { recursive: true });
writeFileSync(CONFIG_PATH, content, { encoding: 'utf8', mode: 0o600 });
try { chmodSync(CONFIG_PATH, 0o600); } catch {}
}
export function updateRuntimeConfig(values) {
let content = readRuntimeConfig();
for (const [key, value] of Object.entries(values)) {
if (value === undefined) continue;
content = setConfigValue(content, key, value);
process.env[key] = String(value ?? '');
}
writeRuntimeConfig(content);
return CONFIG_PATH;
}