105 lines
2.8 KiB
JavaScript
Executable file
105 lines
2.8 KiB
JavaScript
Executable file
#!/usr/bin/env node
|
|
"use strict";
|
|
|
|
const path = require("path");
|
|
const chalk = require("chalk");
|
|
const program = require("commander");
|
|
const strings = require("@freesewing/i18n").strings;
|
|
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,
|
|
version
|
|
};
|
|
|
|
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(`
|
|
🎉 ${strings[params.language]["cfp.patternCreated"]} ${chalk.bold(dest)}
|
|
|
|
${strings[params.language]["cfp.runTheseCommands"]}:
|
|
|
|
- ${strings[params.language]["cfp.startRollup"]}
|
|
|
|
👉 ${chalk.cyan(`cd ${params.shortName} && ${params.manager} start`)}
|
|
|
|
- ${strings[params.language]["cfp.startWebpack"]}
|
|
|
|
👉 ${chalk.cyan(
|
|
`cd ${path.join(params.shortName, "example")} && ${params.manager} start`
|
|
)}
|
|
|
|
|
|
${strings[params.language]["cfp.devDocsAvailableAt"]}
|
|
${chalk.bold("https://" + params.language + ".freesewing.dev/")}
|
|
|
|
${strings[params.language]["cfp.talkToUs"]}
|
|
${chalk.bold("https://gitter.im/freesewing/freesewing")}
|
|
|
|
`);
|
|
|
|
return dest;
|
|
};
|
|
|
|
module.exports().catch(err => {
|
|
console.error(err);
|
|
process.exit(1);
|
|
});
|