diff --git a/packages/hydrooj/bin/commands.ts b/packages/hydrooj/bin/commands.ts index 2378a8f3a..8c94845de 100644 --- a/packages/hydrooj/bin/commands.ts +++ b/packages/hydrooj/bin/commands.ts @@ -1,3 +1,4 @@ +/* eslint-disable import/no-dynamic-require */ import child from 'child_process'; import os from 'os'; import path from 'path'; @@ -46,9 +47,9 @@ if (!addons.includes('@hydrooj/ui-default')) { } } +addons = Array.from(new Set(addons)); if (!argv.args[0] || argv.args[0] === 'cli') { const hydro = require('../src/loader'); - addons = Array.from(new Set(addons)); for (const addon of addons) hydro.addon(addon); (argv.args[0] === 'cli' ? hydro.loadCli : hydro.load)().catch((e) => { console.error(e); @@ -195,7 +196,19 @@ if (!argv.args[0] || argv.args[0] === 'cli') { cli.help(); cli.parse(); if (!cli.matchedCommand) { - console.log('Unknown command.'); - cli.outputHelp(); + for (const i of addons) { + try { + require(`${i}/command.ts`).apply(cli); + } catch (e) { + try { + require(`${i}/command.js`).apply(cli); + } catch (err) { } + } + } + cli.parse(); + if (!cli.matchedCommand) { + console.log('Unknown command.'); + cli.outputHelp(); + } } } diff --git a/packages/hydrooj/src/libs.ts b/packages/hydrooj/src/libs.ts new file mode 100644 index 000000000..4076f32ca --- /dev/null +++ b/packages/hydrooj/src/libs.ts @@ -0,0 +1,22 @@ +import AdmZip from 'adm-zip'; +import fs from 'fs-extra'; +import yaml from 'js-yaml'; +import _ from 'lodash'; +import moment from 'moment-timezone'; +import Schema from 'schemastery'; +import superagent from 'superagent'; +import { Context } from './context'; +export { ObjectID, ObjectId, FilterQuery } from 'mongodb'; +export { WebSocket, WebSocketServer } from 'ws'; +export * from './utils'; +export * from './interface'; +export * from './typeutils'; +export { + Schema, yaml, fs, AdmZip, superagent, _, moment, +}; +export const definePlugin = (args: { + using?: keyof Context[]; + apply: (ctx: Context, config: T) => Promise | void; + schema?: Schema; + name?: string; +}) => args; diff --git a/packages/hydrooj/src/plugin-api.ts b/packages/hydrooj/src/plugin-api.ts index 720249a1a..7aac4e66c 100644 --- a/packages/hydrooj/src/plugin-api.ts +++ b/packages/hydrooj/src/plugin-api.ts @@ -1,20 +1,8 @@ -import AdmZip from 'adm-zip'; -import fs from 'fs-extra'; -import yaml from 'js-yaml'; -import _ from 'lodash'; -import moment from 'moment-timezone'; -import Schema from 'schemastery'; -import superagent from 'superagent'; -import { Context } from './context'; import db from './service/db'; -export { ObjectID, ObjectId, FilterQuery } from 'mongodb'; -export { WebSocket, WebSocketServer } from 'ws'; -export * from './utils'; -export * from './interface'; export * from './pipelineUtils'; export * from './error'; +export * from './libs'; export * from './settings'; -export * from './typeutils'; export * as SystemModel from './model/system'; export * as TrainingModel from './model/training'; export * as OpcountModel from './model/opcount'; @@ -54,12 +42,4 @@ export { export { UiContextBase } from './service/layers/base'; export * as StorageService from './service/storage'; export { EventMap } from './service/bus'; -export { - db, Schema, yaml, fs, AdmZip, superagent, _, moment, -}; -export const definePlugin = (args: { - using?: keyof Context[]; - apply: (ctx: Context, config: T) => Promise | void; - schema?: Schema; - name?: string; -}) => args; +export { db };