expo-router
Version:
Expo Router is a file-based router for React Native and web applications.
56 lines • 2.26 kB
JavaScript
/**
* Copyright © 2024 650 Industries.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
'use client';
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.App = void 0;
const react_1 = __importDefault(require("react"));
const react_native_safe_area_context_1 = require("react-native-safe-area-context");
const client_1 = require("./router/client");
const ErrorBoundary_1 = require("../views/ErrorBoundary");
const Try_1 = require("../views/Try");
// Add root error recovery.
function RootErrorBoundary(props) {
react_1.default.useEffect(() => {
function refetchRoute() {
if (props.error) {
props.retry();
}
}
// TODO: Only strip when not connected to a dev server.
if (process.env.NODE_ENV === 'development') {
globalThis.__EXPO_RSC_RELOAD_LISTENERS__ ||= [];
const index = globalThis.__EXPO_RSC_RELOAD_LISTENERS__.indexOf(globalThis.__EXPO_REFETCH_ROUTE__);
if (index !== -1) {
globalThis.__EXPO_RSC_RELOAD_LISTENERS__.splice(index, 1, refetchRoute);
}
else {
globalThis.__EXPO_RSC_RELOAD_LISTENERS__.unshift(refetchRoute);
}
globalThis.__EXPO_REFETCH_ROUTE__ = refetchRoute;
}
}, [props.error, props.retry]);
return (<ErrorBoundary_1.ErrorBoundary error={props.error} retry={() => {
// TODO: Invalidate the cache automatically when the request fails.
// Invalidate the fetch cache so we can retry the request.
globalThis.__EXPO_REFETCH_ROUTE_NO_CACHE__?.();
return props.retry();
}}/>);
}
// Must be exported or Fast Refresh won't update the context
function App() {
return (<react_native_safe_area_context_1.SafeAreaProvider>
<Try_1.Try catch={RootErrorBoundary}>
<client_1.Router />
</Try_1.Try>
</react_native_safe_area_context_1.SafeAreaProvider>);
}
exports.App = App;
//# sourceMappingURL=entry.js.map