UNPKG

frontity

Version:

Frontity cli and entry point to other packages

103 lines (102 loc) 4 kB
"use strict"; 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 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 (0, inquirer_1.prompt)(questions); options.name = answers.name; } else { // Name is missing and we can't prompt. Stop. (0, 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 (typescript) { options.theme = "@frontity/mars-theme-typescript"; } 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 (0, 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() : (0, path_1.resolve)(process.cwd(), options.name); try { // Get the emitter for `create` const emitter = (0, create_1.default)(options); emitter.on("message", (message, action) => { if (action) ora_1.default.promise(action, message); else (0, utils_1.log)(message); }); await emitter; (0, utils_1.log)(chalk_1.default.bold("\nFrontity project created.\n")); (0, 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) { (0, utils_1.errorLogger)(error); } }; exports.default = create;