Files
certd/packages/ui/certd-server/src/config/loader.ts
T
2024-07-15 00:30:33 +08:00

45 lines
1.2 KiB
TypeScript

import path from 'path';
import * as _ from 'lodash-es';
import yaml from 'js-yaml';
import fs from 'fs';
function parseEnv(defaultConfig: any) {
const config = {};
for (const key in process.env) {
let keyName = key;
if (!keyName.startsWith('certd_')) {
continue;
}
keyName = keyName.replace('certd_', '');
const configKey = keyName.replace('_', '.');
const oldValue = _.get(defaultConfig, configKey);
let value: any = process.env[key];
if (typeof oldValue === 'boolean') {
value = value === 'true';
} else if (Number.isInteger(oldValue)) {
value = parseInt(value, 10);
} else if (typeof oldValue === 'number') {
value = parseFloat(value);
}
_.set(config, configKey, value);
}
return config;
}
export function load(config, env = '') {
// Get document, or throw exception on error
const yamlPath = path.join(process.cwd(), `.env.${env}.yaml`);
const doc = yaml.load(fs.readFileSync(yamlPath, 'utf8'));
_.merge(doc, parseEnv(config));
return doc;
}
export function mergeConfig(config: any, envType: string) {
_.merge(config, load(config, envType));
const keys = _.get(config, 'auth.jwt.secret');
if (keys) {
config.keys = keys;
}
return config;
}