From 4db454ad179c6912d622ce868fab2c3be4fa832b Mon Sep 17 00:00:00 2001 From: Joost De Cock Date: Sun, 26 Apr 2020 11:53:43 +0200 Subject: [PATCH] feat: Check minimal node version. Closes #365 --- packages/create-freesewing-pattern/lib/cli.js | 134 +++++++++--------- 1 file changed, 69 insertions(+), 65 deletions(-) diff --git a/packages/create-freesewing-pattern/lib/cli.js b/packages/create-freesewing-pattern/lib/cli.js index 330688cbaa8..cec0539bee2 100644 --- a/packages/create-freesewing-pattern/lib/cli.js +++ b/packages/create-freesewing-pattern/lib/cli.js @@ -1,46 +1,52 @@ #!/usr/bin/env node -"use strict"; +'use strict' -const path = require("path"); -const chalk = require("chalk"); -const program = require("commander"); -const strings = require("@freesewing/i18n").strings; -const { version } = require("../package"); +const path = require('path') +const chalk = require('chalk') +const program = require('commander') +const strings = require('@freesewing/i18n').strings +const { version } = require('../package') -const getDefaultLibraryParams = require("./get-default-library-params"); -const createLibrary = require("./create-library"); -const promptLibraryParams = require("./prompt-library-params"); +const getDefaultLibraryParams = require('./get-default-library-params') +const createLibrary = require('./create-library') +const promptLibraryParams = require('./prompt-library-params') module.exports = async () => { - const defaults = await getDefaultLibraryParams(); + // Check node version + const version = process.version.slice(1).split('.')[0] + if (parseInt(version) < 10) + throw ` +⚠️ FreeSewing requires Node v10 or newer. + + We hightly recommend using NVM to manage your Node versions: + https://github.com/nvm-sh/nvm + + When in doubt, pick an active LTS version: + https://nodejs.org/en/about/releases/ + +` + + const defaults = await getDefaultLibraryParams() program - .name("create-freesewing-pattern") + .name('create-freesewing-pattern') .version(version) - .usage("[options] [package-name]") - .option("-d, --desc ", "package description") - .option("-a, --author ", "author's github handle", defaults.author) - .option("-l, --license ", "package license", defaults.license) - .option("-r, --repo ", "package repo path") - .option("-g, --no-git", "generate without git init") + .usage('[options] [package-name]') + .option('-d, --desc ', 'package description') + .option('-a, --author ', "author's github handle", defaults.author) + .option('-l, --license ', 'package license', defaults.license) + .option('-r, --repo ', 'package repo path') + .option('-g, --no-git', 'generate without git init') + .option('-m, --manager ', 'package manager to use', /^(npm|yarn)$/, defaults.manager) .option( - "-m, --manager ", - "package manager to use", - /^(npm|yarn)$/, - defaults.manager - ) - .option( - "-t, --template ", - "package template to use", + '-t, --template ', + 'package template to use', /^(default|custom)$/, defaults.template ) - .option("-p, --template-path ", "custom package template path") - .option( - "-s, --skip-prompts", - "skip all prompts (must provide package-name via cli)" - ) - .parse(process.argv); + .option('-p, --template-path ', 'custom package template path') + .option('-s, --skip-prompts', 'skip all prompts (must provide package-name via cli)') + .parse(process.argv) const opts = { description: program.desc, @@ -53,53 +59,51 @@ module.exports = async () => { skipPrompts: program.skipPrompts, git: program.git, version - }; - - Object.keys(opts).forEach(key => { - if (!opts[key] && defaults[key]) { - opts[key] = defaults[key]; - } - }); - - if (program.args.length === 1) { - opts.name = program.args[0]; - } else if (program.args.length > 1) { - console.error("invalid arguments"); - program.help(); - process.exit(1); } - const params = await promptLibraryParams(opts); - const dest = await createLibrary(params); + Object.keys(opts).forEach((key) => { + if (!opts[key] && defaults[key]) { + opts[key] = defaults[key] + } + }) + + if (program.args.length === 1) { + opts.name = program.args[0] + } else if (program.args.length > 1) { + console.error('invalid arguments') + program.help() + process.exit(1) + } + + const params = await promptLibraryParams(opts) + const dest = await createLibrary(params) console.log(` -🎉 ${strings[params.language]["cfp.patternCreated"]} ${chalk.bold(dest)} +🎉 ${strings[params.language]['cfp.patternCreated']} ${chalk.bold(dest)} -${strings[params.language]["cfp.runTheseCommands"]}: +${strings[params.language]['cfp.runTheseCommands']}: - - ${strings[params.language]["cfp.startRollup"]} + - ${strings[params.language]['cfp.startRollup']} 👉 ${chalk.cyan(`cd ${params.shortName} && ${params.manager} start`)} - - ${strings[params.language]["cfp.startWebpack"]} + - ${strings[params.language]['cfp.startWebpack']} - 👉 ${chalk.cyan( - `cd ${path.join(params.shortName, "example")} && ${params.manager} start` - )} + 👉 ${chalk.cyan(`cd ${path.join(params.shortName, 'example')} && ${params.manager} start`)} -${strings[params.language]["cfp.devDocsAvailableAt"]} - ${chalk.bold("https://" + params.language + ".freesewing.dev/")} +${strings[params.language]['cfp.devDocsAvailableAt']} + ${chalk.bold('https://' + params.language + '.freesewing.dev/')} -${strings[params.language]["cfp.talkToUs"]} - ${chalk.bold("https://gitter.im/freesewing/freesewing")} +${strings[params.language]['cfp.talkToUs']} + ${chalk.bold('https://gitter.im/freesewing/freesewing')} -`); +`) - return dest; -}; + return dest +} -module.exports().catch(err => { - console.error(err); - process.exit(1); -}); +module.exports().catch((err) => { + console.error(err) + process.exit(1) +})