@kimesh/router-runtime 0.2.35 → 0.2.36

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  import * as vue13 from "vue";
2
- import { App, Component, ComputedRef, InjectionKey, KeepAliveProps, PropType, Ref, TransitionProps, VNode } from "vue";
2
+ import { App, Component, ComputedRef, InjectionKey, KeepAliveProps, MaybeRefOrGetter, PropType, Ref, TransitionProps, VNode } from "vue";
3
3
  import * as vue_router0 from "vue-router";
4
- import { NavigationFailure, NavigationGuard, NavigationHookAfter, RouteLocationNormalized, RouteLocationNormalized as RouteLocationNormalized$1, RouteLocationNormalizedLoaded, RouteLocationNormalizedLoaded as RouteLocationNormalizedLoaded$1, RouteRecordRaw, RouteRecordRaw as RouteRecordRaw$1, Router, Router as Router$1, onBeforeRouteLeave, onBeforeRouteUpdate, useLink, useRoute as useRoute$1, useRouter as useRouter$1 } from "vue-router";
4
+ import { LocationQueryValue, NavigationFailure, NavigationGuard, NavigationHookAfter, RouteLocationNormalized, RouteLocationNormalized as RouteLocationNormalized$1, RouteLocationNormalizedLoaded, RouteLocationNormalizedLoaded as RouteLocationNormalizedLoaded$1, RouteRecordRaw, RouteRecordRaw as RouteRecordRaw$1, Router, Router as Router$1, onBeforeRouteLeave, onBeforeRouteUpdate, useLink, useRoute as useRoute$1, useRouter as useRouter$1 } from "vue-router";
5
5
  import { QueryClient, QueryClientConfig } from "@tanstack/vue-query";
6
6
  import { Hookable } from "hookable";
7
7
 
@@ -1386,6 +1386,102 @@ declare function useLayoutData<T = unknown>(): ComputedRef<T | undefined>;
1386
1386
  */
1387
1387
  declare function useRouteLoaderData(): ComputedRef<Record<string, unknown>>;
1388
1388
  //#endregion
1389
+ //#region src/composables/use-route-query.d.ts
1390
+ /**
1391
+ * Query value types supported by vue-router
1392
+ */
1393
+ type RouteQueryValueRaw = LocationQueryValue | LocationQueryValue[];
1394
+ /**
1395
+ * Transform function to convert between URL string and typed value
1396
+ */
1397
+ interface RouteQueryTransform<T, K = T> {
1398
+ /** Transform value when reading from URL */
1399
+ get?: (value: T) => K;
1400
+ /** Transform value when writing to URL */
1401
+ set?: (value: K) => T;
1402
+ }
1403
+ /**
1404
+ * Options for useRouteQuery
1405
+ */
1406
+ interface UseRouteQueryOptions<T, K = T> {
1407
+ /**
1408
+ * Navigation mode when updating query
1409
+ * @default 'replace'
1410
+ */
1411
+ mode?: MaybeRefOrGetter<'replace' | 'push'>;
1412
+ /**
1413
+ * Custom route instance (for testing or advanced usage)
1414
+ */
1415
+ route?: RouteLocationNormalizedLoaded;
1416
+ /**
1417
+ * Custom router instance (for testing or advanced usage)
1418
+ */
1419
+ router?: Router;
1420
+ /**
1421
+ * Transform function(s) for reading/writing values
1422
+ * Can be a single function (get only) or object with get/set
1423
+ */
1424
+ transform?: ((value: T) => K) | RouteQueryTransform<T, K>;
1425
+ }
1426
+ /**
1427
+ * Reactive route query parameter binding - Suspense compatible
1428
+ *
1429
+ * A drop-in replacement for @vueuse/router's useRouteQuery that works
1430
+ * inside Kimesh's Suspense boundaries. Creates a two-way binding between
1431
+ * a ref and a URL query parameter.
1432
+ *
1433
+ * @example Basic usage
1434
+ * ```ts
1435
+ * const page = useRouteQuery('page', '1')
1436
+ * // URL: ?page=2 -> page.value === '2'
1437
+ * page.value = '3' // URL becomes ?page=3
1438
+ * ```
1439
+ *
1440
+ * @example With number transform
1441
+ * ```ts
1442
+ * const page = useRouteQuery('page', 1, {
1443
+ * transform: {
1444
+ * get: (v) => v ? Number(v) : 1,
1445
+ * set: (v) => String(v),
1446
+ * },
1447
+ * })
1448
+ * // page.value is a number
1449
+ * ```
1450
+ *
1451
+ * @example With push mode
1452
+ * ```ts
1453
+ * const tab = useRouteQuery('tab', 'list', { mode: 'push' })
1454
+ * // Changes create new history entries
1455
+ * ```
1456
+ *
1457
+ * @param name - The query parameter name
1458
+ * @param defaultValue - Default value when query param is not present
1459
+ * @param options - Configuration options
1460
+ * @returns A ref that syncs with the URL query parameter
1461
+ */
1462
+ declare function useRouteQuery(name: string): Ref<undefined | null | string | string[]>;
1463
+ declare function useRouteQuery<T extends RouteQueryValueRaw = RouteQueryValueRaw, K = T>(name: string, defaultValue?: MaybeRefOrGetter<T>, options?: UseRouteQueryOptions<T, K>): Ref<K>;
1464
+ /**
1465
+ * Shorthand for useRouteQuery with number transform
1466
+ *
1467
+ * @example
1468
+ * ```ts
1469
+ * const page = useRouteQueryNumber('page', 1)
1470
+ * // page.value is always a number
1471
+ * ```
1472
+ */
1473
+ declare function useRouteQueryNumber(name: string, defaultValue?: number, options?: Omit<UseRouteQueryOptions<string, number>, 'transform'>): Ref<number>;
1474
+ /**
1475
+ * Shorthand for useRouteQuery with boolean transform
1476
+ *
1477
+ * @example
1478
+ * ```ts
1479
+ * const showFilters = useRouteQueryBoolean('filters', false)
1480
+ * // URL: ?filters=true -> showFilters.value === true
1481
+ * ```
1482
+ */
1483
+ declare function useRouteQueryBoolean(name: string, defaultValue?: boolean, options?: Omit<UseRouteQueryOptions<string | null, boolean>, 'transform'>): Ref<boolean>;
1484
+ //#endregion
1389
1485
  //#region src/types/layout.d.ts
1390
1486
  /**
1391
1487
  * Layout loader data access result
@@ -1725,4 +1821,4 @@ declare function createMiddlewareExecutor(appContext: KimeshAppContext): {
1725
1821
  executeChain(middlewares: RouteMiddleware[], context: MiddlewareContext): Promise<void | false | NavigationRedirect>;
1726
1822
  };
1727
1823
  //#endregion
1728
- export { getKmStateKeys as $, FullContext as $t, MiddlewareRegistryEntry as A, KimeshAppContext as An, applyPlugin as At, isLayoutRouteMeta as B, useKimeshContext as Bt, navigateTo as C, RouteParamsRaw as Cn, createHeadPlugin as Ct, MiddlewareDefinition as D, TypedNavigationRedirect as Dn, getCorePlugins as Dt, MiddlewareContext as E, SearchSchema as En, QueryPluginOptions as Et, LayoutLoaderData as F, KimeshRuntimePluginResult as Fn, getPluginHooks as Ft, NavigationContext as G, createKimeshApp as Gt, useLoaderData as H, defineRoute as Ht, LayoutRouteMeta as I, NavigationAfterHookContext as In, getPluginMeta as It, useAfterNavigation as J, BeforeLoadContextFull as Jt, NavigationErrorContext as K, AugmentedContext as Kt, LoaderDataKey as L, NavigationErrorHookContext as Ln, getPluginName as Lt, NavigationRedirect as M, KimeshRuntimePlugin as Mn, applyPluginsWithParallel as Mt, RouteMiddleware as N, KimeshRuntimePluginDefinition as Nn, KIMESH_PLUGIN_INDICATOR as Nt, MiddlewareOption as O, TypedRedirectDynamic as On, queryPlugin as Ot, TypedRouteMiddleware as P, KimeshRuntimePluginMeta as Pn, defineKimeshRuntimePlugin as Pt, clearKmState as Q, FileRouteOptions as Qt, UseMatchLoaderDataOptions as R, NavigationHookContext as Rn, isKimeshRuntimePlugin as Rt, defineKimeshMiddleware as S, RouteParams as Sn, collectRouteHeads as St, KnownMiddleware as T, RouteRecordInfo as Tn, mergeHeadConfigs as Tt, useMatchLoaderData as U, CreateKimeshAppOptionsExtended as Ut, useLayoutData as V, createFileRoute as Vt, useRouteLoaderData as W, KIMESH_APP_CONTEXT_KEY as Wt, useNavigationMiddleware as X, CreateKimeshAppOptions as Xt, useNavigationGuard as Y, BeforeLoadFn as Yt, STATE_KEY_PREFIX as Z, ExtractRouteParams as Zt, createMiddlewarePlugin as _, RouteHeadFn as _n, KmLinkProps as _t, RouteRecordRaw$1 as a, KimeshContext as an, useRuntimeConfig as at, TypedNavigateToOptions as b, RouteNamedMap as bn, applyHeadConfigNative as bt, onBeforeRouteUpdate as c, ParamValue as cn, useParams as ct, useRouter$1 as d, ParamValueZeroOrOne as dn, useSearch as dt, HasParams as en, hasKmState as et, createMiddlewareExecutor as f, PendingConfig as fn, LoaderGuardOptions as ft, MiddlewarePluginOptions as g, RouteHeadContext as gn, KmLink as gt, createMiddlewareContext as h, RouteHeadConfig as hn, KmDeferred as ht, RouteLocationNormalizedLoaded$1 as i, KimeshApp as in, RuntimeConfig as it, MiddlewareResult as j, KimeshRuntimeHooks as jn, applyPlugins as jt, MiddlewareRegistry as k, TypedRedirectStatic as kn, routerPlugin as kt, useLink as l, ParamValueOneOrMore as ln, useReactiveParams as lt, executeMiddlewareChain as m, RouteDefinition as mn, installLoaderGuard as mt, NavigationHookAfter as n, InlineRouteMiddleware as nn, tryUseKimeshApp as nt, Router$1 as o, LoaderContext as on, NavigateOptions as ot, executeMiddleware as p, RouteContext as pn, createLoaderGuard as pt, NavigationMiddlewareOptions as q, BeforeLoadContext as qt, RouteLocationNormalized$1 as r, KIMESH_CONTEXT_KEY as rn, useKimeshApp as rt, onBeforeRouteLeave as s, LoaderFn as sn, useNavigate as st, NavigationGuard as t, InlineMiddlewareContext as tn, useState as tt, useRoute$1 as u, ParamValueZeroOrMore as un, UseSearchReturn as ut, middlewarePlugin as v, RouteInfoByName as vn, KmOutlet as vt, KimeshMiddlewareNames as w, RoutePath as wn, mergeAllRouteHeads as wt, abortNavigation as x, RouteNames as xn, applyTitleTemplate as xt, NavigateToOptions as y, RouteLocationRaw as yn, HeadPluginOptions as yt, createLoaderDataKey as z, RuntimeConfigPublic as zn, defineContext as zt };
1824
+ export { NavigationMiddlewareOptions as $, BeforeLoadContext as $t, MiddlewareRegistryEntry as A, RoutePath as An, mergeAllRouteHeads as At, isLayoutRouteMeta as B, KimeshRuntimePluginMeta as Bn, defineKimeshRuntimePlugin as Bt, navigateTo as C, RouteHeadFn as Cn, KmLinkProps as Ct, MiddlewareDefinition as D, RouteNames as Dn, applyTitleTemplate as Dt, MiddlewareContext as E, RouteNamedMap as En, applyHeadConfigNative as Et, LayoutLoaderData as F, TypedRedirectStatic as Fn, routerPlugin as Ft, useRouteQueryBoolean as G, RuntimeConfigPublic as Gn, defineContext as Gt, RouteQueryValueRaw as H, NavigationAfterHookContext as Hn, getPluginMeta as Ht, LayoutRouteMeta as I, KimeshAppContext as In, applyPlugin as It, useLoaderData as J, defineRoute as Jt, useRouteQueryNumber as K, useKimeshContext as Kt, LoaderDataKey as L, KimeshRuntimeHooks as Ln, applyPlugins as Lt, NavigationRedirect as M, SearchSchema as Mn, QueryPluginOptions as Mt, RouteMiddleware as N, TypedNavigationRedirect as Nn, getCorePlugins as Nt, MiddlewareOption as O, RouteParams as On, collectRouteHeads as Ot, TypedRouteMiddleware as P, TypedRedirectDynamic as Pn, queryPlugin as Pt, NavigationErrorContext as Q, AugmentedContext as Qt, UseMatchLoaderDataOptions as R, KimeshRuntimePlugin as Rn, applyPluginsWithParallel as Rt, defineKimeshMiddleware as S, RouteHeadContext as Sn, KmLink as St, KnownMiddleware as T, RouteLocationRaw as Tn, HeadPluginOptions as Tt, UseRouteQueryOptions as U, NavigationErrorHookContext as Un, getPluginName as Ut, RouteQueryTransform as V, KimeshRuntimePluginResult as Vn, getPluginHooks as Vt, useRouteQuery as W, NavigationHookContext as Wn, isKimeshRuntimePlugin as Wt, useRouteLoaderData as X, KIMESH_APP_CONTEXT_KEY as Xt, useMatchLoaderData as Y, CreateKimeshAppOptionsExtended as Yt, NavigationContext as Z, createKimeshApp as Zt, createMiddlewarePlugin as _, ParamValueZeroOrOne as _n, useSearch as _t, RouteRecordRaw$1 as a, FullContext as an, getKmStateKeys as at, TypedNavigateToOptions as b, RouteDefinition as bn, installLoaderGuard as bt, onBeforeRouteUpdate as c, InlineRouteMiddleware as cn, tryUseKimeshApp as ct, useRouter$1 as d, KimeshContext as dn, useRuntimeConfig as dt, BeforeLoadContextFull as en, useAfterNavigation as et, createMiddlewareExecutor as f, LoaderContext as fn, NavigateOptions as ft, MiddlewarePluginOptions as g, ParamValueZeroOrMore as gn, UseSearchReturn as gt, createMiddlewareContext as h, ParamValueOneOrMore as hn, useReactiveParams as ht, RouteLocationNormalizedLoaded$1 as i, FileRouteOptions as in, clearKmState as it, MiddlewareResult as j, RouteRecordInfo as jn, mergeHeadConfigs as jt, MiddlewareRegistry as k, RouteParamsRaw as kn, createHeadPlugin as kt, useLink as l, KIMESH_CONTEXT_KEY as ln, useKimeshApp as lt, executeMiddlewareChain as m, ParamValue as mn, useParams as mt, NavigationHookAfter as n, CreateKimeshAppOptions as nn, useNavigationMiddleware as nt, Router$1 as o, HasParams as on, hasKmState as ot, executeMiddleware as p, LoaderFn as pn, useNavigate as pt, useLayoutData as q, createFileRoute as qt, RouteLocationNormalized$1 as r, ExtractRouteParams as rn, STATE_KEY_PREFIX as rt, onBeforeRouteLeave as s, InlineMiddlewareContext as sn, useState as st, NavigationGuard as t, BeforeLoadFn as tn, useNavigationGuard as tt, useRoute$1 as u, KimeshApp as un, RuntimeConfig as ut, middlewarePlugin as v, PendingConfig as vn, LoaderGuardOptions as vt, KimeshMiddlewareNames as w, RouteInfoByName as wn, KmOutlet as wt, abortNavigation as x, RouteHeadConfig as xn, KmDeferred as xt, NavigateToOptions as y, RouteContext as yn, createLoaderGuard as yt, createLoaderDataKey as z, KimeshRuntimePluginDefinition as zn, KIMESH_PLUGIN_INDICATOR as zt };
package/dist/index.d.mts CHANGED
@@ -1,2 +1,2 @@
1
- import { $ as getKmStateKeys, $t as FullContext, An as KimeshAppContext, At as applyPlugin, B as isLayoutRouteMeta, Bt as useKimeshContext, C as navigateTo, Cn as RouteParamsRaw, Ct as createHeadPlugin, D as MiddlewareDefinition, Dn as TypedNavigationRedirect, Dt as getCorePlugins, E as MiddlewareContext, En as SearchSchema, Et as QueryPluginOptions, F as LayoutLoaderData, Fn as KimeshRuntimePluginResult, Ft as getPluginHooks, G as NavigationContext, Gt as createKimeshApp, H as useLoaderData, Ht as defineRoute, I as LayoutRouteMeta, In as NavigationAfterHookContext, It as getPluginMeta, J as useAfterNavigation, Jt as BeforeLoadContextFull, K as NavigationErrorContext, Kt as AugmentedContext, L as LoaderDataKey, Ln as NavigationErrorHookContext, Lt as getPluginName, M as NavigationRedirect, Mn as KimeshRuntimePlugin, Mt as applyPluginsWithParallel, N as RouteMiddleware, Nn as KimeshRuntimePluginDefinition, Nt as KIMESH_PLUGIN_INDICATOR, O as MiddlewareOption, On as TypedRedirectDynamic, Ot as queryPlugin, P as TypedRouteMiddleware, Pn as KimeshRuntimePluginMeta, Pt as defineKimeshRuntimePlugin, Q as clearKmState, Qt as FileRouteOptions, R as UseMatchLoaderDataOptions, Rn as NavigationHookContext, Rt as isKimeshRuntimePlugin, S as defineKimeshMiddleware, Sn as RouteParams, St as collectRouteHeads, T as KnownMiddleware, Tn as RouteRecordInfo, Tt as mergeHeadConfigs, U as useMatchLoaderData, Ut as CreateKimeshAppOptionsExtended, V as useLayoutData, Vt as createFileRoute, W as useRouteLoaderData, Wt as KIMESH_APP_CONTEXT_KEY, X as useNavigationMiddleware, Xt as CreateKimeshAppOptions, Y as useNavigationGuard, Yt as BeforeLoadFn, Z as STATE_KEY_PREFIX, Zt as ExtractRouteParams, _ as createMiddlewarePlugin, _n as RouteHeadFn, _t as KmLinkProps, a as RouteRecordRaw, an as KimeshContext, at as useRuntimeConfig, bn as RouteNamedMap, bt as applyHeadConfigNative, c as onBeforeRouteUpdate, cn as ParamValue, ct as useParams, d as useRouter, dn as ParamValueZeroOrOne, dt as useSearch, en as HasParams, et as hasKmState, f as createMiddlewareExecutor, fn as PendingConfig, ft as LoaderGuardOptions, g as MiddlewarePluginOptions, gn as RouteHeadContext, gt as KmLink, h as createMiddlewareContext, hn as RouteHeadConfig, ht as KmDeferred, i as RouteLocationNormalizedLoaded, in as KimeshApp, it as RuntimeConfig, j as MiddlewareResult, jn as KimeshRuntimeHooks, jt as applyPlugins, kn as TypedRedirectStatic, kt as routerPlugin, l as useLink, ln as ParamValueOneOrMore, lt as useReactiveParams, mn as RouteDefinition, mt as installLoaderGuard, n as NavigationHookAfter, nn as InlineRouteMiddleware, nt as tryUseKimeshApp, o as Router, on as LoaderContext, ot as NavigateOptions, pn as RouteContext, pt as createLoaderGuard, q as NavigationMiddlewareOptions, qt as BeforeLoadContext, r as RouteLocationNormalized, rn as KIMESH_CONTEXT_KEY, rt as useKimeshApp, s as onBeforeRouteLeave, sn as LoaderFn, st as useNavigate, t as NavigationGuard, tn as InlineMiddlewareContext, tt as useState, u as useRoute, un as ParamValueZeroOrMore, ut as UseSearchReturn, v as middlewarePlugin, vn as RouteInfoByName, vt as KmOutlet, w as KimeshMiddlewareNames, wn as RoutePath, wt as mergeAllRouteHeads, x as abortNavigation, xn as RouteNames, xt as applyTitleTemplate, y as NavigateToOptions, yn as RouteLocationRaw, yt as HeadPluginOptions, z as createLoaderDataKey, zn as RuntimeConfigPublic, zt as defineContext } from "./index-oEcMI5zG.mjs";
2
- export { AugmentedContext, BeforeLoadContext, BeforeLoadContextFull, BeforeLoadFn, CreateKimeshAppOptions, CreateKimeshAppOptionsExtended, ExtractRouteParams, FileRouteOptions, FullContext, HasParams, HeadPluginOptions, InlineMiddlewareContext, InlineRouteMiddleware, KIMESH_APP_CONTEXT_KEY, KIMESH_CONTEXT_KEY, KIMESH_PLUGIN_INDICATOR, KimeshApp, KimeshAppContext, KimeshContext, KimeshMiddlewareNames, KimeshRuntimeHooks, KimeshRuntimePlugin, KimeshRuntimePluginDefinition, KimeshRuntimePluginMeta, KimeshRuntimePluginResult, KmDeferred, KmLink, KmLinkProps, KmOutlet, KnownMiddleware, LayoutLoaderData, LayoutRouteMeta, LoaderContext, LoaderDataKey, LoaderFn, LoaderGuardOptions, MiddlewareContext, MiddlewareDefinition, MiddlewareOption, MiddlewarePluginOptions, MiddlewareResult, NavigateOptions, NavigateToOptions, NavigationAfterHookContext, NavigationContext, NavigationErrorContext, NavigationErrorHookContext, NavigationGuard, NavigationHookAfter, NavigationHookContext, NavigationMiddlewareOptions, NavigationRedirect, ParamValue, ParamValueOneOrMore, ParamValueZeroOrMore, ParamValueZeroOrOne, PendingConfig, QueryPluginOptions, RouteContext, RouteDefinition, RouteHeadConfig, RouteHeadContext, RouteHeadFn, RouteInfoByName, RouteLocationNormalized, RouteLocationNormalizedLoaded, RouteLocationRaw, RouteMiddleware, RouteNamedMap, RouteNames, RouteParams, RouteParamsRaw, RoutePath, RouteRecordInfo, RouteRecordRaw, Router, RuntimeConfig, RuntimeConfigPublic, STATE_KEY_PREFIX, SearchSchema, TypedNavigationRedirect, TypedRedirectDynamic, TypedRedirectStatic, TypedRouteMiddleware, UseMatchLoaderDataOptions, UseSearchReturn, abortNavigation, applyHeadConfigNative, applyPlugin, applyPlugins, applyPluginsWithParallel, applyTitleTemplate, clearKmState, collectRouteHeads, createFileRoute, createHeadPlugin, createKimeshApp, createLoaderDataKey, createLoaderGuard, createMiddlewareContext, createMiddlewareExecutor, createMiddlewarePlugin, defineContext, defineKimeshMiddleware, defineKimeshRuntimePlugin, defineRoute, getCorePlugins, getKmStateKeys, getPluginHooks, getPluginMeta, getPluginName, hasKmState, installLoaderGuard, isKimeshRuntimePlugin, isLayoutRouteMeta, mergeAllRouteHeads, mergeHeadConfigs, middlewarePlugin, navigateTo, onBeforeRouteLeave, onBeforeRouteUpdate, queryPlugin, routerPlugin, tryUseKimeshApp, useAfterNavigation, useKimeshApp, useKimeshContext, useLayoutData, useLink, useLoaderData, useMatchLoaderData, useNavigate, useNavigationGuard, useNavigationMiddleware, useParams, useReactiveParams, useRoute, useRouteLoaderData, useRouter, useRuntimeConfig, useSearch, useState };
1
+ import { $ as NavigationMiddlewareOptions, $t as BeforeLoadContext, An as RoutePath, At as mergeAllRouteHeads, B as isLayoutRouteMeta, Bn as KimeshRuntimePluginMeta, Bt as defineKimeshRuntimePlugin, C as navigateTo, Cn as RouteHeadFn, Ct as KmLinkProps, D as MiddlewareDefinition, Dn as RouteNames, Dt as applyTitleTemplate, E as MiddlewareContext, En as RouteNamedMap, Et as applyHeadConfigNative, F as LayoutLoaderData, Fn as TypedRedirectStatic, Ft as routerPlugin, G as useRouteQueryBoolean, Gn as RuntimeConfigPublic, Gt as defineContext, H as RouteQueryValueRaw, Hn as NavigationAfterHookContext, Ht as getPluginMeta, I as LayoutRouteMeta, In as KimeshAppContext, It as applyPlugin, J as useLoaderData, Jt as defineRoute, K as useRouteQueryNumber, Kt as useKimeshContext, L as LoaderDataKey, Ln as KimeshRuntimeHooks, Lt as applyPlugins, M as NavigationRedirect, Mn as SearchSchema, Mt as QueryPluginOptions, N as RouteMiddleware, Nn as TypedNavigationRedirect, Nt as getCorePlugins, O as MiddlewareOption, On as RouteParams, Ot as collectRouteHeads, P as TypedRouteMiddleware, Pn as TypedRedirectDynamic, Pt as queryPlugin, Q as NavigationErrorContext, Qt as AugmentedContext, R as UseMatchLoaderDataOptions, Rn as KimeshRuntimePlugin, Rt as applyPluginsWithParallel, S as defineKimeshMiddleware, Sn as RouteHeadContext, St as KmLink, T as KnownMiddleware, Tn as RouteLocationRaw, Tt as HeadPluginOptions, U as UseRouteQueryOptions, Un as NavigationErrorHookContext, Ut as getPluginName, V as RouteQueryTransform, Vn as KimeshRuntimePluginResult, Vt as getPluginHooks, W as useRouteQuery, Wn as NavigationHookContext, Wt as isKimeshRuntimePlugin, X as useRouteLoaderData, Xt as KIMESH_APP_CONTEXT_KEY, Y as useMatchLoaderData, Yt as CreateKimeshAppOptionsExtended, Z as NavigationContext, Zt as createKimeshApp, _ as createMiddlewarePlugin, _n as ParamValueZeroOrOne, _t as useSearch, a as RouteRecordRaw, an as FullContext, at as getKmStateKeys, bn as RouteDefinition, bt as installLoaderGuard, c as onBeforeRouteUpdate, cn as InlineRouteMiddleware, ct as tryUseKimeshApp, d as useRouter, dn as KimeshContext, dt as useRuntimeConfig, en as BeforeLoadContextFull, et as useAfterNavigation, f as createMiddlewareExecutor, fn as LoaderContext, ft as NavigateOptions, g as MiddlewarePluginOptions, gn as ParamValueZeroOrMore, gt as UseSearchReturn, h as createMiddlewareContext, hn as ParamValueOneOrMore, ht as useReactiveParams, i as RouteLocationNormalizedLoaded, in as FileRouteOptions, it as clearKmState, j as MiddlewareResult, jn as RouteRecordInfo, jt as mergeHeadConfigs, kn as RouteParamsRaw, kt as createHeadPlugin, l as useLink, ln as KIMESH_CONTEXT_KEY, lt as useKimeshApp, mn as ParamValue, mt as useParams, n as NavigationHookAfter, nn as CreateKimeshAppOptions, nt as useNavigationMiddleware, o as Router, on as HasParams, ot as hasKmState, pn as LoaderFn, pt as useNavigate, q as useLayoutData, qt as createFileRoute, r as RouteLocationNormalized, rn as ExtractRouteParams, rt as STATE_KEY_PREFIX, s as onBeforeRouteLeave, sn as InlineMiddlewareContext, st as useState, t as NavigationGuard, tn as BeforeLoadFn, tt as useNavigationGuard, u as useRoute, un as KimeshApp, ut as RuntimeConfig, v as middlewarePlugin, vn as PendingConfig, vt as LoaderGuardOptions, w as KimeshMiddlewareNames, wn as RouteInfoByName, wt as KmOutlet, x as abortNavigation, xn as RouteHeadConfig, xt as KmDeferred, y as NavigateToOptions, yn as RouteContext, yt as createLoaderGuard, z as createLoaderDataKey, zn as KimeshRuntimePluginDefinition, zt as KIMESH_PLUGIN_INDICATOR } from "./index-B2f-KCQg.mjs";
2
+ export { AugmentedContext, BeforeLoadContext, BeforeLoadContextFull, BeforeLoadFn, CreateKimeshAppOptions, CreateKimeshAppOptionsExtended, ExtractRouteParams, FileRouteOptions, FullContext, HasParams, HeadPluginOptions, InlineMiddlewareContext, InlineRouteMiddleware, KIMESH_APP_CONTEXT_KEY, KIMESH_CONTEXT_KEY, KIMESH_PLUGIN_INDICATOR, KimeshApp, KimeshAppContext, KimeshContext, KimeshMiddlewareNames, KimeshRuntimeHooks, KimeshRuntimePlugin, KimeshRuntimePluginDefinition, KimeshRuntimePluginMeta, KimeshRuntimePluginResult, KmDeferred, KmLink, KmLinkProps, KmOutlet, KnownMiddleware, LayoutLoaderData, LayoutRouteMeta, LoaderContext, LoaderDataKey, LoaderFn, LoaderGuardOptions, MiddlewareContext, MiddlewareDefinition, MiddlewareOption, MiddlewarePluginOptions, MiddlewareResult, NavigateOptions, NavigateToOptions, NavigationAfterHookContext, NavigationContext, NavigationErrorContext, NavigationErrorHookContext, NavigationGuard, NavigationHookAfter, NavigationHookContext, NavigationMiddlewareOptions, NavigationRedirect, ParamValue, ParamValueOneOrMore, ParamValueZeroOrMore, ParamValueZeroOrOne, PendingConfig, QueryPluginOptions, RouteContext, RouteDefinition, RouteHeadConfig, RouteHeadContext, RouteHeadFn, RouteInfoByName, RouteLocationNormalized, RouteLocationNormalizedLoaded, RouteLocationRaw, RouteMiddleware, RouteNamedMap, RouteNames, RouteParams, RouteParamsRaw, RoutePath, RouteQueryTransform, RouteQueryValueRaw, RouteRecordInfo, RouteRecordRaw, Router, RuntimeConfig, RuntimeConfigPublic, STATE_KEY_PREFIX, SearchSchema, TypedNavigationRedirect, TypedRedirectDynamic, TypedRedirectStatic, TypedRouteMiddleware, UseMatchLoaderDataOptions, UseRouteQueryOptions, UseSearchReturn, abortNavigation, applyHeadConfigNative, applyPlugin, applyPlugins, applyPluginsWithParallel, applyTitleTemplate, clearKmState, collectRouteHeads, createFileRoute, createHeadPlugin, createKimeshApp, createLoaderDataKey, createLoaderGuard, createMiddlewareContext, createMiddlewareExecutor, createMiddlewarePlugin, defineContext, defineKimeshMiddleware, defineKimeshRuntimePlugin, defineRoute, getCorePlugins, getKmStateKeys, getPluginHooks, getPluginMeta, getPluginName, hasKmState, installLoaderGuard, isKimeshRuntimePlugin, isLayoutRouteMeta, mergeAllRouteHeads, mergeHeadConfigs, middlewarePlugin, navigateTo, onBeforeRouteLeave, onBeforeRouteUpdate, queryPlugin, routerPlugin, tryUseKimeshApp, useAfterNavigation, useKimeshApp, useKimeshContext, useLayoutData, useLink, useLoaderData, useMatchLoaderData, useNavigate, useNavigationGuard, useNavigationMiddleware, useParams, useReactiveParams, useRoute, useRouteLoaderData, useRouteQuery, useRouteQueryBoolean, useRouteQueryNumber, useRouter, useRuntimeConfig, useSearch, useState };
package/dist/index.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  import { a as KIMESH_PLUGIN_INDICATOR, c as getPluginMeta, i as createMiddlewareContext, l as getPluginName, n as middlewarePlugin, o as defineKimeshRuntimePlugin, s as getPluginHooks, t as createMiddlewarePlugin, u as isKimeshRuntimePlugin } from "./plugin-0r5-meph.mjs";
2
2
  import { a as defineKimeshMiddleware, i as abortNavigation, o as navigateTo, t as createMiddlewareExecutor } from "./middleware-DvCiATAB.mjs";
3
- import { KeepAlive, Suspense, Transition, computed, createApp, defineComponent, h, inject, isRef, nextTick, onErrorCaptured, reactive, ref, toRef } from "vue";
4
- import { RouterLink, RouterView, createRouter, createWebHashHistory, createWebHistory, onBeforeRouteLeave, onBeforeRouteUpdate, useLink, useRoute, useRoute as useRoute$1, useRouter, useRouter as useRouter$1 } from "vue-router";
3
+ import { KeepAlive, Suspense, Transition, computed, createApp, customRef, defineComponent, getCurrentInstance, h, inject, isRef, nextTick, onErrorCaptured, onScopeDispose, reactive, ref, toRef, toValue, watch } from "vue";
4
+ import { RouterLink, RouterView, createRouter, createWebHashHistory, createWebHistory, onBeforeRouteLeave, onBeforeRouteUpdate, routeLocationKey, routerKey, useLink, useRoute, useRoute as useRoute$1, useRouter, useRouter as useRouter$1 } from "vue-router";
5
5
  import { QueryClient, VueQueryPlugin } from "@tanstack/vue-query";
6
6
  import { createHooks } from "hookable";
7
7
 
@@ -1543,4 +1543,123 @@ function useAfterNavigation(callback) {
1543
1543
  }
1544
1544
 
1545
1545
  //#endregion
1546
- export { KIMESH_APP_CONTEXT_KEY, KIMESH_CONTEXT_KEY, KIMESH_PLUGIN_INDICATOR, KmDeferred, KmLink, KmOutlet, STATE_KEY_PREFIX, abortNavigation, applyHeadConfigNative, applyPlugin, applyPlugins, applyPluginsWithParallel, applyTitleTemplate, clearKmState, collectRouteHeads, createFileRoute, createHeadPlugin, createKimeshApp, createLoaderDataKey, createLoaderGuard, createMiddlewareContext, createMiddlewareExecutor, createMiddlewarePlugin, defineContext, defineKimeshMiddleware, defineKimeshRuntimePlugin, defineRoute, getCorePlugins, getKmStateKeys, getPluginHooks, getPluginMeta, getPluginName, hasKmState, installLoaderGuard, isKimeshRuntimePlugin, isLayoutRouteMeta, mergeAllRouteHeads, mergeHeadConfigs, middlewarePlugin, navigateTo, onBeforeRouteLeave, onBeforeRouteUpdate, queryPlugin, routerPlugin, tryUseKimeshApp, useAfterNavigation, useKimeshApp, useKimeshContext, useLayoutData, useLink, useLoaderData, useMatchLoaderData, useNavigate, useNavigationGuard, useNavigationMiddleware, useParams, useReactiveParams, useRoute, useRouteLoaderData, useRouter, useRuntimeConfig, useSearch, useState };
1546
+ //#region src/composables/use-route-query.ts
1547
+ /**
1548
+ * WeakMap to batch query updates per router instance
1549
+ */
1550
+ const _queue = /* @__PURE__ */ new WeakMap();
1551
+ /**
1552
+ * Safely get the router instance
1553
+ * Works inside Suspense boundaries by using direct injection
1554
+ */
1555
+ function safeUseRouter() {
1556
+ const injectedRouter = inject(routerKey, null);
1557
+ if (injectedRouter) return injectedRouter;
1558
+ const instance = getCurrentInstance();
1559
+ if (!instance) throw new Error("[useRouteQuery] Must be called inside setup() or a component. If used in a composable, ensure it is called during component setup.");
1560
+ const router = instance.appContext.config.globalProperties.$router;
1561
+ if (router) return router;
1562
+ throw new Error("[useRouteQuery] Router not found. Make sure vue-router is installed and the component is inside <RouterView>.");
1563
+ }
1564
+ /**
1565
+ * Safely get the current route
1566
+ * Works inside Suspense boundaries by using direct injection
1567
+ */
1568
+ function safeUseRoute() {
1569
+ const injectedRoute = inject(routeLocationKey, null);
1570
+ if (injectedRoute) return injectedRoute;
1571
+ return safeUseRouter().currentRoute.value;
1572
+ }
1573
+ function useRouteQuery(name, defaultValue, options = {}) {
1574
+ const { mode = "replace", route = safeUseRoute(), router = safeUseRouter(), transform } = options;
1575
+ let transformGet = (value) => value;
1576
+ let transformSet = (value) => value;
1577
+ if (typeof transform === "function") transformGet = transform;
1578
+ else if (transform) {
1579
+ if (transform.get) transformGet = transform.get;
1580
+ if (transform.set) transformSet = transform.set;
1581
+ }
1582
+ if (!_queue.has(router)) _queue.set(router, /* @__PURE__ */ new Map());
1583
+ const queriesQueue = _queue.get(router);
1584
+ let query = route.query[name];
1585
+ onScopeDispose(() => {
1586
+ query = void 0;
1587
+ });
1588
+ let _trigger;
1589
+ const proxy = customRef((track, trigger) => {
1590
+ _trigger = trigger;
1591
+ return {
1592
+ get() {
1593
+ track();
1594
+ return transformGet(query !== void 0 ? query : toValue(defaultValue));
1595
+ },
1596
+ set(v) {
1597
+ const transformed = transformSet(v);
1598
+ if (query === transformed) return;
1599
+ query = transformed === toValue(defaultValue) ? void 0 : transformed;
1600
+ queriesQueue.set(name, query);
1601
+ trigger();
1602
+ nextTick(() => {
1603
+ if (queriesQueue.size === 0) return;
1604
+ const newQueries = Object.fromEntries(queriesQueue.entries());
1605
+ queriesQueue.clear();
1606
+ const { params, query: currentQuery, hash } = route;
1607
+ router[toValue(mode)]({
1608
+ params,
1609
+ query: {
1610
+ ...currentQuery,
1611
+ ...newQueries
1612
+ },
1613
+ hash
1614
+ });
1615
+ });
1616
+ }
1617
+ };
1618
+ });
1619
+ watch(() => route.query[name], (v) => {
1620
+ const transformed = transformGet(v);
1621
+ if (query === transformed) return;
1622
+ query = v;
1623
+ _trigger();
1624
+ }, { flush: "sync" });
1625
+ return proxy;
1626
+ }
1627
+ /**
1628
+ * Shorthand for useRouteQuery with number transform
1629
+ *
1630
+ * @example
1631
+ * ```ts
1632
+ * const page = useRouteQueryNumber('page', 1)
1633
+ * // page.value is always a number
1634
+ * ```
1635
+ */
1636
+ function useRouteQueryNumber(name, defaultValue = 0, options = {}) {
1637
+ return useRouteQuery(name, String(defaultValue), {
1638
+ ...options,
1639
+ transform: {
1640
+ get: (v) => v ? Number(v) : defaultValue,
1641
+ set: (v) => String(v)
1642
+ }
1643
+ });
1644
+ }
1645
+ /**
1646
+ * Shorthand for useRouteQuery with boolean transform
1647
+ *
1648
+ * @example
1649
+ * ```ts
1650
+ * const showFilters = useRouteQueryBoolean('filters', false)
1651
+ * // URL: ?filters=true -> showFilters.value === true
1652
+ * ```
1653
+ */
1654
+ function useRouteQueryBoolean(name, defaultValue = false, options = {}) {
1655
+ return useRouteQuery(name, defaultValue ? "true" : null, {
1656
+ ...options,
1657
+ transform: {
1658
+ get: (v) => v === "true",
1659
+ set: (v) => v ? "true" : null
1660
+ }
1661
+ });
1662
+ }
1663
+
1664
+ //#endregion
1665
+ export { KIMESH_APP_CONTEXT_KEY, KIMESH_CONTEXT_KEY, KIMESH_PLUGIN_INDICATOR, KmDeferred, KmLink, KmOutlet, STATE_KEY_PREFIX, abortNavigation, applyHeadConfigNative, applyPlugin, applyPlugins, applyPluginsWithParallel, applyTitleTemplate, clearKmState, collectRouteHeads, createFileRoute, createHeadPlugin, createKimeshApp, createLoaderDataKey, createLoaderGuard, createMiddlewareContext, createMiddlewareExecutor, createMiddlewarePlugin, defineContext, defineKimeshMiddleware, defineKimeshRuntimePlugin, defineRoute, getCorePlugins, getKmStateKeys, getPluginHooks, getPluginMeta, getPluginName, hasKmState, installLoaderGuard, isKimeshRuntimePlugin, isLayoutRouteMeta, mergeAllRouteHeads, mergeHeadConfigs, middlewarePlugin, navigateTo, onBeforeRouteLeave, onBeforeRouteUpdate, queryPlugin, routerPlugin, tryUseKimeshApp, useAfterNavigation, useKimeshApp, useKimeshContext, useLayoutData, useLink, useLoaderData, useMatchLoaderData, useNavigate, useNavigationGuard, useNavigationMiddleware, useParams, useReactiveParams, useRoute, useRouteLoaderData, useRouteQuery, useRouteQueryBoolean, useRouteQueryNumber, useRouter, useRuntimeConfig, useSearch, useState };
@@ -1,2 +1,2 @@
1
- import { A as MiddlewareRegistryEntry, C as navigateTo, D as MiddlewareDefinition, E as MiddlewareContext, M as NavigationRedirect, N as RouteMiddleware, O as MiddlewareOption, P as TypedRouteMiddleware, S as defineKimeshMiddleware, T as KnownMiddleware, _ as createMiddlewarePlugin, b as TypedNavigateToOptions, f as createMiddlewareExecutor, g as MiddlewarePluginOptions, h as createMiddlewareContext, j as MiddlewareResult, k as MiddlewareRegistry, m as executeMiddlewareChain, p as executeMiddleware, v as middlewarePlugin, w as KimeshMiddlewareNames, x as abortNavigation, y as NavigateToOptions } from "../index-oEcMI5zG.mjs";
1
+ import { A as MiddlewareRegistryEntry, C as navigateTo, D as MiddlewareDefinition, E as MiddlewareContext, M as NavigationRedirect, N as RouteMiddleware, O as MiddlewareOption, P as TypedRouteMiddleware, S as defineKimeshMiddleware, T as KnownMiddleware, _ as createMiddlewarePlugin, b as TypedNavigateToOptions, f as createMiddlewareExecutor, g as MiddlewarePluginOptions, h as createMiddlewareContext, j as MiddlewareResult, k as MiddlewareRegistry, m as executeMiddlewareChain, p as executeMiddleware, v as middlewarePlugin, w as KimeshMiddlewareNames, x as abortNavigation, y as NavigateToOptions } from "../index-B2f-KCQg.mjs";
2
2
  export { KimeshMiddlewareNames, KnownMiddleware, MiddlewareContext, MiddlewareDefinition, MiddlewareOption, MiddlewarePluginOptions, MiddlewareRegistry, MiddlewareRegistryEntry, MiddlewareResult, NavigateToOptions, NavigationRedirect, RouteMiddleware, TypedNavigateToOptions, TypedRouteMiddleware, abortNavigation, createMiddlewareContext, createMiddlewareExecutor, createMiddlewarePlugin, defineKimeshMiddleware, executeMiddleware, executeMiddlewareChain, middlewarePlugin, navigateTo };
@@ -1,2 +1,2 @@
1
- import { _ as createMiddlewarePlugin, g as MiddlewarePluginOptions, v as middlewarePlugin } from "../index-oEcMI5zG.mjs";
1
+ import { _ as createMiddlewarePlugin, g as MiddlewarePluginOptions, v as middlewarePlugin } from "../index-B2f-KCQg.mjs";
2
2
  export { MiddlewarePluginOptions, createMiddlewarePlugin, middlewarePlugin as default, middlewarePlugin };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kimesh/router-runtime",
3
- "version": "0.2.35",
3
+ "version": "0.2.36",
4
4
  "description": "Runtime router for Kimesh framework",
5
5
  "repository": {
6
6
  "type": "git",