coralite-scripts
Version:
Configuration and scripts for Create Coralite.
69 lines (54 loc) • 2.22 kB
JavaScript
import loadConfig from '../libs/load-config.js'
import { Command, Argument } from 'commander'
import server from '../libs/server.js'
import colours from 'kleur'
import buildHTML from '../libs/build-html.js'
import pkg from '../package.json' with { type: 'json'}
import buildSass from '../libs/build-sass.js'
import { join } from 'node:path'
import { toMS, toTime } from '../libs/build-utils.js'
// remove all Node warnings before doing anything else
process.removeAllListeners('warning')
const program = new Command()
program
.name('Coralite scripts')
.description(pkg.description)
.version(pkg.version)
.addArgument(new Argument('<mode>', 'Run mode: dev (development server) or build (production compilation)').choices(['dev', 'build']).default('dev'))
.option('-v --verbose', 'Enable verbose logging output')
program.parse(process.argv)
program.on('error', (err) => {
console.error(err)
})
const options = program.opts()
const mode = program.args[0]
const config = await loadConfig()
if (mode === 'dev') {
await server(config, options)
} else if (mode === 'build') {
const start = process.hrtime()
const PAD = ' '
const border = '─'.repeat(Math.min(process.stdout.columns, 36) / 2)
// log the response time and status code
process.stdout.write('\n' + PAD + colours.yellow('Compiling Coralite... \n\n'))
process.stdout.write(border + colours.inverse(` LOGS `) + border + '\n\n')
const documents = await buildHTML(config)
const dash = colours.gray(' ─ ')
for (let i = 0; i < documents.length; i++) {
const document = documents[i]
process.stdout.write(toTime() + toMS(document.duration) + dash + document.item.path.pathname + '\n')
}
if (config.styles && (config.styles.type === 'sass' || config.styles.type === 'scss')) {
const results = await buildSass({
input: config.styles.input,
options: config.sassOptions,
output: join(config.output, 'css'),
start
})
for (let i = 0; i < results.length; i++) {
const result = results[i]
process.stdout.write(toTime() + toMS(result.duration) + dash + result.output + '\n')
}
}
}