@neo-one/server-plugin-simulation-esnext-esm
Version:
NEO•ONE Server simulation plugin.
37 lines (31 loc) • 1.41 kB
text/typescript
import { InteractiveCLIArgs } from '@neo-one/server-plugin-esnext-esm';
import * as fs from 'fs-extra';
import * as path from 'path';
import { CouldNotLoadSimulationError } from './errors';
import { SimulationConfig } from './types';
const requireResolve = (pkg: string, requirePath: string) => path.resolve(require.resolve(pkg), requirePath);
const setupSimulation = async (pkg: string, dirName: string, config: SimulationConfig) => {
const simulationPath = path.resolve(process.cwd(), dirName);
await fs.ensureDir(simulationPath);
await fs.copy(requireResolve(pkg, config.templateDir), simulationPath);
};
const tryRequireSimulation = (pkg: string): SimulationConfig => {
try {
const config = require(pkg);
return config != undefined && config.default != undefined ? config.default : config;
} catch {
throw new CouldNotLoadSimulationError(pkg);
}
};
export const createCommand = ({ cli }: InteractiveCLIArgs) =>
cli.vorpal
.command('create simulation <dirName> <simulation>', 'Create a NEO•ONE simulation.')
.action(async (args) => {
const dirName = args.dirName;
const pkg = args.simulation;
cli.print('Loading simulation package...');
const config = tryRequireSimulation(pkg);
cli.print('Setting up simulation...');
await setupSimulation(pkg, dirName, config);
cli.print(`Created simulation in ${dirName}.`);
});