UNPKG

create-zalo-mini-app

Version:

Create zalo mini app project

101 lines (86 loc) 2.58 kB
#! /usr/bin/env node const exec = require('exec-sh'); const compareVersion = require('compare-versions'); const chalk = require('chalk'); const { lookpath } = require('lookpath'); const { MINIMUM_NODE_VERSION } = require('../constants'); const createFolder = require('../utils/create-folder'); const { errorExit, handleError } = require('../utils/error'); const logger = require('../utils/status-logger'); const getCLIVersion = require('../utils/get-cli-version'); const checkUpdate = require('../utils/check-update'); const getOptions = require('../utils/get-options'); const waitText = chalk.gray('(Please wait, it can take a while)'); (async function () { let createProjectFolder = true; let nodeVersion = process.versions.node; const args = process.argv.slice(2, process.argv.length); let projectFolder = args[0]; if (!projectFolder) { const { initInCurrentDir, projectName } = await getOptions(); createProjectFolder = !initInCurrentDir; projectFolder = projectName; } if (createProjectFolder) { try { createFolder(projectFolder); } catch (err) { errorExit(err); } } const validVersion = compareVersion.compare( nodeVersion, MINIMUM_NODE_VERSION, '>=' ); if (!validVersion) { logger.error(`Update Node.js to the newer version (>= 12.13.0)`); return; } const zmp = await lookpath('zmp-cli'); let needToInstall = false; let needToUpdate = false; if (zmp) { try { const { stdout } = await exec.promise('zmp-cli --version', true); const version = getCLIVersion(stdout); needToUpdate = await checkUpdate(version); } catch (err) { errorExit(err); return; } } else { needToInstall = true; } let startText = 'Installing CLI'; let endText = 'CLI has been installed 💪'; if (needToUpdate) { startText = 'Updating CLI'; endText = 'CLI had been updated 💪'; } if (needToUpdate || needToInstall) { try { logger.statusStart(`${startText}: ${waitText}`); await exec.promise('npm install -g zmp-cli', true); } catch (err) { const { code } = err; const { msg, desc } = handleError(code); if (msg) { errorExit(`\n${chalk.red(msg)}\n${chalk.italic.blue(desc)}`); } errorExit(err); } logger.statusDone(endText); } try { if (createProjectFolder) { await exec.promise(`cd ${projectFolder} && zmp-cli init`); } else { await exec.promise(`zmp-cli init`); } } catch (err) { errorExit(err); return; } process.exit(0); })();