one
Version:
One is a new React Framework that makes Vite serve both native and web.
833 lines (830 loc) • 33.9 kB
JavaScript
;
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