@bacons/expo-metro-runtime
Version:
Tools for making experimental Metro bundler features work
46 lines • 1.91 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.useRejectionHandler = void 0;
const react_1 = __importDefault(require("react"));
const ExceptionsManager_1 = __importDefault(require("./modules/ExceptionsManager"));
function useRejectionHandler() {
const hasError = react_1.default.useRef(false);
react_1.default.useEffect(() => {
function onUnhandledError(ev) {
hasError.current = true;
const error = ev === null || ev === void 0 ? void 0 : ev.error;
if (!error ||
!(error instanceof Error) ||
typeof error.stack !== "string") {
return;
}
ExceptionsManager_1.default.handleException(error,
// TODO(EvanBacon): Are these actually "fatal"?
false);
}
function onUnhandledRejection(ev) {
hasError.current = true;
const reason = ev === null || ev === void 0 ? void 0 : ev.reason;
if (!reason ||
!(reason instanceof Error) ||
typeof reason.stack !== "string") {
return;
}
ExceptionsManager_1.default.handleException(reason,
// TODO(EvanBacon): Are these actually "fatal"?
false);
}
window.addEventListener("unhandledrejection", onUnhandledRejection);
window.addEventListener("error", onUnhandledError);
return () => {
window.removeEventListener("error", onUnhandledError);
window.removeEventListener("unhandledrejection", onUnhandledRejection);
};
}, []);
return hasError;
}
exports.useRejectionHandler = useRejectionHandler;
//# sourceMappingURL=useRejectionHandler.js.map