firescript
Version:
Firescript language
106 lines (89 loc) • 3.27 kB
JavaScript
const path = require('path')
const colorfy = require('colorfy')
const { Command } = require('supercmd')
const FirescriptBuilder = require('firescript-builder').FirescriptBuilder
const FirescriptConfig = require('firescript-config').FirescriptConfig
const FirescriptParserLib = require('firescript-parser')
const FirescriptTranspilerLib = require('firescript-transpiler')
const pkg = require('../package.json')
const command = new Command()
module.exports.command = command
command
.cmd('build [src?] [dest?]')
.option('-v, --verbose', 'Verbose log')
.description('Build project')
.action(async (ctx, src, dest) => {
try {
const config = new FirescriptConfig({
build: {
srcDir: src,
destDir: dest
}
})
const buildConf = config.getConfig('build')
const builder = new FirescriptBuilder({
srcDir: buildConf.srcDir,
destDir: buildConf.destDir,
features: config.getConfig('features'),
Parser: FirescriptParserLib.FirescriptParser,
Transpiler: FirescriptTranspilerLib.JavascriptTranspiler
})
const cf = colorfy()
cf.txt('Firescript: ')
.yellow(`v${pkg.version}`)
.print()
if (ctx.verbose) {
cf.lgrey('Parser: ')
.grey(`v${FirescriptParserLib.version()}`)
.print()
cf.lgrey('Transpiler: ')
.grey(`v${FirescriptTranspilerLib.version()}`)
.print()
cf.nl().grey('Build source files:').nl()
.txt('srcDir: ').grey(buildConf.srcDir).nl()
.txt('destDir: ').grey(buildConf.destDir).nl().print()
}
const buildFiles = await builder.build()
for (const fl of buildFiles) {
cf.yellow('Build: ')
.grey(path.relative(process.cwd(), fl.sourceFile))
.txt(' to ')
.grey(path.relative(process.cwd(), fl.destFile.path))
.print()
}
if (buildConf.binDir) {
const destDir = path.join(buildConf.destDir, path.relative(process.cwd(), path.resolve(process.cwd(), buildConf.binDir)))
if (ctx.verbose) {
cf.grey('Build bin files:').nl()
.txt('binDir: ').grey(buildConf.binDir).nl()
.txt('destDir: ').grey(destDir).nl().print()
}
const buildBinFiles = await builder.build(buildConf.binDir, destDir)
for (const fl of buildBinFiles) {
cf.yellow('Build: ')
.grey(path.relative(process.cwd(), fl.sourceFile))
.txt(' to ')
.grey(path.relative(process.cwd(), fl.destFile.path))
.print()
}
}
if (ctx.verbose) {
cf.grey('Copy source files:').nl()
.txt('copyFiles: ').grey(JSON.stringify(buildConf.copyFiles, null, ' ')).print()
}
const copyFiles = await builder.copy(buildConf.copyFiles)
for (const fl of copyFiles) {
cf.ored('Copy: ')
.grey(path.relative(process.cwd(), fl.path))
.txt(' to ')
.grey(path.join(buildConf.destDir, fl.relative))
.print()
}
await builder.setPkgFlags({
firescript: pkg.version
})
} catch (err) {
console.log(ctx.verbose ? err.stack : err.toString())
process.exit(1)
}
})