Allow cyclic objects in console logs

This fixes a bug in rageshake handling that would throw an error if you log a
cyclic object, which can be convenient during development.
pull/21833/head
J. Ryan Stinnett 2019-10-08 14:29:03 +01:00
parent 7d96517139
commit 538c3795d8
1 changed files with 17 additions and 2 deletions

View File

@ -1,6 +1,7 @@
/* /*
Copyright 2017 OpenMarket Ltd Copyright 2017 OpenMarket Ltd
Copyright 2018 New Vector Ltd Copyright 2018 New Vector Ltd
Copyright 2019 The Matrix.org Foundation C.I.C.
Licensed under the Apache License, Version 2.0 (the "License"); Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License. you may not use this file except in compliance with the License.
@ -76,8 +77,22 @@ class ConsoleLogger {
args = args.map((arg) => { args = args.map((arg) => {
if (arg instanceof Error) { if (arg instanceof Error) {
return arg.message + (arg.stack ? `\n${arg.stack}` : ''); return arg.message + (arg.stack ? `\n${arg.stack}` : '');
} else if (typeof(arg) === 'object') { } else if (typeof (arg) === 'object') {
return JSON.stringify(arg); try {
return JSON.stringify(arg);
} catch (e) {
// In development, it can be useful to log complex cyclic
// objects to the console for inspection. This is fine for
// the console, but default `stringify` can't handle that.
// We workaround this by using a special replacer function
// to only log values of the root object and avoid cycles.
return JSON.stringify(arg, (key, value) => {
if (key && typeof value === "object") {
return "<object>";
}
return value;
});
}
} else { } else {
return arg; return arg;
} }