the-scaffold
Version:
Scaffold for the-projects
100 lines (93 loc) • 2.91 kB
JavaScript
/**
* Tmplify prototype.
*/
process.chdir(`${__dirname}/..`)
const path = require('path')
const fs = require('fs')
const co = require('co')
const apeTasking = require('ape-tasking')
const filemode = require('filemode')
const tmplconv = require('tmplconv')
const demos = require('../demos')
let prefix = '~~~~'
let suffix = '~~~~'
apeTasking.runTasks('tmplify', [
() => co(function * () {
for (let type of Object.keys(demos)) {
let demoName = demos[ type ]
let demoDir = path.dirname(require.resolve(`${demoName}/package.json`))
let demoPkg = require(`${demoName}/package.json`)
let tmplDir = `assets/tmpl/${type}`
yield tmplconv.tmplify(demoDir, tmplDir, {
clean: true,
mode: '444',
pattern: [
'**/*.*',
'.*',
'+(bin|doc|docs|ui|src|lib|test)/**/.*.bud',
'+(bin|doc|docs|ui|src|lib|test)/**/.*.hbs'
],
ignore: [
'.DS_Store',
'.svg',
'ci/demo.js',
'node_modules/**/*.*',
'**/*.map'
],
data: Object.assign({
'github_repository': demoPkg.repository.url.split(/\//g).slice(-2).join('/').replace(/\.git$/, ''),
'package_name': demoPkg.name,
'package_description': demoPkg.description,
'author_name': demoPkg.author.name,
'author_email': demoPkg.author.email,
'author_url': demoPkg.author.url
}, require('../lib/data')[ type ] || {}),
prefix,
suffix
})
yield tmplconv.tmplify(`${__dirname}/..`, tmplDir, {
pattern: [
'.gitignore'
],
prefix,
suffix
})
// Modify package.json
{
let filename = `${tmplDir}/package.json.tmpl`
let str = fs.readFileSync(filename).toString()
let pkg = JSON.parse(str)
fs.chmodSync(filename, '644')
let newPkg = {
name: pkg.name,
version: '1.0.0',
description: pkg.description,
main: pkg.main,
browser: pkg.browser,
bin: pkg.bin,
scripts: pkg.scripts,
repository: pkg.repository.url.split(/\//g).slice(-1).join('/').replace(/\.git$/, ''),
keywords: pkg.keywords,
author: pkg.author,
license: pkg.license,
bugs: pkg.bugs,
homepage: pkg.homepage,
dependencies: pkg.dependencies,
devDependencies: pkg.devDependencies,
peerDependencies: pkg.peerDependencies,
engines: pkg.engines,
publishConfig: pkg.publishConfig
}
for (let name of Object.keys(newPkg)) {
if (!newPkg[ name ]) {
delete newPkg[ name ]
}
}
fs.writeFileSync(filename, JSON.stringify(newPkg, null, 2))
yield filemode(filename, '444')
}
}
})
], true)