mirror of
https://gitcode.com/gh_mirrors/hy/Hydro.git
synced 2026-10-17 17:36:08 +08:00
54 lines
1.8 KiB
TypeScript
54 lines
1.8 KiB
TypeScript
import child from 'child_process';
|
|
import os from 'os';
|
|
import path from 'path';
|
|
import { CAC } from 'cac';
|
|
import fs from 'fs-extra';
|
|
import { Logger } from '@hydrooj/utils';
|
|
import { getAddons, writeAddons } from '../options';
|
|
|
|
const logger = new Logger('addon');
|
|
const addonDir = path.resolve(os.homedir(), '.hydro', 'addons');
|
|
|
|
export function register(cli: CAC) {
|
|
cli.command('addon [operation] [name]').action((operation, name) => {
|
|
if (operation && !['add', 'remove', 'create', 'list'].includes(operation)) {
|
|
console.log('Unknown operation.');
|
|
return;
|
|
}
|
|
let addons = getAddons();
|
|
if (operation === 'create') {
|
|
const dir = `${addonDir}/${name || 'addon'}`;
|
|
fs.mkdirSync(dir, { recursive: true });
|
|
child.execSync('yarn init -y', { cwd: dir });
|
|
fs.mkdirSync(`${dir}/templates`);
|
|
fs.mkdirSync(`${dir}/locales`);
|
|
fs.mkdirSync(`${dir}/public`);
|
|
fs.mkdirSync(`${dir}/frontend`);
|
|
fs.symlinkSync(dir, path.resolve(os.homedir(), name || 'addon'), 'dir');
|
|
addons.push(dir);
|
|
logger.success(`Addon created at ${dir}`);
|
|
} else if (operation && name) {
|
|
for (let i = 0; i < addons.length; i++) {
|
|
if (addons[i] === name) {
|
|
addons.splice(i, 1);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (operation === 'add' && name) {
|
|
try {
|
|
require.resolve(`${name}/package.json`);
|
|
} catch (e) {
|
|
logger.error(`Addon not found or not available: ${name}`);
|
|
return;
|
|
}
|
|
addons.push(name);
|
|
}
|
|
addons = Array.from(new Set(addons));
|
|
logger.info('Current Addons: ');
|
|
console.log(addons);
|
|
writeAddons(addons);
|
|
});
|
|
}
|