one
Version:
One is a new React Framework that makes Vite serve both native and web.
632 lines (630 loc) • 28.1 kB
JavaScript
import { StackActions } from "@react-navigation/native";
import { Fragment, startTransition, useDeferredValue, useSyncExternalStore } from "react";
import { Platform } from "react-native";
import { devtoolsRegistry } from "../devtools/registry.native.js";
import { resolveHref } from "../link/href.native.js";
import { openExternalURL } from "../link/openExternalURL.native.js";
import { resolve } from "../link/path.native.js";
import { checkBlocker } from "../useBlocker.native.js";
import { assertIsReady } from "../utils/assertIsReady.native.js";
import { getLoaderPath, getPreloadCSSPath, getPreloadPath } from "../utils/cleanUrl.native.js";
import { dynamicImport } from "../utils/dynamicImport.native.js";
import { isVersionStale } from "../skewProtection.native.js";
import { shouldLinkExternally } from "../utils/url.native.js";
import { ParamValidationError, RouteValidationError, validateParams as runValidateParams } from "../validateParams.native.js";
import { extractParamsFromState, extractPathnameFromHref, extractSearchFromHref, findRouteNodeFromState, findAllRouteNodesFromState } from "./findRouteNode.native.js";
import { getRouteInfo } from "./getRouteInfo.native.js";
import { getRoutes } from "./getRoutes.native.js";
import { setLastAction } from "./lastAction.native.js";
import { getLinking, resetLinking, setupLinking } from "./linkingConfig.native.js";
import { sortRoutes } from "./sortRoutes.native.js";
import { getQualifiedRouteComponent } from "./useScreens.native.js";
import { preloadRouteModules } from "./useViteRoutes.native.js";
import { getNavigateAction } from "./utils/getNavigateAction.native.js";
import { setClientMatches } from "../useMatches.native.js";
import { findInterceptRoute, setNavigationType, updateURLWithoutNavigation, storeInterceptState } from "./interceptRoutes.native.js";
import { setSlotState } from "../views/Navigator.native.js";
import { clearNotFoundState, findNearestNotFoundRoute, setNotFoundState } from "../notFoundState.native.js";
function _instanceof(left, right) {
return right != null && typeof Symbol < "u" && right[Symbol.hasInstance] ? !!right[Symbol.hasInstance](left) : left instanceof right;
}
function _type_of(obj) {
"@swc/helpers - typeof";
return obj && typeof Symbol < "u" && obj.constructor === Symbol ? "symbol" : typeof obj;
}
var routeNode = null,
rootComponent,
protectedRouteRegistry = /* @__PURE__ */new Map();
function registerProtectedRoutes(contextKey, protectedScreens) {
protectedScreens.size === 0 ? protectedRouteRegistry.delete(contextKey) : protectedRouteRegistry.set(contextKey, protectedScreens);
}
function unregisterProtectedRoutes(contextKey) {
protectedRouteRegistry.delete(contextKey);
}
function isRouteProtected(href) {
var normalizedHref = href.replace(/^\/+|\/+$/g, ""),
_iteratorNormalCompletion = !0,
_didIteratorError = !1,
_iteratorError = void 0;
try {
for (var _iterator = protectedRouteRegistry[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = !0) {
var [contextKey, protectedScreens] = _step.value,
normalizedContextKey = contextKey.replace(/^\/+|\/+$/g, "");
if (normalizedHref.startsWith(normalizedContextKey)) {
var relativePath = normalizedHref.slice(normalizedContextKey.length).replace(/^\//, ""),
routeName = relativePath.split("/")[0] || "index";
if (protectedScreens.has(routeName)) return !0;
}
}
} catch (err) {
_didIteratorError = !0, _iteratorError = err;
} finally {
try {
!_iteratorNormalCompletion && _iterator.return != null && _iterator.return();
} finally {
if (_didIteratorError) throw _iteratorError;
}
}
return !1;
}
var hasAttemptedToHideSplash = !1,
initialState,
rootState,
nextState,
routeInfo,
splashScreenAnimationFrame,
navigationRef = null,
navigationRefSubscription,
rootStateSubscribers = /* @__PURE__ */new Set(),
loadingStateSubscribers = /* @__PURE__ */new Set(),
storeSubscribers = /* @__PURE__ */new Set(),
currentMatches = [],
validationState = {
status: "idle"
},
validationStateSubscribers = /* @__PURE__ */new Set();
function subscribeToValidationState(subscriber) {
return validationStateSubscribers.add(subscriber), function () {
return validationStateSubscribers.delete(subscriber);
};
}
function setValidationState(state) {
validationState = state;
var _iteratorNormalCompletion = !0,
_didIteratorError = !1,
_iteratorError = void 0;
try {
for (var _iterator = validationStateSubscribers[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = !0) {
var subscriber = _step.value;
subscriber(state);
}
} catch (err) {
_didIteratorError = !0, _iteratorError = err;
} finally {
try {
!_iteratorNormalCompletion && _iterator.return != null && _iterator.return();
} finally {
if (_didIteratorError) throw _iteratorError;
}
}
}
function getValidationState() {
return validationState;
}
function useValidationState() {
return useSyncExternalStore(subscribeToValidationState, getValidationState, getValidationState);
}
function initialize(context, ref, initialLocation) {
if (cleanUpState(), routeNode = getRoutes(context, {
ignoreEntryPoints: !0,
platform: Platform.OS
}), rootComponent = routeNode ? getQualifiedRouteComponent(routeNode) : Fragment, !routeNode && process.env.NODE_ENV === "production") throw new Error("No routes found");
if (process.env.ONE_DEBUG_ROUTER && routeNode) {
var _routeNode_slots,
formatRouteTree = function (node) {
for (var indent = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "", isLast = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : !0, _node_slots, prefix = indent + (isLast ? "\u2514\u2500 " : "\u251C\u2500 "), childIndent = indent + (isLast ? " " : "\u2502 "), dynamicBadge = node.dynamic ? ` [${node.dynamic.map(function (d) {
return d.name;
}).join(", ")}]` : "", typeBadge = node.type !== "layout" ? ` (${node.type})` : "", slotsBadge = !((_node_slots = node.slots) === null || _node_slots === void 0) && _node_slots.size ? ` {@${Array.from(node.slots.keys()).join(", @")}}` : "", routeName = node.route || "/", line = `${prefix}${routeName}${dynamicBadge}${typeBadge}${slotsBadge}`, visibleChildren = node.children.filter(function (child2) {
return !child2.internal;
}), i = 0; i < visibleChildren.length; i++) {
var child = visibleChildren[i],
childIsLast = i === visibleChildren.length - 1;
line += `
` + formatRouteTree(child, childIndent, childIsLast);
}
return line;
};
if (console.info(`[one] \u{1F4CD} Route structure:
${formatRouteTree(routeNode)}`), !((_routeNode_slots = routeNode.slots) === null || _routeNode_slots === void 0) && _routeNode_slots.size) {
console.info("[one] \u{1F4E6} Slots on root layout:");
var _iteratorNormalCompletion = !0,
_didIteratorError = !1,
_iteratorError = void 0;
try {
for (var _iterator = routeNode.slots[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = !0) {
var [slotName, slotConfig] = _step.value,
_slotConfig_defaultRoute;
console.info(` @${slotName}:`, {
defaultRoute: (_slotConfig_defaultRoute = slotConfig.defaultRoute) === null || _slotConfig_defaultRoute === void 0 ? void 0 : _slotConfig_defaultRoute.route,
interceptRoutes: slotConfig.interceptRoutes.map(function (r) {
return {
route: r.route,
intercept: r.intercept
};
})
});
}
} catch (err) {
_didIteratorError = !0, _iteratorError = err;
} finally {
try {
!_iteratorNormalCompletion && _iterator.return != null && _iterator.return();
} finally {
if (_didIteratorError) throw _iteratorError;
}
}
}
}
navigationRef = ref, setupLinkingAndRouteInfo(initialLocation), subscribeToNavigationChanges();
}
function cleanUpState() {
initialState = void 0, rootState = void 0, nextState = void 0, routeInfo = void 0, resetLinking(), navigationRefSubscription?.(), rootStateSubscribers.clear(), storeSubscribers.clear();
}
function setupLinkingAndRouteInfo(initialLocation) {
initialState = setupLinking(routeNode, initialLocation), initialState ? (rootState = initialState, routeInfo = getRouteInfo(initialState)) : routeInfo = {
unstable_globalHref: "",
pathname: "",
isIndex: !1,
params: {},
segments: []
};
}
function subscribeToNavigationChanges() {
navigationRefSubscription = navigationRef.addListener("state", function (data) {
var state = {
...data.data.state
};
state.key && hashes[state.key] && (state.hash = hashes[state.key], delete hashes[state.key]), hasAttemptedToHideSplash || (hasAttemptedToHideSplash = !0, splashScreenAnimationFrame = requestAnimationFrame(function () {})), nextOptions && (state = {
...state,
linkOptions: nextOptions
}, nextOptions = null);
var shouldUpdateSubscribers = nextState === state;
nextState = void 0, state && state !== rootState && (updateState(state, void 0), shouldUpdateSubscribers = !0), shouldUpdateSubscribers && startTransition(function () {
var _iteratorNormalCompletion = !0,
_didIteratorError = !1,
_iteratorError = void 0;
try {
for (var _iterator = rootStateSubscribers[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = !0) {
var subscriber = _step.value;
subscriber(state);
}
} catch (err) {
_didIteratorError = !0, _iteratorError = err;
} finally {
try {
!_iteratorNormalCompletion && _iterator.return != null && _iterator.return();
} finally {
if (_didIteratorError) throw _iteratorError;
}
}
});
}), startTransition(function () {
updateSnapshot();
var _iteratorNormalCompletion = !0,
_didIteratorError = !1,
_iteratorError = void 0;
try {
for (var _iterator = storeSubscribers[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = !0) {
var subscriber = _step.value;
subscriber();
}
} catch (err) {
_didIteratorError = !0, _iteratorError = err;
} finally {
try {
!_iteratorNormalCompletion && _iterator.return != null && _iterator.return();
} finally {
if (_didIteratorError) throw _iteratorError;
}
}
});
}
function navigate(url, options) {
return linkTo(resolveHref(url), "NAVIGATE", options);
}
function push(url, options) {
return linkTo(resolveHref(url), "PUSH", options);
}
function dismiss(count) {
process.env.ONE_DEBUG_ROUTER && console.info(`[one] \u{1F519} dismiss${count ? ` (${count})` : ""}`), navigationRef?.dispatch(StackActions.pop(count));
}
function replace(url, options) {
return linkTo(resolveHref(url), "REPLACE", options);
}
function setParams() {
var params = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {},
_navigationRef_current;
return assertIsReady(navigationRef), navigationRef == null || (_navigationRef_current = navigationRef.current) === null || _navigationRef_current === void 0 ? void 0 : _navigationRef_current.setParams(
// @ts-expect-error
params);
}
function dismissAll() {
process.env.ONE_DEBUG_ROUTER && console.info("[one] \u{1F519} dismissAll"), navigationRef?.dispatch(StackActions.popToTop());
}
function goBack() {
var _navigationRef_current;
process.env.ONE_DEBUG_ROUTER && console.info("[one] \u{1F519} goBack"), assertIsReady(navigationRef), navigationRef == null || (_navigationRef_current = navigationRef.current) === null || _navigationRef_current === void 0 || _navigationRef_current.goBack();
}
function canGoBack() {
var _ref, _navigationRef_current;
return navigationRef.isReady() && (_ref = navigationRef == null || (_navigationRef_current = navigationRef.current) === null || _navigationRef_current === void 0 ? void 0 : _navigationRef_current.canGoBack()) !== null && _ref !== void 0 ? _ref : !1;
}
function canDismiss() {
for (var state = rootState; state;) {
var _state_routes_state_index, _state_routes;
if (state.type === "stack" && state.routes.length > 1) return !0;
if (state.index === void 0) return !1;
state = (_state_routes = state.routes) === null || _state_routes === void 0 || (_state_routes_state_index = _state_routes[state.index]) === null || _state_routes_state_index === void 0 ? void 0 : _state_routes_state_index.state;
}
return !1;
}
function getSortedRoutes() {
if (!routeNode) throw new Error("No routes");
return routeNode.children.filter(function (route) {
return !route.internal;
}).sort(sortRoutes);
}
function updateState(state) {
var nextStateParam = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : state;
rootState = state, nextState = nextStateParam;
var nextRouteInfo = getRouteInfo(state);
if (!deepEqual(routeInfo, nextRouteInfo)) {
if (process.env.ONE_DEBUG_ROUTER) {
var from = routeInfo?.pathname || "(initial)",
to = nextRouteInfo.pathname,
params = Object.keys(nextRouteInfo.params || {}).length ? nextRouteInfo.params : void 0;
console.info(`[one] \u{1F9ED} ${from} \u2192 ${to}`, params ? {
params
} : "");
}
routeInfo = nextRouteInfo;
var params1 = extractParamsFromState(state),
newMatches = buildNativeMatches(state, nextRouteInfo.pathname, params1);
currentMatches = newMatches, setClientMatches(newMatches);
}
process.env.NODE_ENV === "development" && typeof window < "u" && (window.__oneDevtools = {
routeInfo: nextRouteInfo,
rootState: state,
routeNode,
getRoutes: function () {
return routeNode?.children || [];
},
getLoaderTimingHistory: function () {
var _ref, _devtoolsRegistry_getLoaderTimingHistory;
return (_ref = (_devtoolsRegistry_getLoaderTimingHistory = devtoolsRegistry.getLoaderTimingHistory) === null || _devtoolsRegistry_getLoaderTimingHistory === void 0 ? void 0 : _devtoolsRegistry_getLoaderTimingHistory.call(devtoolsRegistry)) !== null && _ref !== void 0 ? _ref : [];
},
getPreloadHistory
});
}
function subscribeToRootState(subscriber) {
return rootStateSubscribers.add(subscriber), function () {
rootStateSubscribers.delete(subscriber);
};
}
function subscribeToStore(subscriber) {
return storeSubscribers.add(subscriber), function () {
storeSubscribers.delete(subscriber);
};
}
function subscribeToLoadingState(subscriber) {
return loadingStateSubscribers.add(subscriber), function () {
loadingStateSubscribers.delete(subscriber);
};
}
function setLoadingState(state) {
startTransition(function () {
var _iteratorNormalCompletion = !0,
_didIteratorError = !1,
_iteratorError = void 0;
try {
for (var _iterator = loadingStateSubscribers[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = !0) {
var listener = _step.value;
listener(state);
}
} catch (err) {
_didIteratorError = !0, _iteratorError = err;
} finally {
try {
!_iteratorNormalCompletion && _iterator.return != null && _iterator.return();
} finally {
if (_didIteratorError) throw _iteratorError;
}
}
});
}
var currentSnapshot = null;
function updateSnapshot() {
currentSnapshot = getSnapshot();
}
function snapshot() {
return currentSnapshot;
}
function getSnapshot() {
return {
linkTo,
routeNode,
rootComponent,
linking: getLinking(),
hasAttemptedToHideSplash,
initialState,
rootState,
nextState,
routeInfo,
splashScreenAnimationFrame,
navigationRef,
navigationRefSubscription,
rootStateSubscribers,
storeSubscribers
};
}
function rootStateSnapshot() {
return rootState;
}
function routeInfoSnapshot() {
return routeInfo;
}
function useOneRouter() {
var state = useSyncExternalStore(subscribeToStore, snapshot, snapshot);
return useDeferredValue(state);
}
function syncStoreRootState() {
if (!navigationRef) throw new Error("No navigationRef, possible duplicate One dep");
if (navigationRef.isReady()) {
var currentState = navigationRef.getRootState();
rootState !== currentState && updateState(currentState);
}
}
function useStoreRootState() {
syncStoreRootState();
var state = useSyncExternalStore(subscribeToRootState, rootStateSnapshot, rootStateSnapshot);
return useDeferredValue(state);
}
function useStoreRouteInfo() {
syncStoreRootState();
var state = useSyncExternalStore(subscribeToRootState, routeInfoSnapshot, routeInfoSnapshot);
return state;
}
function cleanup() {
splashScreenAnimationFrame && cancelAnimationFrame(splashScreenAnimationFrame);
}
var preloadingLoader = {};
var preloadedLoaderData = {},
cssInjectFunctions = {},
preloadHistory = [];
function getPreloadHistory() {
return preloadHistory;
}
function preloadRoute(href) {
var injectCSS = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : !1;
if (0) {
if (process.env.NODE_ENV === "development") var normalizedHref;
if (injectCSS) var _preloadingLoader_href;
}
}
function normalizeLoaderPath(href) {
var url = new URL(href, "http://example.com");
return url.pathname.replace(/\/index$/, "").replace(/\/$/, "") || "/";
}
function buildClientMatches(href, matchingNode, params, loaderData) {
var pathname = extractPathnameFromHref(href),
routeId = matchingNode?.contextKey || pathname,
layoutMatches = currentMatches.filter(function (m) {
return m.routeId.includes("_layout");
}),
pageMatch = {
routeId,
pathname,
params,
loaderData
};
return [...layoutMatches, pageMatch];
}
function buildNativeMatches(state, pathname, params) {
var allNodes = findAllRouteNodesFromState(state, routeNode);
return allNodes.map(function (node) {
return {
routeId: node.contextKey || pathname,
pathname,
params,
loaderData: void 0
};
});
}
function initClientMatches(matches) {
currentMatches = matches, setClientMatches(matches);
}
async function linkTo(href, event, options) {
if (process.env.ONE_DEBUG_ROUTER && console.info(`[one] \u{1F517} ${event || "NAVIGATE"} ${href}`), setNavigationType("soft"), clearNotFoundState(), href[0] !== "#") {
if (shouldLinkExternally(href)) {
openExternalURL(href);
return;
}
if (isVersionStale()) {
window.location.href = href;
return;
}
if (!checkBlocker(href, event === "REPLACE" ? "replace" : "push") && !isRouteProtected(href)) {
var currentLayoutNode = routeNode,
currentPath = routeInfo?.pathname || "/",
interceptResult = findInterceptRoute(href, currentLayoutNode, currentPath);
if (interceptResult) {
var {
interceptRoute,
slotName,
layoutContextKey,
params
} = interceptResult,
scopedSlotKey = `${layoutContextKey}:${slotName}`;
storeInterceptState(scopedSlotKey, interceptRoute, params), updateURLWithoutNavigation(href), setSlotState(scopedSlotKey, {
activeRouteKey: interceptRoute.contextKey,
activeRouteNode: interceptRoute,
params,
isIntercepted: !0
});
return;
}
assertIsReady(navigationRef);
var current = navigationRef.current;
if (current == null) throw new Error("Couldn't find a navigation object. Is your component inside NavigationContainer?");
var linking = getLinking();
if (!linking) throw new Error("Attempted to link to route when no routes are present");
if (setLastAction(), href === ".." || href === "../") {
current.goBack();
return;
}
if (href.startsWith(".")) {
var _ref,
_routeInfo_segments,
base = (_ref = routeInfo == null || (_routeInfo_segments = routeInfo.segments) === null || _routeInfo_segments === void 0 ? void 0 : _routeInfo_segments.map(function (segment) {
var _routeInfo_params;
if (!segment.startsWith("[")) return segment;
if (segment.startsWith("[...")) {
var _ref2, _routeInfo_params1, _params_split;
segment = segment.slice(4, -1);
var params3 = routeInfo == null || (_routeInfo_params1 = routeInfo.params) === null || _routeInfo_params1 === void 0 ? void 0 : _routeInfo_params1[segment];
return Array.isArray(params3) ? params3.join("/") : (_ref2 = params3 == null || (_params_split = params3.split(",")) === null || _params_split === void 0 ? void 0 : _params_split.join("/")) !== null && _ref2 !== void 0 ? _ref2 : "";
}
return segment = segment.slice(1, -1), routeInfo == null || (_routeInfo_params = routeInfo.params) === null || _routeInfo_params === void 0 ? void 0 : _routeInfo_params[segment];
}).filter(Boolean).join("/")) !== null && _ref !== void 0 ? _ref : "/";
routeInfo?.isIndex || (base += "/.."), href = resolve(base, href);
}
var state = linking.getStateFromPath(href, linking.config);
if (!state || state.routes.length === 0) {
console.error("Could not generate a valid navigation state for the given path: " + href), console.error("linking.config", linking.config), console.error("routes", getSortedRoutes());
return;
}
setLoadingState("loading");
var normalizedPreloadPath = normalizeLoaderPath(href);
if (!(normalizedPreloadPath in preloadedLoaderData) && !(href in preloadedLoaderData)) await preloadRoute(href, !0);else if (process.env.NODE_ENV !== "development") {
var inject = cssInjectFunctions[href];
inject && inject().catch(function () {});
}
var preloadResult = preloadedLoaderData[normalizedPreloadPath];
if (preloadResult?.__oneRedirect) {
var redirectTarget = preloadResult.__oneRedirect;
delete preloadedLoaderData[normalizedPreloadPath], delete preloadingLoader[normalizedPreloadPath], delete preloadedLoaderData[href], delete preloadingLoader[href], setLoadingState("loaded"), linkTo(redirectTarget, "REPLACE");
return;
}
if (preloadResult?.__oneError === 404) {
delete preloadedLoaderData[normalizedPreloadPath], delete preloadingLoader[normalizedPreloadPath], delete preloadedLoaderData[href], delete preloadingLoader[href], setLoadingState("loaded");
var notFoundRoute = findNearestNotFoundRoute(href, routeNode);
setNotFoundState({
notFoundPath: preloadResult.__oneNotFoundPath || "/+not-found",
notFoundRouteNode: notFoundRoute || void 0,
originalPath: href
});
return;
}
var matchingRouteNode = findRouteNodeFromState(state, routeNode);
if (matchingRouteNode?.loadRoute) {
setValidationState({
status: "validating",
lastValidatedHref: href
});
try {
var loadedRoute = matchingRouteNode.loadRoute(),
params1 = extractParamsFromState(state),
search = extractSearchFromHref(href),
pathname = extractPathnameFromHref(href);
if (loadedRoute.validateParams && runValidateParams(loadedRoute.validateParams, params1), loadedRoute.validateRoute) {
var validationResult = await loadedRoute.validateRoute({
params: params1,
search,
pathname,
href
});
if (validationResult && !validationResult.valid) {
var _$error = new RouteValidationError(validationResult.error || "Route validation failed", validationResult.details);
throw setValidationState({
status: "error",
error: _$error,
lastValidatedHref: href
}), _$error;
}
}
setValidationState({
status: "valid",
lastValidatedHref: href
});
} catch (error) {
if (error && typeof error.then == "function") await error.catch(function () {}), setValidationState({
status: "valid",
lastValidatedHref: href
});else throw (_instanceof(error, ParamValidationError) || _instanceof(error, RouteValidationError)) && setValidationState({
status: "error",
error,
lastValidatedHref: href
}), error;
}
}
var normalizedPath = normalizeLoaderPath(href),
loaderData = preloadedLoaderData[normalizedPath],
params2 = extractParamsFromState(state),
newMatches = buildClientMatches(href, matchingRouteNode, params2, loaderData);
currentMatches = newMatches, setClientMatches(newMatches);
var rootState2 = navigationRef.getRootState(),
hash = href.indexOf("#");
rootState2.key && hash > 0 && (hashes[rootState2.key] = href.slice(hash)), nextOptions = options ?? null, startTransition(function () {
var action = getNavigateAction(state, rootState2, event),
current2 = navigationRef.getCurrentRoute();
navigationRef.dispatch(action);
var warningTm,
interval = setInterval(function () {
var next = navigationRef.getCurrentRoute();
current2 !== next && setTimeout(function () {
setLoadingState("loaded");
}), clearTimeout(warningTm), clearTimeout(interval);
}, 16);
process.env.NODE_ENV === "development" && (warningTm = setTimeout(function () {
console.warn("Routing took more than 8 seconds");
}, 1e3));
});
}
}
}
var hashes = {},
nextOptions = null;
function deepEqual(a, b) {
if (a === b) return !0;
if (Array.isArray(a) && Array.isArray(b)) {
if (a.length !== b.length) return !1;
for (var i = 0; i < a.length; i++) if (!deepEqual(a[i], b[i])) return !1;
return !0;
}
if ((typeof a > "u" ? "undefined" : _type_of(a)) === "object" && (typeof b > "u" ? "undefined" : _type_of(b)) === "object") {
var keysA = Object.keys(a),
keysB = Object.keys(b);
if (keysA.length !== keysB.length) return !1;
var _iteratorNormalCompletion = !0,
_didIteratorError = !1,
_iteratorError = void 0;
try {
for (var _iterator = keysA[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = !0) {
var key = _step.value;
if (!deepEqual(a[key], b[key])) return !1;
}
} catch (err) {
_didIteratorError = !0, _iteratorError = err;
} finally {
try {
!_iteratorNormalCompletion && _iterator.return != null && _iterator.return();
} finally {
if (_didIteratorError) throw _iteratorError;
}
}
return !0;
}
return !1;
}
export { canDismiss, canGoBack, cleanup, dismiss, dismissAll, getPreloadHistory, getSortedRoutes, getValidationState, goBack, hasAttemptedToHideSplash, initClientMatches, initialState, initialize, isRouteProtected, linkTo, navigate, navigationRef, preloadRoute, preloadedLoaderData, preloadingLoader, push, registerProtectedRoutes, replace, rootComponent, rootState, rootStateSnapshot, routeInfo, routeInfoSnapshot, routeNode, setLoadingState, setParams, setValidationState, snapshot, subscribeToLoadingState, subscribeToRootState, subscribeToStore, subscribeToValidationState, unregisterProtectedRoutes, updateState, useOneRouter, useStoreRootState, useStoreRouteInfo, useValidationState };
//# sourceMappingURL=router.native.js.map