UNPKG

@modyo/widget

Version:

is a widget boilerplater

110 lines (104 loc) 2.86 kB
import path from 'path' import Listr from 'listr' import { projectInstall } from 'pkg-install' import chalk from 'chalk' import tmp from 'tmp' import { move, mkdir, exists, removeDir } from './helpers/fs-helpers' import { promptForMissingOptions, cloneRepo } from './helpers' const crateDirectoryForNewWidget = async ({ directory, widgetName }) => { if (directory) { if (exists(path.resolve(directory))) { throw new Error('Directory Exist please change name') } mkdir(path.resolve(directory)) } else { if (exists(path.resolve(widgetName))) { throw new Error('Directory Exist please change name with argument -d <name>') } mkdir(path.resolve(widgetName)) } } const forkWidget = async (options) => { if (options.directory) { return move(path.resolve(options.tempGitPath, options.widgetCategory, options.widgetName), path.resolve(options.directory)) } return move(path.resolve(options.tempGitPath, options.widgetCategory, options.widgetName), path.resolve(options.widgetName)) } const cleanUnusedCode = (options) => removeDir(path.resolve(options.tempObj.name)) const installDependencies = async (options) => { if (options.directory) { return projectInstall({ cwd: path.resolve(options.directory), prefer: 'yarn' }, { verbose: true }) } return projectInstall({ cwd: path.resolve(options.widgetName), prefer: 'yarn' }, { PackageManagerFlagConfig: { verbose: true }, verbose: true }) } module.exports = async (args) => { let widgetCategory let widgetName if (args.widgetId) { [widgetCategory, widgetName] = args.widgetId.split('/') } else { [widgetCategory, widgetName] = ['', ''] } const tempObj = tmp.dirSync() const tempGitPath = `${tempObj.name}/financial-widgets` let newOptions = Object.assign(args, { widgetCategory, widgetName, tempGitPath, tempObj }) let tasks = new Listr([ { title: 'Cloning data from main widget Repository', task: () => cloneRepo(newOptions) } ], { renderer: 'verbose' }) try { await tasks.run() } catch (e) { // eslint-disable-next-line no-console console.log(chalk.bgRedBright.black(e)) } newOptions = await promptForMissingOptions(newOptions) tasks = new Listr([ { title: 'Creating New Directory', task: () => crateDirectoryForNewWidget(newOptions) }, { title: 'Forking Widget to new folder', task: () => forkWidget(newOptions) }, { title: 'Remove temp', task: () => cleanUnusedCode(newOptions) }, { title: 'Installing dependencies this can take some minutes to complete', task: () => installDependencies(newOptions) } ], { renderer: 'silent' }) try { await tasks.run() } catch (e) { chalk.bgRedBright.black(e) } }