+
+// ---------------------------------------------------------------------------
+
+function removeCyclicValues () {
+ const seen = new WeakSet()
+
+ // Thanks: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Cyclic_object_value#Examples
+ return (key: string, value: any) => {
+ if (key === 'cert') return 'Replaced by the logger to avoid large log message'
+
+ if (typeof value === 'object' && value !== null) {
+ if (seen.has(value)) return
+
+ seen.add(value)
+ }
+
+ if (value instanceof Set) {
+ return Array.from(value)
+ }
+
+ if (value instanceof Map) {
+ return Array.from(value.entries())
+ }
+
+ if (value instanceof Error) {
+ const error = {}
+
+ Object.getOwnPropertyNames(value).forEach(key => { error[key] = value[key] })
+
+ return error
+ }
+
+ return value
+ }
+}
+
+function getAdditionalInfo (info: any) {
+ const toOmit = [ 'label', 'timestamp', 'level', 'message', 'sql', 'tags' ]
+
+ return omit(info, toOmit)
+}