From ae4abbd76151ac3e7c07bafa5e1bb478994f5278 Mon Sep 17 00:00:00 2001 From: rosen-vladimirov Date: Thu, 9 May 2019 08:50:17 +0300 Subject: [PATCH] fix: logger changes broke trace and some hooks `--log trace` is broken as we are tring to iterate over object created with `Object.create(null)`. It uses the prototype of null, so it does not have `hasOwnProperty` method. Filter such objects from our checks in logger. Also nativescript-plugin-firebase uses logger.out, which has been deleted, get it back for backwards compatibility and delete it in 6.0.0 release. --- lib/common/logger/logger.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/common/logger/logger.ts b/lib/common/logger/logger.ts index 9047bbbbb0..4768e61e7e 100644 --- a/lib/common/logger/logger.ts +++ b/lib/common/logger/logger.ts @@ -81,6 +81,15 @@ export class Logger implements ILogger { this.logMessage(args, LoggerLevel.INFO); } + /** + * DEPRECATED + * Present only for backwards compatibility as some plugins (nativescript-plugin-firebase) + * use $logger.out in their hooks + */ + out(...args: any[]): void { + this.info(args); + } + debug(...args: any[]): void { const encodedArgs: string[] = this.getPasswordEncodedArguments(args); this.logMessage(encodedArgs, LoggerLevel.DEBUG); @@ -159,7 +168,8 @@ export class Logger implements ILogger { const result: any = {}; const cleanedData = _.cloneDeep(data); - const dataToCheck = data.filter(el => typeof el === "object"); + // objects created with Object.create(null) do not have `hasOwnProperty` function + const dataToCheck = data.filter(el => typeof el === "object" && el.hasOwnProperty && typeof el.hasOwnProperty === "function"); for (const element of dataToCheck) { if (opts.length === 0) {