@gdjiami/cli
Version:
CLI for build front end project.
253 lines (252 loc) • 9.24 kB
JavaScript
;
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);
},
};