frontity
Version:
Frontity cli and entry point to other packages
131 lines (130 loc) • 5.13 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const path_1 = require("path");
const ora_1 = __importDefault(require("ora"));
const chalk_1 = __importDefault(require("chalk"));
const inquirer_1 = require("inquirer");
const create_1 = __importDefault(require("../commands/create"));
const steps_1 = require("../steps");
const utils_1 = require("../utils");
/**
* The create CLI command, usually run with `npx frontity create`.
*
* It takes args from the CLI and checks for the presence of environment
* variables. Then, it runs the create command programatically.
*
* @param options - Defined in {@link CreateOptions}.
*/
const create = async ({ name, theme, typescript, noGit, useCwd, prompt: promptUser, }) => {
name = name || process.env.FRONTITY_CREATE_NAME;
theme = theme || process.env.FRONTITY_CREATE_THEME;
typescript = typescript || !!process.env.FRONTITY_CREATE_TYPESCRIPT;
noGit = noGit || !!process.env.FRONTITY_CREATE_NO_GIT;
useCwd = useCwd || !!process.env.FRONTITY_CREATE_USE_CWD;
const options = {};
if (name) {
// Name was passed as arg or env variable.
options.name = name;
}
else if (promptUser) {
// Name was missing, but we can prompt.
const questions = [
{
name: "name",
type: "input",
message: "Enter a name for the project:",
default: "my-frontity-project",
},
];
const answers = await inquirer_1.prompt(questions);
options.name = answers.name;
}
else {
// Name is missing and we can't prompt. Stop.
utils_1.errorLogger(new Error("You need to provide the name for the project."));
}
// Theme was passed as arg or env variable.
if (theme) {
options.theme = theme;
}
else if (promptUser) {
// Theme was missing, but we can prompt.
const questions = [
{
name: "theme",
type: "list",
message: "Pick a starter theme to clone:",
default: "@frontity/mars-theme",
choices: [
{
name: "@frontity/mars-theme (recommended)",
value: "@frontity/mars-theme",
},
{
name: "@frontity/twentytwenty-theme",
value: "@frontity/twentytwenty-theme",
},
],
},
];
const answers = await inquirer_1.prompt(questions);
options.theme = answers.theme;
}
else {
// Add the default option.
options.theme = "@frontity/mars-theme";
}
options.typescript = typescript;
options.noGit = noGit;
options.path = useCwd ? process.cwd() : path_1.resolve(process.cwd(), options.name);
try {
// Get the emitter for `create`
const emitter = create_1.default(options);
emitter.on("message", (message, action) => {
if (action)
ora_1.default.promise(action, message);
else
utils_1.log(message);
});
await emitter;
utils_1.log(chalk_1.default.bold("\nFrontity project created.\n"));
if (promptUser) {
const subscribeQuestions = [
{
name: "subscribe",
type: "confirm",
message: "Do you want to receive framework updates by email?",
default: false,
},
{
name: "email",
type: "input",
message: "Please, enter your email:",
when: (answers) => answers.subscribe,
},
];
const answers = await inquirer_1.prompt(subscribeQuestions);
if (answers.subscribe) {
emitter.on("subscribe", (message, action) => {
if (action)
ora_1.default.promise(action, message);
else
utils_1.log(message);
});
await steps_1.subscribe(answers.email);
utils_1.log("\nThanks for subscribing! 😃");
}
else {
utils_1.log(`\nOk, that's fine! 😉\nYou can subscribe at any point with ${chalk_1.default.bold.green("npx frontity subscribe <email>")}.`);
}
}
utils_1.log(`\nRun ${chalk_1.default.bold.green(`cd ${options.name} && npx frontity dev`)} and have fun! 🎉\n\nYou can find docs at ${chalk_1.default.underline.magenta("https://docs.frontity.org/")}.\nFor technical support and assistance please join our community at ${chalk_1.default.underline.magenta("https://community.frontity.org/")}.\n`);
}
catch (error) {
utils_1.errorLogger(error);
}
};
exports.default = create;