mirror of
https://gitcode.com/gh_mirrors/hy/Hydro.git
synced 2026-10-17 09:36:08 +08:00
core: load commands from external plugins
This commit is contained in:
1 parent
6e79c8995c
commit
b5bea63eed
3 files changed
+40
-25
No files matched your search
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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 = <T = never>(args: {
|
||||
using?: keyof Context[];
|
||||
apply: (ctx: Context, config: T) => Promise<void> | void;
|
||||
schema?: Schema<T>;
|
||||
name?: string;
|
||||
}) => args;
|
||||
@@ -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 = <T = never>(args: {
|
||||
using?: keyof Context[];
|
||||
apply: (ctx: Context, config: T) => Promise<void> | void;
|
||||
schema?: Schema<T>;
|
||||
name?: string;
|
||||
}) => args;
|
||||
export { db };
|
||||
Reference in new issue
Block a user