react-native-filament
Version:
A real-time physically based 3D rendering engine for React Native
52 lines (49 loc) • 1.71 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.reportFatalError = reportFatalError;
exports.reportWorkletError = reportWorkletError;
exports.wrapWithErrorHandler = wrapWithErrorHandler;
var _reactNativeWorkletsCore = require("react-native-worklets-core");
/**
* Report an error to react native's `ErrorUtils` if available, or log to console otherwise.
*/
function reportFatalError(error) {
// @ts-expect-error this is defined by react-native.
if (global.ErrorUtils != null) {
// @ts-expect-error this is defined by react-native.
global.ErrorUtils.reportFatalError(error);
} else {
console.error(`An unknown Filament error occurred!`, error);
}
}
const throwErrorOnJS = _reactNativeWorkletsCore.Worklets.createRunOnJS((message, stack) => {
const error = new Error();
error.message = message;
error.stack = stack;
error.name = 'Filament Error';
// @ts-expect-error this is react-native specific
error.jsEngine = 'Filament';
// From react-native:
// @ts-ignore the reportFatalError method is an internal method of ErrorUtils not exposed in the type definitions
reportFatalError(error);
});
function reportWorkletError(error) {
'worklet';
const safeError = error;
const message = safeError != null && 'message' in safeError ? safeError.message : 'Filament threw an error.';
throwErrorOnJS(message, safeError === null || safeError === void 0 ? void 0 : safeError.stack);
}
function wrapWithErrorHandler(callback) {
return (...args) => {
'worklet';
try {
return callback(...args);
} catch (error) {
reportFatalError(error);
throw error;
}
};
}
//# sourceMappingURL=ErrorUtils.js.map