@modyo/widget
Version:
is a widget boilerplater
110 lines (104 loc) • 2.86 kB
JavaScript
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)
}
}