You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Hydro/packages/hydrojudge/src/config.ts

62 lines
2.2 KiB
TypeScript

import { argv } from 'yargs';
import os from 'os';
import path from 'path';
import fs from 'fs-extra';
import log from './log';
const config = {
CONFIG_FILE: path.resolve(os.homedir(), '.config', 'hydro', 'judge.yaml'),
LANGS_FILE: path.resolve(os.homedir(), '.config', 'hydro', 'langs.yaml'),
CACHE_DIR: path.resolve(os.homedir(), '.cache', 'hydro', 'judge'),
FILES_DIR: path.resolve(os.homedir(), '.cache', 'hydro', 'files', 'judge'),
SYSTEM_MEMORY_LIMIT_MB: 1024,
SYSTEM_TIME_LIMIT_MS: 16000,
SYSTEM_PROCESS_LIMIT: 32,
RETRY_DELAY_SEC: 15,
TEMP_DIR: path.resolve(os.tmpdir(), 'hydro', 'judge'),
EXECUTION_HOST: 'http://localhost:5050',
CONFIG: null,
LANGS: null,
changeDefault(name, from, to) {
if (config[name] === from) config[name] = to;
},
};
if (fs.existsSync(path.resolve(process.cwd(), '.env'))) {
const env = {};
const f = fs.readFileSync('.env').toString();
for (const line of f) {
const a = line.split('=');
env[a[0]] = a[1];
}
Object.assign(process.env, env);
}
if (process.env.CONFIG_FILE || argv.config) {
config.CONFIG_FILE = path.resolve(process.env.CONFIG_FILE || argv.config as string);
}
if (process.env.LANGS_FILE || argv.langs) {
config.LANGS_FILE = path.resolve(process.env.LANGS_FILE || argv.langs as string);
}
if (process.env.TEMP_DIR || argv.tmp) {
config.TEMP_DIR = path.resolve(process.env.TEMP_DIR || argv.tmp as string);
}
if (process.env.CACHE_DIR || argv.cache) {
config.CACHE_DIR = path.resolve(process.env.CACHE_DIR || argv.cache as string);
}
if (process.env.FILES_DIR || argv.files) {
config.FILES_DIR = path.resolve(process.env.FILES_DIR || argv.files as string);
}
if (process.env.EXECUTION_HOST || argv.execute) {
config.EXECUTION_HOST = path.resolve(process.env.EXECUTION_HOST || argv.execute as string);
}
if (!(fs.existsSync(config.LANGS_FILE) || global.Hydro)) {
fs.ensureDirSync(path.dirname(config.LANGS_FILE));
if (fs.existsSync(path.join(__dirname, '..', 'examples', 'langs.yaml'))) {
log.error('Language file not found, using default.');
config.LANGS_FILE = path.join(__dirname, '..', 'examples', 'langs.yaml');
} else throw new Error('Language file not found');
}
export = config;