@real-router/vue 0.1.2 → 0.2.1
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/README.md +44 -1
- package/dist/cjs/index.d.ts +27 -2
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/metafile-cjs.json +1 -1
- package/dist/esm/index.d.mts +27 -2
- package/dist/esm/index.mjs +1 -1
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/metafile-esm.json +1 -1
- package/package.json +8 -7
- package/src/components/RouterErrorBoundary.ts +69 -0
- package/src/composables/useRouterError.ts +23 -0
- package/src/createRouterPlugin.ts +0 -1
- package/src/directives/vLink.ts +24 -24
- package/src/index.ts +4 -0
package/README.md
CHANGED
|
@@ -288,6 +288,49 @@ const LazyDashboard = defineAsyncComponent(() => import("./Dashboard.vue"));
|
|
|
288
288
|
|
|
289
289
|
Without `fallback`, no `<Suspense>` boundary is added. The prop is optional.
|
|
290
290
|
|
|
291
|
+
### `<RouterErrorBoundary>`
|
|
292
|
+
|
|
293
|
+
Declarative error handling for navigation errors. Shows a fallback **alongside** children (not instead of) when a guard rejects or a route is not found.
|
|
294
|
+
|
|
295
|
+
```typescript
|
|
296
|
+
import { RouterErrorBoundary } from "@real-router/vue";
|
|
297
|
+
|
|
298
|
+
h(
|
|
299
|
+
RouterErrorBoundary,
|
|
300
|
+
{
|
|
301
|
+
fallback: (error, resetError) =>
|
|
302
|
+
h("div", { class: "toast" }, [
|
|
303
|
+
error.code,
|
|
304
|
+
h("button", { onClick: resetError }, "Dismiss"),
|
|
305
|
+
]),
|
|
306
|
+
onError: (error) => analytics.track("nav_error", { code: error.code }),
|
|
307
|
+
},
|
|
308
|
+
{
|
|
309
|
+
default: () =>
|
|
310
|
+
h(Link, { routeName: "protected" }, { default: () => "Go to Protected" }),
|
|
311
|
+
},
|
|
312
|
+
);
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
In a template:
|
|
316
|
+
|
|
317
|
+
```vue
|
|
318
|
+
<RouterErrorBoundary
|
|
319
|
+
:fallback="
|
|
320
|
+
(error, resetError) =>
|
|
321
|
+
h('div', { class: 'toast' }, [
|
|
322
|
+
error.code,
|
|
323
|
+
h('button', { onClick: resetError }, 'Dismiss'),
|
|
324
|
+
])
|
|
325
|
+
"
|
|
326
|
+
:onError="(error) => analytics.track('nav_error', { code: error.code })"
|
|
327
|
+
>
|
|
328
|
+
<Link routeName="protected">Go to Protected</Link>
|
|
329
|
+
</RouterErrorBoundary>
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
Auto-resets on next successful navigation. Works with both `<Link>` and imperative `router.navigate()`.
|
|
333
|
+
|
|
291
334
|
## Directives
|
|
292
335
|
|
|
293
336
|
### `v-link`
|
|
@@ -409,7 +452,7 @@ When enabled, a visually hidden `aria-live` region announces each navigation. Fo
|
|
|
409
452
|
|
|
410
453
|
Full documentation: [Wiki](https://github.com/greydragon888/real-router/wiki)
|
|
411
454
|
|
|
412
|
-
- [RouterProvider](https://github.com/greydragon888/real-router/wiki/RouterProvider) · [RouteView](https://github.com/greydragon888/real-router/wiki/RouteView) · [Link](https://github.com/greydragon888/real-router/wiki/Link)
|
|
455
|
+
- [RouterProvider](https://github.com/greydragon888/real-router/wiki/RouterProvider) · [RouteView](https://github.com/greydragon888/real-router/wiki/RouteView) · [RouterErrorBoundary](https://github.com/greydragon888/real-router/wiki/RouterErrorBoundary) · [Link](https://github.com/greydragon888/real-router/wiki/Link)
|
|
413
456
|
- [useRouter](https://github.com/greydragon888/real-router/wiki/useRouter) · [useRoute](https://github.com/greydragon888/real-router/wiki/useRoute) · [useRouteNode](https://github.com/greydragon888/real-router/wiki/useRouteNode) · [useNavigator](https://github.com/greydragon888/real-router/wiki/useNavigator) · [useRouteUtils](https://github.com/greydragon888/real-router/wiki/useRouteUtils) · [useRouterTransition](https://github.com/greydragon888/real-router/wiki/useRouterTransition)
|
|
414
457
|
|
|
415
458
|
## Examples
|
package/dist/cjs/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as vue from 'vue';
|
|
2
2
|
import { VNode, PropType, Directive, ShallowRef, Plugin, InjectionKey } from 'vue';
|
|
3
|
-
import { Params, NavigationOptions, Router, Navigator
|
|
3
|
+
import { Params, NavigationOptions, RouterError, State, Router, Navigator } from '@real-router/core';
|
|
4
4
|
export { Navigator } from '@real-router/core';
|
|
5
5
|
import { RouteUtils } from '@real-router/route-utils';
|
|
6
6
|
import { RouterTransitionSnapshot } from '@real-router/sources';
|
|
@@ -176,6 +176,31 @@ declare const Link: vue.DefineComponent<vue.ExtractPropTypes<{
|
|
|
176
176
|
target: string;
|
|
177
177
|
}, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
|
|
178
178
|
|
|
179
|
+
declare const RouterErrorBoundary: vue.DefineComponent<vue.ExtractPropTypes<{
|
|
180
|
+
fallback: {
|
|
181
|
+
type: PropType<(error: RouterError, resetError: () => void) => VNode>;
|
|
182
|
+
required: true;
|
|
183
|
+
};
|
|
184
|
+
onError: {
|
|
185
|
+
type: PropType<(error: RouterError, toRoute: State | null, fromRoute: State | null) => void>;
|
|
186
|
+
default: undefined;
|
|
187
|
+
};
|
|
188
|
+
}>, () => VNode<vue.RendererNode, vue.RendererElement, {
|
|
189
|
+
[key: string]: any;
|
|
190
|
+
}>, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.PublicProps, Readonly<vue.ExtractPropTypes<{
|
|
191
|
+
fallback: {
|
|
192
|
+
type: PropType<(error: RouterError, resetError: () => void) => VNode>;
|
|
193
|
+
required: true;
|
|
194
|
+
};
|
|
195
|
+
onError: {
|
|
196
|
+
type: PropType<(error: RouterError, toRoute: State | null, fromRoute: State | null) => void>;
|
|
197
|
+
default: undefined;
|
|
198
|
+
};
|
|
199
|
+
}>> & Readonly<{}>, {
|
|
200
|
+
onError: (error: RouterError, toRoute: State | null, fromRoute: State | null) => void;
|
|
201
|
+
}, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
|
|
202
|
+
type RouterErrorBoundaryProps = InstanceType<typeof RouterErrorBoundary>["$props"];
|
|
203
|
+
|
|
179
204
|
interface LinkDirectiveValue {
|
|
180
205
|
name: string;
|
|
181
206
|
params?: Params;
|
|
@@ -241,4 +266,4 @@ declare const RouterKey: InjectionKey<Router>;
|
|
|
241
266
|
declare const NavigatorKey: InjectionKey<Navigator>;
|
|
242
267
|
declare const RouteKey: InjectionKey<RouteContext>;
|
|
243
268
|
|
|
244
|
-
export { Link, type LinkDirectiveValue, type LinkProps, NavigatorKey, RouteKey, RouteView, type MatchProps as RouteViewMatchProps, type NotFoundProps as RouteViewNotFoundProps, type RouteViewProps, RouterKey, RouterProvider, createRouterPlugin, useNavigator, useRoute, useRouteNode, useRouteUtils, useRouter, useRouterTransition, vLink };
|
|
269
|
+
export { Link, type LinkDirectiveValue, type LinkProps, NavigatorKey, RouteKey, RouteView, type MatchProps as RouteViewMatchProps, type NotFoundProps as RouteViewNotFoundProps, type RouteViewProps, RouterErrorBoundary, type RouterErrorBoundaryProps, RouterKey, RouterProvider, createRouterPlugin, useNavigator, useRoute, useRouteNode, useRouteUtils, useRouter, useRouterTransition, vLink };
|
package/dist/cjs/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var e=require("vue"),t=require("@real-router/core"),r=require("@real-router/route-utils"),o=require("@real-router/sources"),n=require("dom-utils"),u=require("@real-router/core/api");function a(){return null}var s=e.defineComponent({name:"RouteView.Match",props:{segment:{type:String,required:!0},exact:{type:Boolean,default:!1},fallback:{type:[Object,Function],default:void 0}},render:a}),i=e.defineComponent({name:"RouteView.NotFound",render:a});function
|
|
1
|
+
var e=require("vue"),t=require("@real-router/core"),r=require("@real-router/route-utils"),o=require("@real-router/sources"),n=require("dom-utils"),u=require("@real-router/core/api");function a(){return null}var s=e.defineComponent({name:"RouteView.Match",props:{segment:{type:String,required:!0},exact:{type:Boolean,default:!1},fallback:{type:[Object,Function],default:void 0}},render:a}),i=e.defineComponent({name:"RouteView.NotFound",render:a});function l(e,t,o){return o?e===t:r.startsWithSegment(e,t)}function c(t){if(Array.isArray(t)){const r=[];for(const o of t)Array.isArray(o)?r.push(...c(o)):e.isVNode(o)&&r.push(o);return r}return e.isVNode(t)?[t]:[]}function p(t,r){const o=c(t);for(const t of o)t.type===s||t.type===i?r.push(t):t.type===e.Fragment&&p(t.children,r)}function v(t){const r=e.shallowRef(t.getSnapshot()),o=t.subscribe(()=>{r.value=t.getSnapshot()});return e.onScopeDispose(o),r}var d=Symbol("RouterKey"),f=Symbol("NavigatorKey"),m=Symbol("RouteKey"),g=()=>{const t=e.inject(d);if(!t)throw new Error("useRouter must be used within a RouterProvider");return t};function y(r){const n=g(),u=v(o.createRouteNodeSource(n,r)),a=t.getNavigator(n),s=e.shallowRef(u.value.route),i=e.shallowRef(u.value.previousRoute);return e.watch(u,e=>{s.value=e.route,i.value=e.previousRoute},{flush:"sync"}),{navigator:a,route:s,previousRoute:i}}function R(e){const t=e.children;return t?.default?.()??null}function h(t,r){if(void 0===r)return t;const o="function"==typeof r?r():r;return e.h(e.Suspense,{},{default:()=>t,fallback:()=>o})}var w=e.defineComponent({name:"RouteView",props:{nodeName:{type:String,required:!0},keepAlive:{type:Boolean,default:!1}},setup(r,{slots:o}){const n=y(r.nodeName),u=new Map;return()=>{const a=n.route.value;if(!a)return null;const c=[];p(o.default?.(),c);const{rendered:v,fallback:d}=function(e,r,o){let n,u=null,a=!1;const s=[];for(const t of e){if(t.type===i){u=t.children;continue}const e=t.props,c=e?.segment??"";!a&&l(r,o?`${o}.${c}`:c,e?.exact??!1)&&(a=!0,n=e?.fallback,s.push(t))}if(!a&&r===t.UNKNOWN_ROUTE&&null!==u){const t=e.filter(e=>e.type===i).at(-1);t&&s.push(t)}return{rendered:s,activeMatchFound:a,fallback:n}}(c,a.name,r.nodeName);if(0===v.length)return null;const f=v[0];if(!r.keepAlive){if(f.type===s||f.type===i){const t=R(f);return t?h(e.h(e.Fragment,t),d):null}return null}const m=f.props,g=m?.segment??"__not-found__",y=function(t,r){const o=t.get(r);if(o)return o;const n=e.markRaw(e.defineComponent({name:`KeepAlive-${r}`,setup:(e,t)=>()=>t.slots.default?.()}));return t.set(r,n),n}(u,g),w=R(f)??[];return h(e.h(e.KeepAlive,null,{default:()=>e.h(y,{key:g},{default:()=>w})}),d)}}}),b=Object.assign(w,{Match:s,NotFound:i}),k=Object.freeze({}),N=Object.freeze({}),S=e.defineComponent({name:"Link",props:{routeName:{type:String,required:!0},routeParams:{type:Object,default:()=>k},routeOptions:{type:Object,default:()=>N},class:{type:String,default:void 0},activeClassName:{type:String,default:"active"},activeStrict:{type:Boolean,default:!1},ignoreQueryParams:{type:Boolean,default:!0},target:{type:String,default:void 0}},setup(t,{slots:r,attrs:u}){const a=g(),s=function(e,t,r=!1,n=!0){const u=g();return v(o.createActiveRouteSource(u,e,t,{strict:r,ignoreQueryParams:n}))}(t.routeName,t.routeParams,t.activeStrict,t.ignoreQueryParams),i=e.computed(()=>n.buildHref(a,t.routeName,t.routeParams)),l=e.computed(()=>n.buildActiveClassName(s.value,t.activeClassName,t.class)),c=e=>{u.onClick&&"function"==typeof u.onClick&&(u.onClick(e),e.defaultPrevented)||n.shouldNavigate(e)&&"_blank"!==t.target&&(e.preventDefault(),a.navigate(t.routeName,t.routeParams,t.routeOptions).catch(()=>{}))};return()=>e.h("a",{...u,href:i.value,class:l.value,target:t.target,onClick:c},r.default?.())}}),x=new WeakMap,P=e.defineComponent({name:"RouterErrorBoundary",props:{fallback:{type:Function,required:!0},onError:{type:Function,default:void 0}},setup(t,{slots:r}){const n=function(){const e=g();let t=x.get(e);return t||(t=o.createErrorSource(e),x.set(e,t)),v(t)}(),u=e.ref(-1);e.watch(()=>n.value.version,()=>{n.value.error&&t.onError?.(n.value.error,n.value.toRoute,n.value.fromRoute)},{immediate:!0});const a=e.computed(()=>n.value.version>u.value?n.value.error:null),s=()=>{u.value=n.value.version};return()=>{const o=r.default?.()??[],n=a.value?t.fallback(a.value,s):null;return e.h(e.Fragment,null,[...o,n])}}}),E=null;function C(e){E=e}function A(){if(!E)throw new Error("v-link directive requires a RouterProvider ancestor. Make sure RouterProvider is mounted.");return E}var q=new WeakMap,O=new WeakMap;function j(e,t,r){const o=function(e,t){return r=>{n.shouldNavigate(r)&&(r.preventDefault(),e.navigate(t.name,t.params??{},t.options??{}).catch(()=>{}))}}(t,r),u=function(e,t,r){return o=>{"Enter"!==o.key||r instanceof HTMLButtonElement||e.navigate(t.name,t.params??{},t.options??{}).catch(()=>{})}}(t,r,e);e.addEventListener("click",o),e.addEventListener("keydown",u),q.set(e,o),O.set(e,u)}function M(e){const t=q.get(e),r=O.get(e);t&&e.removeEventListener("click",t),r&&e.removeEventListener("keydown",r),q.delete(e),O.delete(e)}var F={mounted(e,t){const r=A();n.applyLinkA11y(e),e.style.cursor="pointer",j(e,r,t.value)},updated(e,t){const r=A();M(e),j(e,r,t.value)},beforeUnmount(e){M(e)}},K=e.defineComponent({name:"RouterProvider",props:{router:{type:Object,required:!0},announceNavigation:{type:Boolean,default:!1}},setup(r,{slots:u}){e.onMounted(()=>{if(!r.announceNavigation)return;const t=n.createRouteAnnouncer(r.router);e.onUnmounted(()=>{t.destroy()})});const a=t.getNavigator(r.router);C(r.router);const s=o.createRouteSource(r.router),i=s.getSnapshot(),l=e.shallowRef(i.route),c=e.shallowRef(i.previousRoute),p=s.subscribe(()=>{const e=s.getSnapshot();l.value=e.route,c.value=e.previousRoute});return e.onScopeDispose(p),e.provide(d,r.router),e.provide(f,a),e.provide(m,{navigator:a,route:l,previousRoute:c}),()=>u.default?.()}});exports.Link=S,exports.NavigatorKey=f,exports.RouteKey=m,exports.RouteView=b,exports.RouterErrorBoundary=P,exports.RouterKey=d,exports.RouterProvider=K,exports.createRouterPlugin=function(r){return{install(n){const u=t.getNavigator(r);C(r);const a=o.createRouteSource(r),s=a.getSnapshot(),i=e.shallowRef(s.route),l=e.shallowRef(s.previousRoute);a.subscribe(()=>{const e=a.getSnapshot();i.value=e.route,l.value=e.previousRoute}),n.provide(d,r),n.provide(f,u),n.provide(m,{navigator:u,route:i,previousRoute:l})}}},exports.useNavigator=()=>{const t=e.inject(f);if(!t)throw new Error("useNavigator must be used within a RouterProvider");return t},exports.useRoute=()=>{const t=e.inject(m);if(!t)throw new Error("useRoute must be used within a RouterProvider");return t},exports.useRouteNode=y,exports.useRouteUtils=()=>{const e=g();return r.getRouteUtils(u.getPluginApi(e).getTree())},exports.useRouter=g,exports.useRouterTransition=function(){const e=g();return v(o.createTransitionSource(e))},exports.vLink=F;//# sourceMappingURL=index.js.map
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/RouteView/components.ts","../../src/components/RouteView/helpers.ts","../../src/useRefFromSource.ts","../../src/context.ts","../../src/composables/useRouter.ts","../../src/composables/useRouteNode.ts","../../src/components/RouteView/RouteView.ts","../../src/composables/useIsActiveRoute.ts","../../src/constants.ts","../../src/components/Link.ts","../../src/directives/vLink.ts","../../src/composables/useNavigator.ts","../../src/composables/useRouteUtils.ts","../../src/composables/useRoute.ts","../../src/composables/useRouterTransition.ts","../../src/createRouterPlugin.ts","../../src/RouterProvider.ts"],"names":["defineComponent","startsWithSegment","isVNode","Fragment","UNKNOWN_ROUTE","shallowRef","onScopeDispose","inject","createRouteNodeSource","getNavigator","watch","markRaw","Suspense","h","KeepAlive","createActiveRouteSource","computed","buildHref","buildActiveClassName","shouldNavigate","applyLinkA11y","getRouteUtils","getPluginApi","createTransitionSource","createRouteSource","onMounted","createRouteAnnouncer","onUnmounted","provide"],"mappings":"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","file":"index.js","sourcesContent":["import { defineComponent } from \"vue\";\n\nimport type { PropType, VNode } from \"vue\";\n\nfunction renderNull() {\n return null;\n}\n\nexport const Match = defineComponent({\n name: \"RouteView.Match\",\n props: {\n segment: {\n type: String as PropType<string>,\n required: true,\n },\n exact: {\n type: Boolean,\n default: false,\n },\n fallback: {\n type: [Object, Function] as PropType<VNode | (() => VNode)>,\n default: undefined,\n },\n },\n render: renderNull,\n});\n\nexport const NotFound = defineComponent({\n name: \"RouteView.NotFound\",\n render: renderNull,\n});\n","import { UNKNOWN_ROUTE } from \"@real-router/core\";\nimport { startsWithSegment } from \"@real-router/route-utils\";\nimport { Fragment, isVNode } from \"vue\";\n\nimport { Match, NotFound } from \"./components\";\n\nimport type { VNode } from \"vue\";\n\ntype FallbackType = VNode | (() => VNode) | undefined;\n\nfunction isSegmentMatch(\n routeName: string,\n fullSegmentName: string,\n exact: boolean,\n): boolean {\n if (exact) {\n return routeName === fullSegmentName;\n }\n\n return startsWithSegment(routeName, fullSegmentName);\n}\n\nfunction normalizeChildren(children: unknown): VNode[] {\n if (Array.isArray(children)) {\n const result: VNode[] = [];\n\n for (const child of children) {\n if (Array.isArray(child)) {\n result.push(...normalizeChildren(child));\n } else if (isVNode(child)) {\n result.push(child);\n }\n }\n\n return result;\n }\n\n if (isVNode(children)) {\n return [children];\n }\n\n return [];\n}\n\nexport function collectElements(children: unknown, result: VNode[]): void {\n const vnodes = normalizeChildren(children);\n\n for (const child of vnodes) {\n if (child.type === Match || child.type === NotFound) {\n result.push(child);\n } else if (child.type === Fragment) {\n collectElements(child.children, result);\n }\n }\n}\n\nexport function buildRenderList(\n elements: VNode[],\n routeName: string,\n nodeName: string,\n): {\n rendered: VNode[];\n activeMatchFound: boolean;\n fallback?: FallbackType;\n} {\n let notFoundChildren: unknown = null;\n let activeMatchFound = false;\n let fallback: FallbackType = undefined;\n const rendered: VNode[] = [];\n\n for (const child of elements) {\n if (child.type === NotFound) {\n notFoundChildren = child.children;\n continue;\n }\n\n const props = child.props as {\n segment: string;\n exact?: boolean;\n fallback?: FallbackType;\n } | null;\n const segment = props?.segment ?? \"\";\n const exact = props?.exact ?? false;\n const fullSegmentName = nodeName ? `${nodeName}.${segment}` : segment;\n const isActive =\n !activeMatchFound && isSegmentMatch(routeName, fullSegmentName, exact);\n\n if (isActive) {\n activeMatchFound = true;\n fallback = props?.fallback;\n rendered.push(child);\n }\n }\n\n if (\n !activeMatchFound &&\n routeName === UNKNOWN_ROUTE &&\n notFoundChildren !== null\n ) {\n const nfElements = elements.filter((element) => element.type === NotFound);\n /* v8 ignore next 3 */\n const lastNf = nfElements.at(-1);\n\n if (lastNf) {\n rendered.push(lastNf);\n }\n }\n\n return { rendered, activeMatchFound, fallback };\n}\n","import { shallowRef, onScopeDispose } from \"vue\";\n\nimport type { RouterSource } from \"@real-router/sources\";\nimport type { ShallowRef } from \"vue\";\n\nexport function useRefFromSource<T>(source: RouterSource<T>): ShallowRef<T> {\n const ref = shallowRef(source.getSnapshot());\n\n const unsub = source.subscribe(() => {\n ref.value = source.getSnapshot();\n });\n\n onScopeDispose(unsub);\n\n return ref;\n}\n","import type { RouteContext as RouteContextType } from \"./types\";\nimport type { Router, Navigator } from \"@real-router/core\";\nimport type { InjectionKey } from \"vue\";\n\nexport const RouterKey: InjectionKey<Router> = Symbol(\"RouterKey\");\n\nexport const NavigatorKey: InjectionKey<Navigator> = Symbol(\"NavigatorKey\");\n\nexport const RouteKey: InjectionKey<RouteContextType> = Symbol(\"RouteKey\");\n","import { inject } from \"vue\";\n\nimport { RouterKey } from \"../context\";\n\nimport type { Router } from \"@real-router/core\";\n\nexport const useRouter = (): Router => {\n const router = inject(RouterKey);\n\n if (!router) {\n throw new Error(\"useRouter must be used within a RouterProvider\");\n }\n\n return router;\n};\n","import { getNavigator } from \"@real-router/core\";\nimport { createRouteNodeSource } from \"@real-router/sources\";\nimport { shallowRef, watch } from \"vue\";\n\nimport { useRefFromSource } from \"../useRefFromSource\";\nimport { useRouter } from \"./useRouter\";\n\nimport type { RouteContext } from \"../types\";\nimport type { State } from \"@real-router/core\";\n\nexport function useRouteNode(nodeName: string): RouteContext {\n const router = useRouter();\n\n const source = createRouteNodeSource(router, nodeName);\n const snapshot = useRefFromSource(source);\n\n const navigator = getNavigator(router);\n\n const route = shallowRef<State | undefined>(snapshot.value.route);\n const previousRoute = shallowRef<State | undefined>(\n snapshot.value.previousRoute,\n );\n\n watch(\n snapshot,\n (newSnapshot) => {\n route.value = newSnapshot.route;\n previousRoute.value = newSnapshot.previousRoute;\n },\n { flush: \"sync\" },\n );\n\n return {\n navigator,\n route,\n previousRoute,\n };\n}\n","import {\n Fragment,\n defineComponent,\n h,\n KeepAlive,\n markRaw,\n Suspense,\n} from \"vue\";\n\nimport { Match, NotFound } from \"./components\";\nimport { buildRenderList, collectElements } from \"./helpers\";\nimport { useRouteNode } from \"../../composables/useRouteNode\";\n\nimport type { Component, VNode } from \"vue\";\n\ntype SlotChildren = Record<string, (() => VNode[]) | undefined> | null;\n\nfunction getSlotContent(vnode: VNode): VNode[] | null {\n const slots = vnode.children as SlotChildren;\n\n return slots?.default?.() ?? null;\n}\n\nfunction getOrCreateWrapper(\n cache: Map<string, Component>,\n segment: string,\n): Component {\n const existing = cache.get(segment);\n\n if (existing) {\n return existing;\n }\n\n const wrapper = markRaw(\n defineComponent({\n name: `KeepAlive-${segment}`,\n setup(_wrapperProps, wrapperCtx) {\n return () => wrapperCtx.slots.default?.();\n },\n }),\n );\n\n cache.set(segment, wrapper);\n\n return wrapper;\n}\n\nfunction wrapWithSuspense(content: VNode, fallback: unknown): VNode {\n if (fallback === undefined) {\n return content;\n }\n\n const fallbackContent =\n typeof fallback === \"function\" ? (fallback as () => VNode)() : fallback;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment\n const suspenseComponent = Suspense as any;\n\n return h(\n suspenseComponent,\n {},\n {\n default: () => content,\n fallback: () => fallbackContent,\n },\n );\n}\n\nconst RouteViewComponent = defineComponent({\n name: \"RouteView\",\n props: {\n nodeName: {\n type: String,\n required: true,\n },\n keepAlive: {\n type: Boolean,\n default: false,\n },\n },\n setup(props, { slots }) {\n const routeContext = useRouteNode(props.nodeName);\n\n const wrapperCache = new Map<string, Component>();\n\n return (): VNode | null => {\n const route = routeContext.route.value;\n\n if (!route) {\n return null;\n }\n\n const elements: VNode[] = [];\n\n collectElements(slots.default?.(), elements);\n\n const { rendered, fallback } = buildRenderList(\n elements,\n route.name,\n props.nodeName,\n );\n\n if (rendered.length === 0) {\n return null;\n }\n\n const activeChild = rendered[0];\n\n if (!props.keepAlive) {\n if (activeChild.type === Match || activeChild.type === NotFound) {\n const content = getSlotContent(activeChild);\n\n if (!content) {\n return null;\n }\n\n const fragment = h(Fragment, content);\n\n return wrapWithSuspense(fragment, fallback);\n }\n\n /* v8 ignore start */\n return null;\n /* v8 ignore stop */\n }\n\n const activeProps = activeChild.props as {\n segment?: string;\n } | null;\n const segment = activeProps?.segment ?? \"__not-found__\";\n\n const WrapperComponent = getOrCreateWrapper(wrapperCache, segment);\n /* v8 ignore next */\n const slotContent = getSlotContent(activeChild) ?? [];\n\n const keepAliveContent = h(KeepAlive, null, {\n default: () =>\n h(WrapperComponent, { key: segment }, { default: () => slotContent }),\n });\n\n return wrapWithSuspense(keepAliveContent, fallback);\n };\n },\n});\n\nexport const RouteView = Object.assign(RouteViewComponent, { Match, NotFound });\n\nexport type {\n RouteViewProps,\n MatchProps as RouteViewMatchProps,\n NotFoundProps as RouteViewNotFoundProps,\n} from \"./types\";\n","import { createActiveRouteSource } from \"@real-router/sources\";\n\nimport { useRefFromSource } from \"../useRefFromSource\";\nimport { useRouter } from \"./useRouter\";\n\nimport type { Params } from \"@real-router/core\";\nimport type { ShallowRef } from \"vue\";\n\nexport function useIsActiveRoute(\n routeName: string,\n params?: Params,\n strict = false,\n ignoreQueryParams = true,\n): ShallowRef<boolean> {\n const router = useRouter();\n\n const source = createActiveRouteSource(router, routeName, params, {\n strict,\n ignoreQueryParams,\n });\n\n return useRefFromSource(source);\n}\n","/**\n * Stable empty object for default params\n */\nexport const EMPTY_PARAMS = Object.freeze({});\n\n/**\n * Stable empty options object\n */\nexport const EMPTY_OPTIONS = Object.freeze({});\n","import { shouldNavigate, buildHref, buildActiveClassName } from \"dom-utils\";\nimport { defineComponent, h, computed } from \"vue\";\n\nimport { useIsActiveRoute } from \"../composables/useIsActiveRoute\";\nimport { useRouter } from \"../composables/useRouter\";\nimport { EMPTY_PARAMS, EMPTY_OPTIONS } from \"../constants\";\n\nimport type { Params, NavigationOptions } from \"@real-router/core\";\nimport type { PropType } from \"vue\";\n\nexport const Link = defineComponent({\n name: \"Link\",\n props: {\n routeName: {\n type: String,\n required: true,\n },\n routeParams: {\n type: Object as PropType<Params>,\n default: () => EMPTY_PARAMS,\n },\n routeOptions: {\n type: Object as PropType<NavigationOptions>,\n default: () => EMPTY_OPTIONS,\n },\n class: {\n type: String,\n default: undefined,\n },\n activeClassName: {\n type: String,\n default: \"active\",\n },\n activeStrict: {\n type: Boolean,\n default: false,\n },\n ignoreQueryParams: {\n type: Boolean,\n default: true,\n },\n target: {\n type: String,\n default: undefined,\n },\n },\n setup(props, { slots, attrs }) {\n const router = useRouter();\n\n const isActive = useIsActiveRoute(\n props.routeName,\n props.routeParams,\n props.activeStrict,\n props.ignoreQueryParams,\n );\n\n const href = computed(() =>\n buildHref(router, props.routeName, props.routeParams),\n );\n\n const finalClassName = computed(() =>\n buildActiveClassName(isActive.value, props.activeClassName, props.class),\n );\n\n const handleClick = (evt: MouseEvent) => {\n if (attrs.onClick && typeof attrs.onClick === \"function\") {\n (attrs.onClick as (evt: MouseEvent) => void)(evt);\n\n if (evt.defaultPrevented) {\n return;\n }\n }\n\n if (!shouldNavigate(evt) || props.target === \"_blank\") {\n return;\n }\n\n evt.preventDefault();\n router\n .navigate(props.routeName, props.routeParams, props.routeOptions)\n .catch(() => {});\n };\n\n return () =>\n h(\n \"a\",\n {\n ...attrs,\n href: href.value,\n class: finalClassName.value,\n target: props.target,\n onClick: handleClick,\n },\n slots.default?.(),\n );\n },\n});\n","import { shouldNavigate, applyLinkA11y } from \"dom-utils\";\n\nimport type { Router, NavigationOptions, Params } from \"@real-router/core\";\nimport type { Directive } from \"vue\";\n\nexport interface LinkDirectiveValue {\n name: string;\n params?: Params;\n options?: NavigationOptions;\n}\n\nlet _router: Router | null = null;\n\nexport function setDirectiveRouter(router: Router): void {\n _router = router;\n}\n\nexport function getDirectiveRouter(): Router {\n if (!_router) {\n /* v8 ignore next 3 -- @preserve Defensive: router always initialized by RouterProvider */\n throw new Error(\n \"v-link directive requires a RouterProvider ancestor. Make sure RouterProvider is mounted.\",\n );\n }\n\n return _router;\n}\n\nconst clickHandlers = new WeakMap<HTMLElement, (evt: MouseEvent) => void>();\nconst keydownHandlers = new WeakMap<\n HTMLElement,\n (evt: KeyboardEvent) => void\n>();\n\nfunction createClickHandler(\n router: Router,\n value: LinkDirectiveValue,\n): (evt: MouseEvent) => void {\n return (evt: MouseEvent) => {\n if (!shouldNavigate(evt)) {\n return;\n }\n\n evt.preventDefault();\n router\n .navigate(value.name, value.params ?? {}, value.options ?? {})\n .catch(() => {});\n };\n}\n\nfunction createKeydownHandler(\n router: Router,\n value: LinkDirectiveValue,\n el: HTMLElement,\n): (evt: KeyboardEvent) => void {\n return (evt: KeyboardEvent) => {\n if (evt.key === \"Enter\" && !(el instanceof HTMLButtonElement)) {\n router\n .navigate(value.name, value.params ?? {}, value.options ?? {})\n .catch(() => {});\n }\n };\n}\n\nfunction attachHandlers(\n el: HTMLElement,\n router: Router,\n value: LinkDirectiveValue,\n): void {\n const handleClick = createClickHandler(router, value);\n const handleKeyDown = createKeydownHandler(router, value, el);\n\n el.addEventListener(\"click\", handleClick);\n el.addEventListener(\"keydown\", handleKeyDown);\n\n clickHandlers.set(el, handleClick);\n keydownHandlers.set(el, handleKeyDown);\n}\n\nfunction detachHandlers(el: HTMLElement): void {\n const clickHandler = clickHandlers.get(el);\n const keydownHandler = keydownHandlers.get(el);\n\n if (clickHandler) {\n el.removeEventListener(\"click\", clickHandler);\n }\n if (keydownHandler) {\n el.removeEventListener(\"keydown\", keydownHandler);\n }\n\n clickHandlers.delete(el);\n keydownHandlers.delete(el);\n}\n\nexport const vLink: Directive<HTMLElement, LinkDirectiveValue> = {\n mounted(el, binding) {\n const router = getDirectiveRouter();\n\n applyLinkA11y(el);\n\n el.style.cursor = \"pointer\";\n\n attachHandlers(el, router, binding.value);\n },\n\n updated(el, binding) {\n const router = getDirectiveRouter();\n\n detachHandlers(el);\n attachHandlers(el, router, binding.value);\n },\n\n beforeUnmount(el) {\n detachHandlers(el);\n },\n};\n","import { inject } from \"vue\";\n\nimport { NavigatorKey } from \"../context\";\n\nimport type { Navigator } from \"@real-router/core\";\n\nexport const useNavigator = (): Navigator => {\n const navigator = inject(NavigatorKey);\n\n if (!navigator) {\n throw new Error(\"useNavigator must be used within a RouterProvider\");\n }\n\n return navigator;\n};\n","import { getPluginApi } from \"@real-router/core/api\";\nimport { getRouteUtils } from \"@real-router/route-utils\";\n\nimport { useRouter } from \"./useRouter\";\n\nimport type { RouteUtils } from \"@real-router/route-utils\";\n\nexport const useRouteUtils = (): RouteUtils => {\n const router = useRouter();\n\n return getRouteUtils(getPluginApi(router).getTree());\n};\n","import { inject } from \"vue\";\n\nimport { RouteKey } from \"../context\";\n\nimport type { RouteContext } from \"../types\";\n\nexport const useRoute = (): RouteContext => {\n const routeContext = inject(RouteKey);\n\n if (!routeContext) {\n throw new Error(\"useRoute must be used within a RouterProvider\");\n }\n\n return routeContext;\n};\n","import { createTransitionSource } from \"@real-router/sources\";\n\nimport { useRefFromSource } from \"../useRefFromSource\";\nimport { useRouter } from \"./useRouter\";\n\nimport type { RouterTransitionSnapshot } from \"@real-router/sources\";\nimport type { ShallowRef } from \"vue\";\n\nexport function useRouterTransition(): ShallowRef<RouterTransitionSnapshot> {\n const router = useRouter();\n\n const source = createTransitionSource(router);\n\n return useRefFromSource(source);\n}\n","import { getNavigator } from \"@real-router/core\";\nimport { createRouteSource } from \"@real-router/sources\";\nimport { shallowRef } from \"vue\";\n\nimport { NavigatorKey, RouteKey, RouterKey } from \"./context\";\nimport { setDirectiveRouter } from \"./directives/vLink\";\n\nimport type { Router } from \"@real-router/core\";\nimport type { Plugin } from \"vue\";\n\n// eslint-disable-next-line sonarjs/function-return-type -- Plugin<[]> return type is consistent\nexport function createRouterPlugin(router: Router): Plugin<[]> {\n return {\n install(app): void {\n const navigator = getNavigator(router);\n\n setDirectiveRouter(router);\n\n const source = createRouteSource(router);\n const initialSnapshot = source.getSnapshot();\n\n const route = shallowRef(initialSnapshot.route);\n const previousRoute = shallowRef(initialSnapshot.previousRoute);\n\n source.subscribe(() => {\n const snapshot = source.getSnapshot();\n\n route.value = snapshot.route;\n previousRoute.value = snapshot.previousRoute;\n });\n\n app.provide(RouterKey, router);\n app.provide(NavigatorKey, navigator);\n app.provide(RouteKey, { navigator, route, previousRoute });\n },\n };\n}\n","import { getNavigator } from \"@real-router/core\";\nimport { createRouteSource } from \"@real-router/sources\";\nimport { createRouteAnnouncer } from \"dom-utils\";\nimport {\n defineComponent,\n onMounted,\n onUnmounted,\n provide,\n shallowRef,\n onScopeDispose,\n} from \"vue\";\n\nimport { NavigatorKey, RouteKey, RouterKey } from \"./context\";\nimport { setDirectiveRouter } from \"./directives/vLink\";\n\nimport type { Router } from \"@real-router/core\";\nimport type { PropType } from \"vue\";\n\nexport const RouterProvider = defineComponent({\n name: \"RouterProvider\",\n props: {\n router: {\n type: Object as PropType<Router>,\n required: true,\n },\n announceNavigation: {\n type: Boolean,\n default: false,\n },\n },\n setup(props, { slots }) {\n onMounted(() => {\n if (!props.announceNavigation) {\n return;\n }\n\n const announcer = createRouteAnnouncer(props.router);\n\n onUnmounted(() => {\n announcer.destroy();\n });\n });\n\n const navigator = getNavigator(props.router);\n\n setDirectiveRouter(props.router);\n\n const source = createRouteSource(props.router);\n const initialSnapshot = source.getSnapshot();\n\n const route = shallowRef(initialSnapshot.route);\n const previousRoute = shallowRef(initialSnapshot.previousRoute);\n\n const unsub = source.subscribe(() => {\n const snapshot = source.getSnapshot();\n\n route.value = snapshot.route;\n previousRoute.value = snapshot.previousRoute;\n });\n\n onScopeDispose(unsub);\n\n provide(RouterKey, props.router);\n provide(NavigatorKey, navigator);\n provide(RouteKey, { navigator, route, previousRoute });\n\n return () => slots.default?.();\n },\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/components/RouteView/components.ts","../../src/components/RouteView/helpers.ts","../../src/useRefFromSource.ts","../../src/context.ts","../../src/composables/useRouter.ts","../../src/composables/useRouteNode.ts","../../src/components/RouteView/RouteView.ts","../../src/composables/useIsActiveRoute.ts","../../src/constants.ts","../../src/components/Link.ts","../../src/composables/useRouterError.ts","../../src/components/RouterErrorBoundary.ts","../../src/directives/vLink.ts","../../src/composables/useNavigator.ts","../../src/composables/useRouteUtils.ts","../../src/composables/useRoute.ts","../../src/composables/useRouterTransition.ts","../../src/createRouterPlugin.ts","../../src/RouterProvider.ts"],"names":["defineComponent","startsWithSegment","isVNode","Fragment","UNKNOWN_ROUTE","ref","shallowRef","onScopeDispose","inject","createRouteNodeSource","getNavigator","watch","cache","markRaw","Suspense","h","KeepAlive","createActiveRouteSource","computed","buildHref","buildActiveClassName","shouldNavigate","createErrorSource","applyLinkA11y","getRouteUtils","getPluginApi","createTransitionSource","createRouteSource","onMounted","createRouteAnnouncer","onUnmounted","provide"],"mappings":"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","file":"index.js","sourcesContent":["import { defineComponent } from \"vue\";\n\nimport type { PropType, VNode } from \"vue\";\n\nfunction renderNull() {\n return null;\n}\n\nexport const Match = defineComponent({\n name: \"RouteView.Match\",\n props: {\n segment: {\n type: String as PropType<string>,\n required: true,\n },\n exact: {\n type: Boolean,\n default: false,\n },\n fallback: {\n type: [Object, Function] as PropType<VNode | (() => VNode)>,\n default: undefined,\n },\n },\n render: renderNull,\n});\n\nexport const NotFound = defineComponent({\n name: \"RouteView.NotFound\",\n render: renderNull,\n});\n","import { UNKNOWN_ROUTE } from \"@real-router/core\";\nimport { startsWithSegment } from \"@real-router/route-utils\";\nimport { Fragment, isVNode } from \"vue\";\n\nimport { Match, NotFound } from \"./components\";\n\nimport type { VNode } from \"vue\";\n\ntype FallbackType = VNode | (() => VNode) | undefined;\n\nfunction isSegmentMatch(\n routeName: string,\n fullSegmentName: string,\n exact: boolean,\n): boolean {\n if (exact) {\n return routeName === fullSegmentName;\n }\n\n return startsWithSegment(routeName, fullSegmentName);\n}\n\nfunction normalizeChildren(children: unknown): VNode[] {\n if (Array.isArray(children)) {\n const result: VNode[] = [];\n\n for (const child of children) {\n if (Array.isArray(child)) {\n result.push(...normalizeChildren(child));\n } else if (isVNode(child)) {\n result.push(child);\n }\n }\n\n return result;\n }\n\n if (isVNode(children)) {\n return [children];\n }\n\n return [];\n}\n\nexport function collectElements(children: unknown, result: VNode[]): void {\n const vnodes = normalizeChildren(children);\n\n for (const child of vnodes) {\n if (child.type === Match || child.type === NotFound) {\n result.push(child);\n } else if (child.type === Fragment) {\n collectElements(child.children, result);\n }\n }\n}\n\nexport function buildRenderList(\n elements: VNode[],\n routeName: string,\n nodeName: string,\n): {\n rendered: VNode[];\n activeMatchFound: boolean;\n fallback?: FallbackType;\n} {\n let notFoundChildren: unknown = null;\n let activeMatchFound = false;\n let fallback: FallbackType = undefined;\n const rendered: VNode[] = [];\n\n for (const child of elements) {\n if (child.type === NotFound) {\n notFoundChildren = child.children;\n continue;\n }\n\n const props = child.props as {\n segment: string;\n exact?: boolean;\n fallback?: FallbackType;\n } | null;\n const segment = props?.segment ?? \"\";\n const exact = props?.exact ?? false;\n const fullSegmentName = nodeName ? `${nodeName}.${segment}` : segment;\n const isActive =\n !activeMatchFound && isSegmentMatch(routeName, fullSegmentName, exact);\n\n if (isActive) {\n activeMatchFound = true;\n fallback = props?.fallback;\n rendered.push(child);\n }\n }\n\n if (\n !activeMatchFound &&\n routeName === UNKNOWN_ROUTE &&\n notFoundChildren !== null\n ) {\n const nfElements = elements.filter((element) => element.type === NotFound);\n /* v8 ignore next 3 */\n const lastNf = nfElements.at(-1);\n\n if (lastNf) {\n rendered.push(lastNf);\n }\n }\n\n return { rendered, activeMatchFound, fallback };\n}\n","import { shallowRef, onScopeDispose } from \"vue\";\n\nimport type { RouterSource } from \"@real-router/sources\";\nimport type { ShallowRef } from \"vue\";\n\nexport function useRefFromSource<T>(source: RouterSource<T>): ShallowRef<T> {\n const ref = shallowRef(source.getSnapshot());\n\n const unsub = source.subscribe(() => {\n ref.value = source.getSnapshot();\n });\n\n onScopeDispose(unsub);\n\n return ref;\n}\n","import type { RouteContext as RouteContextType } from \"./types\";\nimport type { Router, Navigator } from \"@real-router/core\";\nimport type { InjectionKey } from \"vue\";\n\nexport const RouterKey: InjectionKey<Router> = Symbol(\"RouterKey\");\n\nexport const NavigatorKey: InjectionKey<Navigator> = Symbol(\"NavigatorKey\");\n\nexport const RouteKey: InjectionKey<RouteContextType> = Symbol(\"RouteKey\");\n","import { inject } from \"vue\";\n\nimport { RouterKey } from \"../context\";\n\nimport type { Router } from \"@real-router/core\";\n\nexport const useRouter = (): Router => {\n const router = inject(RouterKey);\n\n if (!router) {\n throw new Error(\"useRouter must be used within a RouterProvider\");\n }\n\n return router;\n};\n","import { getNavigator } from \"@real-router/core\";\nimport { createRouteNodeSource } from \"@real-router/sources\";\nimport { shallowRef, watch } from \"vue\";\n\nimport { useRefFromSource } from \"../useRefFromSource\";\nimport { useRouter } from \"./useRouter\";\n\nimport type { RouteContext } from \"../types\";\nimport type { State } from \"@real-router/core\";\n\nexport function useRouteNode(nodeName: string): RouteContext {\n const router = useRouter();\n\n const source = createRouteNodeSource(router, nodeName);\n const snapshot = useRefFromSource(source);\n\n const navigator = getNavigator(router);\n\n const route = shallowRef<State | undefined>(snapshot.value.route);\n const previousRoute = shallowRef<State | undefined>(\n snapshot.value.previousRoute,\n );\n\n watch(\n snapshot,\n (newSnapshot) => {\n route.value = newSnapshot.route;\n previousRoute.value = newSnapshot.previousRoute;\n },\n { flush: \"sync\" },\n );\n\n return {\n navigator,\n route,\n previousRoute,\n };\n}\n","import {\n Fragment,\n defineComponent,\n h,\n KeepAlive,\n markRaw,\n Suspense,\n} from \"vue\";\n\nimport { Match, NotFound } from \"./components\";\nimport { buildRenderList, collectElements } from \"./helpers\";\nimport { useRouteNode } from \"../../composables/useRouteNode\";\n\nimport type { Component, VNode } from \"vue\";\n\ntype SlotChildren = Record<string, (() => VNode[]) | undefined> | null;\n\nfunction getSlotContent(vnode: VNode): VNode[] | null {\n const slots = vnode.children as SlotChildren;\n\n return slots?.default?.() ?? null;\n}\n\nfunction getOrCreateWrapper(\n cache: Map<string, Component>,\n segment: string,\n): Component {\n const existing = cache.get(segment);\n\n if (existing) {\n return existing;\n }\n\n const wrapper = markRaw(\n defineComponent({\n name: `KeepAlive-${segment}`,\n setup(_wrapperProps, wrapperCtx) {\n return () => wrapperCtx.slots.default?.();\n },\n }),\n );\n\n cache.set(segment, wrapper);\n\n return wrapper;\n}\n\nfunction wrapWithSuspense(content: VNode, fallback: unknown): VNode {\n if (fallback === undefined) {\n return content;\n }\n\n const fallbackContent =\n typeof fallback === \"function\" ? (fallback as () => VNode)() : fallback;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment\n const suspenseComponent = Suspense as any;\n\n return h(\n suspenseComponent,\n {},\n {\n default: () => content,\n fallback: () => fallbackContent,\n },\n );\n}\n\nconst RouteViewComponent = defineComponent({\n name: \"RouteView\",\n props: {\n nodeName: {\n type: String,\n required: true,\n },\n keepAlive: {\n type: Boolean,\n default: false,\n },\n },\n setup(props, { slots }) {\n const routeContext = useRouteNode(props.nodeName);\n\n const wrapperCache = new Map<string, Component>();\n\n return (): VNode | null => {\n const route = routeContext.route.value;\n\n if (!route) {\n return null;\n }\n\n const elements: VNode[] = [];\n\n collectElements(slots.default?.(), elements);\n\n const { rendered, fallback } = buildRenderList(\n elements,\n route.name,\n props.nodeName,\n );\n\n if (rendered.length === 0) {\n return null;\n }\n\n const activeChild = rendered[0];\n\n if (!props.keepAlive) {\n if (activeChild.type === Match || activeChild.type === NotFound) {\n const content = getSlotContent(activeChild);\n\n if (!content) {\n return null;\n }\n\n const fragment = h(Fragment, content);\n\n return wrapWithSuspense(fragment, fallback);\n }\n\n /* v8 ignore start */\n return null;\n /* v8 ignore stop */\n }\n\n const activeProps = activeChild.props as {\n segment?: string;\n } | null;\n const segment = activeProps?.segment ?? \"__not-found__\";\n\n const WrapperComponent = getOrCreateWrapper(wrapperCache, segment);\n /* v8 ignore next */\n const slotContent = getSlotContent(activeChild) ?? [];\n\n const keepAliveContent = h(KeepAlive, null, {\n default: () =>\n h(WrapperComponent, { key: segment }, { default: () => slotContent }),\n });\n\n return wrapWithSuspense(keepAliveContent, fallback);\n };\n },\n});\n\nexport const RouteView = Object.assign(RouteViewComponent, { Match, NotFound });\n\nexport type {\n RouteViewProps,\n MatchProps as RouteViewMatchProps,\n NotFoundProps as RouteViewNotFoundProps,\n} from \"./types\";\n","import { createActiveRouteSource } from \"@real-router/sources\";\n\nimport { useRefFromSource } from \"../useRefFromSource\";\nimport { useRouter } from \"./useRouter\";\n\nimport type { Params } from \"@real-router/core\";\nimport type { ShallowRef } from \"vue\";\n\nexport function useIsActiveRoute(\n routeName: string,\n params?: Params,\n strict = false,\n ignoreQueryParams = true,\n): ShallowRef<boolean> {\n const router = useRouter();\n\n const source = createActiveRouteSource(router, routeName, params, {\n strict,\n ignoreQueryParams,\n });\n\n return useRefFromSource(source);\n}\n","/**\n * Stable empty object for default params\n */\nexport const EMPTY_PARAMS = Object.freeze({});\n\n/**\n * Stable empty options object\n */\nexport const EMPTY_OPTIONS = Object.freeze({});\n","import { shouldNavigate, buildHref, buildActiveClassName } from \"dom-utils\";\nimport { defineComponent, h, computed } from \"vue\";\n\nimport { useIsActiveRoute } from \"../composables/useIsActiveRoute\";\nimport { useRouter } from \"../composables/useRouter\";\nimport { EMPTY_PARAMS, EMPTY_OPTIONS } from \"../constants\";\n\nimport type { Params, NavigationOptions } from \"@real-router/core\";\nimport type { PropType } from \"vue\";\n\nexport const Link = defineComponent({\n name: \"Link\",\n props: {\n routeName: {\n type: String,\n required: true,\n },\n routeParams: {\n type: Object as PropType<Params>,\n default: () => EMPTY_PARAMS,\n },\n routeOptions: {\n type: Object as PropType<NavigationOptions>,\n default: () => EMPTY_OPTIONS,\n },\n class: {\n type: String,\n default: undefined,\n },\n activeClassName: {\n type: String,\n default: \"active\",\n },\n activeStrict: {\n type: Boolean,\n default: false,\n },\n ignoreQueryParams: {\n type: Boolean,\n default: true,\n },\n target: {\n type: String,\n default: undefined,\n },\n },\n setup(props, { slots, attrs }) {\n const router = useRouter();\n\n const isActive = useIsActiveRoute(\n props.routeName,\n props.routeParams,\n props.activeStrict,\n props.ignoreQueryParams,\n );\n\n const href = computed(() =>\n buildHref(router, props.routeName, props.routeParams),\n );\n\n const finalClassName = computed(() =>\n buildActiveClassName(isActive.value, props.activeClassName, props.class),\n );\n\n const handleClick = (evt: MouseEvent) => {\n if (attrs.onClick && typeof attrs.onClick === \"function\") {\n (attrs.onClick as (evt: MouseEvent) => void)(evt);\n\n if (evt.defaultPrevented) {\n return;\n }\n }\n\n if (!shouldNavigate(evt) || props.target === \"_blank\") {\n return;\n }\n\n evt.preventDefault();\n router\n .navigate(props.routeName, props.routeParams, props.routeOptions)\n .catch(() => {});\n };\n\n return () =>\n h(\n \"a\",\n {\n ...attrs,\n href: href.value,\n class: finalClassName.value,\n target: props.target,\n onClick: handleClick,\n },\n slots.default?.(),\n );\n },\n});\n","import { createErrorSource } from \"@real-router/sources\";\n\nimport { useRefFromSource } from \"../useRefFromSource\";\nimport { useRouter } from \"./useRouter\";\n\nimport type { Router } from \"@real-router/core\";\nimport type { RouterErrorSnapshot, RouterSource } from \"@real-router/sources\";\nimport type { ShallowRef } from \"vue\";\n\nconst cache = new WeakMap<Router, RouterSource<RouterErrorSnapshot>>();\n\nexport function useRouterError(): ShallowRef<RouterErrorSnapshot> {\n const router = useRouter();\n\n let source = cache.get(router);\n\n if (!source) {\n source = createErrorSource(router);\n cache.set(router, source);\n }\n\n return useRefFromSource(source);\n}\n","import { defineComponent, h, ref, watch, computed, Fragment } from \"vue\";\n\nimport { useRouterError } from \"../composables/useRouterError\";\n\nimport type { RouterError, State } from \"@real-router/core\";\nimport type { VNode, PropType } from \"vue\";\n\nexport const RouterErrorBoundary = defineComponent({\n name: \"RouterErrorBoundary\",\n props: {\n fallback: {\n type: Function as PropType<\n (error: RouterError, resetError: () => void) => VNode\n >,\n required: true,\n },\n onError: {\n type: Function as PropType<\n (\n error: RouterError,\n toRoute: State | null,\n fromRoute: State | null,\n ) => void\n >,\n default: undefined,\n },\n },\n setup(props, { slots }) {\n const snapshot = useRouterError();\n const dismissedVersion = ref(-1);\n\n watch(\n () => snapshot.value.version,\n () => {\n if (snapshot.value.error) {\n props.onError?.(\n snapshot.value.error,\n snapshot.value.toRoute,\n snapshot.value.fromRoute,\n );\n }\n },\n { immediate: true },\n );\n\n const visibleError = computed(() =>\n snapshot.value.version > dismissedVersion.value\n ? snapshot.value.error\n : null,\n );\n\n const resetError = () => {\n dismissedVersion.value = snapshot.value.version;\n };\n\n return () => {\n const children = slots.default?.() ?? [];\n const errorVNode = visibleError.value\n ? props.fallback(visibleError.value, resetError)\n : null;\n\n return h(Fragment, null, [...children, errorVNode]);\n };\n },\n});\n\nexport type RouterErrorBoundaryProps = InstanceType<\n typeof RouterErrorBoundary\n>[\"$props\"];\n","import { shouldNavigate, applyLinkA11y } from \"dom-utils\";\n\nimport type { Router, NavigationOptions, Params } from \"@real-router/core\";\nimport type { Directive } from \"vue\";\n\nexport interface LinkDirectiveValue {\n name: string;\n params?: Params;\n options?: NavigationOptions;\n}\n\nlet _router: Router | null = null;\n\nexport function setDirectiveRouter(router: Router): void {\n _router = router;\n}\n\nexport function getDirectiveRouter(): Router {\n if (!_router) {\n /* v8 ignore next 3 -- @preserve Defensive: router always initialized by RouterProvider */\n throw new Error(\n \"v-link directive requires a RouterProvider ancestor. Make sure RouterProvider is mounted.\",\n );\n }\n\n return _router;\n}\n\nconst clickHandlers = new WeakMap<HTMLElement, (evt: MouseEvent) => void>();\nconst keydownHandlers = new WeakMap<\n HTMLElement,\n (evt: KeyboardEvent) => void\n>();\n\nfunction createClickHandler(\n router: Router,\n value: LinkDirectiveValue,\n): (evt: MouseEvent) => void {\n return (evt: MouseEvent) => {\n if (!shouldNavigate(evt)) {\n return;\n }\n\n evt.preventDefault();\n router\n .navigate(value.name, value.params ?? {}, value.options ?? {})\n .catch(() => {});\n };\n}\n\nfunction createKeydownHandler(\n router: Router,\n value: LinkDirectiveValue,\n element: HTMLElement,\n): (evt: KeyboardEvent) => void {\n return (evt: KeyboardEvent) => {\n if (evt.key === \"Enter\" && !(element instanceof HTMLButtonElement)) {\n router\n .navigate(value.name, value.params ?? {}, value.options ?? {})\n .catch(() => {});\n }\n };\n}\n\nfunction attachHandlers(\n element: HTMLElement,\n router: Router,\n value: LinkDirectiveValue,\n): void {\n const handleClick = createClickHandler(router, value);\n const handleKeyDown = createKeydownHandler(router, value, element);\n\n element.addEventListener(\"click\", handleClick);\n element.addEventListener(\"keydown\", handleKeyDown);\n\n clickHandlers.set(element, handleClick);\n keydownHandlers.set(element, handleKeyDown);\n}\n\nfunction detachHandlers(element: HTMLElement): void {\n const clickHandler = clickHandlers.get(element);\n const keydownHandler = keydownHandlers.get(element);\n\n if (clickHandler) {\n element.removeEventListener(\"click\", clickHandler);\n }\n if (keydownHandler) {\n element.removeEventListener(\"keydown\", keydownHandler);\n }\n\n clickHandlers.delete(element);\n keydownHandlers.delete(element);\n}\n\nexport const vLink: Directive<HTMLElement, LinkDirectiveValue> = {\n mounted(element, binding) {\n const router = getDirectiveRouter();\n\n applyLinkA11y(element);\n\n element.style.cursor = \"pointer\";\n\n attachHandlers(element, router, binding.value);\n },\n\n updated(element, binding) {\n const router = getDirectiveRouter();\n\n detachHandlers(element);\n attachHandlers(element, router, binding.value);\n },\n\n beforeUnmount(element) {\n detachHandlers(element);\n },\n};\n","import { inject } from \"vue\";\n\nimport { NavigatorKey } from \"../context\";\n\nimport type { Navigator } from \"@real-router/core\";\n\nexport const useNavigator = (): Navigator => {\n const navigator = inject(NavigatorKey);\n\n if (!navigator) {\n throw new Error(\"useNavigator must be used within a RouterProvider\");\n }\n\n return navigator;\n};\n","import { getPluginApi } from \"@real-router/core/api\";\nimport { getRouteUtils } from \"@real-router/route-utils\";\n\nimport { useRouter } from \"./useRouter\";\n\nimport type { RouteUtils } from \"@real-router/route-utils\";\n\nexport const useRouteUtils = (): RouteUtils => {\n const router = useRouter();\n\n return getRouteUtils(getPluginApi(router).getTree());\n};\n","import { inject } from \"vue\";\n\nimport { RouteKey } from \"../context\";\n\nimport type { RouteContext } from \"../types\";\n\nexport const useRoute = (): RouteContext => {\n const routeContext = inject(RouteKey);\n\n if (!routeContext) {\n throw new Error(\"useRoute must be used within a RouterProvider\");\n }\n\n return routeContext;\n};\n","import { createTransitionSource } from \"@real-router/sources\";\n\nimport { useRefFromSource } from \"../useRefFromSource\";\nimport { useRouter } from \"./useRouter\";\n\nimport type { RouterTransitionSnapshot } from \"@real-router/sources\";\nimport type { ShallowRef } from \"vue\";\n\nexport function useRouterTransition(): ShallowRef<RouterTransitionSnapshot> {\n const router = useRouter();\n\n const source = createTransitionSource(router);\n\n return useRefFromSource(source);\n}\n","import { getNavigator } from \"@real-router/core\";\nimport { createRouteSource } from \"@real-router/sources\";\nimport { shallowRef } from \"vue\";\n\nimport { NavigatorKey, RouteKey, RouterKey } from \"./context\";\nimport { setDirectiveRouter } from \"./directives/vLink\";\n\nimport type { Router } from \"@real-router/core\";\nimport type { Plugin } from \"vue\";\n\nexport function createRouterPlugin(router: Router): Plugin<[]> {\n return {\n install(app): void {\n const navigator = getNavigator(router);\n\n setDirectiveRouter(router);\n\n const source = createRouteSource(router);\n const initialSnapshot = source.getSnapshot();\n\n const route = shallowRef(initialSnapshot.route);\n const previousRoute = shallowRef(initialSnapshot.previousRoute);\n\n source.subscribe(() => {\n const snapshot = source.getSnapshot();\n\n route.value = snapshot.route;\n previousRoute.value = snapshot.previousRoute;\n });\n\n app.provide(RouterKey, router);\n app.provide(NavigatorKey, navigator);\n app.provide(RouteKey, { navigator, route, previousRoute });\n },\n };\n}\n","import { getNavigator } from \"@real-router/core\";\nimport { createRouteSource } from \"@real-router/sources\";\nimport { createRouteAnnouncer } from \"dom-utils\";\nimport {\n defineComponent,\n onMounted,\n onUnmounted,\n provide,\n shallowRef,\n onScopeDispose,\n} from \"vue\";\n\nimport { NavigatorKey, RouteKey, RouterKey } from \"./context\";\nimport { setDirectiveRouter } from \"./directives/vLink\";\n\nimport type { Router } from \"@real-router/core\";\nimport type { PropType } from \"vue\";\n\nexport const RouterProvider = defineComponent({\n name: \"RouterProvider\",\n props: {\n router: {\n type: Object as PropType<Router>,\n required: true,\n },\n announceNavigation: {\n type: Boolean,\n default: false,\n },\n },\n setup(props, { slots }) {\n onMounted(() => {\n if (!props.announceNavigation) {\n return;\n }\n\n const announcer = createRouteAnnouncer(props.router);\n\n onUnmounted(() => {\n announcer.destroy();\n });\n });\n\n const navigator = getNavigator(props.router);\n\n setDirectiveRouter(props.router);\n\n const source = createRouteSource(props.router);\n const initialSnapshot = source.getSnapshot();\n\n const route = shallowRef(initialSnapshot.route);\n const previousRoute = shallowRef(initialSnapshot.previousRoute);\n\n const unsub = source.subscribe(() => {\n const snapshot = source.getSnapshot();\n\n route.value = snapshot.route;\n previousRoute.value = snapshot.previousRoute;\n });\n\n onScopeDispose(unsub);\n\n provide(RouterKey, props.router);\n provide(NavigatorKey, navigator);\n provide(RouteKey, { navigator, route, previousRoute });\n\n return () => slots.default?.();\n },\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"inputs":{"../../node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_tsx@4.21.0_typescript@5.9.3_yaml@2.8.2/node_modules/tsup/assets/cjs_shims.js":{"bytes":569,"imports":[],"format":"esm"},"src/components/RouteView/components.ts":{"bytes":597,"imports":[{"path":"vue","kind":"import-statement","external":true},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_tsx@4.21.0_typescript@5.9.3_yaml@2.8.2/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/components/RouteView/helpers.ts":{"bytes":2607,"imports":[{"path":"@real-router/core","kind":"import-statement","external":true},{"path":"@real-router/route-utils","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"src/components/RouteView/components.ts","kind":"import-statement","original":"./components"},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_tsx@4.21.0_typescript@5.9.3_yaml@2.8.2/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/useRefFromSource.ts":{"bytes":404,"imports":[{"path":"vue","kind":"import-statement","external":true},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_tsx@4.21.0_typescript@5.9.3_yaml@2.8.2/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/context.ts":{"bytes":390,"imports":[{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_tsx@4.21.0_typescript@5.9.3_yaml@2.8.2/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/composables/useRouter.ts":{"bytes":313,"imports":[{"path":"vue","kind":"import-statement","external":true},{"path":"src/context.ts","kind":"import-statement","original":"../context"},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_tsx@4.21.0_typescript@5.9.3_yaml@2.8.2/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/composables/useRouteNode.ts":{"bytes":991,"imports":[{"path":"@real-router/core","kind":"import-statement","external":true},{"path":"@real-router/sources","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"src/useRefFromSource.ts","kind":"import-statement","original":"../useRefFromSource"},{"path":"src/composables/useRouter.ts","kind":"import-statement","original":"./useRouter"},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_tsx@4.21.0_typescript@5.9.3_yaml@2.8.2/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/components/RouteView/RouteView.ts":{"bytes":3491,"imports":[{"path":"vue","kind":"import-statement","external":true},{"path":"src/components/RouteView/components.ts","kind":"import-statement","original":"./components"},{"path":"src/components/RouteView/helpers.ts","kind":"import-statement","original":"./helpers"},{"path":"src/composables/useRouteNode.ts","kind":"import-statement","original":"../../composables/useRouteNode"},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_tsx@4.21.0_typescript@5.9.3_yaml@2.8.2/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/components/RouteView/index.ts":{"bytes":145,"imports":[{"path":"src/components/RouteView/RouteView.ts","kind":"import-statement","original":"./RouteView"},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_tsx@4.21.0_typescript@5.9.3_yaml@2.8.2/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/composables/useIsActiveRoute.ts":{"bytes":577,"imports":[{"path":"@real-router/sources","kind":"import-statement","external":true},{"path":"src/useRefFromSource.ts","kind":"import-statement","original":"../useRefFromSource"},{"path":"src/composables/useRouter.ts","kind":"import-statement","original":"./useRouter"},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_tsx@4.21.0_typescript@5.9.3_yaml@2.8.2/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/constants.ts":{"bytes":185,"imports":[{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_tsx@4.21.0_typescript@5.9.3_yaml@2.8.2/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/components/Link.ts":{"bytes":2312,"imports":[{"path":"dom-utils","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"src/composables/useIsActiveRoute.ts","kind":"import-statement","original":"../composables/useIsActiveRoute"},{"path":"src/composables/useRouter.ts","kind":"import-statement","original":"../composables/useRouter"},{"path":"src/constants.ts","kind":"import-statement","original":"../constants"},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_tsx@4.21.0_typescript@5.9.3_yaml@2.8.2/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/directives/vLink.ts":{"bytes":2781,"imports":[{"path":"dom-utils","kind":"import-statement","external":true},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_tsx@4.21.0_typescript@5.9.3_yaml@2.8.2/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/composables/useNavigator.ts":{"bytes":340,"imports":[{"path":"vue","kind":"import-statement","external":true},{"path":"src/context.ts","kind":"import-statement","original":"../context"},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_tsx@4.21.0_typescript@5.9.3_yaml@2.8.2/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/composables/useRouteUtils.ts":{"bytes":355,"imports":[{"path":"@real-router/core/api","kind":"import-statement","external":true},{"path":"@real-router/route-utils","kind":"import-statement","external":true},{"path":"src/composables/useRouter.ts","kind":"import-statement","original":"./useRouter"},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_tsx@4.21.0_typescript@5.9.3_yaml@2.8.2/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/composables/useRoute.ts":{"bytes":330,"imports":[{"path":"vue","kind":"import-statement","external":true},{"path":"src/context.ts","kind":"import-statement","original":"../context"},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_tsx@4.21.0_typescript@5.9.3_yaml@2.8.2/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/composables/useRouterTransition.ts":{"bytes":468,"imports":[{"path":"@real-router/sources","kind":"import-statement","external":true},{"path":"src/useRefFromSource.ts","kind":"import-statement","original":"../useRefFromSource"},{"path":"src/composables/useRouter.ts","kind":"import-statement","original":"./useRouter"},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_tsx@4.21.0_typescript@5.9.3_yaml@2.8.2/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/createRouterPlugin.ts":{"bytes":1201,"imports":[{"path":"@real-router/core","kind":"import-statement","external":true},{"path":"@real-router/sources","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"src/context.ts","kind":"import-statement","original":"./context"},{"path":"src/directives/vLink.ts","kind":"import-statement","original":"./directives/vLink"},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_tsx@4.21.0_typescript@5.9.3_yaml@2.8.2/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/RouterProvider.ts":{"bytes":1690,"imports":[{"path":"@real-router/core","kind":"import-statement","external":true},{"path":"@real-router/sources","kind":"import-statement","external":true},{"path":"dom-utils","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"src/context.ts","kind":"import-statement","original":"./context"},{"path":"src/directives/vLink.ts","kind":"import-statement","original":"./directives/vLink"},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_tsx@4.21.0_typescript@5.9.3_yaml@2.8.2/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/index.ts":{"bytes":1096,"imports":[{"path":"src/components/RouteView/index.ts","kind":"import-statement","original":"./components/RouteView"},{"path":"src/components/Link.ts","kind":"import-statement","original":"./components/Link"},{"path":"src/directives/vLink.ts","kind":"import-statement","original":"./directives/vLink"},{"path":"src/composables/useRouter.ts","kind":"import-statement","original":"./composables/useRouter"},{"path":"src/composables/useNavigator.ts","kind":"import-statement","original":"./composables/useNavigator"},{"path":"src/composables/useRouteUtils.ts","kind":"import-statement","original":"./composables/useRouteUtils"},{"path":"src/composables/useRoute.ts","kind":"import-statement","original":"./composables/useRoute"},{"path":"src/composables/useRouteNode.ts","kind":"import-statement","original":"./composables/useRouteNode"},{"path":"src/composables/useRouterTransition.ts","kind":"import-statement","original":"./composables/useRouterTransition"},{"path":"src/createRouterPlugin.ts","kind":"import-statement","original":"./createRouterPlugin"},{"path":"src/RouterProvider.ts","kind":"import-statement","original":"./RouterProvider"},{"path":"src/context.ts","kind":"import-statement","original":"./context"},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_tsx@4.21.0_typescript@5.9.3_yaml@2.8.2/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"}},"outputs":{"dist/cjs/index.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":30926},"dist/cjs/index.js":{"imports":[{"path":"vue","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"@real-router/core","kind":"import-statement","external":true},{"path":"@real-router/route-utils","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"@real-router/core","kind":"import-statement","external":true},{"path":"@real-router/sources","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"dom-utils","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"@real-router/sources","kind":"import-statement","external":true},{"path":"dom-utils","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"@real-router/core/api","kind":"import-statement","external":true},{"path":"@real-router/route-utils","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"@real-router/sources","kind":"import-statement","external":true},{"path":"@real-router/core","kind":"import-statement","external":true},{"path":"@real-router/sources","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"@real-router/core","kind":"import-statement","external":true},{"path":"@real-router/sources","kind":"import-statement","external":true},{"path":"dom-utils","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true}],"exports":["Link","NavigatorKey","RouteKey","RouteView","RouterKey","RouterProvider","createRouterPlugin","useNavigator","useRoute","useRouteNode","useRouteUtils","useRouter","useRouterTransition","vLink"],"entryPoint":"src/index.ts","inputs":{"src/components/RouteView/RouteView.ts":{"bytesInOutput":2634},"src/components/RouteView/components.ts":{"bytesInOutput":467},"src/components/RouteView/helpers.ts":{"bytesInOutput":2048},"src/composables/useRouteNode.ts":{"bytesInOutput":739},"src/useRefFromSource.ts":{"bytesInOutput":260},"src/composables/useRouter.ts":{"bytesInOutput":202},"src/context.ts":{"bytesInOutput":163},"src/components/RouteView/index.ts":{"bytesInOutput":0},"src/index.ts":{"bytesInOutput":0},"src/components/Link.ts":{"bytesInOutput":1883},"src/composables/useIsActiveRoute.ts":{"bytesInOutput":330},"src/constants.ts":{"bytesInOutput":77},"src/directives/vLink.ts":{"bytesInOutput":2032},"src/composables/useNavigator.ts":{"bytesInOutput":232},"src/composables/useRouteUtils.ts":{"bytesInOutput":229},"src/composables/useRoute.ts":{"bytesInOutput":229},"src/composables/useRouterTransition.ts":{"bytesInOutput":212},"src/createRouterPlugin.ts":{"bytesInOutput":892},"src/RouterProvider.ts":{"bytesInOutput":1535}},"bytes":15172}}}
|
|
1
|
+
{"inputs":{"../../node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_tsx@4.21.0_typescript@6.0.2_yaml@2.8.3/node_modules/tsup/assets/cjs_shims.js":{"bytes":569,"imports":[],"format":"esm"},"src/components/RouteView/components.ts":{"bytes":597,"imports":[{"path":"vue","kind":"import-statement","external":true},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_tsx@4.21.0_typescript@6.0.2_yaml@2.8.3/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/components/RouteView/helpers.ts":{"bytes":2607,"imports":[{"path":"@real-router/core","kind":"import-statement","external":true},{"path":"@real-router/route-utils","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"src/components/RouteView/components.ts","kind":"import-statement","original":"./components"},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_tsx@4.21.0_typescript@6.0.2_yaml@2.8.3/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/useRefFromSource.ts":{"bytes":404,"imports":[{"path":"vue","kind":"import-statement","external":true},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_tsx@4.21.0_typescript@6.0.2_yaml@2.8.3/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/context.ts":{"bytes":390,"imports":[{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_tsx@4.21.0_typescript@6.0.2_yaml@2.8.3/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/composables/useRouter.ts":{"bytes":313,"imports":[{"path":"vue","kind":"import-statement","external":true},{"path":"src/context.ts","kind":"import-statement","original":"../context"},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_tsx@4.21.0_typescript@6.0.2_yaml@2.8.3/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/composables/useRouteNode.ts":{"bytes":991,"imports":[{"path":"@real-router/core","kind":"import-statement","external":true},{"path":"@real-router/sources","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"src/useRefFromSource.ts","kind":"import-statement","original":"../useRefFromSource"},{"path":"src/composables/useRouter.ts","kind":"import-statement","original":"./useRouter"},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_tsx@4.21.0_typescript@6.0.2_yaml@2.8.3/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/components/RouteView/RouteView.ts":{"bytes":3491,"imports":[{"path":"vue","kind":"import-statement","external":true},{"path":"src/components/RouteView/components.ts","kind":"import-statement","original":"./components"},{"path":"src/components/RouteView/helpers.ts","kind":"import-statement","original":"./helpers"},{"path":"src/composables/useRouteNode.ts","kind":"import-statement","original":"../../composables/useRouteNode"},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_tsx@4.21.0_typescript@6.0.2_yaml@2.8.3/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/components/RouteView/index.ts":{"bytes":145,"imports":[{"path":"src/components/RouteView/RouteView.ts","kind":"import-statement","original":"./RouteView"},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_tsx@4.21.0_typescript@6.0.2_yaml@2.8.3/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/composables/useIsActiveRoute.ts":{"bytes":577,"imports":[{"path":"@real-router/sources","kind":"import-statement","external":true},{"path":"src/useRefFromSource.ts","kind":"import-statement","original":"../useRefFromSource"},{"path":"src/composables/useRouter.ts","kind":"import-statement","original":"./useRouter"},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_tsx@4.21.0_typescript@6.0.2_yaml@2.8.3/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/constants.ts":{"bytes":185,"imports":[{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_tsx@4.21.0_typescript@6.0.2_yaml@2.8.3/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/components/Link.ts":{"bytes":2312,"imports":[{"path":"dom-utils","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"src/composables/useIsActiveRoute.ts","kind":"import-statement","original":"../composables/useIsActiveRoute"},{"path":"src/composables/useRouter.ts","kind":"import-statement","original":"../composables/useRouter"},{"path":"src/constants.ts","kind":"import-statement","original":"../constants"},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_tsx@4.21.0_typescript@6.0.2_yaml@2.8.3/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/composables/useRouterError.ts":{"bytes":662,"imports":[{"path":"@real-router/sources","kind":"import-statement","external":true},{"path":"src/useRefFromSource.ts","kind":"import-statement","original":"../useRefFromSource"},{"path":"src/composables/useRouter.ts","kind":"import-statement","original":"./useRouter"},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_tsx@4.21.0_typescript@6.0.2_yaml@2.8.3/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/components/RouterErrorBoundary.ts":{"bytes":1717,"imports":[{"path":"vue","kind":"import-statement","external":true},{"path":"src/composables/useRouterError.ts","kind":"import-statement","original":"../composables/useRouterError"},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_tsx@4.21.0_typescript@6.0.2_yaml@2.8.3/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/directives/vLink.ts":{"bytes":2901,"imports":[{"path":"dom-utils","kind":"import-statement","external":true},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_tsx@4.21.0_typescript@6.0.2_yaml@2.8.3/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/composables/useNavigator.ts":{"bytes":340,"imports":[{"path":"vue","kind":"import-statement","external":true},{"path":"src/context.ts","kind":"import-statement","original":"../context"},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_tsx@4.21.0_typescript@6.0.2_yaml@2.8.3/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/composables/useRouteUtils.ts":{"bytes":355,"imports":[{"path":"@real-router/core/api","kind":"import-statement","external":true},{"path":"@real-router/route-utils","kind":"import-statement","external":true},{"path":"src/composables/useRouter.ts","kind":"import-statement","original":"./useRouter"},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_tsx@4.21.0_typescript@6.0.2_yaml@2.8.3/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/composables/useRoute.ts":{"bytes":330,"imports":[{"path":"vue","kind":"import-statement","external":true},{"path":"src/context.ts","kind":"import-statement","original":"../context"},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_tsx@4.21.0_typescript@6.0.2_yaml@2.8.3/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/composables/useRouterTransition.ts":{"bytes":468,"imports":[{"path":"@real-router/sources","kind":"import-statement","external":true},{"path":"src/useRefFromSource.ts","kind":"import-statement","original":"../useRefFromSource"},{"path":"src/composables/useRouter.ts","kind":"import-statement","original":"./useRouter"},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_tsx@4.21.0_typescript@6.0.2_yaml@2.8.3/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/createRouterPlugin.ts":{"bytes":1104,"imports":[{"path":"@real-router/core","kind":"import-statement","external":true},{"path":"@real-router/sources","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"src/context.ts","kind":"import-statement","original":"./context"},{"path":"src/directives/vLink.ts","kind":"import-statement","original":"./directives/vLink"},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_tsx@4.21.0_typescript@6.0.2_yaml@2.8.3/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/RouterProvider.ts":{"bytes":1690,"imports":[{"path":"@real-router/core","kind":"import-statement","external":true},{"path":"@real-router/sources","kind":"import-statement","external":true},{"path":"dom-utils","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"src/context.ts","kind":"import-statement","original":"./context"},{"path":"src/directives/vLink.ts","kind":"import-statement","original":"./directives/vLink"},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_tsx@4.21.0_typescript@6.0.2_yaml@2.8.3/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/index.ts":{"bytes":1252,"imports":[{"path":"src/components/RouteView/index.ts","kind":"import-statement","original":"./components/RouteView"},{"path":"src/components/Link.ts","kind":"import-statement","original":"./components/Link"},{"path":"src/components/RouterErrorBoundary.ts","kind":"import-statement","original":"./components/RouterErrorBoundary"},{"path":"src/directives/vLink.ts","kind":"import-statement","original":"./directives/vLink"},{"path":"src/composables/useRouter.ts","kind":"import-statement","original":"./composables/useRouter"},{"path":"src/composables/useNavigator.ts","kind":"import-statement","original":"./composables/useNavigator"},{"path":"src/composables/useRouteUtils.ts","kind":"import-statement","original":"./composables/useRouteUtils"},{"path":"src/composables/useRoute.ts","kind":"import-statement","original":"./composables/useRoute"},{"path":"src/composables/useRouteNode.ts","kind":"import-statement","original":"./composables/useRouteNode"},{"path":"src/composables/useRouterTransition.ts","kind":"import-statement","original":"./composables/useRouterTransition"},{"path":"src/createRouterPlugin.ts","kind":"import-statement","original":"./createRouterPlugin"},{"path":"src/RouterProvider.ts","kind":"import-statement","original":"./RouterProvider"},{"path":"src/context.ts","kind":"import-statement","original":"./context"},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_tsx@4.21.0_typescript@6.0.2_yaml@2.8.3/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"}},"outputs":{"dist/cjs/index.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":34807},"dist/cjs/index.js":{"imports":[{"path":"vue","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"@real-router/core","kind":"import-statement","external":true},{"path":"@real-router/route-utils","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"@real-router/core","kind":"import-statement","external":true},{"path":"@real-router/sources","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"dom-utils","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"@real-router/sources","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"@real-router/sources","kind":"import-statement","external":true},{"path":"dom-utils","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"@real-router/core/api","kind":"import-statement","external":true},{"path":"@real-router/route-utils","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"@real-router/sources","kind":"import-statement","external":true},{"path":"@real-router/core","kind":"import-statement","external":true},{"path":"@real-router/sources","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"@real-router/core","kind":"import-statement","external":true},{"path":"@real-router/sources","kind":"import-statement","external":true},{"path":"dom-utils","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true}],"exports":["Link","NavigatorKey","RouteKey","RouteView","RouterErrorBoundary","RouterKey","RouterProvider","createRouterPlugin","useNavigator","useRoute","useRouteNode","useRouteUtils","useRouter","useRouterTransition","vLink"],"entryPoint":"src/index.ts","inputs":{"src/components/RouteView/RouteView.ts":{"bytesInOutput":2637},"src/components/RouteView/components.ts":{"bytesInOutput":467},"src/components/RouteView/helpers.ts":{"bytesInOutput":2048},"src/composables/useRouteNode.ts":{"bytesInOutput":739},"src/useRefFromSource.ts":{"bytesInOutput":263},"src/composables/useRouter.ts":{"bytesInOutput":202},"src/context.ts":{"bytesInOutput":163},"src/components/RouteView/index.ts":{"bytesInOutput":0},"src/index.ts":{"bytesInOutput":0},"src/components/Link.ts":{"bytesInOutput":1883},"src/composables/useIsActiveRoute.ts":{"bytesInOutput":330},"src/constants.ts":{"bytesInOutput":77},"src/components/RouterErrorBoundary.ts":{"bytesInOutput":1231},"src/composables/useRouterError.ts":{"bytesInOutput":322},"src/directives/vLink.ts":{"bytesInOutput":2152},"src/composables/useNavigator.ts":{"bytesInOutput":232},"src/composables/useRouteUtils.ts":{"bytesInOutput":229},"src/composables/useRoute.ts":{"bytesInOutput":229},"src/composables/useRouterTransition.ts":{"bytesInOutput":212},"src/createRouterPlugin.ts":{"bytesInOutput":892},"src/RouterProvider.ts":{"bytesInOutput":1535}},"bytes":16996}}}
|
package/dist/esm/index.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as vue from 'vue';
|
|
2
2
|
import { VNode, PropType, Directive, ShallowRef, Plugin, InjectionKey } from 'vue';
|
|
3
|
-
import { Params, NavigationOptions, Router, Navigator
|
|
3
|
+
import { Params, NavigationOptions, RouterError, State, Router, Navigator } from '@real-router/core';
|
|
4
4
|
export { Navigator } from '@real-router/core';
|
|
5
5
|
import { RouteUtils } from '@real-router/route-utils';
|
|
6
6
|
import { RouterTransitionSnapshot } from '@real-router/sources';
|
|
@@ -176,6 +176,31 @@ declare const Link: vue.DefineComponent<vue.ExtractPropTypes<{
|
|
|
176
176
|
target: string;
|
|
177
177
|
}, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
|
|
178
178
|
|
|
179
|
+
declare const RouterErrorBoundary: vue.DefineComponent<vue.ExtractPropTypes<{
|
|
180
|
+
fallback: {
|
|
181
|
+
type: PropType<(error: RouterError, resetError: () => void) => VNode>;
|
|
182
|
+
required: true;
|
|
183
|
+
};
|
|
184
|
+
onError: {
|
|
185
|
+
type: PropType<(error: RouterError, toRoute: State | null, fromRoute: State | null) => void>;
|
|
186
|
+
default: undefined;
|
|
187
|
+
};
|
|
188
|
+
}>, () => VNode<vue.RendererNode, vue.RendererElement, {
|
|
189
|
+
[key: string]: any;
|
|
190
|
+
}>, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.PublicProps, Readonly<vue.ExtractPropTypes<{
|
|
191
|
+
fallback: {
|
|
192
|
+
type: PropType<(error: RouterError, resetError: () => void) => VNode>;
|
|
193
|
+
required: true;
|
|
194
|
+
};
|
|
195
|
+
onError: {
|
|
196
|
+
type: PropType<(error: RouterError, toRoute: State | null, fromRoute: State | null) => void>;
|
|
197
|
+
default: undefined;
|
|
198
|
+
};
|
|
199
|
+
}>> & Readonly<{}>, {
|
|
200
|
+
onError: (error: RouterError, toRoute: State | null, fromRoute: State | null) => void;
|
|
201
|
+
}, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
|
|
202
|
+
type RouterErrorBoundaryProps = InstanceType<typeof RouterErrorBoundary>["$props"];
|
|
203
|
+
|
|
179
204
|
interface LinkDirectiveValue {
|
|
180
205
|
name: string;
|
|
181
206
|
params?: Params;
|
|
@@ -241,4 +266,4 @@ declare const RouterKey: InjectionKey<Router>;
|
|
|
241
266
|
declare const NavigatorKey: InjectionKey<Navigator>;
|
|
242
267
|
declare const RouteKey: InjectionKey<RouteContext>;
|
|
243
268
|
|
|
244
|
-
export { Link, type LinkDirectiveValue, type LinkProps, NavigatorKey, RouteKey, RouteView, type MatchProps as RouteViewMatchProps, type NotFoundProps as RouteViewNotFoundProps, type RouteViewProps, RouterKey, RouterProvider, createRouterPlugin, useNavigator, useRoute, useRouteNode, useRouteUtils, useRouter, useRouterTransition, vLink };
|
|
269
|
+
export { Link, type LinkDirectiveValue, type LinkProps, NavigatorKey, RouteKey, RouteView, type MatchProps as RouteViewMatchProps, type NotFoundProps as RouteViewNotFoundProps, type RouteViewProps, RouterErrorBoundary, type RouterErrorBoundaryProps, RouterKey, RouterProvider, createRouterPlugin, useNavigator, useRoute, useRouteNode, useRouteUtils, useRouter, useRouterTransition, vLink };
|
package/dist/esm/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{defineComponent as e,h as t,Fragment as r,KeepAlive as o,computed as n,
|
|
1
|
+
import{defineComponent as e,h as t,Fragment as r,KeepAlive as o,computed as n,ref as u,watch as a,onMounted as s,onUnmounted as i,shallowRef as l,onScopeDispose as c,provide as p,Suspense as f,markRaw as v,inject as d,isVNode as m}from"vue";import{getNavigator as y,UNKNOWN_ROUTE as g}from"@real-router/core";import{startsWithSegment as h,getRouteUtils as b}from"@real-router/route-utils";import{createRouteSource as k,createRouteNodeSource as R,createActiveRouteSource as w,createErrorSource as S,createTransitionSource as N}from"@real-router/sources";import{buildHref as P,buildActiveClassName as E,createRouteAnnouncer as M,shouldNavigate as O,applyLinkA11y as j}from"dom-utils";import{getPluginApi as A}from"@real-router/core/api";function B(){return null}var q=e({name:"RouteView.Match",props:{segment:{type:String,required:!0},exact:{type:Boolean,default:!1},fallback:{type:[Object,Function],default:void 0}},render:B}),C=e({name:"RouteView.NotFound",render:B});function F(e,t,r){return r?e===t:h(e,t)}function L(e){if(Array.isArray(e)){const t=[];for(const r of e)Array.isArray(r)?t.push(...L(r)):m(r)&&t.push(r);return t}return m(e)?[e]:[]}function _(e,t){const o=L(e);for(const e of o)e.type===q||e.type===C?t.push(e):e.type===r&&_(e.children,t)}function K(e){const t=l(e.getSnapshot()),r=e.subscribe(()=>{t.value=e.getSnapshot()});return c(r),t}var x=Symbol("RouterKey"),Q=Symbol("NavigatorKey"),V=Symbol("RouteKey"),W=()=>{const e=d(x);if(!e)throw new Error("useRouter must be used within a RouterProvider");return e};function $(e){const t=W(),r=K(R(t,e)),o=y(t),n=l(r.value.route),u=l(r.value.previousRoute);return a(r,e=>{n.value=e.route,u.value=e.previousRoute},{flush:"sync"}),{navigator:o,route:n,previousRoute:u}}function z(e){const t=e.children;return t?.default?.()??null}function D(e,r){if(void 0===r)return e;const o="function"==typeof r?r():r;return t(f,{},{default:()=>e,fallback:()=>o})}var T=e({name:"RouteView",props:{nodeName:{type:String,required:!0},keepAlive:{type:Boolean,default:!1}},setup(n,{slots:u}){const a=$(n.nodeName),s=new Map;return()=>{const i=a.route.value;if(!i)return null;const l=[];_(u.default?.(),l);const{rendered:c,fallback:p}=function(e,t,r){let o,n=null,u=!1;const a=[];for(const s of e){if(s.type===C){n=s.children;continue}const e=s.props,i=e?.segment??"";!u&&F(t,r?`${r}.${i}`:i,e?.exact??!1)&&(u=!0,o=e?.fallback,a.push(s))}if(!u&&t===g&&null!==n){const t=e.filter(e=>e.type===C).at(-1);t&&a.push(t)}return{rendered:a,activeMatchFound:u,fallback:o}}(l,i.name,n.nodeName);if(0===c.length)return null;const f=c[0];if(!n.keepAlive){if(f.type===q||f.type===C){const e=z(f);return e?D(t(r,e),p):null}return null}const d=f.props,m=d?.segment??"__not-found__",y=function(t,r){const o=t.get(r);if(o)return o;const n=v(e({name:`KeepAlive-${r}`,setup:(e,t)=>()=>t.slots.default?.()}));return t.set(r,n),n}(s,m),h=z(f)??[];return D(t(o,null,{default:()=>t(y,{key:m},{default:()=>h})}),p)}}}),H=Object.assign(T,{Match:q,NotFound:C}),U=Object.freeze({}),G=Object.freeze({}),I=e({name:"Link",props:{routeName:{type:String,required:!0},routeParams:{type:Object,default:()=>U},routeOptions:{type:Object,default:()=>G},class:{type:String,default:void 0},activeClassName:{type:String,default:"active"},activeStrict:{type:Boolean,default:!1},ignoreQueryParams:{type:Boolean,default:!0},target:{type:String,default:void 0}},setup(e,{slots:r,attrs:o}){const u=W(),a=function(e,t,r=!1,o=!0){const n=W();return K(w(n,e,t,{strict:r,ignoreQueryParams:o}))}(e.routeName,e.routeParams,e.activeStrict,e.ignoreQueryParams),s=n(()=>P(u,e.routeName,e.routeParams)),i=n(()=>E(a.value,e.activeClassName,e.class)),l=t=>{o.onClick&&"function"==typeof o.onClick&&(o.onClick(t),t.defaultPrevented)||O(t)&&"_blank"!==e.target&&(t.preventDefault(),u.navigate(e.routeName,e.routeParams,e.routeOptions).catch(()=>{}))};return()=>t("a",{...o,href:s.value,class:i.value,target:e.target,onClick:l},r.default?.())}}),J=new WeakMap,X=e({name:"RouterErrorBoundary",props:{fallback:{type:Function,required:!0},onError:{type:Function,default:void 0}},setup(e,{slots:o}){const s=function(){const e=W();let t=J.get(e);return t||(t=S(e),J.set(e,t)),K(t)}(),i=u(-1);a(()=>s.value.version,()=>{s.value.error&&e.onError?.(s.value.error,s.value.toRoute,s.value.fromRoute)},{immediate:!0});const l=n(()=>s.value.version>i.value?s.value.error:null),c=()=>{i.value=s.value.version};return()=>{const n=o.default?.()??[],u=l.value?e.fallback(l.value,c):null;return t(r,null,[...n,u])}}}),Y=null;function Z(e){Y=e}function ee(){if(!Y)throw new Error("v-link directive requires a RouterProvider ancestor. Make sure RouterProvider is mounted.");return Y}var te=new WeakMap,re=new WeakMap;function oe(e,t,r){const o=function(e,t){return r=>{O(r)&&(r.preventDefault(),e.navigate(t.name,t.params??{},t.options??{}).catch(()=>{}))}}(t,r),n=function(e,t,r){return o=>{"Enter"!==o.key||r instanceof HTMLButtonElement||e.navigate(t.name,t.params??{},t.options??{}).catch(()=>{})}}(t,r,e);e.addEventListener("click",o),e.addEventListener("keydown",n),te.set(e,o),re.set(e,n)}function ne(e){const t=te.get(e),r=re.get(e);t&&e.removeEventListener("click",t),r&&e.removeEventListener("keydown",r),te.delete(e),re.delete(e)}var ue={mounted(e,t){const r=ee();j(e),e.style.cursor="pointer",oe(e,r,t.value)},updated(e,t){const r=ee();ne(e),oe(e,r,t.value)},beforeUnmount(e){ne(e)}},ae=()=>{const e=d(Q);if(!e)throw new Error("useNavigator must be used within a RouterProvider");return e},se=()=>{const e=W();return b(A(e).getTree())},ie=()=>{const e=d(V);if(!e)throw new Error("useRoute must be used within a RouterProvider");return e};function le(){const e=W();return K(N(e))}function ce(e){return{install(t){const r=y(e);Z(e);const o=k(e),n=o.getSnapshot(),u=l(n.route),a=l(n.previousRoute);o.subscribe(()=>{const e=o.getSnapshot();u.value=e.route,a.value=e.previousRoute}),t.provide(x,e),t.provide(Q,r),t.provide(V,{navigator:r,route:u,previousRoute:a})}}}var pe=e({name:"RouterProvider",props:{router:{type:Object,required:!0},announceNavigation:{type:Boolean,default:!1}},setup(e,{slots:t}){s(()=>{if(!e.announceNavigation)return;const t=M(e.router);i(()=>{t.destroy()})});const r=y(e.router);Z(e.router);const o=k(e.router),n=o.getSnapshot(),u=l(n.route),a=l(n.previousRoute),f=o.subscribe(()=>{const e=o.getSnapshot();u.value=e.route,a.value=e.previousRoute});return c(f),p(x,e.router),p(Q,r),p(V,{navigator:r,route:u,previousRoute:a}),()=>t.default?.()}});export{I as Link,Q as NavigatorKey,V as RouteKey,H as RouteView,X as RouterErrorBoundary,x as RouterKey,pe as RouterProvider,ce as createRouterPlugin,ae as useNavigator,ie as useRoute,$ as useRouteNode,se as useRouteUtils,W as useRouter,le as useRouterTransition,ue as vLink};//# sourceMappingURL=index.mjs.map
|
package/dist/esm/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/RouteView/components.ts","../../src/components/RouteView/helpers.ts","../../src/useRefFromSource.ts","../../src/context.ts","../../src/composables/useRouter.ts","../../src/composables/useRouteNode.ts","../../src/components/RouteView/RouteView.ts","../../src/composables/useIsActiveRoute.ts","../../src/constants.ts","../../src/components/Link.ts","../../src/directives/vLink.ts","../../src/composables/useNavigator.ts","../../src/composables/useRouteUtils.ts","../../src/composables/useRoute.ts","../../src/composables/useRouterTransition.ts","../../src/createRouterPlugin.ts","../../src/RouterProvider.ts"],"names":["shallowRef","defineComponent","Fragment","h","shouldNavigate","inject","getNavigator","createRouteSource","onScopeDispose"],"mappings":"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","file":"index.mjs","sourcesContent":["import { defineComponent } from \"vue\";\n\nimport type { PropType, VNode } from \"vue\";\n\nfunction renderNull() {\n return null;\n}\n\nexport const Match = defineComponent({\n name: \"RouteView.Match\",\n props: {\n segment: {\n type: String as PropType<string>,\n required: true,\n },\n exact: {\n type: Boolean,\n default: false,\n },\n fallback: {\n type: [Object, Function] as PropType<VNode | (() => VNode)>,\n default: undefined,\n },\n },\n render: renderNull,\n});\n\nexport const NotFound = defineComponent({\n name: \"RouteView.NotFound\",\n render: renderNull,\n});\n","import { UNKNOWN_ROUTE } from \"@real-router/core\";\nimport { startsWithSegment } from \"@real-router/route-utils\";\nimport { Fragment, isVNode } from \"vue\";\n\nimport { Match, NotFound } from \"./components\";\n\nimport type { VNode } from \"vue\";\n\ntype FallbackType = VNode | (() => VNode) | undefined;\n\nfunction isSegmentMatch(\n routeName: string,\n fullSegmentName: string,\n exact: boolean,\n): boolean {\n if (exact) {\n return routeName === fullSegmentName;\n }\n\n return startsWithSegment(routeName, fullSegmentName);\n}\n\nfunction normalizeChildren(children: unknown): VNode[] {\n if (Array.isArray(children)) {\n const result: VNode[] = [];\n\n for (const child of children) {\n if (Array.isArray(child)) {\n result.push(...normalizeChildren(child));\n } else if (isVNode(child)) {\n result.push(child);\n }\n }\n\n return result;\n }\n\n if (isVNode(children)) {\n return [children];\n }\n\n return [];\n}\n\nexport function collectElements(children: unknown, result: VNode[]): void {\n const vnodes = normalizeChildren(children);\n\n for (const child of vnodes) {\n if (child.type === Match || child.type === NotFound) {\n result.push(child);\n } else if (child.type === Fragment) {\n collectElements(child.children, result);\n }\n }\n}\n\nexport function buildRenderList(\n elements: VNode[],\n routeName: string,\n nodeName: string,\n): {\n rendered: VNode[];\n activeMatchFound: boolean;\n fallback?: FallbackType;\n} {\n let notFoundChildren: unknown = null;\n let activeMatchFound = false;\n let fallback: FallbackType = undefined;\n const rendered: VNode[] = [];\n\n for (const child of elements) {\n if (child.type === NotFound) {\n notFoundChildren = child.children;\n continue;\n }\n\n const props = child.props as {\n segment: string;\n exact?: boolean;\n fallback?: FallbackType;\n } | null;\n const segment = props?.segment ?? \"\";\n const exact = props?.exact ?? false;\n const fullSegmentName = nodeName ? `${nodeName}.${segment}` : segment;\n const isActive =\n !activeMatchFound && isSegmentMatch(routeName, fullSegmentName, exact);\n\n if (isActive) {\n activeMatchFound = true;\n fallback = props?.fallback;\n rendered.push(child);\n }\n }\n\n if (\n !activeMatchFound &&\n routeName === UNKNOWN_ROUTE &&\n notFoundChildren !== null\n ) {\n const nfElements = elements.filter((element) => element.type === NotFound);\n /* v8 ignore next 3 */\n const lastNf = nfElements.at(-1);\n\n if (lastNf) {\n rendered.push(lastNf);\n }\n }\n\n return { rendered, activeMatchFound, fallback };\n}\n","import { shallowRef, onScopeDispose } from \"vue\";\n\nimport type { RouterSource } from \"@real-router/sources\";\nimport type { ShallowRef } from \"vue\";\n\nexport function useRefFromSource<T>(source: RouterSource<T>): ShallowRef<T> {\n const ref = shallowRef(source.getSnapshot());\n\n const unsub = source.subscribe(() => {\n ref.value = source.getSnapshot();\n });\n\n onScopeDispose(unsub);\n\n return ref;\n}\n","import type { RouteContext as RouteContextType } from \"./types\";\nimport type { Router, Navigator } from \"@real-router/core\";\nimport type { InjectionKey } from \"vue\";\n\nexport const RouterKey: InjectionKey<Router> = Symbol(\"RouterKey\");\n\nexport const NavigatorKey: InjectionKey<Navigator> = Symbol(\"NavigatorKey\");\n\nexport const RouteKey: InjectionKey<RouteContextType> = Symbol(\"RouteKey\");\n","import { inject } from \"vue\";\n\nimport { RouterKey } from \"../context\";\n\nimport type { Router } from \"@real-router/core\";\n\nexport const useRouter = (): Router => {\n const router = inject(RouterKey);\n\n if (!router) {\n throw new Error(\"useRouter must be used within a RouterProvider\");\n }\n\n return router;\n};\n","import { getNavigator } from \"@real-router/core\";\nimport { createRouteNodeSource } from \"@real-router/sources\";\nimport { shallowRef, watch } from \"vue\";\n\nimport { useRefFromSource } from \"../useRefFromSource\";\nimport { useRouter } from \"./useRouter\";\n\nimport type { RouteContext } from \"../types\";\nimport type { State } from \"@real-router/core\";\n\nexport function useRouteNode(nodeName: string): RouteContext {\n const router = useRouter();\n\n const source = createRouteNodeSource(router, nodeName);\n const snapshot = useRefFromSource(source);\n\n const navigator = getNavigator(router);\n\n const route = shallowRef<State | undefined>(snapshot.value.route);\n const previousRoute = shallowRef<State | undefined>(\n snapshot.value.previousRoute,\n );\n\n watch(\n snapshot,\n (newSnapshot) => {\n route.value = newSnapshot.route;\n previousRoute.value = newSnapshot.previousRoute;\n },\n { flush: \"sync\" },\n );\n\n return {\n navigator,\n route,\n previousRoute,\n };\n}\n","import {\n Fragment,\n defineComponent,\n h,\n KeepAlive,\n markRaw,\n Suspense,\n} from \"vue\";\n\nimport { Match, NotFound } from \"./components\";\nimport { buildRenderList, collectElements } from \"./helpers\";\nimport { useRouteNode } from \"../../composables/useRouteNode\";\n\nimport type { Component, VNode } from \"vue\";\n\ntype SlotChildren = Record<string, (() => VNode[]) | undefined> | null;\n\nfunction getSlotContent(vnode: VNode): VNode[] | null {\n const slots = vnode.children as SlotChildren;\n\n return slots?.default?.() ?? null;\n}\n\nfunction getOrCreateWrapper(\n cache: Map<string, Component>,\n segment: string,\n): Component {\n const existing = cache.get(segment);\n\n if (existing) {\n return existing;\n }\n\n const wrapper = markRaw(\n defineComponent({\n name: `KeepAlive-${segment}`,\n setup(_wrapperProps, wrapperCtx) {\n return () => wrapperCtx.slots.default?.();\n },\n }),\n );\n\n cache.set(segment, wrapper);\n\n return wrapper;\n}\n\nfunction wrapWithSuspense(content: VNode, fallback: unknown): VNode {\n if (fallback === undefined) {\n return content;\n }\n\n const fallbackContent =\n typeof fallback === \"function\" ? (fallback as () => VNode)() : fallback;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment\n const suspenseComponent = Suspense as any;\n\n return h(\n suspenseComponent,\n {},\n {\n default: () => content,\n fallback: () => fallbackContent,\n },\n );\n}\n\nconst RouteViewComponent = defineComponent({\n name: \"RouteView\",\n props: {\n nodeName: {\n type: String,\n required: true,\n },\n keepAlive: {\n type: Boolean,\n default: false,\n },\n },\n setup(props, { slots }) {\n const routeContext = useRouteNode(props.nodeName);\n\n const wrapperCache = new Map<string, Component>();\n\n return (): VNode | null => {\n const route = routeContext.route.value;\n\n if (!route) {\n return null;\n }\n\n const elements: VNode[] = [];\n\n collectElements(slots.default?.(), elements);\n\n const { rendered, fallback } = buildRenderList(\n elements,\n route.name,\n props.nodeName,\n );\n\n if (rendered.length === 0) {\n return null;\n }\n\n const activeChild = rendered[0];\n\n if (!props.keepAlive) {\n if (activeChild.type === Match || activeChild.type === NotFound) {\n const content = getSlotContent(activeChild);\n\n if (!content) {\n return null;\n }\n\n const fragment = h(Fragment, content);\n\n return wrapWithSuspense(fragment, fallback);\n }\n\n /* v8 ignore start */\n return null;\n /* v8 ignore stop */\n }\n\n const activeProps = activeChild.props as {\n segment?: string;\n } | null;\n const segment = activeProps?.segment ?? \"__not-found__\";\n\n const WrapperComponent = getOrCreateWrapper(wrapperCache, segment);\n /* v8 ignore next */\n const slotContent = getSlotContent(activeChild) ?? [];\n\n const keepAliveContent = h(KeepAlive, null, {\n default: () =>\n h(WrapperComponent, { key: segment }, { default: () => slotContent }),\n });\n\n return wrapWithSuspense(keepAliveContent, fallback);\n };\n },\n});\n\nexport const RouteView = Object.assign(RouteViewComponent, { Match, NotFound });\n\nexport type {\n RouteViewProps,\n MatchProps as RouteViewMatchProps,\n NotFoundProps as RouteViewNotFoundProps,\n} from \"./types\";\n","import { createActiveRouteSource } from \"@real-router/sources\";\n\nimport { useRefFromSource } from \"../useRefFromSource\";\nimport { useRouter } from \"./useRouter\";\n\nimport type { Params } from \"@real-router/core\";\nimport type { ShallowRef } from \"vue\";\n\nexport function useIsActiveRoute(\n routeName: string,\n params?: Params,\n strict = false,\n ignoreQueryParams = true,\n): ShallowRef<boolean> {\n const router = useRouter();\n\n const source = createActiveRouteSource(router, routeName, params, {\n strict,\n ignoreQueryParams,\n });\n\n return useRefFromSource(source);\n}\n","/**\n * Stable empty object for default params\n */\nexport const EMPTY_PARAMS = Object.freeze({});\n\n/**\n * Stable empty options object\n */\nexport const EMPTY_OPTIONS = Object.freeze({});\n","import { shouldNavigate, buildHref, buildActiveClassName } from \"dom-utils\";\nimport { defineComponent, h, computed } from \"vue\";\n\nimport { useIsActiveRoute } from \"../composables/useIsActiveRoute\";\nimport { useRouter } from \"../composables/useRouter\";\nimport { EMPTY_PARAMS, EMPTY_OPTIONS } from \"../constants\";\n\nimport type { Params, NavigationOptions } from \"@real-router/core\";\nimport type { PropType } from \"vue\";\n\nexport const Link = defineComponent({\n name: \"Link\",\n props: {\n routeName: {\n type: String,\n required: true,\n },\n routeParams: {\n type: Object as PropType<Params>,\n default: () => EMPTY_PARAMS,\n },\n routeOptions: {\n type: Object as PropType<NavigationOptions>,\n default: () => EMPTY_OPTIONS,\n },\n class: {\n type: String,\n default: undefined,\n },\n activeClassName: {\n type: String,\n default: \"active\",\n },\n activeStrict: {\n type: Boolean,\n default: false,\n },\n ignoreQueryParams: {\n type: Boolean,\n default: true,\n },\n target: {\n type: String,\n default: undefined,\n },\n },\n setup(props, { slots, attrs }) {\n const router = useRouter();\n\n const isActive = useIsActiveRoute(\n props.routeName,\n props.routeParams,\n props.activeStrict,\n props.ignoreQueryParams,\n );\n\n const href = computed(() =>\n buildHref(router, props.routeName, props.routeParams),\n );\n\n const finalClassName = computed(() =>\n buildActiveClassName(isActive.value, props.activeClassName, props.class),\n );\n\n const handleClick = (evt: MouseEvent) => {\n if (attrs.onClick && typeof attrs.onClick === \"function\") {\n (attrs.onClick as (evt: MouseEvent) => void)(evt);\n\n if (evt.defaultPrevented) {\n return;\n }\n }\n\n if (!shouldNavigate(evt) || props.target === \"_blank\") {\n return;\n }\n\n evt.preventDefault();\n router\n .navigate(props.routeName, props.routeParams, props.routeOptions)\n .catch(() => {});\n };\n\n return () =>\n h(\n \"a\",\n {\n ...attrs,\n href: href.value,\n class: finalClassName.value,\n target: props.target,\n onClick: handleClick,\n },\n slots.default?.(),\n );\n },\n});\n","import { shouldNavigate, applyLinkA11y } from \"dom-utils\";\n\nimport type { Router, NavigationOptions, Params } from \"@real-router/core\";\nimport type { Directive } from \"vue\";\n\nexport interface LinkDirectiveValue {\n name: string;\n params?: Params;\n options?: NavigationOptions;\n}\n\nlet _router: Router | null = null;\n\nexport function setDirectiveRouter(router: Router): void {\n _router = router;\n}\n\nexport function getDirectiveRouter(): Router {\n if (!_router) {\n /* v8 ignore next 3 -- @preserve Defensive: router always initialized by RouterProvider */\n throw new Error(\n \"v-link directive requires a RouterProvider ancestor. Make sure RouterProvider is mounted.\",\n );\n }\n\n return _router;\n}\n\nconst clickHandlers = new WeakMap<HTMLElement, (evt: MouseEvent) => void>();\nconst keydownHandlers = new WeakMap<\n HTMLElement,\n (evt: KeyboardEvent) => void\n>();\n\nfunction createClickHandler(\n router: Router,\n value: LinkDirectiveValue,\n): (evt: MouseEvent) => void {\n return (evt: MouseEvent) => {\n if (!shouldNavigate(evt)) {\n return;\n }\n\n evt.preventDefault();\n router\n .navigate(value.name, value.params ?? {}, value.options ?? {})\n .catch(() => {});\n };\n}\n\nfunction createKeydownHandler(\n router: Router,\n value: LinkDirectiveValue,\n el: HTMLElement,\n): (evt: KeyboardEvent) => void {\n return (evt: KeyboardEvent) => {\n if (evt.key === \"Enter\" && !(el instanceof HTMLButtonElement)) {\n router\n .navigate(value.name, value.params ?? {}, value.options ?? {})\n .catch(() => {});\n }\n };\n}\n\nfunction attachHandlers(\n el: HTMLElement,\n router: Router,\n value: LinkDirectiveValue,\n): void {\n const handleClick = createClickHandler(router, value);\n const handleKeyDown = createKeydownHandler(router, value, el);\n\n el.addEventListener(\"click\", handleClick);\n el.addEventListener(\"keydown\", handleKeyDown);\n\n clickHandlers.set(el, handleClick);\n keydownHandlers.set(el, handleKeyDown);\n}\n\nfunction detachHandlers(el: HTMLElement): void {\n const clickHandler = clickHandlers.get(el);\n const keydownHandler = keydownHandlers.get(el);\n\n if (clickHandler) {\n el.removeEventListener(\"click\", clickHandler);\n }\n if (keydownHandler) {\n el.removeEventListener(\"keydown\", keydownHandler);\n }\n\n clickHandlers.delete(el);\n keydownHandlers.delete(el);\n}\n\nexport const vLink: Directive<HTMLElement, LinkDirectiveValue> = {\n mounted(el, binding) {\n const router = getDirectiveRouter();\n\n applyLinkA11y(el);\n\n el.style.cursor = \"pointer\";\n\n attachHandlers(el, router, binding.value);\n },\n\n updated(el, binding) {\n const router = getDirectiveRouter();\n\n detachHandlers(el);\n attachHandlers(el, router, binding.value);\n },\n\n beforeUnmount(el) {\n detachHandlers(el);\n },\n};\n","import { inject } from \"vue\";\n\nimport { NavigatorKey } from \"../context\";\n\nimport type { Navigator } from \"@real-router/core\";\n\nexport const useNavigator = (): Navigator => {\n const navigator = inject(NavigatorKey);\n\n if (!navigator) {\n throw new Error(\"useNavigator must be used within a RouterProvider\");\n }\n\n return navigator;\n};\n","import { getPluginApi } from \"@real-router/core/api\";\nimport { getRouteUtils } from \"@real-router/route-utils\";\n\nimport { useRouter } from \"./useRouter\";\n\nimport type { RouteUtils } from \"@real-router/route-utils\";\n\nexport const useRouteUtils = (): RouteUtils => {\n const router = useRouter();\n\n return getRouteUtils(getPluginApi(router).getTree());\n};\n","import { inject } from \"vue\";\n\nimport { RouteKey } from \"../context\";\n\nimport type { RouteContext } from \"../types\";\n\nexport const useRoute = (): RouteContext => {\n const routeContext = inject(RouteKey);\n\n if (!routeContext) {\n throw new Error(\"useRoute must be used within a RouterProvider\");\n }\n\n return routeContext;\n};\n","import { createTransitionSource } from \"@real-router/sources\";\n\nimport { useRefFromSource } from \"../useRefFromSource\";\nimport { useRouter } from \"./useRouter\";\n\nimport type { RouterTransitionSnapshot } from \"@real-router/sources\";\nimport type { ShallowRef } from \"vue\";\n\nexport function useRouterTransition(): ShallowRef<RouterTransitionSnapshot> {\n const router = useRouter();\n\n const source = createTransitionSource(router);\n\n return useRefFromSource(source);\n}\n","import { getNavigator } from \"@real-router/core\";\nimport { createRouteSource } from \"@real-router/sources\";\nimport { shallowRef } from \"vue\";\n\nimport { NavigatorKey, RouteKey, RouterKey } from \"./context\";\nimport { setDirectiveRouter } from \"./directives/vLink\";\n\nimport type { Router } from \"@real-router/core\";\nimport type { Plugin } from \"vue\";\n\n// eslint-disable-next-line sonarjs/function-return-type -- Plugin<[]> return type is consistent\nexport function createRouterPlugin(router: Router): Plugin<[]> {\n return {\n install(app): void {\n const navigator = getNavigator(router);\n\n setDirectiveRouter(router);\n\n const source = createRouteSource(router);\n const initialSnapshot = source.getSnapshot();\n\n const route = shallowRef(initialSnapshot.route);\n const previousRoute = shallowRef(initialSnapshot.previousRoute);\n\n source.subscribe(() => {\n const snapshot = source.getSnapshot();\n\n route.value = snapshot.route;\n previousRoute.value = snapshot.previousRoute;\n });\n\n app.provide(RouterKey, router);\n app.provide(NavigatorKey, navigator);\n app.provide(RouteKey, { navigator, route, previousRoute });\n },\n };\n}\n","import { getNavigator } from \"@real-router/core\";\nimport { createRouteSource } from \"@real-router/sources\";\nimport { createRouteAnnouncer } from \"dom-utils\";\nimport {\n defineComponent,\n onMounted,\n onUnmounted,\n provide,\n shallowRef,\n onScopeDispose,\n} from \"vue\";\n\nimport { NavigatorKey, RouteKey, RouterKey } from \"./context\";\nimport { setDirectiveRouter } from \"./directives/vLink\";\n\nimport type { Router } from \"@real-router/core\";\nimport type { PropType } from \"vue\";\n\nexport const RouterProvider = defineComponent({\n name: \"RouterProvider\",\n props: {\n router: {\n type: Object as PropType<Router>,\n required: true,\n },\n announceNavigation: {\n type: Boolean,\n default: false,\n },\n },\n setup(props, { slots }) {\n onMounted(() => {\n if (!props.announceNavigation) {\n return;\n }\n\n const announcer = createRouteAnnouncer(props.router);\n\n onUnmounted(() => {\n announcer.destroy();\n });\n });\n\n const navigator = getNavigator(props.router);\n\n setDirectiveRouter(props.router);\n\n const source = createRouteSource(props.router);\n const initialSnapshot = source.getSnapshot();\n\n const route = shallowRef(initialSnapshot.route);\n const previousRoute = shallowRef(initialSnapshot.previousRoute);\n\n const unsub = source.subscribe(() => {\n const snapshot = source.getSnapshot();\n\n route.value = snapshot.route;\n previousRoute.value = snapshot.previousRoute;\n });\n\n onScopeDispose(unsub);\n\n provide(RouterKey, props.router);\n provide(NavigatorKey, navigator);\n provide(RouteKey, { navigator, route, previousRoute });\n\n return () => slots.default?.();\n },\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/components/RouteView/components.ts","../../src/components/RouteView/helpers.ts","../../src/useRefFromSource.ts","../../src/context.ts","../../src/composables/useRouter.ts","../../src/composables/useRouteNode.ts","../../src/components/RouteView/RouteView.ts","../../src/composables/useIsActiveRoute.ts","../../src/constants.ts","../../src/components/Link.ts","../../src/composables/useRouterError.ts","../../src/components/RouterErrorBoundary.ts","../../src/directives/vLink.ts","../../src/composables/useNavigator.ts","../../src/composables/useRouteUtils.ts","../../src/composables/useRoute.ts","../../src/composables/useRouterTransition.ts","../../src/createRouterPlugin.ts","../../src/RouterProvider.ts"],"names":["ref","shallowRef","cache","defineComponent","Fragment","h","watch","computed","shouldNavigate","inject","getNavigator","createRouteSource","onScopeDispose"],"mappings":"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","file":"index.mjs","sourcesContent":["import { defineComponent } from \"vue\";\n\nimport type { PropType, VNode } from \"vue\";\n\nfunction renderNull() {\n return null;\n}\n\nexport const Match = defineComponent({\n name: \"RouteView.Match\",\n props: {\n segment: {\n type: String as PropType<string>,\n required: true,\n },\n exact: {\n type: Boolean,\n default: false,\n },\n fallback: {\n type: [Object, Function] as PropType<VNode | (() => VNode)>,\n default: undefined,\n },\n },\n render: renderNull,\n});\n\nexport const NotFound = defineComponent({\n name: \"RouteView.NotFound\",\n render: renderNull,\n});\n","import { UNKNOWN_ROUTE } from \"@real-router/core\";\nimport { startsWithSegment } from \"@real-router/route-utils\";\nimport { Fragment, isVNode } from \"vue\";\n\nimport { Match, NotFound } from \"./components\";\n\nimport type { VNode } from \"vue\";\n\ntype FallbackType = VNode | (() => VNode) | undefined;\n\nfunction isSegmentMatch(\n routeName: string,\n fullSegmentName: string,\n exact: boolean,\n): boolean {\n if (exact) {\n return routeName === fullSegmentName;\n }\n\n return startsWithSegment(routeName, fullSegmentName);\n}\n\nfunction normalizeChildren(children: unknown): VNode[] {\n if (Array.isArray(children)) {\n const result: VNode[] = [];\n\n for (const child of children) {\n if (Array.isArray(child)) {\n result.push(...normalizeChildren(child));\n } else if (isVNode(child)) {\n result.push(child);\n }\n }\n\n return result;\n }\n\n if (isVNode(children)) {\n return [children];\n }\n\n return [];\n}\n\nexport function collectElements(children: unknown, result: VNode[]): void {\n const vnodes = normalizeChildren(children);\n\n for (const child of vnodes) {\n if (child.type === Match || child.type === NotFound) {\n result.push(child);\n } else if (child.type === Fragment) {\n collectElements(child.children, result);\n }\n }\n}\n\nexport function buildRenderList(\n elements: VNode[],\n routeName: string,\n nodeName: string,\n): {\n rendered: VNode[];\n activeMatchFound: boolean;\n fallback?: FallbackType;\n} {\n let notFoundChildren: unknown = null;\n let activeMatchFound = false;\n let fallback: FallbackType = undefined;\n const rendered: VNode[] = [];\n\n for (const child of elements) {\n if (child.type === NotFound) {\n notFoundChildren = child.children;\n continue;\n }\n\n const props = child.props as {\n segment: string;\n exact?: boolean;\n fallback?: FallbackType;\n } | null;\n const segment = props?.segment ?? \"\";\n const exact = props?.exact ?? false;\n const fullSegmentName = nodeName ? `${nodeName}.${segment}` : segment;\n const isActive =\n !activeMatchFound && isSegmentMatch(routeName, fullSegmentName, exact);\n\n if (isActive) {\n activeMatchFound = true;\n fallback = props?.fallback;\n rendered.push(child);\n }\n }\n\n if (\n !activeMatchFound &&\n routeName === UNKNOWN_ROUTE &&\n notFoundChildren !== null\n ) {\n const nfElements = elements.filter((element) => element.type === NotFound);\n /* v8 ignore next 3 */\n const lastNf = nfElements.at(-1);\n\n if (lastNf) {\n rendered.push(lastNf);\n }\n }\n\n return { rendered, activeMatchFound, fallback };\n}\n","import { shallowRef, onScopeDispose } from \"vue\";\n\nimport type { RouterSource } from \"@real-router/sources\";\nimport type { ShallowRef } from \"vue\";\n\nexport function useRefFromSource<T>(source: RouterSource<T>): ShallowRef<T> {\n const ref = shallowRef(source.getSnapshot());\n\n const unsub = source.subscribe(() => {\n ref.value = source.getSnapshot();\n });\n\n onScopeDispose(unsub);\n\n return ref;\n}\n","import type { RouteContext as RouteContextType } from \"./types\";\nimport type { Router, Navigator } from \"@real-router/core\";\nimport type { InjectionKey } from \"vue\";\n\nexport const RouterKey: InjectionKey<Router> = Symbol(\"RouterKey\");\n\nexport const NavigatorKey: InjectionKey<Navigator> = Symbol(\"NavigatorKey\");\n\nexport const RouteKey: InjectionKey<RouteContextType> = Symbol(\"RouteKey\");\n","import { inject } from \"vue\";\n\nimport { RouterKey } from \"../context\";\n\nimport type { Router } from \"@real-router/core\";\n\nexport const useRouter = (): Router => {\n const router = inject(RouterKey);\n\n if (!router) {\n throw new Error(\"useRouter must be used within a RouterProvider\");\n }\n\n return router;\n};\n","import { getNavigator } from \"@real-router/core\";\nimport { createRouteNodeSource } from \"@real-router/sources\";\nimport { shallowRef, watch } from \"vue\";\n\nimport { useRefFromSource } from \"../useRefFromSource\";\nimport { useRouter } from \"./useRouter\";\n\nimport type { RouteContext } from \"../types\";\nimport type { State } from \"@real-router/core\";\n\nexport function useRouteNode(nodeName: string): RouteContext {\n const router = useRouter();\n\n const source = createRouteNodeSource(router, nodeName);\n const snapshot = useRefFromSource(source);\n\n const navigator = getNavigator(router);\n\n const route = shallowRef<State | undefined>(snapshot.value.route);\n const previousRoute = shallowRef<State | undefined>(\n snapshot.value.previousRoute,\n );\n\n watch(\n snapshot,\n (newSnapshot) => {\n route.value = newSnapshot.route;\n previousRoute.value = newSnapshot.previousRoute;\n },\n { flush: \"sync\" },\n );\n\n return {\n navigator,\n route,\n previousRoute,\n };\n}\n","import {\n Fragment,\n defineComponent,\n h,\n KeepAlive,\n markRaw,\n Suspense,\n} from \"vue\";\n\nimport { Match, NotFound } from \"./components\";\nimport { buildRenderList, collectElements } from \"./helpers\";\nimport { useRouteNode } from \"../../composables/useRouteNode\";\n\nimport type { Component, VNode } from \"vue\";\n\ntype SlotChildren = Record<string, (() => VNode[]) | undefined> | null;\n\nfunction getSlotContent(vnode: VNode): VNode[] | null {\n const slots = vnode.children as SlotChildren;\n\n return slots?.default?.() ?? null;\n}\n\nfunction getOrCreateWrapper(\n cache: Map<string, Component>,\n segment: string,\n): Component {\n const existing = cache.get(segment);\n\n if (existing) {\n return existing;\n }\n\n const wrapper = markRaw(\n defineComponent({\n name: `KeepAlive-${segment}`,\n setup(_wrapperProps, wrapperCtx) {\n return () => wrapperCtx.slots.default?.();\n },\n }),\n );\n\n cache.set(segment, wrapper);\n\n return wrapper;\n}\n\nfunction wrapWithSuspense(content: VNode, fallback: unknown): VNode {\n if (fallback === undefined) {\n return content;\n }\n\n const fallbackContent =\n typeof fallback === \"function\" ? (fallback as () => VNode)() : fallback;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment\n const suspenseComponent = Suspense as any;\n\n return h(\n suspenseComponent,\n {},\n {\n default: () => content,\n fallback: () => fallbackContent,\n },\n );\n}\n\nconst RouteViewComponent = defineComponent({\n name: \"RouteView\",\n props: {\n nodeName: {\n type: String,\n required: true,\n },\n keepAlive: {\n type: Boolean,\n default: false,\n },\n },\n setup(props, { slots }) {\n const routeContext = useRouteNode(props.nodeName);\n\n const wrapperCache = new Map<string, Component>();\n\n return (): VNode | null => {\n const route = routeContext.route.value;\n\n if (!route) {\n return null;\n }\n\n const elements: VNode[] = [];\n\n collectElements(slots.default?.(), elements);\n\n const { rendered, fallback } = buildRenderList(\n elements,\n route.name,\n props.nodeName,\n );\n\n if (rendered.length === 0) {\n return null;\n }\n\n const activeChild = rendered[0];\n\n if (!props.keepAlive) {\n if (activeChild.type === Match || activeChild.type === NotFound) {\n const content = getSlotContent(activeChild);\n\n if (!content) {\n return null;\n }\n\n const fragment = h(Fragment, content);\n\n return wrapWithSuspense(fragment, fallback);\n }\n\n /* v8 ignore start */\n return null;\n /* v8 ignore stop */\n }\n\n const activeProps = activeChild.props as {\n segment?: string;\n } | null;\n const segment = activeProps?.segment ?? \"__not-found__\";\n\n const WrapperComponent = getOrCreateWrapper(wrapperCache, segment);\n /* v8 ignore next */\n const slotContent = getSlotContent(activeChild) ?? [];\n\n const keepAliveContent = h(KeepAlive, null, {\n default: () =>\n h(WrapperComponent, { key: segment }, { default: () => slotContent }),\n });\n\n return wrapWithSuspense(keepAliveContent, fallback);\n };\n },\n});\n\nexport const RouteView = Object.assign(RouteViewComponent, { Match, NotFound });\n\nexport type {\n RouteViewProps,\n MatchProps as RouteViewMatchProps,\n NotFoundProps as RouteViewNotFoundProps,\n} from \"./types\";\n","import { createActiveRouteSource } from \"@real-router/sources\";\n\nimport { useRefFromSource } from \"../useRefFromSource\";\nimport { useRouter } from \"./useRouter\";\n\nimport type { Params } from \"@real-router/core\";\nimport type { ShallowRef } from \"vue\";\n\nexport function useIsActiveRoute(\n routeName: string,\n params?: Params,\n strict = false,\n ignoreQueryParams = true,\n): ShallowRef<boolean> {\n const router = useRouter();\n\n const source = createActiveRouteSource(router, routeName, params, {\n strict,\n ignoreQueryParams,\n });\n\n return useRefFromSource(source);\n}\n","/**\n * Stable empty object for default params\n */\nexport const EMPTY_PARAMS = Object.freeze({});\n\n/**\n * Stable empty options object\n */\nexport const EMPTY_OPTIONS = Object.freeze({});\n","import { shouldNavigate, buildHref, buildActiveClassName } from \"dom-utils\";\nimport { defineComponent, h, computed } from \"vue\";\n\nimport { useIsActiveRoute } from \"../composables/useIsActiveRoute\";\nimport { useRouter } from \"../composables/useRouter\";\nimport { EMPTY_PARAMS, EMPTY_OPTIONS } from \"../constants\";\n\nimport type { Params, NavigationOptions } from \"@real-router/core\";\nimport type { PropType } from \"vue\";\n\nexport const Link = defineComponent({\n name: \"Link\",\n props: {\n routeName: {\n type: String,\n required: true,\n },\n routeParams: {\n type: Object as PropType<Params>,\n default: () => EMPTY_PARAMS,\n },\n routeOptions: {\n type: Object as PropType<NavigationOptions>,\n default: () => EMPTY_OPTIONS,\n },\n class: {\n type: String,\n default: undefined,\n },\n activeClassName: {\n type: String,\n default: \"active\",\n },\n activeStrict: {\n type: Boolean,\n default: false,\n },\n ignoreQueryParams: {\n type: Boolean,\n default: true,\n },\n target: {\n type: String,\n default: undefined,\n },\n },\n setup(props, { slots, attrs }) {\n const router = useRouter();\n\n const isActive = useIsActiveRoute(\n props.routeName,\n props.routeParams,\n props.activeStrict,\n props.ignoreQueryParams,\n );\n\n const href = computed(() =>\n buildHref(router, props.routeName, props.routeParams),\n );\n\n const finalClassName = computed(() =>\n buildActiveClassName(isActive.value, props.activeClassName, props.class),\n );\n\n const handleClick = (evt: MouseEvent) => {\n if (attrs.onClick && typeof attrs.onClick === \"function\") {\n (attrs.onClick as (evt: MouseEvent) => void)(evt);\n\n if (evt.defaultPrevented) {\n return;\n }\n }\n\n if (!shouldNavigate(evt) || props.target === \"_blank\") {\n return;\n }\n\n evt.preventDefault();\n router\n .navigate(props.routeName, props.routeParams, props.routeOptions)\n .catch(() => {});\n };\n\n return () =>\n h(\n \"a\",\n {\n ...attrs,\n href: href.value,\n class: finalClassName.value,\n target: props.target,\n onClick: handleClick,\n },\n slots.default?.(),\n );\n },\n});\n","import { createErrorSource } from \"@real-router/sources\";\n\nimport { useRefFromSource } from \"../useRefFromSource\";\nimport { useRouter } from \"./useRouter\";\n\nimport type { Router } from \"@real-router/core\";\nimport type { RouterErrorSnapshot, RouterSource } from \"@real-router/sources\";\nimport type { ShallowRef } from \"vue\";\n\nconst cache = new WeakMap<Router, RouterSource<RouterErrorSnapshot>>();\n\nexport function useRouterError(): ShallowRef<RouterErrorSnapshot> {\n const router = useRouter();\n\n let source = cache.get(router);\n\n if (!source) {\n source = createErrorSource(router);\n cache.set(router, source);\n }\n\n return useRefFromSource(source);\n}\n","import { defineComponent, h, ref, watch, computed, Fragment } from \"vue\";\n\nimport { useRouterError } from \"../composables/useRouterError\";\n\nimport type { RouterError, State } from \"@real-router/core\";\nimport type { VNode, PropType } from \"vue\";\n\nexport const RouterErrorBoundary = defineComponent({\n name: \"RouterErrorBoundary\",\n props: {\n fallback: {\n type: Function as PropType<\n (error: RouterError, resetError: () => void) => VNode\n >,\n required: true,\n },\n onError: {\n type: Function as PropType<\n (\n error: RouterError,\n toRoute: State | null,\n fromRoute: State | null,\n ) => void\n >,\n default: undefined,\n },\n },\n setup(props, { slots }) {\n const snapshot = useRouterError();\n const dismissedVersion = ref(-1);\n\n watch(\n () => snapshot.value.version,\n () => {\n if (snapshot.value.error) {\n props.onError?.(\n snapshot.value.error,\n snapshot.value.toRoute,\n snapshot.value.fromRoute,\n );\n }\n },\n { immediate: true },\n );\n\n const visibleError = computed(() =>\n snapshot.value.version > dismissedVersion.value\n ? snapshot.value.error\n : null,\n );\n\n const resetError = () => {\n dismissedVersion.value = snapshot.value.version;\n };\n\n return () => {\n const children = slots.default?.() ?? [];\n const errorVNode = visibleError.value\n ? props.fallback(visibleError.value, resetError)\n : null;\n\n return h(Fragment, null, [...children, errorVNode]);\n };\n },\n});\n\nexport type RouterErrorBoundaryProps = InstanceType<\n typeof RouterErrorBoundary\n>[\"$props\"];\n","import { shouldNavigate, applyLinkA11y } from \"dom-utils\";\n\nimport type { Router, NavigationOptions, Params } from \"@real-router/core\";\nimport type { Directive } from \"vue\";\n\nexport interface LinkDirectiveValue {\n name: string;\n params?: Params;\n options?: NavigationOptions;\n}\n\nlet _router: Router | null = null;\n\nexport function setDirectiveRouter(router: Router): void {\n _router = router;\n}\n\nexport function getDirectiveRouter(): Router {\n if (!_router) {\n /* v8 ignore next 3 -- @preserve Defensive: router always initialized by RouterProvider */\n throw new Error(\n \"v-link directive requires a RouterProvider ancestor. Make sure RouterProvider is mounted.\",\n );\n }\n\n return _router;\n}\n\nconst clickHandlers = new WeakMap<HTMLElement, (evt: MouseEvent) => void>();\nconst keydownHandlers = new WeakMap<\n HTMLElement,\n (evt: KeyboardEvent) => void\n>();\n\nfunction createClickHandler(\n router: Router,\n value: LinkDirectiveValue,\n): (evt: MouseEvent) => void {\n return (evt: MouseEvent) => {\n if (!shouldNavigate(evt)) {\n return;\n }\n\n evt.preventDefault();\n router\n .navigate(value.name, value.params ?? {}, value.options ?? {})\n .catch(() => {});\n };\n}\n\nfunction createKeydownHandler(\n router: Router,\n value: LinkDirectiveValue,\n element: HTMLElement,\n): (evt: KeyboardEvent) => void {\n return (evt: KeyboardEvent) => {\n if (evt.key === \"Enter\" && !(element instanceof HTMLButtonElement)) {\n router\n .navigate(value.name, value.params ?? {}, value.options ?? {})\n .catch(() => {});\n }\n };\n}\n\nfunction attachHandlers(\n element: HTMLElement,\n router: Router,\n value: LinkDirectiveValue,\n): void {\n const handleClick = createClickHandler(router, value);\n const handleKeyDown = createKeydownHandler(router, value, element);\n\n element.addEventListener(\"click\", handleClick);\n element.addEventListener(\"keydown\", handleKeyDown);\n\n clickHandlers.set(element, handleClick);\n keydownHandlers.set(element, handleKeyDown);\n}\n\nfunction detachHandlers(element: HTMLElement): void {\n const clickHandler = clickHandlers.get(element);\n const keydownHandler = keydownHandlers.get(element);\n\n if (clickHandler) {\n element.removeEventListener(\"click\", clickHandler);\n }\n if (keydownHandler) {\n element.removeEventListener(\"keydown\", keydownHandler);\n }\n\n clickHandlers.delete(element);\n keydownHandlers.delete(element);\n}\n\nexport const vLink: Directive<HTMLElement, LinkDirectiveValue> = {\n mounted(element, binding) {\n const router = getDirectiveRouter();\n\n applyLinkA11y(element);\n\n element.style.cursor = \"pointer\";\n\n attachHandlers(element, router, binding.value);\n },\n\n updated(element, binding) {\n const router = getDirectiveRouter();\n\n detachHandlers(element);\n attachHandlers(element, router, binding.value);\n },\n\n beforeUnmount(element) {\n detachHandlers(element);\n },\n};\n","import { inject } from \"vue\";\n\nimport { NavigatorKey } from \"../context\";\n\nimport type { Navigator } from \"@real-router/core\";\n\nexport const useNavigator = (): Navigator => {\n const navigator = inject(NavigatorKey);\n\n if (!navigator) {\n throw new Error(\"useNavigator must be used within a RouterProvider\");\n }\n\n return navigator;\n};\n","import { getPluginApi } from \"@real-router/core/api\";\nimport { getRouteUtils } from \"@real-router/route-utils\";\n\nimport { useRouter } from \"./useRouter\";\n\nimport type { RouteUtils } from \"@real-router/route-utils\";\n\nexport const useRouteUtils = (): RouteUtils => {\n const router = useRouter();\n\n return getRouteUtils(getPluginApi(router).getTree());\n};\n","import { inject } from \"vue\";\n\nimport { RouteKey } from \"../context\";\n\nimport type { RouteContext } from \"../types\";\n\nexport const useRoute = (): RouteContext => {\n const routeContext = inject(RouteKey);\n\n if (!routeContext) {\n throw new Error(\"useRoute must be used within a RouterProvider\");\n }\n\n return routeContext;\n};\n","import { createTransitionSource } from \"@real-router/sources\";\n\nimport { useRefFromSource } from \"../useRefFromSource\";\nimport { useRouter } from \"./useRouter\";\n\nimport type { RouterTransitionSnapshot } from \"@real-router/sources\";\nimport type { ShallowRef } from \"vue\";\n\nexport function useRouterTransition(): ShallowRef<RouterTransitionSnapshot> {\n const router = useRouter();\n\n const source = createTransitionSource(router);\n\n return useRefFromSource(source);\n}\n","import { getNavigator } from \"@real-router/core\";\nimport { createRouteSource } from \"@real-router/sources\";\nimport { shallowRef } from \"vue\";\n\nimport { NavigatorKey, RouteKey, RouterKey } from \"./context\";\nimport { setDirectiveRouter } from \"./directives/vLink\";\n\nimport type { Router } from \"@real-router/core\";\nimport type { Plugin } from \"vue\";\n\nexport function createRouterPlugin(router: Router): Plugin<[]> {\n return {\n install(app): void {\n const navigator = getNavigator(router);\n\n setDirectiveRouter(router);\n\n const source = createRouteSource(router);\n const initialSnapshot = source.getSnapshot();\n\n const route = shallowRef(initialSnapshot.route);\n const previousRoute = shallowRef(initialSnapshot.previousRoute);\n\n source.subscribe(() => {\n const snapshot = source.getSnapshot();\n\n route.value = snapshot.route;\n previousRoute.value = snapshot.previousRoute;\n });\n\n app.provide(RouterKey, router);\n app.provide(NavigatorKey, navigator);\n app.provide(RouteKey, { navigator, route, previousRoute });\n },\n };\n}\n","import { getNavigator } from \"@real-router/core\";\nimport { createRouteSource } from \"@real-router/sources\";\nimport { createRouteAnnouncer } from \"dom-utils\";\nimport {\n defineComponent,\n onMounted,\n onUnmounted,\n provide,\n shallowRef,\n onScopeDispose,\n} from \"vue\";\n\nimport { NavigatorKey, RouteKey, RouterKey } from \"./context\";\nimport { setDirectiveRouter } from \"./directives/vLink\";\n\nimport type { Router } from \"@real-router/core\";\nimport type { PropType } from \"vue\";\n\nexport const RouterProvider = defineComponent({\n name: \"RouterProvider\",\n props: {\n router: {\n type: Object as PropType<Router>,\n required: true,\n },\n announceNavigation: {\n type: Boolean,\n default: false,\n },\n },\n setup(props, { slots }) {\n onMounted(() => {\n if (!props.announceNavigation) {\n return;\n }\n\n const announcer = createRouteAnnouncer(props.router);\n\n onUnmounted(() => {\n announcer.destroy();\n });\n });\n\n const navigator = getNavigator(props.router);\n\n setDirectiveRouter(props.router);\n\n const source = createRouteSource(props.router);\n const initialSnapshot = source.getSnapshot();\n\n const route = shallowRef(initialSnapshot.route);\n const previousRoute = shallowRef(initialSnapshot.previousRoute);\n\n const unsub = source.subscribe(() => {\n const snapshot = source.getSnapshot();\n\n route.value = snapshot.route;\n previousRoute.value = snapshot.previousRoute;\n });\n\n onScopeDispose(unsub);\n\n provide(RouterKey, props.router);\n provide(NavigatorKey, navigator);\n provide(RouteKey, { navigator, route, previousRoute });\n\n return () => slots.default?.();\n },\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"inputs":{"src/components/RouteView/components.ts":{"bytes":597,"imports":[{"path":"vue","kind":"import-statement","external":true}],"format":"esm"},"src/components/RouteView/helpers.ts":{"bytes":2607,"imports":[{"path":"@real-router/core","kind":"import-statement","external":true},{"path":"@real-router/route-utils","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"src/components/RouteView/components.ts","kind":"import-statement","original":"./components"}],"format":"esm"},"src/useRefFromSource.ts":{"bytes":404,"imports":[{"path":"vue","kind":"import-statement","external":true}],"format":"esm"},"src/context.ts":{"bytes":390,"imports":[],"format":"esm"},"src/composables/useRouter.ts":{"bytes":313,"imports":[{"path":"vue","kind":"import-statement","external":true},{"path":"src/context.ts","kind":"import-statement","original":"../context"}],"format":"esm"},"src/composables/useRouteNode.ts":{"bytes":991,"imports":[{"path":"@real-router/core","kind":"import-statement","external":true},{"path":"@real-router/sources","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"src/useRefFromSource.ts","kind":"import-statement","original":"../useRefFromSource"},{"path":"src/composables/useRouter.ts","kind":"import-statement","original":"./useRouter"}],"format":"esm"},"src/components/RouteView/RouteView.ts":{"bytes":3491,"imports":[{"path":"vue","kind":"import-statement","external":true},{"path":"src/components/RouteView/components.ts","kind":"import-statement","original":"./components"},{"path":"src/components/RouteView/helpers.ts","kind":"import-statement","original":"./helpers"},{"path":"src/composables/useRouteNode.ts","kind":"import-statement","original":"../../composables/useRouteNode"}],"format":"esm"},"src/components/RouteView/index.ts":{"bytes":145,"imports":[{"path":"src/components/RouteView/RouteView.ts","kind":"import-statement","original":"./RouteView"}],"format":"esm"},"src/composables/useIsActiveRoute.ts":{"bytes":577,"imports":[{"path":"@real-router/sources","kind":"import-statement","external":true},{"path":"src/useRefFromSource.ts","kind":"import-statement","original":"../useRefFromSource"},{"path":"src/composables/useRouter.ts","kind":"import-statement","original":"./useRouter"}],"format":"esm"},"src/constants.ts":{"bytes":185,"imports":[],"format":"esm"},"src/components/Link.ts":{"bytes":2312,"imports":[{"path":"dom-utils","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"src/composables/useIsActiveRoute.ts","kind":"import-statement","original":"../composables/useIsActiveRoute"},{"path":"src/composables/useRouter.ts","kind":"import-statement","original":"../composables/useRouter"},{"path":"src/constants.ts","kind":"import-statement","original":"../constants"}],"format":"esm"},"src/directives/vLink.ts":{"bytes":2781,"imports":[{"path":"dom-utils","kind":"import-statement","external":true}],"format":"esm"},"src/composables/useNavigator.ts":{"bytes":340,"imports":[{"path":"vue","kind":"import-statement","external":true},{"path":"src/context.ts","kind":"import-statement","original":"../context"}],"format":"esm"},"src/composables/useRouteUtils.ts":{"bytes":355,"imports":[{"path":"@real-router/core/api","kind":"import-statement","external":true},{"path":"@real-router/route-utils","kind":"import-statement","external":true},{"path":"src/composables/useRouter.ts","kind":"import-statement","original":"./useRouter"}],"format":"esm"},"src/composables/useRoute.ts":{"bytes":330,"imports":[{"path":"vue","kind":"import-statement","external":true},{"path":"src/context.ts","kind":"import-statement","original":"../context"}],"format":"esm"},"src/composables/useRouterTransition.ts":{"bytes":468,"imports":[{"path":"@real-router/sources","kind":"import-statement","external":true},{"path":"src/useRefFromSource.ts","kind":"import-statement","original":"../useRefFromSource"},{"path":"src/composables/useRouter.ts","kind":"import-statement","original":"./useRouter"}],"format":"esm"},"src/createRouterPlugin.ts":{"bytes":1201,"imports":[{"path":"@real-router/core","kind":"import-statement","external":true},{"path":"@real-router/sources","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"src/context.ts","kind":"import-statement","original":"./context"},{"path":"src/directives/vLink.ts","kind":"import-statement","original":"./directives/vLink"}],"format":"esm"},"src/RouterProvider.ts":{"bytes":1690,"imports":[{"path":"@real-router/core","kind":"import-statement","external":true},{"path":"@real-router/sources","kind":"import-statement","external":true},{"path":"dom-utils","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"src/context.ts","kind":"import-statement","original":"./context"},{"path":"src/directives/vLink.ts","kind":"import-statement","original":"./directives/vLink"}],"format":"esm"},"src/index.ts":{"bytes":1096,"imports":[{"path":"src/components/RouteView/index.ts","kind":"import-statement","original":"./components/RouteView"},{"path":"src/components/Link.ts","kind":"import-statement","original":"./components/Link"},{"path":"src/directives/vLink.ts","kind":"import-statement","original":"./directives/vLink"},{"path":"src/composables/useRouter.ts","kind":"import-statement","original":"./composables/useRouter"},{"path":"src/composables/useNavigator.ts","kind":"import-statement","original":"./composables/useNavigator"},{"path":"src/composables/useRouteUtils.ts","kind":"import-statement","original":"./composables/useRouteUtils"},{"path":"src/composables/useRoute.ts","kind":"import-statement","original":"./composables/useRoute"},{"path":"src/composables/useRouteNode.ts","kind":"import-statement","original":"./composables/useRouteNode"},{"path":"src/composables/useRouterTransition.ts","kind":"import-statement","original":"./composables/useRouterTransition"},{"path":"src/createRouterPlugin.ts","kind":"import-statement","original":"./createRouterPlugin"},{"path":"src/RouterProvider.ts","kind":"import-statement","original":"./RouterProvider"},{"path":"src/context.ts","kind":"import-statement","original":"./context"}],"format":"esm"}},"outputs":{"dist/esm/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":30926},"dist/esm/index.mjs":{"imports":[{"path":"vue","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"@real-router/core","kind":"import-statement","external":true},{"path":"@real-router/route-utils","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"@real-router/core","kind":"import-statement","external":true},{"path":"@real-router/sources","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"dom-utils","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"@real-router/sources","kind":"import-statement","external":true},{"path":"dom-utils","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"@real-router/core/api","kind":"import-statement","external":true},{"path":"@real-router/route-utils","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"@real-router/sources","kind":"import-statement","external":true},{"path":"@real-router/core","kind":"import-statement","external":true},{"path":"@real-router/sources","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"@real-router/core","kind":"import-statement","external":true},{"path":"@real-router/sources","kind":"import-statement","external":true},{"path":"dom-utils","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true}],"exports":["Link","NavigatorKey","RouteKey","RouteView","RouterKey","RouterProvider","createRouterPlugin","useNavigator","useRoute","useRouteNode","useRouteUtils","useRouter","useRouterTransition","vLink"],"entryPoint":"src/index.ts","inputs":{"src/components/RouteView/RouteView.ts":{"bytesInOutput":2634},"src/components/RouteView/components.ts":{"bytesInOutput":467},"src/components/RouteView/helpers.ts":{"bytesInOutput":2048},"src/composables/useRouteNode.ts":{"bytesInOutput":739},"src/useRefFromSource.ts":{"bytesInOutput":260},"src/composables/useRouter.ts":{"bytesInOutput":202},"src/context.ts":{"bytesInOutput":163},"src/components/RouteView/index.ts":{"bytesInOutput":0},"src/index.ts":{"bytesInOutput":0},"src/components/Link.ts":{"bytesInOutput":1883},"src/composables/useIsActiveRoute.ts":{"bytesInOutput":330},"src/constants.ts":{"bytesInOutput":77},"src/directives/vLink.ts":{"bytesInOutput":2032},"src/composables/useNavigator.ts":{"bytesInOutput":232},"src/composables/useRouteUtils.ts":{"bytesInOutput":229},"src/composables/useRoute.ts":{"bytesInOutput":229},"src/composables/useRouterTransition.ts":{"bytesInOutput":212},"src/createRouterPlugin.ts":{"bytesInOutput":892},"src/RouterProvider.ts":{"bytesInOutput":1535}},"bytes":15172}}}
|
|
1
|
+
{"inputs":{"src/components/RouteView/components.ts":{"bytes":597,"imports":[{"path":"vue","kind":"import-statement","external":true}],"format":"esm"},"src/components/RouteView/helpers.ts":{"bytes":2607,"imports":[{"path":"@real-router/core","kind":"import-statement","external":true},{"path":"@real-router/route-utils","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"src/components/RouteView/components.ts","kind":"import-statement","original":"./components"}],"format":"esm"},"src/useRefFromSource.ts":{"bytes":404,"imports":[{"path":"vue","kind":"import-statement","external":true}],"format":"esm"},"src/context.ts":{"bytes":390,"imports":[],"format":"esm"},"src/composables/useRouter.ts":{"bytes":313,"imports":[{"path":"vue","kind":"import-statement","external":true},{"path":"src/context.ts","kind":"import-statement","original":"../context"}],"format":"esm"},"src/composables/useRouteNode.ts":{"bytes":991,"imports":[{"path":"@real-router/core","kind":"import-statement","external":true},{"path":"@real-router/sources","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"src/useRefFromSource.ts","kind":"import-statement","original":"../useRefFromSource"},{"path":"src/composables/useRouter.ts","kind":"import-statement","original":"./useRouter"}],"format":"esm"},"src/components/RouteView/RouteView.ts":{"bytes":3491,"imports":[{"path":"vue","kind":"import-statement","external":true},{"path":"src/components/RouteView/components.ts","kind":"import-statement","original":"./components"},{"path":"src/components/RouteView/helpers.ts","kind":"import-statement","original":"./helpers"},{"path":"src/composables/useRouteNode.ts","kind":"import-statement","original":"../../composables/useRouteNode"}],"format":"esm"},"src/components/RouteView/index.ts":{"bytes":145,"imports":[{"path":"src/components/RouteView/RouteView.ts","kind":"import-statement","original":"./RouteView"}],"format":"esm"},"src/composables/useIsActiveRoute.ts":{"bytes":577,"imports":[{"path":"@real-router/sources","kind":"import-statement","external":true},{"path":"src/useRefFromSource.ts","kind":"import-statement","original":"../useRefFromSource"},{"path":"src/composables/useRouter.ts","kind":"import-statement","original":"./useRouter"}],"format":"esm"},"src/constants.ts":{"bytes":185,"imports":[],"format":"esm"},"src/components/Link.ts":{"bytes":2312,"imports":[{"path":"dom-utils","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"src/composables/useIsActiveRoute.ts","kind":"import-statement","original":"../composables/useIsActiveRoute"},{"path":"src/composables/useRouter.ts","kind":"import-statement","original":"../composables/useRouter"},{"path":"src/constants.ts","kind":"import-statement","original":"../constants"}],"format":"esm"},"src/composables/useRouterError.ts":{"bytes":662,"imports":[{"path":"@real-router/sources","kind":"import-statement","external":true},{"path":"src/useRefFromSource.ts","kind":"import-statement","original":"../useRefFromSource"},{"path":"src/composables/useRouter.ts","kind":"import-statement","original":"./useRouter"}],"format":"esm"},"src/components/RouterErrorBoundary.ts":{"bytes":1717,"imports":[{"path":"vue","kind":"import-statement","external":true},{"path":"src/composables/useRouterError.ts","kind":"import-statement","original":"../composables/useRouterError"}],"format":"esm"},"src/directives/vLink.ts":{"bytes":2901,"imports":[{"path":"dom-utils","kind":"import-statement","external":true}],"format":"esm"},"src/composables/useNavigator.ts":{"bytes":340,"imports":[{"path":"vue","kind":"import-statement","external":true},{"path":"src/context.ts","kind":"import-statement","original":"../context"}],"format":"esm"},"src/composables/useRouteUtils.ts":{"bytes":355,"imports":[{"path":"@real-router/core/api","kind":"import-statement","external":true},{"path":"@real-router/route-utils","kind":"import-statement","external":true},{"path":"src/composables/useRouter.ts","kind":"import-statement","original":"./useRouter"}],"format":"esm"},"src/composables/useRoute.ts":{"bytes":330,"imports":[{"path":"vue","kind":"import-statement","external":true},{"path":"src/context.ts","kind":"import-statement","original":"../context"}],"format":"esm"},"src/composables/useRouterTransition.ts":{"bytes":468,"imports":[{"path":"@real-router/sources","kind":"import-statement","external":true},{"path":"src/useRefFromSource.ts","kind":"import-statement","original":"../useRefFromSource"},{"path":"src/composables/useRouter.ts","kind":"import-statement","original":"./useRouter"}],"format":"esm"},"src/createRouterPlugin.ts":{"bytes":1104,"imports":[{"path":"@real-router/core","kind":"import-statement","external":true},{"path":"@real-router/sources","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"src/context.ts","kind":"import-statement","original":"./context"},{"path":"src/directives/vLink.ts","kind":"import-statement","original":"./directives/vLink"}],"format":"esm"},"src/RouterProvider.ts":{"bytes":1690,"imports":[{"path":"@real-router/core","kind":"import-statement","external":true},{"path":"@real-router/sources","kind":"import-statement","external":true},{"path":"dom-utils","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"src/context.ts","kind":"import-statement","original":"./context"},{"path":"src/directives/vLink.ts","kind":"import-statement","original":"./directives/vLink"}],"format":"esm"},"src/index.ts":{"bytes":1252,"imports":[{"path":"src/components/RouteView/index.ts","kind":"import-statement","original":"./components/RouteView"},{"path":"src/components/Link.ts","kind":"import-statement","original":"./components/Link"},{"path":"src/components/RouterErrorBoundary.ts","kind":"import-statement","original":"./components/RouterErrorBoundary"},{"path":"src/directives/vLink.ts","kind":"import-statement","original":"./directives/vLink"},{"path":"src/composables/useRouter.ts","kind":"import-statement","original":"./composables/useRouter"},{"path":"src/composables/useNavigator.ts","kind":"import-statement","original":"./composables/useNavigator"},{"path":"src/composables/useRouteUtils.ts","kind":"import-statement","original":"./composables/useRouteUtils"},{"path":"src/composables/useRoute.ts","kind":"import-statement","original":"./composables/useRoute"},{"path":"src/composables/useRouteNode.ts","kind":"import-statement","original":"./composables/useRouteNode"},{"path":"src/composables/useRouterTransition.ts","kind":"import-statement","original":"./composables/useRouterTransition"},{"path":"src/createRouterPlugin.ts","kind":"import-statement","original":"./createRouterPlugin"},{"path":"src/RouterProvider.ts","kind":"import-statement","original":"./RouterProvider"},{"path":"src/context.ts","kind":"import-statement","original":"./context"}],"format":"esm"}},"outputs":{"dist/esm/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":34807},"dist/esm/index.mjs":{"imports":[{"path":"vue","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"@real-router/core","kind":"import-statement","external":true},{"path":"@real-router/route-utils","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"@real-router/core","kind":"import-statement","external":true},{"path":"@real-router/sources","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"dom-utils","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"@real-router/sources","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"@real-router/sources","kind":"import-statement","external":true},{"path":"dom-utils","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"@real-router/core/api","kind":"import-statement","external":true},{"path":"@real-router/route-utils","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"@real-router/sources","kind":"import-statement","external":true},{"path":"@real-router/core","kind":"import-statement","external":true},{"path":"@real-router/sources","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true},{"path":"@real-router/core","kind":"import-statement","external":true},{"path":"@real-router/sources","kind":"import-statement","external":true},{"path":"dom-utils","kind":"import-statement","external":true},{"path":"vue","kind":"import-statement","external":true}],"exports":["Link","NavigatorKey","RouteKey","RouteView","RouterErrorBoundary","RouterKey","RouterProvider","createRouterPlugin","useNavigator","useRoute","useRouteNode","useRouteUtils","useRouter","useRouterTransition","vLink"],"entryPoint":"src/index.ts","inputs":{"src/components/RouteView/RouteView.ts":{"bytesInOutput":2637},"src/components/RouteView/components.ts":{"bytesInOutput":467},"src/components/RouteView/helpers.ts":{"bytesInOutput":2048},"src/composables/useRouteNode.ts":{"bytesInOutput":739},"src/useRefFromSource.ts":{"bytesInOutput":263},"src/composables/useRouter.ts":{"bytesInOutput":202},"src/context.ts":{"bytesInOutput":163},"src/components/RouteView/index.ts":{"bytesInOutput":0},"src/index.ts":{"bytesInOutput":0},"src/components/Link.ts":{"bytesInOutput":1883},"src/composables/useIsActiveRoute.ts":{"bytesInOutput":330},"src/constants.ts":{"bytesInOutput":77},"src/components/RouterErrorBoundary.ts":{"bytesInOutput":1231},"src/composables/useRouterError.ts":{"bytesInOutput":322},"src/directives/vLink.ts":{"bytesInOutput":2152},"src/composables/useNavigator.ts":{"bytesInOutput":232},"src/composables/useRouteUtils.ts":{"bytesInOutput":229},"src/composables/useRoute.ts":{"bytesInOutput":229},"src/composables/useRouterTransition.ts":{"bytesInOutput":212},"src/createRouterPlugin.ts":{"bytesInOutput":892},"src/RouterProvider.ts":{"bytesInOutput":1535}},"bytes":16996}}}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@real-router/vue",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"type": "commonjs",
|
|
5
5
|
"description": "Vue 3 integration for Real-Router",
|
|
6
6
|
"main": "./dist/cjs/index.js",
|
|
@@ -50,16 +50,16 @@
|
|
|
50
50
|
"license": "MIT",
|
|
51
51
|
"sideEffects": false,
|
|
52
52
|
"dependencies": {
|
|
53
|
-
"@real-router/core": "^0.
|
|
54
|
-
"@real-router/route-utils": "^0.1.
|
|
55
|
-
"@real-router/sources": "^0.
|
|
56
|
-
"dom-utils": "^0.2.
|
|
53
|
+
"@real-router/core": "^0.41.0",
|
|
54
|
+
"@real-router/route-utils": "^0.1.7",
|
|
55
|
+
"@real-router/sources": "^0.3.1",
|
|
56
|
+
"dom-utils": "^0.2.3"
|
|
57
57
|
},
|
|
58
58
|
"devDependencies": {
|
|
59
59
|
"@testing-library/jest-dom": "6.9.1",
|
|
60
60
|
"@vue/test-utils": "2.4.6",
|
|
61
61
|
"vue": "3.5.13",
|
|
62
|
-
"@real-router/browser-plugin": "^0.
|
|
62
|
+
"@real-router/browser-plugin": "^0.11.0"
|
|
63
63
|
},
|
|
64
64
|
"peerDependencies": {
|
|
65
65
|
"vue": ">=3.3.0"
|
|
@@ -71,6 +71,7 @@
|
|
|
71
71
|
"type-check": "tsc --noEmit",
|
|
72
72
|
"lint": "eslint --cache src/ tests/ --fix --max-warnings 0",
|
|
73
73
|
"lint:package": "publint",
|
|
74
|
-
"lint:types": "attw --pack ."
|
|
74
|
+
"lint:types": "attw --pack .",
|
|
75
|
+
"build:dist-only": "tsup"
|
|
75
76
|
}
|
|
76
77
|
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { defineComponent, h, ref, watch, computed, Fragment } from "vue";
|
|
2
|
+
|
|
3
|
+
import { useRouterError } from "../composables/useRouterError";
|
|
4
|
+
|
|
5
|
+
import type { RouterError, State } from "@real-router/core";
|
|
6
|
+
import type { VNode, PropType } from "vue";
|
|
7
|
+
|
|
8
|
+
export const RouterErrorBoundary = defineComponent({
|
|
9
|
+
name: "RouterErrorBoundary",
|
|
10
|
+
props: {
|
|
11
|
+
fallback: {
|
|
12
|
+
type: Function as PropType<
|
|
13
|
+
(error: RouterError, resetError: () => void) => VNode
|
|
14
|
+
>,
|
|
15
|
+
required: true,
|
|
16
|
+
},
|
|
17
|
+
onError: {
|
|
18
|
+
type: Function as PropType<
|
|
19
|
+
(
|
|
20
|
+
error: RouterError,
|
|
21
|
+
toRoute: State | null,
|
|
22
|
+
fromRoute: State | null,
|
|
23
|
+
) => void
|
|
24
|
+
>,
|
|
25
|
+
default: undefined,
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
setup(props, { slots }) {
|
|
29
|
+
const snapshot = useRouterError();
|
|
30
|
+
const dismissedVersion = ref(-1);
|
|
31
|
+
|
|
32
|
+
watch(
|
|
33
|
+
() => snapshot.value.version,
|
|
34
|
+
() => {
|
|
35
|
+
if (snapshot.value.error) {
|
|
36
|
+
props.onError?.(
|
|
37
|
+
snapshot.value.error,
|
|
38
|
+
snapshot.value.toRoute,
|
|
39
|
+
snapshot.value.fromRoute,
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
{ immediate: true },
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
const visibleError = computed(() =>
|
|
47
|
+
snapshot.value.version > dismissedVersion.value
|
|
48
|
+
? snapshot.value.error
|
|
49
|
+
: null,
|
|
50
|
+
);
|
|
51
|
+
|
|
52
|
+
const resetError = () => {
|
|
53
|
+
dismissedVersion.value = snapshot.value.version;
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
return () => {
|
|
57
|
+
const children = slots.default?.() ?? [];
|
|
58
|
+
const errorVNode = visibleError.value
|
|
59
|
+
? props.fallback(visibleError.value, resetError)
|
|
60
|
+
: null;
|
|
61
|
+
|
|
62
|
+
return h(Fragment, null, [...children, errorVNode]);
|
|
63
|
+
};
|
|
64
|
+
},
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
export type RouterErrorBoundaryProps = InstanceType<
|
|
68
|
+
typeof RouterErrorBoundary
|
|
69
|
+
>["$props"];
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { createErrorSource } from "@real-router/sources";
|
|
2
|
+
|
|
3
|
+
import { useRefFromSource } from "../useRefFromSource";
|
|
4
|
+
import { useRouter } from "./useRouter";
|
|
5
|
+
|
|
6
|
+
import type { Router } from "@real-router/core";
|
|
7
|
+
import type { RouterErrorSnapshot, RouterSource } from "@real-router/sources";
|
|
8
|
+
import type { ShallowRef } from "vue";
|
|
9
|
+
|
|
10
|
+
const cache = new WeakMap<Router, RouterSource<RouterErrorSnapshot>>();
|
|
11
|
+
|
|
12
|
+
export function useRouterError(): ShallowRef<RouterErrorSnapshot> {
|
|
13
|
+
const router = useRouter();
|
|
14
|
+
|
|
15
|
+
let source = cache.get(router);
|
|
16
|
+
|
|
17
|
+
if (!source) {
|
|
18
|
+
source = createErrorSource(router);
|
|
19
|
+
cache.set(router, source);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
return useRefFromSource(source);
|
|
23
|
+
}
|
|
@@ -8,7 +8,6 @@ import { setDirectiveRouter } from "./directives/vLink";
|
|
|
8
8
|
import type { Router } from "@real-router/core";
|
|
9
9
|
import type { Plugin } from "vue";
|
|
10
10
|
|
|
11
|
-
// eslint-disable-next-line sonarjs/function-return-type -- Plugin<[]> return type is consistent
|
|
12
11
|
export function createRouterPlugin(router: Router): Plugin<[]> {
|
|
13
12
|
return {
|
|
14
13
|
install(app): void {
|
package/src/directives/vLink.ts
CHANGED
|
@@ -51,10 +51,10 @@ function createClickHandler(
|
|
|
51
51
|
function createKeydownHandler(
|
|
52
52
|
router: Router,
|
|
53
53
|
value: LinkDirectiveValue,
|
|
54
|
-
|
|
54
|
+
element: HTMLElement,
|
|
55
55
|
): (evt: KeyboardEvent) => void {
|
|
56
56
|
return (evt: KeyboardEvent) => {
|
|
57
|
-
if (evt.key === "Enter" && !(
|
|
57
|
+
if (evt.key === "Enter" && !(element instanceof HTMLButtonElement)) {
|
|
58
58
|
router
|
|
59
59
|
.navigate(value.name, value.params ?? {}, value.options ?? {})
|
|
60
60
|
.catch(() => {});
|
|
@@ -63,54 +63,54 @@ function createKeydownHandler(
|
|
|
63
63
|
}
|
|
64
64
|
|
|
65
65
|
function attachHandlers(
|
|
66
|
-
|
|
66
|
+
element: HTMLElement,
|
|
67
67
|
router: Router,
|
|
68
68
|
value: LinkDirectiveValue,
|
|
69
69
|
): void {
|
|
70
70
|
const handleClick = createClickHandler(router, value);
|
|
71
|
-
const handleKeyDown = createKeydownHandler(router, value,
|
|
71
|
+
const handleKeyDown = createKeydownHandler(router, value, element);
|
|
72
72
|
|
|
73
|
-
|
|
74
|
-
|
|
73
|
+
element.addEventListener("click", handleClick);
|
|
74
|
+
element.addEventListener("keydown", handleKeyDown);
|
|
75
75
|
|
|
76
|
-
clickHandlers.set(
|
|
77
|
-
keydownHandlers.set(
|
|
76
|
+
clickHandlers.set(element, handleClick);
|
|
77
|
+
keydownHandlers.set(element, handleKeyDown);
|
|
78
78
|
}
|
|
79
79
|
|
|
80
|
-
function detachHandlers(
|
|
81
|
-
const clickHandler = clickHandlers.get(
|
|
82
|
-
const keydownHandler = keydownHandlers.get(
|
|
80
|
+
function detachHandlers(element: HTMLElement): void {
|
|
81
|
+
const clickHandler = clickHandlers.get(element);
|
|
82
|
+
const keydownHandler = keydownHandlers.get(element);
|
|
83
83
|
|
|
84
84
|
if (clickHandler) {
|
|
85
|
-
|
|
85
|
+
element.removeEventListener("click", clickHandler);
|
|
86
86
|
}
|
|
87
87
|
if (keydownHandler) {
|
|
88
|
-
|
|
88
|
+
element.removeEventListener("keydown", keydownHandler);
|
|
89
89
|
}
|
|
90
90
|
|
|
91
|
-
clickHandlers.delete(
|
|
92
|
-
keydownHandlers.delete(
|
|
91
|
+
clickHandlers.delete(element);
|
|
92
|
+
keydownHandlers.delete(element);
|
|
93
93
|
}
|
|
94
94
|
|
|
95
95
|
export const vLink: Directive<HTMLElement, LinkDirectiveValue> = {
|
|
96
|
-
mounted(
|
|
96
|
+
mounted(element, binding) {
|
|
97
97
|
const router = getDirectiveRouter();
|
|
98
98
|
|
|
99
|
-
applyLinkA11y(
|
|
99
|
+
applyLinkA11y(element);
|
|
100
100
|
|
|
101
|
-
|
|
101
|
+
element.style.cursor = "pointer";
|
|
102
102
|
|
|
103
|
-
attachHandlers(
|
|
103
|
+
attachHandlers(element, router, binding.value);
|
|
104
104
|
},
|
|
105
105
|
|
|
106
|
-
updated(
|
|
106
|
+
updated(element, binding) {
|
|
107
107
|
const router = getDirectiveRouter();
|
|
108
108
|
|
|
109
|
-
detachHandlers(
|
|
110
|
-
attachHandlers(
|
|
109
|
+
detachHandlers(element);
|
|
110
|
+
attachHandlers(element, router, binding.value);
|
|
111
111
|
},
|
|
112
112
|
|
|
113
|
-
beforeUnmount(
|
|
114
|
-
detachHandlers(
|
|
113
|
+
beforeUnmount(element) {
|
|
114
|
+
detachHandlers(element);
|
|
115
115
|
},
|
|
116
116
|
};
|
package/src/index.ts
CHANGED
|
@@ -3,6 +3,8 @@ export { RouteView } from "./components/RouteView";
|
|
|
3
3
|
|
|
4
4
|
export { Link } from "./components/Link";
|
|
5
5
|
|
|
6
|
+
export { RouterErrorBoundary } from "./components/RouterErrorBoundary";
|
|
7
|
+
|
|
6
8
|
// Directives
|
|
7
9
|
export { vLink } from "./directives/vLink";
|
|
8
10
|
|
|
@@ -30,6 +32,8 @@ export { RouterKey, NavigatorKey, RouteKey } from "./context";
|
|
|
30
32
|
// Types
|
|
31
33
|
export type { LinkProps } from "./types";
|
|
32
34
|
|
|
35
|
+
export type { RouterErrorBoundaryProps } from "./components/RouterErrorBoundary";
|
|
36
|
+
|
|
33
37
|
export type { LinkDirectiveValue } from "./directives/vLink";
|
|
34
38
|
|
|
35
39
|
export type {
|