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/hydro/entry/common.js

160 lines
4.6 KiB
JavaScript

/* eslint-disable no-eval */
const os = require('os');
const fs = require('fs');
const builtinLib = [
'axios', 'download', 'i18n', 'mail', 'markdown',
'md5', 'misc', 'paginate', 'hash.hydro', 'rank',
'template', 'validator', 'nav', 'sysinfo', 'testdata.convert.ini',
'readConfig',
];
const builtinModel = [
'builtin', 'document', 'domain', 'blacklist', 'opcount',
'setting', 'token', 'user', 'problem', 'record',
'contest', 'message', 'solution', 'training', 'file',
'discussion', 'system',
];
const builtinHandler = [
'home', 'problem', 'record', 'judge', 'user',
'contest', 'training', 'discussion', 'manage', 'import',
'misc', 'homework', 'domain', 'wiki',
];
const builtinScript = [
'install', 'uninstall', 'rating', 'recalcRating', 'register',
'blacklist', 'setSuperadmin',
];
async function handler(pending, fail) {
for (const i of pending) {
const p = `${os.tmpdir()}/hydro/tmp/${i}/handler.js`;
if (fs.existsSync(p) && !fail.includes(i)) {
try {
console.log(`Handler init: ${i}`);
console.time(`Handler init: ${i}`);
eval('require')(p);
console.timeEnd(`Handler init: ${i}`);
} catch (e) {
fail.push(i);
console.error(`Handler Load Fail: ${i}`);
}
}
}
}
async function locale(pending, fail) {
for (const i of pending) {
const p = `${os.tmpdir()}/hydro/tmp/${i}/locale.json`;
if (fs.existsSync(p) && !fail.includes(i)) {
try {
global.Hydro.lib.i18n(eval('require')(p));
console.log(`Locale init: ${i}`);
} catch (e) {
fail.push(i);
console.error(`Locale Load Fail: ${i}`);
}
}
}
}
async function template(pending, fail) {
for (const i of pending) {
const p = `${os.tmpdir()}/hydro/tmp/${i}/template.json`;
if (fs.existsSync(p) && !fail.includes(i)) {
try {
Object.assign(global.Hydro.template, eval('require')(p));
console.log(`Template init: ${i}`);
} catch (e) {
fail.push(i);
console.error(`Template Load Fail: ${i}`);
}
}
}
}
async function model(pending, fail) {
for (const i of pending) {
const p = `${os.tmpdir()}/hydro/tmp/${i}/model.js`;
if (fs.existsSync(p) && !fail.includes(i)) {
try {
console.log(`Model init: ${i}`);
console.time(`Model init: ${i}`);
eval('require')(p);
console.timeEnd(`Model init: ${i}`);
} catch (e) {
fail.push(i);
console.error(`Model Load Fail: ${i}`);
}
}
}
}
async function lib(pending, fail) {
for (const i of pending) {
const p = `${os.tmpdir()}/hydro/tmp/${i}/lib.js`;
if (fs.existsSync(p) && !fail.includes(i)) {
try {
console.log(`Lib init: ${i}`);
console.time(`Lib init: ${i}`);
eval('require')(p);
console.timeEnd(`Lib init: ${i}`);
} catch (e) {
fail.push(i);
console.error(`Lib Load Fail: ${i}`);
}
}
}
}
async function service(pending, fail) {
for (const i of pending) {
const p = `${os.tmpdir()}/hydro/tmp/${i}/service.js`;
if (fs.existsSync(p) && !fail.includes(i)) {
try {
console.log(`Service init: ${i}`);
console.time(`Service init: ${i}`);
eval('require')(p);
console.timeEnd(`Service init: ${i}`);
} catch (e) {
fail.push(i);
console.error(`Service Load Fail: ${i}`);
console.error(e);
}
}
}
}
async function script(pending, fail, active) {
for (const i of pending) {
const p = `${os.tmpdir()}/hydro/tmp/${i}/script.js`;
if (fs.existsSync(p) && !fail.includes(i)) {
try {
console.time(`Script init: ${i}`);
eval('require')(p);
console.timeEnd(`Script init: ${i}`);
} catch (e) {
fail.push(i);
console.error(`Script Load Fail: ${i}`);
console.error(e);
}
}
active.push(i);
}
}
module.exports = {
builtinLib,
builtinModel,
builtinHandler,
builtinScript,
handler,
lib,
locale,
model,
script,
service,
template,
};