"use strict"; 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, version: opts.version }; } };