@kimesh/router-runtime 0.1.0-nightly.20260119170404 → 0.1.0-nightly.20260120063147
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +2 -3
- package/dist/index.mjs +1 -2
- package/package.json +1 -1
- package/dist/index.d.mts.map +0 -1
- package/dist/index.mjs.map +0 -1
package/dist/index.d.mts
CHANGED
|
@@ -407,7 +407,7 @@ declare module "vue-router" {
|
|
|
407
407
|
/** Source layer name for layer-aware features */
|
|
408
408
|
__kimeshLayer?: string;
|
|
409
409
|
}
|
|
410
|
-
}
|
|
410
|
+
}
|
|
411
411
|
//#endregion
|
|
412
412
|
//#region src/create-app.d.ts
|
|
413
413
|
declare const KIMESH_APP_CONTEXT_KEY: InjectionKey<KimeshAppContext>;
|
|
@@ -1125,5 +1125,4 @@ declare function useNavigationGuard(guard: BeforeNavigationHandler): () => void;
|
|
|
1125
1125
|
*/
|
|
1126
1126
|
declare function useAfterNavigation(callback: AfterNavigationHandler): () => void;
|
|
1127
1127
|
//#endregion
|
|
1128
|
-
export { type BeforeLoadContext, type CreateKimeshAppOptions, type CreateKimeshAppOptionsExtended, type FileRouteOptions, type FullContext, type HasParams, KIMESH_APP_CONTEXT_KEY, KIMESH_CONTEXT_KEY, KIMESH_PLUGIN_INDICATOR, type KimeshApp, type KimeshAppContext, type KimeshContext, type KimeshRuntimeHooks, type KimeshRuntimePlugin, type KimeshRuntimePluginDefinition, type KimeshRuntimePluginMeta, type KimeshRuntimePluginResult, KmDeferred, KmLink, type KmLinkProps, KmOutlet, type LoaderContext, type LoaderFn, type LoaderGuardOptions, type NavigateOptions, type NavigationAfterHookContext, type NavigationContext, type NavigationErrorContext, type NavigationErrorHookContext, type NavigationGuard, type NavigationHookAfter, type NavigationHookContext, type NavigationMiddlewareOptions, type ParamValue, type ParamValueOneOrMore, type ParamValueZeroOrMore, type ParamValueZeroOrOne, type QueryPluginOptions, type RouteDefinition, type RouteHeadConfig, type RouteHeadContext, type RouteHeadFn, type RouteInfoByName, type RouteLocationNormalized, type RouteLocationNormalizedLoaded, type RouteLocationRaw, type RouteNamedMap, type RouteNames, type RouteParams, type RouteParamsRaw, type RoutePath, type RouteRecordInfo, type RouteRecordRaw, type Router, type RuntimeConfig, type RuntimeConfigPublic, STATE_KEY_PREFIX, type SearchSchema, type UseSearchReturn, applyPlugin, applyPlugins, applyPluginsWithParallel, clearKmState, createFileRoute, createKimeshApp, createLoaderGuard, defineContext, defineKimeshRuntimePlugin, defineRoute, getCorePlugins, getKmStateKeys, getPluginHooks, getPluginMeta, getPluginName, hasKmState, installLoaderGuard, isKimeshRuntimePlugin, onBeforeRouteLeave, onBeforeRouteUpdate, queryPlugin, routerPlugin, tryUseKimeshApp, useAfterNavigation, useKimeshApp, useKimeshContext, useLink, useNavigate, useNavigationGuard, useNavigationMiddleware, useParams, useReactiveParams, useRoute, useRouter, useRuntimeConfig, useSearch, useState };
|
|
1129
|
-
//# sourceMappingURL=index.d.mts.map
|
|
1128
|
+
export { type BeforeLoadContext, type CreateKimeshAppOptions, type CreateKimeshAppOptionsExtended, type FileRouteOptions, type FullContext, type HasParams, KIMESH_APP_CONTEXT_KEY, KIMESH_CONTEXT_KEY, KIMESH_PLUGIN_INDICATOR, type KimeshApp, type KimeshAppContext, type KimeshContext, type KimeshRuntimeHooks, type KimeshRuntimePlugin, type KimeshRuntimePluginDefinition, type KimeshRuntimePluginMeta, type KimeshRuntimePluginResult, KmDeferred, KmLink, type KmLinkProps, KmOutlet, type LoaderContext, type LoaderFn, type LoaderGuardOptions, type NavigateOptions, type NavigationAfterHookContext, type NavigationContext, type NavigationErrorContext, type NavigationErrorHookContext, type NavigationGuard, type NavigationHookAfter, type NavigationHookContext, type NavigationMiddlewareOptions, type ParamValue, type ParamValueOneOrMore, type ParamValueZeroOrMore, type ParamValueZeroOrOne, type QueryPluginOptions, type RouteDefinition, type RouteHeadConfig, type RouteHeadContext, type RouteHeadFn, type RouteInfoByName, type RouteLocationNormalized, type RouteLocationNormalizedLoaded, type RouteLocationRaw, type RouteNamedMap, type RouteNames, type RouteParams, type RouteParamsRaw, type RoutePath, type RouteRecordInfo, type RouteRecordRaw, type Router, type RuntimeConfig, type RuntimeConfigPublic, STATE_KEY_PREFIX, type SearchSchema, type UseSearchReturn, applyPlugin, applyPlugins, applyPluginsWithParallel, clearKmState, createFileRoute, createKimeshApp, createLoaderGuard, defineContext, defineKimeshRuntimePlugin, defineRoute, getCorePlugins, getKmStateKeys, getPluginHooks, getPluginMeta, getPluginName, hasKmState, installLoaderGuard, isKimeshRuntimePlugin, onBeforeRouteLeave, onBeforeRouteUpdate, queryPlugin, routerPlugin, tryUseKimeshApp, useAfterNavigation, useKimeshApp, useKimeshContext, useLink, useNavigate, useNavigationGuard, useNavigationMiddleware, useParams, useReactiveParams, useRoute, useRouter, useRuntimeConfig, useSearch, useState };
|
package/dist/index.mjs
CHANGED
|
@@ -1294,5 +1294,4 @@ function useAfterNavigation(callback) {
|
|
|
1294
1294
|
}
|
|
1295
1295
|
|
|
1296
1296
|
//#endregion
|
|
1297
|
-
export { KIMESH_APP_CONTEXT_KEY, KIMESH_CONTEXT_KEY, KIMESH_PLUGIN_INDICATOR, KmDeferred, KmLink, KmOutlet, STATE_KEY_PREFIX, applyPlugin, applyPlugins, applyPluginsWithParallel, clearKmState, createFileRoute, createKimeshApp, createLoaderGuard, defineContext, defineKimeshRuntimePlugin, defineRoute, getCorePlugins, getKmStateKeys, getPluginHooks, getPluginMeta, getPluginName, hasKmState, installLoaderGuard, isKimeshRuntimePlugin, onBeforeRouteLeave, onBeforeRouteUpdate, queryPlugin, routerPlugin, tryUseKimeshApp, useAfterNavigation, useKimeshApp, useKimeshContext, useLink, useNavigate, useNavigationGuard, useNavigationMiddleware, useParams, useReactiveParams, useRoute, useRouter, useRuntimeConfig, useSearch, useState };
|
|
1298
|
-
//# sourceMappingURL=index.mjs.map
|
|
1297
|
+
export { KIMESH_APP_CONTEXT_KEY, KIMESH_CONTEXT_KEY, KIMESH_PLUGIN_INDICATOR, KmDeferred, KmLink, KmOutlet, STATE_KEY_PREFIX, applyPlugin, applyPlugins, applyPluginsWithParallel, clearKmState, createFileRoute, createKimeshApp, createLoaderGuard, defineContext, defineKimeshRuntimePlugin, defineRoute, getCorePlugins, getKmStateKeys, getPluginHooks, getPluginMeta, getPluginName, hasKmState, installLoaderGuard, isKimeshRuntimePlugin, onBeforeRouteLeave, onBeforeRouteUpdate, queryPlugin, routerPlugin, tryUseKimeshApp, useAfterNavigation, useKimeshApp, useKimeshContext, useLink, useNavigate, useNavigationGuard, useNavigationMiddleware, useParams, useReactiveParams, useRoute, useRouter, useRuntimeConfig, useSearch, useState };
|
package/package.json
CHANGED
package/dist/index.d.mts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/runtime-types.ts","../src/types.ts","../src/create-app.ts","../src/create-file-route.ts","../src/context.ts","../src/runtime-plugin.ts","../src/plugin-executor.ts","../src/plugins/core.ts","../src/components/KmOutlet.ts","../src/components/KmLink.ts","../src/components/KmDeferred.ts","../src/guards/loader-guard.ts","../src/composables/use-search.ts","../src/composables/use-params.ts","../src/composables/use-navigate.ts","../src/composables/use-runtime-config.ts","../src/composables/use-kimesh-app.ts","../src/composables/useState.ts","../src/composables/use-navigation-middleware.ts"],"mappings":"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"}
|
package/dist/index.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["vueCreateApp","useRouter","pageVNode","useRoute","useRoute","useRouter","useRoute","useRouter"],"sources":["../src/guards/loader-guard.ts","../src/runtime-plugin.ts","../src/plugin-executor.ts","../src/types.ts","../src/create-app.ts","../src/create-file-route.ts","../src/context.ts","../src/plugins/core.ts","../src/components/utils.ts","../src/plugins/view-transitions.ts","../src/components/KmOutlet.ts","../src/components/KmLink.ts","../src/components/KmDeferred.ts","../src/composables/use-search.ts","../src/composables/use-params.ts","../src/composables/use-navigate.ts","../src/composables/use-runtime-config.ts","../src/composables/use-kimesh-app.ts","../src/composables/useState.ts","../src/composables/use-navigation-middleware.ts"],"sourcesContent":["import type { Router, RouteLocationNormalized } from 'vue-router'\nimport type { RouteDefinition, LoaderContext, FullContext, SearchSchema } from '../types'\n\nexport interface LoaderGuardOptions {\n onError?: (error: Error, to: RouteLocationNormalized) => void\n}\n\ninterface LoaderEntry {\n loader: NonNullable<RouteDefinition['loader']>\n routeDef: RouteDefinition\n}\n\n/**\n * Safely parse input with schema, returning input on failure\n */\nfunction safeParse(\n schema: SearchSchema<Record<string, unknown>>,\n input: Record<string, unknown>\n): Record<string, unknown> {\n try {\n return schema.parse(input)\n } catch {\n return input\n }\n}\n\n/**\n * Validate search params using the provided schema\n */\nfunction validateSearchParams(\n query: Record<string, unknown>,\n schema?: SearchSchema<Record<string, unknown>>\n): Record<string, unknown> {\n if (!schema) return query\n\n // Prefer safeParse if available\n if (schema.safeParse) {\n const result = schema.safeParse(query)\n if (result.success && result.data !== undefined) {\n return result.data\n }\n // Fall back to defaults on validation failure\n return safeParse(schema, {})\n }\n\n // Try parsing query, fall back to empty defaults, then original query\n const parsed = safeParse(schema, query)\n if (parsed !== query) return parsed\n\n const defaults = safeParse(schema, {})\n return defaults !== query ? defaults : query\n}\n\n/**\n * Collect loaders from matched route records\n */\nfunction collectLoaders(to: RouteLocationNormalized): LoaderEntry[] {\n const loaders: LoaderEntry[] = []\n\n for (const record of to.matched) {\n const routeDef = record.meta?.__kimesh as RouteDefinition | undefined\n if (routeDef?.loader) {\n loaders.push({ loader: routeDef.loader, routeDef })\n }\n }\n\n return loaders\n}\n\n/**\n * Check if error is an AbortError\n */\nfunction isAbortError(error: unknown): boolean {\n return error instanceof Error && error.name === 'AbortError'\n}\n\n/**\n * Create the loader navigation guard\n */\nexport function createLoaderGuard(\n context: FullContext,\n options: LoaderGuardOptions = {}\n): (\n to: RouteLocationNormalized,\n from: RouteLocationNormalized,\n abortController: AbortController\n) => Promise<void> {\n const { onError } = options\n\n return async function loaderGuard(\n to: RouteLocationNormalized,\n _from: RouteLocationNormalized,\n abortController: AbortController\n ): Promise<void> {\n const loaders = collectLoaders(to)\n\n if (loaders.length === 0) return\n\n await Promise.all(\n loaders.map(async ({ loader, routeDef }) => {\n const search = validateSearchParams(\n to.query as Record<string, unknown>,\n routeDef.validateSearch\n )\n\n const loaderContext: LoaderContext = {\n params: to.params as Record<string, string>,\n search,\n context,\n signal: abortController.signal,\n }\n\n try {\n await loader(loaderContext)\n } catch (error) {\n if (isAbortError(error)) {\n throw error\n }\n\n console.error('[kimesh] Loader error:', error)\n onError?.(error as Error, to)\n ;(to.meta as Record<string, unknown>).__kimeshError = error\n }\n })\n )\n }\n}\n\n/**\n * Install loader guard on router\n */\nexport function installLoaderGuard(\n router: Router,\n context: FullContext,\n options?: { onError?: (error: Error, to: RouteLocationNormalized) => void }\n): () => void {\n let abortController: AbortController | null = null\n\n // Create abort controller for each navigation\n const removeBeforeEach = router.beforeEach(() => {\n // Abort previous pending navigation\n abortController?.abort()\n abortController = new AbortController()\n })\n\n // Run loaders in beforeResolve\n const removeBeforeResolve = router.beforeResolve(async (to, from) => {\n if (!abortController) {\n abortController = new AbortController()\n }\n\n const guard = createLoaderGuard(context, {\n onError: options?.onError,\n })\n\n try {\n await guard(to, from, abortController)\n } catch (error) {\n if ((error as Error).name === 'AbortError') {\n return false // Cancel navigation\n }\n throw error\n }\n })\n\n // Cleanup on navigation end\n const removeAfterEach = router.afterEach(() => {\n // Reset abort controller after navigation completes\n abortController = null\n })\n\n // Return cleanup function\n return () => {\n removeBeforeEach()\n removeBeforeResolve()\n removeAfterEach()\n }\n}\n","/**\n * @kimesh/router-runtime - Runtime Plugin Definition\n *\n * Provides the defineKimeshRuntimePlugin function for creating runtime plugins.\n */\n\nimport type {\n KimeshRuntimePlugin,\n KimeshRuntimePluginDefinition,\n KimeshRuntimePluginMeta,\n KimeshRuntimeHooks,\n} from \"./runtime-types\";\n\nexport const KIMESH_PLUGIN_INDICATOR = \"__kimesh_plugin\" as const;\n\n/**\n * Define a Kimesh runtime plugin\n *\n * @example Function-style plugin\n * ```ts\n * export default defineKimeshRuntimePlugin((app) => {\n * const analytics = new AnalyticsService()\n * app.router.afterEach((to) => analytics.trackPageView(to.path))\n * return { provide: { analytics } }\n * })\n * ```\n *\n * @example Object-style plugin with hooks\n * ```ts\n * export default defineKimeshRuntimePlugin({\n * name: 'my-plugin',\n * enforce: 'pre',\n * hooks: {\n * 'app:mounted': () => console.log('App mounted!')\n * },\n * setup(app) {\n * return { provide: { myService: new MyService() } }\n * }\n * })\n * ```\n */\nexport function defineKimeshRuntimePlugin<\n Injections extends Record<string, unknown> = Record<string, unknown>,\n>(\n plugin: KimeshRuntimePlugin<Injections> | KimeshRuntimePluginDefinition<Injections>\n): KimeshRuntimePlugin<Injections> {\n if (typeof plugin === \"function\") {\n plugin[KIMESH_PLUGIN_INDICATOR] = true;\n return plugin;\n }\n\n const { name, enforce, order, dependsOn, parallel, hooks, setup } = plugin;\n const pluginFn = (setup ?? (() => {})) as KimeshRuntimePlugin<Injections>;\n\n pluginFn[KIMESH_PLUGIN_INDICATOR] = true;\n pluginFn._name = name;\n pluginFn.meta = { name, enforce, order, dependsOn, parallel };\n pluginFn.hooks = hooks;\n\n return pluginFn;\n}\n\n/**\n * Check if a value is a Kimesh runtime plugin\n */\nexport function isKimeshRuntimePlugin(value: unknown): value is KimeshRuntimePlugin {\n return typeof value === \"function\" && (value as KimeshRuntimePlugin)[KIMESH_PLUGIN_INDICATOR] === true;\n}\n\n/**\n * Get plugin metadata\n */\nexport function getPluginMeta(plugin: KimeshRuntimePlugin): KimeshRuntimePluginMeta {\n return plugin.meta ?? {};\n}\n\n/**\n * Get plugin name\n */\nexport function getPluginName(plugin: KimeshRuntimePlugin): string {\n return plugin._name ?? plugin.meta?.name ?? \"anonymous\";\n}\n\n/**\n * Get plugin hooks\n */\nexport function getPluginHooks(plugin: KimeshRuntimePlugin): Partial<KimeshRuntimeHooks> | undefined {\n return plugin.hooks;\n}\n","/**\n * @kimesh/router-runtime - Plugin Executor\n *\n * Executes runtime plugins in the correct order with dependency resolution.\n */\n\nimport type { KimeshRuntimePlugin, KimeshAppContext } from \"./runtime-types\";\nimport { getPluginName, getPluginMeta, getPluginHooks } from \"./runtime-plugin\";\n\nconst ORDER_MAP = { pre: -20, default: 0, post: 20 } as const;\n\n/**\n * Apply a single plugin to the app context\n */\nexport async function applyPlugin(\n app: KimeshAppContext,\n plugin: KimeshRuntimePlugin\n): Promise<void> {\n const pluginName = getPluginName(plugin);\n\n try {\n const hooks = getPluginHooks(plugin);\n if (hooks) {\n app.hooks.addHooks(hooks);\n }\n\n const result = await app.runWithContext(() => plugin(app));\n\n if (result?.provide) {\n for (const [key, value] of Object.entries(result.provide)) {\n app.provide(key, value);\n }\n }\n } catch (error) {\n console.error(`[Kimesh] Plugin \"${pluginName}\" failed:`, error);\n await app.hooks.callHook(\"app:error\", error);\n throw error;\n }\n}\n\n/**\n * Sort plugins by their execution order\n */\nfunction sortPluginsByOrder(plugins: KimeshRuntimePlugin[]): KimeshRuntimePlugin[] {\n return [...plugins].sort((a, b) => {\n const aMeta = getPluginMeta(a);\n const bMeta = getPluginMeta(b);\n const aOrder = aMeta.order ?? ORDER_MAP[aMeta.enforce ?? \"default\"];\n const bOrder = bMeta.order ?? ORDER_MAP[bMeta.enforce ?? \"default\"];\n return aOrder - bOrder;\n });\n}\n\ninterface PendingPlugin {\n plugin: KimeshRuntimePlugin;\n deps: Set<string>;\n}\n\n/**\n * Mark a plugin as resolved if it has a name\n */\nfunction markResolved(resolved: Set<string>, plugin: KimeshRuntimePlugin): void {\n const name = getPluginName(plugin);\n if (name !== \"anonymous\") {\n resolved.add(name);\n }\n}\n\n/**\n * Remove resolved dependencies from a pending plugin entry\n */\nfunction updatePendingDeps(entry: PendingPlugin, resolved: Set<string>): void {\n for (const dep of entry.deps) {\n if (resolved.has(dep)) {\n entry.deps.delete(dep);\n }\n }\n}\n\n/**\n * Apply all plugins to the app context with dependency resolution\n */\nexport async function applyPlugins(\n app: KimeshAppContext,\n plugins: KimeshRuntimePlugin[]\n): Promise<void> {\n const sortedPlugins = sortPluginsByOrder(plugins);\n const resolved = new Set<string>();\n const pending: PendingPlugin[] = [];\n\n async function tryResolvePending(): Promise<void> {\n let madeProgress = true;\n while (madeProgress) {\n madeProgress = false;\n\n const stillPending: PendingPlugin[] = [];\n for (const entry of pending) {\n updatePendingDeps(entry, resolved);\n\n if (entry.deps.size === 0) {\n await applyPlugin(app, entry.plugin);\n markResolved(resolved, entry.plugin);\n madeProgress = true;\n } else {\n stillPending.push(entry);\n }\n }\n pending.length = 0;\n pending.push(...stillPending);\n }\n }\n\n for (const plugin of sortedPlugins) {\n const meta = getPluginMeta(plugin);\n const unresolvedDeps = meta.dependsOn?.filter((dep) => !resolved.has(dep)) ?? [];\n\n if (unresolvedDeps.length > 0) {\n pending.push({ plugin, deps: new Set(unresolvedDeps) });\n } else {\n await applyPlugin(app, plugin);\n markResolved(resolved, plugin);\n await tryResolvePending();\n }\n }\n\n for (const { plugin, deps } of pending) {\n console.warn(\n `[Kimesh] Plugin \"${getPluginName(plugin)}\" has unresolved dependencies: ${[...deps].join(\", \")}`\n );\n }\n}\n\n/**\n * Apply plugins with parallel support.\n * Plugins with parallel: true run concurrently within their group.\n */\nexport async function applyPluginsWithParallel(\n app: KimeshAppContext,\n plugins: KimeshRuntimePlugin[]\n): Promise<void> {\n const sortedPlugins = sortPluginsByOrder(plugins);\n\n type Group = { parallel: boolean; plugins: KimeshRuntimePlugin[] };\n const groups: Group[] = [];\n\n for (const plugin of sortedPlugins) {\n const isParallel = getPluginMeta(plugin).parallel ?? false;\n const lastGroup = groups[groups.length - 1];\n\n if (lastGroup?.parallel === isParallel) {\n lastGroup.plugins.push(plugin);\n } else {\n groups.push({ parallel: isParallel, plugins: [plugin] });\n }\n }\n\n for (const group of groups) {\n if (group.parallel) {\n await Promise.all(group.plugins.map((p) => applyPlugin(app, p)));\n } else {\n for (const plugin of group.plugins) {\n await applyPlugin(app, plugin);\n }\n }\n }\n}\n","import type {\n Component,\n App,\n InjectionKey,\n TransitionProps,\n KeepAliveProps,\n} from \"vue\";\nimport type {\n Router,\n RouteRecordRaw,\n RouteLocationNormalizedLoaded,\n} from \"vue-router\";\nimport type { QueryClient, QueryClientConfig } from \"@tanstack/vue-query\";\nimport type { KimeshAppContext } from \"./runtime-types\";\n\n// ============================================================================\n// Kimesh Context Types (User-extensible via declaration merging)\n// ============================================================================\n\n/**\n * User-defined context interface\n * Extend this via declaration merging in your app:\n *\n * @example\n * ```ts\n * declare module '@kimesh/router-runtime' {\n * interface KimeshContext {\n * auth: AuthStore\n * i18n: I18n\n * }\n * }\n * ```\n */\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport interface KimeshContext {}\n\n/**\n * Full context available in loaders (built-in + user-defined)\n */\nexport interface FullContext extends KimeshContext {\n queryClient: QueryClient;\n}\n\n/**\n * Injection key for Kimesh context\n */\nexport const KIMESH_CONTEXT_KEY: InjectionKey<FullContext> =\n Symbol(\"kimesh-context\");\n\n// ============================================================================\n// Type-Safe Route Types (unplugin-vue-router compatible)\n// ============================================================================\n\n/**\n * Param value types for route parameters\n */\nexport type ParamValue<isRaw extends boolean> = true extends isRaw\n ? string | number\n : string;\n\nexport type ParamValueOneOrMore<isRaw extends boolean> = [\n ParamValue<isRaw>,\n ...ParamValue<isRaw>[],\n];\n\nexport type ParamValueZeroOrMore<isRaw extends boolean> = true extends isRaw\n ? ParamValue<isRaw>[] | undefined | null\n : ParamValue<isRaw>[] | undefined;\n\nexport type ParamValueZeroOrOne<isRaw extends boolean> = true extends isRaw\n ? string | number | null | undefined\n : string;\n\n/**\n * Route record info type - populated by generated types\n */\nexport interface RouteRecordInfo<\n Name extends string = string,\n Path extends string = string,\n ParamsRaw extends Record<string, unknown> = Record<string, unknown>,\n Params extends Record<string, unknown> = Record<string, unknown>,\n Children extends string = never,\n> {\n name: Name;\n path: Path;\n paramsRaw: ParamsRaw;\n params: Params;\n children: Children;\n}\n\n/**\n * Route named map - populated by generated types\n * This interface is augmented by route-types.d.ts\n */\nexport interface RouteNamedMap {}\n\n/** Get all route names - falls back to string when RouteNamedMap is empty */\nexport type RouteNames = keyof RouteNamedMap extends never\n ? string\n : keyof RouteNamedMap;\n\n/** Allow both named routes and arbitrary string paths (& {} preserves autocomplete) */\nexport type RouteLocationRaw = RouteNames | (string & {});\n\n/** Get route info by name */\nexport type RouteInfoByName<T extends string> = T extends keyof RouteNamedMap\n ? RouteNamedMap[T]\n : RouteRecordInfo<T, T>;\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/** Get raw params for a route name (accepts string | number) */\nexport type RouteParamsRaw<T extends string> = T extends keyof RouteNamedMap\n ? RouteNamedMap[T] extends RouteRecordInfo<any, any, infer P, any, any>\n ? P\n : Record<string, string | number>\n : Record<string, string | number>;\n\n/** Get resolved params for a route name (string only) */\nexport type RouteParams<T extends string> = T extends keyof RouteNamedMap\n ? RouteNamedMap[T] extends RouteRecordInfo<any, any, any, infer P, any>\n ? P\n : Record<string, string>\n : Record<string, string>;\n\n/** Get path for a route name */\nexport type RoutePath<T extends string> = T extends keyof RouteNamedMap\n ? RouteNamedMap[T] extends RouteRecordInfo<any, infer P, any, any, any>\n ? P\n : string\n : string;\n/* eslint-enable @typescript-eslint/no-explicit-any */\n\n/** Check if route has params */\nexport type HasParams<T extends string> = T extends keyof RouteNamedMap\n ? keyof RouteParams<T> extends never\n ? false\n : true\n : boolean;\n\n// ============================================================================\n// Kimesh App Types\n// ============================================================================\n\n/**\n * Options for creating a Kimesh app\n */\nexport interface CreateKimeshAppOptions {\n /** Root component (usually App.vue or a layout) */\n rootComponent: Component;\n\n /** Route records array */\n routes: RouteRecordRaw[];\n\n /** Base URL for router */\n base?: string;\n\n /** History mode */\n history?: \"hash\" | \"web\";\n\n /** Scroll behavior */\n scrollBehavior?: Router[\"options\"][\"scrollBehavior\"];\n\n /** Query client configuration */\n queryClientConfig?: QueryClientConfig;\n\n /** Custom context (user-defined) */\n context?: KimeshContext | (() => KimeshContext);\n}\n\n/**\n * Kimesh App instance\n */\nexport interface KimeshApp {\n /** Vue app instance */\n app: App;\n\n /** Vue Router instance */\n router: Router;\n\n /** Query client instance */\n queryClient: QueryClient;\n\n /** Kimesh app context (new runtime plugin system) */\n context?: KimeshAppContext;\n\n /** Mount the app */\n mount(container: string | Element): KimeshApp | Promise<KimeshApp>;\n\n /** Unmount the app */\n unmount(): void;\n}\n\n/**\n * Loader context passed to loader functions\n */\nexport interface LoaderContext<\n TParams = Record<string, string>,\n TSearch = Record<string, unknown>,\n> {\n /** Route params (e.g., { postId: '123' }) */\n params: TParams;\n\n /** Validated search/query params */\n search: TSearch;\n\n /** App context (built-in + user-defined) */\n context: FullContext;\n\n /** AbortSignal for cancellation */\n signal: AbortSignal;\n}\n\n/**\n * Loader function type\n */\nexport type LoaderFn<\n TParams = Record<string, string>,\n TSearch = Record<string, unknown>,\n TData = unknown,\n> = (ctx: LoaderContext<TParams, TSearch>) => Promise<TData> | TData;\n\n/**\n * Schema interface for validateSearch (compatible with Zod)\n */\nexport interface SearchSchema<T = unknown> {\n parse: (input: unknown) => T;\n safeParse?: (input: unknown) => {\n success: boolean;\n data?: T;\n error?: unknown;\n };\n}\n\n/**\n * Context passed to route head function\n */\nexport interface RouteHeadContext<\n TParams = Record<string, string>,\n TLoaderData = unknown,\n> {\n /** Route params extracted from URL */\n params: TParams;\n\n /** Data returned from route loader */\n loaderData: TLoaderData;\n\n /** Current route */\n route: RouteLocationNormalizedLoaded;\n}\n\n/**\n * Route head configuration - compatible with @unhead/vue Head type\n */\nexport interface RouteHeadConfig {\n /** Page title */\n title?: string;\n\n /** Title template (e.g., '%s | My App') */\n titleTemplate?: string | ((title: string) => string);\n\n /** Meta tags */\n meta?: Array<{\n name?: string;\n property?: string;\n content?: string;\n charset?: string;\n \"http-equiv\"?: string;\n [key: string]: string | undefined;\n }>;\n\n /** Link tags */\n link?: Array<{\n rel?: string;\n href?: string;\n type?: string;\n as?: string;\n crossorigin?: string;\n media?: string;\n sizes?: string;\n hreflang?: string;\n title?: string;\n [key: string]: string | undefined;\n }>;\n\n /** Script tags */\n script?: Array<{\n src?: string;\n async?: boolean;\n defer?: boolean;\n type?: string;\n innerHTML?: string;\n [key: string]: string | boolean | undefined;\n }>;\n\n /** Style tags */\n style?: Array<{\n innerHTML?: string;\n media?: string;\n type?: string;\n [key: string]: string | undefined;\n }>;\n\n /** HTML attributes */\n htmlAttrs?: {\n lang?: string;\n dir?: \"ltr\" | \"rtl\" | \"auto\";\n class?: string;\n [key: string]: string | undefined;\n };\n\n /** Body attributes */\n bodyAttrs?: {\n class?: string;\n [key: string]: string | undefined;\n };\n}\n\n/**\n * Route head function signature\n */\nexport type RouteHeadFn<\n TParams = Record<string, string>,\n TLoaderData = unknown,\n> = (context: RouteHeadContext<TParams, TLoaderData>) => RouteHeadConfig;\n\n/**\n * File route options\n */\nexport interface FileRouteOptions<\n TMeta = unknown,\n TParams = Record<string, string>,\n TSearch = Record<string, unknown>,\n TLoaderData = unknown,\n> {\n /** Route meta */\n meta?: TMeta;\n\n /** Loader function - runs before navigation completes */\n loader?: LoaderFn<TParams, TSearch, TLoaderData>;\n\n /** Search params validation schema (Zod compatible) */\n validateSearch?: SearchSchema<TSearch>;\n\n /** Before load hook */\n beforeLoad?: (ctx: BeforeLoadContext) => Promise<void> | void;\n\n /**\n * Route-level head configuration\n *\n * @example Static head\n * ```ts\n * head: {\n * title: 'About Us',\n * meta: [{ name: 'description', content: 'Learn about our company' }]\n * }\n * ```\n *\n * @example Dynamic head from loader\n * ```ts\n * head: ({ loaderData }) => ({\n * title: loaderData.post.title,\n * meta: [{ property: 'og:title', content: loaderData.post.title }]\n * })\n * ```\n */\n head?: RouteHeadFn<TParams, TLoaderData> | RouteHeadConfig;\n\n /**\n * Page transition configuration\n *\n * @example\n * ```ts\n * transition: { name: 'slide', mode: 'out-in' }\n * // or disable transition\n * transition: false\n * ```\n */\n transition?: boolean | TransitionProps;\n\n /**\n * View Transition API (experimental)\n * Uses native browser document.startViewTransition() API\n *\n * @example\n * ```ts\n * viewTransition: true // respect user's prefers-reduced-motion\n * viewTransition: 'always' // always use view transitions\n * ```\n */\n viewTransition?: boolean | \"always\";\n\n /**\n * KeepAlive configuration for route component\n *\n * @example\n * ```ts\n * keepalive: true\n * keepalive: { max: 10 }\n * ```\n */\n keepalive?: boolean | KeepAliveProps;\n}\n\n/**\n * Before load context\n */\nexport interface BeforeLoadContext {\n /** Current route */\n route: RouteLocationNormalizedLoaded;\n\n /** Router instance */\n router: Router;\n\n /** Abort navigation */\n abort: () => void;\n}\n\n/**\n * Route definition returned by createFileRoute\n */\nexport interface RouteDefinition<\n TPath extends string = string,\n TMeta = unknown,\n TParams = Record<string, string>,\n TSearch = Record<string, unknown>,\n TLoaderData = unknown,\n> {\n path: TPath;\n meta?: TMeta;\n loader?: LoaderFn<TParams, TSearch, TLoaderData>;\n validateSearch?: SearchSchema<TSearch>;\n beforeLoad?: (ctx: BeforeLoadContext) => Promise<void> | void;\n head?: RouteHeadFn<TParams, TLoaderData> | RouteHeadConfig;\n transition?: boolean | TransitionProps;\n viewTransition?: boolean | \"always\";\n keepalive?: boolean | KeepAliveProps;\n}\n\n// Type augmentation for vue-router\ndeclare module \"vue-router\" {\n interface RouteMeta {\n /** Kimesh route definition with loader */\n __kimesh?: RouteDefinition;\n /** Error from loader execution */\n __kimeshError?: unknown;\n /** Source layer name for layer-aware features */\n __kimeshLayer?: string;\n }\n}\n","import { createApp as vueCreateApp, h, reactive, type InjectionKey } from \"vue\";\nimport {\n createRouter,\n createWebHistory,\n createWebHashHistory,\n type RouteRecordRaw,\n type RouterScrollBehavior,\n} from \"vue-router\";\nimport { QueryClient, VueQueryPlugin } from \"@tanstack/vue-query\";\nimport { createHooks } from \"hookable\";\nimport { installLoaderGuard } from \"./guards/loader-guard\";\nimport { applyPlugins } from \"./plugin-executor\";\nimport type { CreateKimeshAppOptions, KimeshApp, FullContext } from \"./types\";\nimport { KIMESH_CONTEXT_KEY } from \"./types\";\nimport type {\n KimeshAppContext,\n KimeshRuntimePlugin,\n KimeshRuntimeHooks,\n RuntimeConfigPublic,\n} from \"./runtime-types\";\n\nexport const KIMESH_APP_CONTEXT_KEY: InjectionKey<KimeshAppContext> =\n Symbol(\"kimesh-app-context\");\n\nexport interface CreateKimeshAppOptionsExtended extends CreateKimeshAppOptions {\n plugins?: KimeshRuntimePlugin[];\n runtimeConfig?: RuntimeConfigPublic;\n /** Per-layer runtime configs (for layer-aware features like $fetch) */\n layersConfig?: Record<string, Record<string, unknown>>;\n}\n\nconst DEFAULT_SCROLL_BEHAVIOR: RouterScrollBehavior = (\n to,\n _from,\n savedPosition,\n) => {\n if (savedPosition) return savedPosition;\n if (to.hash) return { el: to.hash, behavior: \"smooth\" };\n return { top: 0 };\n};\n\n/**\n * Create a Kimesh application with router, query client, and runtime plugins\n */\nexport async function createKimeshApp(\n options: CreateKimeshAppOptionsExtended,\n): Promise<KimeshApp> {\n const {\n rootComponent,\n routes,\n base = \"/\",\n history = \"web\",\n scrollBehavior = DEFAULT_SCROLL_BEHAVIOR,\n queryClientConfig,\n context: userContext,\n plugins = [],\n runtimeConfig = {},\n layersConfig = {},\n } = options;\n\n const queryClient = new QueryClient(\n queryClientConfig ?? {\n defaultOptions: {\n queries: { staleTime: 1000 * 60 * 5, gcTime: 1000 * 60 * 30 },\n },\n },\n );\n\n const resolvedUserContext =\n typeof userContext === \"function\" ? userContext() : (userContext ?? {});\n const fullContext: FullContext = { queryClient, ...resolvedUserContext };\n\n const router = createRouter({\n history:\n history === \"hash\" ? createWebHashHistory(base) : createWebHistory(base),\n routes: routes as RouteRecordRaw[],\n scrollBehavior,\n });\n\n const removeLoaderGuard = installLoaderGuard(router, fullContext, {\n onError: (error, to) =>\n console.error(`[Kimesh] Loader error for ${to.path}:`, error),\n });\n\n const vueApp = vueCreateApp({ render: () => h(rootComponent) });\n const hooks = createHooks<KimeshRuntimeHooks>();\n\n const appContext: KimeshAppContext = {\n vueApp,\n router,\n queryClient,\n hooks,\n $config: runtimeConfig,\n $layersConfig: layersConfig,\n isHydrating: false,\n _state: reactive({}),\n\n provide<T>(name: string, value: T) {\n const $name = `$${name}`;\n Object.defineProperty(vueApp.config.globalProperties, $name, {\n get: () => value,\n configurable: true,\n });\n vueApp.provide($name, value);\n },\n\n runWithContext<T extends () => unknown>(fn: T): ReturnType<T> {\n return vueApp.runWithContext(fn) as ReturnType<T>;\n },\n };\n\n if (plugins.length > 0) {\n await applyPlugins(appContext, plugins);\n }\n\n await hooks.callHook(\"app:created\", vueApp);\n\n vueApp.provide(KIMESH_CONTEXT_KEY, fullContext);\n vueApp.provide(KIMESH_APP_CONTEXT_KEY, appContext);\n vueApp.use(router);\n vueApp.use(VueQueryPlugin, { queryClient });\n\n router.beforeEach(() => hooks.callHook(\"page:start\"));\n router.afterEach(() => hooks.callHook(\"page:finish\"));\n\n const kimeshApp: KimeshApp = {\n app: vueApp,\n router,\n queryClient,\n context: appContext,\n\n async mount(container: string | Element) {\n await hooks.callHook(\"app:beforeMount\", vueApp);\n vueApp.mount(container);\n await hooks.callHook(\"app:mounted\", vueApp);\n return kimeshApp;\n },\n\n unmount() {\n removeLoaderGuard();\n vueApp.unmount();\n },\n };\n\n return kimeshApp;\n}\n","import type { FileRouteOptions, RouteDefinition } from \"./types\";\n\n/**\n * Create a file-based route definition\n *\n * @example\n * ```ts\n * // In routes/about.vue\n * export const Route = createFileRoute('/about')({\n * meta: { title: 'About Us' },\n * loader: async () => {\n * return { data: await fetchAboutData() }\n * },\n * head: {\n * title: 'About Us',\n * meta: [{ name: 'description', content: 'Learn about us' }]\n * }\n * })\n * ```\n */\nexport function createFileRoute<TPath extends string>(\n path: TPath,\n): <TMeta = unknown>(\n options?: FileRouteOptions<TMeta>,\n) => RouteDefinition<TPath, TMeta> {\n return <TMeta = unknown>(options: FileRouteOptions<TMeta> = {}) => ({\n path,\n meta: options.meta,\n loader: options.loader,\n validateSearch: options.validateSearch,\n beforeLoad: options.beforeLoad,\n head: options.head,\n transition: options.transition,\n viewTransition: options.viewTransition,\n keepalive: options.keepalive,\n });\n}\n\n/**\n * Define route for use in Vue SFC\n * Alternative syntax for createFileRoute\n */\nexport function defineRoute<TMeta = unknown>(\n options: FileRouteOptions<TMeta>,\n): FileRouteOptions<TMeta> {\n return options;\n}\n","import { inject } from 'vue'\nimport { KIMESH_CONTEXT_KEY, type FullContext, type KimeshContext } from './types'\n\n/**\n * Define app context with type inference\n * \n * @example\n * ```ts\n * // src/app.context.ts\n * import { defineContext } from '@kimesh/router-runtime'\n * \n * export default defineContext(() => ({\n * auth: useAuthStore(),\n * i18n: createI18n(),\n * }))\n * ```\n */\nexport function defineContext<T extends KimeshContext>(\n factory: () => T\n): () => T {\n return factory\n}\n\n/**\n * Use Kimesh context in components\n * \n * @example\n * ```vue\n * <script setup>\n * const ctx = useKimeshContext()\n * ctx.auth.logout()\n * </script>\n * ```\n */\nexport function useKimeshContext(): FullContext {\n const context = inject(KIMESH_CONTEXT_KEY)\n if (!context) {\n throw new Error(\n '[Kimesh] Context not found. Make sure you are using this inside a Kimesh app.'\n )\n }\n return context\n}\n","/**\n * @kimesh/router-runtime - Core Plugins\n *\n * Built-in runtime plugins for Kimesh.\n */\n\nimport { defineKimeshRuntimePlugin } from \"../runtime-plugin\";\nimport type {\n NavigationHookContext,\n NavigationAfterHookContext,\n NavigationErrorHookContext,\n} from \"../runtime-types\";\n\n// ============================================================================\n// Router Plugin\n// ============================================================================\n\n/**\n * Router plugin that wires Vue Router guards to Kimesh hook system\n *\n * This plugin runs with `enforce: 'pre'` to ensure router hooks\n * are available to all other plugins.\n */\nexport const routerPlugin = defineKimeshRuntimePlugin({\n name: \"kimesh:router\",\n enforce: \"pre\",\n\n setup({ router, hooks }) {\n // Type-safe hook caller - hookable requires specific typing\n const callHook = hooks.callHook.bind(hooks) as (\n name: string,\n ...args: unknown[]\n ) => Promise<void>;\n\n // Wire beforeEach to navigate:before hook\n router.beforeEach(async (to, from) => {\n const ctx: NavigationHookContext = { to, from };\n try {\n await callHook(\"navigate:before\", ctx);\n } catch (error) {\n const errorCtx: NavigationErrorHookContext = {\n error: error as Error,\n to,\n from,\n };\n await callHook(\"navigate:error\", errorCtx);\n throw error;\n }\n });\n\n // Wire afterEach to navigate:after hook\n router.afterEach((to, from, failure) => {\n const ctx: NavigationAfterHookContext = {\n to,\n from,\n failure: failure ?? undefined,\n };\n callHook(\"navigate:after\", ctx);\n });\n\n // Wire onError to navigate:error hook\n router.onError((error, to, from) => {\n const ctx: NavigationErrorHookContext = { error, to, from };\n callHook(\"navigate:error\", ctx);\n });\n },\n});\n\n// ============================================================================\n// Query Plugin\n// ============================================================================\n\nexport interface QueryPluginOptions {\n /** Enable route-based prefetching */\n prefetching?: boolean;\n /** Paths to exclude from prefetching */\n excludePrefetch?: (string | RegExp)[];\n [key: string]: unknown;\n}\n\n/**\n * Query plugin that sets up prefetching on navigation\n *\n * Note: QueryClient is already initialized in createKimeshApp,\n * this plugin adds navigation-based prefetching.\n */\nexport const queryPlugin = defineKimeshRuntimePlugin<QueryPluginOptions>({\n name: \"kimesh:query\",\n enforce: \"pre\",\n dependsOn: [\"kimesh:router\"],\n\n setup() {\n // Query prefetching is handled separately via setupQueryPrefetching\n // This plugin is a placeholder for future query-related runtime features\n },\n});\n\n// ============================================================================\n// Default Core Plugins\n// ============================================================================\n\n/**\n * Get the default core plugins for a Kimesh app\n */\nexport function getCorePlugins() {\n return [routerPlugin, queryPlugin];\n}\n","import { Transition, KeepAlive, h } from \"vue\";\nimport type { TransitionProps, KeepAliveProps, VNode } from \"vue\";\n\n/**\n * Wrap content in Vue Transition component (client-side only)\n * Inspired by Nuxt's _wrapInTransition utility\n *\n * @param props - Transition props or boolean (true = default transition)\n * @param children - Child render function\n * @returns Wrapped render function\n */\nexport function _wrapInTransition(\n props: boolean | TransitionProps | undefined,\n children: { default?: () => VNode | VNode[] },\n) {\n return {\n default: () => {\n // Only apply transition on client-side\n if (typeof window === \"undefined\" || !props) {\n return children.default?.();\n }\n\n const transitionProps = props === true ? {} : props;\n return h(Transition, transitionProps, children);\n },\n };\n}\n\n/**\n * Wrap content in Vue KeepAlive component\n *\n * @param config - KeepAlive configuration or boolean\n * @param content - Content to wrap (VNode)\n * @returns Wrapped VNode\n */\nexport function wrapInKeepAlive(\n config: boolean | KeepAliveProps | undefined,\n content: VNode,\n): VNode {\n if (!config) {\n return content;\n }\n\n const keepAliveProps = config === true ? {} : config;\n return h(KeepAlive, keepAliveProps, { default: () => content });\n}\n\n/**\n * Merge multiple transition props into one\n * Later props override earlier ones\n *\n * @param propsArray - Array of transition props to merge\n * @returns Merged transition props\n */\nexport function mergeTransitionProps(\n propsArray: Array<boolean | TransitionProps | undefined>,\n): TransitionProps {\n const merged: TransitionProps = {};\n\n for (const props of propsArray) {\n if (!props || props === true) continue;\n\n Object.assign(merged, props);\n }\n\n return merged;\n}\n\n/**\n * Check if route is changing based on path and matched components\n * Used to determine if View Transitions API should be triggered\n *\n * @param to - Target route\n * @param from - Current route\n * @returns True if route is actually changing\n */\nexport function isChangingPage(to: any, from: any): boolean {\n if (to === from) return false;\n if (to.path === from.path) return false;\n\n // Check if matched components are different\n const areComponentsSame = to.matched.every(\n (comp: any, index: number) =>\n comp.components?.default === from.matched[index]?.components?.default,\n );\n\n return !areComponentsSame;\n}\n\n/**\n * Generate unique route key for transition identification\n * Based on Nuxt's generateRouteKey implementation\n *\n * @param routeProps - RouterView slot props\n * @param override - Optional key override\n * @returns Unique route key\n */\nconst ROUTE_KEY_PARENTHESES_RE = /(:\\w+)\\([^)]+\\)/g;\nconst ROUTE_KEY_SYMBOLS_RE = /(:\\w+)[?+*]/g;\nconst ROUTE_KEY_NORMAL_RE = /:\\w+/g;\n\nexport function generateRouteKey(\n routeProps: any,\n override?: string | ((route: any) => string),\n): string | undefined {\n const matchedRoute = routeProps.route.matched.find(\n (m: any) => m.components?.default === routeProps.Component?.type,\n );\n\n const source =\n override ??\n matchedRoute?.meta.key ??\n (matchedRoute && interpolatePath(routeProps.route, matchedRoute));\n\n return typeof source === \"function\" ? source(routeProps.route) : source;\n}\n\nfunction interpolatePath(route: any, match: any): string {\n return match.path\n .replace(ROUTE_KEY_PARENTHESES_RE, \"$1\")\n .replace(ROUTE_KEY_SYMBOLS_RE, \"$1\")\n .replace(\n ROUTE_KEY_NORMAL_RE,\n (r: string) => route.params[r.slice(1)]?.toString() || \"\",\n );\n}\n","import { defineKimeshRuntimePlugin } from \"../runtime-plugin\";\nimport { isChangingPage } from \"../components/utils\";\nimport type { KimeshAppContext } from \"../runtime-types\";\nimport type { RouteLocationNormalized } from \"vue-router\";\n\n/**\n * View Transitions API Plugin\n * Enables native browser View Transitions for smooth page navigation\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/View_Transitions_API\n *\n * @example\n * ```ts\n * import { viewTransitionsPlugin } from '@kimesh/router-runtime/plugins/view-transitions'\n *\n * createKimeshApp({\n * plugins: [viewTransitionsPlugin]\n * })\n * ```\n */\nexport const viewTransitionsPlugin = defineKimeshRuntimePlugin({\n name: \"kimesh:view-transitions\",\n enforce: \"pre\",\n\n setup(app: KimeshAppContext) {\n // Check if browser supports View Transitions API\n if (typeof document === \"undefined\" || !document.startViewTransition) {\n if (process.env.NODE_ENV === \"development\") {\n console.warn(\n \"[Kimesh View Transitions] Browser does not support View Transitions API\",\n );\n }\n return;\n }\n\n let transition: ViewTransition | undefined;\n let hasUAVisualTransition = false;\n let finishTransition: (() => void) | undefined;\n let abortTransition: (() => void) | undefined;\n\n const resetTransitionState = () => {\n transition = undefined;\n hasUAVisualTransition = false;\n abortTransition = undefined;\n finishTransition = undefined;\n };\n\n // Listen for browser back/forward navigation\n if (typeof window !== \"undefined\") {\n window.addEventListener(\"popstate\", (event: PopStateEvent) => {\n hasUAVisualTransition = (event as any).hasUAVisualTransition || false;\n if (hasUAVisualTransition) {\n transition?.skipTransition();\n }\n });\n }\n\n // Hook into router navigation\n app.router.beforeResolve(\n async (to: RouteLocationNormalized, from: RouteLocationNormalized) => {\n // Get route-level view transition config\n const viewTransitionMode = to.meta.__kimesh?.viewTransition;\n\n // Check if user prefers reduced motion\n const prefersReducedMotion =\n typeof window !== \"undefined\" &&\n window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n\n const prefersNoTransition =\n prefersReducedMotion && viewTransitionMode !== \"always\";\n\n // Skip transition if:\n // - Disabled on route\n // - User prefers reduced motion (unless mode is 'always')\n // - Browser triggered transition (back/forward)\n // - Not actually changing pages\n if (\n viewTransitionMode === false ||\n prefersNoTransition ||\n hasUAVisualTransition ||\n !isChangingPage(to, from)\n ) {\n return;\n }\n\n // Create promise for transition completion\n const promise = new Promise<void>((resolve, reject) => {\n finishTransition = resolve;\n abortTransition = reject;\n });\n\n // Create promise for route change\n let changeRoute: () => void;\n const ready = new Promise<void>((resolve) => (changeRoute = resolve));\n\n // Start view transition\n transition = document.startViewTransition!(() => {\n changeRoute!();\n return promise;\n });\n\n // Clean up after transition finishes\n transition.finished\n .then(resetTransitionState)\n .catch(resetTransitionState);\n\n // Call hook for user customization\n await app.hooks.callHook(\"page:view-transition:start\", transition);\n\n // Wait for route change to proceed\n return ready;\n },\n );\n\n // Handle Vue errors during transition\n app.hooks.hook(\"app:error\", () => {\n abortTransition?.();\n resetTransitionState();\n });\n\n // Complete transition when page finishes loading\n app.hooks.hook(\"page:finish\", () => {\n finishTransition?.();\n });\n },\n});\n","import {\n defineComponent,\n h,\n Suspense,\n Transition,\n inject,\n nextTick,\n ref,\n} from \"vue\";\nimport { RouterView, type RouteLocationNormalizedLoaded, useRouter } from \"vue-router\";\nimport type { Component, VNode } from \"vue\";\nimport { wrapInKeepAlive, mergeTransitionProps, generateRouteKey } from \"./utils\";\nimport { KIMESH_APP_CONTEXT_KEY } from \"../create-app\";\n\ninterface RouterViewSlotProps {\n Component: Component;\n route: RouteLocationNormalizedLoaded;\n}\n\n/**\n * Check if View Transitions API is supported\n */\nconst supportsViewTransitions = () => \n typeof document !== 'undefined' && 'startViewTransition' in document;\n\n/**\n * KmOutlet - Router view wrapper component\n * Renders the matched route component with optional transitions and keepalive\n *\n * Transition options for async pages (useSuspenseQuery):\n * \n * 1. viewTransition: true (Recommended)\n * - Uses View Transitions API (Chrome 111+, Edge 111+, Opera 97+)\n * - Works perfectly with async pages\n * - Falls back to instant transition on unsupported browsers\n * \n * 2. transition: { name: 'fade' } (without mode: 'out-in')\n * - Uses Vue Transition with default mode (cross-fade)\n * - Both pages exist during transition (old fades out, new fades in)\n * - Requires CSS: .page-leave-active { position: absolute }\n * \n * 3. transition: { name: 'fade', mode: 'out-in' }\n * - ⚠️ NOT recommended for async pages - may cause blank screen\n */\nexport const KmOutlet = defineComponent({\n name: \"KmOutlet\",\n\n props: {\n name: {\n type: String,\n default: \"default\",\n },\n /**\n * Page transition configuration (Vue Transition)\n * ⚠️ Avoid mode: 'out-in' with async pages\n */\n transition: {\n type: [Boolean, Object] as any,\n default: undefined,\n },\n /**\n * Enable View Transitions API (recommended for async pages)\n * Works in Chrome 111+, Edge 111+, Opera 97+\n * Falls back to instant transition on unsupported browsers\n */\n viewTransition: {\n type: Boolean,\n default: false,\n },\n /**\n * KeepAlive configuration\n */\n keepalive: {\n type: [Boolean, Object] as any,\n default: undefined,\n },\n /**\n * Custom page key function for route identification\n */\n pageKey: {\n type: [Function, String] as any,\n default: null,\n },\n },\n\n setup(props, { slots }) {\n const kimeshApp = inject(KIMESH_APP_CONTEXT_KEY, null);\n const router = useRouter();\n \n // Cache the previous vnode for when component is not ready\n let cachedVNode: VNode | undefined;\n // Track if Suspense is currently pending\n const isPending = ref(false);\n // Track if view transition is in progress\n let viewTransitionAbort: (() => void) | null = null;\n \n // Setup View Transitions API navigation guard\n if (props.viewTransition && supportsViewTransitions()) {\n router.beforeResolve(async () => {\n // Skip if transition already in progress\n if (viewTransitionAbort) return;\n \n // Create a promise that resolves when we want to show the new page\n let resolveTransition: () => void;\n const transitionReady = new Promise<void>(resolve => {\n resolveTransition = resolve;\n });\n \n // Start the view transition\n const transition = (document as any).startViewTransition(async () => {\n // Wait for the new page to be ready\n await transitionReady;\n });\n \n // Store abort function\n viewTransitionAbort = () => {\n transition.skipTransition();\n viewTransitionAbort = null;\n };\n \n // Resolve after a short delay to let Suspense start resolving\n await nextTick();\n resolveTransition!();\n \n // Wait for transition to complete\n try {\n await transition.finished;\n } finally {\n viewTransitionAbort = null;\n }\n });\n }\n\n return (): VNode => {\n return h(\n RouterView,\n { name: props.name },\n {\n default: (routeProps: RouterViewSlotProps) => {\n // Custom slot content takes priority\n if (slots.default) {\n return slots.default(routeProps);\n }\n\n // If component is not ready, return cached vnode\n if (!routeProps.Component) {\n return cachedVNode;\n }\n\n // Generate unique key for this route\n const routeKey = generateRouteKey(routeProps, props.pageKey) || routeProps.route.path;\n\n // Get transition config (skip Vue transition if using viewTransition)\n const routeTransition = routeProps.route.meta.__kimesh?.transition;\n const hasVueTransition = !props.viewTransition && !!(\n props.transition ??\n routeTransition ??\n false\n );\n\n const transitionProps = hasVueTransition\n ? mergeTransitionProps([\n props.transition,\n routeTransition,\n {\n onAfterLeave: () => {\n if (kimeshApp) {\n delete (kimeshApp as any)._runningTransition;\n }\n kimeshApp?.hooks.callHook(\"page:transition:finish\");\n },\n },\n ])\n : undefined;\n\n const keepaliveConfig =\n props.keepalive ?? routeProps.route.meta.__kimesh?.keepalive;\n\n // Create the component node\n const componentNode = h(routeProps.Component, {\n key: routeKey,\n });\n\n // Create Suspense-wrapped component\n const suspenseNode = h(\n Suspense,\n {\n suspensible: true,\n onPending: () => {\n isPending.value = true;\n if (hasVueTransition && kimeshApp) {\n (kimeshApp as any)._runningTransition = true;\n }\n kimeshApp?.hooks.callHook(\"page:start\");\n },\n onResolve: async () => {\n await nextTick();\n isPending.value = false;\n if (kimeshApp) {\n delete (kimeshApp as any)._runningTransition;\n }\n await kimeshApp?.hooks.callHook(\"page:finish\");\n },\n },\n {\n default: () => componentNode,\n },\n );\n\n // Apply keepalive wrapper\n const wrappedNode = wrapInKeepAlive(keepaliveConfig, suspenseNode);\n\n // For View Transitions, add view-transition-name to enable animation\n if (props.viewTransition) {\n const pageVNode = h(\n \"div\",\n {\n key: routeKey,\n class: \"km-outlet-page\",\n style: { viewTransitionName: \"km-page\" },\n },\n [wrappedNode],\n );\n cachedVNode = pageVNode;\n return pageVNode;\n }\n\n // No Vue transition: just return wrapped content\n if (!hasVueTransition || !transitionProps) {\n cachedVNode = wrappedNode;\n return wrappedNode;\n }\n\n // With Vue transition: wrap in div with key\n const pageVNode = h(\n \"div\",\n {\n key: routeKey,\n class: \"km-outlet-page\",\n },\n [wrappedNode],\n );\n\n cachedVNode = pageVNode;\n\n // Return Transition-wrapped content\n return h(\n Transition,\n {\n ...transitionProps,\n appear: transitionProps.appear ?? false,\n },\n {\n default: () => pageVNode,\n },\n );\n },\n },\n );\n };\n },\n});\n","import { defineComponent, h, computed, type PropType } from 'vue'\nimport { RouterLink, useRoute } from 'vue-router'\nimport type { RouteNames, RouteLocationRaw, RouteParamsRaw, HasParams } from '../types'\n\n/**\n * Type-safe link props - requires params if route has them\n * Allows both named routes (with autocomplete) and raw string paths\n */\nexport type KmLinkProps<T extends string = RouteNames> =\n T extends RouteNames\n ? HasParams<T> extends true\n ? { to: T; params: RouteParamsRaw<T>; replace?: boolean }\n : HasParams<T> extends false\n ? { to: T; params?: undefined; replace?: boolean }\n : { to: T; params?: Record<string, string | number>; replace?: boolean }\n : { to: T; params?: Record<string, string | number>; replace?: boolean }\n\ninterface RouterLinkSlotProps {\n navigate: () => void\n href: string\n isActive: boolean\n isExactActive: boolean\n}\n\n/**\n * Resolve path by replacing param placeholders with actual values\n */\nfunction resolvePath(path: string, params?: Record<string, string | number>): string {\n if (!params) return path\n\n let resolved = path\n for (const [key, value] of Object.entries(params)) {\n resolved = resolved.replace(`:${key}`, String(value))\n }\n return resolved\n}\n\n/**\n * KmLink - Type-safe router link component\n *\n * @example\n * ```vue\n * <!-- Static route -->\n * <KmLink to=\"/posts\">Posts</KmLink>\n *\n * <!-- Dynamic route with params -->\n * <KmLink to=\"/posts/:postId\" :params=\"{ postId: '123' }\">\n * Post 123\n * </KmLink>\n * ```\n */\nexport const KmLink = defineComponent({\n name: 'KmLink',\n\n props: {\n to: {\n type: String as PropType<RouteLocationRaw>,\n required: true,\n },\n params: {\n type: Object as PropType<Record<string, string | number>>,\n default: undefined,\n },\n replace: {\n type: Boolean,\n default: false,\n },\n activeClass: {\n type: String,\n default: 'km-link-active',\n },\n exactActiveClass: {\n type: String,\n default: 'km-link-exact-active',\n },\n prefetch: {\n type: Boolean,\n default: true,\n },\n tag: {\n type: String,\n default: 'a',\n },\n },\n\n setup(props, { slots, attrs }) {\n const route = useRoute()\n\n const resolvedPath = computed(() => resolvePath(props.to as string, props.params))\n const isActive = computed(() => route.path.startsWith(resolvedPath.value))\n const isExactActive = computed(() => route.path === resolvedPath.value)\n const isCustomTag = computed(() => props.tag !== 'a')\n\n return () => {\n const renderSlotContent = slots.default\n ? {\n default: (linkProps: RouterLinkSlotProps) => {\n if (!isCustomTag.value) {\n return slots.default?.(linkProps)\n }\n return h(\n props.tag,\n {\n onClick: linkProps.navigate,\n class: {\n [props.activeClass]: isActive.value,\n [props.exactActiveClass]: isExactActive.value,\n },\n },\n slots.default?.(linkProps)\n )\n },\n }\n : undefined\n\n return h(\n RouterLink,\n {\n to: resolvedPath.value,\n replace: props.replace,\n activeClass: props.activeClass,\n exactActiveClass: props.exactActiveClass,\n custom: isCustomTag.value,\n ...attrs,\n },\n renderSlotContent\n )\n }\n },\n})\n","import {\n defineComponent,\n h,\n ref,\n onErrorCaptured,\n Suspense,\n type VNode,\n type PropType,\n} from 'vue'\n\n/**\n * KmDeferred - Suspense wrapper with error handling\n *\n * Wraps Vue's <Suspense> with error boundary functionality.\n * Use with useSuspenseQuery for progressive data loading.\n *\n * @example\n * ```vue\n * <KmDeferred :timeout=\"200\">\n * <AsyncDataComponent />\n * <template #fallback>\n * <Skeleton />\n * </template>\n * <template #error=\"{ error, retry }\">\n * <ErrorCard :error=\"error\" @retry=\"retry\" />\n * </template>\n * </KmDeferred>\n * ```\n */\nexport const KmDeferred = defineComponent({\n name: 'KmDeferred',\n\n props: {\n /**\n * Delay in ms before showing fallback (default: 0)\n * Helps avoid flashing loading states for fast loads\n */\n timeout: {\n type: Number as PropType<number>,\n default: 0,\n },\n },\n\n setup(props, { slots, expose }) {\n const error = ref<Error | null>(null)\n const key = ref(0)\n\n onErrorCaptured((err) => {\n error.value = err instanceof Error ? err : new Error(String(err))\n return false\n })\n\n function retry() {\n error.value = null\n key.value++\n }\n\n expose({\n retry,\n error,\n })\n\n return (): VNode => {\n if (error.value) {\n if (slots.error) {\n const errorSlot = slots.error({ error: error.value, retry })\n return h('div', { class: 'km-deferred-error-wrapper' }, errorSlot)\n }\n return h('div', { class: 'km-deferred-error' }, [\n h('p', error.value.message),\n h('button', { onClick: retry }, 'Retry'),\n ])\n }\n\n const fallbackContent = slots.fallback\n ? slots.fallback()\n : h('div', { class: 'km-deferred-loading' }, 'Loading...')\n\n return h(\n Suspense,\n {\n key: key.value,\n timeout: props.timeout,\n },\n {\n default: () => slots.default?.(),\n fallback: () => fallbackContent,\n }\n )\n }\n },\n})\n","import { computed, type ComputedRef } from 'vue'\nimport { useRoute, useRouter } from 'vue-router'\nimport type { SearchSchema } from '../types'\n\nexport interface UseSearchReturn<T> {\n search: ComputedRef<T>\n setSearch: <K extends keyof T>(key: K, value: T[K]) => void\n setAllSearch: (params: Partial<T>) => void\n resetSearch: () => void\n}\n\n/**\n * Convert an object to a query string record, filtering out null/undefined values\n */\nfunction toQueryRecord(obj: Record<string, unknown>): Record<string, string> {\n const query: Record<string, string> = {}\n for (const [key, value] of Object.entries(obj)) {\n if (value !== undefined && value !== null) {\n query[key] = String(value)\n }\n }\n return query\n}\n\n/**\n * Parse with schema, falling back to defaults or empty object\n */\nfunction parseWithDefaults<T>(schema: SearchSchema<T>, input: unknown): T {\n try {\n return schema.parse(input)\n } catch {\n return {} as T\n }\n}\n\n/**\n * Access and update validated search params\n *\n * @example\n * ```vue\n * <script setup>\n * import { useSearch } from '@kimesh/router-runtime'\n * import { z } from 'zod'\n *\n * const searchSchema = z.object({\n * page: z.coerce.number().default(1),\n * sort: z.enum(['asc', 'desc']).default('desc')\n * })\n *\n * const { search, setSearch } = useSearch(searchSchema)\n * </script>\n * ```\n */\nexport function useSearch<T>(schema: SearchSchema<T>): UseSearchReturn<T> {\n const route = useRoute()\n const router = useRouter()\n\n const defaults = parseWithDefaults(schema, {})\n\n const search = computed(() => parseWithDefaults(schema, route.query))\n\n function setSearch<K extends keyof T>(key: K, value: T[K]): void {\n router.replace({\n query: { ...route.query, [key as string]: String(value) },\n })\n }\n\n function setAllSearch(params: Partial<T>): void {\n const merged = { ...search.value, ...params }\n router.replace({ query: toQueryRecord(merged as Record<string, unknown>) })\n }\n\n function resetSearch(): void {\n router.replace({ query: toQueryRecord(defaults as Record<string, unknown>) })\n }\n\n return { search, setSearch, setAllSearch, resetSearch }\n}\n","import { computed, type ComputedRef } from 'vue'\nimport { useRoute } from 'vue-router'\nimport type { RouteNames, RouteParams } from '../types'\n\n/**\n * Get typed route params (non-reactive snapshot)\n *\n * @example\n * ```ts\n * // In /posts/:postId page\n * const params = useParams<'/posts/:postId'>()\n * // params is typed as { postId: string }\n * console.log(params.postId)\n * ```\n */\nexport function useParams<T extends string = RouteNames>(): RouteParams<T> {\n const route = useRoute()\n return route.params as RouteParams<T>\n}\n\n/**\n * Get reactive typed route params\n *\n * @example\n * ```ts\n * // In /posts/:postId page\n * const params = useReactiveParams<'/posts/:postId'>()\n * // params.value is typed as { postId: string }\n * watchEffect(() => {\n * console.log(params.value.postId)\n * })\n * ```\n */\nexport function useReactiveParams<T extends string = RouteNames>(): ComputedRef<RouteParams<T>> {\n const route = useRoute()\n return computed(() => route.params as RouteParams<T>)\n}\n\n","import { useRouter } from 'vue-router'\nimport type { RouteNames, RouteLocationRaw, RouteParamsRaw, HasParams } from '../types'\n\n/**\n * Navigation options - requires params if route has them\n * Allows both named routes (with autocomplete) and raw string paths\n */\nexport type NavigateOptions<T extends string = RouteNames> =\n T extends RouteNames\n ? (HasParams<T> extends true\n ? { to: T; params: RouteParamsRaw<T>; replace?: boolean }\n : HasParams<T> extends false\n ? { to: T; params?: undefined; replace?: boolean }\n : { to: T; params?: Record<string, string | number>; replace?: boolean })\n : { to: T; params?: Record<string, string | number>; replace?: boolean }\n\n/**\n * Type-safe navigation composable\n *\n * @example\n * ```ts\n * const { navigate } = useNavigate()\n *\n * // Navigate to static route\n * navigate({ to: '/posts' })\n *\n * // Navigate to dynamic route with params\n * navigate({ to: '/posts/:postId', params: { postId: '123' } })\n *\n * // Replace instead of push\n * navigate({ to: '/posts', replace: true })\n * ```\n */\nexport function useNavigate() {\n const router = useRouter()\n\n /**\n * Navigate to a route with type-safe params\n */\n function navigate<T extends RouteLocationRaw = RouteNames>(options: NavigateOptions<T>) {\n let path = options.to as string\n\n if (options.params) {\n for (const [key, value] of Object.entries(options.params as Record<string, unknown>)) {\n path = path.replace(`:${key}`, String(value))\n }\n }\n\n if (options.replace) {\n return router.replace(path)\n }\n return router.push(path)\n }\n\n /**\n * Navigate back in history\n */\n function back() {\n return router.back()\n }\n\n /**\n * Navigate forward in history\n */\n function forward() {\n return router.forward()\n }\n\n /**\n * Navigate to a specific position in history\n */\n function go(delta: number) {\n return router.go(delta)\n }\n\n return {\n navigate,\n back,\n forward,\n go,\n router,\n }\n}\n","/**\n * @kimesh/router-runtime - useRuntimeConfig composable\n *\n * Provides type-safe access to runtime configuration.\n * Phase 1: Client-side only, returns build-time injected config.\n */\n\n// Declare the global injected by Vite's define\ndeclare const __KIMESH_CONFIG__: Record<string, unknown>;\n\n/**\n * Runtime configuration type.\n * Users can extend this interface via declaration merging for type-safe config access.\n *\n * @example\n * ```ts\n * // src/types/runtime-config.d.ts\n * declare module '@kimesh/router-runtime' {\n * interface RuntimeConfig {\n * apiBase: string;\n * debug: boolean;\n * features: {\n * darkMode: boolean;\n * };\n * }\n * }\n * ```\n */\nexport interface RuntimeConfig {\n [key: string]: unknown;\n}\n\n// Cached config object for performance\nlet _config: RuntimeConfig | undefined;\n\n/**\n * Access runtime configuration.\n *\n * Returns the runtime config that was injected at build time via Vite's `define`.\n * Values can be overridden using `KIMESH_*` environment variables during build.\n *\n * @returns Frozen runtime config object\n *\n * @example\n * ```vue\n * <script setup>\n * const config = useRuntimeConfig()\n * console.log(config.apiBase)\n * console.log(config.debug)\n * </script>\n * ```\n *\n * @example\n * ```ts\n * // In a composable\n * export function useApi() {\n * const config = useRuntimeConfig()\n *\n * async function fetch<T>(endpoint: string): Promise<T> {\n * const url = `${config.apiBase}${endpoint}`\n * const response = await globalThis.fetch(url)\n * return response.json()\n * }\n *\n * return { fetch }\n * }\n * ```\n */\nexport function useRuntimeConfig<\n T extends RuntimeConfig = RuntimeConfig\n>(): T {\n if (!_config) {\n // Get the config from the global injected by Vite\n // Use a try-catch in case __KIMESH_CONFIG__ is not defined (e.g., in tests)\n try {\n _config = Object.freeze({ ...(__KIMESH_CONFIG__ ?? {}) });\n } catch {\n _config = Object.freeze({});\n }\n }\n return _config as T;\n}\n","/**\n * @kimesh/router-runtime - useKimeshApp Composable\n *\n * Provides access to the Kimesh app context from within components.\n */\n\nimport { inject } from \"vue\";\nimport type { KimeshAppContext } from \"../runtime-types\";\nimport { KIMESH_APP_CONTEXT_KEY } from \"../create-app\";\n\n/**\n * Get the Kimesh app context\n *\n * @example\n * ```ts\n * const { router, queryClient, $config } = useKimeshApp()\n * console.log($config.apiUrl)\n * ```\n *\n * @throws Error if called outside a Kimesh app\n */\nexport function useKimeshApp(): KimeshAppContext {\n const context = inject(KIMESH_APP_CONTEXT_KEY);\n\n if (!context) {\n throw new Error(\n \"[Kimesh] useKimeshApp() must be called within a Kimesh app. \" +\n \"Make sure you have created the app with createKimeshApp().\"\n );\n }\n\n return context;\n}\n\n/**\n * Try to get the Kimesh app context without throwing\n */\nexport function tryUseKimeshApp(): KimeshAppContext | undefined {\n return inject(KIMESH_APP_CONTEXT_KEY);\n}\n","/**\n * @kimesh/router-runtime - useState Composable\n *\n * Centralized reactive state management for Kimesh applications.\n * CSR-optimized alternative to Nuxt's useState.\n */\n\nimport { toRef, isRef, type Ref } from \"vue\";\nimport { useKimeshApp, tryUseKimeshApp } from \"./use-kimesh-app.js\";\n\nconst STATE_KEY_PREFIX = \"$s_\";\n\n/**\n * Get all state keys (without prefix).\n */\nexport function getKmStateKeys(): string[] {\n const app = tryUseKimeshApp();\n if (!app?._state) return [];\n\n return Object.keys(app._state)\n .filter((k) => k.startsWith(STATE_KEY_PREFIX))\n .map((k) => k.slice(STATE_KEY_PREFIX.length));\n}\n\n/**\n * Check if a state exists.\n */\nexport function hasKmState(key: string): boolean {\n const app = tryUseKimeshApp();\n if (!app?._state) return false;\n\n const prefixedKey = STATE_KEY_PREFIX + key;\n return prefixedKey in app._state && app._state[prefixedKey] !== undefined;\n}\n\n/**\n * Clear Kimesh state by key(s) or predicate.\n * Pass undefined to clear all state, a string for single key,\n * an array for multiple keys, or a predicate function.\n */\nexport function clearKmState(\n keys?: string | string[] | ((key: string) => boolean),\n): void {\n const app = tryUseKimeshApp();\n if (!app?._state) return;\n\n const allStateKeys = getKmStateKeys();\n\n const keysToDelete =\n keys === undefined\n ? allStateKeys\n : typeof keys === \"function\"\n ? allStateKeys.filter(keys)\n : Array.isArray(keys)\n ? keys\n : [keys];\n\n for (const key of keysToDelete) {\n const prefixedKey = STATE_KEY_PREFIX + key;\n if (prefixedKey in app._state) {\n delete app._state[prefixedKey];\n }\n }\n}\n\n/**\n * Get or create reactive state by key.\n *\n * @throws TypeError if key is not a non-empty string or init is not a function\n * @throws Error if _state is not initialized\n */\nexport function useState<T>(key: string, init?: () => T | Ref<T>): Ref<T> {\n if (!key || typeof key !== \"string\") {\n throw new TypeError(\"[Kimesh] [useState] key must be a non-empty string\");\n }\n\n if (init !== undefined && typeof init !== \"function\") {\n throw new TypeError(\"[Kimesh] [useState] init must be a function\");\n }\n\n const app = useKimeshApp();\n\n if (!app._state) {\n throw new Error(\n \"[Kimesh] [useState] _state not initialized. \" +\n \"Make sure you are using Kimesh v1.0+ with state support.\",\n );\n }\n\n const prefixedKey = STATE_KEY_PREFIX + key;\n const state = toRef(app._state, prefixedKey) as Ref<T>;\n\n if (state.value === undefined && init) {\n const initialValue = init();\n\n if (isRef(initialValue)) {\n app._state[prefixedKey] = initialValue;\n return initialValue as Ref<T>;\n }\n\n state.value = initialValue;\n }\n\n return state;\n}\n\nexport { STATE_KEY_PREFIX };\n","/**\n * @kimesh/router-runtime - useNavigationMiddleware\n *\n * Composable for registering navigation middleware in components/plugins.\n */\n\nimport type { RouteLocationNormalized, NavigationFailure } from \"vue-router\";\nimport type { KimeshRuntimeHooks } from \"../runtime-types\";\nimport { useKimeshApp } from \"./use-kimesh-app\";\n\n/**\n * Navigation context for middleware\n */\nexport interface NavigationContext {\n to: RouteLocationNormalized;\n from: RouteLocationNormalized;\n failure?: NavigationFailure;\n}\n\n/**\n * Navigation error context\n */\nexport interface NavigationErrorContext {\n error: Error;\n to: RouteLocationNormalized;\n from: RouteLocationNormalized;\n}\n\ntype BeforeNavigationHandler = KimeshRuntimeHooks[\"navigate:before\"];\ntype AfterNavigationHandler = KimeshRuntimeHooks[\"navigate:after\"];\ntype ErrorNavigationHandler = KimeshRuntimeHooks[\"navigate:error\"];\n\n/**\n * Options for useNavigationMiddleware\n */\nexport interface NavigationMiddlewareOptions {\n /** Called before navigation */\n before?: BeforeNavigationHandler;\n /** Called after navigation */\n after?: AfterNavigationHandler;\n /** Called on navigation error */\n error?: ErrorNavigationHandler;\n}\n\n/**\n * Register navigation middleware using the hook system\n *\n * @example\n * ```ts\n * // In a plugin or component setup\n * const { remove } = useNavigationMiddleware({\n * before: ({ to }) => {\n * if (!isAuthenticated() && to.meta.requiresAuth) {\n * return false // Cancel navigation\n * }\n * },\n * after: ({ to }) => {\n * analytics.trackPageView(to.path)\n * },\n * error: ({ error }) => {\n * console.error('Navigation failed:', error)\n * },\n * })\n *\n * // Cleanup when done\n * onUnmounted(() => remove())\n * ```\n *\n * @returns Object with remove function to cleanup hooks\n */\nexport function useNavigationMiddleware(options: NavigationMiddlewareOptions): {\n remove: () => void;\n} {\n const { hooks } = useKimeshApp();\n const cleanups: (() => void)[] = [];\n\n // Type casts needed due to hookable's strict generic inference\n if (options.before) {\n cleanups.push(hooks.hook(\"navigate:before\" as \"app:created\", options.before as () => void));\n }\n\n if (options.after) {\n cleanups.push(hooks.hook(\"navigate:after\" as \"app:created\", options.after as () => void));\n }\n\n if (options.error) {\n cleanups.push(hooks.hook(\"navigate:error\" as \"app:created\", options.error as () => void));\n }\n\n return {\n remove() {\n for (const cleanup of cleanups) {\n cleanup();\n }\n },\n };\n}\n\n/**\n * Create a navigation guard that runs before navigation\n *\n * @example\n * ```ts\n * // Auth guard plugin\n * export default defineKimeshRuntimePlugin({\n * name: 'auth-guard',\n * setup(app) {\n * app.runWithContext(() => {\n * useNavigationGuard(({ to }) => {\n * if (to.meta.requiresAuth && !isAuthenticated()) {\n * return false\n * }\n * })\n * })\n * }\n * })\n * ```\n */\nexport function useNavigationGuard(guard: BeforeNavigationHandler): () => void {\n const { hooks } = useKimeshApp();\n // Type cast needed due to hookable's strict generic inference\n return hooks.hook(\"navigate:before\" as \"app:created\", guard as () => void);\n}\n\n/**\n * Register a callback for after navigation\n */\nexport function useAfterNavigation(callback: AfterNavigationHandler): () => void {\n const { hooks } = useKimeshApp();\n // Type cast needed due to hookable's strict generic inference\n return hooks.hook(\"navigate:after\" as \"app:created\", callback as () => void);\n}\n"],"mappings":"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"}
|