@clusterenvision/ui-framework 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +295 -0
  3. package/dist/ai-assistant-Db002XYC.d.ts +92 -0
  4. package/dist/ai-assistant-EobSUV70.d.cts +92 -0
  5. package/dist/browser-DnHpnWwE.d.cts +354 -0
  6. package/dist/browser-Dx4oKf5e.d.ts +354 -0
  7. package/dist/browser-signals-07qodpYT.d.cts +66 -0
  8. package/dist/browser-signals-07qodpYT.d.ts +66 -0
  9. package/dist/browser-signals.cjs +32 -0
  10. package/dist/browser-signals.cjs.map +1 -0
  11. package/dist/browser-signals.d.cts +1 -0
  12. package/dist/browser-signals.d.ts +1 -0
  13. package/dist/browser-signals.js +3 -0
  14. package/dist/browser-signals.js.map +1 -0
  15. package/dist/browser.cjs +197 -0
  16. package/dist/browser.cjs.map +1 -0
  17. package/dist/browser.d.cts +13 -0
  18. package/dist/browser.d.ts +13 -0
  19. package/dist/browser.js +12 -0
  20. package/dist/browser.js.map +1 -0
  21. package/dist/chunk-22HQL2Y4.js +568 -0
  22. package/dist/chunk-22HQL2Y4.js.map +1 -0
  23. package/dist/chunk-3ZBRNFEE.js +1525 -0
  24. package/dist/chunk-3ZBRNFEE.js.map +1 -0
  25. package/dist/chunk-4HRORR2Q.js +1953 -0
  26. package/dist/chunk-4HRORR2Q.js.map +1 -0
  27. package/dist/chunk-4L3UXVL5.cjs +68 -0
  28. package/dist/chunk-4L3UXVL5.cjs.map +1 -0
  29. package/dist/chunk-6BYWFGQY.cjs +226 -0
  30. package/dist/chunk-6BYWFGQY.cjs.map +1 -0
  31. package/dist/chunk-7SCIB5HP.js +57 -0
  32. package/dist/chunk-7SCIB5HP.js.map +1 -0
  33. package/dist/chunk-BBAUALNU.js +888 -0
  34. package/dist/chunk-BBAUALNU.js.map +1 -0
  35. package/dist/chunk-CHLDE4JQ.js +715 -0
  36. package/dist/chunk-CHLDE4JQ.js.map +1 -0
  37. package/dist/chunk-CXTAUXLG.cjs +71 -0
  38. package/dist/chunk-CXTAUXLG.cjs.map +1 -0
  39. package/dist/chunk-D2USIT6V.js +121 -0
  40. package/dist/chunk-D2USIT6V.js.map +1 -0
  41. package/dist/chunk-D3H5CGVD.js +36 -0
  42. package/dist/chunk-D3H5CGVD.js.map +1 -0
  43. package/dist/chunk-DQBX75NJ.js +92 -0
  44. package/dist/chunk-DQBX75NJ.js.map +1 -0
  45. package/dist/chunk-DRPG2DFX.js +208 -0
  46. package/dist/chunk-DRPG2DFX.js.map +1 -0
  47. package/dist/chunk-EFOOXCY7.cjs +41 -0
  48. package/dist/chunk-EFOOXCY7.cjs.map +1 -0
  49. package/dist/chunk-FFCZSYC7.cjs +906 -0
  50. package/dist/chunk-FFCZSYC7.cjs.map +1 -0
  51. package/dist/chunk-FNXIYAET.cjs +1593 -0
  52. package/dist/chunk-FNXIYAET.cjs.map +1 -0
  53. package/dist/chunk-I6GNUM3P.cjs +63 -0
  54. package/dist/chunk-I6GNUM3P.cjs.map +1 -0
  55. package/dist/chunk-IHAMVLRY.js +129 -0
  56. package/dist/chunk-IHAMVLRY.js.map +1 -0
  57. package/dist/chunk-IRBUKIRF.cjs +133 -0
  58. package/dist/chunk-IRBUKIRF.cjs.map +1 -0
  59. package/dist/chunk-KPG5HAHK.cjs +97 -0
  60. package/dist/chunk-KPG5HAHK.cjs.map +1 -0
  61. package/dist/chunk-N7Q2ESLG.cjs +130 -0
  62. package/dist/chunk-N7Q2ESLG.cjs.map +1 -0
  63. package/dist/chunk-PFBEIFVS.js +180 -0
  64. package/dist/chunk-PFBEIFVS.js.map +1 -0
  65. package/dist/chunk-PVZVFICK.cjs +318 -0
  66. package/dist/chunk-PVZVFICK.cjs.map +1 -0
  67. package/dist/chunk-Q3KH6HMU.js +305 -0
  68. package/dist/chunk-Q3KH6HMU.js.map +1 -0
  69. package/dist/chunk-QPAAV32J.cjs +1985 -0
  70. package/dist/chunk-QPAAV32J.cjs.map +1 -0
  71. package/dist/chunk-R6XQUMWT.cjs +61 -0
  72. package/dist/chunk-R6XQUMWT.cjs.map +1 -0
  73. package/dist/chunk-SA5UD5B6.js +92 -0
  74. package/dist/chunk-SA5UD5B6.js.map +1 -0
  75. package/dist/chunk-SM35JOYD.cjs +211 -0
  76. package/dist/chunk-SM35JOYD.cjs.map +1 -0
  77. package/dist/chunk-SZQNIMYI.cjs +592 -0
  78. package/dist/chunk-SZQNIMYI.cjs.map +1 -0
  79. package/dist/chunk-T6T7QE4J.js +224 -0
  80. package/dist/chunk-T6T7QE4J.js.map +1 -0
  81. package/dist/chunk-TIF372DZ.js +65 -0
  82. package/dist/chunk-TIF372DZ.js.map +1 -0
  83. package/dist/chunk-V6JCOBGY.js +69 -0
  84. package/dist/chunk-V6JCOBGY.js.map +1 -0
  85. package/dist/chunk-VHUXNDW2.cjs +189 -0
  86. package/dist/chunk-VHUXNDW2.cjs.map +1 -0
  87. package/dist/chunk-W3LNNY3U.cjs +729 -0
  88. package/dist/chunk-W3LNNY3U.cjs.map +1 -0
  89. package/dist/chunk-ZUWSU4OA.js +61 -0
  90. package/dist/chunk-ZUWSU4OA.js.map +1 -0
  91. package/dist/chunk-ZWUA2LPB.cjs +103 -0
  92. package/dist/chunk-ZWUA2LPB.cjs.map +1 -0
  93. package/dist/cli/index.cjs +566 -0
  94. package/dist/cli/index.cjs.map +1 -0
  95. package/dist/cli/index.d.cts +1 -0
  96. package/dist/cli/index.d.ts +1 -0
  97. package/dist/cli/index.js +558 -0
  98. package/dist/cli/index.js.map +1 -0
  99. package/dist/compiler/index.cjs +80 -0
  100. package/dist/compiler/index.cjs.map +1 -0
  101. package/dist/compiler/index.d.cts +130 -0
  102. package/dist/compiler/index.d.ts +130 -0
  103. package/dist/compiler/index.js +3 -0
  104. package/dist/compiler/index.js.map +1 -0
  105. package/dist/component-BVzvepw9.d.cts +90 -0
  106. package/dist/component-wTxZ2BPD.d.ts +90 -0
  107. package/dist/index-CpxDa60m.d.cts +644 -0
  108. package/dist/index-CpxDa60m.d.ts +644 -0
  109. package/dist/index.cjs +1356 -0
  110. package/dist/index.cjs.map +1 -0
  111. package/dist/index.d.cts +165 -0
  112. package/dist/index.d.ts +165 -0
  113. package/dist/index.js +772 -0
  114. package/dist/index.js.map +1 -0
  115. package/dist/lib/dom.cjs +102 -0
  116. package/dist/lib/dom.cjs.map +1 -0
  117. package/dist/lib/dom.d.cts +373 -0
  118. package/dist/lib/dom.d.ts +373 -0
  119. package/dist/lib/dom.js +3 -0
  120. package/dist/lib/dom.js.map +1 -0
  121. package/dist/lib/icons.cjs +20 -0
  122. package/dist/lib/icons.cjs.map +1 -0
  123. package/dist/lib/icons.d.cts +64 -0
  124. package/dist/lib/icons.d.ts +64 -0
  125. package/dist/lib/icons.js +3 -0
  126. package/dist/lib/icons.js.map +1 -0
  127. package/dist/lib/index.cjs +247 -0
  128. package/dist/lib/index.cjs.map +1 -0
  129. package/dist/lib/index.d.cts +30 -0
  130. package/dist/lib/index.d.ts +30 -0
  131. package/dist/lib/index.js +92 -0
  132. package/dist/lib/index.js.map +1 -0
  133. package/dist/lib/theme.cjs +56 -0
  134. package/dist/lib/theme.cjs.map +1 -0
  135. package/dist/lib/theme.d.cts +27 -0
  136. package/dist/lib/theme.d.ts +27 -0
  137. package/dist/lib/theme.js +3 -0
  138. package/dist/lib/theme.js.map +1 -0
  139. package/dist/router-B9kms5XQ.d.ts +124 -0
  140. package/dist/router-YnpW_sIK.d.cts +124 -0
  141. package/dist/runtime/adapters/angular.cjs +48 -0
  142. package/dist/runtime/adapters/angular.cjs.map +1 -0
  143. package/dist/runtime/adapters/angular.d.cts +38 -0
  144. package/dist/runtime/adapters/angular.d.ts +38 -0
  145. package/dist/runtime/adapters/angular.js +46 -0
  146. package/dist/runtime/adapters/angular.js.map +1 -0
  147. package/dist/runtime/adapters/react.cjs +41 -0
  148. package/dist/runtime/adapters/react.cjs.map +1 -0
  149. package/dist/runtime/adapters/react.d.cts +26 -0
  150. package/dist/runtime/adapters/react.d.ts +26 -0
  151. package/dist/runtime/adapters/react.js +39 -0
  152. package/dist/runtime/adapters/react.js.map +1 -0
  153. package/dist/runtime/adapters/vue.cjs +44 -0
  154. package/dist/runtime/adapters/vue.cjs.map +1 -0
  155. package/dist/runtime/adapters/vue.d.cts +37 -0
  156. package/dist/runtime/adapters/vue.d.ts +37 -0
  157. package/dist/runtime/adapters/vue.js +42 -0
  158. package/dist/runtime/adapters/vue.js.map +1 -0
  159. package/dist/runtime/components/ai-assistant.cjs +18 -0
  160. package/dist/runtime/components/ai-assistant.cjs.map +1 -0
  161. package/dist/runtime/components/ai-assistant.d.cts +8 -0
  162. package/dist/runtime/components/ai-assistant.d.ts +8 -0
  163. package/dist/runtime/components/ai-assistant.js +9 -0
  164. package/dist/runtime/components/ai-assistant.js.map +1 -0
  165. package/dist/runtime/components/ai-summary-card.cjs +18 -0
  166. package/dist/runtime/components/ai-summary-card.cjs.map +1 -0
  167. package/dist/runtime/components/ai-summary-card.d.cts +19 -0
  168. package/dist/runtime/components/ai-summary-card.d.ts +19 -0
  169. package/dist/runtime/components/ai-summary-card.js +9 -0
  170. package/dist/runtime/components/ai-summary-card.js.map +1 -0
  171. package/dist/runtime/router.cjs +429 -0
  172. package/dist/runtime/router.cjs.map +1 -0
  173. package/dist/runtime/router.d.cts +2 -0
  174. package/dist/runtime/router.d.ts +2 -0
  175. package/dist/runtime/router.js +421 -0
  176. package/dist/runtime/router.js.map +1 -0
  177. package/dist/runtime/server.cjs +125 -0
  178. package/dist/runtime/server.cjs.map +1 -0
  179. package/dist/runtime/server.d.cts +27 -0
  180. package/dist/runtime/server.d.ts +27 -0
  181. package/dist/runtime/server.js +117 -0
  182. package/dist/runtime/server.js.map +1 -0
  183. package/dist/runtime/workflow/index.cjs +282 -0
  184. package/dist/runtime/workflow/index.cjs.map +1 -0
  185. package/dist/runtime/workflow/index.d.cts +1 -0
  186. package/dist/runtime/workflow/index.d.ts +1 -0
  187. package/dist/runtime/workflow/index.js +5 -0
  188. package/dist/runtime/workflow/index.js.map +1 -0
  189. package/dist/tracing-DGdvMCEl.d.cts +109 -0
  190. package/dist/tracing-DGdvMCEl.d.ts +109 -0
  191. package/dist/types-C4RXXKfk.d.cts +76 -0
  192. package/dist/types-C4RXXKfk.d.ts +76 -0
  193. package/package.json +166 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/runtime/router.ts"],"names":["flattenRoutes","signal","matchRoute","getRouteId","normalizePathname","options","captureRuntimeError","match","withRuntimeErrorBoundary","cacheRouteDataResult","clearRouteDataResult"],"mappings":"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","file":"router.cjs","sourcesContent":["import { captureRuntimeError, RuntimeErrorBoundary, RuntimeErrorInfo, withRuntimeErrorBoundary } from './errors.js';\nimport { signal, SignalAccessor } from './signals.js';\nimport { cacheRouteDataResult, clearRouteDataResult } from './route-data-registry.js';\nimport { flattenRoutes, getRouteId, matchRoute, normalizePathname } from './router-utils.js';\nimport type { FlattenedRouteNode } from './router-utils.js';\n\nexport type RouteComponentFactory = () => Promise<Record<string, unknown>> | Record<string, unknown>;\n\nexport interface RouteBoundaryConfig {\n id?: string;\n name?: string;\n componentName?: string;\n templateId?: string;\n attributes?: Record<string, unknown>;\n onError?: (error: Error, info: RuntimeErrorInfo) => boolean | undefined;\n}\n\nexport type RouteLayoutDefinition = RouteBoundaryConfig;\n\nexport interface RouteDefinition {\n id?: string;\n path: string;\n component: RouteComponentFactory;\n boundary?: RouteBoundaryConfig;\n layouts?: RouteLayoutDefinition[];\n loader?: RouteDataHandler;\n action?: RouteDataHandler;\n guards?: RouteGuard[];\n children?: RouteDefinition[];\n}\n\nexport interface RouteHandlerArgs {\n params: Record<string, string>;\n request?: Request;\n signal?: AbortSignal;\n context?: Record<string, unknown>;\n}\n\nexport type RouteDataHandler<T = unknown> = (args: RouteHandlerArgs) => T | Promise<T>;\n\nexport interface RouteHandlerResult<T = unknown> {\n data?: T;\n error?: Error;\n info?: RuntimeErrorInfo | null;\n handled: boolean;\n startedAt?: number;\n endedAt?: number;\n durationMs?: number;\n}\n\nexport interface RouteGuardContext {\n match: RouteMatch;\n params: Record<string, string>;\n}\n\nexport type RouteGuardResult =\n | { type: 'continue' }\n | { type: 'redirect'; to: string; options?: NavigateOptions }\n | { type: 'error'; error: Error; info?: RuntimeErrorInfo | null };\n\nexport type RouteGuard = (context: RouteGuardContext) => RouteGuardResult | undefined;\n\nexport interface RoutePrefetchOptions {\n loadData?: boolean;\n loaderArgs?: PartialRouteHandlerArgs;\n}\n\nconst CONTINUE_NAVIGATION: RouteGuardResult = { type: 'continue' } as const;\nconst MAX_GUARD_REDIRECTS = 8;\n\nexport function allowNavigation(): RouteGuardResult {\n return CONTINUE_NAVIGATION;\n}\n\nexport function redirectNavigation(to: string, options?: NavigateOptions): RouteGuardResult {\n return { type: 'redirect', to, options };\n}\n\nexport function errorNavigation(error: Error, info?: RuntimeErrorInfo | null): RouteGuardResult {\n return { type: 'error', error, info: info ?? null };\n}\n\nexport type RouterBoundaryKind = 'layout' | 'route';\n\nexport interface RouteBoundaryConfigResolved extends RouteBoundaryConfig {\n id: string;\n componentName: string;\n attributes: Record<string, unknown>;\n}\n\nexport interface RouterBoundaryState {\n id: string;\n kind: RouterBoundaryKind;\n definition: RouteBoundaryConfigResolved;\n boundary: RuntimeErrorBoundary;\n error: Error | null;\n info: RuntimeErrorInfo | null;\n reset(): void;\n}\n\nexport interface RouteMatch {\n route: RouteDefinition;\n params: Record<string, string>;\n fullPath: string;\n layouts: RouterBoundaryState[];\n boundary: RouterBoundaryState;\n}\n\nexport interface NavigateOptions {\n replace?: boolean;\n state?: unknown;\n}\n\nexport interface Router {\n currentPath: SignalAccessor<string>;\n currentMatch: SignalAccessor<RouteMatch | null>;\n navigate(path: string, options?: NavigateOptions): RouteMatch | null;\n match(path?: string): RouteMatch | null;\n start(): void;\n dispose(): void;\n}\n\nexport interface RouterOptions {\n routes: RouteDefinition[];\n notFoundRoute?: RouteDefinition;\n errorRoute?: RouteDefinition;\n}\n\nexport function createRouter(input: RouteDefinition[] | RouterOptions): Router {\n const options = normalizeRouterOptions(input);\n const flattened = flattenRoutes(options.routes);\n const notFoundRoute = normalizeFallbackRoute(options.notFoundRoute, 'not-found', '*');\n const errorRoute = normalizeFallbackRoute(options.errorRoute, 'error', '/__error');\n const initialPath = typeof window !== 'undefined' ? window.location.pathname : '/';\n const currentPath = signal(initialPath);\n const currentMatchSignal = signal<RouteMatch | null>(resolveMatch(initialPath));\n\n function resolveMatch(path: string): RouteMatch | null {\n for (const node of flattened) {\n const params = matchRoute(path, node.fullPath);\n if (params) {\n return instantiateMatch(node, params);\n }\n }\n if (notFoundRoute) {\n return createFallbackMatch(notFoundRoute, path, 'not-found');\n }\n return null;\n }\n\n function instantiateMatch(node: FlattenedRouteNode, params: Record<string, string>): RouteMatch {\n const layouts = collectLayouts(node.branch, node.fullPath, params);\n const routeBoundary = createRouterBoundaryState(\n 'route',\n normalizeBoundaryConfig('route', node.route.boundary, {\n routeId: getRouteId(node.route),\n path: node.fullPath,\n params,\n }),\n );\n return {\n route: node.route,\n params,\n fullPath: node.fullPath,\n layouts,\n boundary: routeBoundary,\n } satisfies RouteMatch;\n }\n\n function collectLayouts(branch: RouteDefinition[], fullPath: string, params: Record<string, string>): RouterBoundaryState[] {\n const states: RouterBoundaryState[] = [];\n branch.forEach(route => {\n (route.layouts ?? []).forEach((layout, index) => {\n states.push(\n createRouterBoundaryState(\n 'layout',\n normalizeBoundaryConfig('layout', layout, {\n routeId: getRouteId(route),\n path: fullPath,\n layoutIndex: index,\n params,\n }),\n ),\n );\n });\n });\n return states;\n }\n\n function createFallbackMatch(\n route: RouteDefinition,\n requestedPath: string,\n reason: 'not-found' | 'error',\n error?: Error,\n errorMessage?: string,\n ): RouteMatch {\n const normalizedPath = normalizePathname(requestedPath);\n const params = matchRoute(normalizedPath, route.path) ?? {};\n const statusCode = reason === 'not-found' ? 404 : 500;\n const boundaryConfig: RouteBoundaryConfig = {\n ...(route.boundary ?? {}),\n attributes: {\n ...(route.boundary?.attributes ?? {}),\n requestedPath: normalizedPath,\n statusCode,\n reason,\n errorMessage: errorMessage ?? error?.message,\n },\n };\n const layouts = collectLayouts([route], normalizedPath, params);\n const routeBoundary = createRouterBoundaryState(\n 'route',\n normalizeBoundaryConfig('route', boundaryConfig, {\n routeId: getRouteId(route),\n path: normalizedPath,\n params,\n }),\n );\n return {\n route,\n params,\n fullPath: normalizedPath,\n layouts,\n boundary: routeBoundary,\n } satisfies RouteMatch;\n }\n\n function match(path?: string): RouteMatch | null {\n const resolved = resolveMatch(path ?? currentPath());\n if (path === undefined) {\n currentMatchSignal.set(resolved);\n }\n return resolved;\n }\n\n function navigate(path: string, options?: NavigateOptions): RouteMatch | null {\n return runNavigation(path, options, 0);\n }\n\n function onPopState() {\n if (typeof window === 'undefined') {\n return;\n }\n const nextPath = window.location.pathname;\n runNavigation(nextPath, { replace: true }, 0);\n }\n\n const start = () => {\n if (typeof window === 'undefined') {\n return;\n }\n window.addEventListener('popstate', onPopState);\n };\n\n const dispose = () => {\n if (typeof window === 'undefined') {\n return;\n }\n window.removeEventListener('popstate', onPopState);\n };\n\n function runNavigation(path: string, options: NavigateOptions | undefined, depth: number): RouteMatch | null {\n const resolved = resolveMatch(path);\n if (!resolved) {\n applyHistory(path, options);\n currentPath.set(path);\n currentMatchSignal.set(null);\n return null;\n }\n const guardResult = runRouteGuards(resolved);\n if (guardResult.type === 'redirect') {\n if (depth >= MAX_GUARD_REDIRECTS) {\n throw new Error('Router redirect loop detected.');\n }\n const nextOptions: NavigateOptions = { ...options, ...guardResult.options, replace: true };\n return runNavigation(guardResult.to, nextOptions, depth + 1);\n }\n if (guardResult.type === 'error') {\n const info = guardResult.info ?? createGuardErrorInfo(resolved);\n const rawMessage = guardResult.error.message;\n if (errorRoute) {\n try {\n captureRuntimeError(guardResult.error, info);\n } catch {\n // Guard error is surfaced via fallback routes; avoid throwing.\n }\n const errorMatch = createFallbackMatch(errorRoute, path, 'error', guardResult.error, rawMessage);\n applyHistory(path, options);\n currentPath.set(path);\n currentMatchSignal.set(errorMatch);\n return errorMatch;\n }\n captureRuntimeError(guardResult.error, info);\n return currentMatchSignal();\n }\n applyHistory(path, options);\n currentPath.set(path);\n currentMatchSignal.set(resolved);\n return resolved;\n }\n\n function applyHistory(path: string, options?: NavigateOptions) {\n if (typeof window === 'undefined') {\n return;\n }\n const historyState = options?.state ?? {};\n if (options?.replace) {\n window.history.replaceState(historyState, '', path);\n } else {\n window.history.pushState(historyState, '', path);\n }\n }\n\n function runRouteGuards(match: RouteMatch): RouteGuardResult {\n const guards = match.route.guards ?? [];\n for (const guard of guards) {\n const result = guard({ match, params: match.params }) ?? CONTINUE_NAVIGATION;\n if (result.type !== 'continue') {\n return result;\n }\n }\n return CONTINUE_NAVIGATION;\n }\n\n function createGuardErrorInfo(match: RouteMatch): RuntimeErrorInfo {\n return {\n phase: 'navigation',\n componentName: match.boundary.definition.componentName,\n componentInstanceId: match.boundary.id,\n templateId: match.boundary.definition.templateId,\n attributes: {\n routeId: match.route.id ?? match.fullPath,\n fullPath: match.fullPath,\n },\n } satisfies RuntimeErrorInfo;\n }\n\n return {\n currentPath,\n currentMatch: currentMatchSignal,\n navigate,\n match,\n start,\n dispose,\n } satisfies Router;\n}\n\nfunction normalizeRouterOptions(input: RouteDefinition[] | RouterOptions): RouterOptions {\n if (Array.isArray(input)) {\n return { routes: input };\n }\n return input;\n}\n\nfunction normalizeFallbackRoute(\n route: RouteDefinition | undefined,\n fallbackId: string,\n fallbackPath: string,\n): RouteDefinition | undefined {\n if (!route) {\n return undefined;\n }\n return {\n ...route,\n id: route.id ?? fallbackId,\n path: route.path || fallbackPath,\n };\n}\n\n\nexport async function runRouteLoader<T = unknown>(\n match: RouteMatch,\n args?: PartialRouteHandlerArgs,\n): Promise<RouteHandlerResult<T>> {\n const result = await executeRouteHandler<T>('loader', match.route.loader as RouteDataHandler<T> | undefined, match, args);\n updateRouteDataCache(match, result);\n return result;\n}\n\nexport async function runRouteAction<T = unknown>(\n match: RouteMatch,\n args?: PartialRouteHandlerArgs,\n): Promise<RouteHandlerResult<T>> {\n const result = await executeRouteHandler<T>('action', match.route.action as RouteDataHandler<T> | undefined, match, args);\n updateRouteDataCache(match, result);\n return result;\n}\n\nexport async function prefetchRoute(match: RouteMatch, options?: RoutePrefetchOptions): Promise<void> {\n await Promise.resolve(match.route.component());\n if (options?.loadData) {\n await runRouteLoader(match, options.loaderArgs);\n }\n}\n\ntype RouteHandlerKind = 'loader' | 'action';\n\ntype PartialRouteHandlerArgs = Partial<Omit<RouteHandlerArgs, 'params'>> & { params?: Record<string, string> };\n\ninterface BoundaryContextExtras {\n routeId: string;\n path: string;\n layoutIndex?: number;\n params?: Record<string, string>;\n}\n\nfunction normalizeBoundaryConfig(\n kind: RouterBoundaryKind,\n config: RouteBoundaryConfig | undefined,\n context: BoundaryContextExtras,\n): RouteBoundaryConfigResolved {\n const layoutSuffix = typeof context.layoutIndex === 'number' ? `:${String(context.layoutIndex)}` : '';\n const fallbackId = `${kind}:${context.routeId}${layoutSuffix}`;\n const componentName = config?.componentName ?? config?.name ?? context.routeId;\n const attributes = {\n ...(config?.attributes ?? {}),\n routeId: context.routeId,\n path: context.path,\n layoutIndex: context.layoutIndex,\n params: context.params ? { ...context.params } : undefined,\n } satisfies Record<string, unknown>;\n return {\n ...config,\n id: config?.id ?? fallbackId,\n name: config?.name ?? componentName,\n componentName,\n attributes,\n } as RouteBoundaryConfigResolved;\n}\n\nfunction createRouterBoundaryState(\n kind: RouterBoundaryKind,\n definition: RouteBoundaryConfigResolved,\n): RouterBoundaryState {\n const state: RouterBoundaryState = {\n id: definition.id,\n kind,\n definition,\n boundary: {\n id: definition.id,\n handle(error, info) {\n state.error = error;\n state.info = info;\n if (definition.onError) {\n try {\n const handled = definition.onError(error, info);\n if (handled === false) {\n return false;\n }\n } catch (hookError) {\n state.error = hookError instanceof Error ? hookError : new Error(String(hookError));\n state.info = info;\n }\n }\n return true;\n },\n },\n error: null,\n info: null,\n reset() {\n state.error = null;\n state.info = null;\n },\n } satisfies RouterBoundaryState;\n return state;\n}\n\nasync function executeRouteHandler<T>(\n kind: RouteHandlerKind,\n handler: RouteDataHandler<T> | undefined,\n match: RouteMatch,\n args?: PartialRouteHandlerArgs,\n): Promise<RouteHandlerResult<T>> {\n const startedAt = Date.now();\n if (!handler) {\n return {\n handled: true,\n startedAt,\n endedAt: startedAt,\n durationMs: 0,\n } satisfies RouteHandlerResult<T>;\n }\n const normalizedArgs = normalizeHandlerArgs(match, args);\n const boundaries = [...match.layouts, match.boundary];\n boundaries.forEach(boundary => {\n boundary.reset();\n });\n try {\n const data = await runWithBoundaries(boundaries, () => invokeRouteHandler(handler, kind, match, normalizedArgs));\n const boundaryError = firstErroredBoundary(boundaries);\n const endedAt = Date.now();\n if (boundaryError) {\n return {\n handled: true,\n error: boundaryError.error ?? undefined,\n info: boundaryError.info ?? null,\n startedAt,\n endedAt,\n durationMs: endedAt - startedAt,\n } satisfies RouteHandlerResult<T>;\n }\n return {\n handled: true,\n data: data as T,\n info: null,\n startedAt,\n endedAt,\n durationMs: endedAt - startedAt,\n } satisfies RouteHandlerResult<T>;\n } catch (error) {\n const normalized = error instanceof Error ? error : new Error(String(error));\n const endedAt = Date.now();\n return {\n handled: false,\n error: normalized,\n info: null,\n startedAt,\n endedAt,\n durationMs: endedAt - startedAt,\n } satisfies RouteHandlerResult<T>;\n }\n}\n\nfunction normalizeHandlerArgs(match: RouteMatch, args?: PartialRouteHandlerArgs): RouteHandlerArgs {\n return {\n params: args?.params ?? match.params,\n request: args?.request,\n signal: args?.signal,\n context: args?.context,\n } satisfies RouteHandlerArgs;\n}\n\nfunction runWithBoundaries<T>(boundaries: RouterBoundaryState[], run: () => T): T {\n return boundaries.reduceRight((next, boundary) => {\n return () => withRuntimeErrorBoundary(boundary.boundary, next);\n }, run)();\n}\n\nfunction invokeRouteHandler<T>(\n handler: RouteDataHandler<T>,\n kind: RouteHandlerKind,\n match: RouteMatch,\n args: RouteHandlerArgs,\n): T | Promise<T | undefined> | undefined {\n const phase = kind === 'loader' ? 'loader' : 'action';\n const info = createHandlerErrorInfo(phase, match, args);\n try {\n const result = handler(args);\n if (isPromiseLike(result)) {\n return result.catch((error: unknown) => {\n const handled = captureRuntimeError(error, info);\n if (!handled) {\n throw error;\n }\n return undefined;\n });\n }\n return result;\n } catch (error: unknown) {\n const handled = captureRuntimeError(error, info);\n if (!handled) {\n throw error;\n }\n return undefined;\n }\n}\n\nfunction createHandlerErrorInfo(\n phase: 'loader' | 'action',\n match: RouteMatch,\n args: RouteHandlerArgs,\n): RuntimeErrorInfo {\n const attributes = {\n ...match.boundary.definition.attributes,\n params: args.params,\n requestMethod: args.request?.method,\n layoutStack: match.layouts.map(layout => layout.definition.id),\n } satisfies Record<string, unknown>;\n return {\n phase,\n componentName: match.boundary.definition.componentName,\n componentInstanceId: match.boundary.id,\n templateId: match.boundary.definition.templateId,\n attributes,\n } satisfies RuntimeErrorInfo;\n}\n\nfunction updateRouteDataCache(match: RouteMatch, result: RouteHandlerResult): void {\n if (result.handled) {\n cacheRouteDataResult(match, result);\n return;\n }\n clearRouteDataResult(match);\n}\n\nfunction firstErroredBoundary(boundaries: RouterBoundaryState[]): RouterBoundaryState | undefined {\n for (let i = boundaries.length - 1; i >= 0; i -= 1) {\n if (boundaries[i].error) {\n return boundaries[i];\n }\n }\n return undefined;\n}\n\nfunction isPromiseLike<T>(value: unknown): value is Promise<T> {\n return Boolean(value) && typeof value === 'object' && 'then' in (value as Record<string, unknown>);\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export { N as NavigateOptions, c as RouteBoundaryConfig, d as RouteBoundaryConfigResolved, e as RouteComponentFactory, f as RouteDataHandler, g as RouteDefinition, h as RouteGuard, i as RouteGuardContext, j as RouteGuardResult, k as RouteHandlerArgs, l as RouteHandlerResult, m as RouteLayoutDefinition, a as RouteMatch, R as Router, n as RouterBoundaryKind, o as RouterBoundaryState, p as RouterOptions, u as createRouter, x as runRouteAction, y as runRouteLoader } from '../router-YnpW_sIK.cjs';
2
+ import '../browser-signals-07qodpYT.cjs';
@@ -0,0 +1,2 @@
1
+ export { N as NavigateOptions, c as RouteBoundaryConfig, d as RouteBoundaryConfigResolved, e as RouteComponentFactory, f as RouteDataHandler, g as RouteDefinition, h as RouteGuard, i as RouteGuardContext, j as RouteGuardResult, k as RouteHandlerArgs, l as RouteHandlerResult, m as RouteLayoutDefinition, a as RouteMatch, R as Router, n as RouterBoundaryKind, o as RouterBoundaryState, p as RouterOptions, u as createRouter, x as runRouteAction, y as runRouteLoader } from '../router-B9kms5XQ.js';
2
+ import '../browser-signals-07qodpYT.js';
@@ -0,0 +1,421 @@
1
+ import { withRuntimeErrorBoundary, captureRuntimeError } from '../chunk-DQBX75NJ.js';
2
+ import { flattenRoutes, matchRoute, getRouteId, normalizePathname } from '../chunk-SA5UD5B6.js';
3
+ import { cacheRouteDataResult, clearRouteDataResult } from '../chunk-D3H5CGVD.js';
4
+ import { signal } from '../chunk-PFBEIFVS.js';
5
+
6
+ // src/runtime/router.ts
7
+ var CONTINUE_NAVIGATION = { type: "continue" };
8
+ var MAX_GUARD_REDIRECTS = 8;
9
+ function allowNavigation() {
10
+ return CONTINUE_NAVIGATION;
11
+ }
12
+ function redirectNavigation(to, options) {
13
+ return { type: "redirect", to, options };
14
+ }
15
+ function errorNavigation(error, info) {
16
+ return { type: "error", error, info: info ?? null };
17
+ }
18
+ function createRouter(input) {
19
+ const options = normalizeRouterOptions(input);
20
+ const flattened = flattenRoutes(options.routes);
21
+ const notFoundRoute = normalizeFallbackRoute(options.notFoundRoute, "not-found", "*");
22
+ const errorRoute = normalizeFallbackRoute(options.errorRoute, "error", "/__error");
23
+ const initialPath = typeof window !== "undefined" ? window.location.pathname : "/";
24
+ const currentPath = signal(initialPath);
25
+ const currentMatchSignal = signal(resolveMatch(initialPath));
26
+ function resolveMatch(path) {
27
+ for (const node of flattened) {
28
+ const params = matchRoute(path, node.fullPath);
29
+ if (params) {
30
+ return instantiateMatch(node, params);
31
+ }
32
+ }
33
+ if (notFoundRoute) {
34
+ return createFallbackMatch(notFoundRoute, path, "not-found");
35
+ }
36
+ return null;
37
+ }
38
+ function instantiateMatch(node, params) {
39
+ const layouts = collectLayouts(node.branch, node.fullPath, params);
40
+ const routeBoundary = createRouterBoundaryState(
41
+ "route",
42
+ normalizeBoundaryConfig("route", node.route.boundary, {
43
+ routeId: getRouteId(node.route),
44
+ path: node.fullPath,
45
+ params
46
+ })
47
+ );
48
+ return {
49
+ route: node.route,
50
+ params,
51
+ fullPath: node.fullPath,
52
+ layouts,
53
+ boundary: routeBoundary
54
+ };
55
+ }
56
+ function collectLayouts(branch, fullPath, params) {
57
+ const states = [];
58
+ branch.forEach((route) => {
59
+ (route.layouts ?? []).forEach((layout, index) => {
60
+ states.push(
61
+ createRouterBoundaryState(
62
+ "layout",
63
+ normalizeBoundaryConfig("layout", layout, {
64
+ routeId: getRouteId(route),
65
+ path: fullPath,
66
+ layoutIndex: index,
67
+ params
68
+ })
69
+ )
70
+ );
71
+ });
72
+ });
73
+ return states;
74
+ }
75
+ function createFallbackMatch(route, requestedPath, reason, error, errorMessage) {
76
+ const normalizedPath = normalizePathname(requestedPath);
77
+ const params = matchRoute(normalizedPath, route.path) ?? {};
78
+ const statusCode = reason === "not-found" ? 404 : 500;
79
+ const boundaryConfig = {
80
+ ...route.boundary ?? {},
81
+ attributes: {
82
+ ...route.boundary?.attributes ?? {},
83
+ requestedPath: normalizedPath,
84
+ statusCode,
85
+ reason,
86
+ errorMessage: errorMessage ?? error?.message
87
+ }
88
+ };
89
+ const layouts = collectLayouts([route], normalizedPath, params);
90
+ const routeBoundary = createRouterBoundaryState(
91
+ "route",
92
+ normalizeBoundaryConfig("route", boundaryConfig, {
93
+ routeId: getRouteId(route),
94
+ path: normalizedPath,
95
+ params
96
+ })
97
+ );
98
+ return {
99
+ route,
100
+ params,
101
+ fullPath: normalizedPath,
102
+ layouts,
103
+ boundary: routeBoundary
104
+ };
105
+ }
106
+ function match(path) {
107
+ const resolved = resolveMatch(path ?? currentPath());
108
+ if (path === void 0) {
109
+ currentMatchSignal.set(resolved);
110
+ }
111
+ return resolved;
112
+ }
113
+ function navigate(path, options2) {
114
+ return runNavigation(path, options2, 0);
115
+ }
116
+ function onPopState() {
117
+ if (typeof window === "undefined") {
118
+ return;
119
+ }
120
+ const nextPath = window.location.pathname;
121
+ runNavigation(nextPath, { replace: true }, 0);
122
+ }
123
+ const start = () => {
124
+ if (typeof window === "undefined") {
125
+ return;
126
+ }
127
+ window.addEventListener("popstate", onPopState);
128
+ };
129
+ const dispose = () => {
130
+ if (typeof window === "undefined") {
131
+ return;
132
+ }
133
+ window.removeEventListener("popstate", onPopState);
134
+ };
135
+ function runNavigation(path, options2, depth) {
136
+ const resolved = resolveMatch(path);
137
+ if (!resolved) {
138
+ applyHistory(path, options2);
139
+ currentPath.set(path);
140
+ currentMatchSignal.set(null);
141
+ return null;
142
+ }
143
+ const guardResult = runRouteGuards(resolved);
144
+ if (guardResult.type === "redirect") {
145
+ if (depth >= MAX_GUARD_REDIRECTS) {
146
+ throw new Error("Router redirect loop detected.");
147
+ }
148
+ const nextOptions = { ...options2, ...guardResult.options, replace: true };
149
+ return runNavigation(guardResult.to, nextOptions, depth + 1);
150
+ }
151
+ if (guardResult.type === "error") {
152
+ const info = guardResult.info ?? createGuardErrorInfo(resolved);
153
+ const rawMessage = guardResult.error.message;
154
+ if (errorRoute) {
155
+ try {
156
+ captureRuntimeError(guardResult.error, info);
157
+ } catch {
158
+ }
159
+ const errorMatch = createFallbackMatch(errorRoute, path, "error", guardResult.error, rawMessage);
160
+ applyHistory(path, options2);
161
+ currentPath.set(path);
162
+ currentMatchSignal.set(errorMatch);
163
+ return errorMatch;
164
+ }
165
+ captureRuntimeError(guardResult.error, info);
166
+ return currentMatchSignal();
167
+ }
168
+ applyHistory(path, options2);
169
+ currentPath.set(path);
170
+ currentMatchSignal.set(resolved);
171
+ return resolved;
172
+ }
173
+ function applyHistory(path, options2) {
174
+ if (typeof window === "undefined") {
175
+ return;
176
+ }
177
+ const historyState = options2?.state ?? {};
178
+ if (options2?.replace) {
179
+ window.history.replaceState(historyState, "", path);
180
+ } else {
181
+ window.history.pushState(historyState, "", path);
182
+ }
183
+ }
184
+ function runRouteGuards(match2) {
185
+ const guards = match2.route.guards ?? [];
186
+ for (const guard of guards) {
187
+ const result = guard({ match: match2, params: match2.params }) ?? CONTINUE_NAVIGATION;
188
+ if (result.type !== "continue") {
189
+ return result;
190
+ }
191
+ }
192
+ return CONTINUE_NAVIGATION;
193
+ }
194
+ function createGuardErrorInfo(match2) {
195
+ return {
196
+ phase: "navigation",
197
+ componentName: match2.boundary.definition.componentName,
198
+ componentInstanceId: match2.boundary.id,
199
+ templateId: match2.boundary.definition.templateId,
200
+ attributes: {
201
+ routeId: match2.route.id ?? match2.fullPath,
202
+ fullPath: match2.fullPath
203
+ }
204
+ };
205
+ }
206
+ return {
207
+ currentPath,
208
+ currentMatch: currentMatchSignal,
209
+ navigate,
210
+ match,
211
+ start,
212
+ dispose
213
+ };
214
+ }
215
+ function normalizeRouterOptions(input) {
216
+ if (Array.isArray(input)) {
217
+ return { routes: input };
218
+ }
219
+ return input;
220
+ }
221
+ function normalizeFallbackRoute(route, fallbackId, fallbackPath) {
222
+ if (!route) {
223
+ return void 0;
224
+ }
225
+ return {
226
+ ...route,
227
+ id: route.id ?? fallbackId,
228
+ path: route.path || fallbackPath
229
+ };
230
+ }
231
+ async function runRouteLoader(match, args) {
232
+ const result = await executeRouteHandler("loader", match.route.loader, match, args);
233
+ updateRouteDataCache(match, result);
234
+ return result;
235
+ }
236
+ async function runRouteAction(match, args) {
237
+ const result = await executeRouteHandler("action", match.route.action, match, args);
238
+ updateRouteDataCache(match, result);
239
+ return result;
240
+ }
241
+ async function prefetchRoute(match, options) {
242
+ await Promise.resolve(match.route.component());
243
+ if (options?.loadData) {
244
+ await runRouteLoader(match, options.loaderArgs);
245
+ }
246
+ }
247
+ function normalizeBoundaryConfig(kind, config, context) {
248
+ const layoutSuffix = typeof context.layoutIndex === "number" ? `:${String(context.layoutIndex)}` : "";
249
+ const fallbackId = `${kind}:${context.routeId}${layoutSuffix}`;
250
+ const componentName = config?.componentName ?? config?.name ?? context.routeId;
251
+ const attributes = {
252
+ ...config?.attributes ?? {},
253
+ routeId: context.routeId,
254
+ path: context.path,
255
+ layoutIndex: context.layoutIndex,
256
+ params: context.params ? { ...context.params } : void 0
257
+ };
258
+ return {
259
+ ...config,
260
+ id: config?.id ?? fallbackId,
261
+ name: config?.name ?? componentName,
262
+ componentName,
263
+ attributes
264
+ };
265
+ }
266
+ function createRouterBoundaryState(kind, definition) {
267
+ const state = {
268
+ id: definition.id,
269
+ kind,
270
+ definition,
271
+ boundary: {
272
+ id: definition.id,
273
+ handle(error, info) {
274
+ state.error = error;
275
+ state.info = info;
276
+ if (definition.onError) {
277
+ try {
278
+ const handled = definition.onError(error, info);
279
+ if (handled === false) {
280
+ return false;
281
+ }
282
+ } catch (hookError) {
283
+ state.error = hookError instanceof Error ? hookError : new Error(String(hookError));
284
+ state.info = info;
285
+ }
286
+ }
287
+ return true;
288
+ }
289
+ },
290
+ error: null,
291
+ info: null,
292
+ reset() {
293
+ state.error = null;
294
+ state.info = null;
295
+ }
296
+ };
297
+ return state;
298
+ }
299
+ async function executeRouteHandler(kind, handler, match, args) {
300
+ const startedAt = Date.now();
301
+ if (!handler) {
302
+ return {
303
+ handled: true,
304
+ startedAt,
305
+ endedAt: startedAt,
306
+ durationMs: 0
307
+ };
308
+ }
309
+ const normalizedArgs = normalizeHandlerArgs(match, args);
310
+ const boundaries = [...match.layouts, match.boundary];
311
+ boundaries.forEach((boundary) => {
312
+ boundary.reset();
313
+ });
314
+ try {
315
+ const data = await runWithBoundaries(boundaries, () => invokeRouteHandler(handler, kind, match, normalizedArgs));
316
+ const boundaryError = firstErroredBoundary(boundaries);
317
+ const endedAt = Date.now();
318
+ if (boundaryError) {
319
+ return {
320
+ handled: true,
321
+ error: boundaryError.error ?? void 0,
322
+ info: boundaryError.info ?? null,
323
+ startedAt,
324
+ endedAt,
325
+ durationMs: endedAt - startedAt
326
+ };
327
+ }
328
+ return {
329
+ handled: true,
330
+ data,
331
+ info: null,
332
+ startedAt,
333
+ endedAt,
334
+ durationMs: endedAt - startedAt
335
+ };
336
+ } catch (error) {
337
+ const normalized = error instanceof Error ? error : new Error(String(error));
338
+ const endedAt = Date.now();
339
+ return {
340
+ handled: false,
341
+ error: normalized,
342
+ info: null,
343
+ startedAt,
344
+ endedAt,
345
+ durationMs: endedAt - startedAt
346
+ };
347
+ }
348
+ }
349
+ function normalizeHandlerArgs(match, args) {
350
+ return {
351
+ params: args?.params ?? match.params,
352
+ request: args?.request,
353
+ signal: args?.signal,
354
+ context: args?.context
355
+ };
356
+ }
357
+ function runWithBoundaries(boundaries, run) {
358
+ return boundaries.reduceRight((next, boundary) => {
359
+ return () => withRuntimeErrorBoundary(boundary.boundary, next);
360
+ }, run)();
361
+ }
362
+ function invokeRouteHandler(handler, kind, match, args) {
363
+ const phase = kind === "loader" ? "loader" : "action";
364
+ const info = createHandlerErrorInfo(phase, match, args);
365
+ try {
366
+ const result = handler(args);
367
+ if (isPromiseLike(result)) {
368
+ return result.catch((error) => {
369
+ const handled = captureRuntimeError(error, info);
370
+ if (!handled) {
371
+ throw error;
372
+ }
373
+ return void 0;
374
+ });
375
+ }
376
+ return result;
377
+ } catch (error) {
378
+ const handled = captureRuntimeError(error, info);
379
+ if (!handled) {
380
+ throw error;
381
+ }
382
+ return void 0;
383
+ }
384
+ }
385
+ function createHandlerErrorInfo(phase, match, args) {
386
+ const attributes = {
387
+ ...match.boundary.definition.attributes,
388
+ params: args.params,
389
+ requestMethod: args.request?.method,
390
+ layoutStack: match.layouts.map((layout) => layout.definition.id)
391
+ };
392
+ return {
393
+ phase,
394
+ componentName: match.boundary.definition.componentName,
395
+ componentInstanceId: match.boundary.id,
396
+ templateId: match.boundary.definition.templateId,
397
+ attributes
398
+ };
399
+ }
400
+ function updateRouteDataCache(match, result) {
401
+ if (result.handled) {
402
+ cacheRouteDataResult(match, result);
403
+ return;
404
+ }
405
+ clearRouteDataResult(match);
406
+ }
407
+ function firstErroredBoundary(boundaries) {
408
+ for (let i = boundaries.length - 1; i >= 0; i -= 1) {
409
+ if (boundaries[i].error) {
410
+ return boundaries[i];
411
+ }
412
+ }
413
+ return void 0;
414
+ }
415
+ function isPromiseLike(value) {
416
+ return Boolean(value) && typeof value === "object" && "then" in value;
417
+ }
418
+
419
+ export { allowNavigation, createRouter, errorNavigation, prefetchRoute, redirectNavigation, runRouteAction, runRouteLoader };
420
+ //# sourceMappingURL=router.js.map
421
+ //# sourceMappingURL=router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/runtime/router.ts"],"names":["options","match"],"mappings":";;;;;;AAmEA,IAAM,mBAAA,GAAwC,EAAE,IAAA,EAAM,UAAA,EAAW;AACjE,IAAM,mBAAA,GAAsB,CAAA;AAErB,SAAS,eAAA,GAAoC;AAClD,EAAA,OAAO,mBAAA;AACT;AAEO,SAAS,kBAAA,CAAmB,IAAY,OAAA,EAA6C;AAC1F,EAAA,OAAO,EAAE,IAAA,EAAM,UAAA,EAAY,EAAA,EAAI,OAAA,EAAQ;AACzC;AAEO,SAAS,eAAA,CAAgB,OAAc,IAAA,EAAkD;AAC9F,EAAA,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,IAAA,EAAM,QAAQ,IAAA,EAAK;AACpD;AAgDO,SAAS,aAAa,KAAA,EAAkD;AAC7E,EAAA,MAAM,OAAA,GAAU,uBAAuB,KAAK,CAAA;AAC5C,EAAA,MAAM,SAAA,GAAY,aAAA,CAAc,OAAA,CAAQ,MAAM,CAAA;AAC9C,EAAA,MAAM,aAAA,GAAgB,sBAAA,CAAuB,OAAA,CAAQ,aAAA,EAAe,aAAa,GAAG,CAAA;AACpF,EAAA,MAAM,UAAA,GAAa,sBAAA,CAAuB,OAAA,CAAQ,UAAA,EAAY,SAAS,UAAU,CAAA;AACjF,EAAA,MAAM,cAAc,OAAO,MAAA,KAAW,WAAA,GAAc,MAAA,CAAO,SAAS,QAAA,GAAW,GAAA;AAC/E,EAAA,MAAM,WAAA,GAAc,OAAO,WAAW,CAAA;AACtC,EAAA,MAAM,kBAAA,GAAqB,MAAA,CAA0B,YAAA,CAAa,WAAW,CAAC,CAAA;AAE9E,EAAA,SAAS,aAAa,IAAA,EAAiC;AACrD,IAAA,KAAA,MAAW,QAAQ,SAAA,EAAW;AAC5B,MAAA,MAAM,MAAA,GAAS,UAAA,CAAW,IAAA,EAAM,IAAA,CAAK,QAAQ,CAAA;AAC7C,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,OAAO,gBAAA,CAAiB,MAAM,MAAM,CAAA;AAAA,MACtC;AAAA,IACF;AACA,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,OAAO,mBAAA,CAAoB,aAAA,EAAe,IAAA,EAAM,WAAW,CAAA;AAAA,IAC7D;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,SAAS,gBAAA,CAAiB,MAA0B,MAAA,EAA4C;AAC9F,IAAA,MAAM,UAAU,cAAA,CAAe,IAAA,CAAK,MAAA,EAAQ,IAAA,CAAK,UAAU,MAAM,CAAA;AACjE,IAAA,MAAM,aAAA,GAAgB,yBAAA;AAAA,MACpB,OAAA;AAAA,MACA,uBAAA,CAAwB,OAAA,EAAS,IAAA,CAAK,KAAA,CAAM,QAAA,EAAU;AAAA,QACpD,OAAA,EAAS,UAAA,CAAW,IAAA,CAAK,KAAK,CAAA;AAAA,QAC9B,MAAM,IAAA,CAAK,QAAA;AAAA,QACX;AAAA,OACD;AAAA,KACH;AACA,IAAA,OAAO;AAAA,MACL,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,MAAA;AAAA,MACA,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,OAAA;AAAA,MACA,QAAA,EAAU;AAAA,KACZ;AAAA,EACF;AAEA,EAAA,SAAS,cAAA,CAAe,MAAA,EAA2B,QAAA,EAAkB,MAAA,EAAuD;AAC1H,IAAA,MAAM,SAAgC,EAAC;AACvC,IAAA,MAAA,CAAO,QAAQ,CAAA,KAAA,KAAS;AACtB,MAAA,CAAC,MAAM,OAAA,IAAW,IAAI,OAAA,CAAQ,CAAC,QAAQ,KAAA,KAAU;AAC/C,QAAA,MAAA,CAAO,IAAA;AAAA,UACL,yBAAA;AAAA,YACE,QAAA;AAAA,YACA,uBAAA,CAAwB,UAAU,MAAA,EAAQ;AAAA,cACxC,OAAA,EAAS,WAAW,KAAK,CAAA;AAAA,cACzB,IAAA,EAAM,QAAA;AAAA,cACN,WAAA,EAAa,KAAA;AAAA,cACb;AAAA,aACD;AAAA;AACH,SACF;AAAA,MACF,CAAC,CAAA;AAAA,IACH,CAAC,CAAA;AACD,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,SAAS,mBAAA,CACP,KAAA,EACA,aAAA,EACA,MAAA,EACA,OACA,YAAA,EACY;AACZ,IAAA,MAAM,cAAA,GAAiB,kBAAkB,aAAa,CAAA;AACtD,IAAA,MAAM,SAAS,UAAA,CAAW,cAAA,EAAgB,KAAA,CAAM,IAAI,KAAK,EAAC;AAC1D,IAAA,MAAM,UAAA,GAAa,MAAA,KAAW,WAAA,GAAc,GAAA,GAAM,GAAA;AAClD,IAAA,MAAM,cAAA,GAAsC;AAAA,MAC1C,GAAI,KAAA,CAAM,QAAA,IAAY,EAAC;AAAA,MACvB,UAAA,EAAY;AAAA,QACV,GAAI,KAAA,CAAM,QAAA,EAAU,UAAA,IAAc,EAAC;AAAA,QACnC,aAAA,EAAe,cAAA;AAAA,QACf,UAAA;AAAA,QACA,MAAA;AAAA,QACA,YAAA,EAAc,gBAAgB,KAAA,EAAO;AAAA;AACvC,KACF;AACA,IAAA,MAAM,UAAU,cAAA,CAAe,CAAC,KAAK,CAAA,EAAG,gBAAgB,MAAM,CAAA;AAC9D,IAAA,MAAM,aAAA,GAAgB,yBAAA;AAAA,MACpB,OAAA;AAAA,MACA,uBAAA,CAAwB,SAAS,cAAA,EAAgB;AAAA,QAC/C,OAAA,EAAS,WAAW,KAAK,CAAA;AAAA,QACzB,IAAA,EAAM,cAAA;AAAA,QACN;AAAA,OACD;AAAA,KACH;AACA,IAAA,OAAO;AAAA,MACL,KAAA;AAAA,MACA,MAAA;AAAA,MACA,QAAA,EAAU,cAAA;AAAA,MACV,OAAA;AAAA,MACA,QAAA,EAAU;AAAA,KACZ;AAAA,EACF;AAEA,EAAA,SAAS,MAAM,IAAA,EAAkC;AAC/C,IAAA,MAAM,QAAA,GAAW,YAAA,CAAa,IAAA,IAAQ,WAAA,EAAa,CAAA;AACnD,IAAA,IAAI,SAAS,MAAA,EAAW;AACtB,MAAA,kBAAA,CAAmB,IAAI,QAAQ,CAAA;AAAA,IACjC;AACA,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,SAAS,QAAA,CAAS,MAAcA,QAAAA,EAA8C;AAC5E,IAAA,OAAO,aAAA,CAAc,IAAA,EAAMA,QAAAA,EAAS,CAAC,CAAA;AAAA,EACvC;AAEA,EAAA,SAAS,UAAA,GAAa;AACpB,IAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACjC,MAAA;AAAA,IACF;AACA,IAAA,MAAM,QAAA,GAAW,OAAO,QAAA,CAAS,QAAA;AACjC,IAAA,aAAA,CAAc,QAAA,EAAU,EAAE,OAAA,EAAS,IAAA,IAAQ,CAAC,CAAA;AAAA,EAC9C;AAEA,EAAA,MAAM,QAAQ,MAAM;AAClB,IAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACjC,MAAA;AAAA,IACF;AACA,IAAA,MAAA,CAAO,gBAAA,CAAiB,YAAY,UAAU,CAAA;AAAA,EAChD,CAAA;AAEA,EAAA,MAAM,UAAU,MAAM;AACpB,IAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACjC,MAAA;AAAA,IACF;AACA,IAAA,MAAA,CAAO,mBAAA,CAAoB,YAAY,UAAU,CAAA;AAAA,EACnD,CAAA;AAEA,EAAA,SAAS,aAAA,CAAc,IAAA,EAAcA,QAAAA,EAAsC,KAAA,EAAkC;AAC3G,IAAA,MAAM,QAAA,GAAW,aAAa,IAAI,CAAA;AAClC,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,YAAA,CAAa,MAAMA,QAAO,CAAA;AAC1B,MAAA,WAAA,CAAY,IAAI,IAAI,CAAA;AACpB,MAAA,kBAAA,CAAmB,IAAI,IAAI,CAAA;AAC3B,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,MAAM,WAAA,GAAc,eAAe,QAAQ,CAAA;AAC3C,IAAA,IAAI,WAAA,CAAY,SAAS,UAAA,EAAY;AACnC,MAAA,IAAI,SAAS,mBAAA,EAAqB;AAChC,QAAA,MAAM,IAAI,MAAM,gCAAgC,CAAA;AAAA,MAClD;AACA,MAAA,MAAM,WAAA,GAA+B,EAAE,GAAGA,QAAAA,EAAS,GAAG,WAAA,CAAY,OAAA,EAAS,SAAS,IAAA,EAAK;AACzF,MAAA,OAAO,aAAA,CAAc,WAAA,CAAY,EAAA,EAAI,WAAA,EAAa,QAAQ,CAAC,CAAA;AAAA,IAC7D;AACA,IAAA,IAAI,WAAA,CAAY,SAAS,OAAA,EAAS;AAChC,MAAA,MAAM,IAAA,GAAO,WAAA,CAAY,IAAA,IAAQ,oBAAA,CAAqB,QAAQ,CAAA;AAC9D,MAAA,MAAM,UAAA,GAAa,YAAY,KAAA,CAAM,OAAA;AACrC,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,IAAI;AACF,UAAA,mBAAA,CAAoB,WAAA,CAAY,OAAO,IAAI,CAAA;AAAA,QAC7C,CAAA,CAAA,MAAQ;AAAA,QAER;AACA,QAAA,MAAM,aAAa,mBAAA,CAAoB,UAAA,EAAY,MAAM,OAAA,EAAS,WAAA,CAAY,OAAO,UAAU,CAAA;AAC/F,QAAA,YAAA,CAAa,MAAMA,QAAO,CAAA;AAC1B,QAAA,WAAA,CAAY,IAAI,IAAI,CAAA;AACpB,QAAA,kBAAA,CAAmB,IAAI,UAAU,CAAA;AACjC,QAAA,OAAO,UAAA;AAAA,MACT;AACA,MAAA,mBAAA,CAAoB,WAAA,CAAY,OAAO,IAAI,CAAA;AAC3C,MAAA,OAAO,kBAAA,EAAmB;AAAA,IAC5B;AACA,IAAA,YAAA,CAAa,MAAMA,QAAO,CAAA;AAC1B,IAAA,WAAA,CAAY,IAAI,IAAI,CAAA;AACpB,IAAA,kBAAA,CAAmB,IAAI,QAAQ,CAAA;AAC/B,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,SAAS,YAAA,CAAa,MAAcA,QAAAA,EAA2B;AAC7D,IAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACjC,MAAA;AAAA,IACF;AACA,IAAA,MAAM,YAAA,GAAeA,QAAAA,EAAS,KAAA,IAAS,EAAC;AACxC,IAAA,IAAIA,UAAS,OAAA,EAAS;AACpB,MAAA,MAAA,CAAO,OAAA,CAAQ,YAAA,CAAa,YAAA,EAAc,EAAA,EAAI,IAAI,CAAA;AAAA,IACpD,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,OAAA,CAAQ,SAAA,CAAU,YAAA,EAAc,EAAA,EAAI,IAAI,CAAA;AAAA,IACjD;AAAA,EACF;AAEA,EAAA,SAAS,eAAeC,MAAAA,EAAqC;AAC3D,IAAA,MAAM,MAAA,GAASA,MAAAA,CAAM,KAAA,CAAM,MAAA,IAAU,EAAC;AACtC,IAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,MAAA,MAAM,MAAA,GAAS,MAAM,EAAE,KAAA,EAAAA,QAAO,MAAA,EAAQA,MAAAA,CAAM,MAAA,EAAQ,CAAA,IAAK,mBAAA;AACzD,MAAA,IAAI,MAAA,CAAO,SAAS,UAAA,EAAY;AAC9B,QAAA,OAAO,MAAA;AAAA,MACT;AAAA,IACF;AACA,IAAA,OAAO,mBAAA;AAAA,EACT;AAEA,EAAA,SAAS,qBAAqBA,MAAAA,EAAqC;AACjE,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,YAAA;AAAA,MACP,aAAA,EAAeA,MAAAA,CAAM,QAAA,CAAS,UAAA,CAAW,aAAA;AAAA,MACzC,mBAAA,EAAqBA,OAAM,QAAA,CAAS,EAAA;AAAA,MACpC,UAAA,EAAYA,MAAAA,CAAM,QAAA,CAAS,UAAA,CAAW,UAAA;AAAA,MACtC,UAAA,EAAY;AAAA,QACV,OAAA,EAASA,MAAAA,CAAM,KAAA,CAAM,EAAA,IAAMA,MAAAA,CAAM,QAAA;AAAA,QACjC,UAAUA,MAAAA,CAAM;AAAA;AAClB,KACF;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,WAAA;AAAA,IACA,YAAA,EAAc,kBAAA;AAAA,IACd,QAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACF;AACF;AAEA,SAAS,uBAAuB,KAAA,EAAyD;AACvF,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,OAAO,EAAE,QAAQ,KAAA,EAAM;AAAA,EACzB;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,sBAAA,CACP,KAAA,EACA,UAAA,EACA,YAAA,EAC6B;AAC7B,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO;AAAA,IACL,GAAG,KAAA;AAAA,IACH,EAAA,EAAI,MAAM,EAAA,IAAM,UAAA;AAAA,IAChB,IAAA,EAAM,MAAM,IAAA,IAAQ;AAAA,GACtB;AACF;AAGA,eAAsB,cAAA,CACpB,OACA,IAAA,EACgC;AAChC,EAAA,MAAM,MAAA,GAAS,MAAM,mBAAA,CAAuB,QAAA,EAAU,MAAM,KAAA,CAAM,MAAA,EAA2C,OAAO,IAAI,CAAA;AACxH,EAAA,oBAAA,CAAqB,OAAO,MAAM,CAAA;AAClC,EAAA,OAAO,MAAA;AACT;AAEA,eAAsB,cAAA,CACpB,OACA,IAAA,EACgC;AAChC,EAAA,MAAM,MAAA,GAAS,MAAM,mBAAA,CAAuB,QAAA,EAAU,MAAM,KAAA,CAAM,MAAA,EAA2C,OAAO,IAAI,CAAA;AACxH,EAAA,oBAAA,CAAqB,OAAO,MAAM,CAAA;AAClC,EAAA,OAAO,MAAA;AACT;AAEA,eAAsB,aAAA,CAAc,OAAmB,OAAA,EAA+C;AACpG,EAAA,MAAM,OAAA,CAAQ,OAAA,CAAQ,KAAA,CAAM,KAAA,CAAM,WAAW,CAAA;AAC7C,EAAA,IAAI,SAAS,QAAA,EAAU;AACrB,IAAA,MAAM,cAAA,CAAe,KAAA,EAAO,OAAA,CAAQ,UAAU,CAAA;AAAA,EAChD;AACF;AAaA,SAAS,uBAAA,CACP,IAAA,EACA,MAAA,EACA,OAAA,EAC6B;AAC7B,EAAA,MAAM,YAAA,GAAe,OAAO,OAAA,CAAQ,WAAA,KAAgB,QAAA,GAAW,IAAI,MAAA,CAAO,OAAA,CAAQ,WAAW,CAAC,CAAA,CAAA,GAAK,EAAA;AACnG,EAAA,MAAM,aAAa,CAAA,EAAG,IAAI,IAAI,OAAA,CAAQ,OAAO,GAAG,YAAY,CAAA,CAAA;AAC5D,EAAA,MAAM,aAAA,GAAgB,MAAA,EAAQ,aAAA,IAAiB,MAAA,EAAQ,QAAQ,OAAA,CAAQ,OAAA;AACvE,EAAA,MAAM,UAAA,GAAa;AAAA,IACjB,GAAI,MAAA,EAAQ,UAAA,IAAc,EAAC;AAAA,IAC3B,SAAS,OAAA,CAAQ,OAAA;AAAA,IACjB,MAAM,OAAA,CAAQ,IAAA;AAAA,IACd,aAAa,OAAA,CAAQ,WAAA;AAAA,IACrB,QAAQ,OAAA,CAAQ,MAAA,GAAS,EAAE,GAAG,OAAA,CAAQ,QAAO,GAAI;AAAA,GACnD;AACA,EAAA,OAAO;AAAA,IACL,GAAG,MAAA;AAAA,IACH,EAAA,EAAI,QAAQ,EAAA,IAAM,UAAA;AAAA,IAClB,IAAA,EAAM,QAAQ,IAAA,IAAQ,aAAA;AAAA,IACtB,aAAA;AAAA,IACA;AAAA,GACF;AACF;AAEA,SAAS,yBAAA,CACP,MACA,UAAA,EACqB;AACrB,EAAA,MAAM,KAAA,GAA6B;AAAA,IACjC,IAAI,UAAA,CAAW,EAAA;AAAA,IACf,IAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA,EAAU;AAAA,MACR,IAAI,UAAA,CAAW,EAAA;AAAA,MACf,MAAA,CAAO,OAAO,IAAA,EAAM;AAClB,QAAA,KAAA,CAAM,KAAA,GAAQ,KAAA;AACd,QAAA,KAAA,CAAM,IAAA,GAAO,IAAA;AACb,QAAA,IAAI,WAAW,OAAA,EAAS;AACtB,UAAA,IAAI;AACF,YAAA,MAAM,OAAA,GAAU,UAAA,CAAW,OAAA,CAAQ,KAAA,EAAO,IAAI,CAAA;AAC9C,YAAA,IAAI,YAAY,KAAA,EAAO;AACrB,cAAA,OAAO,KAAA;AAAA,YACT;AAAA,UACF,SAAS,SAAA,EAAW;AAClB,YAAA,KAAA,CAAM,KAAA,GAAQ,qBAAqB,KAAA,GAAQ,SAAA,GAAY,IAAI,KAAA,CAAM,MAAA,CAAO,SAAS,CAAC,CAAA;AAClF,YAAA,KAAA,CAAM,IAAA,GAAO,IAAA;AAAA,UACf;AAAA,QACF;AACA,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,KACF;AAAA,IACA,KAAA,EAAO,IAAA;AAAA,IACP,IAAA,EAAM,IAAA;AAAA,IACN,KAAA,GAAQ;AACN,MAAA,KAAA,CAAM,KAAA,GAAQ,IAAA;AACd,MAAA,KAAA,CAAM,IAAA,GAAO,IAAA;AAAA,IACf;AAAA,GACF;AACA,EAAA,OAAO,KAAA;AACT;AAEA,eAAe,mBAAA,CACb,IAAA,EACA,OAAA,EACA,KAAA,EACA,IAAA,EACgC;AAChC,EAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,IAAA;AAAA,MACT,SAAA;AAAA,MACA,OAAA,EAAS,SAAA;AAAA,MACT,UAAA,EAAY;AAAA,KACd;AAAA,EACF;AACA,EAAA,MAAM,cAAA,GAAiB,oBAAA,CAAqB,KAAA,EAAO,IAAI,CAAA;AACvD,EAAA,MAAM,aAAa,CAAC,GAAG,KAAA,CAAM,OAAA,EAAS,MAAM,QAAQ,CAAA;AACpD,EAAA,UAAA,CAAW,QAAQ,CAAA,QAAA,KAAY;AAC7B,IAAA,QAAA,CAAS,KAAA,EAAM;AAAA,EACjB,CAAC,CAAA;AACD,EAAA,IAAI;AACF,IAAA,MAAM,IAAA,GAAO,MAAM,iBAAA,CAAkB,UAAA,EAAY,MAAM,mBAAmB,OAAA,EAAS,IAAA,EAAM,KAAA,EAAO,cAAc,CAAC,CAAA;AAC/G,IAAA,MAAM,aAAA,GAAgB,qBAAqB,UAAU,CAAA;AACrD,IAAA,MAAM,OAAA,GAAU,KAAK,GAAA,EAAI;AACzB,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,IAAA;AAAA,QACT,KAAA,EAAO,cAAc,KAAA,IAAS,KAAA,CAAA;AAAA,QAC9B,IAAA,EAAM,cAAc,IAAA,IAAQ,IAAA;AAAA,QAC5B,SAAA;AAAA,QACA,OAAA;AAAA,QACA,YAAY,OAAA,GAAU;AAAA,OACxB;AAAA,IACF;AACA,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,IAAA;AAAA,MACT,IAAA;AAAA,MACA,IAAA,EAAM,IAAA;AAAA,MACN,SAAA;AAAA,MACA,OAAA;AAAA,MACA,YAAY,OAAA,GAAU;AAAA,KACxB;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,UAAA,GAAa,iBAAiB,KAAA,GAAQ,KAAA,GAAQ,IAAI,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAA;AAC3E,IAAA,MAAM,OAAA,GAAU,KAAK,GAAA,EAAI;AACzB,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,KAAA,EAAO,UAAA;AAAA,MACP,IAAA,EAAM,IAAA;AAAA,MACN,SAAA;AAAA,MACA,OAAA;AAAA,MACA,YAAY,OAAA,GAAU;AAAA,KACxB;AAAA,EACF;AACF;AAEA,SAAS,oBAAA,CAAqB,OAAmB,IAAA,EAAkD;AACjG,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,IAAA,EAAM,MAAA,IAAU,KAAA,CAAM,MAAA;AAAA,IAC9B,SAAS,IAAA,EAAM,OAAA;AAAA,IACf,QAAQ,IAAA,EAAM,MAAA;AAAA,IACd,SAAS,IAAA,EAAM;AAAA,GACjB;AACF;AAEA,SAAS,iBAAA,CAAqB,YAAmC,GAAA,EAAiB;AAChF,EAAA,OAAO,UAAA,CAAW,WAAA,CAAY,CAAC,IAAA,EAAM,QAAA,KAAa;AAChD,IAAA,OAAO,MAAM,wBAAA,CAAyB,QAAA,CAAS,QAAA,EAAU,IAAI,CAAA;AAAA,EAC/D,CAAA,EAAG,GAAG,CAAA,EAAE;AACV;AAEA,SAAS,kBAAA,CACP,OAAA,EACA,IAAA,EACA,KAAA,EACA,IAAA,EACwC;AACxC,EAAA,MAAM,KAAA,GAAQ,IAAA,KAAS,QAAA,GAAW,QAAA,GAAW,QAAA;AAC7C,EAAA,MAAM,IAAA,GAAO,sBAAA,CAAuB,KAAA,EAAO,KAAA,EAAO,IAAI,CAAA;AACtD,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,QAAQ,IAAI,CAAA;AAC3B,IAAA,IAAI,aAAA,CAAc,MAAM,CAAA,EAAG;AACzB,MAAA,OAAO,MAAA,CAAO,KAAA,CAAM,CAAC,KAAA,KAAmB;AACtC,QAAA,MAAM,OAAA,GAAU,mBAAA,CAAoB,KAAA,EAAO,IAAI,CAAA;AAC/C,QAAA,IAAI,CAAC,OAAA,EAAS;AACZ,UAAA,MAAM,KAAA;AAAA,QACR;AACA,QAAA,OAAO,KAAA,CAAA;AAAA,MACT,CAAC,CAAA;AAAA,IACH;AACA,IAAA,OAAO,MAAA;AAAA,EACT,SAAS,KAAA,EAAgB;AACvB,IAAA,MAAM,OAAA,GAAU,mBAAA,CAAoB,KAAA,EAAO,IAAI,CAAA;AAC/C,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,MAAM,KAAA;AAAA,IACR;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAEA,SAAS,sBAAA,CACP,KAAA,EACA,KAAA,EACA,IAAA,EACkB;AAClB,EAAA,MAAM,UAAA,GAAa;AAAA,IACjB,GAAG,KAAA,CAAM,QAAA,CAAS,UAAA,CAAW,UAAA;AAAA,IAC7B,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,aAAA,EAAe,KAAK,OAAA,EAAS,MAAA;AAAA,IAC7B,aAAa,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,MAAA,KAAU,MAAA,CAAO,WAAW,EAAE;AAAA,GAC/D;AACA,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA,aAAA,EAAe,KAAA,CAAM,QAAA,CAAS,UAAA,CAAW,aAAA;AAAA,IACzC,mBAAA,EAAqB,MAAM,QAAA,CAAS,EAAA;AAAA,IACpC,UAAA,EAAY,KAAA,CAAM,QAAA,CAAS,UAAA,CAAW,UAAA;AAAA,IACtC;AAAA,GACF;AACF;AAEA,SAAS,oBAAA,CAAqB,OAAmB,MAAA,EAAkC;AACjF,EAAA,IAAI,OAAO,OAAA,EAAS;AAClB,IAAA,oBAAA,CAAqB,OAAO,MAAM,CAAA;AAClC,IAAA;AAAA,EACF;AACA,EAAA,oBAAA,CAAqB,KAAK,CAAA;AAC5B;AAEA,SAAS,qBAAqB,UAAA,EAAoE;AAChG,EAAA,KAAA,IAAS,IAAI,UAAA,CAAW,MAAA,GAAS,GAAG,CAAA,IAAK,CAAA,EAAG,KAAK,CAAA,EAAG;AAClD,IAAA,IAAI,UAAA,CAAW,CAAC,CAAA,CAAE,KAAA,EAAO;AACvB,MAAA,OAAO,WAAW,CAAC,CAAA;AAAA,IACrB;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,cAAiB,KAAA,EAAqC;AAC7D,EAAA,OAAO,QAAQ,KAAK,CAAA,IAAK,OAAO,KAAA,KAAU,YAAY,MAAA,IAAW,KAAA;AACnE","file":"router.js","sourcesContent":["import { captureRuntimeError, RuntimeErrorBoundary, RuntimeErrorInfo, withRuntimeErrorBoundary } from './errors.js';\nimport { signal, SignalAccessor } from './signals.js';\nimport { cacheRouteDataResult, clearRouteDataResult } from './route-data-registry.js';\nimport { flattenRoutes, getRouteId, matchRoute, normalizePathname } from './router-utils.js';\nimport type { FlattenedRouteNode } from './router-utils.js';\n\nexport type RouteComponentFactory = () => Promise<Record<string, unknown>> | Record<string, unknown>;\n\nexport interface RouteBoundaryConfig {\n id?: string;\n name?: string;\n componentName?: string;\n templateId?: string;\n attributes?: Record<string, unknown>;\n onError?: (error: Error, info: RuntimeErrorInfo) => boolean | undefined;\n}\n\nexport type RouteLayoutDefinition = RouteBoundaryConfig;\n\nexport interface RouteDefinition {\n id?: string;\n path: string;\n component: RouteComponentFactory;\n boundary?: RouteBoundaryConfig;\n layouts?: RouteLayoutDefinition[];\n loader?: RouteDataHandler;\n action?: RouteDataHandler;\n guards?: RouteGuard[];\n children?: RouteDefinition[];\n}\n\nexport interface RouteHandlerArgs {\n params: Record<string, string>;\n request?: Request;\n signal?: AbortSignal;\n context?: Record<string, unknown>;\n}\n\nexport type RouteDataHandler<T = unknown> = (args: RouteHandlerArgs) => T | Promise<T>;\n\nexport interface RouteHandlerResult<T = unknown> {\n data?: T;\n error?: Error;\n info?: RuntimeErrorInfo | null;\n handled: boolean;\n startedAt?: number;\n endedAt?: number;\n durationMs?: number;\n}\n\nexport interface RouteGuardContext {\n match: RouteMatch;\n params: Record<string, string>;\n}\n\nexport type RouteGuardResult =\n | { type: 'continue' }\n | { type: 'redirect'; to: string; options?: NavigateOptions }\n | { type: 'error'; error: Error; info?: RuntimeErrorInfo | null };\n\nexport type RouteGuard = (context: RouteGuardContext) => RouteGuardResult | undefined;\n\nexport interface RoutePrefetchOptions {\n loadData?: boolean;\n loaderArgs?: PartialRouteHandlerArgs;\n}\n\nconst CONTINUE_NAVIGATION: RouteGuardResult = { type: 'continue' } as const;\nconst MAX_GUARD_REDIRECTS = 8;\n\nexport function allowNavigation(): RouteGuardResult {\n return CONTINUE_NAVIGATION;\n}\n\nexport function redirectNavigation(to: string, options?: NavigateOptions): RouteGuardResult {\n return { type: 'redirect', to, options };\n}\n\nexport function errorNavigation(error: Error, info?: RuntimeErrorInfo | null): RouteGuardResult {\n return { type: 'error', error, info: info ?? null };\n}\n\nexport type RouterBoundaryKind = 'layout' | 'route';\n\nexport interface RouteBoundaryConfigResolved extends RouteBoundaryConfig {\n id: string;\n componentName: string;\n attributes: Record<string, unknown>;\n}\n\nexport interface RouterBoundaryState {\n id: string;\n kind: RouterBoundaryKind;\n definition: RouteBoundaryConfigResolved;\n boundary: RuntimeErrorBoundary;\n error: Error | null;\n info: RuntimeErrorInfo | null;\n reset(): void;\n}\n\nexport interface RouteMatch {\n route: RouteDefinition;\n params: Record<string, string>;\n fullPath: string;\n layouts: RouterBoundaryState[];\n boundary: RouterBoundaryState;\n}\n\nexport interface NavigateOptions {\n replace?: boolean;\n state?: unknown;\n}\n\nexport interface Router {\n currentPath: SignalAccessor<string>;\n currentMatch: SignalAccessor<RouteMatch | null>;\n navigate(path: string, options?: NavigateOptions): RouteMatch | null;\n match(path?: string): RouteMatch | null;\n start(): void;\n dispose(): void;\n}\n\nexport interface RouterOptions {\n routes: RouteDefinition[];\n notFoundRoute?: RouteDefinition;\n errorRoute?: RouteDefinition;\n}\n\nexport function createRouter(input: RouteDefinition[] | RouterOptions): Router {\n const options = normalizeRouterOptions(input);\n const flattened = flattenRoutes(options.routes);\n const notFoundRoute = normalizeFallbackRoute(options.notFoundRoute, 'not-found', '*');\n const errorRoute = normalizeFallbackRoute(options.errorRoute, 'error', '/__error');\n const initialPath = typeof window !== 'undefined' ? window.location.pathname : '/';\n const currentPath = signal(initialPath);\n const currentMatchSignal = signal<RouteMatch | null>(resolveMatch(initialPath));\n\n function resolveMatch(path: string): RouteMatch | null {\n for (const node of flattened) {\n const params = matchRoute(path, node.fullPath);\n if (params) {\n return instantiateMatch(node, params);\n }\n }\n if (notFoundRoute) {\n return createFallbackMatch(notFoundRoute, path, 'not-found');\n }\n return null;\n }\n\n function instantiateMatch(node: FlattenedRouteNode, params: Record<string, string>): RouteMatch {\n const layouts = collectLayouts(node.branch, node.fullPath, params);\n const routeBoundary = createRouterBoundaryState(\n 'route',\n normalizeBoundaryConfig('route', node.route.boundary, {\n routeId: getRouteId(node.route),\n path: node.fullPath,\n params,\n }),\n );\n return {\n route: node.route,\n params,\n fullPath: node.fullPath,\n layouts,\n boundary: routeBoundary,\n } satisfies RouteMatch;\n }\n\n function collectLayouts(branch: RouteDefinition[], fullPath: string, params: Record<string, string>): RouterBoundaryState[] {\n const states: RouterBoundaryState[] = [];\n branch.forEach(route => {\n (route.layouts ?? []).forEach((layout, index) => {\n states.push(\n createRouterBoundaryState(\n 'layout',\n normalizeBoundaryConfig('layout', layout, {\n routeId: getRouteId(route),\n path: fullPath,\n layoutIndex: index,\n params,\n }),\n ),\n );\n });\n });\n return states;\n }\n\n function createFallbackMatch(\n route: RouteDefinition,\n requestedPath: string,\n reason: 'not-found' | 'error',\n error?: Error,\n errorMessage?: string,\n ): RouteMatch {\n const normalizedPath = normalizePathname(requestedPath);\n const params = matchRoute(normalizedPath, route.path) ?? {};\n const statusCode = reason === 'not-found' ? 404 : 500;\n const boundaryConfig: RouteBoundaryConfig = {\n ...(route.boundary ?? {}),\n attributes: {\n ...(route.boundary?.attributes ?? {}),\n requestedPath: normalizedPath,\n statusCode,\n reason,\n errorMessage: errorMessage ?? error?.message,\n },\n };\n const layouts = collectLayouts([route], normalizedPath, params);\n const routeBoundary = createRouterBoundaryState(\n 'route',\n normalizeBoundaryConfig('route', boundaryConfig, {\n routeId: getRouteId(route),\n path: normalizedPath,\n params,\n }),\n );\n return {\n route,\n params,\n fullPath: normalizedPath,\n layouts,\n boundary: routeBoundary,\n } satisfies RouteMatch;\n }\n\n function match(path?: string): RouteMatch | null {\n const resolved = resolveMatch(path ?? currentPath());\n if (path === undefined) {\n currentMatchSignal.set(resolved);\n }\n return resolved;\n }\n\n function navigate(path: string, options?: NavigateOptions): RouteMatch | null {\n return runNavigation(path, options, 0);\n }\n\n function onPopState() {\n if (typeof window === 'undefined') {\n return;\n }\n const nextPath = window.location.pathname;\n runNavigation(nextPath, { replace: true }, 0);\n }\n\n const start = () => {\n if (typeof window === 'undefined') {\n return;\n }\n window.addEventListener('popstate', onPopState);\n };\n\n const dispose = () => {\n if (typeof window === 'undefined') {\n return;\n }\n window.removeEventListener('popstate', onPopState);\n };\n\n function runNavigation(path: string, options: NavigateOptions | undefined, depth: number): RouteMatch | null {\n const resolved = resolveMatch(path);\n if (!resolved) {\n applyHistory(path, options);\n currentPath.set(path);\n currentMatchSignal.set(null);\n return null;\n }\n const guardResult = runRouteGuards(resolved);\n if (guardResult.type === 'redirect') {\n if (depth >= MAX_GUARD_REDIRECTS) {\n throw new Error('Router redirect loop detected.');\n }\n const nextOptions: NavigateOptions = { ...options, ...guardResult.options, replace: true };\n return runNavigation(guardResult.to, nextOptions, depth + 1);\n }\n if (guardResult.type === 'error') {\n const info = guardResult.info ?? createGuardErrorInfo(resolved);\n const rawMessage = guardResult.error.message;\n if (errorRoute) {\n try {\n captureRuntimeError(guardResult.error, info);\n } catch {\n // Guard error is surfaced via fallback routes; avoid throwing.\n }\n const errorMatch = createFallbackMatch(errorRoute, path, 'error', guardResult.error, rawMessage);\n applyHistory(path, options);\n currentPath.set(path);\n currentMatchSignal.set(errorMatch);\n return errorMatch;\n }\n captureRuntimeError(guardResult.error, info);\n return currentMatchSignal();\n }\n applyHistory(path, options);\n currentPath.set(path);\n currentMatchSignal.set(resolved);\n return resolved;\n }\n\n function applyHistory(path: string, options?: NavigateOptions) {\n if (typeof window === 'undefined') {\n return;\n }\n const historyState = options?.state ?? {};\n if (options?.replace) {\n window.history.replaceState(historyState, '', path);\n } else {\n window.history.pushState(historyState, '', path);\n }\n }\n\n function runRouteGuards(match: RouteMatch): RouteGuardResult {\n const guards = match.route.guards ?? [];\n for (const guard of guards) {\n const result = guard({ match, params: match.params }) ?? CONTINUE_NAVIGATION;\n if (result.type !== 'continue') {\n return result;\n }\n }\n return CONTINUE_NAVIGATION;\n }\n\n function createGuardErrorInfo(match: RouteMatch): RuntimeErrorInfo {\n return {\n phase: 'navigation',\n componentName: match.boundary.definition.componentName,\n componentInstanceId: match.boundary.id,\n templateId: match.boundary.definition.templateId,\n attributes: {\n routeId: match.route.id ?? match.fullPath,\n fullPath: match.fullPath,\n },\n } satisfies RuntimeErrorInfo;\n }\n\n return {\n currentPath,\n currentMatch: currentMatchSignal,\n navigate,\n match,\n start,\n dispose,\n } satisfies Router;\n}\n\nfunction normalizeRouterOptions(input: RouteDefinition[] | RouterOptions): RouterOptions {\n if (Array.isArray(input)) {\n return { routes: input };\n }\n return input;\n}\n\nfunction normalizeFallbackRoute(\n route: RouteDefinition | undefined,\n fallbackId: string,\n fallbackPath: string,\n): RouteDefinition | undefined {\n if (!route) {\n return undefined;\n }\n return {\n ...route,\n id: route.id ?? fallbackId,\n path: route.path || fallbackPath,\n };\n}\n\n\nexport async function runRouteLoader<T = unknown>(\n match: RouteMatch,\n args?: PartialRouteHandlerArgs,\n): Promise<RouteHandlerResult<T>> {\n const result = await executeRouteHandler<T>('loader', match.route.loader as RouteDataHandler<T> | undefined, match, args);\n updateRouteDataCache(match, result);\n return result;\n}\n\nexport async function runRouteAction<T = unknown>(\n match: RouteMatch,\n args?: PartialRouteHandlerArgs,\n): Promise<RouteHandlerResult<T>> {\n const result = await executeRouteHandler<T>('action', match.route.action as RouteDataHandler<T> | undefined, match, args);\n updateRouteDataCache(match, result);\n return result;\n}\n\nexport async function prefetchRoute(match: RouteMatch, options?: RoutePrefetchOptions): Promise<void> {\n await Promise.resolve(match.route.component());\n if (options?.loadData) {\n await runRouteLoader(match, options.loaderArgs);\n }\n}\n\ntype RouteHandlerKind = 'loader' | 'action';\n\ntype PartialRouteHandlerArgs = Partial<Omit<RouteHandlerArgs, 'params'>> & { params?: Record<string, string> };\n\ninterface BoundaryContextExtras {\n routeId: string;\n path: string;\n layoutIndex?: number;\n params?: Record<string, string>;\n}\n\nfunction normalizeBoundaryConfig(\n kind: RouterBoundaryKind,\n config: RouteBoundaryConfig | undefined,\n context: BoundaryContextExtras,\n): RouteBoundaryConfigResolved {\n const layoutSuffix = typeof context.layoutIndex === 'number' ? `:${String(context.layoutIndex)}` : '';\n const fallbackId = `${kind}:${context.routeId}${layoutSuffix}`;\n const componentName = config?.componentName ?? config?.name ?? context.routeId;\n const attributes = {\n ...(config?.attributes ?? {}),\n routeId: context.routeId,\n path: context.path,\n layoutIndex: context.layoutIndex,\n params: context.params ? { ...context.params } : undefined,\n } satisfies Record<string, unknown>;\n return {\n ...config,\n id: config?.id ?? fallbackId,\n name: config?.name ?? componentName,\n componentName,\n attributes,\n } as RouteBoundaryConfigResolved;\n}\n\nfunction createRouterBoundaryState(\n kind: RouterBoundaryKind,\n definition: RouteBoundaryConfigResolved,\n): RouterBoundaryState {\n const state: RouterBoundaryState = {\n id: definition.id,\n kind,\n definition,\n boundary: {\n id: definition.id,\n handle(error, info) {\n state.error = error;\n state.info = info;\n if (definition.onError) {\n try {\n const handled = definition.onError(error, info);\n if (handled === false) {\n return false;\n }\n } catch (hookError) {\n state.error = hookError instanceof Error ? hookError : new Error(String(hookError));\n state.info = info;\n }\n }\n return true;\n },\n },\n error: null,\n info: null,\n reset() {\n state.error = null;\n state.info = null;\n },\n } satisfies RouterBoundaryState;\n return state;\n}\n\nasync function executeRouteHandler<T>(\n kind: RouteHandlerKind,\n handler: RouteDataHandler<T> | undefined,\n match: RouteMatch,\n args?: PartialRouteHandlerArgs,\n): Promise<RouteHandlerResult<T>> {\n const startedAt = Date.now();\n if (!handler) {\n return {\n handled: true,\n startedAt,\n endedAt: startedAt,\n durationMs: 0,\n } satisfies RouteHandlerResult<T>;\n }\n const normalizedArgs = normalizeHandlerArgs(match, args);\n const boundaries = [...match.layouts, match.boundary];\n boundaries.forEach(boundary => {\n boundary.reset();\n });\n try {\n const data = await runWithBoundaries(boundaries, () => invokeRouteHandler(handler, kind, match, normalizedArgs));\n const boundaryError = firstErroredBoundary(boundaries);\n const endedAt = Date.now();\n if (boundaryError) {\n return {\n handled: true,\n error: boundaryError.error ?? undefined,\n info: boundaryError.info ?? null,\n startedAt,\n endedAt,\n durationMs: endedAt - startedAt,\n } satisfies RouteHandlerResult<T>;\n }\n return {\n handled: true,\n data: data as T,\n info: null,\n startedAt,\n endedAt,\n durationMs: endedAt - startedAt,\n } satisfies RouteHandlerResult<T>;\n } catch (error) {\n const normalized = error instanceof Error ? error : new Error(String(error));\n const endedAt = Date.now();\n return {\n handled: false,\n error: normalized,\n info: null,\n startedAt,\n endedAt,\n durationMs: endedAt - startedAt,\n } satisfies RouteHandlerResult<T>;\n }\n}\n\nfunction normalizeHandlerArgs(match: RouteMatch, args?: PartialRouteHandlerArgs): RouteHandlerArgs {\n return {\n params: args?.params ?? match.params,\n request: args?.request,\n signal: args?.signal,\n context: args?.context,\n } satisfies RouteHandlerArgs;\n}\n\nfunction runWithBoundaries<T>(boundaries: RouterBoundaryState[], run: () => T): T {\n return boundaries.reduceRight((next, boundary) => {\n return () => withRuntimeErrorBoundary(boundary.boundary, next);\n }, run)();\n}\n\nfunction invokeRouteHandler<T>(\n handler: RouteDataHandler<T>,\n kind: RouteHandlerKind,\n match: RouteMatch,\n args: RouteHandlerArgs,\n): T | Promise<T | undefined> | undefined {\n const phase = kind === 'loader' ? 'loader' : 'action';\n const info = createHandlerErrorInfo(phase, match, args);\n try {\n const result = handler(args);\n if (isPromiseLike(result)) {\n return result.catch((error: unknown) => {\n const handled = captureRuntimeError(error, info);\n if (!handled) {\n throw error;\n }\n return undefined;\n });\n }\n return result;\n } catch (error: unknown) {\n const handled = captureRuntimeError(error, info);\n if (!handled) {\n throw error;\n }\n return undefined;\n }\n}\n\nfunction createHandlerErrorInfo(\n phase: 'loader' | 'action',\n match: RouteMatch,\n args: RouteHandlerArgs,\n): RuntimeErrorInfo {\n const attributes = {\n ...match.boundary.definition.attributes,\n params: args.params,\n requestMethod: args.request?.method,\n layoutStack: match.layouts.map(layout => layout.definition.id),\n } satisfies Record<string, unknown>;\n return {\n phase,\n componentName: match.boundary.definition.componentName,\n componentInstanceId: match.boundary.id,\n templateId: match.boundary.definition.templateId,\n attributes,\n } satisfies RuntimeErrorInfo;\n}\n\nfunction updateRouteDataCache(match: RouteMatch, result: RouteHandlerResult): void {\n if (result.handled) {\n cacheRouteDataResult(match, result);\n return;\n }\n clearRouteDataResult(match);\n}\n\nfunction firstErroredBoundary(boundaries: RouterBoundaryState[]): RouterBoundaryState | undefined {\n for (let i = boundaries.length - 1; i >= 0; i -= 1) {\n if (boundaries[i].error) {\n return boundaries[i];\n }\n }\n return undefined;\n}\n\nfunction isPromiseLike<T>(value: unknown): value is Promise<T> {\n return Boolean(value) && typeof value === 'object' && 'then' in (value as Record<string, unknown>);\n}\n"]}