1*a5fb1ba8SEvan Bacon"use strict";
226ad19fcSEvan Bacon/**
326ad19fcSEvan Bacon * Copyright (c) 650 Industries.
426ad19fcSEvan Bacon * Copyright (c) Meta Platforms, Inc. and affiliates.
526ad19fcSEvan Bacon *
626ad19fcSEvan Bacon * This source code is licensed under the MIT license found in the
726ad19fcSEvan Bacon * LICENSE file in the root directory of this source tree.
826ad19fcSEvan Bacon */
9*a5fb1ba8SEvan Baconvar __importDefault = (this && this.__importDefault) || function (mod) {
10*a5fb1ba8SEvan Bacon    return (mod && mod.__esModule) ? mod : { "default": mod };
11*a5fb1ba8SEvan Bacon};
12*a5fb1ba8SEvan BaconObject.defineProperty(exports, "__esModule", { value: true });
13*a5fb1ba8SEvan Baconconst parseErrorStack_1 = __importDefault(require("../parseErrorStack"));
1426ad19fcSEvan Baconclass SyntheticError extends Error {
1526ad19fcSEvan Bacon    name = '';
1626ad19fcSEvan Bacon}
1726ad19fcSEvan Bacon/**
1826ad19fcSEvan Bacon * Handles the developer-visible aspect of errors and exceptions
1926ad19fcSEvan Bacon */
2026ad19fcSEvan Baconlet exceptionID = 0;
2126ad19fcSEvan Baconfunction parseException(e, isFatal) {
22*a5fb1ba8SEvan Bacon    const stack = (0, parseErrorStack_1.default)(e?.stack);
2326ad19fcSEvan Bacon    const currentExceptionID = ++exceptionID;
2426ad19fcSEvan Bacon    const originalMessage = e.message || '';
2526ad19fcSEvan Bacon    let message = originalMessage;
2626ad19fcSEvan Bacon    if (e.componentStack != null) {
2726ad19fcSEvan Bacon        message += `\n\nThis error is located at:${e.componentStack}`;
2826ad19fcSEvan Bacon    }
2926ad19fcSEvan Bacon    const namePrefix = e.name == null || e.name === '' ? '' : `${e.name}: `;
3026ad19fcSEvan Bacon    if (!message.startsWith(namePrefix)) {
3126ad19fcSEvan Bacon        message = namePrefix + message;
3226ad19fcSEvan Bacon    }
3326ad19fcSEvan Bacon    message = e.jsEngine == null ? message : `${message}, js engine: ${e.jsEngine}`;
3426ad19fcSEvan Bacon    const data = {
3526ad19fcSEvan Bacon        message,
3626ad19fcSEvan Bacon        originalMessage: message === originalMessage ? null : originalMessage,
3726ad19fcSEvan Bacon        name: e.name == null || e.name === '' ? null : e.name,
3826ad19fcSEvan Bacon        componentStack: typeof e.componentStack === 'string' ? e.componentStack : null,
3926ad19fcSEvan Bacon        stack,
4026ad19fcSEvan Bacon        id: currentExceptionID,
4126ad19fcSEvan Bacon        isFatal,
4226ad19fcSEvan Bacon        extraData: {
4326ad19fcSEvan Bacon            jsEngine: e.jsEngine,
4426ad19fcSEvan Bacon            rawStack: e.stack,
4526ad19fcSEvan Bacon        },
4626ad19fcSEvan Bacon    };
4726ad19fcSEvan Bacon    return {
4826ad19fcSEvan Bacon        ...data,
4926ad19fcSEvan Bacon        isComponentError: !!e.isComponentError,
5026ad19fcSEvan Bacon    };
5126ad19fcSEvan Bacon}
5226ad19fcSEvan Bacon/**
5326ad19fcSEvan Bacon * Logs exceptions to the (native) console and displays them
5426ad19fcSEvan Bacon */
5526ad19fcSEvan Baconfunction handleException(e) {
5626ad19fcSEvan Bacon    let error;
5726ad19fcSEvan Bacon    if (e instanceof Error) {
5826ad19fcSEvan Bacon        error = e;
5926ad19fcSEvan Bacon    }
6026ad19fcSEvan Bacon    else {
6126ad19fcSEvan Bacon        // Workaround for reporting errors caused by `throw 'some string'`
6226ad19fcSEvan Bacon        // Unfortunately there is no way to figure out the stacktrace in this
6326ad19fcSEvan Bacon        // case, so if you ended up here trying to trace an error, look for
6426ad19fcSEvan Bacon        // `throw '<error message>'` somewhere in your codebase.
6526ad19fcSEvan Bacon        error = new SyntheticError(e);
6626ad19fcSEvan Bacon    }
6726ad19fcSEvan Bacon    require('../../LogBox').default.addException(parseException(error, true));
6826ad19fcSEvan Bacon}
6926ad19fcSEvan Baconconst ErrorUtils = {
7026ad19fcSEvan Bacon    parseException,
7126ad19fcSEvan Bacon    handleException,
7226ad19fcSEvan Bacon    SyntheticError,
7326ad19fcSEvan Bacon};
74*a5fb1ba8SEvan Baconexports.default = ErrorUtils;
7526ad19fcSEvan Bacon//# sourceMappingURL=index.js.map