From 46c84581cae3090766c1bb82623674fba1c1223a Mon Sep 17 00:00:00 2001 From: Salakar Date: Fri, 17 Mar 2017 15:41:25 +0000 Subject: [PATCH] firebase.crash().report() now accepts an error instead of a string, a string version of the error is generated before sending to native side. --- lib/modules/crash/index.js | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/lib/modules/crash/index.js b/lib/modules/crash/index.js index 9e60ca66..436952e9 100644 --- a/lib/modules/crash/index.js +++ b/lib/modules/crash/index.js @@ -30,10 +30,26 @@ export default class Analytics extends Base { * exceptions where recovery is not possible. * NOTE: on iOS, this will cause the app to crash as it's the only way to ensure the exception * gets sent to Firebase. Otherwise it just gets lost as a log message. - * @param {string} message + * @param {Error} error + * @param maxStackSize */ - report(message: string): void { - FirebaseCrash.report(message); + report(error: Error, maxStackSize: Number = 10): void { + if (!error || !error.code || !error.message) return; + + let errorMessage = `Message: ${error.message}\r\n`; + + if (error.code) { + errorMessage = `${errorMessage}Code: ${error.code}\r\n`; + } + + const stackRows = error.stack.split('\n'); + errorMessage = `${errorMessage}\r\nStack: \r\n`; + for (let i = 0, len = stackRows.length; i < len; i++) { + if (i === maxStackSize) break; + errorMessage = `${errorMessage} - ${stackRows[i]}\r\n`; + } + + FirebaseCrash.report(errorMessage); } get namespace(): string {