UNPKG

@gdjiami/cli

Version:

CLI for build front end project.

253 lines (252 loc) 9.24 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.message = exports.logSymbols = exports.interpolate = exports.requireInCwd = exports.getModuleVersion = exports.resolveModuleInCwd = exports.isModuleExistsInCwd = exports.inspect = exports.prepareUrls = exports.noopFileSystem = exports.clearConsole = exports.writeJSON = exports.transformGroup = exports.transformString2Array = exports.choosePort = exports.shouldUseYarn = exports.IS_CI = void 0; var tslib_1 = require("tslib"); var url_1 = tslib_1.__importDefault(require("url")); var dumper_js_1 = require("dumper.js"); var os_1 = tslib_1.__importDefault(require("os")); var fs_extra_1 = tslib_1.__importDefault(require("fs-extra")); var address_1 = tslib_1.__importDefault(require("address")); var chalk_1 = tslib_1.__importDefault(require("chalk")); var detect_port_1 = tslib_1.__importDefault(require("detect-port")); var child_process_1 = require("child_process"); var path_1 = tslib_1.__importDefault(require("path")); exports.IS_CI = process.env.CI === 'true'; function shouldUseYarn() { try { child_process_1.execSync('yarnpkg --version', { stdio: 'ignore' }); return true; } catch (_a) { return false; } } exports.shouldUseYarn = shouldUseYarn; function choosePort(defaultPort) { return tslib_1.__awaiter(this, void 0, void 0, function () { var port; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, detect_port_1.default(defaultPort)]; case 1: port = _a.sent(); if (port !== defaultPort) { console.log(chalk_1.default.yellow("\u26A0\uFE0F Default Port(" + chalk_1.default.red(':' + defaultPort) + ") was occupied, trying " + chalk_1.default.green(':' + port))); } return [2 /*return*/, port]; } }); }); } exports.choosePort = choosePort; /** * transform ',' separated string to string[] * @param str */ function transformString2Array(str) { return str.split(','); } exports.transformString2Array = transformString2Array; /** * transform --group.foo=a,b or --group=a,b --group=b,c */ function transformGroup(argv) { if (Array.isArray(argv)) { return argv.reduce(function (group, cur) { var entry = transformString2Array(cur); var name = entry.join('_'); group[name] = entry; return group; }, {}); } else if (typeof argv === 'string') { return { default: transformString2Array(argv) }; } return Object.keys(argv).reduce(function (group, cur) { group[cur] = transformString2Array(argv[cur]); return group; }, {}); } exports.transformGroup = transformGroup; function writeJSON(path, data) { fs_extra_1.default.writeFileSync(path, JSON.stringify(data, null, 2) + os_1.default.EOL); } exports.writeJSON = writeJSON; /** * clear teminater */ function clearConsole() { if (process.stdout.isTTY) { process.stdout.write(process.platform === 'win32' ? '\x1B[2J\x1B[0f' : '\x1B[2J\x1B[3J\x1B[H'); } } exports.clearConsole = clearConsole; /** * null device */ var noop = function (path, callback) { return callback(null); }; exports.noopFileSystem = { join: function () { var paths = []; for (var _i = 0; _i < arguments.length; _i++) { paths[_i] = arguments[_i]; } return path_1.default.join.apply(path_1.default, paths); }, mkdir: noop, mkdirp: noop, rmdir: noop, unlink: noop, writeFile: function (path, data, callback) { return callback(null); }, }; // copy from react-dev-utils function prepareUrls(protocol, host, port) { var formatUrl = function (hostname) { return url_1.default.format({ protocol: protocol, hostname: hostname, port: port, pathname: '/', }); }; var prettyPrintUrl = function (hostname) { return url_1.default.format({ protocol: protocol, hostname: hostname, port: chalk_1.default.bold(port.toString()), pathname: '/', }); }; var isUnspecifiedHost = host === '0.0.0.0' || host === '::'; var prettyHost, lanUrlForConfig, lanUrlForTerminal; if (isUnspecifiedHost) { prettyHost = 'localhost'; try { // This can only return an IPv4 address lanUrlForConfig = address_1.default.ip(); if (lanUrlForConfig) { // Check if the address is a private ip // https://en.wikipedia.org/wiki/Private_network#Private_IPv4_address_spaces if (/^10[.]|^172[.](1[6-9]|2[0-9]|3[0-1])[.]|^192[.]168[.]/.test(lanUrlForConfig)) { // Address is private, format it for later use lanUrlForTerminal = prettyPrintUrl(lanUrlForConfig); } else { // Address is not private, so we will discard it lanUrlForConfig = undefined; } } } catch (_e) { // ignored } } else { prettyHost = host; } var localUrlForTerminal = prettyPrintUrl(prettyHost); var localUrlForBrowser = formatUrl(prettyHost); return { lanUrlForConfig: lanUrlForConfig, lanUrlForTerminal: lanUrlForTerminal, localUrlForTerminal: localUrlForTerminal, localUrlForBrowser: localUrlForBrowser, }; } exports.prepareUrls = prepareUrls; function inspect(variable, title) { if (title) { console.log(chalk_1.default.bgBlue(title)); } dumper_js_1.dump(variable); console.log('\n\n'); } exports.inspect = inspect; function isModuleExistsInCwd(name) { try { var cwdNodeModules = path_1.default.join(process.cwd(), 'node_modules'); if (!fs_extra_1.default.existsSync(cwdNodeModules)) { return false; } return !!require.resolve(name, { paths: [cwdNodeModules], }); } catch (_a) { return false; } } exports.isModuleExistsInCwd = isModuleExistsInCwd; function resolveModuleInCwd(name) { var cwdNodeModules = path_1.default.join(process.cwd(), 'node_modules'); return require.resolve(name, { paths: [cwdNodeModules] }); } exports.resolveModuleInCwd = resolveModuleInCwd; function getModuleVersion(name) { return tslib_1.__awaiter(this, void 0, void 0, function () { var cwdNodeModules, modulePath, json, _a; return tslib_1.__generator(this, function (_b) { switch (_b.label) { case 0: _b.trys.push([0, 2, , 3]); cwdNodeModules = path_1.default.join(process.cwd(), 'node_modules'); modulePath = require.resolve(name + "/package.json", { paths: [cwdNodeModules] }); return [4 /*yield*/, fs_extra_1.default.readJSON(modulePath)]; case 1: json = _b.sent(); return [2 /*return*/, json.version]; case 2: _a = _b.sent(); return [2 /*return*/, null]; case 3: return [2 /*return*/]; } }); }); } exports.getModuleVersion = getModuleVersion; function requireInCwd(name) { return require(resolveModuleInCwd(name)); } exports.requireInCwd = requireInCwd; /** * interpolate ${variable} in string */ function interpolate(str, local) { if (str == null) { return ''; } var matches = str.match(/\$([a-zA-Z0-9_]+)|\${([a-zA-Z0-9_]+)}/g) || []; matches.forEach(function (match) { var key = match.replace(/\$|{|}/g, ''); var variable = local[key] || ''; // Resolve recursive interpolations variable = interpolate(variable, local); str = str.replace(match, variable); }); return str; } exports.interpolate = interpolate; exports.logSymbols = { success: chalk_1.default.bgGreen(chalk_1.default.white(' DONE ')), error: chalk_1.default.bgRed(chalk_1.default.white(' FAIL ')), warn: chalk_1.default.bgYellow(chalk_1.default.white(' WARN ')), info: chalk_1.default.bgBlue(chalk_1.default.white(' INFO ')), }; exports.message = { success: function (text) { console.log(exports.logSymbols.success + ' ' + text); }, error: function (text) { console.log(exports.logSymbols.error + ' ' + text); }, warn: function (text) { console.log(exports.logSymbols.warn + ' ' + text); }, info: function (text) { console.log(exports.logSymbols.info + ' ' + text); }, custom: function (title, text, color) { if (color === void 0) { color = 'bgMagenta'; } console.log(chalk_1.default.bgKeyword(color)(" " + title + " ") + ' ' + text); }, };