@nomadmystic/wordpress-scaffold-cli
Version:
This project is created to speed up WordPress development
64 lines (63 loc) • 2.57 kB
JavaScript
import fs from 'fs';
import { execSync } from 'child_process';
import { Command, Option } from 'commander';
import FileUtils from '../utils/file-utils.js';
import { packageRootDir } from '../utils/package-root.js';
import CommanderOptions from '../config/commander-options.js';
class CommanderCli {
static buildCommanderCli = async () => {
try {
const program = await this.buildProgram();
const inputs = program?.parse();
const options = program?.opts() ? program.opts() : {};
const cliOptions = Object.keys(CommanderOptions);
const userInputs = Object.keys(options);
if (userInputs && userInputs.length > 1) {
console.log('Only one option can be used at a time! See --help');
process.exit(1);
}
if (options && typeof options !== 'undefined' && cliOptions.includes(userInputs[0])) {
await this.callCommand(userInputs[0]);
}
}
catch (err) {
console.log('CommanderCli.buildCommanderCli()');
console.error(err);
}
};
static buildProgram = async () => {
try {
const program = new Command();
const packageFile = await FileUtils.getFileAsJson(`${packageRootDir}/package.json`);
program.description('CLI for scaffolding WordPress websites');
program.name('wps');
program.version(packageFile.version);
program.allowUnknownOption(true);
program.addOption(new Option('-pi, --project-init', 'Call the Project Init command'));
program.addOption(new Option('-t, --theme', 'Call the Theme command'));
program.addOption(new Option('-p, --plugin', 'Call the Plugin command'));
return program;
}
catch (err) {
console.log('CommanderCli.buildCommander()');
console.error(err);
}
};
static callCommand = async (command) => {
try {
const path = CommanderOptions[command].path;
const fullPath = `${packageRootDir}/dist/${path}`;
if (!fs.existsSync(fullPath)) {
console.log('Path to command doesn\'t! Contact the maintainer');
process.exit(1);
}
execSync(fullPath, { stdio: 'inherit' });
}
catch (err) {
console.log('CommanderCli.callCommand()');
console.error(err);
}
};
}
await CommanderCli.buildCommanderCli();