bbc/speculate

View on GitHub
bin/speculate.js

Summary

Maintainability
A
0 mins
Test Coverage
#! /usr/bin/env node
'use strict';

const path = require('path');
const program = require('commander');

const validator = require('../lib/validator');
const generate = require('../lib/generate');
const clean = require('../lib/clean');
const commandPkg = require('../package');

const cwd = process.cwd();
const isValid = validator(cwd);

if (!isValid) {
  // eslint-disable-next-line no-console
  console.error('Please run speculate from within a valid Node.js project');
  process.exit(1);
}

const projectPkg = require(path.resolve(cwd, './package.json'));

program
  .version(commandPkg.version)
  .option('-r --release <release>', 'Specify release number of package')
  .option('-n --name <name>', 'Specify custom name for package')
  .parse(process.argv);

const options = program.opts();

// Commander has a magic property called name when not overridden by a parameter
const name = options.name instanceof Function ? undefined : options.name;

async function runTasks() {
  clean(cwd, projectPkg);

  try {
    const files = await generate(cwd, projectPkg, options.release, name);
    files.forEach((file) => {
      // eslint-disable-next-line no-console
      console.log('Created ./%s', file);
    });
    process.exit(0);
  } catch (err) {
    // eslint-disable-next-line no-console
    console.error('Error:', err.message);
    process.exit(1);
  }
}

runTasks();