UNPKG

one

Version:

One is a new React Framework that makes Vite serve both native and web.

833 lines (830 loc) 33.9 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var router_exports = {}; __export(router_exports, { canDismiss: () => canDismiss, canGoBack: () => canGoBack, cleanup: () => cleanup, dismiss: () => dismiss, dismissAll: () => dismissAll, getPreloadHistory: () => getPreloadHistory, getSortedRoutes: () => getSortedRoutes, getValidationState: () => getValidationState, goBack: () => goBack, handleNavigationContainerStateChange: () => handleNavigationContainerStateChange, hasAttemptedToHideSplash: () => hasAttemptedToHideSplash, initClientMatches: () => initClientMatches, initialPathname: () => initialPathname, initialState: () => initialState, initialize: () => initialize, isRouteProtected: () => isRouteProtected, linkTo: () => linkTo, navigate: () => navigate, navigationRef: () => navigationRef, preloadRoute: () => preloadRoute, preloadedLoaderData: () => preloadedLoaderData, preloadingLoader: () => preloadingLoader, push: () => push, registerProtectedRoutes: () => registerProtectedRoutes, replace: () => replace, rootComponent: () => rootComponent, rootState: () => rootState, rootStateSnapshot: () => rootStateSnapshot, routeInfo: () => routeInfo, routeInfoSnapshot: () => routeInfoSnapshot, routeNode: () => routeNode, setLoadingState: () => setLoadingState, setParams: () => setParams, setValidationState: () => setValidationState, snapshot: () => snapshot, subscribeToLoadingState: () => subscribeToLoadingState, subscribeToRootState: () => subscribeToRootState, subscribeToStore: () => subscribeToStore, subscribeToValidationState: () => subscribeToValidationState, unregisterProtectedRoutes: () => unregisterProtectedRoutes, updateState: () => updateState, useOneRouter: () => useOneRouter, useStoreRootState: () => useStoreRootState, useStoreRouteInfo: () => useStoreRouteInfo, useValidationState: () => useValidationState }); module.exports = __toCommonJS(router_exports); var import_native = require("@react-navigation/native"); var import_react = require("react"); var import_react_native = require("react-native"); var import_registry = require("../devtools/registry.native.js"); var import_href = require("../link/href.native.js"); var import_openExternalURL = require("../link/openExternalURL.native.js"); var import_path = require("../link/path.native.js"); var import_useBlocker = require("../useBlocker.native.js"); var import_assertIsReady = require("../utils/assertIsReady.native.js"); require("../utils/cleanUrl.native.js"); require("../utils/dynamicImport.native.js"); var import_skewProtection = require("../skewProtection.native.js"); var import_url = require("../utils/url.native.js"); var import_validateParams = require("../validateParams.native.js"); var import_findRouteNode = require("./findRouteNode.native.js"); var import_getRouteInfo = require("./getRouteInfo.native.js"); var import_getRoutes = require("./getRoutes.native.js"); var import_lastAction = require("./lastAction.native.js"); var import_linkingConfig = require("./linkingConfig.native.js"); var import_sortRoutes = require("./sortRoutes.native.js"); var import_useScreens = require("./useScreens.native.js"); require("./useViteRoutes.native.js"); var import_getNavigateAction = require("./utils/getNavigateAction.native.js"); var import_useMatches = require("../useMatches.native.js"); var import_interceptRoutes = require("./interceptRoutes.native.js"); var import_Navigator = require("../views/Navigator.native.js"); var import_notFoundState = require("../notFoundState.native.js"); function _instanceof(left, right) { if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) return !!right[Symbol.hasInstance](left);else return left instanceof right; } function _type_of(obj) { "@swc/helpers - typeof"; return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj; } var routeNode = null; var rootComponent; var protectedRouteRegistry = /* @__PURE__ */new Map(); function registerProtectedRoutes(contextKey, protectedScreens) { if (protectedScreens.size === 0) protectedRouteRegistry.delete(contextKey);else protectedRouteRegistry.set(contextKey, protectedScreens); } function unregisterProtectedRoutes(contextKey) { protectedRouteRegistry.delete(contextKey); } function isRouteProtected(href) { var normalizedHref = href.replace(/^\/+|\/+$/g, ""); var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0; try { for (var _iterator = protectedRouteRegistry[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var [contextKey, protectedScreens] = _step.value; var normalizedContextKey = contextKey.replace(/^\/+|\/+$/g, ""); if (normalizedHref.startsWith(normalizedContextKey)) { var routeName = normalizedHref.slice(normalizedContextKey.length).replace(/^\//, "").split("/")[0] || "index"; var normalizedRouteName = routeName.replace(/\/index$/, ""); if (protectedScreens.has(routeName) || protectedScreens.has(normalizedRouteName)) return true; } } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return != null) _iterator.return(); } finally { if (_didIteratorError) throw _iteratorError; } } return false; } var hasAttemptedToHideSplash = false; var initialState; var rootState; var initialPathname; var nextState; var routeInfo; var splashScreenAnimationFrame; var navigationRef = null; var rootStateSubscribers = /* @__PURE__ */new Set(); var loadingStateSubscribers = /* @__PURE__ */new Set(); var storeSubscribers = /* @__PURE__ */new Set(); var currentMatches = []; var validationState = { status: "idle" }; var validationStateSubscribers = /* @__PURE__ */new Set(); function subscribeToValidationState(subscriber) { validationStateSubscribers.add(subscriber); return function () { return validationStateSubscribers.delete(subscriber); }; } function setValidationState(state) { validationState = state; var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0; try { for (var _iterator = validationStateSubscribers[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var subscriber = _step.value; subscriber(state); } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return != null) _iterator.return(); } finally { if (_didIteratorError) throw _iteratorError; } } } function getValidationState() { return validationState; } function useValidationState() { return (0, import_react.useSyncExternalStore)(subscribeToValidationState, getValidationState, getValidationState); } var cachedRouteNode = null; var cachedRootComponent = null; var cachedContext = null; function initialize(context, ref, initialLocation) { cleanUpState(); if (context !== cachedContext || !cachedRouteNode) { cachedRouteNode = (0, import_getRoutes.getRoutes)(context, { ignoreEntryPoints: true, platform: import_react_native.Platform.OS }); cachedRootComponent = cachedRouteNode ? (0, import_useScreens.getQualifiedRouteComponent)(cachedRouteNode) : import_react.Fragment; cachedContext = context; } routeNode = cachedRouteNode; rootComponent = cachedRootComponent || import_react.Fragment; if (!routeNode && process.env.NODE_ENV === "production") throw new Error("No routes found"); if (process.env.ONE_DEBUG_ROUTER && routeNode) { var _routeNode_slots; var formatRouteTree = function (node) { var indent = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "", isLast = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : true; var _node_slots; var prefix = indent + (isLast ? "└─ " : "├─ "); var childIndent = indent + (isLast ? " " : "│ "); var dynamicBadge = node.dynamic ? ` [${node.dynamic.map(function (d) { return d.name; }).join(", ")}]` : ""; var typeBadge = node.type !== "layout" ? ` (${node.type})` : ""; var slotsBadge = ((_node_slots = node.slots) === null || _node_slots === void 0 ? void 0 : _node_slots.size) ? ` {@${Array.from(node.slots.keys()).join(", @")}}` : ""; var line = `${prefix}${node.route || "/"}${dynamicBadge}${typeBadge}${slotsBadge}`; var visibleChildren = node.children.filter(function (child2) { return !child2.internal; }); for (var i = 0; i < visibleChildren.length; i++) { var child = visibleChildren[i]; var childIsLast = i === visibleChildren.length - 1; line += "\n" + formatRouteTree(child, childIndent, childIsLast); } return line; }; console.info(`[one] \u{1F4CD} Route structure: ${formatRouteTree(routeNode)}`); if ((_routeNode_slots = routeNode.slots) === null || _routeNode_slots === void 0 ? void 0 : _routeNode_slots.size) { console.info(`[one] \u{1F4E6} Slots on root layout:`); var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0; try { for (var _iterator = routeNode.slots[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var [slotName, slotConfig] = _step.value; var _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 = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return != null) _iterator.return(); } finally { if (_didIteratorError) throw _iteratorError; } } } } navigationRef = ref; setupLinkingAndRouteInfo(initialLocation); subscribeToNavigationChanges(); } function cleanUpState() { initialState = void 0; initialPathname = void 0; rootState = void 0; nextState = void 0; routeInfo = void 0; (0, import_linkingConfig.resetLinking)(); rootStateSubscribers.clear(); storeSubscribers.clear(); } function setupLinkingAndRouteInfo(initialLocation) { var _ref; initialState = (0, import_linkingConfig.setupLinking)(routeNode, initialLocation); initialPathname = (_ref = initialLocation === null || initialLocation === void 0 ? void 0 : initialLocation.pathname) !== null && _ref !== void 0 ? _ref : typeof window !== "undefined" ? window.location.pathname : void 0; if (initialState) { rootState = initialState; routeInfo = (0, import_getRouteInfo.getRouteInfo)(initialState); } else routeInfo = { unstable_globalHref: "", pathname: "", isIndex: false, params: {}, segments: [] }; } function handleNavigationContainerStateChange(navState) { if (!navState) return; var state = { ...navState }; if (state.key) { if (hashes[state.key]) { state.hash = hashes[state.key]; delete hashes[state.key]; } } if (!hasAttemptedToHideSplash) { hasAttemptedToHideSplash = true; splashScreenAnimationFrame = requestAnimationFrame(function () {}); } if (nextOptions) { state = { ...state, linkOptions: nextOptions }; nextOptions = null; } var shouldUpdateSubscribers = nextState === state; nextState = void 0; if (state && state !== rootState) { updateState(state, void 0); shouldUpdateSubscribers = true; } if (shouldUpdateSubscribers) (0, import_react.startTransition)(function () { var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0; try { for (var _iterator = rootStateSubscribers[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var subscriber = _step.value; subscriber(state); } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return != null) _iterator.return(); } finally { if (_didIteratorError) throw _iteratorError; } } }); } function subscribeToNavigationChanges() { (0, import_react.startTransition)(function () { updateSnapshot(); var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0; try { for (var _iterator = storeSubscribers[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var subscriber = _step.value; subscriber(); } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return != null) _iterator.return(); } finally { if (_didIteratorError) throw _iteratorError; } } }); } function navigate(url, options) { return linkTo((0, import_href.resolveHref)(url), "NAVIGATE", options); } function push(url, options) { return linkTo((0, import_href.resolveHref)(url), "PUSH", options); } function dismiss(count) { if (process.env.ONE_DEBUG_ROUTER) console.info(`[one] \u{1F519} dismiss${count ? ` (${count})` : ""}`); navigationRef === null || navigationRef === void 0 || navigationRef.dispatch(import_native.StackActions.pop(count)); } function replace(url, options) { return linkTo((0, import_href.resolveHref)(url), "REPLACE", options); } function setParams() { var params = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}; var _navigationRef_current; (0, import_assertIsReady.assertIsReady)(navigationRef); return navigationRef === null || navigationRef === void 0 ? void 0 : (_navigationRef_current = navigationRef.current) === null || _navigationRef_current === void 0 ? void 0 : _navigationRef_current.setParams( // @ts-expect-error params); } function dismissAll() { if (process.env.ONE_DEBUG_ROUTER) console.info(`[one] \u{1F519} dismissAll`); navigationRef === null || navigationRef === void 0 || navigationRef.dispatch(import_native.StackActions.popToTop()); } function goBack() { var _navigationRef_current; if (process.env.ONE_DEBUG_ROUTER) console.info(`[one] \u{1F519} goBack`); (0, import_assertIsReady.assertIsReady)(navigationRef); navigationRef === null || navigationRef === void 0 || (_navigationRef_current = navigationRef.current) == null || _navigationRef_current.goBack(); } function canGoBack() { var _ref; var _navigationRef_current; if (!navigationRef.isReady()) return false; return (_ref = navigationRef === null || navigationRef === void 0 ? void 0 : (_navigationRef_current = navigationRef.current) === null || _navigationRef_current === void 0 ? void 0 : _navigationRef_current.canGoBack()) !== null && _ref !== void 0 ? _ref : false; } function canDismiss() { var state = rootState; while (state) { var _state_routes_state_index, _state_routes; if (state.type === "stack" && state.routes.length > 1) return true; if (state.index === void 0) return false; state = (_state_routes = state.routes) === null || _state_routes === void 0 ? 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 false; } function getSortedRoutes() { if (!routeNode) throw new Error("No routes"); return routeNode.children.filter(function (route) { return !route.internal; }).sort(import_sortRoutes.sortRoutes); } function updateState(state) { var nextStateParam = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : state; rootState = state; nextState = nextStateParam; var nextRouteInfo = (0, import_getRouteInfo.getRouteInfo)(state); if (!deepEqual(routeInfo, nextRouteInfo)) { if (process.env.ONE_DEBUG_ROUTER) { var from = (routeInfo === null || routeInfo === void 0 ? void 0 : routeInfo.pathname) || "(initial)"; var to = nextRouteInfo.pathname; var params = Object.keys(nextRouteInfo.params || {}).length ? nextRouteInfo.params : void 0; console.info(`[one] \u{1F9ED} ${from} \u2192 ${to}`, params ? { params } : ""); } routeInfo = nextRouteInfo; var params1 = (0, import_findRouteNode.extractParamsFromState)(state); var newMatches = buildNativeMatches(state, nextRouteInfo.pathname, params1); currentMatches = newMatches; (0, import_useMatches.setClientMatches)(newMatches); } if (process.env.NODE_ENV === "development" && typeof window !== "undefined") window.__oneDevtools = { routeInfo: nextRouteInfo, rootState: state, routeNode, getRoutes: function () { return (routeNode === null || routeNode === void 0 ? void 0 : routeNode.children) || []; }, getLoaderTimingHistory: function () { var _ref; var _devtoolsRegistry_getLoaderTimingHistory; return (_ref = (_devtoolsRegistry_getLoaderTimingHistory = import_registry.devtoolsRegistry.getLoaderTimingHistory) === null || _devtoolsRegistry_getLoaderTimingHistory === void 0 ? void 0 : _devtoolsRegistry_getLoaderTimingHistory.call(import_registry.devtoolsRegistry)) !== null && _ref !== void 0 ? _ref : []; }, getPreloadHistory }; } function subscribeToRootState(subscriber) { rootStateSubscribers.add(subscriber); return function () { rootStateSubscribers.delete(subscriber); }; } function subscribeToStore(subscriber) { storeSubscribers.add(subscriber); return function () { storeSubscribers.delete(subscriber); }; } function subscribeToLoadingState(subscriber) { loadingStateSubscribers.add(subscriber); return function () { loadingStateSubscribers.delete(subscriber); }; } function setLoadingState(state) { (0, import_react.startTransition)(function () { var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0; try { for (var _iterator = loadingStateSubscribers[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var listener = _step.value; listener(state); } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_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: (0, import_linkingConfig.getLinking)(), hasAttemptedToHideSplash, initialState, rootState, nextState, routeInfo, splashScreenAnimationFrame, navigationRef, rootStateSubscribers, storeSubscribers }; } function rootStateSnapshot() { return rootState; } function routeInfoSnapshot() { return routeInfo; } function useOneRouter() { var state = (0, import_react.useSyncExternalStore)(subscribeToStore, snapshot, snapshot); return (0, import_react.useDeferredValue)(state); } function syncStoreRootState() { if (!navigationRef) throw new Error(`No navigationRef, possible duplicate One dep`); if (navigationRef.isReady()) { var currentState = navigationRef.getRootState(); if (rootState !== currentState) { if (initialState && (routeInfo === null || routeInfo === void 0 ? void 0 : routeInfo.pathname)) { if ((0, import_getRouteInfo.getRouteInfo)(currentState).pathname !== routeInfo.pathname) { rootState = currentState; return; } } updateState(currentState); } } } function useStoreRootState() { syncStoreRootState(); var state = (0, import_react.useSyncExternalStore)(subscribeToRootState, rootStateSnapshot, rootStateSnapshot); return (0, import_react.useDeferredValue)(state); } function useStoreRouteInfo() { syncStoreRootState(); return (0, import_react.useSyncExternalStore)(subscribeToRootState, routeInfoSnapshot, routeInfoSnapshot); } function cleanup() { if (splashScreenAnimationFrame) cancelAnimationFrame(splashScreenAnimationFrame); } var preloadingLoader = {}; var preloadedLoaderData = {}; var cssInjectFunctions = {}; var preloadHistory = []; function getPreloadHistory() { return preloadHistory; } function preloadRoute(href) { arguments.length > 1 && arguments[1] !== void 0 && arguments[1]; } function normalizeLoaderPath(href) { return new URL(href, "http://example.com").pathname.replace(/\/index$/, "").replace(/\/$/, "") || "/"; } function buildClientMatches(href, matchingNode, params, loaderData) { var pathname = (0, import_findRouteNode.extractPathnameFromHref)(href); var routeId = (matchingNode === null || matchingNode === void 0 ? void 0 : matchingNode.contextKey) || pathname; var layoutMatches = currentMatches.filter(function (m) { return m.routeId.includes("_layout"); }); var pageMatch = { routeId, pathname, params, loaderData }; return [...layoutMatches, pageMatch]; } function buildNativeMatches(state, pathname, params) { return (0, import_findRouteNode.findAllRouteNodesFromState)(state, routeNode).map(function (node) { return { routeId: node.contextKey || pathname, pathname, params, loaderData: void 0 }; }); } function initClientMatches(matches) { currentMatches = matches; (0, import_useMatches.setClientMatches)(matches); } async function linkTo(href, event, options) { if (process.env.ONE_DEBUG_ROUTER) console.info(`[one] \u{1F517} ${event || "NAVIGATE"} ${href}`); (0, import_interceptRoutes.setNavigationType)("soft"); (0, import_notFoundState.clearNotFoundState)(); if (href[0] === "#") return; if ((0, import_url.shouldLinkExternally)(href)) { (0, import_openExternalURL.openExternalURL)(href); return; } if ((0, import_skewProtection.isVersionStale)()) { window.location.href = href; return; } if ((0, import_useBlocker.checkBlocker)(href, event === "REPLACE" ? "replace" : "push")) return; if (isRouteProtected(href)) return; var currentLayoutNode = routeNode; var currentPath = (routeInfo === null || routeInfo === void 0 ? void 0 : routeInfo.pathname) || "/"; var interceptResult = (0, import_interceptRoutes.findInterceptRoute)(href, currentLayoutNode, currentPath); if (interceptResult) { var { interceptRoute, slotName, layoutContextKey, params } = interceptResult; var scopedSlotKey = `${layoutContextKey}:${slotName}`; (0, import_interceptRoutes.storeInterceptState)(scopedSlotKey, interceptRoute, params); (0, import_interceptRoutes.updateURLWithoutNavigation)(href); (0, import_Navigator.setSlotState)(scopedSlotKey, { activeRouteKey: interceptRoute.contextKey, activeRouteNode: interceptRoute, params, isIntercepted: true }); return; } (0, import_assertIsReady.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 = (0, import_linkingConfig.getLinking)(); if (!linking) throw new Error("Attempted to link to route when no routes are present"); (0, import_lastAction.setLastAction)(); if (href === ".." || href === "../") { current.goBack(); return; } if (href.startsWith(".")) { var _ref; var _routeInfo_segments; var base = (_ref = routeInfo === null || routeInfo === void 0 ? void 0 : (_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; var _routeInfo_params1, _params_split; segment = segment.slice(4, -1); var params3 = routeInfo === null || routeInfo === void 0 ? void 0 : (_routeInfo_params1 = routeInfo.params) === null || _routeInfo_params1 === void 0 ? void 0 : _routeInfo_params1[segment]; if (Array.isArray(params3)) return params3.join("/"); return (_ref2 = params3 === null || params3 === void 0 ? void 0 : (_params_split = params3.split(",")) === null || _params_split === void 0 ? void 0 : _params_split.join("/")) !== null && _ref2 !== void 0 ? _ref2 : ""; } segment = segment.slice(1, -1); return routeInfo === null || routeInfo === void 0 ? void 0 : (_routeInfo_params = routeInfo.params) === null || _routeInfo_params === void 0 ? void 0 : _routeInfo_params[segment]; }).filter(Boolean).join("/")) !== null && _ref !== void 0 ? _ref : "/"; if (!(routeInfo === null || routeInfo === void 0 ? void 0 : routeInfo.isIndex)) base += "/.."; href = (0, import_path.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, true);else if (process.env.NODE_ENV !== "development") { var inject = cssInjectFunctions[href]; if (inject) inject().catch(function () {}); } var preloadResult = preloadedLoaderData[normalizedPreloadPath]; if (preloadResult === null || preloadResult === void 0 ? void 0 : 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 === null || preloadResult === void 0 ? void 0 : preloadResult.__oneError) === 404) { delete preloadedLoaderData[normalizedPreloadPath]; delete preloadingLoader[normalizedPreloadPath]; delete preloadedLoaderData[href]; delete preloadingLoader[href]; setLoadingState("loaded"); var notFoundRoute = (0, import_notFoundState.findNearestNotFoundRoute)(href, routeNode); (0, import_notFoundState.setNotFoundState)({ notFoundPath: preloadResult.__oneNotFoundPath || "/+not-found", notFoundRouteNode: notFoundRoute || void 0, originalPath: href }); return; } var matchingRouteNode = (0, import_findRouteNode.findRouteNodeFromState)(state, routeNode); if (matchingRouteNode === null || matchingRouteNode === void 0 ? void 0 : matchingRouteNode.loadRoute) { setValidationState({ status: "validating", lastValidatedHref: href }); try { var loadedRoute = matchingRouteNode.loadRoute(); var params1 = (0, import_findRouteNode.extractParamsFromState)(state); var search = (0, import_findRouteNode.extractSearchFromHref)(href); var pathname = (0, import_findRouteNode.extractPathnameFromHref)(href); if (loadedRoute.validateParams) (0, import_validateParams.validateParams)(loadedRoute.validateParams, params1); if (loadedRoute.validateRoute) { var validationResult = await loadedRoute.validateRoute({ params: params1, search, pathname, href }); if (validationResult && !validationResult.valid) { var _$error = new import_validateParams.RouteValidationError(validationResult.error || "Route validation failed", validationResult.details); setValidationState({ status: "error", error: _$error, lastValidatedHref: href }); throw _$error; } } setValidationState({ status: "valid", lastValidatedHref: href }); } catch (error) { if (error && typeof error.then === "function") { await error.catch(function () {}); setValidationState({ status: "valid", lastValidatedHref: href }); } else if (_instanceof(error, import_validateParams.ParamValidationError) || _instanceof(error, import_validateParams.RouteValidationError)) { setValidationState({ status: "error", error, lastValidatedHref: href }); throw error; } else throw error; } } var loaderData = preloadedLoaderData[normalizeLoaderPath(href)]; var params2 = (0, import_findRouteNode.extractParamsFromState)(state); var newMatches = buildClientMatches(href, matchingRouteNode, params2, loaderData); currentMatches = newMatches; (0, import_useMatches.setClientMatches)(newMatches); var currentRootState = navigationRef.getRootState(); var hash = href.indexOf("#"); if (currentRootState.key && hash > 0) hashes[currentRootState.key] = href.slice(hash); nextOptions = options !== null && options !== void 0 ? options : null; (0, import_react.startTransition)(function () { var _action_payload, _freshRootState_routes_freshRootState_index; var freshRootState = navigationRef.getRootState(); var action = (0, import_getNavigateAction.getNavigateAction)(state, freshRootState, event); var current2 = navigationRef.getCurrentRoute(); var targetName = (_action_payload = action.payload) === null || _action_payload === void 0 ? void 0 : _action_payload.name; var isGroupTarget = typeof targetName === "string" && targetName.startsWith("(") && targetName.endsWith(")"); var hasFreshRootState = freshRootState.type === "stack"; var currentFocusedName = (_freshRootState_routes_freshRootState_index = freshRootState.routes[freshRootState.index]) === null || _freshRootState_routes_freshRootState_index === void 0 ? void 0 : _freshRootState_routes_freshRootState_index.name; if (isGroupTarget && hasFreshRootState && currentFocusedName !== targetName) { var existingRoutes = freshRootState.routes.filter(function (r) { return r.name !== targetName; }); var targetRoute = { ...state.routes[state.routes.length - 1], key: `${targetName}-${freshRootState.key}` }; navigationRef.resetRoot({ ...freshRootState, routes: [...existingRoutes, targetRoute], index: existingRoutes.length }); } else navigationRef.dispatch(action); var warningTm; var interval = setInterval(function () { if (current2 !== navigationRef.getCurrentRoute()) setTimeout(function () { setLoadingState("loaded"); }); clearTimeout(warningTm); clearTimeout(interval); }, 16); if (process.env.NODE_ENV === "development") warningTm = setTimeout(function () { console.warn(`Routing took more than 8 seconds`); }, 1e3); }); } var hashes = {}; var nextOptions = null; function deepEqual(a, b) { if (a === b) return true; if (Array.isArray(a) && Array.isArray(b)) { if (a.length !== b.length) return false; for (var i = 0; i < a.length; i++) if (!deepEqual(a[i], b[i])) return false; return true; } if ((typeof a === "undefined" ? "undefined" : _type_of(a)) === "object" && (typeof b === "undefined" ? "undefined" : _type_of(b)) === "object") { var keysA = Object.keys(a); var keysB = Object.keys(b); if (keysA.length !== keysB.length) return false; var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0; try { for (var _iterator = keysA[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var key = _step.value; if (!deepEqual(a[key], b[key])) return false; } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return != null) _iterator.return(); } finally { if (_didIteratorError) throw _iteratorError; } } return true; } return false; } //# sourceMappingURL=router.native.js.map