1
0
Fork 0
freesewing/packages/create-freesewing-pattern/lib/cli.js
2019-05-02 12:40:03 +02:00

94 lines
2.5 KiB
JavaScript
Executable file

#!/usr/bin/env node
"use strict";
const path = require("path");
const chalk = require("chalk");
const program = require("commander");
const { version } = require("../package");
const getDefaultLibraryParams = require("./get-default-library-params");
const createLibrary = require("./create-library");
const promptLibraryParams = require("./prompt-library-params");
module.exports = async () => {
const defaults = await getDefaultLibraryParams();
program
.name("create-freesewing-pattern")
.version(version)
.usage("[options] [package-name]")
.option("-d, --desc <string>", "package description")
.option("-a, --author <string>", "author's github handle", defaults.author)
.option("-l, --license <string>", "package license", defaults.license)
.option("-r, --repo <string>", "package repo path")
.option("-g, --no-git", "generate without git init")
.option(
"-m, --manager <npm|yarn>",
"package manager to use",
/^(npm|yarn)$/,
defaults.manager
)
.option(
"-t, --template <default|custom>",
"package template to use",
/^(default|custom)$/,
defaults.template
)
.option("-p, --template-path <string>", "custom package template path")
.option(
"-s, --skip-prompts",
"skip all prompts (must provide package-name via cli)"
)
.parse(process.argv);
const opts = {
description: program.desc,
author: program.author,
license: program.license,
repo: program.repo,
manager: program.manager,
template: program.template,
templatePath: program.templatePath,
skipPrompts: program.skipPrompts,
git: program.git
};
Object.keys(opts).forEach(key => {
if (!opts[key] && defaults[key]) {
opts[key] = defaults[key];
}
});
if (program.args.length === 1) {
opts.name = program.args[0];
} else if (program.args.length > 1) {
console.error("invalid arguments");
program.help();
process.exit(1);
}
const params = await promptLibraryParams(opts);
const dest = await createLibrary(params);
console.log(`
Your pattern skeleton has been created at ${dest}.
Before you start hacking, run these two commands, each in their own terminal:
In one terminal, start the rollup bundler in watch mode:
$ ${chalk.cyan(`cd ${params.shortName} && ${params.manager} start`)}
And in another terminal, run the dev server:
$ ${chalk.cyan(
`cd ${path.join(params.shortName, "example")} && ${params.manager} start`
)}
`);
return dest;
};
module.exports().catch(err => {
console.error(err);
process.exit(1);
});