UNPKG

utquidem

Version:

The meta-framework suite designed from scratch for frontend-focused modern web development.

151 lines (123 loc) 3.39 kB
import path from 'path'; import { CodeSmith, Logger } from '@modern-js/codesmith'; import { i18n, localeKeys } from './locale'; import { getLocaleLanguage, createDir } from './utils'; interface Options { mwa?: boolean; module: boolean; monorepo?: boolean; debug?: boolean; config?: string; registry?: string; distTag?: string; plugin?: string[]; } type RunnerTask = Array<{ name: string; config: Record<string, any>; }>; const REPO_GENERAROE = '@modern-js/repo-generator'; // const GENERATOR_PLUGIN = '@modern-js/generator-plugin-plugin'; function getDefaultConfing( projectDir: string = path.basename(process.cwd()), options: Options, logger: Logger, ) { const { mwa, module, monorepo, config, registry, distTag, plugin } = options; let initialConfig: Record<string, unknown> = {}; try { if (config) { initialConfig = JSON.parse(config); } } catch (e) { logger.error('config parameter format is incorrect'); logger.debug('parse initial config error: ', e); // eslint-disable-next-line no-process-exit process.exit(1); } if (!initialConfig.locale) { initialConfig.locale = getLocaleLanguage(); } if (mwa) { initialConfig.defaultSolution = 'mwa'; } if (module) { initialConfig.defaultSolution = 'module'; if (!initialConfig.packageName) { initialConfig.packageName = projectDir; } } if (monorepo) { initialConfig.defaultSolution = 'monorepo'; } if (registry) { initialConfig.registry = registry; } if (distTag) { initialConfig.distTag = distTag; } initialConfig.defaultBranch = initialConfig.defaultBranch || 'main'; if (plugin) { initialConfig.plugins = plugin; } // let generatorPlugin = GENERATOR_PLUGIN; // if (process.env.CODESMITH_ENV === 'development') { // generatorPlugin = path.join( // require.resolve(GENERATOR_PLUGIN), // '../../../../', // ); // } // initialConfig.plugins = [ // ...((initialConfig.plugins as string[]) || []), // generatorPlugin, // ]; return initialConfig; } export async function createAction(projectDir: string, options: Options) { const { debug, registry, distTag } = options; const smith = new CodeSmith({ debug, registryUrl: registry, }); smith.logger.debug('@modern-js/create', projectDir || '', options); let pwd = process.cwd(); try { pwd = projectDir ? createDir(projectDir, pwd) : pwd; } catch (e) { smith.logger.error( i18n.t(localeKeys.tooltip.dir_exists, { dirName: projectDir }), ); // eslint-disable-next-line no-process-exit process.exit(1); } const config = getDefaultConfing(projectDir, options, smith.logger); let generator = REPO_GENERAROE; if (process.env.CODESMITH_ENV === 'development') { generator = require.resolve(REPO_GENERAROE); } else if (distTag) { generator = `${REPO_GENERAROE}@${distTag}`; } const task: RunnerTask = [ { name: generator, config, }, ]; try { await smith.forge({ tasks: task.map(runner => ({ generator: runner.name, config: runner.config, })), pwd, }); } catch (e) { // eslint-disable-next-line no-process-exit process.exit(1); } if (projectDir) { smith.logger.info( i18n.t(localeKeys.tooltip.dir_entry, { dirName: projectDir }), ); } }