create-zalo-mini-app
Version:
Create zalo mini app project
101 lines (86 loc) • 2.58 kB
JavaScript
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);
})();