@real-router/core 0.42.0 → 0.43.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.
@@ -1,6 +0,0 @@
1
- import{a as e,c as t,i as n,l as r,n as i,r as a,s as o,t as s,u as c}from"./RouterError-D0RlQE_5.mjs";import{i as l,n as u,r as d,t as f}from"./internals-CCymabFj.mjs";import{logger as p}from"@real-router/logger";import{FSM as m}from"@real-router/fsm";const h={maxListeners:0,warnListeners:0,maxEventDepth:0};var g=class extends Error{},_=class{#e=new Map;#t=null;#n=h;#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 g(`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 g)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 v={IDLE:`IDLE`,STARTING:`STARTING`,READY:`READY`,TRANSITIONING:`TRANSITIONING`,DISPOSED:`DISPOSED`},y={START:`START`,STARTED:`STARTED`,NAVIGATE:`NAVIGATE`,COMPLETE:`COMPLETE`,FAIL:`FAIL`,CANCEL:`CANCEL`,STOP:`STOP`,DISPOSE:`DISPOSE`},ee={initial:v.IDLE,context:null,transitions:{[v.IDLE]:{[y.START]:v.STARTING,[y.DISPOSE]:v.DISPOSED},[v.STARTING]:{[y.STARTED]:v.READY,[y.FAIL]:v.IDLE},[v.READY]:{[y.NAVIGATE]:v.TRANSITIONING,[y.FAIL]:v.READY,[y.STOP]:v.IDLE},[v.TRANSITIONING]:{[y.NAVIGATE]:v.TRANSITIONING,[y.COMPLETE]:v.READY,[y.CANCEL]:v.READY,[y.FAIL]:v.READY},[v.DISPOSED]:{}}};function te(){return new m(ee)}function ne(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 b(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&&b(r,t)}}function re(e={}){let t=Object.create(null);for(let n in e)e[n]!==void 0&&(t[n]=e[n]);return{dependencies:t,limits:n}}const ie={defaultRoute:``,defaultParams:{},trailingSlash:`preserve`,queryParamsMode:`loose`,queryParams:{arrayFormat:`none`,booleanFormat:`none`,nullFormat:`default`,numberFormat:`none`},urlParamsEncoding:`default`,allowNotFound:!0,rewritePathOnMatch:!0};function ae(e){Object.freeze(e);for(let t of Object.keys(e)){let n=e[t];n&&typeof n==`object`&&n.constructor===Object&&ae(n)}return e}function oe(e,t){return typeof e==`function`?e(t):e}function se(e){if(!e||typeof e!=`object`||Array.isArray(e))throw TypeError(`[router.constructor] options must be a plain object`)}var ce=class{#e;constructor(e={}){this.#e=ae({...ie,...e})}static validateOptionsIsObject(e){se(e)}get(){return this.#e}};function x(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(!x(e[n],t[n]))return!1;return!0}return!1}const le=new WeakMap;function ue(e){return le.get(e)}function de(e,t){le.set(e,t)}var fe=class{#e=void 0;#t=void 0;#n;#r=new Map;get(){return this.#e}set(e){this.#t=this.#e,this.#e=e?a(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(t,n,r,i,o){let s=this.#n.getDefaultParams(),c=Object.hasOwn(s,t),l;l=c?{...s[t],...n}:!n||n===e?e:{...n};let u={name:t,params:l,path:r??this.#n.buildPath(t,n)};return i&&de(u,i),o?u:a(u)}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(!x(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)||!x(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 pe={[c.ROUTER_START]:r.ROUTER_START,[c.ROUTER_STOP]:r.ROUTER_STOP,[c.TRANSITION_SUCCESS]:r.TRANSITION_SUCCESS,[c.TRANSITION_START]:r.TRANSITION_START,[c.TRANSITION_ERROR]:r.TRANSITION_ERROR,[c.TRANSITION_CANCEL]:r.TRANSITION_CANCEL},me=Object.keys(pe),S=`router.usePlugin`;function he(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 ge=class e{#e=new Set;#t=new Set;#n;#r=n;#i=null;static validatePlugin(e){he(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){p.error(S,`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){p.error(S,`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){p.error(S,`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(t){let n=this.#n.compileFactory(t);e.validatePlugin(n),this.#i?.()?.plugins.validatePluginKeys(n),Object.freeze(n);let r=[];for(let e of me)e in n&&(typeof n[e]==`function`?(r.push(this.#n.addEventListener(pe[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 _e(e){let t=()=>e;return()=>t}var ve=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=n;#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`?_e(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 ye(){return{decoders:Object.create(null),encoders:Object.create(null),defaultParams:Object.create(null),forwardMap:Object.create(null),forwardFnMap:Object.create(null)}}function be(e,t){for(let n in e)if(e[n]!==t[n])return!1;return!0}function xe(e,t,n){for(let r in e)if(!(r in n)&&e[r]!==t[r])return!1;return!0}function C(e){let t={name:e.name,path:e.path};return e.children&&(t.children=e.children.map(e=>C(e))),t}function w(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}.`)&&w(i.children,t,a))return!0}return!1}function Se(e,t){for(let n of Object.keys(e))t(n)&&delete e[n]}function Ce(e){return`(${e.replaceAll(/(^<|>$)/g,``)})`}const we=/([:*])([^/?<]+)(<[^>]+>)?(\?)?/g,Te=/([:*][^/?<]+(?:<[^>]+>)?)\?(?=\/|$)/g,Ee=/\?(.+)$/;function De(e){let t=[],n=[],r=[],i={},a=new Map,o=e.replaceAll(Te,`$1`),s=Ee.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=we.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=`^${Ce(o)}$`;a.set(n,{pattern:new RegExp(e),constraint:o})}}return{urlParams:t,queryParams:n,spatParams:r,paramTypeMap:i,constraintPatterns:a,pathPattern:e}}const Oe=/[^\w!$'()*+,.:;|~-]/gu,ke=/[^\w!$'()*+,.:;|~-]/u,T={default:e=>ke.test(e)?e.replaceAll(Oe,e=>encodeURIComponent(e)):e,uri:encodeURI,uriComponent:encodeURIComponent,none:e=>e},Ae={default:decodeURIComponent,uri:decodeURI,uriComponent:decodeURIComponent,none:e=>e};function E(){return{staticChildren:Object.create(null),paramChild:void 0,splatChild:void 0,route:void 0,slashChildRoute:void 0}}function D(e){return e.length>1&&e.endsWith(`/`)?e.slice(0,-1):e}function je(e,t){return e===``?t:t===``?e:e+t}function Me(e){let t={};if(e.length===0)return t;let n=e.split(`&`);for(let e of n){let n=e.indexOf(`=`);n===-1?t[e]=``:t[e.slice(0,n)]=e.slice(n+1)}return t}function Ne(e){let t=[];for(let n of Object.keys(e)){let r=e[n],i=encodeURIComponent(n);t.push(r===``?i:`${i}=${encodeURIComponent(String(r))}`)}return t.join(`&`)}function Pe(e){return e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102}function Fe(e){let t=0;for(;t<e.length;)if(e[t]===`%`){if(t+2>=e.length)return!1;let n=e.codePointAt(t+1)??0,r=e.codePointAt(t+2)??0;if(!Pe(n)||!Pe(r))return!1;t+=3}else t++;return!0}const O=/<[^>]*>/g;function k(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(O,``),u=o?l:je(n,l),d=i;a||(d=Ie(e,t,u,o?``:n,r,i));for(let n of t.children.values())k(e,n,u,r,d);a||r.pop()}function Ie(e,t,n,r,i,a){let o=Be(n,r),s=Object.freeze([...i]),c=Le(s),l=D(n),u=qe(e.rootQueryParams,i),d=Je(i),{buildStaticParts:f,buildParamSlots:p}=Ke(o?D(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 e.routesByName.set(t.fullName,m),e.segmentsByName.set(t.fullName,s),e.metaByName.set(t.fullName,c),o?Re(e,m,r):ze(e,m,n,l,t),m}function Le(e){let t={};for(let n of e)t[n.fullName]=n.paramTypeMap;return Object.freeze(t)}function Re(e,t,n){He(e,t,n);let r=D(n),i=e.options.caseSensitive?r:r.toLowerCase();e.staticCache.has(i)&&e.staticCache.set(i,t)}function ze(e,t,n,r,i){if(Ve(e,t,n),i.paramMeta.urlParams.length===0){let n=e.options.caseSensitive?r:r.toLowerCase();e.staticCache.set(n,t)}}function Be(e,t){return D(e)===D(t)}function Ve(e,t,n){let r=D(n);if(r===`/`){e.root.route=t;return}A(e,e.root,r,1,t)}function A(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(O,``).replace(/\?$/,``);t.paramChild??={node:E(),name:r},A(e,t.paramChild.node,n,s+1,i),s>=a?t.route??=i:A(e,t,n,s+1,i);return}t=Ge(e,t,c),r=s+1}t.route=i}function He(e,t,n){let r=Ue(e,n);r.slashChildRoute=t}function Ue(e,t){return We(e,e.root,t)}function We(e,t,n){let r=D(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=Ge(e,i,s),a=n+1}return i}function Ge(e,t,n){if(n.startsWith(`*`)){let e=n.slice(1);return t.splatChild??={node:E(),name:e},t.splatChild.node}if(n.startsWith(`:`)){let e=n.slice(1).replaceAll(O,``).replace(/\?$/,``);return t.paramChild??={node:E(),name:e},t.paramChild.node}let r=e.options.caseSensitive?n:n.toLowerCase();return r in t.staticChildren||(t.staticChildren[r]=E()),t.staticChildren[r]}function Ke(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=T[n],r=e.split(`/`),i=t(r[0]);for(let e=1;e<r.length;e++)i+=`/${t(r[e])}`;return i}:T[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 qe(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 Je(e){let t=new Map;for(let n of e)for(let[e,r]of n.paramMeta.constraintPatterns)t.set(e,r);return t}const Ye=/[\u0080-\uFFFF]/;var Xe=class{get options(){return this.#e}#e;#t=E();#n=new Map;#r=new Map;#i=new Map;#a=new Map;#o=``;#s=[];constructor(e){this.#e={caseSensitive:e?.caseSensitive??!0,strictTrailingSlash:e?.strictTrailingSlash??!1,strictQueryParams:e?.strictQueryParams??!1,urlParamsEncoding:e?.urlParamsEncoding??`default`,parseQueryString:e?.parseQueryString??Me,buildQueryString:e?.buildQueryString??Ne}}registerTree(e){this.#s=e.paramMeta.queryParams,k({root:this.#t,options:this.#e,routesByName:this.#n,segmentsByName:this.#r,metaByName:this.#i,staticCache:this.#a,rootQueryParams:this.#s},e,``,[],null)}match(e){let t=this.#f(e);if(!t)return;let[n,r,i]=t,a=this.#e.caseSensitive?r:r.toLowerCase(),o=this.#a.get(a);if(o)return this.#e.strictTrailingSlash&&!this.#m(n,o)?void 0:this.#p(o,{},i);let s={},c=this.#h(r,s);if(c&&!(this.#e.strictTrailingSlash&&!this.#m(n,c))&&!(c.hasConstraints&&!this.#v(s,c))&&this.#_(s))return this.#p(c,s,i)}buildPath(e,t,n){let r=this.#n.get(e);if(!r)throw Error(`[SegmentMatcher.buildPath] '${e}' is not defined`);r.hasConstraints&&t&&this.#c(r,e,t);let i=this.#l(r,t),a=this.#u(i,n?.trailingSlash),o=this.#d(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.#o=e}#c(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}'`)}}}#l(e,t){let n=e.buildStaticParts,r=e.buildParamSlots;if(r.length===0)return this.#o+n[0];let i=this.#o+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=typeof r==`object`?JSON.stringify(r):String(r),s=a.encoder(o);i+=s+n[e+1]}return i}#u(e,t){return t===`always`&&!e.endsWith(`/`)?`${e}/`:t===`never`&&e!==`/`&&e.endsWith(`/`)?e.slice(0,-1):e}#d(e,t,n){if(!t)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):``}#f(e){if(e===``&&(e=`/`),!e.startsWith(`/`))return;let t=e.indexOf(`#`);if(t!==-1&&(e=e.slice(0,t)),Ye.test(e))return;if(this.#o.length>0){if(!e.startsWith(this.#o))return;e=e.slice(this.#o.length)||`/`}let n=e.indexOf(`?`),r=n===-1?e:e.slice(0,n),i=n===-1?void 0:e.slice(n+1);if(r.includes(`//`))return;let a=r;return[a,D(a),i]}#p(e,t,n){if(n!==void 0){let r=this.#e.parseQueryString(n);if(this.#e.strictQueryParams){let t=e.declaredQueryParamsSet;for(let e of Object.keys(r))if(!t.has(e))return}for(let e of Object.keys(r))t[e]=r[e]}return{segments:e.matchSegments,params:t,meta:e.meta}}#m(e,t){return(e.length>1&&e.endsWith(`/`))===t.hasTrailingSlash}#h(e,t){return e.length===1?this.#t.slashChildRoute??this.#t.route:this.#g(this.#t,e,1,t)}#g(e,t,n,r){let i=e,a=t.length;for(;n<=a;){let e=t.indexOf(`/`,n),o=e===-1?a:e,s=t.slice(n,o),c=this.#e.caseSensitive?s:s.toLowerCase(),l;if(c in i.staticChildren)l=i.staticChildren[c];else if(i.paramChild)l=i.paramChild.node,r[i.paramChild.name]=s;else if(i.splatChild){let e={},a=this.#g(i.splatChild.node,t,n,e);return a?(Object.assign(r,e),a):(r[i.splatChild.name]=t.slice(n),i.splatChild.node.route)}else return;i=l,n=o+1}return i.slashChildRoute??i.route}#_(e){let t=this.#e.urlParamsEncoding;if(t===`none`)return!0;let n=Ae[t];for(let t in e){let r=e[t];if(r.includes(`%`)){if(!Fe(r))return!1;e[t]=n(r)}}return!0}#v(e,t){for(let[n,r]of t.constraintPatterns)if(!r.pattern.test(e[n]))return!1;return!0}};const j=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)},Ze=(e,t)=>{if(e===void 0)return t.boolean.decodeUndefined();let n=t.boolean.decodeRaw(e);if(n!==null)return n;let r=j(e),i=t.number.decode(r);return i===null?t.boolean.decodeValue(r):i},M=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)},Qe={none:{encodeArray:(e,t)=>{if(t.length===0)return``;let n=`${e}=${M(t[0])}`;for(let r=1;r<t.length;r++)n+=`&${e}=${M(t[r])}`;return n}},brackets:{encodeArray:(e,t)=>{if(t.length===0)return``;let n=`${e}[]=${M(t[0])}`;for(let r=1;r<t.length;r++)n+=`&${e}[]=${M(t[r])}`;return n}},index:{encodeArray:(e,t)=>{if(t.length===0)return``;let n=`${e}[0]=${M(t[0])}`;for(let r=1;r<t.length;r++)n+=`&${e}[${r}]=${M(t[r])}`;return n}},comma:{encodeArray:(e,t)=>{if(t.length===0)return`${e}=`;let n=`${e}=${M(t[0])}`;for(let e=1;e<t.length;e++)n+=`,${M(t[e])}`;return n}}},$e={encode:(e,t)=>`${e}=${t}`,decodeUndefined:()=>null,decodeRaw:()=>null,decodeValue:e=>e},et={encode:(e,t)=>`${e}=${t}`,decodeUndefined:()=>null,decodeRaw:e=>e===`true`?!0:e===`false`?!1:null,decodeValue:e=>e},tt={encode:(e,t)=>t?e:`${e}=false`,decodeUndefined:()=>!0,decodeRaw:()=>null,decodeValue:e=>e},nt={none:$e,string:et,"empty-true":tt},rt={default:{encode:e=>e},hidden:{encode:()=>``}},it={auto:{decode:e=>{let t=e.length;if(t===0)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}}return Number(e)}},none:{decode:()=>null}},at=(e,t,n,r)=>({boolean:nt[t],null:rt[n],number:it[r],array:Qe[e]}),ot={arrayFormat:`none`,booleanFormat:`none`,nullFormat:`default`,numberFormat:`none`,strategies:{boolean:nt.none,null:rt.default,number:it.none,array:Qe.none}},st=e=>{if(!e||e.arrayFormat===void 0&&e.booleanFormat===void 0&&e.nullFormat===void 0&&e.numberFormat===void 0)return ot;let t=e.arrayFormat??`none`,n=e.booleanFormat??`none`,r=e.nullFormat??`default`,i=e.numberFormat??`none`;return{arrayFormat:t,booleanFormat:n,nullFormat:r,numberFormat:i,strategies:at(t,n,r,i)}},N=e=>encodeURIComponent(e),ct=(e,t,n)=>{let r=N(e);switch(typeof t){case`string`:case`number`:return`${r}=${N(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}=${N(t)}`;default:return`${r}=${N(t)}`}},lt=e=>{let t=e.indexOf(`?`);return t===-1?e:e.slice(t+1)};function ut(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 dt(e,t,n,r,i){return i?Ze(r?e.slice(t+1,n):void 0,i):r?j(e.slice(t+1,n)):null}function ft(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}ut(r,j(e.slice(t,c)),dt(e,a,n,o,i),l)}const pt=(e,t)=>{let n=lt(e);if(n===``||n===`?`)return{};if(!t)return mt(n);let r=st(t),i={},a=0,o=n.length;for(;a<o;){let e=n.indexOf(`&`,a);e===-1&&(e=o),ft(n,a,e,i,r.strategies),a=e+1}return i};function mt(e){let t={};return ht(e,t),t}function ht(e,t){let n=0,r=e.length;for(;n<r;){let i=e.indexOf(`&`,n);i===-1&&(i=r),ft(e,n,i,t),n=i+1}}const gt=(e,t)=>{let n=Object.keys(e);if(n.length===0)return``;let r=st(t),i=[];for(let t of n){let n=e[t];if(n===void 0)continue;let a=ct(t,n,r);a&&i.push(a)}return i.join(`&`)};function P(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=P(t,a);a.children.push(e)}return a}function _t(e,t,n){let r=P({name:e,path:t},null);for(let e of n){let t=P(e,r);r.children.push(t)}return r}function vt(e){return e.parent?.name?`${e.parent.fullName}.${e.name}`:e.name}function F(e,t){return e.endsWith(`/`)&&t.startsWith(`/`)?e+t.slice(1):e+t}function yt(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;let i=[],a=e.parent;for(;a?.path;)i.unshift(a),a=a.parent;let o=``;for(let e of i){let{urlParams:t,queryParams:n,spatParams:r}=e.paramMeta;if(t.length>0||n.length>0||r.length>0)return null;o=e.absolute?e.path:F(o,e.path)}return e.absolute?e.path:F(o,e.path)}function bt(e){let t=new Map;for(let n of e)t.set(n.name,n);return t}function xt(e){let t={};for(let n of e.urlParams)t[n]=`url`;for(let n of e.queryParams)t[n]=`query`;return t}function St(e,t,n){let r=[],i=[];for(let a of e){let e=I(a,t,n);r.push(e),e.absolute||i.push(e)}return{childrenMap:bt(r),nonAbsoluteChildren:i}}function I(e,t,n){let r=De(e.path),i=xt(r),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};a.fullName=vt(a);let{childrenMap:o,nonAbsoluteChildren:s}=St(e.children,a,n);return a.children=o,a.nonAbsoluteChildren=s,a.staticPath=yt(a),n&&(Object.freeze(s),Object.freeze(i),Object.freeze(a.children),Object.freeze(a)),a}function Ct(e,t=!0){return I(e,null,t)}function wt(e,t){let n=[];return{add(e){return n.push(e),this},addMany(e){return n.push(...e),this},build(r){return Ct(_t(e,t,n),!r?.skipFreeze)}}}function Tt(e,t,n,r){return wt(e,t).addMany(n).build(r)}function L(e){let t=e.absolute?`~${e.path}`:e.path,n={name:e.name,path:t};return e.children.size>0&&(n.children=[...e.children.values()].map(e=>L(e))),n}function Et(e){return[...e.children.values()].map(e=>L(e))}function Dt(e){let t=e?.queryParams;return new Xe({...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=>pt(e,t),buildQueryString:e=>gt(e,t)})}function R(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 z(e,t,n){let r=Tt(``,t,e),i=Dt(n);return i.registerTree(r),{tree:r,matcher:i}}function Ot(e){let t=z(e.definitions,e.rootPath,e.matcherOptions);e.tree=t.tree,e.matcher=t.matcher,e.resolvedForwardMap=V(e.config)}function B(e){let t=z(e.definitions,e.rootPath,e.matcherOptions);e.tree=t.tree,e.matcher=t.matcher}function kt(e){At(e),B(e)}function At(e){e.definitions.length=0,Object.assign(e.config,ye()),e.resolvedForwardMap=Object.create(null),e.routeCustomFields=Object.create(null)}function V(e){let t=Object.create(null);for(let n of Object.keys(e.forwardMap))t[n]=R(n,e.forwardMap);return t}function jt(e,t,n){if(e.canActivate){let n=typeof e.forwardTo==`string`?e.forwardTo:`[dynamic]`;p.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]`;p.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 Mt(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&&jt(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 H(e,t,n,r,i,a,o=``){for(let s of e){let e=o?`${o}.${s.name}`:s.name;Mt(s,e,t,n,r,i,a),s.children&&H(s.children,t,n,r,i,a,e)}}function Nt(e,t){let n=[],r=ye(),i=Object.create(null),a=new Map,o=new Map;for(let t of e)n.push(C(t));let{tree:s,matcher:c}=z(n,``,t);return H(e,r,i,a,o,void 0,``),{definitions:n,config:r,tree:s,matcher:c,resolvedForwardMap:V(r),routeCustomFields:i,rootPath:``,matcherOptions:t,depsStore:void 0,lifecycleNamespace:void 0,pendingCanActivate:a,pendingCanDeactivate:o,treeOperations:{commitTreeChanges:Ot,resetStore:kt,nodeToDefinition:L}}}const U=[];Object.freeze(U);function Pt(e){let t=e.length,n=[];for(let r=t-1;r>=0;r--)n.push(e[r]);return n}function Ft(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 It(e){let t=typeof e;return t===`string`||t===`number`||t===`boolean`}function Lt(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(It(t)&&It(i)&&String(t)!==String(i))return!1}return!0}function Rt(e,t,n,r,i,a){for(let o=0;o<a;o++){let a=r[o];if(a!==i[o]||!Lt(a,e,t,n))return o}return a}const zt=new Map;function W(e){let t=zt.get(e);if(t)return t;let n=Bt(e);return Object.freeze(n),zt.set(e,n),n}function Bt(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]:Ft(e)}let G,K,q=null,Vt,Ht,J=null;function Ut(e,t){if(!t)return{intersection:``,toActivate:W(e.name),toDeactivate:U};let n=ue(e),r=ue(t);if(!n&&!r)return{intersection:``,toActivate:W(e.name),toDeactivate:Pt(W(t.name))};let i=W(e.name),a=W(t.name),o=Math.min(a.length,i.length),s=Rt(n??r,e,t,i,a,o),c;if(s>=a.length)c=U;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 Y(e,t){if(q!==null&&e===G&&t===K)return q;if(J!==null&&e===Vt&&t===Ht)return J;let n=Ut(e,t);return Vt=G,Ht=K,J=q,G=e,K=t,q=n,n}function Wt(e){let t=[];for(let n of e)for(let e of n.paramMeta.urlParams)t.push(e);return t}function Gt(e){return e.at(-1)?.fullName??``}function Kt(e,t){return{name:t??Gt(e.segments),params:e.params,meta:e.meta}}var qt=class{#e;#t;get#n(){return this.#e.depsStore}constructor(e=[],t){this.#e=Nt(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===``&&!n)return!0;let{intersection:r,toActivate:i,toDeactivate:a}=Y(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,B(this.#e)}hasRoute(e){return this.#e.matcher.hasRoute(e)}clearRoutes(){kt(this.#e)}buildPath(e,t,n){if(e===o.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??{},i=typeof this.#e.config.encoders[e]==`function`?this.#e.config.encoders[e]({...r}):r;return this.#e.matcher.buildPath(e,i,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}=Kt(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 e=typeof this.#e.config.encoders[c]==`function`?this.#e.config.encoders[c]({...l}):l,t=n.trailingSlash;u=this.#e.matcher.buildPath(c,e,{trailingSlash:t===`never`||t===`always`?t:void 0,queryParamsMode:n.queryParamsMode})}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 Kt({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 o=this.#e.config.defaultParams[e];if(n||a===e){let n={name:e,params:o?{...o,...t}:t,path:``};return this.#n.areStatesEqual(n,i,r)}let s=i.params;return be(t,s)?!o||xe(o,s,t):!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?Wt(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 Jt=new s(t.ROUTER_NOT_STARTED),Yt=new s(t.ROUTE_NOT_FOUND),Xt=new s(t.SAME_STATES),Zt=Promise.reject(Jt),Qt=Promise.reject(Yt),X=Promise.reject(Xt);Zt.catch(()=>{}),Qt.catch(()=>{}),X.catch(()=>{});function $t(e,t,n,r,i){let a={phase:`activating`,reason:`success`,segments:{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),a}function en({signal:e,...t}){return t}function tn(e,n){let{toState:r,fromState:i,opts:c,toDeactivate:l,toActivate:u,intersection:d}=n;if(r.name!==o.UNKNOWN_ROUTE&&!e.hasRoute(r.name)){let n=new s(t.ROUTE_NOT_FOUND,{routeName:r.name});throw e.sendTransitionFail(r,i,n),n}if(i)for(let t of l)!u.includes(t)&&n.canDeactivateFunctions.has(t)&&e.clearCanDeactivate(t);r.transition=$t(i,c,l,u,d);let f=a(r);e.setState(f);let p=c.signal===void 0?c:en(c);return e.sendTransitionDone(f,i,p),f}function nn(e,n,r,i){let a=n;a.code===t.TRANSITION_CANCELLED||a.code===t.ROUTE_NOT_FOUND||e.sendTransitionFail(r,i,a)}function Z(e,n,r){if(e instanceof DOMException&&e.name===`AbortError`)throw new s(t.TRANSITION_CANCELLED);rn(e,n,r)}function rn(e,t,n){throw e instanceof s?(e.setCode(t),e):new s(t,on(e,n))}const an=new Set([`code`,`segment`,`path`,`redirect`]);function on(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))an.has(n)||(t[n]=r);return{...n,...t}}return n}async function sn(e,t,n){let r;try{r=await e}catch(e){Z(e,t,n);return}if(!r)throw new s(t,{segment:n})}async function cn(e,n,r,i,a,o,c,l,u,d){await sn(u,r,d);for(let u=l;u<n.length;u++){if(!c())throw new s(t.TRANSITION_CANCELLED);let l=n[u],d=e.get(l);if(!d)continue;let f=!1;try{f=d(i,a,o)}catch(e){Z(e,r,l)}if(f instanceof Promise){await sn(f,r,l);continue}if(!f)throw new s(r,{segment:l})}}async function ln(e,n,r,i,a,o,c,l){if(await e,!l())throw new s(t.TRANSITION_CANCELLED);if(i){let e=Q(n,r,t.CANNOT_ACTIVATE,a,o,c,l);if(e!==void 0&&await e,!l())throw new s(t.TRANSITION_CANCELLED)}}function un(e,n,r,i,a,o,c,l,u,d){if(a){let a=Q(e,r,t.CANNOT_DEACTIVATE,c,l,u,d);if(a!==void 0)return ln(a,n,i,o,c,l,u,d)}if(!d())throw new s(t.TRANSITION_CANCELLED);if(o)return Q(n,i,t.CANNOT_ACTIVATE,c,l,u,d)}function Q(e,n,r,i,a,o,c){for(let[l,u]of n.entries()){if(!c())throw new s(t.TRANSITION_CANCELLED);let d=e.get(u);if(!d)continue;let f=!1;try{f=d(i,a,o)}catch(e){Z(e,r,u)}if(f instanceof Promise)return cn(e,n,r,i,a,o,c,l+1,f,u);if(!f)throw new s(r,{segment:u})}}const dn=[o.UNKNOWN_ROUTE];Object.freeze(dn);const fn={replace:!0};Object.freeze(fn);function pn(e,t){return t?.name===o.UNKNOWN_ROUTE&&!e.replace?{...e,replace:!0}:e}function mn(e,t,n){return!!e&&!t.reload&&!t.force&&e.path===n.path}var hn=class{lastSyncResolved=!1;lastSyncRejected=!1;#e;#t=null;#n=0;setDependencies(e){this.#e=e}navigate(e,n,r){this.lastSyncResolved=!1;let i=this.#e;if(!i.canNavigate())return this.lastSyncRejected=!0,Zt;let a,c,l=!1,u=null;try{if(a=i.buildNavigateState(e,n),!a)return i.emitTransitionError(void 0,i.getState(),Yt),this.lastSyncRejected=!0,Qt;if(c=i.getState(),r=pn(r,c),mn(c,r,a))return i.emitTransitionError(a,c,Xt),this.lastSyncRejected=!0,X;if(this.#o(),r.signal?.aborted)throw new s(t.TRANSITION_CANCELLED,{reason:r.signal.reason});let d=++this.#n;if(i.startTransition(a,c),l=!0,this.#n!==d)throw new s(t.TRANSITION_CANCELLED);let[f,p]=i.getLifecycleFunctions(),m=a.name===o.UNKNOWN_ROUTE,{toDeactivate:h,toActivate:g,intersection:_}=Y(a,c),v=c&&!r.forceDeactivate&&h.length>0,y=!m&&g.length>0;if(f.size>0||p.size>0){u=new AbortController,this.#t=u;let e=u.signal,n=()=>this.#n===d&&i.isActive(),o=un(f,p,h,g,!!v,y,a,c,e,n);if(o!==void 0)return this.#r(o,{toState:a,fromState:c,opts:r,toDeactivate:h,toActivate:g,intersection:_,canDeactivateFunctions:f},u,d);if(!n())throw new s(t.TRANSITION_CANCELLED);this.#a(u)}return this.lastSyncResolved=!0,Promise.resolve(tn(i,{toState:a,fromState:c,opts:r,toDeactivate:h,toActivate:g,intersection:_,canDeactivateFunctions:f}))}catch(e){return this.#i(e,u,l,a,c),Promise.reject(e)}}navigateToDefault(e){let n=this.#e;if(!n.getOptions().defaultRoute)return Promise.reject(new s(t.ROUTE_NOT_FOUND,{routeName:`defaultRoute not configured`}));let{route:r,params:i}=n.resolveDefault();return r?this.navigate(r,i,e):Promise.reject(new s(t.ROUTE_NOT_FOUND,{routeName:`defaultRoute resolved to empty`}))}navigateToNotFound(e){this.#o();let t=this.#e.getState(),n=t?W(t.name).toReversed():[];Object.freeze(n);let r={deactivated:n,activated:dn,intersection:``};Object.freeze(r);let i={phase:`activating`,...t&&{from:t.name},reason:`success`,segments:r};Object.freeze(i);let a={name:o.UNKNOWN_ROUTE,params:{},path:e,transition:i};return Object.freeze(a),this.#e.setState(a),this.#e.emitTransitionSuccess(a,t,fn),a}abortCurrentNavigation(){this.#t?.abort(new s(t.TRANSITION_CANCELLED)),this.#t=null}async#r(e,n,r,i){let a=this.#e,o=()=>this.#n===i&&!r.signal.aborted&&a.isActive();try{if(n.opts.signal){if(n.opts.signal.aborted)throw new s(t.TRANSITION_CANCELLED,{reason:n.opts.signal.reason});n.opts.signal.addEventListener(`abort`,()=>{r.abort(n.opts.signal?.reason)},{once:!0,signal:r.signal})}if(await e,!o())throw new s(t.TRANSITION_CANCELLED);return tn(a,n)}catch(e){throw nn(a,e,n.toState,n.fromState),e}finally{this.#a(r)}}#i(e,t,n,r,i){t&&this.#a(t),n&&r&&nn(this.#e,e,r,i)}#a(e){e.abort(),this.#t===e&&(this.#t=null)}#o(){this.#e.isTransitioning()&&(p.warn(`router.navigate`,`Concurrent navigation detected on shared router instance. For SSR, use cloneRouter() to create isolated instance per request.`),this.#t?.abort(new s(t.TRANSITION_CANCELLED)),this.#e.cancelNavigation())}};const gn={replace:!0};Object.freeze(gn);var _n=class{#e;setDependencies(e){this.#e=e}async start(e){let n=this.#e,r=n.getOptions(),i=n.matchPath(e);if(!i&&!r.allowNotFound){let r=new s(t.ROUTE_NOT_FOUND,{path:e});throw n.emitTransitionError(void 0,void 0,r),r}return n.completeStart(),i?n.navigate(i.name,i.params,gn):n.navigateToNotFound(e)}stop(){this.#e.clearState()}},vn=class{#e;#t;#n;#r;#i;#a;constructor(e){this.#e=e.routerFSM,this.#t=e.emitter,this.#n=void 0,this.#s()}static validateSubscribeListener(e){if(typeof e!=`function`)throw TypeError(`[router.subscribe] Expected a function. For Observable pattern use @real-router/rx package`)}emitRouterStart(){this.#t.emit(r.ROUTER_START)}emitRouterStop(){this.#t.emit(r.ROUTER_STOP)}emitTransitionStart(e,t){this.#t.emit(r.TRANSITION_START,e,t)}emitTransitionSuccess(e,t,n){this.#t.emit(r.TRANSITION_SUCCESS,e,t,n)}emitTransitionError(e,t,n){this.#t.emit(r.TRANSITION_ERROR,e,t,n)}emitTransitionCancel(e,t){this.#t.emit(r.TRANSITION_CANCEL,e,t)}sendStart(){this.#e.send(y.START)}sendStop(){this.#e.send(y.STOP)}sendDispose(){this.#e.send(y.DISPOSE)}sendStarted(){this.#e.send(y.STARTED)}sendNavigate(e,t){this.#n=e,this.#e.forceState(v.TRANSITIONING),this.emitTransitionStart(e,t)}sendComplete(e,t,n={}){this.#e.forceState(v.READY),this.emitTransitionSuccess(e,t,n),this.#n===e&&(this.#n=void 0)}sendFail(e,t,n){let r=this.#n;this.#r=e,this.#i=t,this.#a=n,this.#e.send(y.FAIL),this.#n===r&&(this.#n=void 0)}sendFailSafe(e,t,n){this.isReady()?this.sendFail(e,t,n):this.emitTransitionError(e,t,n)}sendCancel(e,t){let n=this.#n;this.#r=e,this.#i=t,this.#e.send(y.CANCEL),this.#n===n&&(this.#n=void 0)}canBeginTransition(){return this.#e.canSend(y.NAVIGATE)}canStart(){return this.#e.canSend(y.START)}canCancel(){return this.#e.canSend(y.CANCEL)}isActive(){let e=this.#e.getState();return e!==v.IDLE&&e!==v.DISPOSED}isDisposed(){return this.#e.getState()===v.DISPOSED}isTransitioning(){return this.#e.getState()===v.TRANSITIONING}isReady(){return this.#e.getState()===v.READY}getCurrentToState(){return this.#n}addEventListener(e,t){return this.#t.on(e,t)}subscribe(e){return this.#t.on(r.TRANSITION_SUCCESS,(t,n)=>{e({route:t,previousRoute:n})})}clearAll(){this.#t.clearAll()}setLimits(e){this.#t.setLimits(e)}sendCancelIfTransitioning(e){this.canCancel()&&this.sendCancel(this.#n,e)}#o(){this.emitTransitionError(this.#r,this.#i,this.#a)}#s(){let e=this.#e;e.on(v.STARTING,y.STARTED,()=>{this.emitRouterStart()}),e.on(v.READY,y.STOP,()=>{this.emitRouterStop()}),e.on(v.TRANSITIONING,y.CANCEL,()=>{let e=this.#r;e!==void 0&&this.emitTransitionCancel(e,this.#i)}),e.on(v.STARTING,y.FAIL,()=>{this.#o()}),e.on(v.READY,y.FAIL,()=>{this.#o()}),e.on(v.TRANSITIONING,y.FAIL,()=>{this.#o()})}};const yn=new s(t.ROUTER_ALREADY_STARTED),bn=new Set([`all`,`warn-error`,`error-only`]);function xn(e){return typeof e==`string`&&bn.has(e)}function Sn(e){return typeof e==`string`?`"${e}"`:typeof e==`object`?JSON.stringify(e):String(e)}function Cn(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&&!xn(t.level))throw TypeError(`Invalid logger level: ${Sn(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 wn=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 d(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=d(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 d(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=d(this.router);n.validator?.routes.validateStateBuilderArgs(e,t,`navigate`);let{name:r,params:i}=n.forwardState(e,t),a=this.routes.getMetaForState(r);if(a===void 0)return;let o=n.buildPath(r,i);return this.state.makeState(r,i,o,a,!0)},resolveDefault:()=>{let e=this.options.get();return{route:oe(e.defaultRoute,e=>this.dependenciesStore.dependencies[e]),params:oe(e.defaultParams,e=>this.dependenciesStore.dependencies[e])}},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)},canNavigate:()=>this.eventBus.canBeginTransition(),getLifecycleFunctions:()=>this.routeLifecycle.getFunctions(),isActive:()=>this.router.isActive(),isTransitioning:()=>this.eventBus.isTransitioning(),clearCanDeactivate:e=>{this.routeLifecycle.clearCanDeactivate(e)}})}wireLifecycleDeps(){this.lifecycle.setDependencies({getOptions:()=>this.options.get(),navigate:(e,t,n)=>this.navigation.navigate(e,t,n),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)=>d(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 Tn(e){e.wireLimits(),e.wireRouteLifecycleDeps(),e.wireRoutesDeps(),e.wirePluginsDeps(),e.wireNavigationDeps(),e.wireLifecycleDeps(),e.wireStateDeps()}const En=Object.freeze({});var Dn=class n{#e;#t;#n;#r;#i;#a;#o;#s;#c;#l;constructor(t=[],n={},r={}){n.logger&&Cn(n.logger)&&(p.configure(n.logger),delete n.logger),ce.validateOptionsIsObject(n),ne(r),t.length>0&&b(t),this.#e=new ce(n),this.#t=i(n.limits),this.#n=re(r),this.#r=new fe,this.#i=new qt(t,On(this.#e.get())),this.#a=new ve,this.#o=new ge,this.#s=new hn,this.#c=new _n,this.#l=new vn({routerFSM:te(),emitter:new _({onListenerError:(e,t)=>{p.error(`Router`,`Error in listener for ${e}:`,t)},onListenerWarn:(e,t)=>{p.warn(`router.addEventListener`,`Event "${e}" has ${t} listeners — possible memory leak`)}})}),Tn(new wn({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 a=new Map;l(this,{makeState:(e,t,n,r)=>this.#r.makeState(e,t,n,r),forwardState:u(`forwardState`,(e,t)=>this.#i.forwardState(e,t),a),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:u(`buildPath`,(t,n)=>this.#i.buildPath(t,n??e,this.#e.get()),a),start:f(`start`,e=>this.#c.start(e),a),interceptors:a,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:[]}),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)}isActiveRoute(e,t,n,r){return d(this).validator?.routes.validateIsActiveRouteArgs(e,t,n,r),d(this).validator?.routes.validateRouteName(e,`isActiveRoute`),e===``?(p.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=d(this);return n.validator?.routes.validateBuildPathArgs(e),n.validator?.navigation.validateParams(t,`buildPath`),n.buildPath(e,t)}getState(){return this.#r.get()}getPreviousState(){return this.#r.getPrevious()}areStatesEqual(e,t,n=!0){return d(this).validator?.state.validateAreStatesEqualArgs(e,t,n),this.#r.areStatesEqual(e,t,n)}shouldUpdateNode(e){return d(this).validator?.routes.validateShouldUpdateNodeArgs(e),qt.shouldUpdateNode(e)}isActive(){return this.#l.isActive()}start(e){if(!this.#l.canStart())return Promise.reject(yn);d(this).validator?.navigation.validateStartArgs(e),this.#l.sendStart();let t=d(this).start(e).catch(e=>{throw this.#l.isReady()&&(this.#c.stop(),this.#l.sendStop()),e});return n.#d(t),t}stop(){return this.#s.abortCurrentNavigation(),this.#l.sendCancelIfTransitioning(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.sendCancelIfTransitioning(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=d(this);for(let t of e.routerExtensions)for(let e of t.keys)delete this[e];e.routerExtensions.length=0,this.#i.clearRoutes(),this.#a.clearAll(),this.#r.reset(),this.#n.dependencies=Object.create(null),this.#f()}canNavigateTo(e,t){let n=d(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}=Y(a,o);return this.#a.canNavigateTo(s,c,a,o)}usePlugin(...e){let t=e.filter(Boolean);if(t.length===0)return()=>{};let n=d(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 vn.validateSubscribeListener(e),this.#l.subscribe(e)}navigate(t,r,i){let a=d(this);a.validator?.navigation.validateNavigateArgs(t),a.validator?.navigation.validateParams(r,`navigate`);let o=i??En;a.validator?.navigation.validateNavigationOptions(o,`navigate`);let s=this.#s.navigate(t,r??e,o);return this.#s.lastSyncResolved?this.#s.lastSyncResolved=!1:this.#s.lastSyncRejected?this.#s.lastSyncRejected=!1:n.#d(s),s}navigateToDefault(e){let t=d(this);t.validator?.navigation.validateNavigateToDefaultArgs(e);let r=e??En;t.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:n.#d(i),i}navigateToNotFound(e){if(!this.#l.isActive())throw new s(t.ROUTER_NOT_STARTED);if(e!==void 0&&typeof e!=`string`)throw TypeError(`[router.navigateToNotFound] path must be a string, got ${typeof e}`);let n=e??this.#r.get().path;return this.#s.navigateToNotFound(n)}static#u=e=>{e instanceof s&&(e.code===t.SAME_STATES||e.code===t.TRANSITION_CANCELLED||e.code===t.ROUTER_NOT_STARTED||e.code===t.ROUTE_NOT_FOUND)||p.error(`router.navigate`,`Unexpected navigation error`,e)};static#d(e){e.catch(n.#u)}#f(){this.navigate=$,this.navigateToDefault=$,this.navigateToNotFound=$,this.start=$,this.stop=$,this.usePlugin=$,this.subscribe=$,this.canNavigateTo=$}};function $(){throw new s(t.ROUTER_DISPOSED)}function On(e){return{strictTrailingSlash:e.trailingSlash===`strict`,strictQueryParams:e.queryParamsMode===`strict`,urlParamsEncoding:e.urlParamsEncoding,queryParams:e.queryParams}}export{R as a,w as c,H as i,C as l,At as n,Et as o,V as r,Se as s,Dn as t,b as u};
6
- //# sourceMappingURL=Router-C_k70gHi.mjs.map