@saiforceone/dirt-cli
Version:
Official CLI Utility for the D.I.R.T stack
119 lines • 5.78 kB
JavaScript
// Core dependencies
import os from 'node:os';
// 3rd-party dependencies
import { execaCommand } from 'execa';
import { standardOutputBuilder } from './utils/standardOutputBuilder.js';
import ConsoleLogger from './utils/ConsoleLogger.js';
import { updateNPMAttribs, writeProjectConfig } from './utils/feUtils.js';
import { copyFrontendResources, copyFrontendStaticResources, copyFrontendStorybookFiles, installCoreFrontendDependencies, installStorybookDependencies, updateNPMScriptsForStorybook, } from './utils/frontendUtils.js';
import { FRONTEND_PATHS } from './constants/feConstants.js';
import { updateNPMScriptsWin32 } from './helpers/shared/win32FEHelpers.js';
export async function scaffoldFrontend(options) {
const output = standardOutputBuilder();
const { verboseLogs: useVerboseLogs } = options;
const destination = process.cwd();
// if not in the correct directory, then change
// process.chdir(destination);
if (useVerboseLogs) {
ConsoleLogger.printMessage(`Preparing to scaffold ${options.frontend} Frontend...`);
ConsoleLogger.printMessage('Writing project configuration files...');
}
const projectConfigResults = await writeProjectConfig(options, destination);
if (!projectConfigResults.success) {
return projectConfigResults;
}
if (useVerboseLogs) {
ConsoleLogger.printMessage('Done', 'success');
ConsoleLogger.printMessage('Initializing NPM...');
}
try {
await execaCommand('npm init -y');
}
catch (e) {
if (useVerboseLogs)
ConsoleLogger.printMessage(`Failed to initialize NPM with error: ${e.toString()}`, 'error');
output.result = e.toString();
return output;
}
const copyFrontendFilesResults = await copyFrontendResources(FRONTEND_PATHS[options.frontend].TEMPLATES_PATH, destination);
if (useVerboseLogs)
ConsoleLogger.printMessage(copyFrontendFilesResults.error
? copyFrontendFilesResults.error
: copyFrontendFilesResults.result, copyFrontendFilesResults.success ? 'success' : 'error');
if (!copyFrontendFilesResults.success) {
return copyFrontendFilesResults;
}
const copyFrontendStaticResults = await copyFrontendStaticResources(FRONTEND_PATHS[options.frontend].STATIC_TEMPLATES_PATH, destination);
if (useVerboseLogs)
ConsoleLogger.printMessage(copyFrontendStaticResults.error
? copyFrontendStaticResults.error
: copyFrontendStaticResults.result, copyFrontendStaticResults.success ? 'success' : 'error');
// update package.json attributes: name, description
if (useVerboseLogs)
ConsoleLogger.printMessage('Updating package.json file...');
const updateNPMBaseResults = await updateNPMAttribs(options, destination);
if (!updateNPMBaseResults.success)
return updateNPMBaseResults;
if (useVerboseLogs)
ConsoleLogger.printMessage(updateNPMBaseResults.result, 'success');
if (useVerboseLogs)
ConsoleLogger.printMessage(`Installing core D.I.R.T Stack ${options.frontend} dependencies...`);
const installFrontendDependenciesResults = await installCoreFrontendDependencies();
if (!installFrontendDependenciesResults.success) {
if (useVerboseLogs)
ConsoleLogger.printMessage(installFrontendDependenciesResults.error
? installFrontendDependenciesResults.error
: 'Install Error', 'error');
return output;
}
if (useVerboseLogs)
ConsoleLogger.printMessage(`Dependencies installed`, 'success');
if (os.platform() === 'win32') {
// update package json file for windows
if (useVerboseLogs)
ConsoleLogger.printMessage('Updating NPM Scripts (dirt-dev)...');
const updateNpmScriptResult = await updateNPMScriptsWin32(destination);
if (useVerboseLogs)
ConsoleLogger.printOutput(updateNpmScriptResult);
if (!updateNpmScriptResult.success)
return updateNpmScriptResult;
}
if (options['withStorybook']) {
if (useVerboseLogs)
ConsoleLogger.printMessage('Setting up Storybook...');
// copy storybook files
const sbFileCopyResults = await copyFrontendStorybookFiles({
destinationBase: destination,
frontend: options.frontend,
storySource: FRONTEND_PATHS[options.frontend].STORY_BOOK_STORIES_PATH,
templateSource: FRONTEND_PATHS[options.frontend].STORY_BOOK_TEMPLATES_PATH,
});
if (!sbFileCopyResults.success) {
return sbFileCopyResults;
}
if (useVerboseLogs)
ConsoleLogger.printMessage('Storybook files copied', 'success');
// install storybook deps
if (useVerboseLogs)
ConsoleLogger.printMessage('Installing Storybook dependencies...');
const sbInstallDepResults = await installStorybookDependencies(options.frontend);
if (!sbInstallDepResults.success) {
return sbInstallDepResults;
}
if (useVerboseLogs)
ConsoleLogger.printMessage('Storybook dependencies installed', 'success');
// update the scripts in package.json
if (useVerboseLogs)
ConsoleLogger.printMessage('Updating NPM scripts for Storybook...');
const sbUpdatePkgResults = await updateNPMScriptsForStorybook(destination);
if (!sbUpdatePkgResults.success) {
return sbUpdatePkgResults;
}
if (useVerboseLogs)
ConsoleLogger.printMessage('Updated NPM scripts', 'success');
}
output.result = `${options.frontend} Application Scaffolded...`;
output.success = true;
return output;
}
//# sourceMappingURL=scaffoldFrontend.js.map