olova-router 1.0.19 → 1.0.21
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/LICENSE +21 -0
- package/README.md +402 -53
- package/dist/breadcrumbs.d.ts +272 -0
- package/dist/breadcrumbs.js +36 -0
- package/dist/breadcrumbs.js.map +1 -0
- package/dist/guards.d.ts +4 -0
- package/dist/guards.js +66 -0
- package/dist/guards.js.map +1 -0
- package/dist/history.d.ts +17 -0
- package/dist/history.js +51 -0
- package/dist/history.js.map +1 -0
- package/dist/index.d.ts +4 -117
- package/dist/index.js +912 -5
- package/dist/index.js.map +1 -1
- package/dist/lazy.d.ts +9 -0
- package/dist/lazy.js +127 -0
- package/dist/lazy.js.map +1 -0
- package/dist/middleware.d.ts +4 -0
- package/dist/middleware.js +54 -0
- package/dist/middleware.js.map +1 -0
- package/dist/vite.js +78 -50
- package/dist/vite.js.map +1 -1
- package/package.json +84 -2
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/Link.ts","../src/index.ts"],"names":["defineComponent","event"],"mappings":"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","file":"index.js","sourcesContent":["import { defineComponent, type OlovaComponent, type OlovaProps } from \"olova/runtime\";\nimport { isActiveHref, resolveHref, type MatchOptions } from \"./index\";\n\ntype LinkProps = OlovaProps & {\n to?: unknown;\n name?: unknown;\n href?: unknown;\n params?: unknown;\n query?: unknown;\n hash?: unknown;\n class?: unknown;\n activeClass?: unknown;\n inactiveClass?: unknown;\n exact?: unknown;\n id?: unknown;\n title?: unknown;\n target?: unknown;\n rel?: unknown;\n replace?: unknown;\n scroll?: unknown;\n};\n\nfunction toBoolean(value: unknown, fallback = false): boolean {\n return typeof value === \"boolean\" ? value : fallback;\n}\n\nfunction toStringValue(value: unknown, fallback = \"\"): string {\n return value == null ? fallback : String(value);\n}\n\nconst Link = defineComponent((incomingProps) => {\n const props = incomingProps as LinkProps;\n const destination = () =>\n props.to || (props.name ? { name: props.name as string, params: props.params, query: props.query, hash: props.hash } : { path: props.href ?? \"/\", params: props.params, query: props.query, hash: props.hash });\n const isActive = () => isActiveHref(destination(), { exact: toBoolean(props.exact) } as MatchOptions);\n const linkClass = () =>\n [toStringValue(props.class), isActive() ? toStringValue(props.activeClass) : toStringValue(props.inactiveClass)]\n .filter(Boolean)\n .join(\" \");\n return {\n template:\n '<a href=\"__O_ATTR_href__\" class=\"__O_ATTR_class__\" id=\"__O_ATTR_id__\" title=\"__O_ATTR_title__\" target=\"__O_ATTR_target__\" rel=\"__O_ATTR_rel__\" aria-current=\"__O_ATTR_current__\">__O_SLOT_slot__</a>',\n textBindings: [],\n htmlBindings: [],\n attrBindings: [\n { id: \"href\", attr: \"href\", get: () => resolveHref(destination()) },\n { id: \"class\", attr: \"class\", get: linkClass },\n { id: \"id\", attr: \"id\", get: () => props.id ?? null },\n { id: \"title\", attr: \"title\", get: () => props.title ?? null },\n { id: \"target\", attr: \"target\", get: () => props.target ?? null },\n { id: \"rel\", attr: \"rel\", get: () => props.rel ?? null },\n { id: \"current\", attr: \"aria-current\", get: () => (isActive() ? \"page\" : null) },\n ],\n eventBindings: [],\n slotBindings: [{ id: \"slot\", name: \"default\" }],\n componentBindings: [],\n };\n});\n\nexport default Link as OlovaComponent;\n","import { effect, state } from \"olova/core\";\nimport {\n defineComponent,\n getContext,\n hasContext,\n setContext,\n type OlovaComponent,\n type OlovaProps,\n} from \"olova/runtime\";\nimport Link from \"./Link\";\n\ntype RouterMode = \"auto\" | \"history\" | \"hash\";\ntype ResolvedMode = \"history\" | \"hash\";\ntype Primitive = string | number | boolean;\ntype RouteParams = Record<string, string>;\ntype RouteQueryValue = string | string[];\ntype RouteQuery = Record<string, RouteQueryValue>;\ntype RouteQueryInputValue = Primitive | Primitive[] | null | undefined;\ntype RouteQueryInput = Record<string, RouteQueryInputValue>;\ntype RouteTarget =\n | string\n | {\n name?: string;\n path?: string;\n params?: Record<string, Primitive>;\n query?: RouteQueryInput;\n hash?: string;\n };\ntype NavigateOptions = {\n replace?: boolean;\n scroll?: boolean;\n};\ntype MatchOptions = {\n exact?: boolean;\n};\ntype RouteMatchInfo = {\n name?: string;\n path: string;\n meta?: unknown;\n};\ntype RouteLocation = {\n name?: string;\n path: string;\n fullPath: string;\n href: string;\n params: RouteParams;\n query: RouteQuery;\n hash: string;\n meta?: unknown;\n matchedPath: string;\n matches: RouteMatchInfo[];\n};\ntype RouteGuardContext = {\n to: RouteLocation;\n from: RouteLocation | null;\n params: RouteParams;\n query: RouteQuery;\n};\ntype RouteGuardResult = boolean | string | RouteTarget | void;\ntype RouteGuard = (context: RouteGuardContext) => RouteGuardResult;\ntype RouteRedirect =\n | RouteTarget\n | ((context: RouteGuardContext) => RouteTarget | null | undefined);\ntype RoutePropsFactory = OlovaProps | ((context: RouteGuardContext) => OlovaProps);\ntype RouteObject = {\n path?: string;\n index?: boolean;\n component?: OlovaComponent;\n redirect?: RouteRedirect;\n props?: RoutePropsFactory;\n beforeEnter?: RouteGuard;\n name?: string;\n meta?: unknown;\n children?: RouteObject[];\n};\ntype RouteDefinition =\n | OlovaComponent\n | (Omit<RouteObject, \"path\" | \"index\"> & {\n children?: RouteObject[];\n });\ntype RouterRoutes = Record<string, RouteDefinition> | RouteObject[];\ntype RouterProps = {\n routes: RouterRoutes;\n mode?: RouterMode;\n base?: string;\n scroll?: boolean;\n};\n\ntype NormalizedRouteRecord = {\n name?: string;\n fullPath: string;\n pathTemplate: string;\n meta?: unknown;\n component?: OlovaComponent;\n redirect?: RouteRedirect;\n props?: RoutePropsFactory;\n beforeEnter?: RouteGuard;\n matcher: RegExp;\n paramNames: string[];\n score: number;\n order: number;\n};\n\ntype RouteBranch = {\n records: NormalizedRouteRecord[];\n matcher: RegExp;\n paramNames: string[];\n score: number;\n order: number;\n fullPath: string;\n};\n\ntype NormalizedRouteConfig = {\n branches: RouteBranch[];\n named: Map<string, NormalizedRouteRecord>;\n};\n\ntype RouteMatch = {\n record: NormalizedRouteRecord;\n props: OlovaProps;\n};\n\ntype ParsedTarget = {\n mode: ResolvedMode;\n path: string;\n search: string;\n hash: string;\n};\n\ntype RouteResolution = {\n mode: ResolvedMode;\n location: RouteLocation;\n component: OlovaComponent;\n props: OlovaProps;\n};\n\ntype OutletState = {\n component: OlovaComponent;\n props: OlovaProps;\n};\n\ntype RouterApi = {\n current: () => RouteResolution;\n readonly mode: ResolvedMode;\n readonly location: RouteLocation;\n readonly path: string;\n readonly fullPath: string;\n readonly params: RouteParams;\n readonly query: RouteQuery;\n readonly hash: string;\n readonly matchedPath: string;\n readonly matches: RouteMatchInfo[];\n push: (to: RouteTarget, options?: NavigateOptions) => void;\n navigate: (to: RouteTarget, options?: NavigateOptions) => void;\n replace: (to: RouteTarget, options?: Omit<NavigateOptions, \"replace\">) => void;\n back: () => void;\n forward: () => void;\n refresh: () => void;\n resolve: (to: RouteTarget) => string;\n href: (to: RouteTarget) => string;\n isActive: (to: RouteTarget, options?: MatchOptions) => boolean;\n};\n\nexport type {\n MatchOptions,\n NavigateOptions,\n RouteDefinition,\n RouteGuardContext,\n RouteLocation,\n RouteMatchInfo,\n RouteObject,\n RouteParams,\n RouteQuery,\n RouteQueryInput,\n RouteTarget,\n RouterMode,\n RouterProps,\n RouterRoutes,\n};\n\nconst ROUTER_CONTEXT = Symbol.for(\"olova.router\");\nconst OUTLET_CONTEXT = Symbol.for(\"olova.router.outlet\");\nconst EMPTY_PROPS = Object.freeze({}) as OlovaProps;\nconst EMPTY_QUERY = Object.freeze({}) as RouteQuery;\nconst EMPTY_MATCHES = Object.freeze([]) as unknown as RouteMatchInfo[];\nconst EMPTY_LOCATION: RouteLocation = {\n path: \"/\",\n fullPath: \"/\",\n href: \"/\",\n params: {},\n query: EMPTY_QUERY,\n hash: \"\",\n matchedPath: \"*\",\n matches: EMPTY_MATCHES,\n};\nconst EMPTY_OUTLET: OutletState = {\n component: defineComponent(() => ({\n template: \"\",\n textBindings: [],\n htmlBindings: [],\n attrBindings: [],\n eventBindings: [],\n slotBindings: [],\n componentBindings: [],\n })),\n props: EMPTY_PROPS,\n};\n\nlet activeRouter: RouterApi | null = null;\n\nfunction escapeRegex(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nfunction normalizeBase(base = \"/\"): string {\n if (!base || base === \"/\") {\n return \"/\";\n }\n\n return `/${base.replace(/^\\/+|\\/+$/g, \"\")}`;\n}\n\nfunction normalizePath(path = \"/\"): string {\n if (!path) {\n return \"/\";\n }\n\n const [pathname, suffix = \"\"] = path.split(/(?=[?#])/u, 2);\n const cleaned = pathname.replace(/\\/{2,}/g, \"/\").replace(/\\/+$/g, \"\") || \"/\";\n return cleaned.startsWith(\"/\") ? `${cleaned}${suffix}` : `/${cleaned}${suffix}`;\n}\n\nfunction joinPaths(parentPath: string, childPath: string | undefined, index = false): string {\n if (index) {\n return parentPath || \"/\";\n }\n\n if (!childPath || childPath === \"/\") {\n return parentPath || \"/\";\n }\n\n if (childPath.startsWith(\"/\")) {\n return normalizePath(childPath);\n }\n\n const parent = parentPath === \"/\" ? \"\" : parentPath;\n return normalizePath(`${parent}/${childPath}`);\n}\n\nfunction stripBase(pathname: string, base: string): string {\n if (base === \"/\") {\n return normalizePath(pathname);\n }\n\n if (pathname === base) {\n return \"/\";\n }\n\n if (pathname.startsWith(`${base}/`)) {\n return normalizePath(pathname.slice(base.length));\n }\n\n return normalizePath(pathname);\n}\n\nfunction splitRoutePath(path: string): string[] {\n return normalizePath(path).split(\"?\")[0].split(\"#\")[0].split(\"/\").filter(Boolean);\n}\n\nfunction compilePath(path: string): Pick<NormalizedRouteRecord, \"matcher\" | \"paramNames\" | \"score\"> {\n if (path === \"*\") {\n return {\n matcher: /^.*$/u,\n paramNames: [\"wild\"],\n score: -1000,\n };\n }\n\n const segments = splitRoutePath(path);\n if (segments.length === 0) {\n return {\n matcher: /^\\/?$/u,\n paramNames: [],\n score: 100,\n };\n }\n\n const paramNames: string[] = [];\n let pattern = \"^\";\n let score = 0;\n\n for (const segment of segments) {\n if (segment === \"*\") {\n paramNames.push(\"wild\");\n pattern += \"(?:/(.*))?\";\n score -= 20;\n continue;\n }\n\n if (segment.startsWith(\":\")) {\n const rawName = segment.slice(1);\n const repeat = rawName.endsWith(\"*\");\n const paramName = repeat ? rawName.slice(0, -1) : rawName;\n paramNames.push(paramName);\n pattern += repeat ? \"(?:/(.*))?\" : \"/([^/]+)\";\n score += repeat ? 4 : 8;\n continue;\n }\n\n pattern += `/${escapeRegex(segment)}`;\n score += 12;\n }\n\n pattern += \"/?$\";\n\n return {\n matcher: new RegExp(pattern, \"u\"),\n paramNames,\n score,\n };\n}\n\nfunction queryToSearch(query?: RouteQueryInput): string {\n if (!query) {\n return \"\";\n }\n\n const searchParams = new URLSearchParams();\n\n for (const [key, rawValue] of Object.entries(query)) {\n if (rawValue === undefined || rawValue === null) {\n continue;\n }\n\n if (Array.isArray(rawValue)) {\n for (const value of rawValue) {\n searchParams.append(key, String(value));\n }\n continue;\n }\n\n searchParams.set(key, String(rawValue));\n }\n\n const serialized = searchParams.toString();\n return serialized ? `?${serialized}` : \"\";\n}\n\nfunction parseQuery(searchParams: URLSearchParams): RouteQuery {\n const query: RouteQuery = {};\n\n for (const [key, value] of searchParams.entries()) {\n const existing = query[key];\n\n if (existing === undefined) {\n query[key] = value;\n continue;\n }\n\n query[key] = Array.isArray(existing) ? [...existing, value] : [existing, value];\n }\n\n return query;\n}\n\nfunction parseHashRoute(hash: string): { path: string; search: string } {\n const rawHash = hash.startsWith(\"#\") ? hash.slice(1) : hash;\n\n if (!rawHash) {\n return { path: \"/\", search: \"\" };\n }\n\n const normalized = rawHash.startsWith(\"/\") ? rawHash : `/${rawHash}`;\n const parsed = new URL(normalized, \"http://olova-router.local\");\n\n return {\n path: normalizePath(parsed.pathname),\n search: parsed.search,\n };\n}\n\nfunction normalizeRouteDefinition(definition: RouteDefinition): RouteObject {\n if (typeof definition === \"object\" && definition !== null && \"setup\" in definition === false) {\n return definition as RouteObject;\n }\n\n return {\n component: definition as OlovaComponent,\n };\n}\n\nfunction normalizeRouteObjects(routes: RouterRoutes): RouteObject[] {\n if (Array.isArray(routes)) {\n return routes;\n }\n\n return Object.entries(routes).map(([path, definition]) => ({\n path,\n ...normalizeRouteDefinition(definition),\n }));\n}\n\nfunction buildRouteConfig(routes: RouterRoutes): NormalizedRouteConfig {\n const named = new Map<string, NormalizedRouteRecord>();\n const branches: RouteBranch[] = [];\n let order = 0;\n\n const walk = (records: RouteObject[], parentPath: string, chain: NormalizedRouteRecord[]) => {\n for (const record of records) {\n const fullPath = joinPaths(parentPath, record.path, record.index === true);\n const compiled = compilePath(fullPath);\n const normalized: NormalizedRouteRecord = {\n name: record.name,\n fullPath,\n pathTemplate: fullPath,\n meta: record.meta,\n component: record.component,\n redirect: record.redirect,\n props: record.props,\n beforeEnter: record.beforeEnter,\n matcher: compiled.matcher,\n paramNames: compiled.paramNames,\n score: compiled.score,\n order: order++,\n };\n\n if (normalized.name) {\n named.set(normalized.name, normalized);\n }\n\n const nextChain = [...chain, normalized];\n\n if (normalized.component || normalized.redirect) {\n branches.push({\n records: nextChain,\n matcher: compiled.matcher,\n paramNames: compiled.paramNames,\n score: compiled.score + nextChain.length,\n order: normalized.order,\n fullPath,\n });\n }\n\n if (record.children?.length) {\n walk(record.children, fullPath, nextChain);\n }\n }\n };\n\n walk(normalizeRouteObjects(routes), \"/\", []);\n\n branches.sort((left, right) => right.score - left.score || left.order - right.order);\n\n return {\n branches,\n named,\n };\n}\n\nfunction buildPathFromTemplate(template: string, params?: Record<string, Primitive>): string {\n const resolvedParams = params ?? {};\n\n if (template === \"*\") {\n return String(resolvedParams.wild ?? \"/\");\n }\n\n const segments = splitRoutePath(template).map((segment) => {\n if (segment === \"*\") {\n return encodeURIComponent(String(resolvedParams.wild ?? \"\"));\n }\n\n if (!segment.startsWith(\":\")) {\n return segment;\n }\n\n const rawName = segment.slice(1);\n const repeat = rawName.endsWith(\"*\");\n const name = repeat ? rawName.slice(0, -1) : rawName;\n const value = resolvedParams[name];\n\n if (value === undefined || value === null) {\n throw new Error(`[olova-router] Missing route param \"${name}\" for \"${template}\".`);\n }\n\n if (repeat) {\n return String(value)\n .split(\"/\")\n .map((part) => encodeURIComponent(part))\n .join(\"/\");\n }\n\n return encodeURIComponent(String(value));\n });\n\n return normalizePath(`/${segments.join(\"/\")}`);\n}\n\nexport function matchPath(pattern: string, path: string): RouteParams | null {\n const compiled = compilePath(pattern);\n const matched = compiled.matcher.exec(normalizePath(path));\n\n if (!matched) {\n return null;\n }\n\n const params: RouteParams = {};\n compiled.paramNames.forEach((paramName, index) => {\n params[paramName] = decodeURIComponent(matched[index + 1] ?? \"\");\n });\n\n return params;\n}\n\nfunction resolveCurrentTarget(mode: RouterMode, base: string): ParsedTarget {\n const url = new URL(window.location.href);\n const resolvedMode: ResolvedMode =\n mode === \"auto\"\n ? (url.hash.startsWith(\"#/\") || url.hash.startsWith(\"#!/\") ? \"hash\" : \"history\")\n : mode;\n\n if (resolvedMode === \"hash\") {\n const hashRoute = parseHashRoute(url.hash);\n return {\n mode: \"hash\",\n path: hashRoute.path,\n search: hashRoute.search,\n hash: \"\",\n };\n }\n\n return {\n mode: \"history\",\n path: stripBase(url.pathname, base),\n search: url.search,\n hash: url.hash,\n };\n}\n\nfunction resolveTarget(\n to: RouteTarget,\n mode: RouterMode,\n base: string,\n named: Map<string, NormalizedRouteRecord>,\n): ParsedTarget {\n if (typeof to === \"string\") {\n if (to.startsWith(\"#/\") || to.startsWith(\"#!/\")) {\n const parsedHash = parseHashRoute(to);\n return {\n mode: \"hash\",\n path: parsedHash.path,\n search: parsedHash.search,\n hash: \"\",\n };\n }\n\n const url = new URL(to, window.location.href);\n\n if (url.origin !== window.location.origin) {\n window.location.assign(url.href);\n return resolveCurrentTarget(mode, base);\n }\n\n if (url.hash.startsWith(\"#/\") || url.hash.startsWith(\"#!/\")) {\n const parsedHash = parseHashRoute(url.hash);\n return {\n mode: \"hash\",\n path: parsedHash.path,\n search: parsedHash.search,\n hash: \"\",\n };\n }\n\n return {\n mode: mode === \"auto\" ? \"history\" : mode === \"hash\" ? \"hash\" : \"history\",\n path: stripBase(url.pathname, base),\n search: url.search,\n hash: url.hash,\n };\n }\n\n const targetMode: ResolvedMode = mode === \"auto\" ? \"history\" : mode === \"hash\" ? \"hash\" : \"history\";\n const record = to.name ? named.get(to.name) : null;\n\n if (to.name && !record) {\n throw new Error(`[olova-router] Unknown route name \"${to.name}\".`);\n }\n\n const targetPath = record\n ? buildPathFromTemplate(record.pathTemplate, to.params)\n : buildPathFromTemplate(to.path ?? \"/\", to.params);\n\n return {\n mode: targetMode,\n path: targetPath,\n search: queryToSearch(to.query),\n hash: to.hash ? `#${String(to.hash).replace(/^#/, \"\")}` : \"\",\n };\n}\n\nfunction stringifyTarget(target: ParsedTarget, base: string): string {\n if (target.mode === \"hash\") {\n const root = base === \"/\" ? \"\" : base;\n return `${root}/#${target.path}${target.search}`;\n }\n\n const rootedPath = base === \"/\" ? target.path : `${base}${target.path === \"/\" ? \"\" : target.path}`;\n return `${rootedPath}${target.search}${target.hash}`;\n}\n\nfunction resolveProps(source: RoutePropsFactory | undefined, context: RouteGuardContext): OlovaProps {\n if (!source) {\n return EMPTY_PROPS;\n }\n\n return typeof source === \"function\" ? source(context) : source;\n}\n\nfunction matchBranch(path: string, branches: RouteBranch[]): { branch: RouteBranch | null; params: RouteParams } {\n for (const branch of branches) {\n const matched = branch.matcher.exec(path);\n if (!matched) {\n continue;\n }\n\n const params: RouteParams = {};\n branch.paramNames.forEach((paramName, index) => {\n params[paramName] = decodeURIComponent(matched[index + 1] ?? \"\");\n });\n\n return { branch, params };\n }\n\n return { branch: null, params: {} };\n}\n\nfunction buildLocation(branch: RouteBranch | null, parsed: ParsedTarget, params: RouteParams): RouteLocation {\n const searchParams = new URLSearchParams(parsed.search);\n const fullPath = `${parsed.path}${parsed.search}${parsed.hash}`;\n const matches = branch\n ? branch.records.map((record) => ({\n name: record.name,\n path: record.fullPath,\n meta: record.meta,\n }))\n : EMPTY_MATCHES;\n const leaf = branch?.records[branch.records.length - 1];\n\n return {\n name: leaf?.name,\n path: parsed.path,\n fullPath,\n href: fullPath || \"/\",\n params,\n query: parseQuery(searchParams),\n hash: parsed.hash.startsWith(\"#\") ? parsed.hash.slice(1) : parsed.hash,\n meta: leaf?.meta,\n matchedPath: leaf?.fullPath ?? \"*\",\n matches,\n };\n}\n\nfunction createMatchHost(match: RouteMatch, outlet: OutletState): OlovaComponent {\n return defineComponent(() => {\n setContext(OUTLET_CONTEXT, outlet);\n\n return {\n template: \"__O_COMP_nested_match__\",\n textBindings: [],\n htmlBindings: [],\n attrBindings: [],\n eventBindings: [],\n slotBindings: [],\n componentBindings: [\n {\n id: \"nested_match\",\n getComponent: () => match.record.component ?? EMPTY_OUTLET.component,\n getProps: () => match.props,\n },\n ],\n };\n });\n}\n\nfunction createComponentChain(matches: RouteMatch[]): OlovaComponent {\n if (matches.length === 0) {\n return EMPTY_OUTLET.component;\n }\n\n let outlet = EMPTY_OUTLET;\n\n for (let index = matches.length - 1; index >= 0; index -= 1) {\n outlet = {\n component: createMatchHost(matches[index], outlet),\n props: EMPTY_PROPS,\n };\n }\n\n return outlet.component;\n}\n\nfunction resolveRoute(\n config: NormalizedRouteConfig,\n parsed: ParsedTarget,\n from: RouteLocation | null,\n base: string,\n depth = 0,\n): RouteResolution {\n if (depth > 10) {\n throw new Error(\"[olova-router] Too many redirects while resolving a route.\");\n }\n\n const found = matchBranch(parsed.path, config.branches);\n const location = buildLocation(found.branch, parsed, found.params);\n const context: RouteGuardContext = {\n to: location,\n from,\n params: location.params,\n query: location.query,\n };\n\n const leaf = found.branch?.records[found.branch.records.length - 1];\n const redirect = typeof leaf?.redirect === \"function\" ? leaf.redirect(context) : leaf?.redirect;\n\n if (redirect) {\n return resolveRoute(config, resolveTarget(redirect, parsed.mode, base, config.named), from, base, depth + 1);\n }\n\n const guardResult = leaf?.beforeEnter?.(context);\n\n if (guardResult === false && from) {\n return {\n mode: parsed.mode,\n location: from,\n component: EMPTY_OUTLET.component,\n props: EMPTY_PROPS,\n };\n }\n\n if (guardResult && guardResult !== true) {\n return resolveRoute(config, resolveTarget(guardResult, parsed.mode, base, config.named), from, base, depth + 1);\n }\n\n const matches: RouteMatch[] = (found.branch?.records ?? [])\n .filter((record) => !!record.component)\n .map((record) => ({\n record,\n props: {\n ...resolveProps(record.props, context),\n ...location.params,\n route: location,\n router: activeRouter,\n params: location.params,\n query: location.query,\n matches: location.matches,\n navigate,\n },\n }));\n\n return {\n mode: parsed.mode,\n location,\n component: createComponentChain(matches),\n props: EMPTY_PROPS,\n };\n}\n\nfunction scrollToTop(): void {\n window.scrollTo({ top: 0, left: 0, behavior: \"auto\" });\n}\n\nfunction scrollToHash(hash: string): boolean {\n if (typeof document === \"undefined\") {\n return false;\n }\n\n const normalizedHash = hash.replace(/^#/, \"\");\n if (!normalizedHash) {\n return false;\n }\n\n const target = document.getElementById(decodeURIComponent(normalizedHash));\n if (!target) {\n return false;\n }\n\n target.scrollIntoView({ block: \"start\", inline: \"nearest\", behavior: \"auto\" });\n return true;\n}\n\nfunction applyScroll(hash: string, enabled: boolean): void {\n if (!enabled) {\n return;\n }\n\n if (hash) {\n requestAnimationFrame(() => {\n if (!scrollToHash(hash)) {\n scrollToTop();\n }\n });\n return;\n }\n\n scrollToTop();\n}\n\nfunction shouldIgnoreClick(event: MouseEvent, anchor: HTMLAnchorElement | null): boolean {\n if (!anchor) {\n return true;\n }\n\n if (event.defaultPrevented || event.button !== 0) {\n return true;\n }\n\n if (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) {\n return true;\n }\n\n if (anchor.target && anchor.target !== \"_self\") {\n return true;\n }\n\n if (anchor.hasAttribute(\"download\")) {\n return true;\n }\n\n const rel = anchor.getAttribute(\"rel\");\n if (rel && /\\bexternal\\b/u.test(rel)) {\n return true;\n }\n\n const href = anchor.getAttribute(\"href\");\n return !href || href.startsWith(\"mailto:\") || href.startsWith(\"tel:\");\n}\n\nfunction resolveAnchor(event: Event): HTMLAnchorElement | null {\n const target = event.target;\n\n if (!(target instanceof Node)) {\n return null;\n }\n\n const element = target instanceof Element ? target : target.parentElement;\n if (!element) {\n return null;\n }\n\n return element.closest(\"a[href]\");\n}\n\nfunction runNavigation(to: RouteTarget, options: NavigateOptions = {}): void {\n if (!activeRouter || typeof window === \"undefined\") {\n if (typeof to === \"string\") {\n window.location.assign(to);\n }\n return;\n }\n\n activeRouter.navigate(to, options);\n}\n\nexport function navigate(to: RouteTarget, options?: NavigateOptions): void {\n runNavigation(to, options);\n}\n\nexport function link(toOrEvent?: RouteTarget | Event, options?: NavigateOptions): ((event?: Event) => void) | void {\n if (\n typeof toOrEvent === \"string\" ||\n (typeof toOrEvent === \"object\" &&\n toOrEvent !== null &&\n !(toOrEvent instanceof Event) &&\n \"target\" in toOrEvent === false)\n ) {\n return (event?: Event) => {\n event?.preventDefault();\n runNavigation(toOrEvent as RouteTarget, options);\n };\n }\n\n const event = toOrEvent as Event | undefined;\n\n if (!event) {\n return;\n }\n\n const anchor = resolveAnchor(event);\n\n if (event instanceof MouseEvent && shouldIgnoreClick(event, anchor)) {\n return;\n }\n\n const href = anchor?.getAttribute(\"href\");\n if (!href) {\n return;\n }\n\n event.preventDefault();\n runNavigation(href, options);\n}\n\nexport function useRouter(): RouterApi {\n if (!hasContext(ROUTER_CONTEXT)) {\n throw new Error(\"[olova-router] useRouter() must be used inside a routed component.\");\n }\n\n return getContext<RouterApi>(ROUTER_CONTEXT);\n}\n\nexport function useRoute(): RouteLocation {\n return useRouter().location;\n}\n\nexport function useParams(): RouteParams {\n return useRouter().params;\n}\n\nexport function useQuery(): RouteQuery {\n return useRouter().query;\n}\n\nexport function resolveHref(to: RouteTarget): string {\n return activeRouter?.resolve(to) ?? (typeof to === \"string\" ? to : to.path ?? \"/\");\n}\n\nexport function isActiveHref(to: RouteTarget, options?: MatchOptions): boolean {\n return activeRouter?.isActive(to, options) ?? false;\n}\n\nexport const Outlet = defineComponent(() => {\n const outlet = hasContext(OUTLET_CONTEXT) ? getContext<OutletState>(OUTLET_CONTEXT) : EMPTY_OUTLET;\n\n return {\n template: \"__O_COMP_outlet__\",\n textBindings: [],\n htmlBindings: [],\n attrBindings: [],\n eventBindings: [],\n slotBindings: [],\n componentBindings: [\n {\n id: \"outlet\",\n getComponent: () => outlet.component,\n getProps: () => outlet.props,\n },\n ],\n };\n});\n\nfunction createRouterVariant(mode: ResolvedMode): OlovaComponent {\n return defineComponent((incomingProps) => ({\n template: \"__O_COMP_router_variant__\",\n textBindings: [],\n htmlBindings: [],\n attrBindings: [],\n eventBindings: [],\n slotBindings: [],\n componentBindings: [\n {\n id: \"router_variant\",\n getComponent: () => Router,\n getProps: () => ({\n ...(incomingProps as RouterProps),\n mode,\n }),\n },\n ],\n }));\n}\n\nconst Router = defineComponent((incomingProps) => {\n const props = incomingProps as RouterProps;\n const base = normalizeBase(props.base);\n const config = buildRouteConfig(props.routes ?? {});\n const currentVersion = state(0);\n let currentRoute: RouteResolution = {\n mode: \"history\",\n location: EMPTY_LOCATION,\n component: EMPTY_OUTLET.component,\n props: EMPTY_PROPS,\n };\n\n const setCurrentRoute = (next: RouteResolution) => {\n currentRoute = next;\n currentVersion.value = currentVersion.peek() + 1;\n };\n\n const readCurrentRoute = () => {\n currentVersion.value;\n return currentRoute;\n };\n\n const api: RouterApi = {\n current: () => readCurrentRoute(),\n get mode() {\n return readCurrentRoute().mode;\n },\n get location() {\n return readCurrentRoute().location;\n },\n get path() {\n return readCurrentRoute().location.path;\n },\n get fullPath() {\n return readCurrentRoute().location.fullPath;\n },\n get params() {\n return readCurrentRoute().location.params;\n },\n get query() {\n return readCurrentRoute().location.query;\n },\n get hash() {\n return readCurrentRoute().location.hash;\n },\n get matchedPath() {\n return readCurrentRoute().location.matchedPath;\n },\n get matches() {\n return readCurrentRoute().location.matches;\n },\n push(to, options = {}) {\n const parsed = resolveTarget(to, props.mode ?? \"auto\", base, config.named);\n const next = resolveRoute(config, parsed, currentRoute.location, base);\n const href = stringifyTarget(parsed, base);\n const method = options.replace ? \"replaceState\" : \"pushState\";\n\n if (parsed.mode === \"hash\") {\n const targetHash = href.includes(\"#\") ? href.slice(href.indexOf(\"#\")) : \"\";\n\n if (options.replace) {\n const nextUrl = `${window.location.pathname}${window.location.search}${targetHash}`;\n window.history.replaceState({}, \"\", nextUrl);\n } else {\n window.location.hash = targetHash.slice(1);\n }\n } else {\n window.history[method]({}, \"\", href);\n }\n\n setCurrentRoute(next);\n\n applyScroll(parsed.hash, options.scroll ?? props.scroll ?? true);\n },\n navigate(to, options = {}) {\n this.push(to, options);\n },\n replace(to, options = {}) {\n this.push(to, { ...options, replace: true });\n },\n back() {\n window.history.back();\n },\n forward() {\n window.history.forward();\n },\n refresh() {\n syncFromWindow(false);\n },\n resolve(to) {\n return stringifyTarget(resolveTarget(to, props.mode ?? \"auto\", base, config.named), base);\n },\n href(to) {\n return this.resolve(to);\n },\n isActive(to, options = {}) {\n const parsed = resolveTarget(to, props.mode ?? \"auto\", base, config.named);\n const current = readCurrentRoute().location.path;\n\n if (options.exact) {\n return current === parsed.path;\n }\n\n return current === parsed.path || current.startsWith(`${parsed.path}/`);\n },\n };\n\n const syncFromWindow = (replace = true) => {\n const target = resolveCurrentTarget(props.mode ?? \"auto\", base);\n const next = resolveRoute(config, target, currentRoute.location ?? null, base);\n setCurrentRoute(next);\n\n if (replace) {\n const href = stringifyTarget(target, base);\n window.history.replaceState({}, \"\", href);\n }\n\n applyScroll(target.hash, props.scroll ?? true);\n };\n\n setContext(ROUTER_CONTEXT, api);\n activeRouter = api;\n\n if (typeof window !== \"undefined\") {\n syncFromWindow(false);\n\n effect(() => {\n const handleChange = () => syncFromWindow(false);\n const handleClick = (event: Event) => {\n if (!(event instanceof MouseEvent)) {\n return;\n }\n\n const anchor = resolveAnchor(event);\n if (shouldIgnoreClick(event, anchor)) {\n return;\n }\n\n const href = anchor?.getAttribute(\"href\");\n if (!href) {\n return;\n }\n\n event.preventDefault();\n api.navigate(href);\n };\n\n window.addEventListener(\"popstate\", handleChange);\n window.addEventListener(\"hashchange\", handleChange);\n document.addEventListener(\"click\", handleClick, true);\n\n return () => {\n if (activeRouter === api) {\n activeRouter = null;\n }\n\n window.removeEventListener(\"popstate\", handleChange);\n window.removeEventListener(\"hashchange\", handleChange);\n document.removeEventListener(\"click\", handleClick, true);\n };\n });\n }\n\n return {\n template: \"__O_COMP_router_view__\",\n textBindings: [],\n htmlBindings: [],\n attrBindings: [],\n eventBindings: [],\n slotBindings: [],\n componentBindings: [\n {\n id: \"router_view\",\n getComponent: () => {\n currentVersion.value;\n return currentRoute.component;\n },\n getProps: () => currentRoute.props,\n },\n ],\n };\n});\n\nconst BrowserRouter = createRouterVariant(\"history\");\nconst HashRouter = createRouterVariant(\"hash\");\n\nexport default Router;\nexport { BrowserRouter, HashRouter, Link };\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/Link.ts","../src/breadcrumbs.ts","../src/guards.ts","../src/history.ts","../src/middleware.ts","../src/lazy.ts","../src/prefetch.ts","../src/search-params.ts","../src/transitions.ts","../src/error-boundary.ts","../src/metadata.ts","../src/dynamic-routes.ts","../src/route-groups.ts","../src/parallel-routes.ts","../src/intercepting-routes.ts","../src/index.ts"],"names":["scrollToTop","defineComponent","stringifyTarget","event","state"],"mappings":"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","file":"index.js","sourcesContent":["import { defineComponent, type OlovaComponent, type OlovaProps } from \"olova/runtime\";\nimport { isActiveHref, resolveHref, type MatchOptions } from \"./index\";\n\ntype LinkProps = OlovaProps & {\n to?: unknown;\n name?: unknown;\n href?: unknown;\n params?: unknown;\n query?: unknown;\n hash?: unknown;\n class?: unknown;\n activeClass?: unknown;\n inactiveClass?: unknown;\n exact?: unknown;\n id?: unknown;\n title?: unknown;\n target?: unknown;\n rel?: unknown;\n replace?: unknown;\n scroll?: unknown;\n};\n\nfunction toBoolean(value: unknown, fallback = false): boolean {\n return typeof value === \"boolean\" ? value : fallback;\n}\n\nfunction toStringValue(value: unknown, fallback = \"\"): string {\n return value == null ? fallback : String(value);\n}\n\nconst Link = defineComponent((incomingProps) => {\n const props = incomingProps as LinkProps;\n const destination = () =>\n props.to || (props.name ? { name: props.name as string, params: props.params, query: props.query, hash: props.hash } : { path: props.href ?? \"/\", params: props.params, query: props.query, hash: props.hash });\n const isActive = () => isActiveHref(destination(), { exact: toBoolean(props.exact) } as MatchOptions);\n const linkClass = () =>\n [toStringValue(props.class), isActive() ? toStringValue(props.activeClass) : toStringValue(props.inactiveClass)]\n .filter(Boolean)\n .join(\" \");\n return {\n template:\n '<a href=\"__O_ATTR_href__\" class=\"__O_ATTR_class__\" id=\"__O_ATTR_id__\" title=\"__O_ATTR_title__\" target=\"__O_ATTR_target__\" rel=\"__O_ATTR_rel__\" aria-current=\"__O_ATTR_current__\">__O_SLOT_slot__</a>',\n textBindings: [],\n htmlBindings: [],\n attrBindings: [\n { id: \"href\", attr: \"href\", get: () => resolveHref(destination()) },\n { id: \"class\", attr: \"class\", get: linkClass },\n { id: \"id\", attr: \"id\", get: () => props.id ?? null },\n { id: \"title\", attr: \"title\", get: () => props.title ?? null },\n { id: \"target\", attr: \"target\", get: () => props.target ?? null },\n { id: \"rel\", attr: \"rel\", get: () => props.rel ?? null },\n { id: \"current\", attr: \"aria-current\", get: () => (isActive() ? \"page\" : null) },\n ],\n eventBindings: [],\n slotBindings: [{ id: \"slot\", name: \"default\" }],\n componentBindings: [],\n };\n});\n\nexport default Link as OlovaComponent;\n","import type { RouteLocation, RouteMatchInfo } from \"./index\";\r\n\r\nexport type Breadcrumb = {\r\n label: string;\r\n path: string;\r\n name?: string;\r\n};\r\n\r\nexport function generateBreadcrumbs(location: RouteLocation, labelMap?: Record<string, string>): Breadcrumb[] {\r\n const breadcrumbs: Breadcrumb[] = [];\r\n const segments = location.path.split(\"/\").filter(Boolean);\r\n\r\n breadcrumbs.push({\r\n label: labelMap?.home ?? \"Home\",\r\n path: \"/\",\r\n name: \"home\",\r\n });\r\n\r\n let currentPath = \"\";\r\n for (const segment of segments) {\r\n currentPath += `/${segment}`;\r\n const label = labelMap?.[segment] ?? segment.charAt(0).toUpperCase() + segment.slice(1);\r\n\r\n breadcrumbs.push({\r\n label,\r\n path: currentPath,\r\n });\r\n }\r\n\r\n return breadcrumbs;\r\n}\r\n\r\nexport function generateBreadcrumbsFromMatches(\r\n matches: RouteMatchInfo[],\r\n labelMap?: Record<string, string>,\r\n): Breadcrumb[] {\r\n const breadcrumbs: Breadcrumb[] = [];\r\n\r\n for (const match of matches) {\r\n const label = labelMap?.[match.name ?? \"\"] ?? match.name ?? match.path;\r\n breadcrumbs.push({\r\n label,\r\n path: match.path,\r\n name: match.name,\r\n });\r\n }\r\n\r\n return breadcrumbs;\r\n}\r\n","import type { RouteGuardContext, RouteGuardResult, RouteTarget } from \"./index\";\r\n\r\nexport type GuardCondition = (context: RouteGuardContext) => boolean | Promise<boolean>;\r\n\r\nexport function createConditionalGuard(\r\n condition: GuardCondition,\r\n redirectTo?: RouteTarget,\r\n): (context: RouteGuardContext) => Promise<RouteGuardResult> {\r\n return async (context) => {\r\n const allowed = await condition(context);\r\n if (!allowed && redirectTo) {\r\n return redirectTo;\r\n }\r\n return allowed;\r\n };\r\n}\r\n\r\nexport function createParamGuard(\r\n paramName: string,\r\n validator: (value: string) => boolean | Promise<boolean>,\r\n redirectTo?: RouteTarget,\r\n): (context: RouteGuardContext) => Promise<RouteGuardResult> {\r\n return async (context) => {\r\n const value = context.params[paramName];\r\n if (!value) {\r\n return redirectTo ? redirectTo : false;\r\n }\r\n const valid = await validator(value);\r\n if (!valid && redirectTo) {\r\n return redirectTo;\r\n }\r\n return valid;\r\n };\r\n}\r\n\r\nexport function createQueryGuard(\r\n queryKey: string,\r\n validator: (value: string | string[] | undefined) => boolean | Promise<boolean>,\r\n redirectTo?: RouteTarget,\r\n): (context: RouteGuardContext) => Promise<RouteGuardResult> {\r\n return async (context) => {\r\n const value = context.query[queryKey];\r\n const valid = await validator(value);\r\n if (!valid && redirectTo) {\r\n return redirectTo;\r\n }\r\n return valid;\r\n };\r\n}\r\n\r\nexport function createCompositeGuard(\r\n guards: Array<(context: RouteGuardContext) => RouteGuardResult | Promise<RouteGuardResult>>,\r\n): (context: RouteGuardContext) => Promise<RouteGuardResult> {\r\n return async (context) => {\r\n for (const guard of guards) {\r\n const result = await guard(context);\r\n if (result !== true && result !== undefined) {\r\n return result;\r\n }\r\n }\r\n return true;\r\n };\r\n}\r\n\r\nexport function createDebounceGuard(\r\n guard: (context: RouteGuardContext) => RouteGuardResult | Promise<RouteGuardResult>,\r\n delayMs = 300,\r\n): (context: RouteGuardContext) => Promise<RouteGuardResult> {\r\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\r\n let lastContext: RouteGuardContext | null = null;\r\n\r\n return async (context) => {\r\n lastContext = context;\r\n\r\n return new Promise((resolve) => {\r\n if (timeoutId) {\r\n clearTimeout(timeoutId);\r\n }\r\n\r\n timeoutId = setTimeout(async () => {\r\n if (lastContext === context) {\r\n const result = await guard(context);\r\n resolve(result);\r\n }\r\n }, delayMs);\r\n });\r\n };\r\n}\r\n","export type HistoryEntry = {\r\n path: string;\r\n timestamp: number;\r\n};\r\n\r\nexport type RouterHistory = {\r\n entries: HistoryEntry[];\r\n current: number;\r\n push: (path: string) => void;\r\n back: () => HistoryEntry | null;\r\n forward: () => HistoryEntry | null;\r\n go: (delta: number) => HistoryEntry | null;\r\n clear: () => void;\r\n getHistory: () => HistoryEntry[];\r\n};\r\n\r\nexport function createRouterHistory(maxSize = 50): RouterHistory {\r\n const entries: HistoryEntry[] = [];\r\n let current = -1;\r\n\r\n return {\r\n entries,\r\n current,\r\n push(path: string) {\r\n entries.splice(current + 1);\r\n entries.push({ path, timestamp: Date.now() });\r\n if (entries.length > maxSize) {\r\n entries.shift();\r\n } else {\r\n current++;\r\n }\r\n },\r\n back() {\r\n if (current > 0) {\r\n current--;\r\n return entries[current];\r\n }\r\n return null;\r\n },\r\n forward() {\r\n if (current < entries.length - 1) {\r\n current++;\r\n return entries[current];\r\n }\r\n return null;\r\n },\r\n go(delta: number) {\r\n const next = current + delta;\r\n if (next >= 0 && next < entries.length) {\r\n current = next;\r\n return entries[current];\r\n }\r\n return null;\r\n },\r\n clear() {\r\n entries.length = 0;\r\n current = -1;\r\n },\r\n getHistory() {\r\n return [...entries];\r\n },\r\n };\r\n}\r\n","import type { RouteGuardContext, RouteGuardResult } from \"./index\";\r\n\r\nexport type Middleware = (context: RouteGuardContext) => RouteGuardResult | Promise<RouteGuardResult>;\r\n\r\nexport type MiddlewareChain = {\r\n use: (middleware: Middleware) => MiddlewareChain;\r\n execute: (context: RouteGuardContext) => Promise<RouteGuardResult>;\r\n};\r\n\r\nexport function createMiddlewareChain(): MiddlewareChain {\r\n const middlewares: Middleware[] = [];\r\n\r\n return {\r\n use(middleware: Middleware) {\r\n middlewares.push(middleware);\r\n return this;\r\n },\r\n async execute(context: RouteGuardContext): Promise<RouteGuardResult> {\r\n for (const middleware of middlewares) {\r\n const result = await middleware(context);\r\n if (result !== undefined && result !== true) {\r\n return result;\r\n }\r\n }\r\n return true;\r\n },\r\n };\r\n}\r\n\r\nexport function createAuthMiddleware(isAuthenticated: () => boolean, redirectTo = \"/login\"): Middleware {\r\n return (context) => {\r\n if (!isAuthenticated()) {\r\n return redirectTo;\r\n }\r\n return true;\r\n };\r\n}\r\n\r\nexport function createRoleMiddleware(\r\n userRole: () => string | null,\r\n allowedRoles: string[],\r\n redirectTo = \"/unauthorized\",\r\n): Middleware {\r\n return (context) => {\r\n const role = userRole();\r\n if (!role || !allowedRoles.includes(role)) {\r\n return redirectTo;\r\n }\r\n return true;\r\n };\r\n}\r\n\r\nexport function createAnalyticsMiddleware(trackPageView: (path: string) => void): Middleware {\r\n return (context) => {\r\n trackPageView(context.to.path);\r\n return true;\r\n };\r\n}\r\n\r\nexport function createScrollMiddleware(scrollToTop = true): Middleware {\r\n return () => {\r\n if (scrollToTop && typeof window !== \"undefined\") {\r\n window.scrollTo({ top: 0, left: 0, behavior: \"auto\" });\r\n }\r\n return true;\r\n };\r\n}\r\n","import type { OlovaComponent } from \"olova/runtime\";\r\nimport { defineComponent } from \"olova/runtime\";\r\n\r\nexport type LazyComponentLoader = () => Promise<{ default: OlovaComponent }>;\r\n\r\nexport function lazyComponent(loader: LazyComponentLoader): OlovaComponent {\r\n let component: OlovaComponent | null = null;\r\n let loading = false;\r\n let error: Error | null = null;\r\n\r\n return defineComponent(() => {\r\n if (!component && !loading && !error) {\r\n loading = true;\r\n loader()\r\n .then((module) => {\r\n component = module.default;\r\n loading = false;\r\n })\r\n .catch((err) => {\r\n error = err;\r\n loading = false;\r\n });\r\n }\r\n\r\n if (error) {\r\n return {\r\n template: '<div class=\"router-error\">Failed to load component</div>',\r\n textBindings: [],\r\n htmlBindings: [],\r\n attrBindings: [],\r\n eventBindings: [],\r\n slotBindings: [],\r\n componentBindings: [],\r\n };\r\n }\r\n\r\n if (loading || !component) {\r\n return {\r\n template: '<div class=\"router-loading\">Loading...</div>',\r\n textBindings: [],\r\n htmlBindings: [],\r\n attrBindings: [],\r\n eventBindings: [],\r\n slotBindings: [],\r\n componentBindings: [],\r\n };\r\n }\r\n\r\n return {\r\n template: \"__O_COMP_lazy_component__\",\r\n textBindings: [],\r\n htmlBindings: [],\r\n attrBindings: [],\r\n eventBindings: [],\r\n slotBindings: [],\r\n componentBindings: [\r\n {\r\n id: \"lazy_component\",\r\n getComponent: () => component!,\r\n getProps: () => ({}),\r\n },\r\n ],\r\n };\r\n });\r\n}\r\n\r\nexport function lazyComponentWithFallback(\r\n loader: LazyComponentLoader,\r\n fallback: OlovaComponent,\r\n errorComponent?: OlovaComponent,\r\n): OlovaComponent {\r\n let component: OlovaComponent | null = null;\r\n let loading = false;\r\n let error: Error | null = null;\r\n\r\n return defineComponent(() => {\r\n if (!component && !loading && !error) {\r\n loading = true;\r\n loader()\r\n .then((module) => {\r\n component = module.default;\r\n loading = false;\r\n })\r\n .catch((err) => {\r\n error = err;\r\n loading = false;\r\n });\r\n }\r\n\r\n if (error && errorComponent) {\r\n return {\r\n template: \"__O_COMP_error_component__\",\r\n textBindings: [],\r\n htmlBindings: [],\r\n attrBindings: [],\r\n eventBindings: [],\r\n slotBindings: [],\r\n componentBindings: [\r\n {\r\n id: \"error_component\",\r\n getComponent: () => errorComponent,\r\n getProps: () => ({ error }),\r\n },\r\n ],\r\n };\r\n }\r\n\r\n if (loading || !component) {\r\n return {\r\n template: \"__O_COMP_fallback_component__\",\r\n textBindings: [],\r\n htmlBindings: [],\r\n attrBindings: [],\r\n eventBindings: [],\r\n slotBindings: [],\r\n componentBindings: [\r\n {\r\n id: \"fallback_component\",\r\n getComponent: () => fallback,\r\n getProps: () => ({}),\r\n },\r\n ],\r\n };\r\n }\r\n\r\n return {\r\n template: \"__O_COMP_lazy_component__\",\r\n textBindings: [],\r\n htmlBindings: [],\r\n attrBindings: [],\r\n eventBindings: [],\r\n slotBindings: [],\r\n componentBindings: [\r\n {\r\n id: \"lazy_component\",\r\n getComponent: () => component!,\r\n getProps: () => ({}),\r\n },\r\n ],\r\n };\r\n });\r\n}\r\n","import type { RouteTarget } from \"./index\";\r\n\r\ntype PrefetchOptions = {\r\n priority?: \"high\" | \"low\";\r\n};\r\n\r\nconst prefetchedRoutes = new Set<string>();\r\nconst prefetchQueue: Array<{ href: string; priority: \"high\" | \"low\" } | null> = [];\r\nlet isPrefetching = false;\r\n\r\nfunction stringifyTarget(target: RouteTarget): string {\r\n if (typeof target === \"string\") {\r\n return target;\r\n }\r\n\r\n const path = target.path ?? \"/\";\r\n const query = target.query\r\n ? Object.entries(target.query)\r\n .flatMap(([key, value]) => {\r\n if (value === null || value === undefined) {\r\n return [];\r\n }\r\n if (Array.isArray(value)) {\r\n return value.map((v) => `${key}=${encodeURIComponent(String(v))}`);\r\n }\r\n return `${key}=${encodeURIComponent(String(value))}`;\r\n })\r\n .join(\"&\")\r\n : \"\";\r\n\r\n const hash = target.hash ? `#${target.hash}` : \"\";\r\n return `${path}${query ? `?${query}` : \"\"}${hash}`;\r\n}\r\n\r\nasync function processPrefetchQueue(): Promise<void> {\r\n if (isPrefetching || prefetchQueue.length === 0) {\r\n return;\r\n }\r\n\r\n isPrefetching = true;\r\n\r\n while (prefetchQueue.length > 0) {\r\n const item = prefetchQueue.shift();\r\n if (!item) continue;\r\n\r\n const { href } = item;\r\n\r\n if (prefetchedRoutes.has(href)) {\r\n continue;\r\n }\r\n\r\n try {\r\n await fetch(href, { method: \"HEAD\" });\r\n prefetchedRoutes.add(href);\r\n } catch {\r\n // Silently fail prefetch\r\n }\r\n }\r\n\r\n isPrefetching = false;\r\n}\r\n\r\nexport function prefetchRoute(to: RouteTarget, options: PrefetchOptions = {}): void {\r\n if (typeof window === \"undefined\") {\r\n return;\r\n }\r\n\r\n const href = stringifyTarget(to);\r\n\r\n if (prefetchedRoutes.has(href)) {\r\n return;\r\n }\r\n\r\n const priority = options.priority ?? \"low\";\r\n prefetchQueue.push({ href, priority });\r\n\r\n // Sort by priority (high first)\r\n prefetchQueue.sort((a, b) => {\r\n if (!a || !b) return 0;\r\n if (a.priority === \"high\" && b.priority === \"low\") return -1;\r\n if (a.priority === \"low\" && b.priority === \"high\") return 1;\r\n return 0;\r\n });\r\n\r\n processPrefetchQueue();\r\n}\r\n\r\nexport function isPrefetched(to: RouteTarget): boolean {\r\n const href = stringifyTarget(to);\r\n return prefetchedRoutes.has(href);\r\n}\r\n\r\nexport function clearPrefetchCache(): void {\r\n prefetchedRoutes.clear();\r\n prefetchQueue.length = 0;\r\n}\r\n","import { state } from \"olova/core\";\r\nimport type { RouteQuery } from \"./index\";\r\n\r\ntype SearchParamsState = {\r\n params: URLSearchParams;\r\n query: RouteQuery;\r\n};\r\n\r\nconst searchParamsCache = new Map<string, SearchParamsState>();\r\n\r\nfunction parseSearchParams(search: string): RouteQuery {\r\n const params = new URLSearchParams(search);\r\n const query: RouteQuery = {};\r\n\r\n for (const [key, value] of params.entries()) {\r\n const existing = query[key];\r\n\r\n if (existing === undefined) {\r\n query[key] = value;\r\n continue;\r\n }\r\n\r\n query[key] = Array.isArray(existing) ? [...existing, value] : [existing, value];\r\n }\r\n\r\n return query;\r\n}\r\n\r\nexport function useSearchParams(): {\r\n get: (name: string) => string | null;\r\n getAll: (name: string) => string[];\r\n has: (name: string) => boolean;\r\n keys: () => string[];\r\n values: () => string[];\r\n entries: () => Array<[string, string]>;\r\n toString: () => string;\r\n} {\r\n if (typeof window === \"undefined\") {\r\n return {\r\n get: () => null,\r\n getAll: () => [],\r\n has: () => false,\r\n keys: () => [],\r\n values: () => [],\r\n entries: () => [],\r\n toString: () => \"\",\r\n };\r\n }\r\n\r\n const search = window.location.search;\r\n const cached = searchParamsCache.get(search);\r\n\r\n if (cached) {\r\n return {\r\n get: (name: string) => cached.params.get(name),\r\n getAll: (name: string) => cached.params.getAll(name),\r\n has: (name: string) => cached.params.has(name),\r\n keys: () => Array.from(cached.params.keys()),\r\n values: () => Array.from(cached.params.values()),\r\n entries: () => Array.from(cached.params.entries()),\r\n toString: () => cached.params.toString(),\r\n };\r\n }\r\n\r\n const params = new URLSearchParams(search);\r\n const query = parseSearchParams(search);\r\n\r\n searchParamsCache.set(search, { params, query });\r\n\r\n return {\r\n get: (name: string) => params.get(name),\r\n getAll: (name: string) => params.getAll(name),\r\n has: (name: string) => params.has(name),\r\n keys: () => Array.from(params.keys()),\r\n values: () => Array.from(params.values()),\r\n entries: () => Array.from(params.entries()),\r\n toString: () => params.toString(),\r\n };\r\n}\r\n\r\nexport function usePathname(): string {\r\n if (typeof window === \"undefined\") {\r\n return \"/\";\r\n }\r\n\r\n return window.location.pathname;\r\n}\r\n\r\nexport function useHash(): string {\r\n if (typeof window === \"undefined\") {\r\n return \"\";\r\n }\r\n\r\n return window.location.hash.replace(/^#/, \"\");\r\n}\r\n\r\nexport function clearSearchParamsCache(): void {\r\n searchParamsCache.clear();\r\n}\r\n","import { state } from \"olova/core\";\r\nimport type { RouteTarget } from \"./index\";\r\n\r\ntype TransitionState = \"idle\" | \"pending\" | \"success\" | \"error\";\r\n\r\ntype TransitionOptions = {\r\n onStart?: () => void;\r\n onSuccess?: () => void;\r\n onError?: (error: Error) => void;\r\n};\r\n\r\nconst transitionState = state<TransitionState>(\"idle\");\r\nconst isPendingNavigation = state(false);\r\nconst currentTransitionError = state<Error | null>(null);\r\n\r\nexport function useTransition(): {\r\n isPending: boolean;\r\n state: TransitionState;\r\n error: Error | null;\r\n} {\r\n return {\r\n isPending: isPendingNavigation.value,\r\n state: transitionState.value,\r\n error: currentTransitionError.value,\r\n };\r\n}\r\n\r\nexport function startTransition(callback: () => void | Promise<void>, options: TransitionOptions = {}): void {\r\n isPendingNavigation.value = true;\r\n transitionState.value = \"pending\";\r\n options.onStart?.();\r\n\r\n try {\r\n const result = callback();\r\n\r\n if (result instanceof Promise) {\r\n result\r\n .then(() => {\r\n isPendingNavigation.value = false;\r\n transitionState.value = \"success\";\r\n options.onSuccess?.();\r\n })\r\n .catch((error) => {\r\n isPendingNavigation.value = false;\r\n transitionState.value = \"error\";\r\n currentTransitionError.value = error;\r\n options.onError?.(error);\r\n });\r\n } else {\r\n isPendingNavigation.value = false;\r\n transitionState.value = \"success\";\r\n options.onSuccess?.();\r\n }\r\n } catch (error) {\r\n isPendingNavigation.value = false;\r\n transitionState.value = \"error\";\r\n const err = error instanceof Error ? error : new Error(String(error));\r\n currentTransitionError.value = err;\r\n options.onError?.(err);\r\n }\r\n}\r\n\r\nexport function resetTransition(): void {\r\n isPendingNavigation.value = false;\r\n transitionState.value = \"idle\";\r\n currentTransitionError.value = null;\r\n}\r\n","import type { OlovaComponent } from \"olova/runtime\";\r\n\r\ntype ErrorBoundaryState = {\r\n hasError: boolean;\r\n error: Error | null;\r\n};\r\n\r\nlet errorBoundaryState: ErrorBoundaryState = {\r\n hasError: false,\r\n error: null,\r\n};\r\n\r\nexport function captureError(error: Error): void {\r\n errorBoundaryState = {\r\n hasError: true,\r\n error,\r\n };\r\n}\r\n\r\nexport function clearError(): void {\r\n errorBoundaryState = {\r\n hasError: false,\r\n error: null,\r\n };\r\n}\r\n\r\nexport function getErrorBoundaryState(): ErrorBoundaryState {\r\n return { ...errorBoundaryState };\r\n}\r\n\r\nexport function hasError(): boolean {\r\n return errorBoundaryState.hasError;\r\n}\r\n\r\nexport function getError(): Error | null {\r\n return errorBoundaryState.error;\r\n}\r\n\r\n","import type { RouteLocation } from \"./index\";\r\n\r\nexport type RouteMetadata = {\r\n title?: string;\r\n description?: string;\r\n keywords?: string[];\r\n author?: string;\r\n robots?: string;\r\n viewport?: string;\r\n charset?: string;\r\n ogTitle?: string;\r\n ogDescription?: string;\r\n ogImage?: string;\r\n ogUrl?: string;\r\n ogType?: string;\r\n twitterCard?: string;\r\n twitterTitle?: string;\r\n twitterDescription?: string;\r\n twitterImage?: string;\r\n twitterCreator?: string;\r\n canonical?: string;\r\n [key: string]: unknown;\r\n};\r\n\r\ntype MetadataGenerator = (location: RouteLocation) => RouteMetadata | Promise<RouteMetadata>;\r\n\r\nconst metadataRegistry = new Map<string, RouteMetadata | MetadataGenerator>();\r\nconst metadataCache = new Map<string, RouteMetadata>();\r\n\r\nexport function registerRouteMetadata(path: string, metadata: RouteMetadata | MetadataGenerator): void {\r\n metadataRegistry.set(path, metadata);\r\n}\r\n\r\nexport async function getRouteMetadata(location: RouteLocation): Promise<RouteMetadata> {\r\n const cached = metadataCache.get(location.path);\r\n if (cached) {\r\n return cached;\r\n }\r\n\r\n const metadata = metadataRegistry.get(location.path);\r\n\r\n if (!metadata) {\r\n return {};\r\n }\r\n\r\n const resolved = typeof metadata === \"function\" ? await metadata(location) : metadata;\r\n metadataCache.set(location.path, resolved);\r\n\r\n return resolved;\r\n}\r\n\r\nexport function applyMetadata(metadata: RouteMetadata): void {\r\n if (typeof document === \"undefined\") {\r\n return;\r\n }\r\n\r\n // Update title\r\n if (metadata.title) {\r\n document.title = metadata.title;\r\n }\r\n\r\n // Update or create meta tags\r\n const metaTags = [\r\n { name: \"description\", content: metadata.description },\r\n { name: \"keywords\", content: Array.isArray(metadata.keywords) ? metadata.keywords.join(\", \") : metadata.keywords },\r\n { name: \"author\", content: metadata.author },\r\n { name: \"robots\", content: metadata.robots },\r\n { name: \"viewport\", content: metadata.viewport },\r\n { name: \"og:title\", content: metadata.ogTitle },\r\n { name: \"og:description\", content: metadata.ogDescription },\r\n { name: \"og:image\", content: metadata.ogImage },\r\n { name: \"og:url\", content: metadata.ogUrl },\r\n { name: \"og:type\", content: metadata.ogType },\r\n { name: \"twitter:card\", content: metadata.twitterCard },\r\n { name: \"twitter:title\", content: metadata.twitterTitle },\r\n { name: \"twitter:description\", content: metadata.twitterDescription },\r\n { name: \"twitter:image\", content: metadata.twitterImage },\r\n { name: \"twitter:creator\", content: metadata.twitterCreator },\r\n ];\r\n\r\n for (const tag of metaTags) {\r\n if (!tag.content) continue;\r\n\r\n let element = document.querySelector(`meta[name=\"${tag.name}\"]`);\r\n\r\n if (!element) {\r\n element = document.createElement(\"meta\");\r\n element.setAttribute(\"name\", tag.name);\r\n document.head.appendChild(element);\r\n }\r\n\r\n element.setAttribute(\"content\", String(tag.content));\r\n }\r\n\r\n // Update canonical link\r\n if (metadata.canonical) {\r\n let canonical = document.querySelector('link[rel=\"canonical\"]');\r\n\r\n if (!canonical) {\r\n canonical = document.createElement(\"link\");\r\n canonical.setAttribute(\"rel\", \"canonical\");\r\n document.head.appendChild(canonical);\r\n }\r\n\r\n canonical.setAttribute(\"href\", metadata.canonical);\r\n }\r\n\r\n // Apply charset if provided\r\n if (metadata.charset) {\r\n let charsetMeta = document.querySelector('meta[charset]');\r\n\r\n if (!charsetMeta) {\r\n charsetMeta = document.createElement(\"meta\");\r\n document.head.insertBefore(charsetMeta, document.head.firstChild);\r\n }\r\n\r\n charsetMeta.setAttribute(\"charset\", String(metadata.charset));\r\n }\r\n}\r\n\r\nexport function clearMetadataCache(): void {\r\n metadataCache.clear();\r\n}\r\n","import type { RouteParams } from \"./index\";\r\n\r\ntype RoutePattern = {\r\n pattern: string;\r\n isDynamic: boolean;\r\n isCatchAll: boolean;\r\n isOptionalCatchAll: boolean;\r\n paramNames: string[];\r\n};\r\n\r\nfunction parseRoutePattern(path: string): RoutePattern {\r\n const segments = path.split(\"/\").filter(Boolean);\r\n const paramNames: string[] = [];\r\n let isDynamic = false;\r\n let isCatchAll = false;\r\n let isOptionalCatchAll = false;\r\n\r\n for (const segment of segments) {\r\n if (segment.startsWith(\"[[...\") && segment.endsWith(\"]]\")) {\r\n isOptionalCatchAll = true;\r\n paramNames.push(segment.slice(5, -2));\r\n isDynamic = true;\r\n } else if (segment.startsWith(\"[...\") && segment.endsWith(\"]\")) {\r\n isCatchAll = true;\r\n paramNames.push(segment.slice(4, -1));\r\n isDynamic = true;\r\n } else if (segment.startsWith(\"[\") && segment.endsWith(\"]\")) {\r\n paramNames.push(segment.slice(1, -1));\r\n isDynamic = true;\r\n }\r\n }\r\n\r\n return {\r\n pattern: path,\r\n isDynamic,\r\n isCatchAll,\r\n isOptionalCatchAll,\r\n paramNames,\r\n };\r\n}\r\n\r\nfunction matchOptionalCatchAll(pattern: string, pathname: string): RouteParams | null {\r\n const patternSegments = pattern.split(\"/\").filter(Boolean);\r\n const pathSegments = pathname.split(\"/\").filter(Boolean);\r\n\r\n const params: RouteParams = {};\r\n let catchAllParam: string | null = null;\r\n let catchAllValues: string[] = [];\r\n\r\n for (let i = 0; i < patternSegments.length; i++) {\r\n const segment = patternSegments[i];\r\n\r\n if (segment.startsWith(\"[[...\") && segment.endsWith(\"]]\")) {\r\n catchAllParam = segment.slice(5, -2);\r\n catchAllValues = pathSegments.slice(i);\r\n break;\r\n }\r\n\r\n if (segment.startsWith(\"[\") && segment.endsWith(\"]\")) {\r\n const paramName = segment.slice(1, -1);\r\n if (i < pathSegments.length) {\r\n params[paramName] = decodeURIComponent(pathSegments[i]);\r\n } else {\r\n return null;\r\n }\r\n } else if (segment !== pathSegments[i]) {\r\n return null;\r\n }\r\n }\r\n\r\n if (catchAllParam) {\r\n if (catchAllValues.length > 0) {\r\n params[catchAllParam] = catchAllValues.map(decodeURIComponent).join(\"/\");\r\n }\r\n }\r\n\r\n return params;\r\n}\r\n\r\nfunction matchCatchAll(pattern: string, pathname: string): RouteParams | null {\r\n const patternSegments = pattern.split(\"/\").filter(Boolean);\r\n const pathSegments = pathname.split(\"/\").filter(Boolean);\r\n\r\n const params: RouteParams = {};\r\n let catchAllParam: string | null = null;\r\n let catchAllValues: string[] = [];\r\n\r\n for (let i = 0; i < patternSegments.length; i++) {\r\n const segment = patternSegments[i];\r\n\r\n if (segment.startsWith(\"[...\") && segment.endsWith(\"]\")) {\r\n catchAllParam = segment.slice(4, -1);\r\n catchAllValues = pathSegments.slice(i);\r\n break;\r\n }\r\n\r\n if (segment.startsWith(\"[\") && segment.endsWith(\"]\")) {\r\n const paramName = segment.slice(1, -1);\r\n if (i < pathSegments.length) {\r\n params[paramName] = decodeURIComponent(pathSegments[i]);\r\n } else {\r\n return null;\r\n }\r\n } else if (segment !== pathSegments[i]) {\r\n return null;\r\n }\r\n }\r\n\r\n if (catchAllParam && catchAllValues.length === 0) {\r\n return null;\r\n }\r\n\r\n if (catchAllParam) {\r\n params[catchAllParam] = catchAllValues.map(decodeURIComponent).join(\"/\");\r\n }\r\n\r\n return params;\r\n}\r\n\r\nexport function matchDynamicRoute(pattern: string, pathname: string): RouteParams | null {\r\n const parsed = parseRoutePattern(pattern);\r\n\r\n if (parsed.isOptionalCatchAll) {\r\n return matchOptionalCatchAll(pattern, pathname);\r\n }\r\n\r\n if (parsed.isCatchAll) {\r\n return matchCatchAll(pattern, pathname);\r\n }\r\n\r\n // Standard dynamic route matching\r\n const patternSegments = pattern.split(\"/\").filter(Boolean);\r\n const pathSegments = pathname.split(\"/\").filter(Boolean);\r\n\r\n if (patternSegments.length !== pathSegments.length) {\r\n return null;\r\n }\r\n\r\n const params: RouteParams = {};\r\n\r\n for (let i = 0; i < patternSegments.length; i++) {\r\n const segment = patternSegments[i];\r\n\r\n if (segment.startsWith(\"[\") && segment.endsWith(\"]\")) {\r\n const paramName = segment.slice(1, -1);\r\n params[paramName] = decodeURIComponent(pathSegments[i]);\r\n } else if (segment !== pathSegments[i]) {\r\n return null;\r\n }\r\n }\r\n\r\n return params;\r\n}\r\n\r\nexport function buildDynamicPath(pattern: string, params: RouteParams): string {\r\n const segments = pattern.split(\"/\").map((segment) => {\r\n if (segment.startsWith(\"[[...\") && segment.endsWith(\"]]\")) {\r\n const paramName = segment.slice(5, -2);\r\n const value = params[paramName];\r\n return value ? encodeURIComponent(String(value)) : \"\";\r\n }\r\n\r\n if (segment.startsWith(\"[...\") && segment.endsWith(\"]\")) {\r\n const paramName = segment.slice(4, -1);\r\n const value = params[paramName];\r\n return value ? encodeURIComponent(String(value)) : \"\";\r\n }\r\n\r\n if (segment.startsWith(\"[\") && segment.endsWith(\"]\")) {\r\n const paramName = segment.slice(1, -1);\r\n const value = params[paramName];\r\n return value ? encodeURIComponent(String(value)) : segment;\r\n }\r\n\r\n return segment;\r\n });\r\n\r\n return \"/\" + segments.filter(Boolean).join(\"/\");\r\n}\r\n\r\nexport { parseRoutePattern };\r\n","import type { OlovaComponent, OlovaProps } from \"olova/runtime\";\r\nimport type { RouteObject } from \"./index\";\r\n\r\ntype RouteGroup = {\r\n name: string;\r\n routes: RouteObject[];\r\n layout?: OlovaComponent;\r\n metadata?: Record<string, unknown>;\r\n};\r\n\r\nconst routeGroups = new Map<string, RouteGroup>();\r\n\r\nexport function createRouteGroup(name: string, routes: RouteObject[], options?: { layout?: OlovaComponent; metadata?: Record<string, unknown> }): RouteGroup {\r\n const group: RouteGroup = {\r\n name,\r\n routes,\r\n layout: options?.layout,\r\n metadata: options?.metadata,\r\n };\r\n\r\n routeGroups.set(name, group);\r\n return group;\r\n}\r\n\r\nexport function getRouteGroup(name: string): RouteGroup | undefined {\r\n return routeGroups.get(name);\r\n}\r\n\r\nexport function getAllRouteGroups(): RouteGroup[] {\r\n return Array.from(routeGroups.values());\r\n}\r\n\r\nexport function removeRouteGroup(name: string): boolean {\r\n return routeGroups.delete(name);\r\n}\r\n\r\nexport function mergeRouteGroups(...groupNames: string[]): RouteObject[] {\r\n const merged: RouteObject[] = [];\r\n\r\n for (const groupName of groupNames) {\r\n const group = routeGroups.get(groupName);\r\n if (group) {\r\n merged.push(...group.routes);\r\n }\r\n }\r\n\r\n return merged;\r\n}\r\n\r\nexport function clearRouteGroups(): void {\r\n routeGroups.clear();\r\n}\r\n","import { defineComponent, type OlovaComponent, type OlovaProps } from \"olova/runtime\";\r\n\r\ntype Slot = {\r\n name: string;\r\n component: OlovaComponent;\r\n props?: OlovaProps;\r\n};\r\n\r\ntype ParallelRoutesConfig = {\r\n slots: Record<string, OlovaComponent>;\r\n defaultSlots?: Record<string, OlovaComponent>;\r\n};\r\n\r\ntype ParallelRoutesProps = {\r\n slots: Record<string, OlovaComponent>;\r\n defaultSlots?: Record<string, OlovaComponent>;\r\n [key: string]: unknown;\r\n};\r\n\r\nexport function createParallelRoutes(config: ParallelRoutesConfig): OlovaComponent {\r\n return defineComponent((incomingProps) => {\r\n const props = incomingProps as ParallelRoutesProps;\r\n const slots = props.slots ?? config.slots;\r\n const defaultSlots = props.defaultSlots ?? config.defaultSlots ?? {};\r\n\r\n const slotEntries = Object.entries(slots);\r\n const componentBindings = slotEntries.map(([slotName, component]) => ({\r\n id: `slot_${slotName}`,\r\n getComponent: () => component,\r\n getProps: () => ({}),\r\n }));\r\n\r\n return {\r\n template: \"__O_COMP_parallel_routes__\",\r\n textBindings: [],\r\n htmlBindings: [],\r\n attrBindings: [],\r\n eventBindings: [],\r\n slotBindings: slotEntries.map(([slotName]) => ({\r\n id: `slot_${slotName}`,\r\n name: slotName,\r\n })),\r\n componentBindings,\r\n };\r\n });\r\n}\r\n\r\nexport function useSlot(slotName: string): OlovaComponent | null {\r\n // This would be implemented with context in a real scenario\r\n // For now, returning null as a placeholder\r\n return null;\r\n}\r\n\r\nexport function renderSlot(slot: Slot): OlovaComponent {\r\n return defineComponent(() => ({\r\n template: \"__O_COMP_slot__\",\r\n textBindings: [],\r\n htmlBindings: [],\r\n attrBindings: [],\r\n eventBindings: [],\r\n slotBindings: [],\r\n componentBindings: [\r\n {\r\n id: \"slot_content\",\r\n getComponent: () => slot.component,\r\n getProps: () => slot.props ?? {},\r\n },\r\n ],\r\n }));\r\n}\r\n\r\nexport function conditionalSlot(condition: boolean, trueSlot: OlovaComponent, falseSlot?: OlovaComponent): OlovaComponent {\r\n return condition ? trueSlot : falseSlot ?? defineComponent(() => ({\r\n template: \"\",\r\n textBindings: [],\r\n htmlBindings: [],\r\n attrBindings: [],\r\n eventBindings: [],\r\n slotBindings: [],\r\n componentBindings: [],\r\n }));\r\n}\r\n","import type { RouteTarget, RouteObject } from \"./index\";\r\n\r\ntype InterceptRule = {\r\n pattern: string;\r\n interceptor: string;\r\n level: \"same\" | \"parent\" | \"grandparent\" | \"root\";\r\n};\r\n\r\ntype InterceptConfig = {\r\n rules: InterceptRule[];\r\n};\r\n\r\nconst interceptRules = new Map<string, InterceptRule>();\r\n\r\nfunction levelToDepth(level: \"same\" | \"parent\" | \"grandparent\" | \"root\"): number {\r\n switch (level) {\r\n case \"same\":\r\n return 0;\r\n case \"parent\":\r\n return 1;\r\n case \"grandparent\":\r\n return 2;\r\n case \"root\":\r\n return Infinity;\r\n default:\r\n return 0;\r\n }\r\n}\r\n\r\nfunction getSegmentDepth(path: string): number {\r\n return path.split(\"/\").filter(Boolean).length;\r\n}\r\n\r\nfunction matchPattern(pattern: string, pathname: string): boolean {\r\n const patternSegments = pattern.split(\"/\").filter(Boolean);\r\n const pathSegments = pathname.split(\"/\").filter(Boolean);\r\n\r\n if (patternSegments.length > pathSegments.length) {\r\n return false;\r\n }\r\n\r\n for (let i = 0; i < patternSegments.length; i++) {\r\n const segment = patternSegments[i];\r\n\r\n if (segment === \"*\") {\r\n return true;\r\n }\r\n\r\n if (segment.startsWith(\"[\") && segment.endsWith(\"]\")) {\r\n continue;\r\n }\r\n\r\n if (segment !== pathSegments[i]) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport function registerInterceptRule(id: string, rule: InterceptRule): void {\r\n interceptRules.set(id, rule);\r\n}\r\n\r\nexport function getInterceptRule(id: string): InterceptRule | undefined {\r\n return interceptRules.get(id);\r\n}\r\n\r\nexport function findInterceptor(pathname: string, currentPath: string): InterceptRule | null {\r\n const currentDepth = getSegmentDepth(currentPath);\r\n\r\n for (const rule of interceptRules.values()) {\r\n if (!matchPattern(rule.pattern, pathname)) {\r\n continue;\r\n }\r\n\r\n const interceptorDepth = getSegmentDepth(rule.interceptor);\r\n const levelDepth = levelToDepth(rule.level);\r\n\r\n if (rule.level === \"same\" && interceptorDepth === currentDepth) {\r\n return rule;\r\n }\r\n\r\n if (rule.level === \"parent\" && interceptorDepth === currentDepth - levelDepth) {\r\n return rule;\r\n }\r\n\r\n if (rule.level === \"grandparent\" && interceptorDepth === currentDepth - levelDepth) {\r\n return rule;\r\n }\r\n\r\n if (rule.level === \"root\" && interceptorDepth === 0) {\r\n return rule;\r\n }\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport function removeInterceptRule(id: string): boolean {\r\n return interceptRules.delete(id);\r\n}\r\n\r\nexport function clearInterceptRules(): void {\r\n interceptRules.clear();\r\n}\r\n\r\nexport function getAllInterceptRules(): InterceptRule[] {\r\n return Array.from(interceptRules.values());\r\n}\r\n\r\nexport type { InterceptRule, InterceptConfig };\r\n","import { effect, state } from \"olova/core\";\nimport {\n defineComponent,\n getContext,\n hasContext,\n setContext,\n type OlovaComponent,\n type OlovaProps,\n} from \"olova/runtime\";\nimport Link from \"./Link\";\n\ntype RouterMode = \"auto\" | \"history\" | \"hash\";\ntype ResolvedMode = \"history\" | \"hash\";\ntype Primitive = string | number | boolean;\ntype RouteParams = Record<string, string>;\ntype RouteQueryValue = string | string[];\ntype RouteQuery = Record<string, RouteQueryValue>;\ntype RouteQueryInputValue = Primitive | Primitive[] | null | undefined;\ntype RouteQueryInput = Record<string, RouteQueryInputValue>;\ntype RouteTarget =\n | string\n | {\n name?: string;\n path?: string;\n params?: Record<string, Primitive>;\n query?: RouteQueryInput;\n hash?: string;\n };\ntype NavigateOptions = {\n replace?: boolean;\n scroll?: boolean;\n};\ntype MatchOptions = {\n exact?: boolean;\n};\ntype RouteMatchInfo = {\n name?: string;\n path: string;\n meta?: unknown;\n};\ntype RouteLocation = {\n name?: string;\n path: string;\n fullPath: string;\n href: string;\n params: RouteParams;\n query: RouteQuery;\n hash: string;\n meta?: unknown;\n matchedPath: string;\n matches: RouteMatchInfo[];\n};\ntype RouteGuardContext = {\n to: RouteLocation;\n from: RouteLocation | null;\n params: RouteParams;\n query: RouteQuery;\n};\ntype RouteGuardResult = boolean | string | RouteTarget | void;\ntype RouteGuard = (context: RouteGuardContext) => RouteGuardResult;\ntype RouteRedirect =\n | RouteTarget\n | ((context: RouteGuardContext) => RouteTarget | null | undefined);\ntype RoutePropsFactory = OlovaProps | ((context: RouteGuardContext) => OlovaProps);\ntype RouteObject = {\n path?: string;\n index?: boolean;\n component?: OlovaComponent;\n redirect?: RouteRedirect;\n props?: RoutePropsFactory;\n beforeEnter?: RouteGuard;\n name?: string;\n meta?: unknown;\n children?: RouteObject[];\n};\ntype RouteDefinition =\n | OlovaComponent\n | (Omit<RouteObject, \"path\" | \"index\"> & {\n children?: RouteObject[];\n });\ntype RouterRoutes = Record<string, RouteDefinition> | RouteObject[];\ntype RouterProps = {\n routes: RouterRoutes;\n mode?: RouterMode;\n base?: string;\n scroll?: boolean;\n};\n\ntype NormalizedRouteRecord = {\n name?: string;\n fullPath: string;\n pathTemplate: string;\n meta?: unknown;\n component?: OlovaComponent;\n redirect?: RouteRedirect;\n props?: RoutePropsFactory;\n beforeEnter?: RouteGuard;\n matcher: RegExp;\n paramNames: string[];\n score: number;\n order: number;\n};\n\ntype RouteBranch = {\n records: NormalizedRouteRecord[];\n matcher: RegExp;\n paramNames: string[];\n score: number;\n order: number;\n fullPath: string;\n};\n\ntype NormalizedRouteConfig = {\n branches: RouteBranch[];\n named: Map<string, NormalizedRouteRecord>;\n};\n\ntype RouteMatch = {\n record: NormalizedRouteRecord;\n props: OlovaProps;\n};\n\ntype ParsedTarget = {\n mode: ResolvedMode;\n path: string;\n search: string;\n hash: string;\n};\n\ntype RouteResolution = {\n mode: ResolvedMode;\n location: RouteLocation;\n component: OlovaComponent;\n props: OlovaProps;\n};\n\ntype OutletState = {\n component: OlovaComponent;\n props: OlovaProps;\n};\n\ntype RouterApi = {\n current: () => RouteResolution;\n readonly mode: ResolvedMode;\n readonly location: RouteLocation;\n readonly path: string;\n readonly fullPath: string;\n readonly params: RouteParams;\n readonly query: RouteQuery;\n readonly hash: string;\n readonly matchedPath: string;\n readonly matches: RouteMatchInfo[];\n push: (to: RouteTarget, options?: NavigateOptions) => void;\n navigate: (to: RouteTarget, options?: NavigateOptions) => void;\n replace: (to: RouteTarget, options?: Omit<NavigateOptions, \"replace\">) => void;\n back: () => void;\n forward: () => void;\n refresh: () => void;\n resolve: (to: RouteTarget) => string;\n href: (to: RouteTarget) => string;\n isActive: (to: RouteTarget, options?: MatchOptions) => boolean;\n};\n\nexport type {\n MatchOptions,\n NavigateOptions,\n RouteDefinition,\n RouteGuardContext,\n RouteGuardResult,\n RouteLocation,\n RouteMatchInfo,\n RouteObject,\n RouteParams,\n RouteQuery,\n RouteQueryInput,\n RouteTarget,\n RouterMode,\n RouterProps,\n RouterRoutes,\n};\n\nexport { generateBreadcrumbs, generateBreadcrumbsFromMatches } from \"./breadcrumbs\";\nexport type { Breadcrumb } from \"./breadcrumbs\";\n\nexport {\n createCompositeGuard,\n createConditionalGuard,\n createDebounceGuard,\n createParamGuard,\n createQueryGuard,\n} from \"./guards\";\nexport type { GuardCondition } from \"./guards\";\n\nexport { createRouterHistory } from \"./history\";\nexport type { HistoryEntry, RouterHistory } from \"./history\";\n\nexport {\n createAnalyticsMiddleware,\n createAuthMiddleware,\n createMiddlewareChain,\n createRoleMiddleware,\n createScrollMiddleware,\n} from \"./middleware\";\nexport type { Middleware, MiddlewareChain } from \"./middleware\";\n\nexport { lazyComponent, lazyComponentWithFallback } from \"./lazy\";\nexport type { LazyComponentLoader } from \"./lazy\";\n\nconst ROUTER_CONTEXT = Symbol.for(\"olova.router\");\nconst OUTLET_CONTEXT = Symbol.for(\"olova.router.outlet\");\nconst EMPTY_PROPS = Object.freeze({}) as OlovaProps;\nconst EMPTY_QUERY = Object.freeze({}) as RouteQuery;\nconst EMPTY_MATCHES = Object.freeze([]) as unknown as RouteMatchInfo[];\nconst EMPTY_LOCATION: RouteLocation = {\n path: \"/\",\n fullPath: \"/\",\n href: \"/\",\n params: {},\n query: EMPTY_QUERY,\n hash: \"\",\n matchedPath: \"*\",\n matches: EMPTY_MATCHES,\n};\nconst EMPTY_OUTLET: OutletState = {\n component: defineComponent(() => ({\n template: \"\",\n textBindings: [],\n htmlBindings: [],\n attrBindings: [],\n eventBindings: [],\n slotBindings: [],\n componentBindings: [],\n })),\n props: EMPTY_PROPS,\n};\n\nlet activeRouter: RouterApi | null = null;\n\nfunction escapeRegex(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nfunction normalizeBase(base = \"/\"): string {\n if (!base || base === \"/\") {\n return \"/\";\n }\n\n return `/${base.replace(/^\\/+|\\/+$/g, \"\")}`;\n}\n\nfunction normalizePath(path = \"/\"): string {\n if (!path) {\n return \"/\";\n }\n\n const [pathname, suffix = \"\"] = path.split(/(?=[?#])/u, 2);\n const cleaned = pathname.replace(/\\/{2,}/g, \"/\").replace(/\\/+$/g, \"\") || \"/\";\n return cleaned.startsWith(\"/\") ? `${cleaned}${suffix}` : `/${cleaned}${suffix}`;\n}\n\nfunction joinPaths(parentPath: string, childPath: string | undefined, index = false): string {\n if (index) {\n return parentPath || \"/\";\n }\n\n if (!childPath || childPath === \"/\") {\n return parentPath || \"/\";\n }\n\n if (childPath.startsWith(\"/\")) {\n return normalizePath(childPath);\n }\n\n const parent = parentPath === \"/\" ? \"\" : parentPath;\n return normalizePath(`${parent}/${childPath}`);\n}\n\nfunction stripBase(pathname: string, base: string): string {\n if (base === \"/\") {\n return normalizePath(pathname);\n }\n\n if (pathname === base) {\n return \"/\";\n }\n\n if (pathname.startsWith(`${base}/`)) {\n return normalizePath(pathname.slice(base.length));\n }\n\n return normalizePath(pathname);\n}\n\nfunction splitRoutePath(path: string): string[] {\n return normalizePath(path).split(\"?\")[0].split(\"#\")[0].split(\"/\").filter(Boolean);\n}\n\nfunction compilePath(path: string): Pick<NormalizedRouteRecord, \"matcher\" | \"paramNames\" | \"score\"> {\n if (path === \"*\") {\n return {\n matcher: /^.*$/u,\n paramNames: [\"wild\"],\n score: -1000,\n };\n }\n\n const segments = splitRoutePath(path);\n if (segments.length === 0) {\n return {\n matcher: /^\\/?$/u,\n paramNames: [],\n score: 100,\n };\n }\n\n const paramNames: string[] = [];\n let pattern = \"^\";\n let score = 0;\n\n for (const segment of segments) {\n if (segment === \"*\") {\n paramNames.push(\"wild\");\n pattern += \"(?:/(.*))?\";\n score -= 20;\n continue;\n }\n\n if (segment.startsWith(\":\")) {\n const rawName = segment.slice(1);\n const repeat = rawName.endsWith(\"*\");\n const paramName = repeat ? rawName.slice(0, -1) : rawName;\n paramNames.push(paramName);\n pattern += repeat ? \"(?:/(.*))?\" : \"/([^/]+)\";\n score += repeat ? 4 : 8;\n continue;\n }\n\n pattern += `/${escapeRegex(segment)}`;\n score += 12;\n }\n\n pattern += \"/?$\";\n\n return {\n matcher: new RegExp(pattern, \"u\"),\n paramNames,\n score,\n };\n}\n\nfunction queryToSearch(query?: RouteQueryInput): string {\n if (!query) {\n return \"\";\n }\n\n const searchParams = new URLSearchParams();\n\n for (const [key, rawValue] of Object.entries(query)) {\n if (rawValue === undefined || rawValue === null) {\n continue;\n }\n\n if (Array.isArray(rawValue)) {\n for (const value of rawValue) {\n searchParams.append(key, String(value));\n }\n continue;\n }\n\n searchParams.set(key, String(rawValue));\n }\n\n const serialized = searchParams.toString();\n return serialized ? `?${serialized}` : \"\";\n}\n\nfunction parseQuery(searchParams: URLSearchParams): RouteQuery {\n const query: RouteQuery = {};\n\n for (const [key, value] of searchParams.entries()) {\n const existing = query[key];\n\n if (existing === undefined) {\n query[key] = value;\n continue;\n }\n\n query[key] = Array.isArray(existing) ? [...existing, value] : [existing, value];\n }\n\n return query;\n}\n\nfunction parseHashRoute(hash: string): { path: string; search: string } {\n const rawHash = hash.startsWith(\"#\") ? hash.slice(1) : hash;\n\n if (!rawHash) {\n return { path: \"/\", search: \"\" };\n }\n\n const normalized = rawHash.startsWith(\"/\") ? rawHash : `/${rawHash}`;\n const parsed = new URL(normalized, \"http://olova-router.local\");\n\n return {\n path: normalizePath(parsed.pathname),\n search: parsed.search,\n };\n}\n\nfunction normalizeRouteDefinition(definition: RouteDefinition): RouteObject {\n if (typeof definition === \"object\" && definition !== null && \"setup\" in definition === false) {\n return definition as RouteObject;\n }\n\n return {\n component: definition as OlovaComponent,\n };\n}\n\nfunction normalizeRouteObjects(routes: RouterRoutes): RouteObject[] {\n if (Array.isArray(routes)) {\n return routes;\n }\n\n return Object.entries(routes).map(([path, definition]) => ({\n path,\n ...normalizeRouteDefinition(definition),\n }));\n}\n\nfunction buildRouteConfig(routes: RouterRoutes): NormalizedRouteConfig {\n const named = new Map<string, NormalizedRouteRecord>();\n const branches: RouteBranch[] = [];\n let order = 0;\n\n const walk = (records: RouteObject[], parentPath: string, chain: NormalizedRouteRecord[]) => {\n for (const record of records) {\n const fullPath = joinPaths(parentPath, record.path, record.index === true);\n const compiled = compilePath(fullPath);\n const normalized: NormalizedRouteRecord = {\n name: record.name,\n fullPath,\n pathTemplate: fullPath,\n meta: record.meta,\n component: record.component,\n redirect: record.redirect,\n props: record.props,\n beforeEnter: record.beforeEnter,\n matcher: compiled.matcher,\n paramNames: compiled.paramNames,\n score: compiled.score,\n order: order++,\n };\n\n if (normalized.name) {\n named.set(normalized.name, normalized);\n }\n\n const nextChain = [...chain, normalized];\n\n if (normalized.component || normalized.redirect) {\n branches.push({\n records: nextChain,\n matcher: compiled.matcher,\n paramNames: compiled.paramNames,\n score: compiled.score + nextChain.length,\n order: normalized.order,\n fullPath,\n });\n }\n\n if (record.children?.length) {\n walk(record.children, fullPath, nextChain);\n }\n }\n };\n\n walk(normalizeRouteObjects(routes), \"/\", []);\n\n branches.sort((left, right) => right.score - left.score || left.order - right.order);\n\n return {\n branches,\n named,\n };\n}\n\nfunction buildPathFromTemplate(template: string, params?: Record<string, Primitive>): string {\n const resolvedParams = params ?? {};\n\n if (template === \"*\") {\n return String(resolvedParams.wild ?? \"/\");\n }\n\n const segments = splitRoutePath(template).map((segment) => {\n if (segment === \"*\") {\n return encodeURIComponent(String(resolvedParams.wild ?? \"\"));\n }\n\n if (!segment.startsWith(\":\")) {\n return segment;\n }\n\n const rawName = segment.slice(1);\n const repeat = rawName.endsWith(\"*\");\n const name = repeat ? rawName.slice(0, -1) : rawName;\n const value = resolvedParams[name];\n\n if (value === undefined || value === null) {\n throw new Error(`[olova-router] Missing route param \"${name}\" for \"${template}\".`);\n }\n\n if (repeat) {\n return String(value)\n .split(\"/\")\n .map((part) => encodeURIComponent(part))\n .join(\"/\");\n }\n\n return encodeURIComponent(String(value));\n });\n\n return normalizePath(`/${segments.join(\"/\")}`);\n}\n\nexport function matchPath(pattern: string, path: string): RouteParams | null {\n const compiled = compilePath(pattern);\n const matched = compiled.matcher.exec(normalizePath(path));\n\n if (!matched) {\n return null;\n }\n\n const params: RouteParams = {};\n compiled.paramNames.forEach((paramName, index) => {\n params[paramName] = decodeURIComponent(matched[index + 1] ?? \"\");\n });\n\n return params;\n}\n\nfunction resolveCurrentTarget(mode: RouterMode, base: string): ParsedTarget {\n const url = new URL(window.location.href);\n const resolvedMode: ResolvedMode =\n mode === \"auto\"\n ? (url.hash.startsWith(\"#/\") || url.hash.startsWith(\"#!/\") ? \"hash\" : \"history\")\n : mode;\n\n if (resolvedMode === \"hash\") {\n const hashRoute = parseHashRoute(url.hash);\n return {\n mode: \"hash\",\n path: hashRoute.path,\n search: hashRoute.search,\n hash: \"\",\n };\n }\n\n return {\n mode: \"history\",\n path: stripBase(url.pathname, base),\n search: url.search,\n hash: url.hash,\n };\n}\n\nfunction resolveTarget(\n to: RouteTarget,\n mode: RouterMode,\n base: string,\n named: Map<string, NormalizedRouteRecord>,\n): ParsedTarget {\n if (typeof to === \"string\") {\n if (to.startsWith(\"#/\") || to.startsWith(\"#!/\")) {\n const parsedHash = parseHashRoute(to);\n return {\n mode: \"hash\",\n path: parsedHash.path,\n search: parsedHash.search,\n hash: \"\",\n };\n }\n\n const url = new URL(to, window.location.href);\n\n if (url.origin !== window.location.origin) {\n window.location.assign(url.href);\n return resolveCurrentTarget(mode, base);\n }\n\n if (url.hash.startsWith(\"#/\") || url.hash.startsWith(\"#!/\")) {\n const parsedHash = parseHashRoute(url.hash);\n return {\n mode: \"hash\",\n path: parsedHash.path,\n search: parsedHash.search,\n hash: \"\",\n };\n }\n\n return {\n mode: mode === \"auto\" ? \"history\" : mode === \"hash\" ? \"hash\" : \"history\",\n path: stripBase(url.pathname, base),\n search: url.search,\n hash: url.hash,\n };\n }\n\n const targetMode: ResolvedMode = mode === \"auto\" ? \"history\" : mode === \"hash\" ? \"hash\" : \"history\";\n const record = to.name ? named.get(to.name) : null;\n\n if (to.name && !record) {\n throw new Error(`[olova-router] Unknown route name \"${to.name}\".`);\n }\n\n const targetPath = record\n ? buildPathFromTemplate(record.pathTemplate, to.params)\n : buildPathFromTemplate(to.path ?? \"/\", to.params);\n\n return {\n mode: targetMode,\n path: targetPath,\n search: queryToSearch(to.query),\n hash: to.hash ? `#${String(to.hash).replace(/^#/, \"\")}` : \"\",\n };\n}\n\nfunction stringifyTarget(target: ParsedTarget, base: string): string {\n if (target.mode === \"hash\") {\n const root = base === \"/\" ? \"\" : base;\n return `${root}/#${target.path}${target.search}`;\n }\n\n const rootedPath = base === \"/\" ? target.path : `${base}${target.path === \"/\" ? \"\" : target.path}`;\n return `${rootedPath}${target.search}${target.hash}`;\n}\n\nfunction resolveProps(source: RoutePropsFactory | undefined, context: RouteGuardContext): OlovaProps {\n if (!source) {\n return EMPTY_PROPS;\n }\n\n return typeof source === \"function\" ? source(context) : source;\n}\n\nfunction matchBranch(path: string, branches: RouteBranch[]): { branch: RouteBranch | null; params: RouteParams } {\n for (const branch of branches) {\n const matched = branch.matcher.exec(path);\n if (!matched) {\n continue;\n }\n\n const params: RouteParams = {};\n branch.paramNames.forEach((paramName, index) => {\n params[paramName] = decodeURIComponent(matched[index + 1] ?? \"\");\n });\n\n return { branch, params };\n }\n\n return { branch: null, params: {} };\n}\n\nfunction buildLocation(branch: RouteBranch | null, parsed: ParsedTarget, params: RouteParams): RouteLocation {\n const searchParams = new URLSearchParams(parsed.search);\n const fullPath = `${parsed.path}${parsed.search}${parsed.hash}`;\n const matches = branch\n ? branch.records.map((record) => ({\n name: record.name,\n path: record.fullPath,\n meta: record.meta,\n }))\n : EMPTY_MATCHES;\n const leaf = branch?.records[branch.records.length - 1];\n\n return {\n name: leaf?.name,\n path: parsed.path,\n fullPath,\n href: fullPath || \"/\",\n params,\n query: parseQuery(searchParams),\n hash: parsed.hash.startsWith(\"#\") ? parsed.hash.slice(1) : parsed.hash,\n meta: leaf?.meta,\n matchedPath: leaf?.fullPath ?? \"*\",\n matches,\n };\n}\n\nfunction createMatchHost(match: RouteMatch, outlet: OutletState): OlovaComponent {\n return defineComponent(() => {\n setContext(OUTLET_CONTEXT, outlet);\n\n return {\n template: \"__O_COMP_nested_match__\",\n textBindings: [],\n htmlBindings: [],\n attrBindings: [],\n eventBindings: [],\n slotBindings: [],\n componentBindings: [\n {\n id: \"nested_match\",\n getComponent: () => match.record.component ?? EMPTY_OUTLET.component,\n getProps: () => match.props,\n },\n ],\n };\n });\n}\n\nfunction createComponentChain(matches: RouteMatch[]): OlovaComponent {\n if (matches.length === 0) {\n return EMPTY_OUTLET.component;\n }\n\n let outlet = EMPTY_OUTLET;\n\n for (let index = matches.length - 1; index >= 0; index -= 1) {\n outlet = {\n component: createMatchHost(matches[index], outlet),\n props: EMPTY_PROPS,\n };\n }\n\n return outlet.component;\n}\n\nfunction resolveRoute(\n config: NormalizedRouteConfig,\n parsed: ParsedTarget,\n from: RouteLocation | null,\n base: string,\n depth = 0,\n): RouteResolution {\n if (depth > 10) {\n throw new Error(\"[olova-router] Too many redirects while resolving a route.\");\n }\n\n const found = matchBranch(parsed.path, config.branches);\n const location = buildLocation(found.branch, parsed, found.params);\n const context: RouteGuardContext = {\n to: location,\n from,\n params: location.params,\n query: location.query,\n };\n\n const leaf = found.branch?.records[found.branch.records.length - 1];\n const redirect = typeof leaf?.redirect === \"function\" ? leaf.redirect(context) : leaf?.redirect;\n\n if (redirect) {\n return resolveRoute(config, resolveTarget(redirect, parsed.mode, base, config.named), from, base, depth + 1);\n }\n\n const guardResult = leaf?.beforeEnter?.(context);\n\n if (guardResult === false && from) {\n return {\n mode: parsed.mode,\n location: from,\n component: EMPTY_OUTLET.component,\n props: EMPTY_PROPS,\n };\n }\n\n if (guardResult && guardResult !== true) {\n return resolveRoute(config, resolveTarget(guardResult, parsed.mode, base, config.named), from, base, depth + 1);\n }\n\n const matches: RouteMatch[] = (found.branch?.records ?? [])\n .filter((record) => !!record.component)\n .map((record) => ({\n record,\n props: {\n ...resolveProps(record.props, context),\n ...location.params,\n route: location,\n router: activeRouter,\n params: location.params,\n query: location.query,\n matches: location.matches,\n navigate,\n },\n }));\n\n return {\n mode: parsed.mode,\n location,\n component: createComponentChain(matches),\n props: EMPTY_PROPS,\n };\n}\n\nfunction scrollToTop(): void {\n window.scrollTo({ top: 0, left: 0, behavior: \"auto\" });\n}\n\nfunction scrollToHash(hash: string): boolean {\n if (typeof document === \"undefined\") {\n return false;\n }\n\n const normalizedHash = hash.replace(/^#/, \"\");\n if (!normalizedHash) {\n return false;\n }\n\n const target = document.getElementById(decodeURIComponent(normalizedHash));\n if (!target) {\n return false;\n }\n\n target.scrollIntoView({ block: \"start\", inline: \"nearest\", behavior: \"auto\" });\n return true;\n}\n\nfunction applyScroll(hash: string, enabled: boolean): void {\n if (!enabled) {\n return;\n }\n\n if (hash) {\n requestAnimationFrame(() => {\n if (!scrollToHash(hash)) {\n scrollToTop();\n }\n });\n return;\n }\n\n scrollToTop();\n}\n\nfunction shouldIgnoreClick(event: MouseEvent, anchor: HTMLAnchorElement | null): boolean {\n if (!anchor) {\n return true;\n }\n\n if (event.defaultPrevented || event.button !== 0) {\n return true;\n }\n\n if (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) {\n return true;\n }\n\n if (anchor.target && anchor.target !== \"_self\") {\n return true;\n }\n\n if (anchor.hasAttribute(\"download\")) {\n return true;\n }\n\n const rel = anchor.getAttribute(\"rel\");\n if (rel && /\\bexternal\\b/u.test(rel)) {\n return true;\n }\n\n const href = anchor.getAttribute(\"href\");\n return !href || href.startsWith(\"mailto:\") || href.startsWith(\"tel:\");\n}\n\nfunction resolveAnchor(event: Event): HTMLAnchorElement | null {\n const target = event.target;\n\n if (!(target instanceof Node)) {\n return null;\n }\n\n const element = target instanceof Element ? target : target.parentElement;\n if (!element) {\n return null;\n }\n\n return element.closest(\"a[href]\");\n}\n\nfunction runNavigation(to: RouteTarget, options: NavigateOptions = {}): void {\n if (!activeRouter || typeof window === \"undefined\") {\n if (typeof to === \"string\") {\n window.location.assign(to);\n }\n return;\n }\n\n activeRouter.navigate(to, options);\n}\n\nexport function navigate(to: RouteTarget, options?: NavigateOptions): void {\n runNavigation(to, options);\n}\n\nexport function link(toOrEvent?: RouteTarget | Event, options?: NavigateOptions): ((event?: Event) => void) | void {\n if (\n typeof toOrEvent === \"string\" ||\n (typeof toOrEvent === \"object\" &&\n toOrEvent !== null &&\n !(toOrEvent instanceof Event) &&\n \"target\" in toOrEvent === false)\n ) {\n return (event?: Event) => {\n event?.preventDefault();\n runNavigation(toOrEvent as RouteTarget, options);\n };\n }\n\n const event = toOrEvent as Event | undefined;\n\n if (!event) {\n return;\n }\n\n const anchor = resolveAnchor(event);\n\n if (event instanceof MouseEvent && shouldIgnoreClick(event, anchor)) {\n return;\n }\n\n const href = anchor?.getAttribute(\"href\");\n if (!href) {\n return;\n }\n\n event.preventDefault();\n runNavigation(href, options);\n}\n\nexport function useRouter(): RouterApi {\n if (!hasContext(ROUTER_CONTEXT)) {\n throw new Error(\"[olova-router] useRouter() must be used inside a routed component.\");\n }\n\n return getContext<RouterApi>(ROUTER_CONTEXT);\n}\n\nexport function useRoute(): RouteLocation {\n return useRouter().location;\n}\n\nexport function useParams(): RouteParams {\n return useRouter().params;\n}\n\nexport function useQuery(): RouteQuery {\n return useRouter().query;\n}\n\nexport function resolveHref(to: RouteTarget): string {\n return activeRouter?.resolve(to) ?? (typeof to === \"string\" ? to : to.path ?? \"/\");\n}\n\nexport function isActiveHref(to: RouteTarget, options?: MatchOptions): boolean {\n return activeRouter?.isActive(to, options) ?? false;\n}\n\nexport const Outlet = defineComponent(() => {\n const outlet = hasContext(OUTLET_CONTEXT) ? getContext<OutletState>(OUTLET_CONTEXT) : EMPTY_OUTLET;\n\n return {\n template: \"__O_COMP_outlet__\",\n textBindings: [],\n htmlBindings: [],\n attrBindings: [],\n eventBindings: [],\n slotBindings: [],\n componentBindings: [\n {\n id: \"outlet\",\n getComponent: () => outlet.component,\n getProps: () => outlet.props,\n },\n ],\n };\n});\n\nfunction createRouterVariant(mode: ResolvedMode): OlovaComponent {\n return defineComponent((incomingProps) => ({\n template: \"__O_COMP_router_variant__\",\n textBindings: [],\n htmlBindings: [],\n attrBindings: [],\n eventBindings: [],\n slotBindings: [],\n componentBindings: [\n {\n id: \"router_variant\",\n getComponent: () => Router,\n getProps: () => ({\n ...(incomingProps as RouterProps),\n mode,\n }),\n },\n ],\n }));\n}\n\nconst Router = defineComponent((incomingProps) => {\n const props = incomingProps as RouterProps;\n const base = normalizeBase(props.base);\n const config = buildRouteConfig(props.routes ?? {});\n const currentVersion = state(0);\n let currentRoute: RouteResolution = {\n mode: \"history\",\n location: EMPTY_LOCATION,\n component: EMPTY_OUTLET.component,\n props: EMPTY_PROPS,\n };\n\n const setCurrentRoute = (next: RouteResolution) => {\n currentRoute = next;\n currentVersion.value = currentVersion.peek() + 1;\n };\n\n const readCurrentRoute = () => {\n currentVersion.value;\n return currentRoute;\n };\n\n const api: RouterApi = {\n current: () => readCurrentRoute(),\n get mode() {\n return readCurrentRoute().mode;\n },\n get location() {\n return readCurrentRoute().location;\n },\n get path() {\n return readCurrentRoute().location.path;\n },\n get fullPath() {\n return readCurrentRoute().location.fullPath;\n },\n get params() {\n return readCurrentRoute().location.params;\n },\n get query() {\n return readCurrentRoute().location.query;\n },\n get hash() {\n return readCurrentRoute().location.hash;\n },\n get matchedPath() {\n return readCurrentRoute().location.matchedPath;\n },\n get matches() {\n return readCurrentRoute().location.matches;\n },\n push(to, options = {}) {\n const parsed = resolveTarget(to, props.mode ?? \"auto\", base, config.named);\n const next = resolveRoute(config, parsed, currentRoute.location, base);\n const href = stringifyTarget(parsed, base);\n const method = options.replace ? \"replaceState\" : \"pushState\";\n\n if (parsed.mode === \"hash\") {\n const targetHash = href.includes(\"#\") ? href.slice(href.indexOf(\"#\")) : \"\";\n\n if (options.replace) {\n const nextUrl = `${window.location.pathname}${window.location.search}${targetHash}`;\n window.history.replaceState({}, \"\", nextUrl);\n } else {\n window.location.hash = targetHash.slice(1);\n }\n } else {\n window.history[method]({}, \"\", href);\n }\n\n setCurrentRoute(next);\n\n applyScroll(parsed.hash, options.scroll ?? props.scroll ?? true);\n },\n navigate(to, options = {}) {\n this.push(to, options);\n },\n replace(to, options = {}) {\n this.push(to, { ...options, replace: true });\n },\n back() {\n window.history.back();\n },\n forward() {\n window.history.forward();\n },\n refresh() {\n syncFromWindow(false);\n },\n resolve(to) {\n return stringifyTarget(resolveTarget(to, props.mode ?? \"auto\", base, config.named), base);\n },\n href(to) {\n return this.resolve(to);\n },\n isActive(to, options = {}) {\n const parsed = resolveTarget(to, props.mode ?? \"auto\", base, config.named);\n const current = readCurrentRoute().location.path;\n\n if (options.exact) {\n return current === parsed.path;\n }\n\n return current === parsed.path || current.startsWith(`${parsed.path}/`);\n },\n };\n\n const syncFromWindow = (replace = true) => {\n const target = resolveCurrentTarget(props.mode ?? \"auto\", base);\n const next = resolveRoute(config, target, currentRoute.location ?? null, base);\n setCurrentRoute(next);\n\n if (replace) {\n const href = stringifyTarget(target, base);\n window.history.replaceState({}, \"\", href);\n }\n\n applyScroll(target.hash, props.scroll ?? true);\n };\n\n setContext(ROUTER_CONTEXT, api);\n activeRouter = api;\n\n if (typeof window !== \"undefined\") {\n syncFromWindow(false);\n\n effect(() => {\n const handleChange = () => syncFromWindow(false);\n const handleClick = (event: Event) => {\n if (!(event instanceof MouseEvent)) {\n return;\n }\n\n const anchor = resolveAnchor(event);\n if (shouldIgnoreClick(event, anchor)) {\n return;\n }\n\n const href = anchor?.getAttribute(\"href\");\n if (!href) {\n return;\n }\n\n event.preventDefault();\n api.navigate(href);\n };\n\n window.addEventListener(\"popstate\", handleChange);\n window.addEventListener(\"hashchange\", handleChange);\n document.addEventListener(\"click\", handleClick, true);\n\n return () => {\n if (activeRouter === api) {\n activeRouter = null;\n }\n\n window.removeEventListener(\"popstate\", handleChange);\n window.removeEventListener(\"hashchange\", handleChange);\n document.removeEventListener(\"click\", handleClick, true);\n };\n });\n }\n\n return {\n template: \"__O_COMP_router_view__\",\n textBindings: [],\n htmlBindings: [],\n attrBindings: [],\n eventBindings: [],\n slotBindings: [],\n componentBindings: [\n {\n id: \"router_view\",\n getComponent: () => {\n currentVersion.value;\n return currentRoute.component;\n },\n getProps: () => currentRoute.props,\n },\n ],\n };\n});\n\nconst BrowserRouter = createRouterVariant(\"history\");\nconst HashRouter = createRouterVariant(\"hash\");\n\nexport default Router;\nexport { BrowserRouter, HashRouter, Link };\n\n// Prefetch features\nexport { prefetchRoute, isPrefetched, clearPrefetchCache } from \"./prefetch\";\n\n// Search params and pathname hooks\nexport { useSearchParams, usePathname, useHash, clearSearchParamsCache } from \"./search-params\";\n\n// Route transitions\nexport { useTransition, startTransition, resetTransition } from \"./transitions\";\n\n// Error boundary\nexport { captureError, clearError, getErrorBoundaryState, hasError, getError } from \"./error-boundary\";\n\n// Metadata management\nexport { registerRouteMetadata, getRouteMetadata, applyMetadata, clearMetadataCache } from \"./metadata\";\n\n// Dynamic routes (catch-all and optional catch-all)\nexport { matchDynamicRoute, buildDynamicPath, parseRoutePattern } from \"./dynamic-routes\";\n\n// Route groups\nexport {\n createRouteGroup,\n getRouteGroup,\n getAllRouteGroups,\n removeRouteGroup,\n mergeRouteGroups,\n clearRouteGroups,\n} from \"./route-groups\";\n\n// Parallel routes\nexport { createParallelRoutes, useSlot, renderSlot, conditionalSlot } from \"./parallel-routes\";\n\n// Intercepting routes\nexport {\n registerInterceptRule,\n getInterceptRule,\n findInterceptor,\n removeInterceptRule,\n clearInterceptRules,\n getAllInterceptRules,\n} from \"./intercepting-routes\";\nexport type { InterceptRule, InterceptConfig } from \"./intercepting-routes\";\n"]}
|
package/dist/lazy.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { OlovaComponent } from 'olova/runtime';
|
|
2
|
+
|
|
3
|
+
type LazyComponentLoader = () => Promise<{
|
|
4
|
+
default: OlovaComponent;
|
|
5
|
+
}>;
|
|
6
|
+
declare function lazyComponent(loader: LazyComponentLoader): OlovaComponent;
|
|
7
|
+
declare function lazyComponentWithFallback(loader: LazyComponentLoader, fallback: OlovaComponent, errorComponent?: OlovaComponent): OlovaComponent;
|
|
8
|
+
|
|
9
|
+
export { type LazyComponentLoader, lazyComponent, lazyComponentWithFallback };
|
package/dist/lazy.js
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { defineComponent } from 'olova/runtime';
|
|
2
|
+
|
|
3
|
+
// src/lazy.ts
|
|
4
|
+
function lazyComponent(loader) {
|
|
5
|
+
let component = null;
|
|
6
|
+
let loading = false;
|
|
7
|
+
let error = null;
|
|
8
|
+
return defineComponent(() => {
|
|
9
|
+
if (!component && !loading && !error) {
|
|
10
|
+
loading = true;
|
|
11
|
+
loader().then((module) => {
|
|
12
|
+
component = module.default;
|
|
13
|
+
loading = false;
|
|
14
|
+
}).catch((err) => {
|
|
15
|
+
error = err;
|
|
16
|
+
loading = false;
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
if (error) {
|
|
20
|
+
return {
|
|
21
|
+
template: '<div class="router-error">Failed to load component</div>',
|
|
22
|
+
textBindings: [],
|
|
23
|
+
htmlBindings: [],
|
|
24
|
+
attrBindings: [],
|
|
25
|
+
eventBindings: [],
|
|
26
|
+
slotBindings: [],
|
|
27
|
+
componentBindings: []
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
if (loading || !component) {
|
|
31
|
+
return {
|
|
32
|
+
template: '<div class="router-loading">Loading...</div>',
|
|
33
|
+
textBindings: [],
|
|
34
|
+
htmlBindings: [],
|
|
35
|
+
attrBindings: [],
|
|
36
|
+
eventBindings: [],
|
|
37
|
+
slotBindings: [],
|
|
38
|
+
componentBindings: []
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
return {
|
|
42
|
+
template: "__O_COMP_lazy_component__",
|
|
43
|
+
textBindings: [],
|
|
44
|
+
htmlBindings: [],
|
|
45
|
+
attrBindings: [],
|
|
46
|
+
eventBindings: [],
|
|
47
|
+
slotBindings: [],
|
|
48
|
+
componentBindings: [
|
|
49
|
+
{
|
|
50
|
+
id: "lazy_component",
|
|
51
|
+
getComponent: () => component,
|
|
52
|
+
getProps: () => ({})
|
|
53
|
+
}
|
|
54
|
+
]
|
|
55
|
+
};
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
function lazyComponentWithFallback(loader, fallback, errorComponent) {
|
|
59
|
+
let component = null;
|
|
60
|
+
let loading = false;
|
|
61
|
+
let error = null;
|
|
62
|
+
return defineComponent(() => {
|
|
63
|
+
if (!component && !loading && !error) {
|
|
64
|
+
loading = true;
|
|
65
|
+
loader().then((module) => {
|
|
66
|
+
component = module.default;
|
|
67
|
+
loading = false;
|
|
68
|
+
}).catch((err) => {
|
|
69
|
+
error = err;
|
|
70
|
+
loading = false;
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
if (error && errorComponent) {
|
|
74
|
+
return {
|
|
75
|
+
template: "__O_COMP_error_component__",
|
|
76
|
+
textBindings: [],
|
|
77
|
+
htmlBindings: [],
|
|
78
|
+
attrBindings: [],
|
|
79
|
+
eventBindings: [],
|
|
80
|
+
slotBindings: [],
|
|
81
|
+
componentBindings: [
|
|
82
|
+
{
|
|
83
|
+
id: "error_component",
|
|
84
|
+
getComponent: () => errorComponent,
|
|
85
|
+
getProps: () => ({ error })
|
|
86
|
+
}
|
|
87
|
+
]
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
if (loading || !component) {
|
|
91
|
+
return {
|
|
92
|
+
template: "__O_COMP_fallback_component__",
|
|
93
|
+
textBindings: [],
|
|
94
|
+
htmlBindings: [],
|
|
95
|
+
attrBindings: [],
|
|
96
|
+
eventBindings: [],
|
|
97
|
+
slotBindings: [],
|
|
98
|
+
componentBindings: [
|
|
99
|
+
{
|
|
100
|
+
id: "fallback_component",
|
|
101
|
+
getComponent: () => fallback,
|
|
102
|
+
getProps: () => ({})
|
|
103
|
+
}
|
|
104
|
+
]
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
return {
|
|
108
|
+
template: "__O_COMP_lazy_component__",
|
|
109
|
+
textBindings: [],
|
|
110
|
+
htmlBindings: [],
|
|
111
|
+
attrBindings: [],
|
|
112
|
+
eventBindings: [],
|
|
113
|
+
slotBindings: [],
|
|
114
|
+
componentBindings: [
|
|
115
|
+
{
|
|
116
|
+
id: "lazy_component",
|
|
117
|
+
getComponent: () => component,
|
|
118
|
+
getProps: () => ({})
|
|
119
|
+
}
|
|
120
|
+
]
|
|
121
|
+
};
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
export { lazyComponent, lazyComponentWithFallback };
|
|
126
|
+
//# sourceMappingURL=lazy.js.map
|
|
127
|
+
//# sourceMappingURL=lazy.js.map
|
package/dist/lazy.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lazy.ts"],"names":[],"mappings":"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","file":"lazy.js","sourcesContent":["import type { OlovaComponent } from \"olova/runtime\";\r\nimport { defineComponent } from \"olova/runtime\";\r\n\r\nexport type LazyComponentLoader = () => Promise<{ default: OlovaComponent }>;\r\n\r\nexport function lazyComponent(loader: LazyComponentLoader): OlovaComponent {\r\n let component: OlovaComponent | null = null;\r\n let loading = false;\r\n let error: Error | null = null;\r\n\r\n return defineComponent(() => {\r\n if (!component && !loading && !error) {\r\n loading = true;\r\n loader()\r\n .then((module) => {\r\n component = module.default;\r\n loading = false;\r\n })\r\n .catch((err) => {\r\n error = err;\r\n loading = false;\r\n });\r\n }\r\n\r\n if (error) {\r\n return {\r\n template: '<div class=\"router-error\">Failed to load component</div>',\r\n textBindings: [],\r\n htmlBindings: [],\r\n attrBindings: [],\r\n eventBindings: [],\r\n slotBindings: [],\r\n componentBindings: [],\r\n };\r\n }\r\n\r\n if (loading || !component) {\r\n return {\r\n template: '<div class=\"router-loading\">Loading...</div>',\r\n textBindings: [],\r\n htmlBindings: [],\r\n attrBindings: [],\r\n eventBindings: [],\r\n slotBindings: [],\r\n componentBindings: [],\r\n };\r\n }\r\n\r\n return {\r\n template: \"__O_COMP_lazy_component__\",\r\n textBindings: [],\r\n htmlBindings: [],\r\n attrBindings: [],\r\n eventBindings: [],\r\n slotBindings: [],\r\n componentBindings: [\r\n {\r\n id: \"lazy_component\",\r\n getComponent: () => component!,\r\n getProps: () => ({}),\r\n },\r\n ],\r\n };\r\n });\r\n}\r\n\r\nexport function lazyComponentWithFallback(\r\n loader: LazyComponentLoader,\r\n fallback: OlovaComponent,\r\n errorComponent?: OlovaComponent,\r\n): OlovaComponent {\r\n let component: OlovaComponent | null = null;\r\n let loading = false;\r\n let error: Error | null = null;\r\n\r\n return defineComponent(() => {\r\n if (!component && !loading && !error) {\r\n loading = true;\r\n loader()\r\n .then((module) => {\r\n component = module.default;\r\n loading = false;\r\n })\r\n .catch((err) => {\r\n error = err;\r\n loading = false;\r\n });\r\n }\r\n\r\n if (error && errorComponent) {\r\n return {\r\n template: \"__O_COMP_error_component__\",\r\n textBindings: [],\r\n htmlBindings: [],\r\n attrBindings: [],\r\n eventBindings: [],\r\n slotBindings: [],\r\n componentBindings: [\r\n {\r\n id: \"error_component\",\r\n getComponent: () => errorComponent,\r\n getProps: () => ({ error }),\r\n },\r\n ],\r\n };\r\n }\r\n\r\n if (loading || !component) {\r\n return {\r\n template: \"__O_COMP_fallback_component__\",\r\n textBindings: [],\r\n htmlBindings: [],\r\n attrBindings: [],\r\n eventBindings: [],\r\n slotBindings: [],\r\n componentBindings: [\r\n {\r\n id: \"fallback_component\",\r\n getComponent: () => fallback,\r\n getProps: () => ({}),\r\n },\r\n ],\r\n };\r\n }\r\n\r\n return {\r\n template: \"__O_COMP_lazy_component__\",\r\n textBindings: [],\r\n htmlBindings: [],\r\n attrBindings: [],\r\n eventBindings: [],\r\n slotBindings: [],\r\n componentBindings: [\r\n {\r\n id: \"lazy_component\",\r\n getComponent: () => component!,\r\n getProps: () => ({}),\r\n },\r\n ],\r\n };\r\n });\r\n}\r\n"]}
|