@compositor/gen
Version:
Compositor JSX static site generator
99 lines (88 loc) • 1.96 kB
JavaScript
#!/usr/bin/env node
const path = require('path')
const meow = require('meow')
const open = require('opn')
const chalk = require('chalk')
const readPkgUp = require('read-pkg-up')
const dot = require('dot-prop')
const pkg = require('../package.json')
require('update-notifier')({ pkg }).notify()
const {
getData,
render,
writePages,
server,
} = require('../lib')
const log = (...msgs) => {
console.log(
chalk.black.bgCyan(' gen '),
chalk.cyan(...msgs)
)
}
const cli = meow(`
Usage:
$ gen dirname
Options:
--out-dir, -d Output directory
--dev, -D Start development server
--port, -p Set port for development server
--open, -o Open development server in default browser
`, {
flags: {
outDir: {
type: 'string',
alias: 'd'
},
dev: {
type: 'boolean',
alias: 'D'
},
port: {
type: 'string',
alias: 'p'
},
open: {
type: 'boolean',
alias: 'o'
}
}
})
const [
dirname = process.cwd()
] = cli.input
const userPkg = readPkgUp.sync(dirname) || {}
const opts = Object.assign({}, dot.get(userPkg, 'pkg.gen'), cli.flags, {
outDir: path.join(process.cwd(), cli.flags.outDir || '')
})
const create = async (dirname, opts) => {
const data = await getData(dirname, opts)
const pages = await render(data, opts)
const result = await writePages(pages, opts)
return result
}
log('@compositor/gen')
if (opts.dev) {
log('starting dev server')
server(dirname, opts)
.then(srv => {
const { port } = srv.address() || {}
log(`listening on port: ${port}`)
const url = `http://localhost:${port}`
if (opts.open) {
open(url)
}
})
.catch(err => {
log('error', err)
process.exit(1)
})
} else {
create(dirname, opts)
.then(result => {
log('files saved to', dirname)
})
.catch(err => {
log('error', err)
process.exit(1)
})
}