frontity
Version:
Frontity cli and entry point to other packages
103 lines (102 loc) • 4 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 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;