UNPKG

tin-react-components

Version:
100 lines (85 loc) 2.68 kB
const fs = require('fs') const mkdir = require('mkdirp') const templates = require('./templates') let name = process.argv[2] const author = process.argv[3] const { css, test, index } = templates if (!name) process.exit(1) const files = { css: css(name, author), index: index(name, author), test: test(name, author) } function createStep (func) { return (status) => new Promise((resolve, reject) => { if (status && !status.success) { reject(new Error('Process failed')) return } func(resolve, reject, status) }) } const step1 = createStep((resolve, reject) => { mkdir(`./src/${name}`, err => { if (err) console.log(err) && reject(err) resolve({ success: true }) }) }) const step2 = createStep((resolve, reject) => { fs.writeFile(`./src/${name}/index.js`, files.index, err => { if (err) console.log(err) && reject(err) resolve({ success: true }) }) }) const step3 = createStep((resolve, reject) => { fs.writeFile(`./src/${name}/style.css`, files.css, err => { if (err) console.log(err) && reject(err) resolve({ success: true }) }) }) const step4 = createStep((resolve, reject) => { mkdir(`./src/${name}/test`, err => { if (err) console.log(err) && reject(err) resolve({ success: true }) }) }) const step5 = createStep((resolve, reject) => { fs.writeFile(`./src/${name}/test/${name}.spec.js`, files.test, err => { if (err) console.log(err) && reject(err) resolve({ success: true }) }) }) const step6 = createStep((resolve, reject) => { fs.readdir('./src', (err, folders) => { if (err) console.log(err) && reject(err) resolve({ success: true, folders: folders.filter(f => !/^\./.test(f)) }) }) }) const step7 = createStep((resolve, reject, status) => { if (!status.folders || !status.folders.length) console.log('No folders found') && reject(new Error('No folders found')) const imports = status.folders.map(folder => { return `import _${folder} from './src/${folder}'` }) const exports = status.folders.map(folder => { return `export const ${folder} = _${folder}` }) const result = `import _docs from './docs.json' ${imports.join('\n')} export const docs = _docs ${exports.join('\n')}\n` fs.writeFile('index.js', result, err => { if (err) console.log(err) && reject(err) resolve({ success: true }) }) }) async function build () { const status1 = await step1() const status2 = await step2(status1) const status3 = await step3(status2) const status4 = await step4(status3) const status5 = await step5(status4) const status6 = await step6(status5) const status7 = await step7(status6) console.log(status7) } build()