@real-router/core 0.50.2 → 0.52.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/Router-DrBkBdZ5.d.ts.map +1 -1
- package/dist/cjs/Router-Pztue5fk.js +6 -0
- package/dist/cjs/Router-Pztue5fk.js.map +1 -0
- package/dist/{esm/RouterValidator-BLtjhvRo.d.mts → cjs/RouterValidator-DLy_W2du.d.ts} +2 -1
- package/dist/cjs/{RouterValidator-BL1Uq6Rq.d.ts.map → RouterValidator-DLy_W2du.d.ts.map} +1 -1
- package/dist/cjs/api.d.ts.map +1 -1
- package/dist/cjs/api.js +1 -1
- package/dist/cjs/api.js.map +1 -1
- package/dist/cjs/getPluginApi-CUcFDzuA.js +2 -0
- package/dist/cjs/getPluginApi-CUcFDzuA.js.map +1 -0
- package/dist/cjs/index.d.ts +1 -1
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/internals-na15rxo_.js.map +1 -1
- package/dist/cjs/utils.d.ts +70 -2
- package/dist/cjs/utils.d.ts.map +1 -1
- package/dist/cjs/utils.js +1 -1
- package/dist/cjs/utils.js.map +1 -1
- package/dist/cjs/validation.d.ts +9 -2
- package/dist/cjs/validation.d.ts.map +1 -1
- package/dist/esm/Router-BeXr2zW4.d.mts.map +1 -1
- package/dist/esm/Router-CK8U23pP.mjs +6 -0
- package/dist/esm/Router-CK8U23pP.mjs.map +1 -0
- package/dist/{cjs/RouterValidator-BL1Uq6Rq.d.ts → esm/RouterValidator-C-PvV00i.d.mts} +2 -1
- package/dist/esm/{RouterValidator-BLtjhvRo.d.mts.map → RouterValidator-C-PvV00i.d.mts.map} +1 -1
- package/dist/esm/api.d.mts.map +1 -1
- package/dist/esm/api.mjs +1 -1
- package/dist/esm/api.mjs.map +1 -1
- package/dist/esm/getPluginApi-CsTfDB-O.mjs +2 -0
- package/dist/esm/getPluginApi-CsTfDB-O.mjs.map +1 -0
- package/dist/esm/index.d.mts +1 -1
- package/dist/esm/index.mjs +1 -1
- package/dist/esm/internals-CCymabFj.mjs.map +1 -1
- package/dist/esm/utils.d.mts +70 -2
- package/dist/esm/utils.d.mts.map +1 -1
- package/dist/esm/utils.mjs +1 -1
- package/dist/esm/utils.mjs.map +1 -1
- package/dist/esm/validation.d.mts +9 -2
- package/dist/esm/validation.d.mts.map +1 -1
- package/package.json +2 -2
- package/src/Router.ts +20 -0
- package/src/api/getPluginApi.ts +33 -2
- package/src/internals.ts +12 -0
- package/src/namespaces/NavigationNamespace/NavigationNamespace.ts +164 -94
- package/src/namespaces/RouterLifecycleNamespace/RouterLifecycleNamespace.ts +5 -5
- package/src/namespaces/RouterLifecycleNamespace/types.ts +9 -5
- package/src/types/RouterValidator.ts +1 -0
- package/src/utils/hydrateRouter.ts +33 -0
- package/src/utils/index.ts +6 -0
- package/src/utils/serializeRouterState.ts +73 -0
- package/src/wiring/RouterWiringBuilder.ts +2 -2
- package/dist/cjs/Router--UAz5UnF.js +0 -6
- package/dist/cjs/Router--UAz5UnF.js.map +0 -1
- package/dist/cjs/getPluginApi-BBcZZXA5.js +0 -2
- package/dist/cjs/getPluginApi-BBcZZXA5.js.map +0 -1
- package/dist/esm/Router-C4grLNrL.mjs +0 -6
- package/dist/esm/Router-C4grLNrL.mjs.map +0 -1
- package/dist/esm/getPluginApi-DasnID2W.mjs +0 -2
- package/dist/esm/getPluginApi-DasnID2W.mjs.map +0 -1
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import{a as e,d as t,f as n,i as r,l as i,n as a,o,r as s,s as c,t as l,u}from"./RouterError-D-Zjbdv9.mjs";import{i as d,n as f,r as p,t as m}from"./internals-CCymabFj.mjs";import{logger as h}from"@real-router/logger";import{FSM as g}from"@real-router/fsm";const ee={maxListeners:0,warnListeners:0,maxEventDepth:0};var _=class extends Error{},v=class{#e=new Map;#t=null;#n=ee;#r;#i;constructor(e){e?.limits&&(this.#n=e.limits),this.#r=e?.onListenerError??null,this.#i=e?.onListenerWarn??null}static validateCallback(e,t){if(typeof e!=`function`)throw TypeError(`Expected callback to be a function for event ${t}`)}setLimits(e){this.#n=e}on(e,t){let n=this.#c(e);if(n.has(t))throw Error(`Duplicate listener for "${e}"`);let{maxListeners:r,warnListeners:i}=this.#n;if(i!==0&&n.size===i&&this.#i?.(e,i),r!==0&&n.size>=r)throw Error(`Listener limit (${r}) reached for "${e}"`);return n.add(t),()=>{this.off(e,t)}}off(e,t){this.#e.get(e)?.delete(t)}emit(e,t,n,r,i){let a=this.#e.get(e);if(!a||a.size===0)return;let o=arguments.length-1;if(this.#n.maxEventDepth===0){this.#a(a,e,o,t,n,r,i);return}this.#s(a,e,o,t,n,r,i)}clearAll(){this.#e.clear(),this.#t=null}listenerCount(e){return this.#e.get(e)?.size??0}#a(e,t,n,r,i,a,o){if(e.size===1){let[s]=e;try{this.#o(s,n,r,i,a,o)}catch(e){this.#r?.(t,e)}return}let s=[...e];for(let e of s)try{this.#o(e,n,r,i,a,o)}catch(e){this.#r?.(t,e)}}#o(e,t,n,r,i,a){switch(t){case 0:e();break;case 1:e(n);break;case 2:e(n,r);break;case 3:e(n,r,i);break;default:e(n,r,i,a)}}#s(e,t,n,r,i,a,o){this.#t??=new Map;let s=this.#t,c=s.get(t)??0;if(c>=this.#n.maxEventDepth)throw new _(`Maximum recursion depth (${this.#n.maxEventDepth}) exceeded for event: ${t}`);try{s.set(t,c+1);let l=e.size===1?e:[...e];for(let e of l)try{this.#o(e,n,r,i,a,o)}catch(e){if(e instanceof _)throw e;this.#r?.(t,e)}}finally{s.set(t,s.get(t)-1)}}#c(e){let t=this.#e.get(e);if(t)return t;let n=new Set;return this.#e.set(e,n),n}};const y={IDLE:`IDLE`,STARTING:`STARTING`,READY:`READY`,TRANSITION_STARTED:`TRANSITION_STARTED`,LEAVE_APPROVED:`LEAVE_APPROVED`,DISPOSED:`DISPOSED`},b={START:`START`,STARTED:`STARTED`,NAVIGATE:`NAVIGATE`,LEAVE_APPROVE:`LEAVE_APPROVE`,COMPLETE:`COMPLETE`,FAIL:`FAIL`,CANCEL:`CANCEL`,STOP:`STOP`,DISPOSE:`DISPOSE`},te={initial:y.IDLE,context:null,transitions:{[y.IDLE]:{[b.START]:y.STARTING,[b.DISPOSE]:y.DISPOSED},[y.STARTING]:{[b.STARTED]:y.READY,[b.FAIL]:y.IDLE},[y.READY]:{[b.NAVIGATE]:y.TRANSITION_STARTED,[b.FAIL]:y.READY,[b.STOP]:y.IDLE},[y.TRANSITION_STARTED]:{[b.NAVIGATE]:y.TRANSITION_STARTED,[b.LEAVE_APPROVE]:y.LEAVE_APPROVED,[b.CANCEL]:y.READY,[b.FAIL]:y.READY},[y.LEAVE_APPROVED]:{[b.NAVIGATE]:y.TRANSITION_STARTED,[b.COMPLETE]:y.READY,[b.CANCEL]:y.READY,[b.FAIL]:y.READY},[y.DISPOSED]:{}}};function ne(){return new g(te)}function re(e){if(!e||typeof e!=`object`||e.constructor!==Object)throw TypeError(`dependencies must be a plain object`);for(let t in e)if(Object.getOwnPropertyDescriptor(e,t)?.get)throw TypeError(`dependencies cannot contain getters: "${t}"`)}function x(e,t){for(let n of e){let e=n;if(typeof e!=`object`||!e||Array.isArray(e))throw TypeError(`route must be a non-array object`);t?.routes.guardRouteCallbacks(n),t?.routes.guardNoAsyncCallbacks(n);let r=n.children;r&&x(r,t)}}function ie(t={}){let n=Object.create(null);for(let e in t)t[e]!==void 0&&(n[e]=t[e]);return{dependencies:n,limits:e}}function ae(e){return`(${e.replaceAll(/(^<|>$)/g,``)})`}const oe=/([:*])([^/?<]+)(<[^>]+>)?(\?)?/g,se=/([:*][^/?<]+(?:<[^>]+>)?)\?(?=\/|$)/g,ce=/\?(.+)$/;function le(e){let t=[],n=[],r=[],i={},a=new Map,o=e.replaceAll(se,`$1`),s=ce.exec(o);if(s!==null){let t=s[1].split(`&`);for(let e of t){let t=e.trim();t.length>0&&(n.push(t),i[t]=`query`)}e=e.slice(0,s.index)}let c;for(;(c=oe.exec(e))!==null;){let e=c[1],n=c[2],o=c[3];if(e===`*`)r.push(n),t.push(n),i[n]=`url`;else if(t.push(n),i[n]=`url`,o){let e=`^${ae(o)}$`;a.set(n,{pattern:new RegExp(e),constraint:o})}}return{urlParams:t,queryParams:n,spatParams:r,paramTypeMap:i,constraintPatterns:a,pathPattern:e}}const ue=/[^\w!$'()*+,.:;|~-]/gu,de=/[^\w!$'()*+,.:;|~-]/u,fe={default:e=>de.test(e)?e.replaceAll(ue,e=>encodeURIComponent(e)):e,uri:encodeURI,uriComponent:encodeURIComponent,none:e=>e},pe={default:decodeURIComponent,uri:decodeURI,uriComponent:decodeURIComponent,none:e=>e};function S(){return{staticChildren:Object.create(null),hasChildren:!1,paramChild:void 0,splatChild:void 0,route:void 0,slashChildRoute:void 0}}function C(e){return e.length>1&&e.endsWith(`/`)?e.slice(0,-1):e}function me(e,t){return e===``?t:t===``?e:e+t}function he(e){return e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102}function ge(e){let t=0;for(;t<e.length;)if(e.codePointAt(t)===37){if(t+2>=e.length)return!1;let n=e.codePointAt(t+1)??0,r=e.codePointAt(t+2)??0;if(!he(n)||!he(r))return!1;t+=3}else t++;return!0}const w=/<[^>]*>/g;function _e(e,t,n,r,i){let a=t.fullName===``;a||r.push(t);let o=t.absolute,s=t.paramMeta.pathPattern,c=o&&s.startsWith(`~`)?s.slice(1):s,l=(o?c:s).replaceAll(w,``),u=o?l:me(n,l),d=i;a||(d=ve(e,t,u,o?``:n,r,i));for(let n of t.children.values())_e(e,n,u,r,d);a||r.pop()}function ve(e,t,n,r,i,a){let o=Se(n,r),s=Object.freeze([...i]),c=ye(s),l=C(n),u=ke(e.rootQueryParams,i),d=Ae(i),{buildStaticParts:f,buildParamSlots:p}=Oe(o?C(r):l,o?i.slice(0,-1):i,e.options.urlParamsEncoding),m={name:t.fullName,parent:a,depth:i.length-1,matchSegments:s,meta:c,declaredQueryParams:u,declaredQueryParamsSet:new Set(u),hasTrailingSlash:n.length>1&&n.endsWith(`/`),constraintPatterns:d,hasConstraints:d.size>0,buildStaticParts:f,buildParamSlots:p,buildParamNamesSet:new Set(p.map(e=>e.paramName))};return t.paramMeta.urlParams.length===0&&(m.cachedResult=Object.freeze({segments:m.matchSegments,params:Object.freeze({}),meta:m.meta})),e.routesByName.set(t.fullName,m),e.segmentsByName.set(t.fullName,s),e.metaByName.set(t.fullName,c),o?be(e,m,r):xe(e,m,n,l,t),m}function ye(e){let t={};for(let n of e)t[n.fullName]=n.paramTypeMap;return Object.freeze(t)}function be(e,t,n){we(e,t,n);let r=C(n),i=e.options.caseSensitive?r:r.toLowerCase();e.staticCache.has(i)&&e.staticCache.set(i,t)}function xe(e,t,n,r,i){if(Ce(e,t,n),i.paramMeta.urlParams.length===0){let n=e.options.caseSensitive?r:r.toLowerCase();e.staticCache.set(n,t)}}function Se(e,t){return C(e)===C(t)}function Ce(e,t,n){let r=C(n);if(r===`/`){e.root.route=t;return}T(e,e.root,r,1,t)}function T(e,t,n,r,i){let a=n.length;for(;r<=a;){let o=n.indexOf(`/`,r),s=o===-1?a:o,c=n.slice(r,s);if(c.endsWith(`?`)){let r=c.slice(1).replaceAll(w,``).replace(/\?$/,``);t.paramChild??={node:S(),name:r},T(e,t.paramChild.node,n,s+1,i),s>=a?t.route??=i:T(e,t,n,s+1,i);return}t=De(e,t,c),r=s+1}t.route=i}function we(e,t,n){let r=Te(e,n);r.slashChildRoute=t}function Te(e,t){return Ee(e,e.root,t)}function Ee(e,t,n){let r=C(n);if(r===`/`||r===``)return t;let i=t,a=1,o=r.length;for(;a<=o;){let t=r.indexOf(`/`,a),n=t===-1?o:t;if(n<=a)break;let s=r.slice(a,n);i=De(e,i,s),a=n+1}return i}function De(e,t,n){if(n.startsWith(`*`)){let e=n.slice(1);return t.splatChild??={node:S(),name:e},t.hasChildren=!0,t.splatChild.node}if(n.startsWith(`:`)){let e=n.slice(1).replaceAll(w,``).replace(/\?$/,``);return t.paramChild??={node:S(),name:e},t.hasChildren=!0,t.paramChild.node}let r=e.options.caseSensitive?n:n.toLowerCase();return r in t.staticChildren||(t.staticChildren[r]=S(),t.hasChildren=!0),t.staticChildren[r]}function Oe(e,t,n){let r=new Set,i=new Set;for(let e of t){for(let t of e.paramMeta.urlParams)r.add(t);for(let t of e.paramMeta.spatParams)i.add(t)}if(r.size===0)return{buildStaticParts:[e],buildParamSlots:[]};let a=[],o=[],s=/[:*]([\w]+)(?:<[^>]*>)?(\?)?/gu,c=0,l;for(;(l=s.exec(e))!==null;){let t=l[1],r=l[2]===`?`;a.push(e.slice(c,l.index));let s=i.has(t)?e=>{let t=fe[n],r=e.split(`/`),i=t(r[0]);for(let e=1;e<r.length;e++)i+=`/${t(r[e])}`;return i}:fe[n];o.push({paramName:t,isOptional:r,encoder:s}),c=l.index+l[0].length}return a.push(e.slice(c)),{buildStaticParts:a,buildParamSlots:o}}function ke(e,t){let n=[];e.length>0&&n.push(...e);for(let e of t)e.paramMeta.queryParams.length>0&&n.push(...e.paramMeta.queryParams);return n}function Ae(e){let t=new Map;for(let n of e)for(let[e,r]of n.paramMeta.constraintPatterns)t.set(e,r);return t}var je=class{get options(){return this.#e}#e;#t=S();#n=new Map;#r=new Map;#i=new Map;#a=new Map;#o={cleanPath:``,normalized:``,queryString:void 0};#s=``;#c=[];#l=``;#u;#d;constructor(e){this.#e={caseSensitive:e.caseSensitive??!0,strictTrailingSlash:e.strictTrailingSlash??!1,strictQueryParams:e.strictQueryParams??!1,urlParamsEncoding:e.urlParamsEncoding??`default`,parseQueryString:e.parseQueryString,buildQueryString:e.buildQueryString},this.#u=this.#e.caseSensitive,this.#d=this.#e.urlParamsEncoding===`none`?null:pe[this.#e.urlParamsEncoding]}registerTree(e){this.#c=e.paramMeta.queryParams,_e({root:this.#t,options:this.#e,routesByName:this.#n,segmentsByName:this.#r,metaByName:this.#i,staticCache:this.#a,rootQueryParams:this.#c},e,``,[],null)}match(e){if(!this.#g(e))return;let{cleanPath:t,normalized:n,queryString:r}=this.#o,i=this.#u?n:n.toLowerCase(),a=this.#a.get(i);if(a)return this.#e.strictTrailingSlash&&!this.#y(t,a)?void 0:r===void 0&&a.cachedResult?a.cachedResult:this.#v(a,{},r);let o={},s=this.#b(n,o);if(s&&!(this.#e.strictTrailingSlash&&!this.#y(t,s))&&!(s.hasConstraints&&!this.#w(o,s))&&this.#C(o))return this.#v(s,o,r)}buildPath(e,t,n){let r=this.#n.get(e);if(!r)throw Error(`[SegmentMatcher.buildPath] '${e}' is not defined`);r.hasConstraints&&t&&this.#f(r,e,t);let i=this.#p(r,t),a=this.#m(i,n?.trailingSlash),o=this.#h(r,t,n?.queryParamsMode);return a+(o?`?${o}`:``)}getSegmentsByName(e){return this.#r.get(e)}getMetaByName(e){return this.#i.get(e)}hasRoute(e){return this.#n.has(e)}setRootPath(e){this.#s=e}#f(e,t,n){for(let[r,i]of e.constraintPatterns){let e=n[r];if(e!=null){let n=typeof e==`object`?JSON.stringify(e):String(e);if(!i.pattern.test(n))throw Error(`[SegmentMatcher.buildPath] '${t}' — param '${r}' value '${n}' does not match constraint '${i.constraint}'`)}}}#p(e,t){let n=e.buildStaticParts,r=e.buildParamSlots;if(r.length===0)return this.#s+n[0];let i=this.#s+n[0];for(let[e,a]of r.entries()){let r=t?.[a.paramName];if(r==null){if(!a.isOptional)throw Error(`[SegmentMatcher.buildPath] Missing required param '${a.paramName}'`);i.length>1&&i.endsWith(`/`)&&(i=i.slice(0,-1)),i+=n[e+1];continue}let o;o=typeof r==`string`?r:typeof r==`object`?JSON.stringify(r):String(r);let s=a.encoder(o);i+=s+n[e+1]}return i}#m(e,t){return t===`always`&&!e.endsWith(`/`)?`${e}/`:t===`never`&&e!==`/`&&e.endsWith(`/`)?e.slice(0,-1):e}#h(e,t,n){if(!t||e.declaredQueryParams.length===0&&n!==`loose`)return``;let r={},i=!1;for(let n of e.declaredQueryParams)n in t&&(r[n]=t[n],i=!0);if(n===`loose`)for(let n in t)Object.hasOwn(t,n)&&!e.declaredQueryParamsSet.has(n)&&!e.buildParamNamesSet.has(n)&&(r[n]=t[n],i=!0);return i?this.#e.buildQueryString(r):``}#g(e){if(e===``&&(e=`/`),e.codePointAt(0)!==47)return!1;let t=this.#s.length;if(t>0){if(e.length<t||!e.startsWith(this.#s))return!1;e=e.length===t?`/`:e.slice(t)}let n=this.#_(e);if(n===-2)return!1;n===-3&&(e=this.#l);let r=n>=0?e.slice(0,n):e,i=n>=0?e.slice(n+1):void 0,a=C(r);return this.#o.cleanPath=r,this.#o.normalized=a,this.#o.queryString=i,!0}#_(e){let t=!1;for(let n=0;n<e.length;n++){let r=e.codePointAt(n);if(r===35)return this.#l=e.slice(0,n),-3;if(r===63)return n;if(r>=128)return-2;if(r===47){if(t)return-2;t=!0}else t=!1}return-1}#v(e,t,n){if(n!==void 0){let r=this.#e.parseQueryString(n);if(this.#e.strictQueryParams){let n=e.declaredQueryParamsSet;for(let e in r){if(!n.has(e))return;t[e]=r[e]}}else for(let e in r)t[e]=r[e]}return{segments:e.matchSegments,params:t,meta:e.meta}}#y(e,t){return(e.length>1&&e.endsWith(`/`))===t.hasTrailingSlash}#b(e,t){return e.length===1?this.#t.slashChildRoute??this.#t.route:this.#x(this.#t,e,1,t)}#x(e,t,n,r){let i=e,a=t.length,o=this.#u;for(;n<=a;){let e=t.indexOf(`/`,n),s=e===-1?a:e,c=t.slice(n,s),l=o?c:c.toLowerCase(),u;if(l in i.staticChildren)u=i.staticChildren[l];else if(i.paramChild)u=i.paramChild.node,r[i.paramChild.name]=c;else if(i.splatChild)return this.#S(i.splatChild,t,n,r);else return;i=u,n=s+1}return i.slashChildRoute??i.route}#S(e,t,n,r){let i=e.node;if(!i.hasChildren)return r[e.name]=t.slice(n),i.route;let a={},o=this.#x(i,t,n,a);return o?(Object.assign(r,a),o):(r[e.name]=t.slice(n),i.route)}#C(e){let t=this.#d;if(!t)return!0;for(let n in e){let r=e[n];if(r.includes(`%`)){if(!ge(r))return!1;e[n]=t(r)}}return!0}#w(e,t){for(let[n,r]of t.constraintPatterns)if(!r.pattern.test(e[n]))return!1;return!0}};const E=e=>{let t=e.indexOf(`%`),n=e.indexOf(`+`);if(t===-1&&n===-1)return e;let r=n===-1?e:e.replaceAll(`+`,` `);return t===-1?r:decodeURIComponent(r)},Me=(e,t)=>{if(e===void 0)return t.boolean.decodeUndefined();let n=t.boolean.decodeRaw(e);if(n!==null)return n;let r=E(e),i=t.number.decode(r);return i===null?t.boolean.decodeValue(r):i},D=e=>{let t=typeof e;if(t!==`string`&&t!==`number`&&t!==`boolean`)throw TypeError(`[search-params] Array element must be a string, number, or boolean — received ${t===`object`&&e===null?`null`:t}`);return encodeURIComponent(e)},Ne={none:{encodeArray:(e,t)=>{if(t.length===0)return``;let n=`${e}=${D(t[0])}`;for(let r=1;r<t.length;r++)n+=`&${e}=${D(t[r])}`;return n}},brackets:{encodeArray:(e,t)=>{if(t.length===0)return``;let n=`${e}[]=${D(t[0])}`;for(let r=1;r<t.length;r++)n+=`&${e}[]=${D(t[r])}`;return n}},index:{encodeArray:(e,t)=>{if(t.length===0)return``;let n=`${e}[0]=${D(t[0])}`;for(let r=1;r<t.length;r++)n+=`&${e}[${r}]=${D(t[r])}`;return n}},comma:{encodeArray:(e,t)=>{if(t.length===0)return``;let n=`${e}=${D(t[0])}`;for(let e=1;e<t.length;e++)n+=`,${D(t[e])}`;return n},decodeValue:e=>e.includes(`,`)?e.split(`,`):null}},Pe={none:{encode:(e,t)=>`${e}=${t}`,decodeUndefined:()=>null,decodeRaw:()=>null,decodeValue:e=>e},auto:{encode:(e,t)=>`${e}=${t}`,decodeUndefined:()=>null,decodeRaw:e=>e===`true`?!0:e===`false`?!1:null,decodeValue:e=>e},"empty-true":{encode:(e,t)=>t?e:`${e}=false`,decodeUndefined:()=>!0,decodeRaw:()=>null,decodeValue:e=>e}},Fe={default:{encode:e=>e},hidden:{encode:()=>``}},O={auto:{decode:e=>{let t=e.length;if(t===0||t>1&&e.codePointAt(0)===48&&e.codePointAt(1)!==46)return null;let n=!1;for(let r=0;r<t;r++){let i=e.codePointAt(r);if(!(i!==void 0&&i>=48&&i<=57)){if(i===46&&!n&&r!==0&&r!==t-1){n=!0;continue}return null}}let r=Number(e);return!Number.isSafeInteger(r)&&!n?null:r}},none:{decode:()=>null}},Ie=(e,t,n,r)=>({boolean:Pe[t],null:Fe[n],number:O[r],array:Ne[e]}),Le={boolean:Pe.auto,null:Fe.default,number:O.auto,array:Ne.none},k={arrayFormat:`none`,booleanFormat:`auto`,nullFormat:`default`,numberFormat:`auto`},Re={...k,strategies:Le},ze=e=>{if(!e||e.arrayFormat===void 0&&e.booleanFormat===void 0&&e.nullFormat===void 0&&e.numberFormat===void 0)return Re;let t=e.arrayFormat??k.arrayFormat,n=e.booleanFormat??k.booleanFormat,r=e.nullFormat??k.nullFormat,i=e.numberFormat??k.numberFormat;return{arrayFormat:t,booleanFormat:n,nullFormat:r,numberFormat:i,strategies:Ie(t,n,r,i)}},A=e=>encodeURIComponent(e),Be=(e,t,n)=>{let r=A(e);switch(typeof t){case`string`:case`number`:return`${r}=${A(t)}`;case`boolean`:return n.strategies.boolean.encode(r,t);case`object`:return t===null?n.strategies.null.encode(r):Array.isArray(t)?n.strategies.array.encodeArray(r,t):`${r}=${A(t)}`;default:return`${r}=${A(t)}`}},Ve=e=>{let t=e.indexOf(`?`);return t===-1?e:e.slice(t+1)};function He(e,t,n,r){let i=e[t];i===void 0?e[t]=r?[n]:n:Array.isArray(i)?i.push(n):e[t]=[i,n]}function Ue(e,t,n,r,i){return i?Me(r?e.slice(t+1,n):void 0,i):r?E(e.slice(t+1,n)):null}function We(e,t,n,r,i){let a=e.indexOf(`=`,t),o=a!==-1&&a<n,s=o?a:n,c=s,l=!1;for(let n=t;n<s;n++)if(e.codePointAt(n)===91){c=n,l=!0;break}let u=E(e.slice(t,c));if(!l&&o&&i?.array.decodeValue){let t=e.slice(a+1,n),o=i.array.decodeValue(t);if(o){for(let e of o)He(r,u,Me(e,i),!0);return}}He(r,u,Ue(e,a,n,o,i),l)}const Ge=(e,t)=>{let n=Ve(e);if(n===``||n===`?`)return{};if(!t)return Ke(n);let r=ze(t),i={},a=0,o=n.length;for(;a<o;){let e=n.indexOf(`&`,a);e===-1&&(e=o),We(n,a,e,i,r.strategies),a=e+1}return i};function Ke(e){let t={};return qe(e,t),t}function qe(e,t){let n=0,r=e.length;for(;n<r;){let i=e.indexOf(`&`,n);i===-1&&(i=r),We(e,n,i,t),n=i+1}}const Je=(e,t)=>{let n=Object.keys(e);if(n.length===0)return``;let r=ze(t),i=[];for(let t of n){let n=e[t];if(n===void 0)continue;let a=Be(t,n,r);a&&i.push(a)}return i.join(`&`)};function j(e,t){let n=e.path,r=n.startsWith(`~`),i=r?n.slice(1):n,a={name:e.name,path:i,absolute:r,children:[],parent:t,nonAbsoluteChildren:[],fullName:``};if(e.children)for(let t of e.children){let e=j(t,a);a.children.push(e)}return a}function Ye(e,t,n){let r=j({name:e,path:t},null);for(let e of n){let t=j(e,r);r.children.push(t)}return r}const Xe=Object.freeze(new Map),Ze=Object.freeze([]);function Qe(e){return e.parent?.name?`${e.parent.fullName}.${e.name}`:e.name}function $e(e,t){return e.endsWith(`/`)&&t.startsWith(`/`)?e+t.slice(1):e+t}function et(e){if(!e.path)return null;let{urlParams:t,queryParams:n,spatParams:r}=e.paramMeta;if(t.length>0||n.length>0||r.length>0)return null;if(e.absolute)return e.path;let i=e.parent;return i?.path?i.staticPath===null?null:$e(i.staticPath,e.path):e.path}function tt(e){let t=new Map;for(let n of e)t.set(n.name,n);return t}function nt(e,t,n){let r=[],i=[];for(let a of e){let e=rt(a,t,n);r.push(e),e.absolute||i.push(e)}return{childrenMap:tt(r),nonAbsoluteChildren:i}}function rt(e,t,n){let r=le(e.path),i=r.paramTypeMap,a={name:e.name,path:e.path,absolute:e.absolute,parent:t,children:void 0,paramMeta:r,nonAbsoluteChildren:void 0,fullName:``,staticPath:null,paramTypeMap:i};if(a.fullName=Qe(a),a.staticPath=et(a),e.children.length===0)a.children=Xe,a.nonAbsoluteChildren=Ze;else{let{childrenMap:t,nonAbsoluteChildren:r}=nt(e.children,a,n);a.children=t,a.nonAbsoluteChildren=r}return n&&(e.children.length>0&&(Object.freeze(a.nonAbsoluteChildren),Object.freeze(a.children)),Object.freeze(i),Object.freeze(a)),a}function it(e,t=!0){return rt(e,null,t)}function at(e,t){let n=[];return{add(e){return n.push(e),this},addMany(e){return n.push(...e),this},build(r){return it(Ye(e,t,n),!r?.skipFreeze)}}}function ot(e,t,n,r){return at(e,t).addMany(n).build(r)}function M(e){let t=e.absolute?`~${e.path}`:e.path,n={name:e.name,path:t};return e.children.size>0&&(n.children=Array.from(e.children.values(),M)),n}function st(e){return Array.from(e.children.values(),M)}function ct(e){let t=e?.queryParams;return new je({...e?.caseSensitive===void 0?void 0:{caseSensitive:e.caseSensitive},...e?.strictTrailingSlash===void 0?void 0:{strictTrailingSlash:e.strictTrailingSlash},...e?.strictQueryParams===void 0?void 0:{strictQueryParams:e.strictQueryParams},...e?.urlParamsEncoding===void 0?void 0:{urlParamsEncoding:e.urlParamsEncoding},parseQueryString:e=>Ge(e,t),buildQueryString:e=>Je(e,t)})}const lt={defaultRoute:``,defaultParams:{},trailingSlash:`preserve`,queryParamsMode:`loose`,queryParams:k,urlParamsEncoding:`default`,allowNotFound:!0,rewritePathOnMatch:!0};function ut(e){Object.freeze(e);for(let t of Object.keys(e)){let n=e[t];n&&typeof n==`object`&&n.constructor===Object&&ut(n)}return e}function dt(e,t){return typeof e==`function`?e(t):e}function ft(e){if(!e||typeof e!=`object`||Array.isArray(e))throw TypeError(`[router.constructor] options must be a plain object`)}var pt=class{#e;constructor(e={}){this.#e=ut({...lt,...e})}static validateOptionsIsObject(e){ft(e)}get(){return this.#e}};function N(e,t){if(e===t)return!0;if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(!N(e[n],t[n]))return!1;return!0}return!1}const mt=new WeakMap;function ht(e){return mt.get(e)}function gt(e,t){mt.set(e,t)}var _t=class{#e=void 0;#t=void 0;#n;#r=new Map;get(){return this.#e}set(e){this.#t=this.#e,this.#e=e?s(e):void 0}getPrevious(){return this.#t}reset(){this.#e=void 0,this.#t=void 0,this.#r.clear()}setDependencies(e){this.#n=e}makeState(e,t,n,r,i){let a=this.#n.getDefaultParams(),l=Object.hasOwn(a,e),u;u=l?Object.freeze({...a[e],...t}):!t||t===c?c:Object.freeze({...t});let d={name:e,params:u,path:n??this.#n.buildPath(e,t),context:{},...!i&&{transition:o}};return r&>(d,r),i?d:s(d)}areStatesEqual(e,t,n=!0){if(!e||!t)return!!e==!!t;if(e.name!==t.name)return!1;if(n){let n=this.#i(e.name);for(let r of n)if(!N(e.params[r],t.params[r]))return!1;return!0}let r=Object.keys(e.params),i=Object.keys(t.params);if(r.length!==i.length)return!1;for(let n of r)if(!(n in t.params)||!N(e.params[n],t.params[n]))return!1;return!0}#i(e){let t=this.#r.get(e);if(t!==void 0)return t;let n=this.#n.getUrlParams(e);return this.#r.set(e,n),n}};const vt={[n.ROUTER_START]:t.ROUTER_START,[n.ROUTER_STOP]:t.ROUTER_STOP,[n.TRANSITION_SUCCESS]:t.TRANSITION_SUCCESS,[n.TRANSITION_START]:t.TRANSITION_START,[n.TRANSITION_LEAVE_APPROVE]:t.TRANSITION_LEAVE_APPROVE,[n.TRANSITION_ERROR]:t.TRANSITION_ERROR,[n.TRANSITION_CANCEL]:t.TRANSITION_CANCEL},yt=Object.keys(vt),P=`router.usePlugin`;function bt(e){if(!(e&&typeof e==`object`)||Array.isArray(e))throw TypeError(`[router.usePlugin] Plugin factory must return an object, got ${typeof e}`);if(typeof e.then==`function`)throw TypeError(`[router.usePlugin] Async plugin factories are not supported. Factory returned a Promise instead of a plugin object.`)}var xt=class t{#e=new Set;#t=new Set;#n;#r=e;#i=null;static validatePlugin(e){bt(e)}static validateNoDuplicatePlugins(e,t){for(let n of e)if(t(n))throw Error(`[router.usePlugin] Plugin factory already registered. To re-register, first unsubscribe the existing plugin.`)}setDependencies(e){this.#n=e}setLimits(e){
|
|
2
|
+
// eslint-disable-next-line sonarjs/void-use -- @preserve: limits passed to validator via RouterInternals; void suppresses TS6133 until plugin implements validateCountThresholds
|
|
3
|
+
this.#r=e,this.#r}setValidatorGetter(e){this.#i=e}count(){return this.#e.size}use(...e){if(this.#i?.()?.plugins.validateCountThresholds(this.#e.size+e.length),e.length===1){let t=e[0],n=this.#o(t);this.#e.add(t);let r=!1,i=()=>{if(!r){r=!0,this.#e.delete(t),this.#t.delete(i);try{n()}catch(e){h.error(P,`Error during cleanup:`,e)}}};return this.#t.add(i),i}let t=this.#a(e),n=[];try{for(let e of t){let t=this.#o(e);n.push({factory:e,cleanup:t})}}catch(e){for(let{cleanup:e}of n)try{e()}catch(e){h.error(P,`Cleanup error:`,e)}throw e}for(let{factory:e}of n)this.#e.add(e);let r=!1,i=()=>{if(!r){r=!0,this.#t.delete(i);for(let{factory:e}of n)this.#e.delete(e);for(let{cleanup:e}of n)try{e()}catch(e){h.error(P,`Error during cleanup:`,e)}}};return this.#t.add(i),i}getAll(){return[...this.#e]}has(e){return this.#e.has(e)}disposeAll(){for(let e of this.#t)e();this.#e.clear(),this.#t.clear()}#a(e){let t=new Set;for(let n of e)t.has(n)?this.#i?.()?.plugins.warnBatchDuplicates(e):t.add(n);return t}#o(e){let n=this.#n.compileFactory(e);t.validatePlugin(n),this.#i?.()?.plugins.validatePluginKeys(n),Object.freeze(n);let r=[];for(let e of yt)e in n&&(typeof n[e]==`function`?(r.push(this.#n.addEventListener(vt[e],n[e])),e===`onStart`&&this.#n.canNavigate()&&this.#i?.()?.plugins.warnPluginAfterStart(e)):this.#i?.()?.plugins.warnPluginMethodType(e));return()=>{for(let e of r)e();typeof n.teardown==`function`&&n.teardown()}}};function St(e){let t=()=>e;return()=>t}var Ct=class{#e=new Map;#t=new Map;#n=new Map;#r=new Map;#i=[this.#n,this.#r];#a=new Set;#o=new Set;#s=new Set;#c;#l=e;#u=null;setDependencies(e){this.#c=e}setLimits(e){
|
|
4
|
+
// eslint-disable-next-line sonarjs/void-use -- @preserve: Wave 3 validator reads limits via RouterInternals; void suppresses TS6133 until then
|
|
5
|
+
this.#l=e,this.#l}setValidatorGetter(e){this.#u=e}getHandlerCount(e){return e===`activate`?this.#t.size:this.#e.size}addCanActivate(e,t,n=!1){n?this.#o.add(e):this.#o.delete(e);let r=this.#t.has(e);this.#d(`activate`,e,t,this.#t,this.#r,`canActivate`,r)}addCanDeactivate(e,t,n=!1){n?this.#s.add(e):this.#s.delete(e);let r=this.#e.has(e);this.#d(`deactivate`,e,t,this.#e,this.#n,`canDeactivate`,r)}clearCanActivate(e){this.#t.delete(e),this.#r.delete(e),this.#o.delete(e)}clearCanDeactivate(e){this.#e.delete(e),this.#n.delete(e),this.#s.delete(e)}clearAll(){this.#t.clear(),this.#r.clear(),this.#e.clear(),this.#n.clear(),this.#o.clear(),this.#s.clear()}clearDefinitionGuards(){for(let e of this.#o)this.#t.delete(e),this.#r.delete(e);for(let e of this.#s)this.#e.delete(e),this.#n.delete(e);this.#o.clear(),this.#s.clear()}getFactories(){let e={},t={};for(let[t,n]of this.#e)e[t]=n;for(let[e,n]of this.#t)t[e]=n;return[e,t]}getFunctions(){return this.#i}canNavigateTo(e,t,n,r){for(let t of e)if(!this.#f(this.#n,t,n,r,`canNavigateTo`))return!1;for(let e of t)if(!this.#f(this.#r,e,n,r,`canNavigateTo`))return!1;return!0}#d(e,t,n,r,i,a,o){o?this.#u?.()?.lifecycle.warnOverwrite(t,e,a):this.#u?.()?.lifecycle.validateCountThresholds(r.size+1,a);let s=typeof n==`boolean`?St(n):n;r.set(t,s),this.#a.add(t);try{let e=this.#c.compileFactory(s);if(typeof e!=`function`)throw TypeError(`[router.${a}] Factory must return a function, got ${typeof e}`);i.set(t,e)}catch(e){throw r.delete(t),e}finally{this.#a.delete(t)}}#f(e,t,n,r,i){let a=e.get(t);if(!a)return!0;try{let e=a(n,r);return typeof e==`boolean`?e:(this.#u?.()?.lifecycle.warnAsyncGuardSync(t,i),!1)}catch{return!1}}};function wt(){return{decoders:Object.create(null),encoders:Object.create(null),defaultParams:Object.create(null),forwardMap:Object.create(null),forwardFnMap:Object.create(null)}}function Tt(e,t){for(let n in e)if(e[n]!==t[n])return!1;return!0}function Et(e,t,n){for(let r in e)if(!(r in n)&&e[r]!==t[r])return!1;return!0}function Dt(e,t){if(!t||!Ot(e,t))return e;let n={};for(let r in e)t[r]!==`query`&&(n[r]=e[r]);return n}function Ot(e,t){for(let n in e)if(t[n]===`query`)return!0;return!1}function F(e){let t={name:e.name,path:e.path};return e.children&&(t.children=e.children.map(e=>F(e))),t}function kt(e,t,n=``){for(let r=0;r<e.length;r++){let i=e[r],a=n?`${n}.${i.name}`:i.name;if(a===t)return e.splice(r,1),!0;if(i.children&&t.startsWith(`${a}.`)&&kt(i.children,t,a))return!0}return!1}function At(e,t){for(let n of Object.keys(e))t(n)&&delete e[n]}function jt(e,t){let n=t.search(/[?#]/),r=n===-1?t:t.slice(0,n);if(r===`/`||r.endsWith(`/`))return t;let i=e.search(/[?#]/),a=i===-1?e:e.slice(0,i);return a.length>1&&a.endsWith(`/`)?`${r}/${n===-1?``:t.slice(n)}`:t}function Mt(e,t,n=100){let r=new Set,i=[e],a=e;for(;t[a];){let e=t[a];if(r.has(e)){let t=i.indexOf(e),n=[...i.slice(t),e];throw Error(`Circular forwardTo: ${n.join(` → `)}`)}if(r.add(a),i.push(e),a=e,i.length>n)throw Error(`forwardTo chain exceeds maximum depth (${n}): ${i.join(` → `)}`)}return a}function Nt(e,t,n){let r=ot(``,t,e),i=ct(n);return i.registerTree(r),{tree:r,matcher:i}}function I(e){let t=Nt(e.definitions,e.rootPath,e.matcherOptions);e.tree=t.tree,e.matcher=t.matcher}function Pt(e){I(e),e.resolvedForwardMap=L(e.config)}function Ft(e){It(e),I(e)}function It(e){e.definitions.length=0,Object.assign(e.config,wt()),e.resolvedForwardMap=Object.create(null),e.routeCustomFields=Object.create(null)}function L(e){let t=Object.create(null);for(let n of Object.keys(e.forwardMap))t[n]=Mt(n,e.forwardMap);return t}function Lt(e,t,n){if(e.canActivate){let n=typeof e.forwardTo==`string`?e.forwardTo:`[dynamic]`;h.warn(`real-router`,`Route "${t}" has both forwardTo and canActivate. canActivate will be ignored because forwardTo creates a redirect (industry standard). Move canActivate to the target route "${n}".`)}if(e.canDeactivate){let n=typeof e.forwardTo==`string`?e.forwardTo:`[dynamic]`;h.warn(`real-router`,`Route "${t}" has both forwardTo and canDeactivate. canDeactivate will be ignored because forwardTo creates a redirect (industry standard). Move canDeactivate to the target route "${n}".`)}if(typeof e.forwardTo==`function`){let n=e.forwardTo.constructor.name===`AsyncFunction`,r=e.forwardTo.toString().includes(`__awaiter`);if(n||r)throw TypeError(`forwardTo callback cannot be async for route "${t}". Async functions break matchPath/buildPath.`)}typeof e.forwardTo==`string`?n.forwardMap[t]=e.forwardTo:n.forwardFnMap[t]=e.forwardTo}function Rt(e,t,n,r,i,a,o){let s=new Set([`name`,`path`,`children`,`canActivate`,`canDeactivate`,`forwardTo`,`encodeParams`,`decodeParams`,`defaultParams`]),c=Object.fromEntries(Object.entries(e).filter(([e])=>!s.has(e)));Object.keys(c).length>0&&(r[t]=c),e.canActivate&&(o?o.addActivateGuard(t,e.canActivate):i.set(t,e.canActivate)),e.canDeactivate&&(o?o.addDeactivateGuard(t,e.canDeactivate):a.set(t,e.canDeactivate)),e.forwardTo&&Lt(e,t,n),e.decodeParams&&(n.decoders[t]=t=>e.decodeParams?.(t)??t),e.encodeParams&&(n.encoders[t]=t=>e.encodeParams?.(t)??t),e.defaultParams&&(n.defaultParams[t]=e.defaultParams)}function R(e,t,n,r,i,a,o=``){for(let s of e){let e=o?`${o}.${s.name}`:s.name;Rt(s,e,t,n,r,i,a),s.children&&R(s.children,t,n,r,i,a,e)}}function zt(e,t){let n=[],r=wt(),i=Object.create(null),a=new Map,o=new Map;for(let t of e)n.push(F(t));let{tree:s,matcher:c}=Nt(n,``,t);return R(e,r,i,a,o,void 0,``),{definitions:n,config:r,tree:s,matcher:c,resolvedForwardMap:L(r),routeCustomFields:i,rootPath:``,matcherOptions:t,depsStore:void 0,lifecycleNamespace:void 0,pendingCanActivate:a,pendingCanDeactivate:o,treeOperations:{commitTreeChanges:Pt,resetStore:Ft,nodeToDefinition:M}}}const z=[];Object.freeze(z);function Bt(e){let t=e.length,n=[];for(let r=t-1;r>=0;r--)n.push(e[r]);return n}function Vt(e){let t=e.split(`.`),n=t.length,r=[t[0]],i=t[0].length;for(let a=1;a<n-1;a++)i+=1+t[a].length,r.push(e.slice(0,i));return r.push(e),r}function Ht(e){let t=typeof e;return t===`string`||t===`number`||t===`boolean`}function Ut(e,t,n,r){let i=t[e];if(!i||typeof i!=`object`)return!0;for(let e of Object.keys(i)){let t=n.params[e],i=r.params[e];if(Ht(t)&&Ht(i)&&String(t)!==String(i))return!1}return!0}function Wt(e,t,n,r,i,a){for(let o=0;o<a;o++){let a=r[o];if(a!==i[o]||!Ut(a,e,t,n))return o}return a}const Gt=new Map;function B(e){let t=Gt.get(e);if(t)return t;let n=Kt(e);return Object.freeze(n),Gt.set(e,n),n}function Kt(e){if(!e)return[``];let t=e.indexOf(`.`);if(t===-1)return[e];let n=e.indexOf(`.`,t+1);if(n===-1)return[e.slice(0,t),e];let r=e.indexOf(`.`,n+1);return r===-1?[e.slice(0,t),e.slice(0,n),e]:e.indexOf(`.`,r+1)===-1?[e.slice(0,t),e.slice(0,n),e.slice(0,r),e]:Vt(e)}let V,H,U=null,qt,Jt,W=null;function Yt(e,t){if(!t)return{intersection:``,toActivate:B(e.name),toDeactivate:z};let n=ht(e),r=ht(t);if(!n&&!r)return{intersection:``,toActivate:B(e.name),toDeactivate:Bt(B(t.name))};let i=B(e.name),a=B(t.name),o=Math.min(a.length,i.length),s=Wt(n??r,e,t,i,a,o),c;if(s>=a.length)c=z;else if(s===0&&a.length===1)c=a;else{c=[];for(let e=a.length-1;e>=s;e--)c.push(a[e])}let l=s===0?i:i.slice(s);return{intersection:s>0?a[s-1]:``,toDeactivate:c,toActivate:l}}function G(e,t){if(U!==null&&e===V&&t===H)return U;if(W!==null&&e===qt&&t===Jt)return W;let n=Yt(e,t);return qt=V,Jt=H,W=U,V=e,H=t,U=n,n}function Xt(e){let t=[];for(let n of e)for(let e of n.paramMeta.urlParams)t.push(e);return t}function Zt(e){return e.at(-1)?.fullName??``}function Qt(e,t){return{name:t??Zt(e.segments),params:e.params,meta:e.meta}}var $t=class{#e;#t;get#n(){return this.#e.depsStore}constructor(e=[],t){this.#e=zt(e,t)}static shouldUpdateNode(e){return(t,n)=>{if(!(t&&typeof t==`object`&&`name`in t))throw TypeError(`[router.shouldUpdateNode] toState must be valid State object`);if(t.transition.reload||e===``)return!0;let{intersection:r,toActivate:i,toDeactivate:a}=G(t,n);return e===r||i.includes(e)?!0:a.includes(e)}}setDependencies(e){this.#e.depsStore=e;for(let[t,n]of this.#e.pendingCanActivate)e.addActivateGuard(t,n);this.#e.pendingCanActivate.clear();for(let[t,n]of this.#e.pendingCanDeactivate)e.addDeactivateGuard(t,n);this.#e.pendingCanDeactivate.clear()}setLifecycleNamespace(e){this.#e.lifecycleNamespace=e}setRootPath(e){this.#e.rootPath=e,I(this.#e)}hasRoute(e){return this.#e.matcher.hasRoute(e)}clearRoutes(){Ft(this.#e)}buildPath(e,t,n){if(e===i.UNKNOWN_ROUTE)return typeof t?.path==`string`?t.path:``;let r=Object.hasOwn(this.#e.config.defaultParams,e)?{...this.#e.config.defaultParams[e],...t}:t??{},a=typeof this.#e.config.encoders[e]==`function`?this.#e.config.encoders[e]({...r}):r;return this.#e.matcher.buildPath(e,a,this.#i(n))}matchPath(e,t){let n=t,r=this.#e.matcher.match(e);if(!r)return;let{name:i,params:a,meta:o}=Qt(r),s=typeof this.#e.config.decoders[i]==`function`?this.#e.config.decoders[i](a):a,{name:c,params:l}=this.#n.forwardState(i,s),u=e;if(n.rewritePathOnMatch){let t=typeof this.#e.config.encoders[c]==`function`?this.#e.config.encoders[c]({...l}):l,r=n.trailingSlash;u=this.#e.matcher.buildPath(c,t,{trailingSlash:r===`never`||r===`always`?r:void 0,queryParamsMode:n.queryParamsMode}),r===`preserve`&&(u=jt(e,u))}return this.#n.makeState(c,l,u,o)}forwardState(e,t){if(Object.hasOwn(this.#e.config.forwardFnMap,e)){let n=this.#r(e,t),r=this.#e.config.forwardFnMap[e],i=this.#a(e,r,t);return{name:i,params:this.#r(i,n)}}let n=this.#e.resolvedForwardMap[e]??e;if(n!==e&&Object.hasOwn(this.#e.config.forwardFnMap,n)){let r=this.#r(e,t),i=this.#e.config.forwardFnMap[n],a=this.#a(n,i,t);return{name:a,params:this.#r(a,r)}}if(n!==e){let r=this.#r(e,t);return{name:n,params:this.#r(n,r)}}return{name:e,params:this.#r(e,t)}}buildStateResolved(e,t){let n=this.#e.matcher.getSegmentsByName(e);if(n)return Qt({segments:n,params:t,meta:this.#e.matcher.getMetaByName(e)},e)}isActiveRoute(e,t={},n=!1,r=!0){let i=this.#n.getState();if(!i)return!1;let a=i.name;if(a!==e&&!a.startsWith(`${e}.`)&&!e.startsWith(`${a}.`))return!1;let s=this.#e.config.defaultParams[e];if(n||a===e){let n={name:e,params:s?{...s,...t}:t,path:``,transition:o,context:{}};return this.#n.areStatesEqual(n,i,r)}if(!a.startsWith(`${e}.`))return!1;let c=i.params;return Tt(t,c)?s?Et(r?Dt(s,this.#e.matcher.getMetaByName(e)?.[e]):s,c,t):!0:!1}getMetaForState(e){return this.#e.matcher.hasRoute(e)?this.#e.matcher.getMetaByName(e):void 0}getUrlParams(e){let t=this.#e.matcher.getSegmentsByName(e);return t?Xt(t):[]}getStore(){return this.#e}#r(e,t){return Object.hasOwn(this.#e.config.defaultParams,e)?{...this.#e.config.defaultParams[e],...t}:t}#i(e){if(this.#t)return this.#t;let t=e?.trailingSlash;return this.#t=Object.freeze({trailingSlash:t===`never`||t===`always`?t:void 0,queryParamsMode:e?.queryParamsMode}),this.#t}#a(e,t,n){let r=new Set([e]),i=t(this.#n.getDependency,n),a=0;if(typeof i!=`string`)throw TypeError(`forwardTo callback must return a string, got ${typeof i}`);for(;a<100;){if(this.#e.matcher.getSegmentsByName(i)===void 0)throw Error(`Route "${i}" does not exist`);if(r.has(i)){let e=[...r,i].join(` → `);throw Error(`Circular forwardTo detected: ${e}`)}if(r.add(i),Object.hasOwn(this.#e.config.forwardFnMap,i)){let e=this.#e.config.forwardFnMap[i];i=e(this.#n.getDependency,n),a++;continue}let e=this.#e.config.forwardMap[i];if(e!==void 0){i=e,a++;continue}return i}throw Error(`forwardTo exceeds maximum depth of 100`)}};const en=new l(u.ROUTER_NOT_STARTED),tn=new l(u.ROUTE_NOT_FOUND),nn=new l(u.SAME_STATES),K=Promise.reject(en),rn=Promise.reject(tn),an=Promise.reject(nn);K.catch(()=>{}),rn.catch(()=>{}),an.catch(()=>{});function on(e,t,n,r,i){Object.freeze(n),Object.freeze(r);let a={phase:`activating`,reason:`success`,segments:Object.freeze({deactivated:n,activated:r,intersection:i})};return e?.name!==void 0&&(a.from=e.name),t.reload!==void 0&&(a.reload=t.reload),t.redirected!==void 0&&(a.redirected=t.redirected),Object.freeze(a)}function sn({signal:e,...t}){return t}function cn(e,t){let{toState:n,fromState:r,opts:a,toDeactivate:o,toActivate:s,intersection:c}=t;if(n.name!==i.UNKNOWN_ROUTE&&!e.hasRoute(n.name)){let t=new l(u.ROUTE_NOT_FOUND,{routeName:n.name});throw e.sendTransitionFail(n,r,t),t}if(r)for(let n of o)!s.includes(n)&&t.canDeactivateFunctions.has(n)&&e.clearCanDeactivate(n);n.transition=on(r,a,o,s,c);let d=Object.freeze(n);e.setState(d);let f=a.signal===void 0?a:sn(a);return e.sendTransitionDone(d,r,f),d}function ln(e,t,n,r){let i=t;i.code===u.TRANSITION_CANCELLED||i.code===u.ROUTE_NOT_FOUND||e.sendTransitionFail(n,r,i)}function q(e,t,n){if(e instanceof DOMException&&e.name===`AbortError`)throw new l(u.TRANSITION_CANCELLED);un(e,t,n)}function un(e,t,n){throw e instanceof l?(e.setCode(t),e):new l(t,fn(e,n))}const dn=new Set([`code`,`segment`,`path`,`redirect`]);function fn(e,t){let n={segment:t};if(e instanceof Error)return{...n,message:e.message,stack:e.stack,...`cause`in e&&e.cause!==void 0&&{cause:e.cause}};if(e&&typeof e==`object`){let t={};for(let[n,r]of Object.entries(e))dn.has(n)||(t[n]=r);return{...n,...t}}return n}async function pn(e,t,n){let r;try{r=await e}catch(e){q(e,t,n);return}if(!r)throw new l(t,{segment:n})}async function mn(e,t,n,r,i,a,o,s,c,d){await pn(c,n,d);for(let c=s;c<t.length;c++){if(!o())throw new l(u.TRANSITION_CANCELLED);let s=t[c],d=e.get(s);if(!d)continue;let f=!1;try{f=d(r,i,a)}catch(e){q(e,n,s)}if(f instanceof Promise){await pn(f,n,s);continue}if(!f)throw new l(n,{segment:s})}}async function hn(e,t,n,r,i,a,o,s,c){if(await e,!s())throw new l(u.TRANSITION_CANCELLED);let d=c();if(d!==void 0&&(await d,!s()))throw new l(u.TRANSITION_CANCELLED);if(r){let e=J(t,n,u.CANNOT_ACTIVATE,i,a,o,s);if(e!==void 0&&await e,!s())throw new l(u.TRANSITION_CANCELLED)}}function gn(e,t,n,r,i,a,o,s,c,d,f){if(i){let i=J(e,n,u.CANNOT_DEACTIVATE,o,s,c,d);if(i!==void 0)return hn(i,t,r,a,o,s,c,d,f)}if(!d())throw new l(u.TRANSITION_CANCELLED);let p=f();if(p!==void 0)return _n(p,a?t:void 0,r,o,s,c,d);if(a)return J(t,r,u.CANNOT_ACTIVATE,o,s,c,d)}async function _n(e,t,n,r,i,a,o){if(await e,!o())throw new l(u.TRANSITION_CANCELLED);if(t!==void 0){let e=J(t,n,u.CANNOT_ACTIVATE,r,i,a,o);if(e!==void 0&&await e,!o())throw new l(u.TRANSITION_CANCELLED)}}function J(e,t,n,r,i,a,o){for(let[s,c]of t.entries()){if(!o())throw new l(u.TRANSITION_CANCELLED);let d=e.get(c);if(!d)continue;let f=!1;try{f=d(r,i,a)}catch(e){q(e,n,c)}if(f instanceof Promise)return mn(e,t,n,r,i,a,o,s+1,f,c);if(!f)throw new l(n,{segment:c})}}const vn=[i.UNKNOWN_ROUTE];Object.freeze(vn);const yn={replace:!0};Object.freeze(yn);function bn(e,t){return t?.name===i.UNKNOWN_ROUTE&&!e.replace?{...e,replace:!0}:e}function xn(e,t,n){return!!e&&!t.reload&&!t.force&&e.path===n.path}var Sn=class{lastSyncResolved=!1;lastSyncRejected=!1;#e;#t=null;#n=0;setDependencies(e){this.#e=e}navigate(e,t,n){this.lastSyncResolved=!1;let r=this.#e;if(!r.canNavigate())return this.lastSyncRejected=!0,K;let i;try{i=r.buildNavigateState(e,t)}catch(e){return Promise.reject(e)}return i?this.#r(i,n):(r.emitTransitionError(void 0,r.getState(),tn),this.lastSyncRejected=!0,rn)}navigateToState(e,t){this.lastSyncResolved=!1;let n=this.#e;if(!n.canNavigate())return this.lastSyncRejected=!0,K;if(e.name!==i.UNKNOWN_ROUTE&&!n.hasRoute(e.name)){let t=new l(u.ROUTE_NOT_FOUND,{routeName:e.name});return n.emitTransitionError(void 0,n.getState(),t),this.lastSyncRejected=!0,Promise.reject(t)}let r={name:e.name,params:e.params,path:e.path,context:{...e.context}};return this.#r(r,t)}navigateToDefault(e){let t=this.#e;if(!t.getOptions().defaultRoute)return Promise.reject(new l(u.ROUTE_NOT_FOUND,{routeName:`defaultRoute not configured`}));let n,r;try{({route:n,params:r}=t.resolveDefault())}catch(e){return Promise.reject(e)}return n?this.navigate(n,r,e):Promise.reject(new l(u.ROUTE_NOT_FOUND,{routeName:`defaultRoute resolved to empty`}))}navigateToNotFound(e){this.#c();let t=this.#e.getState(),n=t?B(t.name).toReversed():[];Object.freeze(n);let r={deactivated:n,activated:vn,intersection:``};Object.freeze(r);let a={phase:`activating`,...t&&{from:t.name},reason:`success`,segments:r};Object.freeze(a);let o={name:i.UNKNOWN_ROUTE,params:c,path:e,transition:a,context:{}};return Object.freeze(o),this.#e.setState(o),this.#e.emitTransitionSuccess(o,t,yn),o}abortCurrentNavigation(){this.#t?.abort(new l(u.TRANSITION_CANCELLED)),this.#t=null}#r(e,t){let n=this.#e,r,a=!1,o=null;try{if(r=n.getState(),t=bn(t,r),xn(r,t,e))return n.emitTransitionError(e,r,nn),this.lastSyncRejected=!0,an;this.#c(t.signal);let s=++this.#n;if(n.startTransition(e,r),a=!0,this.#n!==s)throw new l(u.TRANSITION_CANCELLED);let[c,d]=n.getLifecycleFunctions(),f=e.name===i.UNKNOWN_ROUTE,p=G(e,r),{toDeactivate:m,toActivate:h,intersection:g}=p,ee=r&&!t.forceDeactivate&&m.length>0,_=!f&&h.length>0,v=c.size>0||d.size>0,y=e;if(!v){let e=this.#o(y,r,s,t,p,c);if(e!==void 0)return e}if(v){o=new AbortController,this.#t=o;let i=()=>this.#n===s&&n.isActive(),a=o.signal,f=gn(c,d,m,h,!!ee,_,e,r,a,i,()=>{if(n.sendLeaveApprove(y,r),n.hasLeaveListeners())return n.awaitLeaveListeners(y,r,a)});if(f!==void 0)return this.#i(f,{toState:e,fromState:r,opts:t,toDeactivate:m,toActivate:h,intersection:g,canDeactivateFunctions:c},o,s);if(!i())throw new l(u.TRANSITION_CANCELLED);this.#s(o)}return this.lastSyncResolved=!0,Promise.resolve(cn(n,{toState:e,fromState:r,opts:t,toDeactivate:m,toActivate:h,intersection:g,canDeactivateFunctions:c}))}catch(t){return this.#a(t,o,a,e,r),Promise.reject(t)}}async#i(e,t,n,r){let i=this.#e,a=()=>this.#n===r&&!n.signal.aborted&&i.isActive();try{if(t.opts.signal){if(t.opts.signal.aborted)throw new l(u.TRANSITION_CANCELLED,{reason:t.opts.signal.reason});t.opts.signal.addEventListener(`abort`,()=>{n.abort(t.opts.signal?.reason)},{once:!0,signal:n.signal})}if(await e,!a())throw new l(u.TRANSITION_CANCELLED);return cn(i,t)}catch(e){throw ln(i,e,t.toState,t.fromState),e}finally{this.#s(n)}}#a(e,t,n,r,i){t&&this.#s(t),n&&r&&ln(this.#e,e,r,i)}#o(e,t,n,r,i,a){let o=this.#e;if(o.sendLeaveApprove(e,t),o.hasLeaveListeners()){let s=new AbortController,c=o.awaitLeaveListeners(e,t,s.signal);if(c!==void 0)return this.#t=s,this.#i(c,{toState:e,fromState:t,opts:r,toDeactivate:i.toDeactivate,toActivate:i.toActivate,intersection:i.intersection,canDeactivateFunctions:a},s,n)}if(this.#n!==n)throw new l(u.TRANSITION_CANCELLED)}#s(e){e.abort(),this.#t===e&&(this.#t=null)}#c(e){if(this.#e.isTransitioning()&&(h.warn(`router.navigate`,`Concurrent navigation detected on shared router instance. For SSR, use cloneRouter() to create isolated instance per request.`),this.#t?.abort(new l(u.TRANSITION_CANCELLED)),this.#e.cancelNavigation()),e?.aborted)throw new l(u.TRANSITION_CANCELLED,{reason:e.reason})}};const Y={replace:!0};Object.freeze(Y);var Cn=class{#e;setDependencies(e){this.#e=e}async start(e){let t=this.#e,n=t.getOptions(),r=t.matchPath(e);if(!r&&!n.allowNotFound){let n=new l(u.ROUTE_NOT_FOUND,{path:e});throw t.emitTransitionError(void 0,void 0,n),n}return t.completeStart(),r?t.navigateToState(r,Y):t.navigateToNotFound(e)}stop(){this.#e.clearState()}};function X(e){return e instanceof Error?e:Error(String(e))}function wn(e,t){return Promise.allSettled(e).then(e=>{if(t!==void 0)throw X(t);let n=e.find(e=>e.status===`rejected`);if(n!==void 0)throw X(n.reason)})}var Z=class{#e;#t;#n=[];#r;#i;#a;#o;constructor(e){this.#e=e.routerFSM,this.#t=e.emitter,this.#r=void 0,this.#c()}static validateSubscribeListener(e){if(typeof e!=`function`)throw TypeError(`[router.subscribe] Expected a function. For Observable pattern use @real-router/rx package`)}static validateSubscribeLeaveListener(e){if(typeof e!=`function`)throw TypeError(`[router.subscribeLeave] Expected a function`)}emitRouterStart(){this.#t.emit(t.ROUTER_START)}emitRouterStop(){this.#t.emit(t.ROUTER_STOP)}emitTransitionStart(e,n){this.#t.emit(t.TRANSITION_START,e,n)}emitTransitionSuccess(e,n,r){this.#t.emit(t.TRANSITION_SUCCESS,e,n,r)}emitTransitionError(e,n,r){this.#t.emit(t.TRANSITION_ERROR,e,n,r)}emitTransitionCancel(e,n){this.#t.emit(t.TRANSITION_CANCEL,e,n)}emitTransitionLeaveApprove(e,n){this.#t.emit(t.TRANSITION_LEAVE_APPROVE,e,n)}sendStart(){this.#e.send(b.START)}sendStop(){this.#e.send(b.STOP)}sendDispose(){this.#e.send(b.DISPOSE)}sendStarted(){this.#e.send(b.STARTED)}sendNavigate(e,t){this.#r=e,this.#e.forceState(y.TRANSITION_STARTED),this.emitTransitionStart(e,t)}sendComplete(e,t,n={}){this.#e.forceState(y.READY),this.emitTransitionSuccess(e,t,n),this.#r===e&&(this.#r=void 0)}sendLeaveApprove(e,t){this.#e.forceState(y.LEAVE_APPROVED),this.emitTransitionLeaveApprove(e,t)}sendFail(e,t,n){let r=this.#r;this.#i=e,this.#a=t,this.#o=n,this.#e.send(b.FAIL),this.#r===r&&(this.#r=void 0)}sendFailSafe(e,t,n){this.isReady()?this.sendFail(e,t,n):this.emitTransitionError(e,t,n)}sendCancel(e,t){let n=this.#r;this.#i=e,this.#a=t,this.#e.send(b.CANCEL),this.#r===n&&(this.#r=void 0)}canBeginTransition(){return this.#e.canSend(b.NAVIGATE)}canStart(){return this.#e.canSend(b.START)}canCancel(){return this.#e.canSend(b.CANCEL)}isActive(){let e=this.#e.getState();return e!==y.IDLE&&e!==y.DISPOSED}isDisposed(){return this.#e.getState()===y.DISPOSED}isTransitioning(){let e=this.#e.getState();return e===y.TRANSITION_STARTED||e===y.LEAVE_APPROVED}isLeaveApproved(){return this.#e.getState()===y.LEAVE_APPROVED}isReady(){return this.#e.getState()===y.READY}getCurrentToState(){return this.#r}addEventListener(e,t){return this.#t.on(e,t)}subscribe(e){return this.#t.on(t.TRANSITION_SUCCESS,(t,n)=>{e({route:t,previousRoute:n})})}subscribeLeave(e){return this.#n.push(e),()=>{let t=this.#n.indexOf(e);t!==-1&&this.#n.splice(t,1)}}hasLeaveListeners(){return this.#n.length>0}awaitLeaveListeners(e,t,n){if(t===void 0)return;let r={route:t,nextRoute:e,signal:n},i,a;for(let e of this.#n)try{let t=e(r);t!==void 0&&typeof t.then==`function`&&(i??=[],i.push(t))}catch(e){a===void 0&&(a=e)}if(i===void 0){if(a!==void 0)throw X(a);return}return wn(i,a)}clearAll(){this.#t.clearAll(),this.#n.length=0}setLimits(e){this.#t.setLimits(e)}sendCancelIfPossible(e){let t=this.#r;!this.canCancel()||t===void 0||this.sendCancel(t,e)}#s(){this.emitTransitionError(this.#i,this.#a,this.#o)}#c(){let e=this.#e;e.on(y.STARTING,b.STARTED,()=>{this.emitRouterStart()}),e.on(y.READY,b.STOP,()=>{this.emitRouterStop()});let t=()=>{let e=this.#i;e!==void 0&&this.emitTransitionCancel(e,this.#a)};e.on(y.TRANSITION_STARTED,b.CANCEL,t),e.on(y.LEAVE_APPROVED,b.CANCEL,t),e.on(y.LEAVE_APPROVED,b.FAIL,()=>{this.#s()}),e.on(y.STARTING,b.FAIL,()=>{this.#s()}),e.on(y.READY,b.FAIL,()=>{this.#s()}),e.on(y.TRANSITION_STARTED,b.FAIL,()=>{this.#s()})}};const Tn=new l(u.ROUTER_ALREADY_STARTED),En=new Set([`all`,`warn-error`,`error-only`]);function Dn(e){return typeof e==`string`&&En.has(e)}function On(e){return typeof e==`string`?`"${e}"`:typeof e==`object`?JSON.stringify(e):String(e)}function kn(e){if(typeof e!=`object`||!e)throw TypeError(`Logger config must be an object`);let t=e;for(let e of Object.keys(t))if(e!==`level`&&e!==`callback`)throw TypeError(`Unknown logger config property: "${e}"`);if(`level`in t&&t.level!==void 0&&!Dn(t.level))throw TypeError(`Invalid logger level: ${On(t.level)}. Expected: "all" | "warn-error" | "error-only"`);if(`callback`in t&&t.callback!==void 0&&typeof t.callback!=`function`)throw TypeError(`Logger callback must be a function, got ${typeof t.callback}`);return!0}var An=class{router;options;limits;dependenciesStore;state;routes;routeLifecycle;plugins;navigation;lifecycle;eventBus;constructor(e){this.router=e.router,this.options=e.options,this.limits=e.limits,this.dependenciesStore=e.dependenciesStore,this.state=e.state,this.routes=e.routes,this.routeLifecycle=e.routeLifecycle,this.plugins=e.plugins,this.navigation=e.navigation,this.lifecycle=e.lifecycle,this.eventBus=e.eventBus}wireLimits(){this.dependenciesStore.limits=this.limits,this.plugins.setLimits(this.limits),this.eventBus.setLimits({maxListeners:this.limits.maxListeners,warnListeners:this.limits.warnListeners,maxEventDepth:this.limits.maxEventDepth}),this.routeLifecycle.setLimits(this.limits)}wireRouteLifecycleDeps(){let e={compileFactory:this.createCompileFactory()};this.routeLifecycle.setDependencies(e),this.routeLifecycle.setValidatorGetter(()=>{try{return p(this.router).validator}catch{return null}})}wireRoutesDeps(){this.routes.setDependencies({addActivateGuard:(e,t)=>{this.routeLifecycle.addCanActivate(e,t,!0)},addDeactivateGuard:(e,t)=>{this.routeLifecycle.addCanDeactivate(e,t,!0)},makeState:(e,t,n,r)=>this.state.makeState(e,t,n,r),getState:()=>this.state.get(),areStatesEqual:(e,t,n)=>this.state.areStatesEqual(e,t,n),getDependency:e=>this.dependenciesStore.dependencies[e],forwardState:(e,t)=>{let n=p(this.router);return n.validator?.routes.validateStateBuilderArgs(e,t,`forwardState`),n.forwardState(e,t)}}),this.routes.setLifecycleNamespace(this.routeLifecycle)}wirePluginsDeps(){let e={addEventListener:(e,t)=>this.eventBus.addEventListener(e,t),canNavigate:()=>this.eventBus.canBeginTransition(),compileFactory:this.createCompileFactory()};this.plugins.setDependencies(e),this.plugins.setValidatorGetter(()=>{try{return p(this.router).validator}catch{return null}})}wireNavigationDeps(){this.navigation.setDependencies({getOptions:()=>this.options.get(),hasRoute:e=>this.routes.hasRoute(e),getState:()=>this.state.get(),setState:e=>{this.state.set(e)},buildNavigateState:(e,t)=>{let n=p(this.router);n.validator?.routes.validateStateBuilderArgs(e,t,`navigate`);let i=n.forwardState(e,t),a=i.name,o=r(i.params),s=this.routes.getMetaForState(a);if(s===void 0)return;let c=n.buildPath(a,o);return this.state.makeState(a,o,c,s,!0)},resolveDefault:()=>{let e=this.options.get(),t=p(this.router),n=dt(e.defaultRoute,e=>this.dependenciesStore.dependencies[e]),r=dt(e.defaultParams,e=>this.dependenciesStore.dependencies[e]);return typeof e.defaultRoute==`function`&&t.validator?.options.validateResolvedDefaultRoute(n,t.routeGetStore()),{route:n,params:r}},startTransition:(e,t)=>{this.eventBus.sendNavigate(e,t)},cancelNavigation:()=>{let e=this.eventBus.getCurrentToState();e!==void 0&&this.eventBus.sendCancel(e,this.state.get())},sendTransitionDone:(e,t,n)=>{this.eventBus.sendComplete(e,t,n)},sendTransitionFail:(e,t,n)=>{this.eventBus.sendFail(e,t,n)},emitTransitionError:(e,t,n)=>{this.eventBus.sendFailSafe(e,t,n)},emitTransitionSuccess:(e,t,n)=>{this.eventBus.emitTransitionSuccess(e,t,n)},sendLeaveApprove:(e,t)=>{this.eventBus.sendLeaveApprove(e,t)},canNavigate:()=>this.eventBus.canBeginTransition(),getLifecycleFunctions:()=>this.routeLifecycle.getFunctions(),isActive:()=>this.router.isActive(),isTransitioning:()=>this.eventBus.isTransitioning(),clearCanDeactivate:e=>{this.routeLifecycle.clearCanDeactivate(e)},hasLeaveListeners:()=>this.eventBus.hasLeaveListeners(),awaitLeaveListeners:(e,t,n)=>this.eventBus.awaitLeaveListeners(e,t,n)})}wireLifecycleDeps(){this.lifecycle.setDependencies({getOptions:()=>this.options.get(),navigateToState:(e,t)=>this.navigation.navigateToState(e,t),navigateToNotFound:e=>this.navigation.navigateToNotFound(e),clearState:()=>{this.state.set(void 0)},matchPath:e=>this.routes.matchPath(e,this.options.get()),completeStart:()=>{this.eventBus.sendStarted()},emitTransitionError:(e,t,n)=>{this.eventBus.sendFail(e,t,n)}})}wireStateDeps(){this.state.setDependencies({getDefaultParams:()=>this.routes.getStore().config.defaultParams,buildPath:(e,t)=>p(this.router).buildPath(e,t),getUrlParams:e=>this.routes.getUrlParams(e)})}createCompileFactory(){let{router:e,dependenciesStore:t}=this;return n=>n(e,e=>t.dependencies[e])}};function jn(e){e.wireLimits(),e.wireRouteLifecycleDeps(),e.wireRoutesDeps(),e.wirePluginsDeps(),e.wireNavigationDeps(),e.wireLifecycleDeps(),e.wireStateDeps()}const Q=Object.freeze({});var Mn=class e{#e;#t;#n;#r;#i;#a;#o;#s;#c;#l;constructor(t=[],n={},r={}){n.logger&&kn(n.logger)&&(h.configure(n.logger),delete n.logger),pt.validateOptionsIsObject(n),re(r),t.length>0&&x(t),this.#e=new pt(n),this.#t=a(n.limits),this.#n=ie(r),this.#r=new _t,this.#i=new $t(t,Nn(this.#e.get())),this.#a=new Ct,this.#o=new xt,this.#s=new Sn,this.#c=new Cn;let i=ne(),o=new v({onListenerError:(e,t)=>{h.error(`Router`,`Error in listener for ${e}:`,t)},onListenerWarn:(e,t)=>{h.warn(`router.addEventListener`,`Event "${e}" has ${t} listeners — possible memory leak`)}});this.#l=new Z({routerFSM:i,emitter:o}),jn(new An({router:this,options:this.#e,limits:this.#t,dependenciesStore:this.#n,state:this.#r,routes:this.#i,routeLifecycle:this.#a,plugins:this.#o,navigation:this.#s,lifecycle:this.#c,eventBus:this.#l}));let s=new Map;d(this,{makeState:(e,t,n,r)=>this.#r.makeState(e,t,n,r),forwardState:f(`forwardState`,(e,t)=>this.#i.forwardState(e,t),s),buildStateResolved:(e,t)=>this.#i.buildStateResolved(e,t),matchPath:(e,t)=>this.#i.matchPath(e,t),getOptions:()=>this.#e.get(),addEventListener:(e,t)=>this.#l.addEventListener(e,t),buildPath:f(`buildPath`,(e,t)=>this.#i.buildPath(e,t??c,this.#e.get()),s),emitTransitionError:e=>{this.#l.sendFailSafe(void 0,this.#r.get(),e)},start:m(`start`,e=>this.#c.start(e),s),navigateToState:(t,n)=>{let r=this.#s.navigateToState(t,n??Q);return this.#s.lastSyncResolved?this.#s.lastSyncResolved=!1:this.#s.lastSyncRejected?this.#s.lastSyncRejected=!1:e.#d(r),r},interceptors:s,setRootPath:e=>{this.#i.setRootPath(e)},getRootPath:()=>this.#i.getStore().rootPath,getTree:()=>this.#i.getStore().tree,isDisposed:()=>this.#l.isDisposed(),validator:null,dependenciesGetStore:()=>this.#n,cloneOptions:()=>({...this.#e.get()}),cloneDependencies:()=>({...this.#n.dependencies}),getLifecycleFactories:()=>this.#a.getFactories(),getPluginFactories:()=>this.#o.getAll(),routeGetStore:()=>this.#i.getStore(),getStateName:()=>this.#r.get()?.name,isTransitioning:()=>this.#l.isTransitioning(),clearState:()=>{this.#r.set(void 0)},setState:e=>{this.#r.set(e)},routerExtensions:[],contextClaimRecords:new Set}),this.isActiveRoute=this.isActiveRoute.bind(this),this.buildPath=this.buildPath.bind(this),this.getState=this.getState.bind(this),this.getPreviousState=this.getPreviousState.bind(this),this.areStatesEqual=this.areStatesEqual.bind(this),this.shouldUpdateNode=this.shouldUpdateNode.bind(this),this.isActive=this.isActive.bind(this),this.start=this.start.bind(this),this.stop=this.stop.bind(this),this.dispose=this.dispose.bind(this),this.canNavigateTo=this.canNavigateTo.bind(this),this.usePlugin=this.usePlugin.bind(this),this.navigate=this.navigate.bind(this),this.navigateToDefault=this.navigateToDefault.bind(this),this.navigateToNotFound=this.navigateToNotFound.bind(this),this.subscribe=this.subscribe.bind(this),this.subscribeLeave=this.subscribeLeave.bind(this),this.isLeaveApproved=this.isLeaveApproved.bind(this)}isActiveRoute(e,t,n,r){return p(this).validator?.routes.validateIsActiveRouteArgs(e,t,n,r),p(this).validator?.routes.validateRouteName(e,`isActiveRoute`),e===``?(h.warn(`real-router`,`isActiveRoute("") called with empty string. Root node is not considered a parent of any route.`),!1):this.#i.isActiveRoute(e,t,n,r)}buildPath(e,t){let n=p(this);return n.validator?.routes.validateBuildPathArgs(e),n.validator?.navigation.validateParams(t,`buildPath`),n.buildPath(e,r(t))}getState(){return this.#r.get()}getPreviousState(){return this.#r.getPrevious()}areStatesEqual(e,t,n=!0){return p(this).validator?.state.validateAreStatesEqualArgs(e,t,n),this.#r.areStatesEqual(e,t,n)}shouldUpdateNode(e){return p(this).validator?.routes.validateShouldUpdateNodeArgs(e),$t.shouldUpdateNode(e)}isActive(){return this.#l.isActive()}start(t){if(!this.#l.canStart())return Promise.reject(Tn);p(this).validator?.navigation.validateStartArgs(t),this.#l.sendStart();let n=p(this).start(t).catch(e=>{throw this.#l.isReady()&&(this.#c.stop(),this.#l.sendStop()),e});return e.#d(n),n}stop(){return this.#s.abortCurrentNavigation(),this.#l.sendCancelIfPossible(this.#r.get()),!this.#l.isReady()&&!this.#l.isTransitioning()?this:(this.#c.stop(),this.#l.sendStop(),this)}dispose(){if(this.#l.isDisposed())return;this.#s.abortCurrentNavigation(),this.#l.sendCancelIfPossible(this.#r.get()),(this.#l.isReady()||this.#l.isTransitioning())&&(this.#c.stop(),this.#l.sendStop()),this.#l.sendDispose(),this.#l.clearAll(),this.#o.disposeAll();let e=p(this);for(let t of e.routerExtensions)for(let e of t.keys)delete this[e];e.routerExtensions.length=0,e.contextClaimRecords.clear(),this.#i.clearRoutes(),this.#a.clearAll(),this.#r.reset(),this.#n.dependencies=Object.create(null),this.#f()}canNavigateTo(e,t){let n=p(this);if(n.validator?.routes.validateRouteName(e,`canNavigateTo`),n.validator?.navigation.validateParams(t,`canNavigateTo`),!this.#i.hasRoute(e))return!1;let{name:r,params:i}=n.forwardState(e,t??{}),a=this.#r.makeState(r,i),o=this.#r.get(),{toDeactivate:s,toActivate:c}=G(a,o);return this.#a.canNavigateTo(s,c,a,o)}usePlugin(...e){let t=e.filter(Boolean);if(t.length===0)return()=>{};let n=p(this);n.validator?.plugins.validatePluginLimit(this.#o.count(),this.#t);for(let e of t)n.validator?.plugins.validateNoDuplicatePlugins(e,this.#o.getAll());return this.#o.use(...t)}subscribe(e){return Z.validateSubscribeListener(e),this.#l.subscribe(e)}subscribeLeave(e){return Z.validateSubscribeLeaveListener(e),this.#l.subscribeLeave(e)}isLeaveApproved(){return this.#l.isLeaveApproved()}navigate(t,n,r){let i=p(this);i.validator?.navigation.validateNavigateArgs(t),i.validator?.navigation.validateParams(n,`navigate`);let a=r??Q;i.validator?.navigation.validateNavigationOptions(a,`navigate`);let o=this.#s.navigate(t,n??c,a);return this.#s.lastSyncResolved?this.#s.lastSyncResolved=!1:this.#s.lastSyncRejected?this.#s.lastSyncRejected=!1:e.#d(o),o}navigateToDefault(t){let n=p(this);n.validator?.navigation.validateNavigateToDefaultArgs(t);let r=t??Q;n.validator?.navigation.validateNavigationOptions(r,`navigateToDefault`);let i=this.#s.navigateToDefault(r);return this.#s.lastSyncResolved?this.#s.lastSyncResolved=!1:this.#s.lastSyncRejected?this.#s.lastSyncRejected=!1:e.#d(i),i}navigateToNotFound(e){if(!this.#l.isActive())throw new l(u.ROUTER_NOT_STARTED);if(e!==void 0&&typeof e!=`string`)throw TypeError(`[router.navigateToNotFound] path must be a string, got ${typeof e}`);let t=e??this.#r.get().path;return this.#s.navigateToNotFound(t)}static#u=e=>{e instanceof l&&(e.code===u.SAME_STATES||e.code===u.TRANSITION_CANCELLED||e.code===u.ROUTER_NOT_STARTED||e.code===u.ROUTE_NOT_FOUND)||h.error(`router.navigate`,`Unexpected navigation error`,e)};static#d(t){t.catch(e.#u)}#f(){this.navigate=$,this.navigateToDefault=$,this.navigateToNotFound=$,this.start=$,this.stop=$,this.usePlugin=$,this.subscribe=$,this.subscribeLeave=$,this.canNavigateTo=$}};function $(){throw new l(u.ROUTER_DISPOSED)}function Nn(e){return{strictTrailingSlash:e.trailingSlash===`strict`,strictQueryParams:e.queryParamsMode===`strict`,urlParamsEncoding:e.urlParamsEncoding,queryParams:e.queryParams}}export{Mt as a,F as c,R as i,st as l,It as n,At as o,L as r,kt as s,Mn as t,x as u};
|
|
6
|
+
//# sourceMappingURL=Router-CK8U23pP.mjs.map
|