@real-router/core 0.68.0 → 0.68.2
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-B_vng8Xg.js +2 -0
- package/dist/cjs/Router-B_vng8Xg.js.map +1 -0
- package/dist/cjs/api.d.ts +1 -1
- package/dist/cjs/api.js +1 -1
- package/dist/cjs/api.js.map +1 -1
- package/dist/cjs/cloneRouter-B0XcxjC8.js +2 -0
- package/dist/cjs/{cloneRouter-d9N0A7BI.js.map → cloneRouter-B0XcxjC8.js.map} +1 -1
- package/dist/cjs/esm-B6E99LjJ.js +2 -0
- package/dist/cjs/esm-B6E99LjJ.js.map +1 -0
- package/dist/cjs/{index-BHYayJAM.d.ts → index-DlHpdGTA.d.ts} +40 -4
- package/dist/cjs/index-DlHpdGTA.d.ts.map +1 -0
- package/dist/cjs/index.d.ts +1 -1
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/utils.js +1 -1
- package/dist/cjs/utils.js.map +1 -1
- package/dist/cjs/validation.d.ts +2 -2
- package/dist/cjs/validation.js +1 -1
- package/dist/esm/Router-BA0Wn8jU.mjs +2 -0
- package/dist/esm/Router-BA0Wn8jU.mjs.map +1 -0
- package/dist/esm/api.d.mts +1 -1
- package/dist/esm/api.mjs +1 -1
- package/dist/esm/api.mjs.map +1 -1
- package/dist/esm/cloneRouter-Dk10jp03.mjs +2 -0
- package/dist/esm/{cloneRouter-DGKha3Du.mjs.map → cloneRouter-Dk10jp03.mjs.map} +1 -1
- package/dist/esm/esm-CQSKkkua.mjs +2 -0
- package/dist/esm/esm-CQSKkkua.mjs.map +1 -0
- package/dist/esm/{index-BHYayJAM.d.mts → index-DlHpdGTA.d.mts} +40 -4
- package/dist/esm/index-DlHpdGTA.d.mts.map +1 -0
- package/dist/esm/index.d.mts +1 -1
- package/dist/esm/index.mjs +1 -1
- package/dist/esm/utils.mjs +1 -1
- package/dist/esm/utils.mjs.map +1 -1
- package/dist/esm/validation.d.mts +2 -2
- package/dist/esm/validation.mjs +1 -1
- package/package.json +3 -3
- package/dist/cjs/Router-BcWqit3y.js +0 -2
- package/dist/cjs/Router-BcWqit3y.js.map +0 -1
- package/dist/cjs/cloneRouter-d9N0A7BI.js +0 -2
- package/dist/cjs/index-BHYayJAM.d.ts.map +0 -1
- package/dist/cjs/internals-DJjgSePy.js +0 -2
- package/dist/cjs/internals-DJjgSePy.js.map +0 -1
- package/dist/esm/Router-AopZx1bD.mjs +0 -2
- package/dist/esm/Router-AopZx1bD.mjs.map +0 -1
- package/dist/esm/cloneRouter-DGKha3Du.mjs +0 -2
- package/dist/esm/index-BHYayJAM.d.mts.map +0 -1
- package/dist/esm/internals-C8mRvTxc.mjs +0 -2
- package/dist/esm/internals-C8mRvTxc.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"esm-CQSKkkua.mjs","names":["e","t","n","r","i","a","o","s","c","l","u","d","f","p","m","h","g","_","v","y","b","x","S","C","w","z","B","V","H","F","O","T","U","E","D","k","A","j","M","N","P","I","L","R","W","G","K","q","#e","#s","#c","#a","#t","#n","#r","#p","#i","#_","#h","#v","#S","#w","#l","#u","#d","#f","#m","#o","#g","#y","#x","#b","#C","s","c","l","u","d","f","p","m","h","g","v","y","b","x","S","w","C","T","n","t","o","a","r","e"],"sources":["../../src/internals.ts","../../../path-matcher/dist/esm/index.mjs","../../../search-params/dist/esm/index.mjs","../../../route-tree/dist/esm/index.mjs"],"sourcesContent":["import type { DependenciesStore } from \"./namespaces\";\nimport type { RoutesStore } from \"./namespaces/RoutesNamespace\";\nimport type { Router as RouterClass } from \"./Router\";\nimport type { EventMethodMap, PluginFactory } from \"./types\";\nimport type { RouterValidator } from \"./types/RouterValidator\";\nimport type { SerializedRouterState } from \"./utils\";\nimport type {\n DefaultDependencies,\n EventName,\n NavigationOptions,\n Options,\n Params,\n Plugin,\n Router as RouterInterface,\n RouteTreeState,\n SimpleState,\n State,\n TreeChangedEvent,\n Unsubscribe,\n} from \"@real-router/types\";\nimport type { RouteTree } from \"route-tree\";\n\nexport interface RouterInternals<\n D extends DefaultDependencies = DefaultDependencies,\n> {\n readonly makeState: <P extends Params = Params>(\n name: string,\n params?: P,\n path?: string,\n meta?: Record<string, Record<string, \"url\" | \"query\">>,\n ) => State<P>;\n\n readonly forwardState: <P extends Params = Params>(\n routeName: string,\n routeParams: P,\n ) => SimpleState<P>;\n\n readonly buildStateResolved: (\n resolvedName: string,\n resolvedParams: Params,\n ) => RouteTreeState | undefined;\n\n readonly matchPath: <P extends Params = Params>(\n path: string,\n options?: Options,\n ) => State<P> | undefined;\n\n readonly getOptions: () => Options;\n\n readonly addEventListener: <E extends EventName>(\n eventName: E,\n cb: Plugin[EventMethodMap[E]],\n ) => Unsubscribe;\n\n /**\n * Route-tree mutation channel — internal access for the `getRoutesApi`\n * wrapper. A dedicated bridge is required because the public\n * `addEventListener<E extends EventName>` structurally rejects\n * `\"TREE_CHANGED\"` (it is not in the public `EventName` union), is strict on\n * duplicates, and exposes neither `emit` nor `listenerCount`.\n */\n readonly treeChanged: {\n readonly emit: (event: TreeChangedEvent) => void;\n readonly subscribe: (\n handler: (event: TreeChangedEvent) => void,\n ) => Unsubscribe;\n readonly listenerCount: () => number;\n /**\n * True while a `TREE_CHANGED` emit is on the stack — `getRoutesApi` reads it\n * to reject reentrant route-CRUD from a `subscribeChanges` handler (#1032).\n */\n readonly isEmitting: () => boolean;\n };\n\n readonly buildPath: (route: string, params?: Params) => string;\n\n readonly emitTransitionError: (error: Error) => void;\n\n /**\n * Emits `TRANSITION_SUCCESS` directly (no FSM transition) — used by\n * `getRoutesApi().replace()` to notify `router.subscribe` listeners when a\n * structural replace revalidates the active state (#950). Mirrors the success\n * emission `completeTransition` / `navigateToNotFound` perform.\n */\n readonly emitTransitionSuccess: (\n toState: State,\n fromState: State | undefined,\n opts?: NavigationOptions,\n ) => void;\n\n /**\n * Commits the not-found (`UNKNOWN_ROUTE`) state for `path` and emits\n * `TRANSITION_SUCCESS` — the `NavigationNamespace.navigateToNotFound`\n * primitive. `replace()` uses it when a structural replace drops the active\n * route, so subscribers are notified instead of the state silently clearing\n * (#950).\n */\n readonly navigateToNotFound: (path: string) => State;\n\n readonly start: (path: string) => Promise<State>;\n\n /**\n * Plugin-only navigation entry point — delegates to\n * `NavigationNamespace.navigateToState` (`getPluginApi(router).navigateToState`).\n * Hidden from `Router`/`Navigator` to keep the userland surface minimal;\n * see `core-types/src/api.ts` for usage docs.\n */\n readonly navigateToState: (\n state: State,\n options?: NavigationOptions,\n ) => Promise<State>;\n\n /* eslint-disable @typescript-eslint/no-explicit-any -- heterogeneous map: stores different InterceptorFn<M> types under different keys */\n readonly interceptors: Map<\n string,\n ((next: (...args: any[]) => any, ...args: any[]) => any)[]\n >;\n /* eslint-enable @typescript-eslint/no-explicit-any */\n\n readonly setRootPath: (rootPath: string) => void;\n readonly getRootPath: () => string;\n\n readonly getTree: () => RouteTree;\n\n readonly isDisposed: () => boolean;\n\n validator: RouterValidator | null;\n\n // Dependencies (issue #172)\n readonly dependenciesGetStore: () => DependenciesStore<D>;\n\n // Clone support (issue #173, consolidated #964). One accessor for the\n // source-side snapshot a clone carries over besides the route store, so a new\n // clone-relevant subsystem is wired in a single place instead of being spread\n // across separate methods.\n readonly getCloneState: () => {\n options: Options;\n dependencies: Record<string, unknown>;\n pluginFactories: PluginFactory<D>[];\n };\n\n // Consolidated route data store (issue #174 Phase 2)\n readonly routeGetStore: () => RoutesStore<D>;\n\n // Cross-namespace state (issue #174)\n readonly getStateName: () => string | undefined;\n readonly isTransitioning: () => boolean;\n readonly clearState: () => void;\n readonly setState: (state: State) => void;\n readonly routerExtensions: { keys: string[] }[];\n readonly contextClaimRecords: Set<string>;\n\n /**\n * One-shot hydration scratchpad populated by `hydrateRouter` immediately\n * before delegating to `router.start(parsed.path)` and cleared in the\n * matching `finally`. SSR loader plugins read this slot directly via\n * `getInternals(router).hydrationState` to short-circuit their own loader\n * call when the server-resolved namespace value is already present in the\n * parsed state (#596). `null` outside of an active `hydrateRouter`\n * invocation.\n */\n hydrationState: SerializedRouterState | null;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- existential type: stores RouterInternals for all Dependencies types\nconst internals = new WeakMap<object, RouterInternals<any>>();\n\nexport function getInternals<D extends DefaultDependencies>(\n router: RouterInterface<D>,\n): RouterInternals<D> {\n const ctx = internals.get(router);\n\n if (!ctx) {\n throw new TypeError(\n \"[real-router] Invalid router instance — not found in internals registry\",\n );\n }\n\n return ctx as RouterInternals<D>;\n}\n\nexport function registerInternals<D extends DefaultDependencies>(\n router: RouterClass<D>,\n ctx: RouterInternals<D>,\n): void {\n internals.set(router, ctx);\n}\n\n/* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-argument -- internal chain execution: type safety enforced at public API boundary (PluginApi.addInterceptor) */\nfunction executeInterceptorChain<T>(\n interceptors: ((next: (...args: any[]) => any, ...args: any[]) => any)[],\n original: (...args: any[]) => T,\n args: any[],\n): T {\n let chain = original as (...args: any[]) => any;\n\n for (const interceptor of interceptors) {\n const prev = chain;\n\n chain = (...chainArgs: any[]) => interceptor(prev, ...chainArgs);\n }\n\n return chain(...args) as T;\n}\n\n/**\n * Variadic interceptor wrapper — wraps a function of any arity, returning the\n * same callable type `T`. Use {@link createBinaryInterceptable} instead when the\n * wrapped method takes exactly two args and the caller needs the precise\n * `(a, b) => r` signature preserved (the variadic form widens args to `any[]`).\n */\nexport function createInterceptable<T extends (...args: any[]) => any>(\n name: string,\n original: T,\n interceptors: Map<\n string,\n ((next: (...args: any[]) => any, ...args: any[]) => any)[]\n >,\n): T {\n return ((...args: any[]) => {\n const chain = interceptors.get(name);\n\n if (!chain || chain.length === 0) {\n return original(...args);\n }\n\n return executeInterceptorChain(chain, original, args);\n }) as T;\n}\n\n/**\n * Two-argument interceptor wrapper — preserves the exact `(a: A, b: B) => R`\n * signature, which the variadic {@link createInterceptable} cannot express\n * (it widens args to `any[]`). Used for the binary interceptable methods\n * `forwardState(routeName, routeParams)` and `buildPath(route, params)`.\n */\nexport function createBinaryInterceptable<A, B, R>(\n name: string,\n original: (a: A, b: B) => R,\n interceptors: Map<\n string,\n ((next: (...args: any[]) => any, ...args: any[]) => any)[]\n >,\n): (a: A, b: B) => R {\n return (arg1: A, arg2: B) => {\n const chain = interceptors.get(name);\n\n if (!chain || chain.length === 0) {\n return original(arg1, arg2);\n }\n\n return executeInterceptorChain(chain, original, [arg1, arg2]);\n };\n}\n/* eslint-enable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-argument */\n","const e=`[^>]*`;function t(e){let t=!1;for(let n of e)if(n===`<`)t=!0;else if(n===`>`){if(!t)return!1;t=!1}return!t}function n(e){return`(${e.replaceAll(/(^<|>$)/g,``)})`}const r=`[^/?<]+`,i=new RegExp(String.raw`([:*])(${r})(<${e}>)?(\\?)?`,`g`),a=new RegExp(String.raw`([:*]${r}(?:<${e}>)?)\\?(?=[/?]|$)`,`g`),o=RegExp(`<${e}>`,`g`),s=/\\?(.+)$/;function c(e){return e.replaceAll(o,e=>`<${`x`.repeat(e.length-2)}>`).replaceAll(a,`$1\\0`)}const l=Object.freeze([]),u=Object.freeze({}),d=new Map;function f(e){let t=[],r=[],a=[],o={},l=new Map,u=s.exec(c(e));if(u!==null){let t=e.slice(u.index+1).split(`&`);for(let e of t){let t=e.trim();t.length>0&&(r.push(t),o[t]=`query`)}e=e.slice(0,u.index)}let d;for(;(d=i.exec(e))!==null;){let e=d[1],r=d[2],i=d[3];if(e===`*`)a.push(r),t.push(r),o[r]=`url`;else if(t.push(r),o[r]=`url`,i){let e=`^${n(i)}$`;l.set(r,{pattern:new RegExp(e),constraint:i})}}return p(t,r,a,o,l,e)}function p(e,t,n,r,i,a){return{urlParams:e.length===0?l:e,queryParams:t.length===0?l:t,spatParams:n.length===0?l:n,paramTypeMap:e.length===0&&t.length===0?u:r,constraintPatterns:i.size===0?d:i,pathPattern:a}}const m=/[^\\w!$'()*+,.:;|~-]/gu,h=/[^\\w!$'()*+,.:;|~-]/u,g={default:e=>h.test(e)?e.replaceAll(m,e=>encodeURIComponent(e)):e,uri:encodeURI,uriComponent:encodeURIComponent,none:e=>e},_={default:decodeURIComponent,uri:decodeURI,uriComponent:decodeURIComponent,none:e=>e},ee=(e,t,n)=>{let r=g[t],i=String(e);if(!n)return r(i);let a=i.split(`/`),o=r(a[0]);for(let e=1;e<a.length;e++)o+=`/`+r(a[e]);return o};function v(){return{staticChildren:Object.create(null),hasChildren:!1,paramChild:void 0,splatChild:void 0,route:void 0,routeIsStrong:!1,slashChildRoute:void 0}}function y(e){return e.length>1&&e.endsWith(`/`)?e.slice(0,-1):e}function te(e,t){return e===``?t:t===``?e:e+t}function b(e){return e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102}function x(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(!b(n)||!b(r))return!1;t+=3}else t++;return!0}const S=Object.freeze([]),C=Object.freeze(new Set),ne=Object.freeze(new Map),re=Object.freeze([]),ie=Object.freeze({}),ae=RegExp(`<${e}>`,`g`);function w(e,n,r,i,a){let o=n.fullName===``;o||i.push(n);let s=n.absolute,c=n.paramMeta.pathPattern,l=s&&c.startsWith(`~`)?c.slice(1):c,u=s?l:c;t(u)||z(u),u.includes(`<>`)&&B(u),V(u)&&H(u);let d=u.replaceAll(ae,``);N(d)&&F(u);let f=s?d:te(r,d),p=o?a:oe(e,n,f,s?``:r,i,a);for(let t of n.children.values())w(e,t,f,i,p);o||i.pop()}function oe(e,t,n,r,i,a){let o=O(n,r),s=Object.freeze([...i]),c=T(s),l=y(n),u=ye(e.rootQueryParams,i),d=be(i),{buildStaticParts:f,buildParamSlots:p}=ve(o?y(r):l,o?i.slice(0,-1):i,e.options.urlParamsEncoding),m=p.map(e=>e.paramName),h=m.length===0?C:new Set(m);h.size!==m.length&&U(t.fullName,m),se(t.fullName,u,h);let g={name:t.fullName,parent:a,depth:i.length-1,matchSegments:s,meta:c,declaredQueryParams:u,declaredQueryParamsSet:u.length===0?C:new Set(u),hasTrailingSlash:n.length>1&&n.endsWith(`/`),constraintPatterns:d,hasConstraints:d.size>0,buildStaticParts:f,buildParamSlots:p,buildParamNamesSet:h,cachedResult:void 0};return t.paramMeta.urlParams.length===0&&(g.cachedResult=Object.freeze({segments:g.matchSegments,params:ie,meta:g.meta})),e.routesByName.set(t.fullName,g),o?E(e,g,r):D(e,g,n,l,t),g}function T(e){let t={};for(let n of e)t[n.fullName]=n.paramTypeMap;return Object.freeze(t)}function E(e,t,n){he(e,t,n);let r=y(n),i=e.options.caseSensitive?r:r.toLowerCase();e.staticCache.has(i)&&e.staticCache.set(i,t)}function D(e,t,n,r,i){if(me(e,t,n),i.paramMeta.urlParams.length===0){let n=e.options.caseSensitive?r:r.toLowerCase();e.staticCache.set(n,t)}}function O(e,t){return y(e)===y(t)}function k(e,t,n){throw Error(`[SegmentMatcher.registerTree] Parameter name conflict at the same path position: '${n}${e}' and '${n}${t}'. A parametric URL segment binds to a single name across every route that shares that position — the value cannot be captured under two names. Rename one so both routes agree (e.g. use '${n}${e}' in both).`)}function A(){throw Error(`[SegmentMatcher.registerTree] Empty parameter name: a parameter marker (':' or '*') or an optional '?' must be followed by a name (e.g. ':id', '*rest', ':id?'). A name-less marker or modifier would capture under an empty key at match but emit a literal at build — the two disagree, so it is rejected.`)}function j(e){throw Error(`[SegmentMatcher.registerTree] Fused parameter marker in segment \"${e}\": a ':'/'*' marker must begin a segment (e.g. 'a/:b', not 'a:b'). build extracts it as a param while the trie treats the segment as a literal — the two disagree.`)}function M(e){for(let t=0;t<e.length;t++)if(e.charCodeAt(t)>=128)return!0;return!1}function N(e){let t=e.split(`/`);for(let e=2;e<t.length;e++)if(t[e].startsWith(`*`)&&P(t[e-1])&&P(t[e-2]))return!0;return!1}function P(e){return e.startsWith(`:`)&&e.endsWith(`?`)}function F(e){throw Error(`[SegmentMatcher.registerTree] Two optional params directly before a splat in \"${e}\": a single trie slot carries only one optional→splat fork, so the outer optional would overwrite the inner and the omit-outer/take-inner form would silently reshape into the splat. Split into separate routes, or drop the '?' on one.`)}function I(e){throw Error(`[SegmentMatcher.registerTree] Non-ASCII static segment \"${e}\": match rejects non-ASCII input and compares static keys raw, so this route would never match. Percent-encode it (e.g. \"/caf%C3%A9\") or use a param.`)}function L(e){throw Error(`[SegmentMatcher.registerTree] Optional splat \"${e}\" is not supported: a splat cannot be optional — build emits multi-segment URLs the matcher rejects. Use a required splat \"*name\".`)}function R(e){throw Error(`[SegmentMatcher.registerTree] Optional param \":${e}?\" before a splat must be constrained: an unconstrained optional before a splat is ambiguous (every multi-segment value has two readings). Add a constraint, e.g. \":${e}<[a-z]+>?\", or model it as two routes.`)}function z(e){throw Error(`[SegmentMatcher.registerTree] Unbalanced constraint delimiter ('<' or '>') in path \"${e}\": every '<' must be closed by a '>'. A stray delimiter desyncs match vs build (buildPath would emit a URL match rejects).`)}function B(e){throw Error(`[SegmentMatcher.registerTree] Empty constraint '<>' in path \"${e}\": a constraint body must be non-empty (e.g. '<[0-9]+>'). An empty '<>' compiles to a never-matching pattern.`)}function V(e){for(let t=0;t<e.length;t++){if(e[t]!==`>`)continue;let n=e.charAt(t+1);if(n!==``&&n!==`/`&&n!==`?`)return!0}return!1}function H(e){throw Error(`[SegmentMatcher.registerTree] Text fused to a constraint '>' in path \"${e}\": a '<...>' constraint must end its segment or be followed by '/' or an optional '?' — use \"/:id<...>/rest\", not \"/:id<...>rest\".`)}function U(e,t){let n=new Set,r=``;for(let e of t){if(n.has(e)){r=e;break}n.add(e)}throw Error(`[SegmentMatcher.registerTree] Duplicate parameter name ':${r}' in route \"${e}\": a param name must be unique within a route — two positions cannot both bind ':${r}' (the second silently overwrites the first). Rename one.`)}const W=/[<>]/u;function se(e,t,n){for(let r of t)W.test(r)&&G(e,r),n.has(r)&&K(e,r)}function G(e,t){throw Error(`[SegmentMatcher.registerTree] Invalid query-param declaration \"${t}\" in route \"${e}\": a query-param name cannot contain '<' or '>'. This is a reverse-order modifier typo that leaked a constraint into the query — put the optional '?' AFTER the constraint (':id<...>?', not ':id?<...>'). It would never round-trip.`)}function K(e,t){throw Error(`[SegmentMatcher.registerTree] Name collision in route \"${e}\": \"${t}\" is declared as BOTH a path param (':${t}') and a query param ('?${t}'). buildPath would emit its value twice (once in the path, once in the query). Rename one.`)}function q(e,t){e.route!==void 0&&e.route!==t&&e.routeIsStrong===!0&&ce(e.route.name,t.name),e.route=t,e.routeIsStrong=!0}function ce(e,t){throw Error(`[SegmentMatcher.registerTree] Duplicate route path: routes \"${e}\" and \"${t}\" resolve to the same URL. The later registration would silently shadow the earlier (its deep link would resolve to the other route). Give them distinct paths.`)}const le=RegExp(`^[:*](${r})`),ue=RegExp(`[:*]${r}`);function J(e){let t=le.exec(e)?.[1]??``;return t===``&&A(),t}function Y(e,t,n){return e.paramChild?e.paramChild.name!==t&&!n.has(e)&&k(e.paramChild.name,t,`:`):(e.paramChild={node:v(),name:t,fork:void 0},n.add(e)),e.paramChild.node}function de(e,t,n,r,i,a){let o=t.constraintPatterns.get(n)?.pattern;if(e.paramChild&&e.splatChild){o===void 0&&R(n),e.paramChild.fork={constraint:o};return}let s=i+1;if(s<=a){let t=r.indexOf(`/`,s),n=r.slice(s,t===-1?a:t);e.paramChild&&n.startsWith(`:`)&&!n.endsWith(`?`)&&(e.paramChild.fork={skipName:J(n)})}}function fe(e,t,n){if(!t.hasConstraints||!n.startsWith(`:`)||e.paramChild===void 0)return;let r=t.constraintPatterns.get(J(n))?.pattern;if(r===void 0)return;let i=e.paramChild;i.fork?.constraint===void 0?i.fork={...i.fork,constraint:r}:i.fork.constraint.source!==r.source&&(i.fork={...i.fork,constraint:RegExp(`(?:${i.fork.constraint.source})|(?:${r.source})`,i.fork.constraint.flags)})}function pe(e,t,n){return e.splatChild?e.splatChild.name!==t&&!n.has(e)&&k(e.splatChild.name,t,`*`):(e.splatChild={node:v(),name:t},n.add(e)),e.splatChild.node}function me(e,t,n){let r=y(n);if(r===`/`){q(e.root,t);return}let i=new Set,a=new Map;X(e,e.root,r,1,t,i,a)}function X(e,t,n,r,i,a,o){let s=o.get(t);if(s===void 0)s=new Set,o.set(t,s);else if(s.has(r))return;s.add(r);let c=n.length;for(;r<=c;){let s=n.indexOf(`/`,r),l=s===-1?c:s,u=n.slice(r,l);if(u.endsWith(`?`)){u.startsWith(`*`)&&L(u);let r=J(u);X(e,Y(t,r,a),n,l+1,i,a,o),l>=c?t.route??=i:X(e,t,n,l+1,i,a,o),de(t,i,r,n,l,c);return}let d=t;t=Q(e,t,u,a),fe(d,i,u),r=l+1}q(t,i)}function he(e,t,n){let r=n.slice(n.lastIndexOf(`/`)+1),i=n.split(`/`).some(e=>e.startsWith(`:`)&&e.endsWith(`?`)),a=r.startsWith(`*`);(i||a)&&Z(t.name,n);let o=ge(e,n);o.slashChildRoute=t}function Z(e,t){throw Error(`[SegmentMatcher.registerTree] Index route \"${e}\" (path \"/\") under the dynamic parent \"${t}\" is not supported: the index cannot reliably replace the parent on every form of its path — under an optional param it binds only the present form, under a splat it is unreachable. Give the index a distinct path, or make the parent static.`)}function ge(e,t){return _e(e,e.root,t)}function _e(e,t,n){let r=y(n);if(r===`/`||r===``)return t;let i=t,a=1,o=r.length,s=new Set;for(;a<=o;){let t=r.indexOf(`/`,a),n=t===-1?o:t;if(n<=a)break;let c=r.slice(a,n);i=Q(e,i,c,s),a=n+1}return i}function Q(e,t,n,r){if(n.startsWith(`*`)){let e=n.slice(1);e===``&&A();let i=pe(t,e,r);return t.hasChildren=!0,i}if(n.startsWith(`:`)){let e=Y(t,J(n),r);return t.hasChildren=!0,e}ue.test(n)&&j(n),M(n)&&I(n);let i=e.options.caseSensitive?n:n.toLowerCase();return i in t.staticChildren||(t.staticChildren[i]=v(),t.hasChildren=!0),t.staticChildren[i]}function ve(t,n,i){let a=new Set,o=new Set;for(let e of n){for(let t of e.paramMeta.urlParams)a.add(t);for(let t of e.paramMeta.spatParams)o.add(t)}if(a.size===0)return{buildStaticParts:[t],buildParamSlots:re};let s=[],c=[],l=new RegExp(String.raw`[:*](${r})(?:<${e}>)?(\\?)?`,`gu`),u=0,d;for(;(d=l.exec(t))!==null;){let e=d[1],n=d[2]===`?`;s.push(t.slice(u,d.index));let r=o.has(e)?e=>ee(e,i,!0):g[i];c.push({paramName:e,isOptional:n,encoder:r}),u=d.index+d[0].length}return s.push(t.slice(u)),{buildStaticParts:s,buildParamSlots:c}}function ye(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.length===0?S:n}function be(e){let t=new Map;for(let n of e)for(let[e,r]of n.paramMeta.constraintPatterns)t.set(e,r);return t.size===0?ne:t}function xe(e){return typeof e==`string`?e:typeof e==`object`?JSON.stringify(e):String(e)}function $(e,t,n){t===`__proto__`?Object.defineProperty(e,t,{value:n,writable:!0,enumerable:!0,configurable:!0}):e[t]=n}var Se=class{get options(){return this.#e}#e;#t=v();#n=new Map;#r=new Map;#i={cleanPath:``,normalized:``,queryString:void 0};#a=[];#o=``;#s;#c;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.#s=this.#e.caseSensitive,this.#c=this.#e.urlParamsEncoding===`none`?null:_[this.#e.urlParamsEncoding]}registerTree(e){this.#a=e.paramMeta.queryParams,w({root:this.#t,options:this.#e,routesByName:this.#n,staticCache:this.#r,rootQueryParams:this.#a},e,``,[],null)}match(e){if(!this.#p(e))return;let{cleanPath:t,normalized:n,queryString:r}=this.#i,i=this.#s?n:n.toLowerCase(),a=this.#r.get(i);if(a)return this.#e.strictTrailingSlash&&!this.#_(t,a)?void 0:r===void 0&&a.cachedResult?a.cachedResult:this.#h(a,{},r);let o={},s=this.#v(n,o);if(s&&!(this.#e.strictTrailingSlash&&!this.#_(t,s))&&this.#S(o)&&!(s.hasConstraints&&!this.#w(o,s)))return this.#h(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.#l(r,e,t);let i=this.#u(r,t),a=this.#d(i,n?.trailingSlash),o=this.#f(r,t,n?.queryParamsMode);return a+(o?`?${o}`:``)}getSegmentsByName(e){return this.#n.get(e)?.matchSegments}getMetaByName(e){return this.#n.get(e)?.meta}hasRoute(e){return this.#n.has(e)}#l(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}'`)}}}#u(e,t){let n=e.buildStaticParts,r=e.buildParamSlots;if(r.length===0)return n[0];let i=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=i.slice(0,-1):n[e+1].startsWith(`/`)&&(i=``),i+=n[e+1];continue}if(r===``&&!a.isOptional)throw Error(`[SegmentMatcher.buildPath] Missing required param '${a.paramName}' (empty string)`);let o=a.encoder(xe(r));i+=o+n[e+1]}return i}#d(e,t){return t===`always`&&!e.endsWith(`/`)?`${e}/`:t===`never`&&e!==`/`&&e.endsWith(`/`)?e.slice(0,-1):e}#f(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):``}#p(e){if(e===``&&(e=`/`),e.codePointAt(0)!==47)return!1;let t=this.#m(e);if(t===-2)return!1;t===-3&&(e=this.#o);let n=t>=0?e.slice(0,t):e,r=t>=0?e.slice(t+1):void 0;if(r!==void 0){let e=r.indexOf(`#`);e!==-1&&(r=r.slice(0,e))}let i=y(n);return this.#i.cleanPath=n,this.#i.normalized=i,this.#i.queryString=r,!0}#m(e){let t=!1;for(let n=0;n<e.length;n++){let r=e.codePointAt(n);if(r===35)return this.#o=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}#h(e,t,n){if(!(n!==void 0&&!this.#g(e,t,n)))return{segments:e.matchSegments,params:t,meta:e.meta}}#g(e,t,n){let r;try{r=this.#e.parseQueryString(n)}catch{return!1}if(this.#e.strictQueryParams){let n=e.declaredQueryParamsSet;for(let e in r){if(!n.has(e))return!1;$(t,e,r[e])}}else for(let e in r)$(t,e,r[e]);return!0}#_(e,t){return(e.length>1&&e.endsWith(`/`))===t.hasTrailingSlash}#v(e,t){return e.length===1?this.#t.slashChildRoute??this.#t.route:this.#y(this.#t,e,1,t)}#y(e,t,n,r){let i=e,a=t.length,o=this.#s;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){let e=i.paramChild,o=e.fork;if(i.splatChild!==void 0){if(o?.constraint!==void 0&&!this.#x(o.constraint,c))return this.#b(i.splatChild,t,n,r);let l={[o?.skipName!==void 0&&s>=a?o.skipName:e.name]:c},u=this.#y(e.node,t,s+1,l);return u!==void 0&&(!u.hasConstraints||this.#C(u,l))?(Object.assign(r,l),u):this.#b(i.splatChild,t,n,r)}u=e.node,o?.skipName!==void 0&&s>=a?r[o.skipName]=c:r[e.name]=c}else if(i.splatChild)return this.#b(i.splatChild,t,n,r);else return;i=u,n=s+1}return i.slashChildRoute??i.route}#b(e,t,n,r){let i=e.node;if(!i.hasChildren)return r[e.name]=t.slice(n),i.route;let a={},o=this.#y(i,t,n,a);return o&&(!o.hasConstraints||this.#C(o,a))?(Object.assign(r,a),o):(r[e.name]=t.slice(n),i.route)}#x(e,t){try{return e.test(this.#c?this.#c(t):t)}catch{return!1}}#S(e){let t=this.#c;if(!t)return!0;for(let n in e){let r=e[n];if(r.includes(`%`)){if(!x(r))return!1;try{e[n]=t(r)}catch{return!1}}}return!0}#C(e,t){let n=this.#c;for(let[r,i]of e.constraintPatterns){if(!Object.hasOwn(t,r))continue;let e=t[r];if(n&&e.includes(`%`))try{e=n(e)}catch{return!1}if(!i.pattern.test(e))return!1}return!0}#w(e,t){for(let[n,r]of t.constraintPatterns)if(Object.hasOwn(e,n)&&!r.pattern.test(e[n]))return!1;return!0}};export{e as CONSTRAINT_BODY_PATTERN,r as PARAM_NAME_PATTERN,Se as SegmentMatcher,f as buildParamMeta,t as isConstraintBalanced};\n//# sourceMappingURL=index.mjs.map","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)},t=(t,n)=>{if(t===void 0)return n.boolean.decodeUndefined();let r=n.boolean.decodeRaw(t);if(r!==null)return r;let i=e(t),a=n.number.decode(i);return a===null?n.boolean.decodeValue(i):a},n=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}`);return encodeURIComponent(e)},r=(e,t,r,i)=>{let a=`${e}${r}`,o=[];for(let e of t)if(e===null){let e=i.encode(a);e&&o.push(e)}else o.push(`${a}=${n(e)}`);return o.join(`&`)},i={none:{encodeArray:(e,t,n)=>r(e,t,``,n)},brackets:{encodeArray:(e,t,n)=>r(e,t,`[]`,n)},index:{encodeArray:(e,t,r)=>{let i=[];for(let[a,o]of t.entries()){let t=`${e}[${a}]`;if(o===null){let e=r.encode(t);e&&i.push(e)}else i.push(`${t}=${n(o)}`)}return i.join(`&`)},indexed:!0},comma:{encodeArray:(e,t)=>{let r=[];for(let e of t)e!==null&&r.push(n(e));return r.length===0?``:`${e}=${r.join(`,`)}`},decodeValue:e=>e.includes(`,`)?e.split(`,`):null}},a={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:e=>e===`true`?!0:e===`false`?!1:null,decodeValue:e=>e}},o={default:{encode:e=>e},hidden:{encode:()=>``}},s={auto:{decode:e=>{let t=e.length;if(t===0)return null;let n=+(e.codePointAt(0)===45);if(n===t||t-n>1&&e.codePointAt(n)===48&&e.codePointAt(n+1)!==46)return null;let r=!1;for(let i=n;i<t;i++){let a=e.codePointAt(i);if(!(a!==void 0&&a>=48&&a<=57)){if(a===46&&!r&&i!==n&&i!==t-1){r=!0;continue}return null}}let i=Number(e);return Object.is(i,-0)||!Number.isSafeInteger(i)&&!r?null:i}},none:{decode:()=>null}},c=(e,t,n,r)=>({boolean:a[t],null:o[n],number:s[r],array:i[e]}),l={boolean:a.auto,null:o.default,number:s.auto,array:i.none},u={arrayFormat:`none`,booleanFormat:`auto`,nullFormat:`default`,numberFormat:`auto`},d={...u,strategies:l},f=e=>{if(!e||e.arrayFormat===void 0&&e.booleanFormat===void 0&&e.nullFormat===void 0&&e.numberFormat===void 0)return d;let t=e.arrayFormat??u.arrayFormat,n=e.booleanFormat??u.booleanFormat,r=e.nullFormat??u.nullFormat,i=e.numberFormat??u.numberFormat;return{arrayFormat:t,booleanFormat:n,nullFormat:r,numberFormat:i,strategies:c(t,n,r,i)}},p=e=>encodeURIComponent(e),m=(e,t,n)=>{let r=p(e);switch(typeof t){case`string`:case`number`:return`${r}=${p(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,n.strategies.null):`${r}=${p(t)}`;default:return`${r}=${p(t)}`}},h=e=>{let t=e.indexOf(`?`);return t===-1?e:e.slice(t+1)};function g(e,t,n){t===`__proto__`?Object.defineProperty(e,t,{value:n,writable:!0,enumerable:!0,configurable:!0}):e[t]=n}function _(e,t,n,r){if(!Object.hasOwn(e,t)){g(e,t,r?[n]:n);return}let i=e[t];Array.isArray(i)?i.push(n):g(e,t,[i,n])}function v(e,n,r,i,a){return t(i?e.slice(n+1,r):void 0,a)}function y(e,t,n){let r=t+1,i=0,a=!1;for(;r<n;){let t=e.codePointAt(r);if(t===93)return a?i:null;if(t!==void 0&&t>=48&&t<=57){i=i*10+(t-48),a=!0,r++;continue}return null}return null}function b(e,t,n){let{searchPart:r,nameEnd:i,nameSourceEnd:a,eqPos:o,end:s,hasValue:c,decodedName:l}=e,u=y(r,i,a);if(u===null)return!1;let d=v(r,o,s,c,t),f=n.get(l);return f===void 0?n.set(l,[[u,d]]):f.push([u,d]),!0}function x(n,r,i,a,o,s){let c=n.indexOf(`=`,r),l=c!==-1&&c<i,u=l?c:i,d=u,f=!1;for(let e=r;e<u;e++)if(n.codePointAt(e)===91){d=e,f=!0;break}let p=e(n.slice(r,d));if(!(s!==void 0&&f&&b({searchPart:n,nameEnd:d,nameSourceEnd:u,eqPos:c,end:i,hasValue:l,decodedName:p},o,s))){if(!f&&l&&o.array.decodeValue){let e=n.slice(c+1,i),r=o.array.decodeValue(e);if(r){for(let e of r)_(a,p,t(e,o),!0);return}}_(a,p,v(n,c,i,l,o),f)}}const S=(e,t)=>{if(e===``||e===`?`)return{};let n={};return w(e,n,f(t).strategies),n},C=(e,t)=>S(h(e),t);function w(e,t,n){let r=n.array.indexed?new Map:void 0,i=0,a=e.length;for(;i<a;){let o=e.indexOf(`&`,i);o===-1&&(o=a),o>i&&x(e,i,o,t,n,r),i=o+1}if(r!==void 0)for(let[e,n]of r)n.sort((e,t)=>e[0]-t[0]),g(t,e,n.map(e=>e[1]))}const T=(e,t)=>{let n=Object.keys(e);if(n.length===0)return``;let r=f(t),i=[];for(let t of n){let n=e[t];if(n===void 0)continue;let a=m(t,n,r);a&&i.push(a)}return i.join(`&`)};export{u as DEFAULT_QUERY_PARAMS,T as build,C as parse,S as parseQuery};\n//# sourceMappingURL=index.mjs.map","import{PARAM_NAME_PATTERN as e,SegmentMatcher as t,buildParamMeta as n,isConstraintBalanced as r}from\"path-matcher\";import{DEFAULT_QUERY_PARAMS as i,build as a,parseQuery as o}from\"search-params\";function s(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};if(e.children)for(let t of e.children){let e=s(t,a);a.children.push(e)}return a}function c(e,t,n){let r=s({name:e,path:t},null);for(let e of n){let t=s(e,r);r.children.push(t)}return r}const l=Object.freeze(new Map),u=Object.freeze([]);function d(e){return e.parent?.name?`${e.parent.fullName}.${e.name}`:e.name}function f(e){let t=new Map;for(let n of e)t.set(n.name,n);return t}function p(e,t){let n=[],r=[];for(let i of e){let e=m(i,t);n.push(e),e.absolute||r.push(e)}return{childrenMap:f(n),nonAbsoluteChildren:r}}function m(e,t){let r=n(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:``,paramTypeMap:i};if(a.fullName=d(a),e.children.length===0)a.children=l,a.nonAbsoluteChildren=u;else{let{childrenMap:t,nonAbsoluteChildren:n}=p(e.children,a);a.children=t,a.nonAbsoluteChildren=n,Object.freeze(a.nonAbsoluteChildren),Object.freeze(a.children)}return Object.freeze(i),Object.freeze(r.urlParams),Object.freeze(r.queryParams),Object.freeze(r.spatParams),Object.freeze(r),Object.freeze(a),a}function h(e){return m(e,null)}function g(e,t,n){return h(c(e,t,n))}function _(e,t){let n=[],r=t.includes(`.`)?t.split(`.`):[t];e.path!==``&&n.push(e);let i=e;for(let e of r){let t=i.children.get(e);if(!t)return null;n.push(t),i=t}return n}function v(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(),v)),n}function y(e){return Array.from(e.children.values(),v)}function b(e){let n=e?.queryParams;return new t({...e?.caseSensitive!==void 0&&{caseSensitive:e.caseSensitive},...e?.strictTrailingSlash!==void 0&&{strictTrailingSlash:e.strictTrailingSlash},...e?.strictQueryParams!==void 0&&{strictQueryParams:e.strictQueryParams},...e?.urlParamsEncoding!==void 0&&{urlParamsEncoding:e.urlParamsEncoding},parseQueryString:e=>o(e,n),buildQueryString:e=>a(e,n)})}function x(e,t){return TypeError(`[router.${e}] ${t}`)}function S(e,t,n){if(!r(e))throw x(n,`Invalid path for route \"${t}\": unbalanced constraint delimiter ('<' or '>') in \"${e}\"`);if(e.includes(`<>`))throw x(n,`Invalid path for route \"${t}\": empty constraint '<>' in \"${e}\" (a constraint body must be non-empty, e.g. '<[0-9]+>')`)}function C(e,t,n,r){let i=new Set;for(let a of e){if(i.has(a))throw x(n,`Invalid path for route \"${t}\": duplicate parameter name ':${a}' in \"${r}\" (a param name must be unique within a route — the second binding would overwrite the first)`);i.add(a)}}const w=/[<>]/u;function T(e,t,n,r,i){let a=new Set(e);for(let e of t){if(w.test(e))throw x(r,`Invalid path for route \"${n}\": invalid query-param name \"${e}\" in \"${i}\" (a query-param name cannot contain '<' or '>' — a reverse-order modifier typo that leaked a constraint into the query; put the optional '?' after the constraint, ':id<...>?')`);if(a.has(e))throw x(r,`Invalid path for route \"${n}\": \"${e}\" is declared as both a path param and a query param in \"${i}\" — buildPath would emit its value twice (rename one)`)}}const E=RegExp(`[:*](?!${e})`);function D(e){let t=!0,n=!1;for(let r of e)if(r===`/`)t=!0;else if(t)n=r===`:`||r===`*`,t=!1;else if((r===`:`||r===`*`)&&!n)return!0;return!1}function O(e){for(let t=0;t<e.length;t++){if(e[t]!==`>`)continue;let n=e.charAt(t+1);if(n!==``&&n!==`/`&&n!==`?`)return!0}return!1}function k(e){let t=!0,n=!1,r=!1;for(let i of e){if(r){r=i!==`>`;continue}if(i===`<`){r=!0;continue}if(i===`/`){t=!0;continue}if(t&&=(n=i===`:`||i===`*`,!1),!n&&i.codePointAt(0)>=128)return!0}return!1}function A(e){let t=!0,n=!1;for(let r of e)if(r===`/`)t=!0,n=!1;else if(t)n=r===`*`,t=!1;else if(r===`?`&&n)return!0;return!1}function j(e){for(let t=1;t<e.length;t++)if(e[t]===`?`&&e[t-1]!==`>`&&e[t+1]===`/`&&e[t+2]===`*`)return!0;return!1}function M(e,t,r,i){if(typeof e!=`string`){let t;throw t=e===null?`null`:Array.isArray(e)?`array`:typeof e,x(r,`Route path must be a string, got ${t}`)}if(e===``)return;if(/\\s/.test(e))throw x(r,`Invalid path for route \"${t}\": whitespace not allowed in \"${e}\"`);if(!/^([/?~]|[^/]+$)/.test(e))throw x(r,`Route \"${t}\" has invalid path format: \"${e}\". Path should start with '/', '~', '?' or be a relative segment.`);if(e.includes(`//`))throw x(r,`Invalid path for route \"${t}\": double slashes not allowed in \"${e}\"`);S(e,t,r);let{pathPattern:a,urlParams:o,queryParams:s}=n(e);if(C(o,t,r,e),T(o,s,t,r,e),E.test(a))throw x(r,`Invalid path for route \"${t}\": parameter marker (':' or '*') without a name in \"${e}\"`);if(D(a))throw x(r,`Invalid path for route \"${t}\": parameter marker (':' or '*') must begin a segment, but \"${e}\" fuses one to a static prefix (use a boundary marker like \"/a/:b\")`);if(O(a))throw x(r,`Invalid path for route \"${t}\": text fused to a constraint '>' in \"${e}\" (a '<...>' must end its segment or be followed by '/' or an optional '?' — use \"/:id<...>/rest\", not \"/:id<...>rest\")`);if(A(a))throw x(r,`Invalid path for route \"${t}\": optional splat ('*name?') is not supported in \"${e}\" — a splat cannot be optional (use a required splat '*name')`);if(j(a))throw x(r,`Invalid path for route \"${t}\": an unconstrained optional param before a splat is not supported in \"${e}\" — it is ambiguous (every multi-segment value has two readings). Add a constraint (e.g. ':lang<[a-z]+>?') or model it as two routes`);if(k(a))throw x(r,`Invalid path for route \"${t}\": non-ASCII static segment in \"${e}\" — match compares static segments raw and rejects non-ASCII input, so this route would never match. Percent-encode it (e.g. '/caf%C3%A9') or use a param`);let c=i&&i.paramMeta.urlParams.length>0;if(e.startsWith(`~`)&&c)throw x(r,`Absolute path \"${e}\" cannot be used under parent route with URL parameters`)}const N=/^[A-Z_a-z][\\w-]*$/,P=/\\S/,F=1e4;function I(e){if(e===null)return`null`;if(typeof e==`object`){try{let t=e.constructor;if(typeof t==`function`&&t.name!==`Object`)return t.name||`object`}catch{}return`object`}return typeof e}function L(e){for(let t of Object.keys(e)){let n=Object.getOwnPropertyDescriptor(e,t);if(n&&(n.get||n.set))return!0}return!1}function R(e,t){if(!e||typeof e!=`object`)throw TypeError(`[router.${t}] Route must be an object, got ${I(e)}`);let n=Object.getPrototypeOf(e);if(n!==Object.prototype&&n!==null)throw TypeError(`[router.${t}] Route must be a plain object, got ${I(e)}`);if(L(e))throw TypeError(`[router.${t}] Route must not have getters or setters`)}function z(e,t){if(e.encodeParams!==void 0&&typeof e.encodeParams!=`function`)throw TypeError(`[router.${t}] Route \"${String(e.name)}\" encodeParams must be a function`)}function B(e,t){if(e.decodeParams!==void 0&&typeof e.decodeParams!=`function`)throw TypeError(`[router.${t}] Route \"${String(e.name)}\" decodeParams must be a function`)}function V(e,t){if(typeof e.name!=`string`)throw TypeError(`[router.${t}] Route name must be a string, got ${I(e.name)}`);let n=e.name;if(n===``)throw TypeError(`[router.${t}] Route name cannot be empty`);if(!P.test(n))throw TypeError(`[router.${t}] Route name cannot contain only whitespace`);if(n.length>F)throw TypeError(`[router.${t}] Route name exceeds maximum length of ${F} characters`);if(!n.startsWith(`@@`)){if(n.includes(`.`))throw TypeError(`[router.${t}] Route name \"${n}\" cannot contain dots. Use children array or { parent } option in addRoute() instead.`);if(!N.test(n))throw TypeError(`[router.${t}] Invalid route name \"${n}\". Name must start with a letter or underscore, followed by letters, numbers, underscores, or hyphens.`)}}function H(e,t){if(!t.includes(`.`))return e.children.get(t);let n=e;for(let e of t.split(`.`))if(n=n.children.get(e),!n)return;return n}function U(e,t,n){if(H(e,t))throw Error(`[router.${n}] Route \"${t}\" already exists`)}function W(e,t,n){if(e.has(t))throw Error(`[router.${n}] Duplicate route \"${t}\" in batch`);e.add(t)}function G(e,t,n,r){let i=t===``?e:H(e,t);if(i){for(let e of i.children.values())if(e.path===n)throw Error(`[router.${r}] Path \"${n}\" is already defined`)}}function K(e,t,n,r){let i=e.get(t);if(i?.has(n))throw Error(`[router.${r}] Path \"${n}\" is already defined`);i?i.add(n):e.set(t,new Set([n]))}function q(e,t,n,r=``,i,a){R(e,t);let o=e;V(o,t),M(o.path,o.name,t,n),z(o,t),B(o,t);let s=o.name,c=r?`${r}.${s}`:s;n&&c&&U(n,c,t),i&&W(i,c,t);let l=o.path,u=r;if(n&&G(n,u,l,t),a&&K(a,u,l,t),o.children!==void 0){if(!Array.isArray(o.children))throw TypeError(`[router.${t}] Route \"${s}\" children must be an array, got ${I(o.children)}`);for(let e of o.children)q(e,t,n,c,i,a)}}export{i as DEFAULT_QUERY_PARAMS,b as createMatcher,g as createRouteTree,_ as getSegmentsByName,v as nodeToDefinition,y as routeTreeToDefinitions,q as validateRoute};\n//# sourceMappingURL=index.mjs.map"],"mappings":"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"}
|
|
@@ -304,9 +304,10 @@ interface RouteTree {
|
|
|
304
304
|
* Maps param name → "url" | "query".
|
|
305
305
|
*/
|
|
306
306
|
readonly paramTypeMap: Readonly<Record<string, "url" | "query">>;
|
|
307
|
-
}
|
|
307
|
+
} //#endregion
|
|
308
|
+
//#region src/operations/types.d.ts
|
|
308
309
|
/**
|
|
309
|
-
*
|
|
310
|
+
* Indicates the source of a parameter (URL path or query string).
|
|
310
311
|
*/
|
|
311
312
|
//#endregion
|
|
312
313
|
//#region src/createMatcher.d.ts
|
|
@@ -350,5 +351,40 @@ type Matcher = SegmentMatcher;
|
|
|
350
351
|
* ```
|
|
351
352
|
*/
|
|
352
353
|
//#endregion
|
|
353
|
-
|
|
354
|
-
|
|
354
|
+
//#region src/validation/route-batch.d.ts
|
|
355
|
+
/**
|
|
356
|
+
* Validates route structure for add operations.
|
|
357
|
+
*
|
|
358
|
+
* Performs comprehensive validation including:
|
|
359
|
+
* - Type check (must be object)
|
|
360
|
+
* - Name validation
|
|
361
|
+
* - Path validation
|
|
362
|
+
* - Duplicate name detection (in tree and batch)
|
|
363
|
+
* - Duplicate path detection (in tree and batch)
|
|
364
|
+
* - Recursive children validation
|
|
365
|
+
*
|
|
366
|
+
* @param route - Route to validate
|
|
367
|
+
* @param methodName - Calling method for error context
|
|
368
|
+
* @param rootNode - Optional root node for duplicate checking
|
|
369
|
+
* @param parentName - Parent route name for building full path (used in recursion)
|
|
370
|
+
* @param seenNames - Set of names already seen in this batch
|
|
371
|
+
* @param seenPathsByParent - Map of paths by parent for path duplicate detection
|
|
372
|
+
* @throws {TypeError} If route structure is invalid
|
|
373
|
+
* @throws {Error} If route already exists (duplicate)
|
|
374
|
+
* @throws {Error} If path already defined (duplicate)
|
|
375
|
+
*
|
|
376
|
+
* @example
|
|
377
|
+
* ```typescript
|
|
378
|
+
* const seenNames = new Set<string>();
|
|
379
|
+
* const seenPaths = new Map<string, Set<string>>();
|
|
380
|
+
*
|
|
381
|
+
* // Validate routes before adding
|
|
382
|
+
* for (const route of routes) {
|
|
383
|
+
* validateRoute(route, "add", rootNode, "", seenNames, seenPaths);
|
|
384
|
+
* }
|
|
385
|
+
* ```
|
|
386
|
+
*/
|
|
387
|
+
declare function validateRoute(route: unknown, methodName: string, rootNode?: RouteTree, parentName?: string, seenNames?: Set<string>, seenPathsByParent?: Map<string, Set<string>>): asserts route is RouteDefinition; //#endregion
|
|
388
|
+
//#endregion
|
|
389
|
+
export { validateRoute as a, RouteTree as i, Matcher as n, RouteDefinition as r, CreateMatcherOptions as t };
|
|
390
|
+
//# sourceMappingURL=index-DlHpdGTA.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-DlHpdGTA.d.mts","names":["pattern","RegExp","constraint","urlParams","queryParams","spatParams","paramTypeMap","Readonly","Record","constraintPatterns","ReadonlyMap","ConstraintPattern","pathPattern","name","path","fullName","absolute","children","MatcherInputNode","nonAbsoluteChildren","paramMeta","ParamMeta","parent","CompiledRoute","depth","matchSegments","meta","declaredQueryParams","declaredQueryParamsSet","ReadonlySet","hasTrailingSlash","hasConstraints","buildStaticParts","buildParamSlots","BuildParamSlot","buildParamNamesSet","cachedResult","MatchResult","paramName","encoder","value","isOptional","queryParamsMode","trailingSlash","skipName","staticChildren","SegmentNode","hasChildren","paramChild","node","fork","ForkMeta","splatChild","route","routeIsStrong","slashChildRoute","segments","params","caseSensitive","strictTrailingSlash","strictQueryParams","urlParamsEncoding","URLParamsEncodingType","parseQueryString","queryString","buildQueryString","private","options","ResolvedMatcherOptions","constructor","SegmentMatcherOptions","registerTree","match","buildPath","BuildPathOptions","getSegmentsByName","getMetaByName","hasRoute","arrayFormat","ArrayFormat","booleanFormat","BooleanFormat","nullFormat","NullFormat","numberFormat","NumberFormat","QueryParamPrimitive","Record","QueryParamValue","search","Options","opts","path","params","FinalOptions","key","name","path","children","RouteDefinition","absolute","ReadonlyMap","RouteTree","paramMeta","ParamMeta","parent","nonAbsoluteChildren","fullName","paramTypeMap","Readonly","Record","ParamSource","ParamTypeMap","P","RouteParams","segments","params","meta","RouteTreeStateMeta","routes","tree","routeName","node","Options","caseSensitive","strictTrailingSlash","strictQueryParams","urlParamsEncoding","queryParams","QueryParamsConfig","SegmentMatcher","CreateMatcherOptions","options","Matcher","route","methodName","rootNode","parentName","Set","seenNames","Map","seenPathsByParent"],"sources":["../../../path-matcher/dist/esm/index.d.mts","../../../search-params/dist/esm/index.d.mts","../../../route-tree/dist/esm/index.d.mts"],"mappings":"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"}
|
package/dist/esm/index.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { i as RouteTree } from "./index-
|
|
1
|
+
import { i as RouteTree } from "./index-DlHpdGTA.mjs";
|
|
2
2
|
import { a as PluginFactory, o as Route, r as GuardFnFactory, s as RouteConfigUpdate, t as Router } from "./Router-Bm2qafJA.mjs";
|
|
3
3
|
import { n as RouterValidator, t as RouterError } from "./RouterError-BEqOMMFO.mjs";
|
|
4
4
|
import { Config, DefaultDependencies, DefaultDependencies as DefaultDependencies$1, ErrorCodeKeys, ErrorCodeToValueMap, ErrorCodeValues, EventToNameMap, GuardFn, Listener, NavigationOptions, Navigator, Navigator as Navigator$1, Options, Options as Options$1, Params, Plugin, Router as Router$1, SimpleState, State, SubscribeFn, SubscribeState, Subscription, TreeChangedAdd, TreeChangedClear, TreeChangedEvent, TreeChangedRemove, TreeChangedReplace, TreeChangedUpdate, TreeStructuralPatch, Unsubscribe } from "@real-router/types";
|
package/dist/esm/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{S as e,b as t,m as n,n as r,t as i,x as a,y as o}from"./Router-BA0Wn8jU.mjs";const s=(e=[],t={},n={})=>new i(e,t,n),c=new WeakMap,l=e=>{let t=c.get(e);return t||(t=Object.freeze({navigate:e.navigate,getState:e.getState,isActiveRoute:e.isActiveRoute,canNavigateTo:e.canNavigateTo,subscribe:e.subscribe,subscribeLeave:e.subscribeLeave,isLeaveApproved:e.isLeaveApproved}),c.set(e,t)),t};export{i as Router,r as RouterError,o as UNKNOWN_ROUTE,t as constants,s as createRouter,a as errorCodes,e as events,l as getNavigator,n as resolveForwardChain};
|
|
2
2
|
//# sourceMappingURL=index.mjs.map
|
package/dist/esm/utils.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{l as e}from"./esm-CQSKkkua.mjs";import{r as t,t as n}from"./cloneRouter-Dk10jp03.mjs";function r(e){return`signal`in e&&typeof e.signal==`object`&&e.signal!==void 0&&typeof e.signal.aborted==`boolean`}function i(e,t,i){let a,o,s;if(r(e))s=e.signal;else{let t=new AbortController,n=()=>{t.abort()};s=t.signal,o=()=>{e.on(`close`,n)},a=()=>{e.removeListener?.(`close`,n)}}let c=n(t,{...i,abortSignal:s});o?.();let l=!1,u=()=>l?Promise.resolve():(l=!0,a?.(),c.dispose(),Promise.resolve());return{router:c,signal:s,dispose:u,[Symbol.asyncDispose]:u}}function a(e,t){for(let n of e.children.values())n.children.size===0?t.push(n.fullName):a(n,t)}function o(e){let t=[];return a(e,t),t}async function s(e,n){let r=o(t(e).getTree()),i=[];for(let t of r){let r=n?.[t];if(r){let n=await r();for(let r of n)i.push(e.buildPath(t,r))}else i.push(e.buildPath(t,{}))}return i}async function c(t,n,r){let i=r?.deserialize??JSON.parse,a=typeof n==`string`?i(n):n,o=e(t),s=o.hydrationState;o.hydrationState=a;try{return await t.start(a.path)}finally{o.hydrationState=s}}function l(e,t){return((t?.serialize??JSON.stringify)(e)??`null`).replaceAll(`<`,String.raw`\u003c`).replaceAll(`>`,String.raw`\u003e`).replaceAll(`&`,String.raw`\u0026`)}function u(e,t){let n=t?.excludeContext,r=e.context;if(n?.length){let t={},i=e.context;for(let[e,r]of Object.entries(i))n.includes(e)||(t[e]=r);r=t}let i={name:e.name,params:e.params,path:e.path,context:r};return t?.serialize?l(i,{serialize:t.serialize}):l(i)}export{i as createRequestScope,s as getStaticPaths,c as hydrateRouter,u as serializeRouterState,l as serializeState};
|
|
2
2
|
//# sourceMappingURL=utils.mjs.map
|
package/dist/esm/utils.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.mjs","names":[],"sources":["../../src/utils/createRequestScope.ts","../../src/utils/getStaticPaths.ts","../../src/utils/hydrateRouter.ts","../../src/utils/serializeState.ts","../../src/utils/serializeRouterState.ts"],"sourcesContent":["import { cloneRouter } from \"../api/cloneRouter\";\n\nimport type { Router as RouterClass } from \"../Router\";\nimport type { DefaultDependencies, Router } from \"@real-router/types\";\n\n/**\n * Subset of Node's `http.IncomingMessage` that `createRequestScope` relies on:\n * a `\"close\"` event indicating that the client disconnected (or the response\n * was fully sent) and the standard `removeListener` cleanup hook.\n */\nexport interface IncomingMessageLike {\n on: (event: \"close\", listener: () => void) => unknown;\n removeListener?: (event: \"close\", listener: () => void) => unknown;\n}\n\n/**\n * Web `Request`-shaped object — anything carrying an `AbortSignal`. Web\n * runtimes (Bun, Cloudflare Workers, Vite RSC) surface client-disconnect via\n * `request.signal` directly, so no listener attachment is needed.\n */\nexport interface RequestLike {\n signal: AbortSignal;\n}\n\nexport type RequestScopeSource = IncomingMessageLike | RequestLike;\n\nexport interface RequestScope<\n Dependencies extends DefaultDependencies = DefaultDependencies,\n> extends AsyncDisposable {\n /**\n * Per-request router clone. Carries `abortSignal` injected into its\n * dependencies — loaders can `getDep(\"abortSignal\")` and pass it to fetch /\n * `withTimeout` for cooperative cancellation when the client disconnects.\n */\n readonly router: RouterClass<Dependencies>;\n\n /**\n * Aborts when the request closes (Node `IncomingMessage`'s `\"close\"` event)\n * or when the upstream Web `Request.signal` aborts.\n */\n readonly signal: AbortSignal;\n\n /**\n * Detach the close listener (if attached to a Node `IncomingMessage`) and\n * dispose the cloned router. Idempotent — safe to call multiple times or in\n * combination with `Symbol.asyncDispose`.\n */\n dispose: () => Promise<void>;\n}\n\nfunction isRequestLike(request: RequestScopeSource): request is RequestLike {\n return (\n \"signal\" in request &&\n typeof (request as Partial<RequestLike>).signal === \"object\" &&\n (request as Partial<RequestLike>).signal !== undefined &&\n typeof request.signal.aborted === \"boolean\"\n );\n}\n\n/**\n * Build a per-request router scope: clones `base`, attaches an `AbortSignal`\n * tied to the request's lifetime, and exposes `dispose()` (plus\n * `Symbol.asyncDispose` for `await using` declarations).\n *\n * Replaces the four-step boilerplate that every server entry repeats:\n *\n * 1. `new AbortController()` per request\n * 2. `req.on(\"close\", () => controller.abort())`\n * 3. `cloneRouter(base, { ...deps, abortSignal: signal })`\n * 4. `try { ... } finally { router.dispose() }`\n *\n * The signal is injected into the router clone under `abortSignal` so existing\n * loaders that read `getDep(\"abortSignal\")` keep working without changes. If\n * `deps` already carries an `abortSignal`, the request-tied signal **wins** (it\n * is spread last) — a caller-supplied `abortSignal` is intentionally overridden,\n * since the scope's purpose is to own the request-lifecycle signal.\n *\n * ## `await using` compatibility\n *\n * The scope implements `Symbol.asyncDispose`, so `await using scope = …` is\n * supported on runtimes that ship the well-known `Symbol.asyncDispose`:\n *\n * - **Node.js 24+** (full support; partial in 20.4–20.17 only for `fs`/`stream`)\n * - **Bun 1.0.23+**, **Deno 1.37+**\n * - **Chrome / Edge 127+**, **Firefox 141+**\n * - **Safari**: not yet supported (irrelevant in practice — this helper is\n * server-side only and never reaches the browser)\n *\n * On Node.js 22 LTS the well-known symbol is unavailable, so `await using`\n * fails. **The bundled SSR examples therefore use the explicit\n * `try/finally` + `await scope.dispose()` form**, which works on every\n * runtime. Use `await using` only when you control the deployment target and\n * know it ships the symbol.\n *\n * @example\n * ```typescript\n * // Explicit dispose — works on Node 18+, all browsers, every CI image\n * export async function render(url: string, req: IncomingMessage) {\n * const scope = createRequestScope(req, baseRouter, { currentUser });\n * try {\n * scope.router.usePlugin(ssrDataPluginFactory(loaders));\n * return await renderShell(scope.router, url);\n * } finally {\n * await scope.dispose();\n * }\n * }\n *\n * // `await using` — Node 24+, Bun, Deno, modern browsers\n * export async function render(url: string, req: IncomingMessage) {\n * await using scope = createRequestScope(req, baseRouter, { currentUser });\n * scope.router.usePlugin(ssrDataPluginFactory(loaders));\n * return await renderShell(scope.router, url);\n * }\n *\n * // Web runtime (signal already on the request)\n * async function handler(request: Request) {\n * const scope = createRequestScope(request, baseRouter, { db });\n * try {\n * scope.router.usePlugin(rscServerPluginFactory(loaders));\n * return await render(scope.router, request.url);\n * } finally {\n * await scope.dispose();\n * }\n * }\n * ```\n */\nexport function createRequestScope<\n Dependencies extends DefaultDependencies = DefaultDependencies,\n>(\n request: RequestScopeSource,\n base: Router<Dependencies>,\n deps?: Partial<Dependencies>,\n): RequestScope<Dependencies> {\n let detach: (() => void) | undefined;\n let attach: (() => void) | undefined;\n let signal: AbortSignal;\n\n if (isRequestLike(request)) {\n signal = request.signal;\n } else {\n const controller = new AbortController();\n const onClose = (): void => {\n controller.abort();\n };\n\n signal = controller.signal;\n // Clone-before-attach (#969): defer attaching the \"close\" listener until\n // after cloneRouter succeeds. cloneRouter is synchronous, so no \"close\"\n // macrotask can fire in the gap; and if it throws (e.g. ROUTER_DISPOSED on\n // an already-disposed base) the helper exits without returning a scope\n // handle — so a listener attached here would strand on the request with no\n // way to detach it.\n attach = () => {\n request.on(\"close\", onClose);\n };\n detach = () => {\n request.removeListener?.(\"close\", onClose);\n };\n }\n\n const router = cloneRouter(base, {\n ...deps,\n abortSignal: signal,\n } as Dependencies);\n\n // The clone exists — now it is safe to attach the close listener (Node path\n // only; `attach` is undefined for the Web path).\n attach?.();\n\n let disposed = false;\n\n const dispose = (): Promise<void> => {\n if (disposed) {\n return Promise.resolve();\n }\n\n disposed = true;\n detach?.();\n router.dispose();\n\n return Promise.resolve();\n };\n\n return {\n router,\n signal,\n dispose,\n // eslint-disable-next-line unicorn/no-nonstandard-builtin-properties -- Symbol.asyncDispose is a standard ES2023 well-known symbol (`await using`)\n [Symbol.asyncDispose]: dispose,\n };\n}\n","import { getPluginApi } from \"../api/getPluginApi\";\n\nimport type { DefaultDependencies, Router } from \"@real-router/types\";\nimport type { RouteTree } from \"route-tree\";\n\nexport type StaticPathEntries = Record<\n string,\n () => Promise<Record<string, string>[]>\n>;\n\nfunction collectLeafRouteNames(node: RouteTree, result: string[]): void {\n for (const child of node.children.values()) {\n if (child.children.size === 0) {\n result.push(child.fullName);\n } else {\n // Accumulate into the shared array rather than\n // `result.push(...getLeafRouteNames(child))`: the spread passes one\n // argument per leaf, and V8 caps spread/apply arguments (~124k on Node 24),\n // so a section with that many static leaf routes threw\n // `RangeError: Maximum call stack size exceeded`. Accumulating also drops\n // the per-subtree intermediate-array allocation.\n collectLeafRouteNames(child, result);\n }\n }\n}\n\nfunction getLeafRouteNames(node: RouteTree): string[] {\n const result: string[] = [];\n\n collectLeafRouteNames(node, result);\n\n return result;\n}\n\nexport async function getStaticPaths<\n Dependencies extends DefaultDependencies = DefaultDependencies,\n>(\n router: Router<Dependencies>,\n entries?: StaticPathEntries,\n): Promise<string[]> {\n const tree = getPluginApi(router).getTree();\n const leafRoutes = getLeafRouteNames(tree);\n const paths: string[] = [];\n\n for (const routeName of leafRoutes) {\n const entryFn = entries?.[routeName];\n\n if (entryFn) {\n const paramSets = await entryFn();\n\n for (const params of paramSets) {\n paths.push(router.buildPath(routeName, params));\n }\n } else {\n paths.push(router.buildPath(routeName, {}));\n }\n }\n\n return paths;\n}\n","import { getInternals } from \"../internals\";\n\nimport type { SerializedRouterState } from \"./serializeRouterState\";\nimport type { Router, State } from \"@real-router/types\";\n\n/**\n * Custom deserializer signature for {@link hydrateRouter} (#606). Compatible\n * with `JSON.parse` (default), `devalue.parse`, `superjson.parse`, or any\n * user-supplied function.\n */\nexport type Deserialize = (json: string) => unknown;\n\nexport interface HydrateRouterOptions {\n /**\n * Custom deserializer (e.g., `devalue.parse` / `superjson.parse`) for\n * matching the `serialize` passed to {@link serializeRouterState}. Defaults\n * to `JSON.parse`. Ignored when `source` is already an object.\n *\n * @default JSON.parse\n *\n * @example\n * ```typescript\n * import * as devalue from \"devalue\";\n * await hydrateRouter(router, ssrJson, { deserialize: devalue.parse });\n * ```\n */\n deserialize?: Deserialize;\n}\n\n/**\n * Hydrate a fresh router from server-serialized State (#563, #596).\n *\n * Accepts either a JSON string (parsed via `JSON.parse` by default, or\n * `options.deserialize` when provided) or a State-shaped object. Extracts\n * `state.path` and delegates to `router.start(state.path)` — the canonical\n * URL is the source of truth for the router on hydration.\n *\n * The full parsed state (incl. `state.context.<namespace>` payloads) is\n * deposited into a one-shot scratchpad on `RouterInternals.hydrationState`\n * before `start()` is invoked and cleared in the matching `finally`. SSR\n * loader plugins (`@real-router/ssr-data-plugin`,\n * `@real-router/rsc-server-plugin`) read this scratchpad to skip their loader\n * call when the server-resolved namespace value is already present — avoiding\n * the post-hydration loader re-run on first paint.\n *\n * Single-shot semantics: the scratchpad is consumed during the first `start()`\n * triggered by `hydrateRouter` regardless of route mismatch; subsequent\n * `start()` calls run loaders normally.\n *\n * @example\n * ```typescript\n * // Client\n * const router = createAppRouter();\n * router.usePlugin(browserPluginFactory());\n * await hydrateRouter(router, window.__SSR_STATE__);\n * ```\n *\n * @example\n * ```typescript\n * // With non-JSON types (Date / Map / Set / RegExp / BigInt) via devalue (#606)\n * import * as devalue from \"devalue\";\n *\n * await hydrateRouter(router, window.__SSR_STATE__, {\n * deserialize: devalue.parse,\n * });\n * ```\n */\nexport async function hydrateRouter(\n router: Router,\n source: string | { path: string },\n options?: HydrateRouterOptions,\n): Promise<State> {\n const deserialize: Deserialize = options?.deserialize ?? JSON.parse;\n const parsed =\n typeof source === \"string\"\n ? (deserialize(source) as SerializedRouterState)\n : (source as SerializedRouterState);\n\n const ctx = getInternals(router);\n const previous = ctx.hydrationState;\n\n ctx.hydrationState = parsed;\n\n try {\n return await router.start(parsed.path);\n } finally {\n ctx.hydrationState = previous;\n }\n}\n","/**\n * Custom serializer signature for {@link serializeState} (#606).\n *\n * Compatible with `JSON.stringify` (default) as well as `devalue.stringify`,\n * `superjson.stringify`, or any user-supplied function that returns a JSON\n * string. The output is run through XSS-safe character escapes regardless\n * of which serializer produced it.\n */\nexport type Serialize = (data: unknown) => string;\n\nexport interface SerializeStateOptions {\n /**\n * Custom serializer (e.g., `devalue.stringify` / `superjson.stringify`) to\n * support non-JSON types (Date / Map / Set / RegExp / BigInt). Defaults to\n * `JSON.stringify`. Output is still XSS-escaped.\n *\n * @default JSON.stringify\n */\n serialize?: Serialize;\n}\n\n/**\n * XSS-safe JSON serialization for embedding data in HTML `<script>` tags.\n *\n * Escapes `<`, `>`, and `&` to their Unicode equivalents to prevent\n * injection via `</script>` or HTML entities inside inline scripts.\n *\n * Pass `options.serialize` to use a custom serializer such as `devalue` or\n * `superjson` for non-JSON types (Date/Map/Set/RegExp/BigInt). The serializer\n * must return a string; XSS-escape is applied to its output.\n *\n * @example\n * ```typescript\n * const json = serializeState({ name: \"home\", path: \"/\" });\n * const html = `<script>window.__STATE__=${json}</script>`;\n * ```\n *\n * @example\n * ```typescript\n * import * as devalue from \"devalue\";\n *\n * const json = serializeState(\n * { date: new Date(), tags: new Set([\"a\", \"b\"]) },\n * { serialize: devalue.stringify },\n * );\n * ```\n */\nexport function serializeState(\n data: unknown,\n options?: SerializeStateOptions,\n): string {\n const serialize = options?.serialize ?? JSON.stringify;\n // JSON.stringify returns undefined for top-level `undefined`, Symbol,\n // function, and other non-serializable values (lib.d.ts types it as\n // `string` but the runtime can return undefined). A custom serializer\n // that returns undefined for unsupported input is normalized the same way.\n const serialized = (serialize(data) as string | undefined) ?? \"null\";\n\n return serialized\n .replaceAll(\"<\", String.raw`\\u003c`)\n .replaceAll(\">\", String.raw`\\u003e`)\n .replaceAll(\"&\", String.raw`\\u0026`);\n}\n","import { serializeState } from \"./serializeState\";\n\nimport type { Serialize } from \"./serializeState\";\nimport type { Params, State } from \"@real-router/types\";\n\n/**\n * Parsed shape produced by {@link serializeRouterState} (after `JSON.parse`).\n *\n * Identical to {@link State} minus `transition` (per-navigation `TransitionMeta`\n * is meaningless after hydration; the client builds its own on commit). Used as\n * the input shape for {@link hydrateRouter} and as the type of the one-shot\n * hydration scratchpad consumed by SSR loader plugins.\n */\nexport type SerializedRouterState<P extends Params = Params> = Omit<\n State<P>,\n \"transition\"\n>;\n\nexport interface SerializeRouterStateOptions {\n /**\n * Plugin context namespaces to strip from the serialized output.\n * Use when a plugin populates `state.context.<ns>` with non-JSON-serializable\n * values (e.g., RSC payload: ReactNode trees containing functions/symbols).\n *\n * @default []\n */\n excludeContext?: readonly string[];\n\n /**\n * Custom serializer (e.g., `devalue.stringify` / `superjson.stringify`) to\n * support non-JSON types in `state.params` and `state.context.<ns>` payloads\n * (Date / Map / Set / RegExp / BigInt). Defaults to `JSON.stringify`.\n *\n * Pair with the matching `deserialize` on `hydrateRouter` to round-trip the\n * extended types on the client.\n *\n * @default JSON.stringify\n *\n * @example\n * ```typescript\n * import * as devalue from \"devalue\";\n *\n * const json = serializeRouterState(state, { serialize: devalue.stringify });\n * ```\n */\n serialize?: Serialize;\n}\n\n/**\n * XSS-safe JSON serialization of router State for SSR → client transport (#563).\n *\n * Strips `state.transition` (per-navigation `TransitionMeta` — meaningless after\n * hydration; the client's hydration commit produces its own `transition`).\n * Keeps `name`, `params`, `path`, and `context` (plugin context namespaces are\n * preserved as-is — server's `state.context.data` from `ssr-data-plugin` and\n * any other plugin claims travel to the client untouched).\n *\n * Pass `options.excludeContext` to strip specific namespaces from the output —\n * required for plugins that publish non-JSON-serializable values (e.g., RSC\n * `ReactNode` trees from `@real-router/rsc-server-plugin`).\n *\n * @example\n * ```typescript\n * // Server\n * const state = await router.start(req.url);\n * const html = `<script>window.__SSR_STATE__=${serializeRouterState(state)}</script>`;\n *\n * // Client\n * await hydrateRouter(router, window.__SSR_STATE__);\n * ```\n *\n * @example\n * ```typescript\n * // With RSC plugin: strip the \"rsc\" namespace before transport\n * const state = await router.start(url);\n * const json = serializeRouterState(state, { excludeContext: [\"rsc\"] });\n * ```\n *\n * @example\n * ```typescript\n * // Non-JSON types (Date / Map / Set / RegExp / BigInt) via devalue (#606)\n * import * as devalue from \"devalue\";\n *\n * const json = serializeRouterState(state, { serialize: devalue.stringify });\n * // On the client:\n * await hydrateRouter(router, json, { deserialize: devalue.parse });\n * ```\n */\nexport function serializeRouterState(\n state: State,\n options?: SerializeRouterStateOptions,\n): string {\n const exclude = options?.excludeContext;\n\n let context = state.context;\n\n if (exclude?.length) {\n const filtered: Record<string, unknown> = {};\n const source = state.context;\n\n for (const [key, value] of Object.entries(source)) {\n if (!exclude.includes(key)) {\n filtered[key] = value;\n }\n }\n\n context = filtered;\n }\n\n const payload = {\n name: state.name,\n params: state.params,\n path: state.path,\n context,\n };\n\n return options?.serialize\n ? serializeState(payload, { serialize: options.serialize })\n : serializeState(payload);\n}\n"],"mappings":"mGAkDA,SAAS,EAAc,EAAqD,CAC1E,MACE,WAAY,GACZ,OAAQ,EAAiC,QAAW,UACnD,EAAiC,SAAW,IAAA,IAC7C,OAAO,EAAQ,OAAO,SAAY,SAEtC,CAqEA,SAAgB,EAGd,EACA,EACA,EAC4B,CAC5B,IAAI,EACA,EACA,EAEJ,GAAI,EAAc,CAAO,EACvB,EAAS,EAAQ,WACZ,CACL,IAAM,EAAa,IAAI,gBACjB,MAAsB,CAC1B,EAAW,MAAM,CACnB,EAEA,EAAS,EAAW,OAOpB,MAAe,CACb,EAAQ,GAAG,QAAS,CAAO,CAC7B,EACA,MAAe,CACb,EAAQ,iBAAiB,QAAS,CAAO,CAC3C,CACF,CAEA,IAAM,EAAS,EAAY,EAAM,CAC/B,GAAG,EACH,YAAa,CACf,CAAiB,EAIjB,IAAS,EAET,IAAI,EAAW,GAET,MACA,EACK,QAAQ,QAAQ,GAGzB,EAAW,GACX,IAAS,EACT,EAAO,QAAQ,EAER,QAAQ,QAAQ,GAGzB,MAAO,CACL,SACA,SACA,WAEC,OAAO,cAAe,CACzB,CACF,CCpLA,SAAS,EAAsB,EAAiB,EAAwB,CACtE,IAAK,IAAM,KAAS,EAAK,SAAS,OAAO,EACnC,EAAM,SAAS,OAAS,EAC1B,EAAO,KAAK,EAAM,QAAQ,EAQ1B,EAAsB,EAAO,CAAM,CAGzC,CAEA,SAAS,EAAkB,EAA2B,CACpD,IAAM,EAAmB,CAAC,EAI1B,OAFA,EAAsB,EAAM,CAAM,EAE3B,CACT,CAEA,eAAsB,EAGpB,EACA,EACmB,CAEnB,IAAM,EAAa,EADN,EAAa,CAAM,CAAC,CAAC,QACM,CAAC,EACnC,EAAkB,CAAC,EAEzB,IAAK,IAAM,KAAa,EAAY,CAClC,IAAM,EAAU,IAAU,GAE1B,GAAI,EAAS,CACX,IAAM,EAAY,MAAM,EAAQ,EAEhC,IAAK,IAAM,KAAU,EACnB,EAAM,KAAK,EAAO,UAAU,EAAW,CAAM,CAAC,CAElD,MACE,EAAM,KAAK,EAAO,UAAU,EAAW,CAAC,CAAC,CAAC,CAE9C,CAEA,OAAO,CACT,CCQA,eAAsB,EACpB,EACA,EACA,EACgB,CAChB,IAAM,EAA2B,GAAS,aAAe,KAAK,MACxD,EACJ,OAAO,GAAW,SACb,EAAY,CAAM,EAClB,EAED,EAAM,EAAa,CAAM,EACzB,EAAW,EAAI,eAErB,EAAI,eAAiB,EAErB,GAAI,CACF,OAAO,MAAM,EAAO,MAAM,EAAO,IAAI,CACvC,QAAU,CACR,EAAI,eAAiB,CACvB,CACF,CCzCA,SAAgB,EACd,EACA,EACQ,CAQR,QAPkB,GAAS,WAAa,KAAK,UAAA,CAKf,CAAI,GAA4B,OAAA,CAG3D,WAAW,IAAK,OAAO,GAAG,QAAQ,CAAC,CACnC,WAAW,IAAK,OAAO,GAAG,QAAQ,CAAC,CACnC,WAAW,IAAK,OAAO,GAAG,QAAQ,CACvC,CC0BA,SAAgB,EACd,EACA,EACQ,CACR,IAAM,EAAU,GAAS,eAErB,EAAU,EAAM,QAEpB,GAAI,GAAS,OAAQ,CACnB,IAAM,EAAoC,CAAC,EACrC,EAAS,EAAM,QAErB,IAAK,GAAM,CAAC,EAAK,KAAU,OAAO,QAAQ,CAAM,EACzC,EAAQ,SAAS,CAAG,IACvB,EAAS,GAAO,GAIpB,EAAU,CACZ,CAEA,IAAM,EAAU,CACd,KAAM,EAAM,KACZ,OAAQ,EAAM,OACd,KAAM,EAAM,KACZ,SACF,EAEA,OAAO,GAAS,UACZ,EAAe,EAAS,CAAE,UAAW,EAAQ,SAAU,CAAC,EACxD,EAAe,CAAO,CAC5B"}
|
|
1
|
+
{"version":3,"file":"utils.mjs","names":[],"sources":["../../src/utils/createRequestScope.ts","../../src/utils/getStaticPaths.ts","../../src/utils/hydrateRouter.ts","../../src/utils/serializeState.ts","../../src/utils/serializeRouterState.ts"],"sourcesContent":["import { cloneRouter } from \"../api/cloneRouter\";\n\nimport type { Router as RouterClass } from \"../Router\";\nimport type { DefaultDependencies, Router } from \"@real-router/types\";\n\n/**\n * Subset of Node's `http.IncomingMessage` that `createRequestScope` relies on:\n * a `\"close\"` event indicating that the client disconnected (or the response\n * was fully sent) and the standard `removeListener` cleanup hook.\n */\nexport interface IncomingMessageLike {\n on: (event: \"close\", listener: () => void) => unknown;\n removeListener?: (event: \"close\", listener: () => void) => unknown;\n}\n\n/**\n * Web `Request`-shaped object — anything carrying an `AbortSignal`. Web\n * runtimes (Bun, Cloudflare Workers, Vite RSC) surface client-disconnect via\n * `request.signal` directly, so no listener attachment is needed.\n */\nexport interface RequestLike {\n signal: AbortSignal;\n}\n\nexport type RequestScopeSource = IncomingMessageLike | RequestLike;\n\nexport interface RequestScope<\n Dependencies extends DefaultDependencies = DefaultDependencies,\n> extends AsyncDisposable {\n /**\n * Per-request router clone. Carries `abortSignal` injected into its\n * dependencies — loaders can `getDep(\"abortSignal\")` and pass it to fetch /\n * `withTimeout` for cooperative cancellation when the client disconnects.\n */\n readonly router: RouterClass<Dependencies>;\n\n /**\n * Aborts when the request closes (Node `IncomingMessage`'s `\"close\"` event)\n * or when the upstream Web `Request.signal` aborts.\n */\n readonly signal: AbortSignal;\n\n /**\n * Detach the close listener (if attached to a Node `IncomingMessage`) and\n * dispose the cloned router. Idempotent — safe to call multiple times or in\n * combination with `Symbol.asyncDispose`.\n */\n dispose: () => Promise<void>;\n}\n\nfunction isRequestLike(request: RequestScopeSource): request is RequestLike {\n return (\n \"signal\" in request &&\n typeof (request as Partial<RequestLike>).signal === \"object\" &&\n (request as Partial<RequestLike>).signal !== undefined &&\n typeof request.signal.aborted === \"boolean\"\n );\n}\n\n/**\n * Build a per-request router scope: clones `base`, attaches an `AbortSignal`\n * tied to the request's lifetime, and exposes `dispose()` (plus\n * `Symbol.asyncDispose` for `await using` declarations).\n *\n * Replaces the four-step boilerplate that every server entry repeats:\n *\n * 1. `new AbortController()` per request\n * 2. `req.on(\"close\", () => controller.abort())`\n * 3. `cloneRouter(base, { ...deps, abortSignal: signal })`\n * 4. `try { ... } finally { router.dispose() }`\n *\n * The signal is injected into the router clone under `abortSignal` so existing\n * loaders that read `getDep(\"abortSignal\")` keep working without changes. If\n * `deps` already carries an `abortSignal`, the request-tied signal **wins** (it\n * is spread last) — a caller-supplied `abortSignal` is intentionally overridden,\n * since the scope's purpose is to own the request-lifecycle signal.\n *\n * ## `await using` compatibility\n *\n * The scope implements `Symbol.asyncDispose`, so `await using scope = …` is\n * supported on runtimes that ship the well-known `Symbol.asyncDispose`:\n *\n * - **Node.js 24+** (full support; partial in 20.4–20.17 only for `fs`/`stream`)\n * - **Bun 1.0.23+**, **Deno 1.37+**\n * - **Chrome / Edge 127+**, **Firefox 141+**\n * - **Safari**: not yet supported (irrelevant in practice — this helper is\n * server-side only and never reaches the browser)\n *\n * On Node.js 22 LTS the well-known symbol is unavailable, so `await using`\n * fails. **The bundled SSR examples therefore use the explicit\n * `try/finally` + `await scope.dispose()` form**, which works on every\n * runtime. Use `await using` only when you control the deployment target and\n * know it ships the symbol.\n *\n * @example\n * ```typescript\n * // Explicit dispose — works on Node 18+, all browsers, every CI image\n * export async function render(url: string, req: IncomingMessage) {\n * const scope = createRequestScope(req, baseRouter, { currentUser });\n * try {\n * scope.router.usePlugin(ssrDataPluginFactory(loaders));\n * return await renderShell(scope.router, url);\n * } finally {\n * await scope.dispose();\n * }\n * }\n *\n * // `await using` — Node 24+, Bun, Deno, modern browsers\n * export async function render(url: string, req: IncomingMessage) {\n * await using scope = createRequestScope(req, baseRouter, { currentUser });\n * scope.router.usePlugin(ssrDataPluginFactory(loaders));\n * return await renderShell(scope.router, url);\n * }\n *\n * // Web runtime (signal already on the request)\n * async function handler(request: Request) {\n * const scope = createRequestScope(request, baseRouter, { db });\n * try {\n * scope.router.usePlugin(rscServerPluginFactory(loaders));\n * return await render(scope.router, request.url);\n * } finally {\n * await scope.dispose();\n * }\n * }\n * ```\n */\nexport function createRequestScope<\n Dependencies extends DefaultDependencies = DefaultDependencies,\n>(\n request: RequestScopeSource,\n base: Router<Dependencies>,\n deps?: Partial<Dependencies>,\n): RequestScope<Dependencies> {\n let detach: (() => void) | undefined;\n let attach: (() => void) | undefined;\n let signal: AbortSignal;\n\n if (isRequestLike(request)) {\n signal = request.signal;\n } else {\n const controller = new AbortController();\n const onClose = (): void => {\n controller.abort();\n };\n\n signal = controller.signal;\n // Clone-before-attach (#969): defer attaching the \"close\" listener until\n // after cloneRouter succeeds. cloneRouter is synchronous, so no \"close\"\n // macrotask can fire in the gap; and if it throws (e.g. ROUTER_DISPOSED on\n // an already-disposed base) the helper exits without returning a scope\n // handle — so a listener attached here would strand on the request with no\n // way to detach it.\n attach = () => {\n request.on(\"close\", onClose);\n };\n detach = () => {\n request.removeListener?.(\"close\", onClose);\n };\n }\n\n const router = cloneRouter(base, {\n ...deps,\n abortSignal: signal,\n } as Dependencies);\n\n // The clone exists — now it is safe to attach the close listener (Node path\n // only; `attach` is undefined for the Web path).\n attach?.();\n\n let disposed = false;\n\n const dispose = (): Promise<void> => {\n if (disposed) {\n return Promise.resolve();\n }\n\n disposed = true;\n detach?.();\n router.dispose();\n\n return Promise.resolve();\n };\n\n return {\n router,\n signal,\n dispose,\n // eslint-disable-next-line unicorn/no-nonstandard-builtin-properties -- Symbol.asyncDispose is a standard ES2023 well-known symbol (`await using`)\n [Symbol.asyncDispose]: dispose,\n };\n}\n","import { getPluginApi } from \"../api/getPluginApi\";\n\nimport type { DefaultDependencies, Router } from \"@real-router/types\";\nimport type { RouteTree } from \"route-tree\";\n\nexport type StaticPathEntries = Record<\n string,\n () => Promise<Record<string, string>[]>\n>;\n\nfunction collectLeafRouteNames(node: RouteTree, result: string[]): void {\n for (const child of node.children.values()) {\n if (child.children.size === 0) {\n result.push(child.fullName);\n } else {\n // Accumulate into the shared array rather than\n // `result.push(...getLeafRouteNames(child))`: the spread passes one\n // argument per leaf, and V8 caps spread/apply arguments (~124k on Node 24),\n // so a section with that many static leaf routes threw\n // `RangeError: Maximum call stack size exceeded`. Accumulating also drops\n // the per-subtree intermediate-array allocation.\n collectLeafRouteNames(child, result);\n }\n }\n}\n\nfunction getLeafRouteNames(node: RouteTree): string[] {\n const result: string[] = [];\n\n collectLeafRouteNames(node, result);\n\n return result;\n}\n\nexport async function getStaticPaths<\n Dependencies extends DefaultDependencies = DefaultDependencies,\n>(\n router: Router<Dependencies>,\n entries?: StaticPathEntries,\n): Promise<string[]> {\n const tree = getPluginApi(router).getTree();\n const leafRoutes = getLeafRouteNames(tree);\n const paths: string[] = [];\n\n for (const routeName of leafRoutes) {\n const entryFn = entries?.[routeName];\n\n if (entryFn) {\n const paramSets = await entryFn();\n\n for (const params of paramSets) {\n paths.push(router.buildPath(routeName, params));\n }\n } else {\n paths.push(router.buildPath(routeName, {}));\n }\n }\n\n return paths;\n}\n","import { getInternals } from \"../internals\";\n\nimport type { SerializedRouterState } from \"./serializeRouterState\";\nimport type { Router, State } from \"@real-router/types\";\n\n/**\n * Custom deserializer signature for {@link hydrateRouter} (#606). Compatible\n * with `JSON.parse` (default), `devalue.parse`, `superjson.parse`, or any\n * user-supplied function.\n */\nexport type Deserialize = (json: string) => unknown;\n\nexport interface HydrateRouterOptions {\n /**\n * Custom deserializer (e.g., `devalue.parse` / `superjson.parse`) for\n * matching the `serialize` passed to {@link serializeRouterState}. Defaults\n * to `JSON.parse`. Ignored when `source` is already an object.\n *\n * @default JSON.parse\n *\n * @example\n * ```typescript\n * import * as devalue from \"devalue\";\n * await hydrateRouter(router, ssrJson, { deserialize: devalue.parse });\n * ```\n */\n deserialize?: Deserialize;\n}\n\n/**\n * Hydrate a fresh router from server-serialized State (#563, #596).\n *\n * Accepts either a JSON string (parsed via `JSON.parse` by default, or\n * `options.deserialize` when provided) or a State-shaped object. Extracts\n * `state.path` and delegates to `router.start(state.path)` — the canonical\n * URL is the source of truth for the router on hydration.\n *\n * The full parsed state (incl. `state.context.<namespace>` payloads) is\n * deposited into a one-shot scratchpad on `RouterInternals.hydrationState`\n * before `start()` is invoked and cleared in the matching `finally`. SSR\n * loader plugins (`@real-router/ssr-data-plugin`,\n * `@real-router/rsc-server-plugin`) read this scratchpad to skip their loader\n * call when the server-resolved namespace value is already present — avoiding\n * the post-hydration loader re-run on first paint.\n *\n * Single-shot semantics: the scratchpad is consumed during the first `start()`\n * triggered by `hydrateRouter` regardless of route mismatch; subsequent\n * `start()` calls run loaders normally.\n *\n * @example\n * ```typescript\n * // Client\n * const router = createAppRouter();\n * router.usePlugin(browserPluginFactory());\n * await hydrateRouter(router, window.__SSR_STATE__);\n * ```\n *\n * @example\n * ```typescript\n * // With non-JSON types (Date / Map / Set / RegExp / BigInt) via devalue (#606)\n * import * as devalue from \"devalue\";\n *\n * await hydrateRouter(router, window.__SSR_STATE__, {\n * deserialize: devalue.parse,\n * });\n * ```\n */\nexport async function hydrateRouter(\n router: Router,\n source: string | { path: string },\n options?: HydrateRouterOptions,\n): Promise<State> {\n const deserialize: Deserialize = options?.deserialize ?? JSON.parse;\n const parsed =\n typeof source === \"string\"\n ? (deserialize(source) as SerializedRouterState)\n : (source as SerializedRouterState);\n\n const ctx = getInternals(router);\n const previous = ctx.hydrationState;\n\n ctx.hydrationState = parsed;\n\n try {\n return await router.start(parsed.path);\n } finally {\n ctx.hydrationState = previous;\n }\n}\n","/**\n * Custom serializer signature for {@link serializeState} (#606).\n *\n * Compatible with `JSON.stringify` (default) as well as `devalue.stringify`,\n * `superjson.stringify`, or any user-supplied function that returns a JSON\n * string. The output is run through XSS-safe character escapes regardless\n * of which serializer produced it.\n */\nexport type Serialize = (data: unknown) => string;\n\nexport interface SerializeStateOptions {\n /**\n * Custom serializer (e.g., `devalue.stringify` / `superjson.stringify`) to\n * support non-JSON types (Date / Map / Set / RegExp / BigInt). Defaults to\n * `JSON.stringify`. Output is still XSS-escaped.\n *\n * @default JSON.stringify\n */\n serialize?: Serialize;\n}\n\n/**\n * XSS-safe JSON serialization for embedding data in HTML `<script>` tags.\n *\n * Escapes `<`, `>`, and `&` to their Unicode equivalents to prevent\n * injection via `</script>` or HTML entities inside inline scripts.\n *\n * Pass `options.serialize` to use a custom serializer such as `devalue` or\n * `superjson` for non-JSON types (Date/Map/Set/RegExp/BigInt). The serializer\n * must return a string; XSS-escape is applied to its output.\n *\n * @example\n * ```typescript\n * const json = serializeState({ name: \"home\", path: \"/\" });\n * const html = `<script>window.__STATE__=${json}</script>`;\n * ```\n *\n * @example\n * ```typescript\n * import * as devalue from \"devalue\";\n *\n * const json = serializeState(\n * { date: new Date(), tags: new Set([\"a\", \"b\"]) },\n * { serialize: devalue.stringify },\n * );\n * ```\n */\nexport function serializeState(\n data: unknown,\n options?: SerializeStateOptions,\n): string {\n const serialize = options?.serialize ?? JSON.stringify;\n // JSON.stringify returns undefined for top-level `undefined`, Symbol,\n // function, and other non-serializable values (lib.d.ts types it as\n // `string` but the runtime can return undefined). A custom serializer\n // that returns undefined for unsupported input is normalized the same way.\n const serialized = (serialize(data) as string | undefined) ?? \"null\";\n\n return serialized\n .replaceAll(\"<\", String.raw`\\u003c`)\n .replaceAll(\">\", String.raw`\\u003e`)\n .replaceAll(\"&\", String.raw`\\u0026`);\n}\n","import { serializeState } from \"./serializeState\";\n\nimport type { Serialize } from \"./serializeState\";\nimport type { Params, State } from \"@real-router/types\";\n\n/**\n * Parsed shape produced by {@link serializeRouterState} (after `JSON.parse`).\n *\n * Identical to {@link State} minus `transition` (per-navigation `TransitionMeta`\n * is meaningless after hydration; the client builds its own on commit). Used as\n * the input shape for {@link hydrateRouter} and as the type of the one-shot\n * hydration scratchpad consumed by SSR loader plugins.\n */\nexport type SerializedRouterState<P extends Params = Params> = Omit<\n State<P>,\n \"transition\"\n>;\n\nexport interface SerializeRouterStateOptions {\n /**\n * Plugin context namespaces to strip from the serialized output.\n * Use when a plugin populates `state.context.<ns>` with non-JSON-serializable\n * values (e.g., RSC payload: ReactNode trees containing functions/symbols).\n *\n * @default []\n */\n excludeContext?: readonly string[];\n\n /**\n * Custom serializer (e.g., `devalue.stringify` / `superjson.stringify`) to\n * support non-JSON types in `state.params` and `state.context.<ns>` payloads\n * (Date / Map / Set / RegExp / BigInt). Defaults to `JSON.stringify`.\n *\n * Pair with the matching `deserialize` on `hydrateRouter` to round-trip the\n * extended types on the client.\n *\n * @default JSON.stringify\n *\n * @example\n * ```typescript\n * import * as devalue from \"devalue\";\n *\n * const json = serializeRouterState(state, { serialize: devalue.stringify });\n * ```\n */\n serialize?: Serialize;\n}\n\n/**\n * XSS-safe JSON serialization of router State for SSR → client transport (#563).\n *\n * Strips `state.transition` (per-navigation `TransitionMeta` — meaningless after\n * hydration; the client's hydration commit produces its own `transition`).\n * Keeps `name`, `params`, `path`, and `context` (plugin context namespaces are\n * preserved as-is — server's `state.context.data` from `ssr-data-plugin` and\n * any other plugin claims travel to the client untouched).\n *\n * Pass `options.excludeContext` to strip specific namespaces from the output —\n * required for plugins that publish non-JSON-serializable values (e.g., RSC\n * `ReactNode` trees from `@real-router/rsc-server-plugin`).\n *\n * @example\n * ```typescript\n * // Server\n * const state = await router.start(req.url);\n * const html = `<script>window.__SSR_STATE__=${serializeRouterState(state)}</script>`;\n *\n * // Client\n * await hydrateRouter(router, window.__SSR_STATE__);\n * ```\n *\n * @example\n * ```typescript\n * // With RSC plugin: strip the \"rsc\" namespace before transport\n * const state = await router.start(url);\n * const json = serializeRouterState(state, { excludeContext: [\"rsc\"] });\n * ```\n *\n * @example\n * ```typescript\n * // Non-JSON types (Date / Map / Set / RegExp / BigInt) via devalue (#606)\n * import * as devalue from \"devalue\";\n *\n * const json = serializeRouterState(state, { serialize: devalue.stringify });\n * // On the client:\n * await hydrateRouter(router, json, { deserialize: devalue.parse });\n * ```\n */\nexport function serializeRouterState(\n state: State,\n options?: SerializeRouterStateOptions,\n): string {\n const exclude = options?.excludeContext;\n\n let context = state.context;\n\n if (exclude?.length) {\n const filtered: Record<string, unknown> = {};\n const source = state.context;\n\n for (const [key, value] of Object.entries(source)) {\n if (!exclude.includes(key)) {\n filtered[key] = value;\n }\n }\n\n context = filtered;\n }\n\n const payload = {\n name: state.name,\n params: state.params,\n path: state.path,\n context,\n };\n\n return options?.serialize\n ? serializeState(payload, { serialize: options.serialize })\n : serializeState(payload);\n}\n"],"mappings":"6FAkDA,SAAS,EAAc,EAAqD,CAC1E,MACE,WAAY,GACZ,OAAQ,EAAiC,QAAW,UACnD,EAAiC,SAAW,IAAA,IAC7C,OAAO,EAAQ,OAAO,SAAY,SAEtC,CAqEA,SAAgB,EAGd,EACA,EACA,EAC4B,CAC5B,IAAI,EACA,EACA,EAEJ,GAAI,EAAc,CAAO,EACvB,EAAS,EAAQ,WACZ,CACL,IAAM,EAAa,IAAI,gBACjB,MAAsB,CAC1B,EAAW,MAAM,CACnB,EAEA,EAAS,EAAW,OAOpB,MAAe,CACb,EAAQ,GAAG,QAAS,CAAO,CAC7B,EACA,MAAe,CACb,EAAQ,iBAAiB,QAAS,CAAO,CAC3C,CACF,CAEA,IAAM,EAAS,EAAY,EAAM,CAC/B,GAAG,EACH,YAAa,CACf,CAAiB,EAIjB,IAAS,EAET,IAAI,EAAW,GAET,MACA,EACK,QAAQ,QAAQ,GAGzB,EAAW,GACX,IAAS,EACT,EAAO,QAAQ,EAER,QAAQ,QAAQ,GAGzB,MAAO,CACL,SACA,SACA,WAEC,OAAO,cAAe,CACzB,CACF,CCpLA,SAAS,EAAsB,EAAiB,EAAwB,CACtE,IAAK,IAAM,KAAS,EAAK,SAAS,OAAO,EACnC,EAAM,SAAS,OAAS,EAC1B,EAAO,KAAK,EAAM,QAAQ,EAQ1B,EAAsB,EAAO,CAAM,CAGzC,CAEA,SAAS,EAAkB,EAA2B,CACpD,IAAM,EAAmB,CAAC,EAI1B,OAFA,EAAsB,EAAM,CAAM,EAE3B,CACT,CAEA,eAAsB,EAGpB,EACA,EACmB,CAEnB,IAAM,EAAa,EADN,EAAa,CAAM,CAAC,CAAC,QACM,CAAC,EACnC,EAAkB,CAAC,EAEzB,IAAK,IAAM,KAAa,EAAY,CAClC,IAAM,EAAU,IAAU,GAE1B,GAAI,EAAS,CACX,IAAM,EAAY,MAAM,EAAQ,EAEhC,IAAK,IAAM,KAAU,EACnB,EAAM,KAAK,EAAO,UAAU,EAAW,CAAM,CAAC,CAElD,MACE,EAAM,KAAK,EAAO,UAAU,EAAW,CAAC,CAAC,CAAC,CAE9C,CAEA,OAAO,CACT,CCQA,eAAsB,EACpB,EACA,EACA,EACgB,CAChB,IAAM,EAA2B,GAAS,aAAe,KAAK,MACxD,EACJ,OAAO,GAAW,SACb,EAAY,CAAM,EAClB,EAED,EAAM,EAAa,CAAM,EACzB,EAAW,EAAI,eAErB,EAAI,eAAiB,EAErB,GAAI,CACF,OAAO,MAAM,EAAO,MAAM,EAAO,IAAI,CACvC,QAAU,CACR,EAAI,eAAiB,CACvB,CACF,CCzCA,SAAgB,EACd,EACA,EACQ,CAQR,QAPkB,GAAS,WAAa,KAAK,UAAA,CAKf,CAAI,GAA4B,OAAA,CAG3D,WAAW,IAAK,OAAO,GAAG,QAAQ,CAAC,CACnC,WAAW,IAAK,OAAO,GAAG,QAAQ,CAAC,CACnC,WAAW,IAAK,OAAO,GAAG,QAAQ,CACvC,CC0BA,SAAgB,EACd,EACA,EACQ,CACR,IAAM,EAAU,GAAS,eAErB,EAAU,EAAM,QAEpB,GAAI,GAAS,OAAQ,CACnB,IAAM,EAAoC,CAAC,EACrC,EAAS,EAAM,QAErB,IAAK,GAAM,CAAC,EAAK,KAAU,OAAO,QAAQ,CAAM,EACzC,EAAQ,SAAS,CAAG,IACvB,EAAS,GAAO,GAIpB,EAAU,CACZ,CAEA,IAAM,EAAU,CACd,KAAM,EAAM,KACZ,OAAQ,EAAM,OACd,KAAM,EAAM,KACZ,SACF,EAEA,OAAO,GAAS,UACZ,EAAe,EAAS,CAAE,UAAW,EAAQ,SAAU,CAAC,EACxD,EAAe,CAAO,CAC5B"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { i as RouteTree, n as Matcher, r as RouteDefinition, t as CreateMatcherOptions } from "./index-
|
|
1
|
+
import { a as validateRoute, i as RouteTree, n as Matcher, r as RouteDefinition, t as CreateMatcherOptions } from "./index-DlHpdGTA.mjs";
|
|
2
2
|
import { a as PluginFactory, i as Limits, n as EventMethodMap, r as GuardFnFactory } from "./Router-Bm2qafJA.mjs";
|
|
3
3
|
import { n as RouterValidator } from "./RouterError-BEqOMMFO.mjs";
|
|
4
4
|
import { n as SerializedRouterState } from "./index-Cwd11Hun.mjs";
|
|
@@ -321,5 +321,5 @@ interface RouterInternals<D extends DefaultDependencies = DefaultDependencies> {
|
|
|
321
321
|
}
|
|
322
322
|
declare function getInternals<D extends DefaultDependencies>(router: Router<D>): RouterInternals<D>;
|
|
323
323
|
//#endregion
|
|
324
|
-
export { type RouterInternals, type RouterValidator, getInternals };
|
|
324
|
+
export { type Matcher, type RouteTree, type RouterInternals, type RouterValidator, getInternals, validateRoute };
|
|
325
325
|
//# sourceMappingURL=validation.d.mts.map
|
package/dist/esm/validation.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as
|
|
1
|
+
import{l as e,r as t}from"./esm-CQSKkkua.mjs";export{e as getInternals,t as validateRoute};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@real-router/core",
|
|
3
|
-
"version": "0.68.
|
|
3
|
+
"version": "0.68.2",
|
|
4
4
|
"type": "commonjs",
|
|
5
5
|
"description": "A simple, powerful, view-agnostic, modular and extensible router",
|
|
6
6
|
"main": "./dist/cjs/index.js",
|
|
@@ -91,8 +91,8 @@
|
|
|
91
91
|
"@real-router/types": "^0.38.0"
|
|
92
92
|
},
|
|
93
93
|
"devDependencies": {
|
|
94
|
-
"
|
|
95
|
-
"
|
|
94
|
+
"route-tree": "^0.3.4",
|
|
95
|
+
"event-emitter": "^0.1.2"
|
|
96
96
|
},
|
|
97
97
|
"scripts": {
|
|
98
98
|
"test": "vitest run functional/",
|