From 545bd66d378c165e1485bba62df383c5289037e1 Mon Sep 17 00:00:00 2001 From: weboko Date: Wed, 21 Dec 2022 22:21:39 +0100 Subject: [PATCH] allow to select template from cli --- packages/create-waku-app/createApp.js | 31 +++++++++++++++++++++------ packages/create-waku-app/package.json | 1 + 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/packages/create-waku-app/createApp.js b/packages/create-waku-app/createApp.js index 9e3928f..0b0ded4 100644 --- a/packages/create-waku-app/createApp.js +++ b/packages/create-waku-app/createApp.js @@ -1,16 +1,18 @@ const path = require("path"); const fs = require("fs-extra"); +const enquirer = require("enquirer"); const execSync = require("child_process").execSync; const { Command } = require("commander"); const validateProjectName = require("validate-npm-package-name"); -const DEFAULT_TEMPLATE = "light-chat"; const supportedExamplesDir = path.resolve(__dirname, "./examples"); -const init = (name, description, version, supportedExamples) => { +const init = async (name, description, version, supportedExamples) => { let appName; - const program = new Command() + let template; + + const options = new Command() .name(name) .description(description) .version(version, "-v, --version", "output the version number") @@ -20,13 +22,28 @@ const init = (name, description, version, supportedExamples) => { }) .option( "-t, --template ", - "specify a template for the created project" + "specify a template for the created project or you can skip and select template manually" ) .allowUnknownOption() - .parse(); + .parse() + .opts(); - const options = program.opts(); - const template = options.template || DEFAULT_TEMPLATE; + template = options.template; + + if (!template) { + const templatePrompt = new enquirer.Select({ + name: "template", + message: "Select template", + choices: Object.keys(supportedExamples), + }); + + try { + template = await templatePrompt.run(); + } catch (e) { + console.error(`Failed at selecting a template: ${e.message}`); + process.exit(1); + } + } if (!supportedExamples[template]) { const supportedExamplesMessage = Object.keys(supportedExamples).reduce((acc, v) => { diff --git a/packages/create-waku-app/package.json b/packages/create-waku-app/package.json index c78abef..88f2ecd 100644 --- a/packages/create-waku-app/package.json +++ b/packages/create-waku-app/package.json @@ -49,6 +49,7 @@ }, "dependencies": { "commander": "^9.4.1", + "enquirer": "^2.3.6", "fs-extra": "^11.1.0", "semver": "^7.3.8", "validate-npm-package-name": "^5.0.0"