UNPKG

@serpent/common-cli

Version:

通用的 cli 相关的函数

315 lines (294 loc) 8.77 kB
'use strict'; 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;