diff --git a/package.json b/package.json index fdbbe052..fe4a6710 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { - "name": "vconsole", - "version": "3.15.1", + "name": "@wyatex/vconsole", + "version": "3.15.3", "description": "A lightweight, extendable front-end developer tool for mobile web page.", "homepage": "https://github.com/Tencent/vConsole", "files": [ @@ -10,6 +10,7 @@ "README*" ], "main": "dist/vconsole.min.js", + "types": "dist/vconsole.min.d.ts", "typings": "dist/vconsole.min.d.ts", "scripts": { "build": "webpack --mode=production --progress --env target=web", diff --git a/src/component/icon/iconCopy.svelte b/src/component/icon/iconCopy.svelte index 9afc1701..ceb0ec51 100644 --- a/src/component/icon/iconCopy.svelte +++ b/src/component/icon/iconCopy.svelte @@ -9,7 +9,7 @@ const copyOptions = { target: document.documentElement }; let showSuc = false; - const onTapIcon = (e) => { + const onTapIcon = async (e) => { let text = content; if (tool.isFunction(handler)) { text = handler(content) || ''; @@ -25,7 +25,16 @@ text = content; } } - copy(text, copyOptions); + if ( + navigator.clipboard && + typeof navigator.clipboard.writeText === "function" + ) { + try { + await navigator.clipboard.writeText(text); + } catch (error) {} + } else { + copy(text, copyOptions); + } showSuc = true; setTimeout(() => { showSuc = false; diff --git a/src/lib/tool.ts b/src/lib/tool.ts index e595bef5..bb19f8ac 100644 --- a/src/lib/tool.ts +++ b/src/lib/tool.ts @@ -206,7 +206,7 @@ const _safeJSONStringifyFlatValue = (value: any, maxLen = 0) => { if (maxLen > 0) { value = getStringWithinLength(value, maxLen); } - str += '"' + getVisibleText(value) + '"'; + str += JSON.stringify(value); } else if (isSymbol(value)) { str += String(value).replace(/^Symbol\((.*)\)$/i, 'Symbol("$1")'); } else if (isFunction(value)) { @@ -265,7 +265,7 @@ const _safeJSONStringify = (obj, opt: ISafeJSONStringifyOption, _curDepth = 0) = if (isObject(key) || isArray(key) || isSymbol(key)) { opt.ret += Object.prototype.toString.call(key); } else if (isString(key) && opt.standardJSON) { - opt.ret += '"' + key + '"'; + opt.ret += JSON.stringify(key); } else { opt.ret += key; } diff --git a/src/log/log.model.ts b/src/log/log.model.ts index 39089cc4..0018b55f 100644 --- a/src/log/log.model.ts +++ b/src/log/log.model.ts @@ -119,6 +119,7 @@ export class VConsoleLogModel extends VConsoleModel { this.origConsole[method] = window.console[method]; }); this.origConsole.time = window.console.time; + this.origConsole.timeLog = window.console.timeLog; this.origConsole.timeEnd = window.console.timeEnd; this.origConsole.clear = window.console.clear; this.origConsole.group = window.console.group; @@ -153,6 +154,18 @@ export class VConsoleLogModel extends VConsoleModel { timeLog[label] = Date.now(); }).bind(window.console); + window.console.timeLog = ((label: string = '', ...args) => { + const pre = timeLog[label]; + let t = 0; + if (pre) { + t = Date.now() - pre; + } + this.addLog({ + type: 'log', + origData: [`${label}: ${t}ms`, ...args], + }); + }).bind(window.console); + window.console.timeEnd = ((label: string = '') => { const pre = timeLog[label]; let t = 0; diff --git a/src/log/logTool.ts b/src/log/logTool.ts index bc577253..b1810f5b 100644 --- a/src/log/logTool.ts +++ b/src/log/logTool.ts @@ -30,9 +30,10 @@ export const getValueTextAndType = (val: any, wrapString = true) => { text = getPreviewText(val); } else if (tool.isString(val)) { valueType = 'string'; - text = tool.getVisibleText(val); if (wrapString) { - text = '"' + text + '"'; + text = JSON.stringify(val); + } else { + text = tool.getVisibleText(val); } } else if (tool.isNumber(val)) { valueType = 'number'; diff --git a/src/network/fetch.proxy.ts b/src/network/fetch.proxy.ts index 4c1089f1..d23a25d7 100644 --- a/src/network/fetch.proxy.ts +++ b/src/network/fetch.proxy.ts @@ -78,10 +78,13 @@ export class ResponseProxyHandler implements ProxyHandler if (!readerReceivedValue) { readerReceivedValue = new Uint8Array(result.value); } else { - const newValue = new Uint8Array(readerReceivedValue.length + result.value.length); - newValue.set(readerReceivedValue); - newValue.set(result.value, readerReceivedValue.length); - readerReceivedValue = newValue; + // result.value may be undefined when result.done is true + if (result.value) { + const newValue = new Uint8Array(readerReceivedValue.length + result.value.length); + newValue.set(readerReceivedValue); + newValue.set(result.value, readerReceivedValue.length); + readerReceivedValue = newValue; + } } this.item.endTime = Date.now(); this.item.costTime = this.item.endTime - (this.item.startTime || this.item.endTime); diff --git a/src/network/network.svelte b/src/network/network.svelte index 79c25cab..5efd7edd 100644 --- a/src/network/network.svelte +++ b/src/network/network.svelte @@ -113,7 +113,7 @@
{req.startTimeText}
- {#if (req.requestHeader !== null)} + {#if (req.requestHeader)}
diff --git a/src/storage/storage.svelte b/src/storage/storage.svelte index b9dd214f..6031a13e 100644 --- a/src/storage/storage.svelte +++ b/src/storage/storage.svelte @@ -41,10 +41,10 @@ await model.removeItem(key); }; const onTapSave = async (key: string) => { + model.setItem(editingKey, editingVal); // set value anyway if (editingKey !== key) { await model.removeItem(key); // dirty key } - model.setItem(editingKey, editingVal); // set value anyway resetEditState(); // reset editing status }; const onTapEdit = async (key: string, value: string, i: number) => {