@serpent/common-cli
Version:
通用的 cli 相关的函数
315 lines (294 loc) • 8.77 kB
JavaScript
;
var format$2 = require('./format-4c37063e.cjs');
var info = require('./info-08047f0f.cjs');
var _commonjsHelpers = require('./_commonjsHelpers-ed042b00.cjs');
var require$$0 = require('util');
var warn = require('./warn-8730a30c.cjs');
var tslib_es6 = require('./tslib.es6-8ea38f41.cjs');
var fs = require('fs');
var path = require('path');
var context = require('./context-e98d804e.cjs');
var Dir = require('./Dir-a1286a2f.cjs');
require('module');
require('assert');
require('./supportColor-07ee281e.cjs');
require('os');
require('./exists-4a19b288.cjs');
var success$1 = {exports: {}};
/**
* @module libs/sys/warn
* @createdAt 2016-07-14
*
* @copyright Copyright (c) 2016 Zhonglei Qiu
* @license Licensed under the MIT license.
*/
var util$1 = require$$0;
var data$1 = warn._data;
function format$1() {
return data$1.success + util$1.format.apply(util$1, arguments) + data$1.end
}
/**
* 输出绿色的字符串
*
* 函数参数和 util.format 一样
*
* @author Zhonglei Qiu
* @since 2.0.0
*/
success$1.exports = function() { console.log(format$1.apply(null, arguments)); };
/**
* 返回绿色的字符串
*
* 函数参数和 util.format 一样
*
* @type {Function}
*
* @author Zhonglei Qiu
* @since 2.0.0
*/
success$1.exports.format = format$1;
// /* istanbul ignore next */
// if (!module.parent) console.log(format.apply(null, process.argv.slice(2)))
var successExports = success$1.exports;
var success = /*@__PURE__*/_commonjsHelpers.getDefaultExportFromCjs(successExports);
var error$1 = {exports: {}};
/**
* @module libs/sys/error
* @createdAt 2016-07-14
*
* @copyright Copyright (c) 2016 Zhonglei Qiu
* @license Licensed under the MIT license.
*/
var util = require$$0;
var data = warn._data;
function format() {
return data.error + util.format.apply(util, arguments) + data.end
}
/**
* 输出红色的字符串
*
* 函数参数和 util.format 一样
*
* @author Zhonglei Qiu
* @since 2.0.0
*/
error$1.exports = function() { console.log(format.apply(null, arguments)); };
/**
* 返回红色的字符串
*
* 函数参数和 util.format 一样
*
* @type {Function}
*
* @author Zhonglei Qiu
* @since 2.0.0
*/
error$1.exports.format = format;
// /* istanbul ignore next */
// if (!module.parent) console.log(format.apply(null, process.argv.slice(2)))
var errorExports = error$1.exports;
var error = /*@__PURE__*/_commonjsHelpers.getDefaultExportFromCjs(errorExports);
var FS_LOG_LEVELS = ['verbose', 'debug', 'info', 'warn', 'error'];
var _fd = 0;
var _level = 'info';
var _ns = '';
var _nsKeeps = [];
var _nsSkips = [];
var fsLog = function (namespace) {
var logger = {};
FS_LOG_LEVELS.forEach(function (LEVEL) {
logger[LEVEL] = function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
if (FS_LOG_LEVELS.indexOf(LEVEL) >= FS_LOG_LEVELS.indexOf(_level)) {
if (!_ns || isNamespaceAvailable(namespace)) {
log(namespace, LEVEL, args);
}
}
};
});
return logger;
};
fsLog.open = function (logLevel, opts) {
if (opts === void 0) { opts = {}; }
if (logLevel) {
var file = typeof opts.logFile === 'string'
? opts.logFile
: path.join(context.ospath.tmp(), "log.".concat(datetime(true), ".log"));
if (typeof logLevel === 'string') {
if (!FS_LOG_LEVELS.includes(logLevel))
throw new Error("invalid log level: \"".concat(logLevel, "\""));
_level = logLevel;
}
if (!opts.append || !context.existsFile(file))
Dir.writeFile(file, '');
if (opts.logNamespace)
assignNamespace(opts.logNamespace);
_fd = fs.openSync(file, 'a+');
return { logFile: file, level: _level, logNamespace: _ns };
}
};
fsLog.close = function () {
if (_fd) {
fs.closeSync(_fd);
_fd = 0;
}
};
function log(ns, level, args) {
if (!_fd)
return;
var tag = "".concat(datetime(), " [").concat(level, "]").concat(ns ? ' <' + ns + '>' : '');
var inFirst = true;
var firstParts = [tag];
var restLines = [];
for (var _i = 0, args_1 = args; _i < args_1.length; _i++) {
var arg = args_1[_i];
var argType = typeof arg;
if (inFirst) {
if (['number', 'string', 'boolean'].includes(argType)) {
firstParts.push(arg);
continue;
}
else {
var str = stringify(normalize(arg));
if (str.length < 100) {
firstParts.push(str);
continue;
}
}
inFirst = false;
}
restLines.push(stringify(arg, true).split('\n')
.map(function (row) { return " ".concat(row); })
.join('\n'));
}
var content = tslib_es6.__spreadArray([
firstParts.join(' ')
], restLines, true).join('\n') + '\n';
fs.writeSync(_fd, content);
}
function datetime(dateOnly) {
var d = new Date();
var date = [
d.getFullYear(),
(d.getMonth() + 1).toString().padStart(2, '0'),
d.getDate().toString().padStart(2, '0'),
].join('-');
if (dateOnly)
return date;
var time = [
d.getHours(),
d.getMinutes(),
d.getSeconds(),
].map(function (n) { return n.toString().padStart(2, '0'); }).join(':');
return date + ' ' + time;
}
function stringify(arg, pretty) {
if (typeof arg === 'undefined')
return 'undefined';
try {
var normalized = normalize(arg);
var res = pretty ? JSON.stringify(normalized, null, 2) : JSON.stringify(normalized);
return "".concat(res);
}
catch (e) {
return "".concat(arg);
}
}
function normalize(arg) {
if (arg instanceof Error) {
var name = arg.name, message = arg.message, stack = arg.stack, rest = tslib_es6.__rest(arg, ["name", "message", "stack"]);
try {
JSON.stringify(rest);
return tslib_es6.__assign({ name: name, message: message, stack: stack }, rest);
}
catch (e) {
return { name: name, message: message, stack: stack };
}
}
return arg;
}
function isNamespaceAvailable(namespace) {
if (_nsSkips.some(function (skip) { return skip.test(namespace); }))
return false;
if (_nsKeeps.some(function (keep) { return keep.test(namespace); }))
return true;
return false;
}
function assignNamespace(namespace) {
var i;
var split = namespace.split(/[\s,]+/);
var len = split.length;
for (i = 0; i < len; i++) {
if (!split[i]) {
// ignore empty strings
continue;
}
var ns = split[i].replace(/\*/g, '.*?');
if (ns[0] === '-') {
_nsSkips.push(new RegExp('^' + ns.slice(1) + '$'));
}
else {
_nsKeeps.push(new RegExp('^' + ns + '$'));
}
}
_ns = namespace;
}
var logHead = function (msg) { return format$2.clog("\n%c".concat(prefix(msg, ' ')), 'bold.green'); };
var logBody = function (msg) { return format$2.clog("%c".concat(prefix(msg, ' ')), 'gray'); };
var logBlock = function (head, body) {
logHead(head);
logBody(body);
};
var logger = {
fs: fsLog,
head: logHead,
body: logBody,
block: logBlock,
info: function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
return info.info.apply(void 0, args);
},
success: function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
return success.apply(void 0, args);
},
error: function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
return error.apply(void 0, args);
},
warn: function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
return warn.warn.apply(void 0, args);
},
clog: function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
return format$2.clog.apply(void 0, args);
},
format: format$2.format,
};
function prefix(msg, some) {
return msg
.split('\n')
.map(function (l) { return some + l; })
.join('\n');
}
exports.FS_LOG_LEVELS = FS_LOG_LEVELS;
exports.logger = logger;