129 lines
3.3 KiB
JavaScript
129 lines
3.3 KiB
JavaScript
"use strict";
|
|
|
|
const path = require("path");
|
|
const fs = require("fs");
|
|
const inquirer = require("inquirer");
|
|
const validateNpmName = require("validate-npm-package-name");
|
|
const languages = require("@freesewing/i18n").languages;
|
|
const strings = require("@freesewing/i18n").strings;
|
|
const config = require("./config");
|
|
|
|
let languageChoices = [];
|
|
for (let l of Object.keys(languages)) {
|
|
languageChoices.push({
|
|
name: languages[l],
|
|
value: l,
|
|
short: languages[l]
|
|
});
|
|
}
|
|
|
|
module.exports = async opts => {
|
|
if (opts.name && !validateNpmName(opts.name).validForNewPackages) {
|
|
throw new Error(`invalid package name "${opts.name}"`);
|
|
}
|
|
|
|
if (opts.skipPrompts) {
|
|
if (!opts.name) {
|
|
throw new Error(
|
|
"invalid input; you must pass a package name with --skip-prompts"
|
|
);
|
|
}
|
|
|
|
Object.keys(opts).forEach(key => {
|
|
const value = opts[key];
|
|
if (typeof value === "function") {
|
|
opts[key] = value(opts);
|
|
}
|
|
});
|
|
|
|
return opts;
|
|
} else {
|
|
const info = await inquirer.prompt([
|
|
{
|
|
type: "list",
|
|
name: "language",
|
|
message: "Language",
|
|
choices: languageChoices,
|
|
default: "en"
|
|
},
|
|
{
|
|
type: "input",
|
|
name: "name",
|
|
message: info => strings[info.language]["cfp.patternName"],
|
|
validate: name => {
|
|
return name && validateNpmName(name).validForNewPackages;
|
|
},
|
|
default: opts.name
|
|
},
|
|
{
|
|
type: "input",
|
|
name: "description",
|
|
message: info => strings[info.language]["cfp.patternDescription"],
|
|
default: opts.description
|
|
},
|
|
{
|
|
type: "list",
|
|
name: "type",
|
|
message: info => strings[info.language]["cfp.patternType"],
|
|
choices: info => [
|
|
{
|
|
name: strings[info.language]["filter.type.pattern"],
|
|
value: "pattern"
|
|
},
|
|
{ name: strings[info.language]["filter.type.block"], value: "block" }
|
|
],
|
|
default: "pattern"
|
|
},
|
|
{
|
|
type: "list",
|
|
name: "department",
|
|
message: info => strings[info.language]["filter.department.title"],
|
|
choices: info => [
|
|
{
|
|
name: strings[info.language]["filter.department.menswear"],
|
|
value: "menswear"
|
|
},
|
|
{
|
|
name: strings[info.language]["filter.department.womenswear"],
|
|
value: "womenswear"
|
|
},
|
|
{
|
|
name: strings[info.language]["filter.department.accessories"],
|
|
value: "accessories"
|
|
}
|
|
],
|
|
default: "womenswear"
|
|
},
|
|
{
|
|
type: "input",
|
|
name: "author",
|
|
message: info => strings[info.language]["cfp.author"],
|
|
default: opts.author
|
|
},
|
|
{
|
|
type: "input",
|
|
name: "repo",
|
|
message: info => strings[info.language]["cfp.githubRepo"],
|
|
default: opts.repo
|
|
},
|
|
{
|
|
type: "list",
|
|
name: "manager",
|
|
message: info => strings[info.language]["cfp.packageManager"],
|
|
choices: ["npm", "yarn"],
|
|
default: opts.manager
|
|
}
|
|
]);
|
|
|
|
config.set("author", info.author);
|
|
config.set("manager", info.manager);
|
|
config.set("template", "default");
|
|
config.set("license", "MIT");
|
|
info.template = "default";
|
|
|
|
return {
|
|
...info,
|
|
git: opts.git
|
|
};
|
|
}
|
|
};
|