@nomadmystic/wordpress-scaffold-cli
Version:
This project is created to speed up WordPress development
96 lines (95 loc) • 4.03 kB
JavaScript
import 'dotenv/config';
import shell from 'shelljs';
import fs from 'fs';
import getProjectOptions from '../config/project-options.js';
import scaffoldProject from '../scaffold/project/scaffold-project.js';
import updateInternalJson from '../scaffold/common/update-internal-json.js';
import CheckDepends from '../utils/check-depends.js';
import RestUtils from '../utils/rest-utils.js';
import DebugUtils from '../utils/debug-utils.js';
import PathUtils from '../utils/path-utils.js';
import InquirerCli from '../cli/inquirer-cli.js';
import AbstractScaffold from '../abstract/AbstractScaffold.js';
import MessagingUtils from '../utils/messaging-utils.js';
class ScaffoldProject extends AbstractScaffold {
static isDebugFullMode = false;
static whereAmI = '';
static initializeScaffolding = async () => {
try {
CheckDepends.dependencyInstalled('php', 'Sorry, this script requires the PHP CLI');
CheckDepends.dependencyInstalled('wp', 'Sorry, this script requires the WP-CLI');
const answers = await InquirerCli.performPromptsTasks(await getProjectOptions()).catch((err) => console.error(err));
this.whereAmI = await PathUtils.whereAmI();
this.isDebugFullMode = await DebugUtils.isDebugFullMode();
await this.downloadWPCoreCode();
const config = await this.scaffoldFiles(answers);
await this.installWPCoreDB(answers);
await this.installGit();
await MessagingUtils.displayColoredMessage(`Your ${config['project-name']} project has been scaffold.`);
}
catch (err) {
console.log('ScaffoldProject.initializeScaffolding()');
console.error(err);
}
};
static downloadWPCoreCode = async () => {
try {
if (this.isDebugFullMode) {
shell.exec(`wp core download --path=${process.env.WORDPRESS_PATH}`);
}
else {
shell.exec('wp core download');
}
}
catch (err) {
console.log('ScaffoldProject.downloadWPCoreCode()');
console.error(err);
}
};
static installWPCoreDB = async (answers) => {
try {
let installCommand = `--url="${answers?.siteUrl}" --title="${answers?.siteTitle}" --admin_user="${answers?.siteAdminUser}" --admin_password="${answers?.siteAdminPassword}" --admin_email="${answers?.adminEmail}" --skip-email`;
if (this.isDebugFullMode) {
installCommand += ` --path="${process.env.WORDPRESS_PATH}"`;
}
if (answers?.databaseSetup) {
shell.exec(`wp core install ${installCommand}`);
}
}
catch (err) {
console.log('ScaffoldProject.installWPCoreDB()');
console.error(err);
}
};
static installGit = async () => {
try {
if (CheckDepends.dependencyInstalled('git', '', false) && !fs.existsSync('.git')) {
if (!this.isDebugFullMode) {
shell.exec('git init');
}
}
}
catch (err) {
console.log('ScaffoldProject.installGit()');
console.error(err);
}
};
static scaffoldFiles = async (answers) => {
try {
const filePath = `${this.whereAmI}/internal/project/project-config.json`;
await updateInternalJson(filePath, answers);
const config = await updateInternalJson(filePath, {
'absolute-project-folder': this.whereAmI,
});
let salts = await RestUtils.apiGetText('https://api.wordpress.org/secret-key/1.1/salt/');
await scaffoldProject(answers, config, salts);
return config;
}
catch (err) {
console.log('ScaffoldProject.scaffoldFiles()');
console.error(err);
}
};
}
ScaffoldProject.initializeScaffolding().catch(err => console.error(err));