UNPKG

@nomadmystic/wordpress-scaffold-cli

Version:

This project is created to speed up WordPress development

96 lines (95 loc) 4.03 kB
#!/usr/bin/env node 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));