UNPKG

@pega/custom-dx-components

Version:

Utility for building custom UI components

259 lines (195 loc) 7.7 kB
import fs from 'fs'; import path from 'path'; import { join } from 'path'; import inquirer from 'inquirer'; import chalk from 'chalk'; import { showVersion, getServerType, setServerType, getSubComponents, deleteLocalComponent, checkPathAccess, getComponents, getLibraryBasedCL, setLibraryBasedCL, forceDefaultsUpdate } from '../../util.js'; import createAll from '../create-all/index.js'; import create from '../create/index.js'; import createLib from '../create-lib/index.js'; import deleteLib from '../delete-lib/index.js'; import { JEST_ASSETS_ORIGINAL_PATH, JEST_ASSETS_LIBRARY_PATH, JEST_CREATE_PATH, JEST_CREATE_ALL_CONSTELLATION_PATH, JEST_CREATE_ALL_LAUNCHPAD_PATH, TASKS_CONFIG_JSON_FILENAME, COMPONENTS_DIRECTORY_PATH } from '../../constants.js'; const getBuildAssetsQuestions = async () => { const message = '\n**IMPORTANT** Building Jest Assets will remove any local components in your /src/components directory\n\t and will also delete ALL local archives in your /store and is not reversible!!\n'; console.log(`${chalk.yellow.bold(message)}`); return [ { name: 'buildAssets', type: 'confirm', message: 'Generate Jest Assets ?', default: false } ]; }; const deleteTestComponent = async (path, componentKey) => { const directory = join(path, componentKey); try { fs.rmSync(directory, { recursive: true }); console.log(`${chalk.red.bold(componentKey)} is deleted from assets`); } catch (err) { console.log('no file'); throw new Error(`No such file ${componentKey}`); } }; const copyAssets = async destinationPath => { const currentDirectory = process.cwd(); const pegaConfigJsonPath = join(currentDirectory, TASKS_CONFIG_JSON_FILENAME); await checkPathAccess(pegaConfigJsonPath); let data = fs.readFileSync(pegaConfigJsonPath, { encoding: 'utf8' }); data = JSON.parse(data); if (!data[COMPONENTS_DIRECTORY_PATH]) { console.error(`${chalk.red.bold('ERROR')} Could not able find components directory path in config.json`); process.exit(1); } const srcDir = join(currentDirectory, data[COMPONENTS_DIRECTORY_PATH]); fs.cpSync(srcDir, destinationPath, { recursive: true }); }; const deleteAssets = async () => { const currentDirectory = process.cwd(); const pegaConfigJsonPath = join(currentDirectory, TASKS_CONFIG_JSON_FILENAME); await checkPathAccess(pegaConfigJsonPath); let data = fs.readFileSync(pegaConfigJsonPath, { encoding: 'utf8' }); data = JSON.parse(data); if (!data[COMPONENTS_DIRECTORY_PATH]) { console.error(`${chalk.red.bold('ERROR')} Could not able find components directory path in config.json`); process.exit(1); } const localComponents = await getComponents(); for (const index in localComponents) { const componentToDelete = localComponents[index]; // console.log(chalk.bold.green("Deleting: " + componentToDelete)); const directory = join(currentDirectory, data[COMPONENTS_DIRECTORY_PATH], componentToDelete); try { fs.rmSync(directory, { recursive: true }); console.log(`${chalk.red.bold(componentToDelete)} is deleted from Local`); } catch (err) { console.log('no file'); throw new Error(`No such file ${componentToDelete}`); } } // delete the store }; const createJestOriginalAssets = async (isLaunchPad = false) => { // initially delete local assets await deleteAssets(); // const framework = await getFramework(); let args = ['', '', '', 'My', '0.0.1', 'DXIL', 'Pega']; let myOptions = {}; myOptions['params'] = args; await createAll(myOptions); const jestCreateAllPath = isLaunchPad ? JEST_CREATE_ALL_LAUNCHPAD_PATH : JEST_CREATE_ALL_CONSTELLATION_PATH; // goto Constellation // get current test assets and delete them let createAllPath = path.join(path.resolve(), JEST_ASSETS_ORIGINAL_PATH, jestCreateAllPath); const fileList = await getSubComponents(createAllPath, ''); for (const index in fileList) { const componentToDelete = fileList[index]; // console.log(chalk.bold.green("Deleting: " + componentToDelete)); await deleteTestComponent(createAllPath, componentToDelete); } await copyAssets(createAllPath); await deleteAssets(); args = ['', '', '', 'Field', 'Text', 'MyTestText', 'My Test Text', '0.0.1', 'DXIL', 'My Test Text Description', 'Pega']; myOptions = {}; myOptions['params'] = args; await create(myOptions); let createPath = path.join(path.resolve(), JEST_ASSETS_ORIGINAL_PATH, JEST_CREATE_PATH); const myFileList = await getSubComponents(createPath, ''); for (const index in myFileList) { const componentToDelete = myFileList[index]; // console.log(chalk.bold.green("Deleting: " + componentToDelete)); await deleteTestComponent(createPath, componentToDelete); } await copyAssets(createPath); await deleteAssets(); }; const createJestLibraryAssets = async (isLaunchPad = false) => { // initially delete local assets await deleteAssets(); let args = ['', '', '', 'DXIL', '0.0.1', 'N', 'Original']; let myOptions = {}; myOptions['params'] = args; await createLib(myOptions); // const framework = await getFramework(); args = ['', '', '', 'My', '0.0.1', 'DXIL', 'Pega']; myOptions = {}; myOptions['params'] = args; await createAll(myOptions); const jestCreateAllPath = isLaunchPad ? JEST_CREATE_ALL_LAUNCHPAD_PATH : JEST_CREATE_ALL_CONSTELLATION_PATH; // goto Constellation // get current test assets and delete them let createAllPath = path.join(path.resolve(), JEST_ASSETS_LIBRARY_PATH, jestCreateAllPath); const fileList = await getSubComponents(createAllPath, ''); for (const index in fileList) { const componentToDelete = fileList[index]; // console.log(chalk.bold.green("Deleting: " + componentToDelete)); await deleteTestComponent(createAllPath, componentToDelete); } await copyAssets(createAllPath); await deleteAssets(); args = ['', '', '', 'Field', 'Text', 'MyTestText', 'My Test Text', '0.0.1', 'DXIL', 'My Test Text Description', 'Pega']; myOptions = {}; myOptions['params'] = args; await create(myOptions); let createPath = path.join(path.resolve(), JEST_ASSETS_LIBRARY_PATH, JEST_CREATE_PATH); const myFileList = await getSubComponents(createPath, ''); for (const index in myFileList) { const componentToDelete = myFileList[index]; // console.log(chalk.bold.green("Deleting: " + componentToDelete)); await deleteTestComponent(createPath, componentToDelete); } await copyAssets(createPath); await deleteAssets(); args = ['', '', '', 'Pega_DXIL', '0.0.1-dev', 'Y']; myOptions = {}; myOptions['params'] = args; await deleteLib(myOptions); }; export default async options => { await showVersion(); const questions = await getBuildAssetsQuestions(); const answers = await inquirer.prompt(questions); const { buildAssets } = answers; if (buildAssets) { // get current server type const savedServerType = await getServerType(); const savedLibraryBasedCL = getLibraryBasedCL(); await setLibraryBasedCL(false); // Constellation await setServerType('infinity'); await createJestOriginalAssets(false); // Launchpad await setServerType('launchpad'); await createJestOriginalAssets(true); // Constellation Library await setLibraryBasedCL(true); await setServerType('infinity'); await createJestLibraryAssets(false); // Launchpad // await setServerType("launchpad"); // await createJestLibraryAssets(true); // restore serverType await setServerType(savedServerType); await setLibraryBasedCL(savedLibraryBasedCL); } };