tin-react-components
Version:
All components used for Omadi apps
100 lines (85 loc) • 2.68 kB
JavaScript
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()