UNPKG

@nomadmystic/wordpress-scaffold-cli

Version:

This project is created to speed up WordPress development

122 lines (102 loc) 3.79 kB
// Core modules import fs from 'fs'; import path from 'path'; // Community modules import fse from 'fs-extra'; import colors from 'colors'; // Package Modules // Root import { packageRootDir } from '../../utils/package-root.js'; // Functions import { updateScaffoldFile } from '../common/update-scaffold-file.js'; // Interfaces import ScaffoldJsonUpdates from '../../interfaces/common/interface-scaffold-json-updates.js'; import ThemeAnswerValues from '../../interfaces/theme/interface-theme-answer-values.js'; /** * @description Based on user input scaffold our theme * * @param {object} values * @param {string} values.themeName * @param {string} values.themesPath * @param {string} values.finalPath * @param {string} values.themeDescription * @param {boolean} values.addFrontEndBuildTools ? * @param {string} values.frontEndFramework * @param {string} values.safeThemeName * @param {string} values.capAndSnakeCaseTheme * * @return {Promise<void>} */ const scaffoldTheme = async (values: ThemeAnswerValues): Promise<void> => { try { let { name, themesPath, finalPath, themeDescription, frontEndFramework, safeThemeName, capAndSnakeCaseTheme, } = values; const newThemePathString: string = finalPath ? finalPath : ''; // Bail early if (fs.existsSync(newThemePathString)) { console.log(colors.red('There is already a theme with that name. Please use another name.')); process.exit(0); } // Copy our files over to the themes folder fse.copySync(`${path.join(`${packageRootDir}/scaffolding/theme`)}`, newThemePathString, { overwrite: false }); // Copy our files over the JS files into the theme fse.copySync(`${path.join(`${packageRootDir}/scaffolding/theme-root/front-end-scaffolding/${frontEndFramework?.toLowerCase()}/js`)}`, `${newThemePathString}/src/js`, { overwrite: false } ); // Copy our files over the theme root files into the theme fse.copySync(`${path.join(`${packageRootDir}/scaffolding/theme-root/front-end-scaffolding/${frontEndFramework?.toLowerCase()}/theme-root`)}`, newThemePathString, { overwrite: false } ); // Our updates const updateObjectsArray: Array<ScaffoldJsonUpdates> = [ { fileName: 'functions.php', stringToUpdate: 'THEME_NAME', updateString: capAndSnakeCaseTheme, }, { fileName: 'style.css', stringToUpdate: 'THEME_VALUE', updateString: safeThemeName, }, { fileName: 'style.css', stringToUpdate: 'THEME_NAME', updateString: name, }, { fileName: 'style.css', stringToUpdate: 'THEME_DESCRIPTION', updateString: themeDescription, }, ]; // Update our files based on object properties for (let update: number = 0; update < updateObjectsArray.length; update++) { if (updateObjectsArray[update] && typeof updateObjectsArray[update] !== 'undefined') { updateScaffoldFile( finalPath, updateObjectsArray[update].fileName, updateObjectsArray[update].stringToUpdate, updateObjectsArray[update].updateString, ); } } } catch (err) { console.log('scaffoldTheme()'); console.error(err); } }; export default scaffoldTheme;