From ebcaadedf1f01acf228c41d8860e722f95043062 Mon Sep 17 00:00:00 2001 From: Pavel Feldman Date: Tue, 25 Feb 2020 07:09:27 -0800 Subject: [PATCH] feat(log): log only user api calls with DEBUG=pw:api (#1029) --- index.js | 2 +- src/helper.ts | 33 +++++++++++++++++++++++++++------ 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/index.js b/index.js index 4137eff9e1..7ab40e1018 100644 --- a/index.js +++ b/index.js @@ -25,7 +25,7 @@ const { WebKit } = require('./lib/server/webkit'); for (const className in api) { if (typeof api[className] === 'function') - helper.installApiHooks(className, api[className]); + helper.installApiHooks(className[0].toLowerCase() + className.substring(1), api[className]); } module.exports = { diff --git a/src/helper.ts b/src/helper.ts index 0f421375df..712089d78a 100644 --- a/src/helper.ts +++ b/src/helper.ts @@ -51,16 +51,28 @@ class Helper { if (!isAsync && !log.enabled) continue; Reflect.set(classType.prototype, methodName, function(this: any, ...args: any[]) { + const syncStack: any = {}; + Error.captureStackTrace(syncStack); if (log.enabled) { - if (args.length) - log(`${className}.${methodName} %o`, args); - else - log(`${className}.${methodName}`); + const frames = syncStack.stack.substring('Error\n'.length) + .split('\n') + .map((f: string) => f.replace(/\s+at\s/, '').trim()); + const userCall = frames.length <= 1 || !frames[1].includes('playwright/lib'); + if (userCall) { + const match = /([^/\\]+)(:\d+:\d+)[)]?$/.exec(frames[1]); + let location = ''; + if (match) { + const fileName = helper.trimMiddle(match[1], 20 - match[2].length); + location = `\u001b[33m[${fileName}${match[2]}]\u001b[39m `; + } + if (args.length) + log(`${location}${className}.${methodName} %o`, args); + else + log(`${location}${className}.${methodName}`); + } } if (!isAsync) return method.call(this, ...args); - const syncStack: any = {}; - Error.captureStackTrace(syncStack); return method.call(this, ...args).catch((e: any) => { const stack = syncStack.stack.substring(syncStack.stack.indexOf('\n') + 1); const clientStack = stack.substring(stack.indexOf('\n')); @@ -229,6 +241,15 @@ class Helper { urlString = 'http://' + urlString; return urlString; } + + static trimMiddle(string: string, maxLength: number) { + if (string.length <= maxLength) + return string; + + const leftHalf = maxLength >> 1; + const rightHalf = maxLength - leftHalf - 1; + return string.substr(0, leftHalf) + '\u2026' + string.substr(this.length - rightHalf, rightHalf); + } } export function assert(value: any, message?: string): asserts value {