mili
Version:
vue + koa isomorphic boilerplate
67 lines (54 loc) • 1.75 kB
JavaScript
const fs = require('fs')
const { extname, basename } = require('path')
const { promisify } = require('util')
const readFile = promisify(fs.readFile)
const writeFile = promisify(fs.writeFile)
const commentator = [
{
filenames: [],
extnames: ['.js', '.ts'],
create: (upgrade) => ([
`// mili upgrade type: ${upgrade}`,
].join('\n')),
},
{
filenames: [],
// extnames: ['.md'],
extnames: [],
create: (upgrade) => ([
`<!-- mili upgrade type: ${upgrade} -->`,
].join('\n')),
},
{
filenames: ['.gitignore', '.npmrc'],
extnames: ['.yml', '.yaml'],
create: (upgrade) => ([
`# mili upgrade type: ${upgrade}`,
].join('\n')),
},
]
const appendFileHeader = file => {
const ext = extname(file.targetPath)
const filename = basename(file.targetPath)
const cm = commentator.find(handler => (
handler.extnames.includes(ext) || handler.filenames.includes(filename)
))
if (!cm) return file
if (file.upgrade === 'cover') {
const comment = cm.create(file.upgrade, 'This file will be cover when upgrade template')
return { ...file, content: `${comment}\n${file.content}` }
} else if (file.upgrade === 'merge') {
const comment = cm.create(file.upgrade, 'This file will be merge when upgrade template')
return { ...file, content: `${comment}\n${file.content}` }
}
return file
}
module.exports = async ({ upgrade, path, view , handlers, encoding, targetPath }, root) => {
const content = await readFile(path, encoding)
let file = handlers.reduce(
(file, handler) => handler.genFile(file),
{ path, view, content, upgrade, encoding, targetPath }
)
file = appendFileHeader(file)
await writeFile(targetPath, file.content, encoding)
}