UNPKG

react-router-manage

Version:

react-router-manage extends react-router(v6), it Including authentication, configuration, addition, deletion and modification

1,354 lines (1,353 loc) 32.2 kB
/** * React Router Manage v2.0.4 * * Copyright (c) onshinpei Inc. * * This source code is licensed under the MIT license found in the * LICENSE.md file in the root directory of this source tree. * * @license MIT */ import { useNavigate as e, generatePath as t, useLocation as n, useParams as r, Navigate as o, matchPath as u } from "react-router"; export { AbortedDeferredError, Await, MemoryRouter, Navigate, NavigationType, Outlet, Route, Router, RouterProvider, Routes, UNSAFE_DataRouterContext, UNSAFE_DataRouterStateContext, UNSAFE_LocationContext, UNSAFE_NavigationContext, UNSAFE_RouteContext, createMemoryRouter, createPath, createRoutesFromChildren, createRoutesFromElements, defer, generatePath, isRouteErrorResponse, json, matchPath, matchRoutes, parsePath, redirect, renderMatches, resolvePath, unstable_useBlocker, useActionData, useAsyncError, useAsyncValue, useHref, useInRouterContext, useLoaderData, useLocation, useMatch, useMatches, useNavigation, useNavigationType, useOutlet, useOutletContext, useParams, useResolvedPath, useRevalidator, useRouteError, useRouteLoaderData, useRoutes } from "react-router"; import { Router as s, Navigate as a, useLocation as i, useRoutes as c } from "react-router-dom"; export { Form, Link, NavLink, ScrollRestoration, UNSAFE_useScrollRestoration, createBrowserRouter, createHashRouter, useBeforeUnload, useFetcher, useFetchers, useFormAction, useLinkClickHandler, useSearchParams, useSubmit } from "react-router-dom"; import * as l from "react"; import { useMemo as p, useState as m, useLayoutEffect as h, useRef as f, useCallback as d, Suspense as R, useReducer as E, useImperativeHandle as _, useEffect as A } from "react"; import { unstable_batchedUpdates as y } from "react-dom"; import { createBrowserHistory as b, createHashHistory as g } from "@remix-run/router"; import { stringify as v, parse as M } from "query-string"; const C = l.createContext(null); function T() { return l.useContext(C).history; } function U() { return l.useContext(C).routeHooksRef; } function w({ basename: e, children: t, syncUpdateCurrentRoute: n }) { const r = l.useRef(null), o = l.useRef(null); if (null == r.current) { const e = b({ window, v5Compat: !0 }); (r.current = { ...e, back: () => e.go(-1), forward: () => e.go(1) }), (o.current = []); } const u = p( () => ({ history: r.current, routeHooks: o.current, routeHooksRef: o, historyMethods: { push: r.current.push, replace: r.current.replace, go: r.current.go, back: r.current.back, forward: r.current.forward } }), [] ), a = r.current, [i, c] = l.useState({ action: a.action, location: a.location }); return ( l.useLayoutEffect(() => { let e = !0; const t = a.listen(t => { const { location: r } = t; e && y(() => { c(t), n(r); }); }); return () => { (e = !1), t(); }; }, [a, n]), l.createElement( C.Provider, { value: u }, l.createElement( s, { basename: e, location: i.location, navigationType: i.action, navigator: a }, t ) ) ); } function P({ basename: e, children: t, syncUpdateCurrentRoute: n }) { const r = l.useRef(null), o = l.useRef(null); if (null == r.current) { const e = g({ window, v5Compat: !0 }); (r.current = { ...e, back: () => e.go(-1), forward: () => e.go(1) }), (o.current = []); } const u = p( () => ({ history: r.current, routeHooks: o.current, routeHooksRef: o, historyMethods: { push: r.current.push, replace: r.current.replace, go: r.current.go } }), [] ), a = r.current, [i, c] = l.useState({ action: a.action, location: a.location }); return ( l.useLayoutEffect(() => { let e = !0; const t = a.listen(t => { const { location: r } = t; e && y(() => { c(t), n(r); }); }); return () => { (e = !1), t(); }; }, [a, n]), l.createElement( C.Provider, { value: u }, l.createElement( s, { basename: e, location: i.location, navigationType: i.action, navigator: a }, t ) ) ); } C.displayName = "MRouterHistoryContext"; const L = { 401: { title: "401 NO PERMISSION", img: "//ysf.qiyukf.net/yx/9c9ce7793b3c0657da5d80e740a89681" }, 404: { title: "404 NOT FOUND", img: "https://ysf.nosdn.127.net/ysh/6be90dea7806767fe65e7b48982b7a61" } }, O = ({ code: e = "401" }) => { const t = L[e]; return l.createElement( "div", { style: { display: "flex", justifyContent: "center", alignItems: "center", background: "white", height: "100%", flexDirection: "column", borderRadius: 8 } }, l.createElement("img", { alt: t.title, width: 200, src: t?.img }), l.createElement( "div", { style: { color: "#666666", lineHeight: "22px", textAlign: "center", marginTop: 16 } }, t.title ) ); }; O.displayName = "NoAuth"; const N = ({ name: e, component: t }) => { const { routesMap: n, currentRoute: r } = H(), o = n[e]; return e === r.name ? t ? l.createElement(t, null) : l.createElement(l.Fragment, null) : l.createElement(a, { to: o.path || "" }); }, S = ({ tip: e = "加载中" }) => l.createElement("div", null, e), D = { LoadingComponent: () => l.createElement( l.Fragment, null, l.createElement(S, { tip: "应用正在加载中…" }) ) }; function x(e, t) { let n; return e ? (!(function(e) { if (e instanceof Function) return !0; return !1; })(e) ? ue(e.path) ? (n = function() { return l.createElement(a, { to: e.path }); }) : ue(e.name) && (n = function() { return l.createElement(N, { name: e.name, component: t }); }) : (n = e), n) : n; } const k = ({ beforeEnter: e, Component: t, beforeEachMount: n }) => { const [r, o] = m({ Component: void 0 }), { currentRoute: u } = H(); h(() => { let r = !0; return ( n ? n(u, n => { if (!r) return; const s = x(n, t); e ? e(u, e => { if (!r) return; const n = x(e, s || t); o({ Component: n || s || t }); }) : o({ Component: s || t }); }) : e && e(u, e => { if (!r) return; const n = x(e, t); o({ Component: n || t }); }), () => { r = !1; } ); }, [t, u, e, n]); const s = D.LoadingComponent; return r.Component ? l.createElement(r.Component, null) : l.createElement(s, null); }, I = () => l.createElement(O, { code: "404" }); function F(e, t) { const n = window.location.pathname, r = U(), o = t?.beforeunload, u = f(o); (u.current = o), h(() => { const t = r.current, o = { name: "BeforeRouterLeave", pathname: n, fn: e }; t.push(o); const s = u.current, a = e => s?.(e); return ( s && window.addEventListener("beforeunload", a), () => { const e = t.indexOf(o); t.splice(e, 1), s && window.removeEventListener("beforeunload", a); } ); }, [e, n, r]); } const $ = () => { const n = e(); return d( (e, r = {}) => { if ( (r?.params && "string" == typeof e && (e = t(e, r.params)), r?.query && "string" == typeof e) ) { let t = e; const n = v(r.query); (t = t.includes("?") ? `${t}&${n}` : `${t}?${n}`), (e = t); } return n(e, r); }, [n] ); }; function H() { const e = n(), t = f({}), { routesMap: o, inputRoutes: u, currentRoute: s, flattenRoutes: a, authInputRoutes: i, basename: c } = l.useContext(pe).state; t.current !== o && (t.current = o); const m = p(() => M(e.search), [e.search]), h = r(); return { navigate: $(), routesMap: o, query: m, params: h, routes: u, authRoutes: i, currentRoute: s, flattenRoutes: a, location: e, basename: c }; } const j = () => { const { currentRoute: e } = H(), t = p(() => { if (!e) return ""; const t = e._itemsAndChildren || [], n = t?.find(e => e._isHasAuth); return n?.path || ""; }, [e]); let n = !1; return ( e.parent?.component || (n = !0), t ? l.createElement(o, { to: t, replace: n }) : l.createElement(O, null) ); }; function B(e = "", t = "/", n) { return e.startsWith(t) ? e : e === t ? t : e.startsWith("/") ? t.endsWith("/") ? `${t}${e.slice(1)}` : `${t}${e}` : n ? B(e, n) : t.endsWith("/") ? `${t}${e}` : `${t}/${e}`; } function q(e) { const { routes: t, parent: n, basename: r = "/", _level: o = 1 } = e; if (!t) return []; return (function e(t, n, o = 1) { return t.map(t => { const { path: u, items: s, children: a, ...i } = t, c = { ...i, path: K(B(u, r, n?.path)), parent: n, _level: o, _relativePath: u }; return ( s && (c.items = e(s, c, o + 1)), a && (c.children = e(a, c, o + 1)), c ); }); })(t, n, o); } function W(e) { const { inputRoutes: t, permissionList: n, permissionMode: r, hasAuth: o, beforeEachMount: u, basename: s, location: a } = e, i = te({ routes: t, permissionList: n, permissionMode: r, hasAuth: o, beforeEachMount: u }), c = G(i, void 0, !0); "children" === r && o && c.forEach(e => { const t = e.route; if (!t._currentIsHasAuth) return; let n = t; for (; n; ) (n._isHasAuth = !0), (n._component = n._currentComponent), (n = n.parent); }), (function(e, t, n) { const r = B("*", t), o = e.some(({ path: e }) => e === r); if (o) return; const u = { name: "notFound", title: "notFound", meta: {}, path: r, component: I, _isHasAuth: !0, _component: I, _relativePath: r, _level: 0, _route: { _relativePath: r, _level: 0, name: "notFound", title: "notFound", meta: {}, path: r, component: I } }; n.push(u), e.push({ path: r, score: e.length, route: u }); })(c, s, i), c.sort((e, t) => t.score - e.score); const l = c.map(e => e.route), p = J(c), m = Q(a.pathname, p, l); return { authInputRoutes: i, flattenRoutes: l, routesMap: p, currentRoute: m, currentPathRoutes: X(m), beforeEachMount: u }; } const V = /^:\w+$/, z = e => "*" === e; function Y(e, t) { let n = e.split("/"), r = n.length; return ( n.some(z) && (r += -2), t && (r += 2), n .filter(e => !z(e)) .reduce((e, t) => e + (V.test(t) ? 3 : "" === t ? 1 : 10), r) ); } const G = (e, t, n) => e.reduce((e, r) => { t && (r.parent = t); const o = { path: r.path, route: r, score: Y(r.path, !1) }; if (Array.isArray(r.items) || Array.isArray(r.children)) { let t = e.concat(o); return ( Array.isArray(r.items) && (t = t.concat(G(r.items, r, n))), Array.isArray(r.children) && n && (t = t.concat(G(r.children, r, n))), t ); } return e.concat(o); }, []), J = e => { const t = {}; return ( (function(e, t, n = []) { Object.keys(t) .filter(e => !n.includes(e)) .forEach(n => { Object.defineProperty(e, n, { get: () => { const e = t[n]; return Array.isArray(e) ? e[e.length - 1] : e; } }); }); })( t, e.reduce((e, t) => { const { route: n } = t, { name: r, path: o } = n; if (e[r]) throw new Error( `Router config 'name' isn't unique, route name: "${r}", route path: "${o}"` ); const u = e[o]; if (u) { const t = u[u.length - 1]; if (!t?.name || t.name !== n.parentAbs?.name) throw new Error( `There are routes at the same level with the same path, route name: "${r}", route path: "${o}"` ); e[o] = [...u, n]; } else e[o] = [n]; return (e[r] = n), e; }, {}) ), t ); }; function K(e) { return e && e.endsWith("/") ? e.slice(0, -1) : e; } function Q(e = window.location.pathname, t, n) { let r = t[(e = K(e))]; if (!r) { const t = n.find(t => !!u({ path: t.path }, e)); if (t) return t; } return ( r || (r = { _isHasAuth: !0, _relativePath: "", _level: 0, name: "404", path: e, title: "404", meta: {}, component: () => l.createElement(O, { code: "404" }), _route: { _level: 0, _relativePath: "", name: "404", path: e, title: "404", component: () => l.createElement(O, { code: "404" }) } }), r ); } function X(e) { const t = []; let n = e; for (; n; ) t.unshift(n), (n = n.parent); return t; } function Z(e, t) { return t.includes(e); } function ee({ code: e, permissionList: t, hasAuth: n, route: r }) { return ( !n || !e || (Array.isArray(e) ? 0 === e.length || e.some(e => Z(e, t)) : e instanceof Function ? !!(function(e, t) { return e(t); })(e, r) : Z(e, t)) ); } function te(e) { const { routes: t, permissionList: n = [], permissionMode: r, hasAuth: u, beforeEachMount: s, parent: a, parentAbs: i } = e; return t.map(e => { const { component: t, code: c = "", children: p, items: m, beforeEnter: h, redirect: f, meta: d, type: R } = e; let E = [], _ = [], A = t; A || (A = j); const y = {}; (h || s) && ((y.beforeEnter = h), (y.beforeEachMount = s), (y.key = e.name), (y._route = e), (y.Component = A), (A = k)); const b = ee({ code: c, permissionList: n, hasAuth: u, route: e }), g = !1 !== a?._isHasAuth && b, v = { ...e, parent: a, parentAbs: i, props: y, meta: d || {}, items: [], children: [], _route: e, _isHasAuth: g, _currentComponent: A, _currentIsHasAuth: b }; p && (E = te({ routes: p, permissionList: n, permissionMode: r, hasAuth: u, beforeEachMount: s, parent: v, parentAbs: v })), m && (_ = te({ routes: m, permissionList: n, permissionMode: r, hasAuth: u, beforeEachMount: s, parent: v, parentAbs: i })); const M = [..._, ...E]; if (!g) { return { ...v, children: E, items: _, _component: O, _itemsAndChildren: M }; } if (f) return { ...v, children: E, items: _, _component: () => l.createElement(o, { to: f, replace: !0 }), _itemsAndChildren: M }; if ("null" === R) return { ...v, children: E, items: _, _component: void 0, _itemsAndChildren: M }; if (A) return { ...v, children: E, items: _, _component: A, _itemsAndChildren: M }; { const t = oe(e, n, u); if (t) { let n = !1; return ( e.parent?.component || (n = !0), { ...v, children: E, items: _, _component: () => l.createElement(o, { to: t, replace: n }), _itemsAndChildren: M } ); } return { ...v, items: [], children: [], _component: O }; } }); } function ne(e) { return "/" === e ? e : e.replace(/\/*\**$/gm, ""); } function re(e) { if ("string" == typeof e) return ne(e); const { pathname: t } = e; return t ? { ...e, pathname: ne(t) } : e; } const oe = (e, t, n, r) => { const { items: o } = e; if (!o) return ""; if (!n) return o[0].path; const u = o.find(e => e.index); if (u) return u.path; let s = ""; for (let a = 0; a < o?.length; a++) { const e = o[a], { code: r, path: u } = e; if (!r) { s = u; break; } if (ee({ code: r, permissionList: t, hasAuth: n, route: e })) { s = u; break; } } return s; }; function ue(e) { return "string" == typeof e; } let se = 0; function ae(e) { const t = { current: null }, { LoadingComponent: n, ...r } = e; var o; (se += 1), n && ((o = { LoadingComponent: n }), Object.entries(o).forEach(([e, t]) => { D[e] = t; })); const u = { ...r, _isDefined: !0, _defineId: se, navigate: () => { throw new Error("YSRouter navigate is not initialized"); }, _navigateRef: t }; return ( Object.defineProperty(u, "navigate", { get: () => t.current || (() => { throw new Error("YSRouter navigate is not initialized"); }) }), u ); } function ie(e) { return e ? e.reduce((e, t) => e.concat(Array.isArray(t) ? ie(t) : t), []) : []; } function ce(e) { const t = {}; return { inputRoutes: (function e(n, r) { return n ? n.map(n => { const o = { ...n, items: [], children: [], parent: r }; return ( (o.items = e(n.items, o)), (o.children = e(n.children, o)), (t[n.name] = o), o ); }, []) : []; })(e), routesMap: t }; } let le = (function(e) { return ( (e.UPDATE_INPUT_ROUTES = "UPDATE_INPUT_ROUTES"), (e.UPDATE_CURRENT_ROUTE = "UPDATE_CURRENT_ROUTE"), (e.UPDATE_STATE = "UPDATE_STATE"), (e.ADD_ROUTES = "ADD_ROUTES"), (e.REMOVE_ROUTES = "REMOVE_ROUTES"), (e.UPDATE_ROUTES = "UPDATE_ROUTES"), e ); })({}); const pe = l.createContext({ state: { inputRoutes: [], authInputRoutes: [], permissionList: [], routesMap: {}, flattenRoutes: [] }, methods: {} }); function me(e, t) { const { type: n, payload: r } = t; switch (n) { case le.ADD_ROUTES: return (function(e, t) { let n = !1; const r = t, { routesMap: o, inputRoutes: u } = ce(e.inputRoutes); if ( (r.forEach(e => { const { path: t, name: r, parentName: s } = e; if (o[t] || o[r]) throw new Error(`新增路由 ${r} ${t} 已经存在,请修改`); if (s) { const t = o[s]; if (t) { const r = q({ routes: [e], parent: t, _level: t._level + 1 }); (t.items = t.items || []), t.items.push(r[0]), (n = !0); } } else { const t = q({ routes: [e], _level: 0 }); u.push(t[0]), (n = !0); } }), n) ) { const t = e._getNewStateByNewInputRoutes(u); return { ...e, ...t, inputRoutes: [...u] }; } return e; })(e, r); case le.REMOVE_ROUTES: return (function(e, t) { let n = !1; const r = t, { routesMap: o, inputRoutes: u } = ce(e.inputRoutes); if ( (r.forEach(e => { const t = o[e]; if (t) { const e = t.parent; if (!e) { const e = u.indexOf(t); e > -1 && (u.splice(e, 1), (n = !0)); } if (e && e.items) { const r = e.items.indexOf(t); r > -1 && (e.items.splice(r, 1), (n = !0)); } } }), n) ) { const t = e._getNewStateByNewInputRoutes(u); return { ...e, ...t, inputRoutes: [...u] }; } return e; })(e, r); case le.UPDATE_ROUTES: return (function(e, t) { let n = !1; const r = t, { routesMap: o, inputRoutes: u } = ce(e.inputRoutes); if ( (r.forEach(({ routeName: t, routeData: r }) => { const u = o[t]; if (u) { const t = u.parent, o = q({ routes: [{ ...u, ...r }], parent: t, _level: (t?._level || 0) + 1, basename: e.basename }); t || (Object.assign(u, o[0]), (n = !0)), t && t.items ? (t.items.splice(t.items.indexOf(u), 1, o[0]), (n = !0)) : t && t.children && (t.children.splice(t.children.indexOf(u), 1, o[0]), (n = !0)); } }), n) ) { const t = e._getNewStateByNewInputRoutes(u); return { ...e, ...t, inputRoutes: [...u] }; } return e; })(e, r); case le.UPDATE_INPUT_ROUTES: return { ...e, inputRoutes: r }; case le.UPDATE_CURRENT_ROUTE: return { ...e, currentRoute: r }; case le.UPDATE_STATE: return { ...e, ...r }; default: return { ...e }; } } function he() { return l.useContext(pe).methods.addRoutes; } function fe() { return l.useContext(pe).methods.removeRoutes; } function de() { return l.useContext(pe).methods.updateRoutes; } pe.displayName = "MRouterContext"; let Re = new Map(); function Ee(e) { const t = e.map(e => { let t, n = []; const { _component: r, path: o, items: u, children: s, _isHasAuth: a, props: i } = e; if (r) { const e = D.LoadingComponent; if (!a) return { path: o.endsWith("*") ? o : `${o}/*`, element: l.createElement( R, { fallback: l.createElement(e, null) }, l.createElement(r, i) ) }; (t = { path: o, element: l.createElement( R, { fallback: l.createElement(e, null) }, l.createElement(r, i) ) }), s && (t.children = Ee(s)), u && (n = Ee(u)); } return [t, ...n].filter(e => void 0 !== e); }); return ie(t); } const _e = [], Ae = ( { permissionList: e = _e, permissionMode: t = "parent", routerConfig: n, hasAuth: r, children: o }, u ) => { const s = T(), a = i(), m = f(a), R = l.useContext(C).historyMethods, y = U(), b = $(), { routes: g = [], basename: v = "/", beforeEachMount: M, autoDocumentTitle: w = !1, _navigateRef: P } = n; P && (P.current = b); const L = p(() => q({ routes: g, basename: v }), [v, g]), O = f(L), N = f(null), S = p( () => ( N.current || (N.current = (function(e) { const { inputRoutes: t, hasAuth: n, permissionList: r, permissionMode: o, beforeEachMount: u, basename: s, location: a, _defineId: i } = e, c = Re.get(i); if (c) { const t = (function(e, t) { return ( e.basename === t.basename && e.hasAuth === t.hasAuth && e.beforeEachMount === t.beforeEachMount && e.inputRoutes === t.inputRoutes && e.permissionList === t.permissionList ); })(c.queryData, e); if (t) return c.initialData; } const l = W({ inputRoutes: t, permissionList: r, permissionMode: o, hasAuth: n, beforeEachMount: u, basename: s, location: a }); return Re.set(i, { queryData: e, initialData: l }), l; })({ inputRoutes: L, permissionList: e, permissionMode: t, hasAuth: r, beforeEachMount: M, basename: v, location: m.current, _defineId: n._defineId })), N.current ), [v, M, r, L, e, t, n._defineId] ), D = f(null), x = d( n => W({ inputRoutes: n, permissionList: e, permissionMode: t, hasAuth: r, beforeEachMount: M, basename: v, location: a }), [v, M, r, a, e, t] ); D.current = x; const [k, I] = E(me, { ...S, inputRoutes: L, permissionList: e, permissionMode: t, hasAuth: r, basename: v, _getNewStateByNewInputRoutes: D.current }); _(u, () => ({ updateCurrentRoute(e) { const { pathname: t } = e, n = k.currentRoute, r = Q(t, k.routesMap, k.flattenRoutes); let o = k.currentPathRoutes; r !== k.currentRoute && (o = X(r)), I({ type: le.UPDATE_STATE, payload: { currentRoute: r, currentPathRoutes: o, prevRoute: n } }); } })), h(() => { if ( k.permissionList === e && k.permissionMode === t && r === k.hasAuth && k.inputRoutes === L && k.beforeEachMount === M ) return; let n = k.inputRoutes; if ( O.current === L && k.permissionList === e && k.permissionMode === t && r === k.hasAuth && k.beforeEachMount === M ) return; (O.current = L), (n = L); const { authInputRoutes: o, flattenRoutes: u, routesMap: s, currentRoute: i, currentPathRoutes: c } = W({ inputRoutes: n, permissionList: e, permissionMode: t, hasAuth: r, beforeEachMount: M, basename: v, location: a }); I({ type: le.UPDATE_STATE, payload: { permissionList: e, permissionMode: t, authInputRoutes: o, routesMap: s, flattenRoutes: u, currentRoute: i, currentPathRoutes: c, basename: v, beforeEachMount: M, inputRoutes: n } }); }, [ k.inputRoutes, L, e, k.permissionList, t, k.permissionMode, r, k.hasAuth, v, M, a, k.beforeEachMount ]), A(() => { if (!w) return; let e = ""; "boolean" == typeof w ? (e = k.currentPathRoutes.map(e => e.title).join("-")) : "function" == typeof w && (e = w(k.currentPathRoutes)), (document.title = e); }, [w, k.currentPathRoutes]); const F = d( (e, t) => { "string" != typeof t && (t = t?.pathname); const n = window.location.pathname, r = (function(e, t, n) { return n.filter(n => n.name === e && n.pathname === t); })("BeforeRouterLeave", n, y.current); if ( (k.currentRoute?.beforeLeave && r.unshift({ name: "BeforeRouterLeave", pathname: k.currentRoute.path, fn: k.currentRoute.beforeLeave }), !r.length) ) return e(); !(function(e) { const { to: t, from: n, callbacks: r, finish: o } = e; 0 === r.length ? o() : (function e(u = 0) { const s = r[u]; if (!s) return o(); s.fn(t, n, () => { e(u + 1); }); })(0); })({ to: Q(t, k.routesMap, k.flattenRoutes), from: Q(n, k.routesMap, k.flattenRoutes), callbacks: r, finish: () => e() }); }, [ y, k.currentRoute.beforeLeave, k.currentRoute.path, k.routesMap, k.flattenRoutes ] ); h(() => { !(function(e, t, n) { (e.go = e => { t(() => n.go(e)); }), (e.push = (e, r) => { (e = re(e)), t(() => n.push(e, r), e); }), (e.replace = (e, r) => { (e = re(e)), t(() => n.replace(e, r), e); }), (e.back = () => { t(() => n.go(-1)); }), (e.forward = () => { t(() => n.go(1)); }); })(s, F, R); }, [F, s, R]); const H = d(e => { I({ type: le.ADD_ROUTES, payload: e }); }, []), j = d(e => { I({ type: le.REMOVE_ROUTES, payload: e }); }, []), B = d(e => { I({ type: le.UPDATE_ROUTES, payload: e }); }, []), V = d(e => { e && I({ type: le.UPDATE_CURRENT_ROUTE, payload: e }); }, []), z = p(() => Ee(k.authInputRoutes), [k.authInputRoutes]), Y = c(z), G = p(() => (o ? o(Y) : Y), [o, Y]); return l.createElement( pe.Provider, { value: { state: k, methods: { addRoutes: H, updateCurrentRoute: V, removeRoutes: j, updateRoutes: B } } }, G ); }, ye = l.forwardRef(Ae); ye.displayName = "MRouterContextProvider"; const be = ({ permissionList: e, permissionMode: t, wrapComponent: n, hasAuth: r = !0, routerConfig: o, children: u, RouterComponent: s }) => { const a = f(null), i = d(e => { a.current?.updateCurrentRoute?.(e); }, []), c = p( () => u && "function" == typeof u ? u : n ? ((n.displayName = "WrapComponent"), function(e) { return l.createElement(n, null, e); }) : void 0, [n, u] ); return l.createElement( s, { syncUpdateCurrentRoute: i }, l.createElement( ye, { routerConfig: o, permissionList: e, permissionMode: t, hasAuth: r, ref: a }, c ) ); }, ge = e => l.createElement(be, Object.assign({}, e, { RouterComponent: w })), ve = e => l.createElement(be, Object.assign({}, e, { RouterComponent: P })); export { ve as MHRouter, ge as MRouter, ae as defineRouterConfig, he as useAddRoutes, F as useBeforeLeave, T as useHistory, $ as useNavigate, fe as useRemoveRoutes, H as useRouter, de as useUpdateRoutes };