美化console.log结果

This commit is contained in:
fofolee 2022-04-27 13:13:09 +08:00
parent c4434992a2
commit b02ac2f09e
3 changed files with 65 additions and 50 deletions

45
plugin/lib/beautifyLog.js Normal file
View File

@ -0,0 +1,45 @@
let itemPropCaches = [];
let parseEveryItem = item => {
if (typeof item === "undefined") return "undefined"
if (typeof item === "number") return item
if (typeof item !== "object") return item.toString()
if (Buffer.isBuffer(item)) {
var bufferString = `[Buffer ${item.slice(0, 50).toString('hex').match(/\w{1,2}/g).join(" ")}`;
if (item.length > 50) bufferString += `...${(item.length / 1000).toFixed(2)} kb `;
return bufferString + ']'
}
if (item instanceof ArrayBuffer) return `ArrayBuffer(${item.byteLength})`;
if (item instanceof Blob) return `Blob { size: ${item.size}, type: "${item.type}" }`;
try {
var result = item.constructor();
for (const key in item) {
if (typeof item[key] === 'function') result[key] = liteFuntcion(item[key])
else if (typeof item[key] === 'object') {
if (itemPropCaches.includes(item[key])) result[key] = `[Circular]`
else {
itemPropCaches.push(item[key]);
result[key] = parseEveryItem(item[key])
}
} else {
result[key] = item[key] || 'undefined'
}
}
itemPropCaches = []
return result
} catch (error) {
console.log(error);
return item.toString()
}
}
let liteFuntcion = fn => {
return `[Function: ${fn.name ? fn.name : '(anonymous)'}]`
}
let beautifyLog = item => {
let result = parseEveryItem(item)
return typeof result === 'object' ? JSON.stringify(result, null, 2) : result
}
module.exports = beautifyLog;

View File

@ -8,6 +8,7 @@ const axios = require('axios');
const http = require('http'); const http = require('http');
const url = require('url') const url = require('url')
const kill = require('tree-kill') const kill = require('tree-kill')
const beautifyLog = require('./lib/beautifyLog')
require('ses') require('ses')
window._ = require("lodash") window._ = require("lodash")
@ -413,39 +414,7 @@ window.convertFilePathToUtoolsPayload = files => files.map(file => {
} }
}) })
let stringifyAll = item => { let parseStdout = stdout => stdout.map(x => beautifyLog(x)).join("\n")
var cache = [];
var string = JSON.stringify(item, (key, value) => {
if (typeof value === 'function') return value.toString().replace(/\{[\s\S]*\}/, '{...}');
if (typeof value === 'object' && value !== null) {
if (cache.includes(value)) return value.toString()
cache.push(value);
}
return value;
}, 2);
return string
}
let parseItem = item => {
if (typeof item === "undefined") return "undefined"
if (typeof item !== "object") return item.toString()
if (Object.keys(item).length == 0) return "{}"
if (Buffer.isBuffer(item)) {
var bufferString = `[Buffer ${item.slice(0, 50).toString('hex').match(/\w{1,2}/g).join(" ")}`;
if (item.length > 50) bufferString += `...${(item.length / 1000).toFixed(2)} kb `;
return bufferString + ']'
}
if (item instanceof ArrayBuffer) return `ArrayBuffer(${item.byteLength})`;
if (item instanceof Blob) return `Blob { size: ${item.size}, type: "${item.type}" }`;
try {
return stringifyAll(item)
} catch (error) {
console.log(error);
return item.toString()
}
}
let parseStdout = stdout => stdout.map(x => parseItem(x)).join("\n")
let getSandboxFuns = () => { let getSandboxFuns = () => {
var sandbox = { var sandbox = {
@ -545,7 +514,7 @@ window.runCodeFile = (cmd, option, terminal, callback) => {
charset = option.charset, charset = option.charset,
scptarg = option.scptarg || ""; scptarg = option.scptarg || "";
let script = getQuickcommandTempFile(ext) let script = getQuickcommandTempFile(ext)
// 批处理和 powershell 默认编码为 GBK, 解决批处理的换行问题 // 批处理和 powershell 默认编码为 GBK, 解决批处理的换行问题
if (charset.scriptCode) cmd = iconv.encode(cmd.replace(/\n/g, '\r\n'), charset.scriptCode); if (charset.scriptCode) cmd = iconv.encode(cmd.replace(/\n/g, '\r\n'), charset.scriptCode);
fs.writeFileSync(script, cmd); fs.writeFileSync(script, cmd);
// var argvs = [script] // var argvs = [script]
@ -567,27 +536,27 @@ window.runCodeFile = (cmd, option, terminal, callback) => {
// 在终端中输出 // 在终端中输出
if (terminal) cmdline = getCommandToLaunchTerminal(cmdline) if (terminal) cmdline = getCommandToLaunchTerminal(cmdline)
child = child_process.spawn(cmdline, { child = child_process.spawn(cmdline, {
encoding: 'buffer', encoding: 'buffer',
shell: true shell: true
}) })
// var chunks = [], // var chunks = [],
// err_chunks = []; // err_chunks = [];
console.log('running: ' + cmdline); console.log('running: ' + cmdline);
child.stdout.on('data', chunk => { child.stdout.on('data', chunk => {
if (charset.outputCode) chunk = iconv.decode(chunk, charset.outputCode) if (charset.outputCode) chunk = iconv.decode(chunk, charset.outputCode)
callback(chunk.toString(), null) callback(chunk.toString(), null)
// chunks.push(chunk) // chunks.push(chunk)
}) })
child.stderr.on('data', stderr => { child.stderr.on('data', stderr => {
if (charset.outputCode) stderr = iconv.decode(stderr, charset.outputCode) if (charset.outputCode) stderr = iconv.decode(stderr, charset.outputCode)
callback(null, stderr.toString()) callback(null, stderr.toString())
// err_chunks.push(err_chunk) // err_chunks.push(err_chunk)
}) })
// child.on('close', code => { // child.on('close', code => {
// let stdout = chunks.join(""); // let stdout = chunks.join("");
// let stderr = err_chunks.join(""); // let stderr = err_chunks.join("");
// callback(stdout, stderr) // callback(stdout, stderr)
// }) // })
return child return child
} }
@ -625,7 +594,7 @@ window.quickcommandHttpServer = () => {
req.on('end', () => { req.on('end', () => {
let parsedParams let parsedParams
let params = data.join("").toString() let params = data.join("").toString()
// 先尝试作为 json 解析 // 先尝试作为 json 解析
try { try {
parsedParams = JSON.parse(params) parsedParams = JSON.parse(params)
} catch (error) { } catch (error) {

View File

@ -104,6 +104,7 @@ export default {
word-wrap: break-word; word-wrap: break-word;
max-width: 100%; max-width: 100%;
margin: 0; margin: 0;
font-family: Consolas, Monaco, "Courier New";
} }
iframe { iframe {
width: 100%; width: 100%;