@cmj/juice 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/Link.d.ts +74 -0
- package/dist/client/Link.d.ts.map +1 -0
- package/dist/client/Link.js +132 -0
- package/dist/client/Link.js.map +1 -0
- package/dist/client/client.d.ts +1 -1
- package/dist/client/client.d.ts.map +1 -1
- package/dist/client/client.js +6 -34
- package/dist/client/client.js.map +1 -1
- package/dist/client/hooks.d.ts +85 -0
- package/dist/client/hooks.d.ts.map +1 -0
- package/dist/client/hooks.js +82 -0
- package/dist/client/hooks.js.map +1 -0
- package/dist/client/index.d.ts +3 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +3 -1
- package/dist/client/index.js.map +1 -1
- package/dist/client/nav.d.ts +40 -0
- package/dist/client/nav.d.ts.map +1 -0
- package/dist/client/nav.js +85 -0
- package/dist/client/nav.js.map +1 -0
- package/dist/compiler/dts.d.ts +33 -0
- package/dist/compiler/dts.d.ts.map +1 -0
- package/dist/compiler/dts.js +102 -0
- package/dist/compiler/dts.js.map +1 -0
- package/dist/compiler/plugin.d.ts.map +1 -1
- package/dist/compiler/plugin.js +42 -1
- package/dist/compiler/plugin.js.map +1 -1
- package/dist/runtime/index.d.ts +1 -1
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/types.d.ts +46 -11
- package/dist/runtime/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { type AnchorHTMLAttributes, type ReactNode, type CSSProperties, type Ref } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Prefetch strategy for the `<Link>` component.
|
|
4
|
+
*
|
|
5
|
+
* - `'hover'` — Prefetch when the user hovers or focuses the link. *(default)*
|
|
6
|
+
* - `'viewport'` — Prefetch when the link scrolls into the viewport.
|
|
7
|
+
* - `'none'` — No automatic prefetching.
|
|
8
|
+
*/
|
|
9
|
+
export type PrefetchStrategy = 'hover' | 'viewport' | 'none';
|
|
10
|
+
/**
|
|
11
|
+
* Props for the `<Link>` component.
|
|
12
|
+
*
|
|
13
|
+
* Extends all standard `<a>` HTML attributes so you can pass
|
|
14
|
+
* `target`, `rel`, `aria-*`, `data-*`, etc. directly.
|
|
15
|
+
*/
|
|
16
|
+
export interface LinkProps extends Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'href'> {
|
|
17
|
+
/** The URL to navigate to. Required. */
|
|
18
|
+
href: string;
|
|
19
|
+
/**
|
|
20
|
+
* Prefetch strategy.
|
|
21
|
+
* @default 'hover'
|
|
22
|
+
*/
|
|
23
|
+
prefetch?: PrefetchStrategy;
|
|
24
|
+
/**
|
|
25
|
+
* Replace the current history entry instead of pushing a new one.
|
|
26
|
+
* @default false
|
|
27
|
+
*/
|
|
28
|
+
replace?: boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Scroll to the top after navigation.
|
|
31
|
+
* @default true
|
|
32
|
+
*/
|
|
33
|
+
scroll?: boolean;
|
|
34
|
+
/**
|
|
35
|
+
* CSS class name applied when the link's `href` matches the
|
|
36
|
+
* current pathname.
|
|
37
|
+
*/
|
|
38
|
+
activeClassName?: string;
|
|
39
|
+
/**
|
|
40
|
+
* Inline styles applied when the link's `href` matches the
|
|
41
|
+
* current pathname.
|
|
42
|
+
*/
|
|
43
|
+
activeStyle?: CSSProperties;
|
|
44
|
+
/** React ref forwarded to the underlying `<a>` element. */
|
|
45
|
+
ref?: Ref<HTMLAnchorElement>;
|
|
46
|
+
children?: ReactNode;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Client-side navigation link for Juice SPA apps.
|
|
50
|
+
*
|
|
51
|
+
* Renders a standard `<a>` tag that works with or without JavaScript.
|
|
52
|
+
* When the Navigation API is available and `initNavigation()` has been
|
|
53
|
+
* called, clicking this link fetches an RSC payload instead of causing
|
|
54
|
+
* a full page reload.
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* ```tsx
|
|
58
|
+
* import { Link } from '@cmj/juice/client';
|
|
59
|
+
*
|
|
60
|
+
* // Basic usage
|
|
61
|
+
* <Link href="/about">About</Link>
|
|
62
|
+
*
|
|
63
|
+
* // Viewport prefetching
|
|
64
|
+
* <Link href="/products" prefetch="viewport">Products</Link>
|
|
65
|
+
*
|
|
66
|
+
* // Active link styling
|
|
67
|
+
* <Link href="/blog" activeClassName="nav-active">Blog</Link>
|
|
68
|
+
*
|
|
69
|
+
* // Replace history entry
|
|
70
|
+
* <Link href="/login" replace>Log in</Link>
|
|
71
|
+
* ```
|
|
72
|
+
*/
|
|
73
|
+
export declare function Link(props: LinkProps): ReactNode;
|
|
74
|
+
//# sourceMappingURL=Link.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Link.d.ts","sourceRoot":"","sources":["../../src/client/Link.ts"],"names":[],"mappings":"AAOA,OAAO,EAKL,KAAK,oBAAoB,EACzB,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,GAAG,EACT,MAAM,OAAO,CAAC;AAYf;;;;;;GAMG;AACH,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM,CAAC;AAE7D;;;;;GAKG;AACH,MAAM,WAAW,SAAU,SAAQ,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACtF,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAE5B;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;;OAGG;IACH,WAAW,CAAC,EAAE,aAAa,CAAC;IAE5B,2DAA2D;IAC3D,GAAG,CAAC,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAE7B,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAmBD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAmHhD"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
// ── juice/client — <Link> component ───────────────────────────────
|
|
2
|
+
// Declarative SPA navigation for Juice. Renders a standard `<a>` tag
|
|
3
|
+
// with built-in RSC prefetching and active-state detection.
|
|
4
|
+
//
|
|
5
|
+
// Progressive enhancement: works as a normal link without JS.
|
|
6
|
+
// ──────────────────────────────────────────────────────────────────
|
|
7
|
+
import { createElement, useRef, useEffect, useSyncExternalStore, } from 'react';
|
|
8
|
+
import { prefetchRSC, isSameOrigin, _subscribeToPathname, _getPathnameSnapshot, _getServerPathnameSnapshot, } from './nav.js';
|
|
9
|
+
// ── Helpers ───────────────────────────────────────────────────────
|
|
10
|
+
/**
|
|
11
|
+
* Check if a pathname matches the link's href.
|
|
12
|
+
* Exact match — `/about` matches `/about`, not `/about/team`.
|
|
13
|
+
*/
|
|
14
|
+
function isActive(href, pathname) {
|
|
15
|
+
try {
|
|
16
|
+
const url = new URL(href, 'http://n');
|
|
17
|
+
return url.pathname === pathname;
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return href === pathname;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
// ── Component ─────────────────────────────────────────────────────
|
|
24
|
+
/**
|
|
25
|
+
* Client-side navigation link for Juice SPA apps.
|
|
26
|
+
*
|
|
27
|
+
* Renders a standard `<a>` tag that works with or without JavaScript.
|
|
28
|
+
* When the Navigation API is available and `initNavigation()` has been
|
|
29
|
+
* called, clicking this link fetches an RSC payload instead of causing
|
|
30
|
+
* a full page reload.
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```tsx
|
|
34
|
+
* import { Link } from '@cmj/juice/client';
|
|
35
|
+
*
|
|
36
|
+
* // Basic usage
|
|
37
|
+
* <Link href="/about">About</Link>
|
|
38
|
+
*
|
|
39
|
+
* // Viewport prefetching
|
|
40
|
+
* <Link href="/products" prefetch="viewport">Products</Link>
|
|
41
|
+
*
|
|
42
|
+
* // Active link styling
|
|
43
|
+
* <Link href="/blog" activeClassName="nav-active">Blog</Link>
|
|
44
|
+
*
|
|
45
|
+
* // Replace history entry
|
|
46
|
+
* <Link href="/login" replace>Log in</Link>
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
export function Link(props) {
|
|
50
|
+
const { href, prefetch = 'hover', replace = false, scroll, activeClassName, activeStyle, className, style, children, onPointerEnter, onFocus, ref: externalRef, ...rest } = props;
|
|
51
|
+
const internalRef = useRef(null);
|
|
52
|
+
// Merge refs
|
|
53
|
+
const setRef = (el) => {
|
|
54
|
+
internalRef.current = el;
|
|
55
|
+
if (typeof externalRef === 'function') {
|
|
56
|
+
externalRef(el);
|
|
57
|
+
}
|
|
58
|
+
else if (externalRef && typeof externalRef === 'object') {
|
|
59
|
+
externalRef.current = el;
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
// ── Active state ──────────────────────────────────────────────
|
|
63
|
+
const pathname = useSyncExternalStore(_subscribeToPathname, _getPathnameSnapshot, _getServerPathnameSnapshot);
|
|
64
|
+
const active = isActive(href, pathname);
|
|
65
|
+
// ── Viewport prefetching ──────────────────────────────────────
|
|
66
|
+
useEffect(() => {
|
|
67
|
+
if (prefetch !== 'viewport')
|
|
68
|
+
return;
|
|
69
|
+
const el = internalRef.current;
|
|
70
|
+
if (!el)
|
|
71
|
+
return;
|
|
72
|
+
if (!('IntersectionObserver' in globalThis))
|
|
73
|
+
return;
|
|
74
|
+
const observer = new IntersectionObserver((entries) => {
|
|
75
|
+
for (const entry of entries) {
|
|
76
|
+
if (entry.isIntersecting) {
|
|
77
|
+
const resolvedUrl = new URL(href, location.href).href;
|
|
78
|
+
prefetchRSC(resolvedUrl);
|
|
79
|
+
observer.unobserve(entry.target);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}, { rootMargin: '200px' });
|
|
83
|
+
observer.observe(el);
|
|
84
|
+
return () => observer.disconnect();
|
|
85
|
+
}, [href, prefetch]);
|
|
86
|
+
// ── Hover/focus prefetching ───────────────────────────────────
|
|
87
|
+
const handlePointerEnter = (e) => {
|
|
88
|
+
if (prefetch === 'hover' && isSameOrigin(href)) {
|
|
89
|
+
prefetchRSC(new URL(href, location.href).href);
|
|
90
|
+
}
|
|
91
|
+
onPointerEnter?.(e);
|
|
92
|
+
};
|
|
93
|
+
const handleFocus = (e) => {
|
|
94
|
+
if (prefetch === 'hover' && isSameOrigin(href)) {
|
|
95
|
+
prefetchRSC(new URL(href, location.href).href);
|
|
96
|
+
}
|
|
97
|
+
onFocus?.(e);
|
|
98
|
+
};
|
|
99
|
+
// ── Merge class names ─────────────────────────────────────────
|
|
100
|
+
const resolvedClassName = active && activeClassName
|
|
101
|
+
? className
|
|
102
|
+
? `${className} ${activeClassName}`
|
|
103
|
+
: activeClassName
|
|
104
|
+
: className;
|
|
105
|
+
// ── Merge styles ──────────────────────────────────────────────
|
|
106
|
+
const resolvedStyle = active && activeStyle
|
|
107
|
+
? style
|
|
108
|
+
? { ...style, ...activeStyle }
|
|
109
|
+
: activeStyle
|
|
110
|
+
: style;
|
|
111
|
+
// ── Build anchor props ────────────────────────────────────────
|
|
112
|
+
const anchorProps = {
|
|
113
|
+
...rest,
|
|
114
|
+
href,
|
|
115
|
+
ref: setRef,
|
|
116
|
+
className: resolvedClassName,
|
|
117
|
+
style: resolvedStyle,
|
|
118
|
+
onPointerEnter: handlePointerEnter,
|
|
119
|
+
onFocus: handleFocus,
|
|
120
|
+
'data-active': active || undefined,
|
|
121
|
+
};
|
|
122
|
+
// Signal prefetch strategy to the DOM for IntersectionObserver
|
|
123
|
+
if (prefetch === 'viewport') {
|
|
124
|
+
anchorProps['data-prefetch'] = '';
|
|
125
|
+
}
|
|
126
|
+
// Signal replace intent
|
|
127
|
+
if (replace) {
|
|
128
|
+
anchorProps['data-replace'] = '';
|
|
129
|
+
}
|
|
130
|
+
return createElement('a', anchorProps, children);
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=Link.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Link.js","sourceRoot":"","sources":["../../src/client/Link.ts"],"names":[],"mappings":"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"}
|
package/dist/client/client.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type ReactNode } from 'react';
|
|
2
|
+
export { RSC_CONTENT_TYPE, prefetchRSC, isSameOrigin, _subscribeToPathname, _getPathnameSnapshot, _getServerPathnameSnapshot, } from './nav.js';
|
|
2
3
|
/**
|
|
3
4
|
* Callback to update the React root with a new RSC payload.
|
|
4
5
|
* Set by `initNavigation()`.
|
|
@@ -53,5 +54,4 @@ export interface NavigationOptions {
|
|
|
53
54
|
* ```
|
|
54
55
|
*/
|
|
55
56
|
export declare function initNavigation(setPage: PageSetter, options?: NavigationOptions): () => void;
|
|
56
|
-
export {};
|
|
57
57
|
//# sourceMappingURL=client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client/client.ts"],"names":[],"mappings":"AASA,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client/client.ts"],"names":[],"mappings":"AASA,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAWxD,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,oBAAoB,EACpB,oBAAoB,EACpB,0BAA0B,GAC3B,MAAM,UAAU,CAAC;AAElB;;;GAGG;AACH,KAAK,UAAU,GAAG,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;AAE5C;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;OAGG;IACH,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAChE;AAuED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,UAAU,EACnB,OAAO,GAAE,iBAAsB,GAC9B,MAAM,IAAI,CA+EZ"}
|
package/dist/client/client.js
CHANGED
|
@@ -8,24 +8,9 @@
|
|
|
8
8
|
// ────────────────────────────────────────────────────────────────────
|
|
9
9
|
import { startTransition } from 'react';
|
|
10
10
|
import { createFromFetch } from 'react-server-dom-webpack/client.browser';
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
*/
|
|
15
|
-
const RSC_CONTENT_TYPE = 'text/x-component';
|
|
16
|
-
// ── Prefetch cache ────────────────────────────────────────────────
|
|
17
|
-
const prefetchCache = new Map();
|
|
18
|
-
function prefetchRSC(url) {
|
|
19
|
-
if (prefetchCache.has(url))
|
|
20
|
-
return;
|
|
21
|
-
const promise = fetch(url, {
|
|
22
|
-
headers: { 'Accept': RSC_CONTENT_TYPE },
|
|
23
|
-
priority: 'low',
|
|
24
|
-
});
|
|
25
|
-
prefetchCache.set(url, promise);
|
|
26
|
-
// Expire after 30 seconds to avoid stale data
|
|
27
|
-
setTimeout(() => prefetchCache.delete(url), 30_000);
|
|
28
|
-
}
|
|
11
|
+
import { RSC_CONTENT_TYPE, prefetchRSC, _consumePrefetch, isSameOrigin, } from './nav.js';
|
|
12
|
+
// Re-export shared utilities for backward compatibility
|
|
13
|
+
export { RSC_CONTENT_TYPE, prefetchRSC, isSameOrigin, _subscribeToPathname, _getPathnameSnapshot, _getServerPathnameSnapshot, } from './nav.js';
|
|
29
14
|
// ── Prefetch observer ─────────────────────────────────────────────
|
|
30
15
|
function setupPrefetching() {
|
|
31
16
|
// Prefetch on hover (desktop) and focus (keyboard nav)
|
|
@@ -80,16 +65,6 @@ function setupPrefetching() {
|
|
|
80
65
|
}).observe(document.body, { childList: true, subtree: true });
|
|
81
66
|
}
|
|
82
67
|
}
|
|
83
|
-
// ── Helpers ───────────────────────────────────────────────────────
|
|
84
|
-
function isSameOrigin(href) {
|
|
85
|
-
try {
|
|
86
|
-
const url = new URL(href, location.href);
|
|
87
|
-
return url.origin === location.origin;
|
|
88
|
-
}
|
|
89
|
-
catch {
|
|
90
|
-
return false;
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
68
|
// ── View Transitions wrapper ──────────────────────────────────────
|
|
94
69
|
function withViewTransition(enabled, fn) {
|
|
95
70
|
if (enabled && 'startViewTransition' in document) {
|
|
@@ -166,15 +141,12 @@ export function initNavigation(setPage, options = {}) {
|
|
|
166
141
|
scroll: 'after-transition',
|
|
167
142
|
async handler() {
|
|
168
143
|
const url = event.destination.url;
|
|
169
|
-
// Use prefetched response if available
|
|
170
|
-
const fetchPromise =
|
|
171
|
-
|
|
172
|
-
: fetch(url, {
|
|
144
|
+
// Use prefetched response if available, otherwise fetch
|
|
145
|
+
const fetchPromise = _consumePrefetch(url)
|
|
146
|
+
?? fetch(url, {
|
|
173
147
|
headers: { 'Accept': RSC_CONTENT_TYPE },
|
|
174
148
|
signal: event.signal,
|
|
175
149
|
});
|
|
176
|
-
// Clear the prefetch cache entry
|
|
177
|
-
prefetchCache.delete(url);
|
|
178
150
|
// Decode the RSC payload
|
|
179
151
|
const rscPayload = createFromFetch(fetchPromise, {
|
|
180
152
|
callServer,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client/client.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,oEAAoE;AACpE,6DAA6D;AAC7D,EAAE;AACF,oDAAoD;AACpD,+DAA+D;AAC/D,8CAA8C;AAC9C,uEAAuE;AAEvE,OAAO,EAAE,eAAe,EAAkB,MAAM,OAAO,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAE1E
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Return type of `useRouter()`.
|
|
3
|
+
*/
|
|
4
|
+
export interface Router {
|
|
5
|
+
/** The current pathname (reactive — re-renders on navigation). */
|
|
6
|
+
pathname: string;
|
|
7
|
+
/**
|
|
8
|
+
* Navigate to a URL, pushing a new history entry.
|
|
9
|
+
*
|
|
10
|
+
* @param url - The URL to navigate to.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```ts
|
|
14
|
+
* const router = useRouter();
|
|
15
|
+
* router.push('/product/42');
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
push: (url: string) => void;
|
|
19
|
+
/**
|
|
20
|
+
* Navigate to a URL, replacing the current history entry.
|
|
21
|
+
*
|
|
22
|
+
* @param url - The URL to navigate to.
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```ts
|
|
26
|
+
* const router = useRouter();
|
|
27
|
+
* router.replace('/login');
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
replace: (url: string) => void;
|
|
31
|
+
/**
|
|
32
|
+
* Prefetch an RSC payload for a URL. Idempotent — duplicate
|
|
33
|
+
* calls for the same URL are no-ops until the cache expires.
|
|
34
|
+
*
|
|
35
|
+
* @param url - The URL to prefetch.
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```ts
|
|
39
|
+
* const router = useRouter();
|
|
40
|
+
* router.prefetch('/dashboard');
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
prefetch: (url: string) => void;
|
|
44
|
+
/**
|
|
45
|
+
* Go back in history. Equivalent to `history.back()`.
|
|
46
|
+
*/
|
|
47
|
+
back: () => void;
|
|
48
|
+
/**
|
|
49
|
+
* Go forward in history. Equivalent to `history.forward()`.
|
|
50
|
+
*/
|
|
51
|
+
forward: () => void;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Programmatic navigation hook for Juice SPA apps.
|
|
55
|
+
*
|
|
56
|
+
* Returns a stable `Router` object with `push`, `replace`, `prefetch`,
|
|
57
|
+
* `back`, `forward`, and a reactive `pathname`.
|
|
58
|
+
*
|
|
59
|
+
* Uses the Navigation API when available. Falls back to `location.assign`
|
|
60
|
+
* when the Navigation API is absent (MPA mode — full page reload).
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* ```tsx
|
|
64
|
+
* 'use client';
|
|
65
|
+
* import { useRouter } from '@cmj/juice/client';
|
|
66
|
+
*
|
|
67
|
+
* function SearchBar() {
|
|
68
|
+
* const router = useRouter();
|
|
69
|
+
*
|
|
70
|
+
* function handleSubmit(e: FormEvent) {
|
|
71
|
+
* e.preventDefault();
|
|
72
|
+
* const q = new FormData(e.currentTarget).get('q');
|
|
73
|
+
* router.push(`/search?q=${encodeURIComponent(q)}`);
|
|
74
|
+
* }
|
|
75
|
+
*
|
|
76
|
+
* return (
|
|
77
|
+
* <form onSubmit={handleSubmit}>
|
|
78
|
+
* <input name="q" />
|
|
79
|
+
* </form>
|
|
80
|
+
* );
|
|
81
|
+
* }
|
|
82
|
+
* ```
|
|
83
|
+
*/
|
|
84
|
+
export declare function useRouter(): Router;
|
|
85
|
+
//# sourceMappingURL=hooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/client/hooks.ts"],"names":[],"mappings":"AAmBA;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,kEAAkE;IAClE,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;;;;;;;;OAUG;IACH,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAE5B;;;;;;;;;;OAUG;IACH,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAE/B;;;;;;;;;;;OAWG;IACH,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAEhC;;OAEG;IACH,IAAI,EAAE,MAAM,IAAI,CAAC;IAEjB;;OAEG;IACH,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAID;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAgDlC"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
// ── juice/client — useRouter hook ─────────────────────────────────
|
|
2
|
+
// Programmatic navigation for Juice SPA apps. Uses the Navigation API
|
|
3
|
+
// under the hood — the existing `initNavigation()` interceptor handles
|
|
4
|
+
// RSC payload fetching automatically.
|
|
5
|
+
//
|
|
6
|
+
// ~500 bytes minified. Zero dependencies beyond React 19.
|
|
7
|
+
// ──────────────────────────────────────────────────────────────────
|
|
8
|
+
import { useSyncExternalStore, useCallback, useMemo } from 'react';
|
|
9
|
+
import { prefetchRSC, _subscribeToPathname, _getPathnameSnapshot, _getServerPathnameSnapshot, } from './nav.js';
|
|
10
|
+
// ── Hook ──────────────────────────────────────────────────────────
|
|
11
|
+
/**
|
|
12
|
+
* Programmatic navigation hook for Juice SPA apps.
|
|
13
|
+
*
|
|
14
|
+
* Returns a stable `Router` object with `push`, `replace`, `prefetch`,
|
|
15
|
+
* `back`, `forward`, and a reactive `pathname`.
|
|
16
|
+
*
|
|
17
|
+
* Uses the Navigation API when available. Falls back to `location.assign`
|
|
18
|
+
* when the Navigation API is absent (MPA mode — full page reload).
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```tsx
|
|
22
|
+
* 'use client';
|
|
23
|
+
* import { useRouter } from '@cmj/juice/client';
|
|
24
|
+
*
|
|
25
|
+
* function SearchBar() {
|
|
26
|
+
* const router = useRouter();
|
|
27
|
+
*
|
|
28
|
+
* function handleSubmit(e: FormEvent) {
|
|
29
|
+
* e.preventDefault();
|
|
30
|
+
* const q = new FormData(e.currentTarget).get('q');
|
|
31
|
+
* router.push(`/search?q=${encodeURIComponent(q)}`);
|
|
32
|
+
* }
|
|
33
|
+
*
|
|
34
|
+
* return (
|
|
35
|
+
* <form onSubmit={handleSubmit}>
|
|
36
|
+
* <input name="q" />
|
|
37
|
+
* </form>
|
|
38
|
+
* );
|
|
39
|
+
* }
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
export function useRouter() {
|
|
43
|
+
const pathname = useSyncExternalStore(_subscribeToPathname, _getPathnameSnapshot, _getServerPathnameSnapshot);
|
|
44
|
+
const push = useCallback((url) => {
|
|
45
|
+
if ('navigation' in globalThis) {
|
|
46
|
+
globalThis.navigation.navigate(url, { history: 'push' });
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
globalThis.location.assign(url);
|
|
50
|
+
}
|
|
51
|
+
}, []);
|
|
52
|
+
const replace = useCallback((url) => {
|
|
53
|
+
if ('navigation' in globalThis) {
|
|
54
|
+
globalThis.navigation.navigate(url, { history: 'replace' });
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
globalThis.location.replace(url);
|
|
58
|
+
}
|
|
59
|
+
}, []);
|
|
60
|
+
const prefetch = useCallback((url) => {
|
|
61
|
+
const resolved = new URL(url, globalThis.location?.href ?? 'http://localhost').href;
|
|
62
|
+
prefetchRSC(resolved);
|
|
63
|
+
}, []);
|
|
64
|
+
const back = useCallback(() => {
|
|
65
|
+
if ('navigation' in globalThis) {
|
|
66
|
+
globalThis.navigation.back();
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
globalThis.history?.back();
|
|
70
|
+
}
|
|
71
|
+
}, []);
|
|
72
|
+
const forward = useCallback(() => {
|
|
73
|
+
if ('navigation' in globalThis) {
|
|
74
|
+
globalThis.navigation.forward();
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
globalThis.history?.forward();
|
|
78
|
+
}
|
|
79
|
+
}, []);
|
|
80
|
+
return useMemo(() => ({ pathname, push, replace, prefetch, back, forward }), [pathname, push, replace, prefetch, back, forward]);
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/client/hooks.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sEAAsE;AACtE,uEAAuE;AACvE,sCAAsC;AACtC,EAAE;AACF,0DAA0D;AAC1D,qEAAqE;AAErE,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEnE,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,oBAAoB,EACpB,0BAA0B,GAC3B,MAAM,UAAU,CAAC;AA8DlB,qEAAqE;AAErE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,UAAU,SAAS;IACvB,MAAM,QAAQ,GAAG,oBAAoB,CACnC,oBAAoB,EACpB,oBAAoB,EACpB,0BAA0B,CAC3B,CAAC;IAEF,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,GAAW,EAAE,EAAE;QACvC,IAAI,YAAY,IAAI,UAAU,EAAE,CAAC;YAC9B,UAAkB,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QACpE,CAAC;aAAM,CAAC;YACN,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAClC,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,GAAW,EAAE,EAAE;QAC1C,IAAI,YAAY,IAAI,UAAU,EAAE,CAAC;YAC9B,UAAkB,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QACvE,CAAC;aAAM,CAAC;YACN,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACnC,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,GAAW,EAAE,EAAE;QAC3C,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,QAAQ,EAAE,IAAI,IAAI,kBAAkB,CAAC,CAAC,IAAI,CAAC;QACpF,WAAW,CAAC,QAAQ,CAAC,CAAC;IACxB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE;QAC5B,IAAI,YAAY,IAAI,UAAU,EAAE,CAAC;YAC9B,UAAkB,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;QAC7B,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE;QAC/B,IAAI,YAAY,IAAI,UAAU,EAAE,CAAC;YAC9B,UAAkB,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC;QAChC,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,OAAO,CACZ,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAC5D,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CACnD,CAAC;AACJ,CAAC"}
|
package/dist/client/index.d.ts
CHANGED
|
@@ -1,2 +1,4 @@
|
|
|
1
|
-
export { initNavigation, type NavigationOptions } from './client.js';
|
|
1
|
+
export { initNavigation, prefetchRSC, type NavigationOptions } from './client.js';
|
|
2
|
+
export { Link, type LinkProps, type PrefetchStrategy } from './Link.js';
|
|
3
|
+
export { useRouter, type Router } from './hooks.js';
|
|
2
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAClF,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,WAAW,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/client/index.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
// ── juice/client barrel export ────────────────────────────────────
|
|
2
|
-
export { initNavigation } from './client.js';
|
|
2
|
+
export { initNavigation, prefetchRSC } from './client.js';
|
|
3
|
+
export { Link } from './Link.js';
|
|
4
|
+
export { useRouter } from './hooks.js';
|
|
3
5
|
//# sourceMappingURL=index.js.map
|
package/dist/client/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,OAAO,EAAE,cAAc,EAA0B,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,OAAO,EAAE,cAAc,EAAE,WAAW,EAA0B,MAAM,aAAa,CAAC;AAClF,OAAO,EAAE,IAAI,EAAyC,MAAM,WAAW,CAAC;AACxE,OAAO,EAAE,SAAS,EAAe,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The RSC content type used for payload negotiation.
|
|
3
|
+
* Must match the server's `RSC_CONTENT_TYPE` in `rsc.ts`.
|
|
4
|
+
*/
|
|
5
|
+
export declare const RSC_CONTENT_TYPE = "text/x-component";
|
|
6
|
+
/**
|
|
7
|
+
* Prefetch an RSC payload for a given URL. Idempotent — duplicate
|
|
8
|
+
* calls for the same URL are no-ops until the cache entry expires.
|
|
9
|
+
*
|
|
10
|
+
* Used internally by `initNavigation()` and exported for use by
|
|
11
|
+
* `<Link prefetch="hover">` and `useRouter().prefetch()`.
|
|
12
|
+
*/
|
|
13
|
+
export declare function prefetchRSC(url: string): void;
|
|
14
|
+
/**
|
|
15
|
+
* Get a prefetched response from the cache, if available.
|
|
16
|
+
* Removes the entry from cache (one-time read).
|
|
17
|
+
* @internal
|
|
18
|
+
*/
|
|
19
|
+
export declare function _consumePrefetch(url: string): Promise<Response> | undefined;
|
|
20
|
+
/** @internal */
|
|
21
|
+
export declare function isSameOrigin(href: string): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Subscribe to pathname changes via the Navigation API.
|
|
24
|
+
* Returns an unsubscribe function.
|
|
25
|
+
*
|
|
26
|
+
* For use with React's `useSyncExternalStore`.
|
|
27
|
+
* @internal
|
|
28
|
+
*/
|
|
29
|
+
export declare function _subscribeToPathname(callback: () => void): () => void;
|
|
30
|
+
/**
|
|
31
|
+
* Get the current pathname snapshot for `useSyncExternalStore`.
|
|
32
|
+
* @internal
|
|
33
|
+
*/
|
|
34
|
+
export declare function _getPathnameSnapshot(): string;
|
|
35
|
+
/**
|
|
36
|
+
* Server snapshot for SSR — always returns '/'.
|
|
37
|
+
* @internal
|
|
38
|
+
*/
|
|
39
|
+
export declare function _getServerPathnameSnapshot(): string;
|
|
40
|
+
//# sourceMappingURL=nav.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nav.d.ts","sourceRoot":"","sources":["../../src/client/nav.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,eAAO,MAAM,gBAAgB,qBAAqB,CAAC;AAMnD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAY7C;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,SAAS,CAM3E;AAID,gBAAgB;AAChB,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAOlD;AAID;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAUrE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,IAAI,MAAM,CAEnD"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
// ── juice/client — shared navigation utilities ──────────────────
|
|
2
|
+
// Extracted from client.ts so they can be imported by Link.ts,
|
|
3
|
+
// hooks.ts, and tested without pulling in react-server-dom-webpack.
|
|
4
|
+
// ────────────────────────────────────────────────────────────────
|
|
5
|
+
/**
|
|
6
|
+
* The RSC content type used for payload negotiation.
|
|
7
|
+
* Must match the server's `RSC_CONTENT_TYPE` in `rsc.ts`.
|
|
8
|
+
*/
|
|
9
|
+
export const RSC_CONTENT_TYPE = 'text/x-component';
|
|
10
|
+
// ── Prefetch cache ────────────────────────────────────────────────
|
|
11
|
+
const prefetchCache = new Map();
|
|
12
|
+
/**
|
|
13
|
+
* Prefetch an RSC payload for a given URL. Idempotent — duplicate
|
|
14
|
+
* calls for the same URL are no-ops until the cache entry expires.
|
|
15
|
+
*
|
|
16
|
+
* Used internally by `initNavigation()` and exported for use by
|
|
17
|
+
* `<Link prefetch="hover">` and `useRouter().prefetch()`.
|
|
18
|
+
*/
|
|
19
|
+
export function prefetchRSC(url) {
|
|
20
|
+
if (prefetchCache.has(url))
|
|
21
|
+
return;
|
|
22
|
+
const promise = fetch(url, {
|
|
23
|
+
headers: { 'Accept': RSC_CONTENT_TYPE },
|
|
24
|
+
priority: 'low',
|
|
25
|
+
});
|
|
26
|
+
prefetchCache.set(url, promise);
|
|
27
|
+
// Expire after 30 seconds to avoid stale data
|
|
28
|
+
setTimeout(() => prefetchCache.delete(url), 30_000);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Get a prefetched response from the cache, if available.
|
|
32
|
+
* Removes the entry from cache (one-time read).
|
|
33
|
+
* @internal
|
|
34
|
+
*/
|
|
35
|
+
export function _consumePrefetch(url) {
|
|
36
|
+
const cached = prefetchCache.get(url);
|
|
37
|
+
if (cached) {
|
|
38
|
+
prefetchCache.delete(url);
|
|
39
|
+
}
|
|
40
|
+
return cached;
|
|
41
|
+
}
|
|
42
|
+
// ── Helpers ───────────────────────────────────────────────────────
|
|
43
|
+
/** @internal */
|
|
44
|
+
export function isSameOrigin(href) {
|
|
45
|
+
try {
|
|
46
|
+
const url = new URL(href, location.href);
|
|
47
|
+
return url.origin === location.origin;
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
// ── Pathname subscription (useSyncExternalStore) ──────────────────
|
|
54
|
+
/**
|
|
55
|
+
* Subscribe to pathname changes via the Navigation API.
|
|
56
|
+
* Returns an unsubscribe function.
|
|
57
|
+
*
|
|
58
|
+
* For use with React's `useSyncExternalStore`.
|
|
59
|
+
* @internal
|
|
60
|
+
*/
|
|
61
|
+
export function _subscribeToPathname(callback) {
|
|
62
|
+
if (!('navigation' in globalThis)) {
|
|
63
|
+
// No Navigation API — pathname never changes client-side
|
|
64
|
+
return () => { };
|
|
65
|
+
}
|
|
66
|
+
const nav = globalThis.navigation;
|
|
67
|
+
// 'currententrychange' fires after a navigation completes
|
|
68
|
+
nav.addEventListener('currententrychange', callback);
|
|
69
|
+
return () => nav.removeEventListener('currententrychange', callback);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Get the current pathname snapshot for `useSyncExternalStore`.
|
|
73
|
+
* @internal
|
|
74
|
+
*/
|
|
75
|
+
export function _getPathnameSnapshot() {
|
|
76
|
+
return globalThis.location?.pathname ?? '/';
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Server snapshot for SSR — always returns '/'.
|
|
80
|
+
* @internal
|
|
81
|
+
*/
|
|
82
|
+
export function _getServerPathnameSnapshot() {
|
|
83
|
+
return '/';
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=nav.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nav.js","sourceRoot":"","sources":["../../src/client/nav.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,+DAA+D;AAC/D,oEAAoE;AACpE,mEAAmE;AAEnE;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,kBAAkB,CAAC;AAEnD,qEAAqE;AAErE,MAAM,aAAa,GAAG,IAAI,GAAG,EAA6B,CAAC;AAE3D;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,IAAI,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO;IAEnC,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,EAAE;QACzB,OAAO,EAAE,EAAE,QAAQ,EAAE,gBAAgB,EAAE;QACvC,QAAQ,EAAE,KAAwB;KACnC,CAAC,CAAC;IAEH,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAEhC,8CAA8C;IAC9C,UAAU,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;AACtD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,MAAM,EAAE,CAAC;QACX,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,qEAAqE;AAErE,gBAAgB;AAChB,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;QACzC,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,qEAAqE;AAErE;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAoB;IACvD,IAAI,CAAC,CAAC,YAAY,IAAI,UAAU,CAAC,EAAE,CAAC;QAClC,yDAAyD;QACzD,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,GAAG,GAAI,UAAkB,CAAC,UAAU,CAAC;IAE3C,0DAA0D;IAC1D,GAAG,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CAAC;IACrD,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,mBAAmB,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CAAC;AACvE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO,UAAU,CAAC,QAAQ,EAAE,QAAQ,IAAI,GAAG,CAAC;AAC9C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,0BAA0B;IACxC,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate the contents of `juice-env.d.ts` from a set of route patterns.
|
|
3
|
+
*
|
|
4
|
+
* The emitted declaration file augments `@cmj/juice/runtime` with:
|
|
5
|
+
* - `RegisteredRoutes` — union of all route pattern literals
|
|
6
|
+
* - `RouteParams` — interface mapping each route to its extracted params
|
|
7
|
+
*
|
|
8
|
+
* @param routes - Object mapping route patterns to route entries.
|
|
9
|
+
* @returns The full `.d.ts` file contents as a string.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```ts
|
|
13
|
+
* _generateRouteTypes({ '/product/:id': { moduleId: '...' } });
|
|
14
|
+
* // → juice-env.d.ts with typed params
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* @internal
|
|
18
|
+
*/
|
|
19
|
+
export declare function _generateRouteTypes(routes: Record<string, unknown>): string;
|
|
20
|
+
/**
|
|
21
|
+
* Extract `:param` names from a route pattern string.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```ts
|
|
25
|
+
* _extractParamNames('/product/:id') // → ['id']
|
|
26
|
+
* _extractParamNames('/user/:userId/post/:postId') // → ['userId', 'postId']
|
|
27
|
+
* _extractParamNames('/about') // → []
|
|
28
|
+
* ```
|
|
29
|
+
*
|
|
30
|
+
* @internal
|
|
31
|
+
*/
|
|
32
|
+
export declare function _extractParamNames(pattern: string): string[];
|
|
33
|
+
//# sourceMappingURL=dts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dts.d.ts","sourceRoot":"","sources":["../../src/compiler/dts.ts"],"names":[],"mappings":"AAUA;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,CAqCR;AAuBD;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAW5D"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
// ─────────────────────────────────────────────────────────────────
|
|
2
|
+
// @cmj/juice — Route Types DTS Generator
|
|
3
|
+
//
|
|
4
|
+
// Generates a `juice-env.d.ts` file that augments `@cmj/juice/runtime`
|
|
5
|
+
// with typed route params extracted from the project's route patterns.
|
|
6
|
+
//
|
|
7
|
+
// This is called by the Vite plugin at build time and during dev mode
|
|
8
|
+
// when routes are added/removed.
|
|
9
|
+
// ─────────────────────────────────────────────────────────────────
|
|
10
|
+
/**
|
|
11
|
+
* Generate the contents of `juice-env.d.ts` from a set of route patterns.
|
|
12
|
+
*
|
|
13
|
+
* The emitted declaration file augments `@cmj/juice/runtime` with:
|
|
14
|
+
* - `RegisteredRoutes` — union of all route pattern literals
|
|
15
|
+
* - `RouteParams` — interface mapping each route to its extracted params
|
|
16
|
+
*
|
|
17
|
+
* @param routes - Object mapping route patterns to route entries.
|
|
18
|
+
* @returns The full `.d.ts` file contents as a string.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```ts
|
|
22
|
+
* _generateRouteTypes({ '/product/:id': { moduleId: '...' } });
|
|
23
|
+
* // → juice-env.d.ts with typed params
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* @internal
|
|
27
|
+
*/
|
|
28
|
+
export function _generateRouteTypes(routes) {
|
|
29
|
+
const patterns = Object.keys(routes).sort();
|
|
30
|
+
if (patterns.length === 0) {
|
|
31
|
+
return _header() + _emptyBody();
|
|
32
|
+
}
|
|
33
|
+
const lines = [];
|
|
34
|
+
lines.push(_header());
|
|
35
|
+
lines.push(`declare module '@cmj/juice/runtime' {`);
|
|
36
|
+
lines.push(` /** All route patterns registered in this project. @generated */`);
|
|
37
|
+
// RegisteredRoutes union
|
|
38
|
+
const union = patterns.map((p) => ` | '${_escapeQuote(p)}'`).join('\n');
|
|
39
|
+
lines.push(` type RegisteredRoutes =`);
|
|
40
|
+
lines.push(union + ';');
|
|
41
|
+
lines.push('');
|
|
42
|
+
lines.push(` /** Typed params for each registered route. @generated */`);
|
|
43
|
+
lines.push(` interface RouteParams {`);
|
|
44
|
+
for (const pattern of patterns) {
|
|
45
|
+
const params = _extractParamNames(pattern);
|
|
46
|
+
if (params.length === 0) {
|
|
47
|
+
lines.push(` readonly '${_escapeQuote(pattern)}': {};`);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
const fields = params.map((p) => `readonly ${p}: string`).join('; ');
|
|
51
|
+
lines.push(` readonly '${_escapeQuote(pattern)}': { ${fields} };`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
lines.push(` }`);
|
|
55
|
+
lines.push(`}`);
|
|
56
|
+
lines.push('');
|
|
57
|
+
return lines.join('\n');
|
|
58
|
+
}
|
|
59
|
+
// ── Helpers ────────────────────────────────────────────────────────
|
|
60
|
+
function _header() {
|
|
61
|
+
return [
|
|
62
|
+
'// Auto-generated by @cmj/juice — DO NOT EDIT',
|
|
63
|
+
'// This file provides typed route params for your project.',
|
|
64
|
+
'// Re-generated on every build and when routes change in dev mode.',
|
|
65
|
+
'',
|
|
66
|
+
].join('\n');
|
|
67
|
+
}
|
|
68
|
+
function _emptyBody() {
|
|
69
|
+
return [
|
|
70
|
+
`declare module '@cmj/juice/runtime' {`,
|
|
71
|
+
` type RegisteredRoutes = never;`,
|
|
72
|
+
` interface RouteParams {}`,
|
|
73
|
+
`}`,
|
|
74
|
+
'',
|
|
75
|
+
].join('\n');
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Extract `:param` names from a route pattern string.
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* ```ts
|
|
82
|
+
* _extractParamNames('/product/:id') // → ['id']
|
|
83
|
+
* _extractParamNames('/user/:userId/post/:postId') // → ['userId', 'postId']
|
|
84
|
+
* _extractParamNames('/about') // → []
|
|
85
|
+
* ```
|
|
86
|
+
*
|
|
87
|
+
* @internal
|
|
88
|
+
*/
|
|
89
|
+
export function _extractParamNames(pattern) {
|
|
90
|
+
const params = [];
|
|
91
|
+
const segments = pattern.split('/');
|
|
92
|
+
for (const segment of segments) {
|
|
93
|
+
if (segment.startsWith(':')) {
|
|
94
|
+
params.push(segment.slice(1));
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return params;
|
|
98
|
+
}
|
|
99
|
+
function _escapeQuote(s) {
|
|
100
|
+
return s.replace(/'/g, "\\'");
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=dts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dts.js","sourceRoot":"","sources":["../../src/compiler/dts.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/compiler/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/compiler/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAKH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AA0BrD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,GAAG,CA8X/D"}
|
package/dist/compiler/plugin.js
CHANGED
|
@@ -22,7 +22,8 @@
|
|
|
22
22
|
* });
|
|
23
23
|
* ```
|
|
24
24
|
*/
|
|
25
|
-
import { relative } from 'node:path';
|
|
25
|
+
import { relative, join } from 'node:path';
|
|
26
|
+
import { writeFileSync } from 'node:fs';
|
|
26
27
|
import { JuiceExportError, JuiceMutualExclusionError, JuiceBarrelExportError, } from './errors.js';
|
|
27
28
|
import { _mayContainDirective, _detectDirective, } from './parse.js';
|
|
28
29
|
import { _generateProxyModule } from './proxy.js';
|
|
@@ -31,6 +32,7 @@ import { _buildManifest, _serializeManifest } from './manifest.js';
|
|
|
31
32
|
import { ClientModuleRegistry } from './registry.js';
|
|
32
33
|
import { ServerActionRegistry } from './server-action-registry.js';
|
|
33
34
|
import { _discoverRoutes } from './discover.js';
|
|
35
|
+
import { _generateRouteTypes } from './dts.js';
|
|
34
36
|
/**
|
|
35
37
|
* Virtual module prefix used to serve proxy modules for `'use client'`
|
|
36
38
|
* components during the server build.
|
|
@@ -110,6 +112,10 @@ export default function juice(options) {
|
|
|
110
112
|
routes = discovered;
|
|
111
113
|
}
|
|
112
114
|
}
|
|
115
|
+
// Emit typed route params — juice-env.d.ts
|
|
116
|
+
if (routes) {
|
|
117
|
+
_emitRouteTypes(config.root, routes);
|
|
118
|
+
}
|
|
113
119
|
},
|
|
114
120
|
// ------------------------------------------------------------------
|
|
115
121
|
// Dev server — SSR middleware for `vite dev` with HMR
|
|
@@ -117,6 +123,26 @@ export default function juice(options) {
|
|
|
117
123
|
configureServer(server) {
|
|
118
124
|
if (!routes)
|
|
119
125
|
return;
|
|
126
|
+
// Watch for route file changes to re-emit juice-env.d.ts
|
|
127
|
+
const routesDir = join(config.root, 'app', 'routes');
|
|
128
|
+
server.watcher.on('add', (file) => {
|
|
129
|
+
if (file.startsWith(routesDir)) {
|
|
130
|
+
const discovered = _discoverRoutes(config.root);
|
|
131
|
+
if (discovered) {
|
|
132
|
+
routes = discovered;
|
|
133
|
+
_emitRouteTypes(config.root, routes);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
server.watcher.on('unlink', (file) => {
|
|
138
|
+
if (file.startsWith(routesDir)) {
|
|
139
|
+
const discovered = _discoverRoutes(config.root);
|
|
140
|
+
if (discovered) {
|
|
141
|
+
routes = discovered;
|
|
142
|
+
_emitRouteTypes(config.root, routes);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
});
|
|
120
146
|
// Register middleware directly (not deferred) so it runs BEFORE
|
|
121
147
|
// Vite's built-in SPA fallback which returns 404 for missing index.html
|
|
122
148
|
server.middlewares.use(async (req, res, next) => {
|
|
@@ -360,4 +386,19 @@ function _chunkName(specifier) {
|
|
|
360
386
|
const meaningful = parts.slice(-2).join('_');
|
|
361
387
|
return meaningful || 'chunk';
|
|
362
388
|
}
|
|
389
|
+
/**
|
|
390
|
+
* Emit `juice-env.d.ts` to the project root with typed route params.
|
|
391
|
+
* Called on route discovery and when route files change in dev mode.
|
|
392
|
+
* @internal
|
|
393
|
+
*/
|
|
394
|
+
function _emitRouteTypes(projectRoot, routes) {
|
|
395
|
+
try {
|
|
396
|
+
const dts = _generateRouteTypes(routes);
|
|
397
|
+
const outPath = join(projectRoot, 'juice-env.d.ts');
|
|
398
|
+
writeFileSync(outPath, dts, 'utf-8');
|
|
399
|
+
}
|
|
400
|
+
catch {
|
|
401
|
+
// Non-fatal — don't break the build if DTS generation fails
|
|
402
|
+
}
|
|
403
|
+
}
|
|
363
404
|
//# sourceMappingURL=plugin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/compiler/plugin.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/compiler/plugin.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { createRouter } from './router.js';
|
|
2
2
|
export { createActionContext } from './actions.js';
|
|
3
3
|
export { _isRSCRequest, _buildModuleMap, RSC_CONTENT_TYPE } from './rsc.js';
|
|
4
|
-
export type { FlightManifest, RouterOptions, ActionContext, ParsedBody } from './types.js';
|
|
4
|
+
export type { FlightManifest, RouterOptions, ActionContext, ParsedBody, ExtractRouteParams } from './types.js';
|
|
5
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5E,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5E,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/runtime/types.d.ts
CHANGED
|
@@ -1,3 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extract route parameter names from a URL pattern string at the type level.
|
|
3
|
+
*
|
|
4
|
+
* Parses `:param` segments out of route patterns and produces a typed
|
|
5
|
+
* object with each param as a `string` property. Works with any number
|
|
6
|
+
* of dynamic segments.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* type P1 = ExtractRouteParams<'/product/:id'>;
|
|
11
|
+
* // ^? { readonly id: string }
|
|
12
|
+
*
|
|
13
|
+
* type P2 = ExtractRouteParams<'/user/:userId/post/:postId'>;
|
|
14
|
+
* // ^? { readonly userId: string } & { readonly postId: string }
|
|
15
|
+
*
|
|
16
|
+
* type P3 = ExtractRouteParams<'/about'>;
|
|
17
|
+
* // ^? {}
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export type ExtractRouteParams<T extends string> = T extends `${string}:${infer P}/${infer Rest}` ? {
|
|
21
|
+
readonly [K in P]: string;
|
|
22
|
+
} & ExtractRouteParams<`/${Rest}`> : T extends `${string}:${infer P}` ? {
|
|
23
|
+
readonly [K in P]: string;
|
|
24
|
+
} : {};
|
|
1
25
|
/**
|
|
2
26
|
* A single route entry mapping a URL pattern to its server component module.
|
|
3
27
|
*/
|
|
@@ -295,24 +319,32 @@ export type ParsedBody = {
|
|
|
295
319
|
* Use `ActionContext` as the **second argument** when you need access
|
|
296
320
|
* to the raw `Request`, cookies, route params, or headers.
|
|
297
321
|
*
|
|
322
|
+
* Generic parameter `TRoute` enables compile-time typed params when
|
|
323
|
+
* you provide the route pattern as a string literal:
|
|
324
|
+
*
|
|
298
325
|
* @example
|
|
299
326
|
* ```ts
|
|
300
|
-
* // ──
|
|
327
|
+
* // ── Typed params (recommended) ─────────────────────────
|
|
301
328
|
* 'use server'
|
|
302
|
-
* export async function
|
|
303
|
-
*
|
|
329
|
+
* export async function getProduct(
|
|
330
|
+
* body: unknown,
|
|
331
|
+
* ctx: ActionContext<'/product/:id'>,
|
|
332
|
+
* ) {
|
|
333
|
+
* ctx.params.id; // ← string ✅ autocomplete
|
|
334
|
+
* ctx.params.slug; // ← TS error ❌
|
|
304
335
|
* }
|
|
305
336
|
*
|
|
306
|
-
* // ──
|
|
337
|
+
* // ── Untyped (backward compatible) ──────────────────────
|
|
307
338
|
* 'use server'
|
|
308
|
-
* export async function
|
|
309
|
-
* const
|
|
310
|
-
* const session = ctx.cookies.get('session_id');
|
|
311
|
-
* const id = ctx.params.id; // from /webhook/:id
|
|
339
|
+
* export async function addToCart(formData: FormData) {
|
|
340
|
+
* const id = formData.get('productId'); // ✅ just works
|
|
312
341
|
* }
|
|
313
342
|
* ```
|
|
343
|
+
*
|
|
344
|
+
* @typeParam TRoute - Route pattern string literal (e.g. `'/product/:id'`).
|
|
345
|
+
* Defaults to `string` for backward compatibility.
|
|
314
346
|
*/
|
|
315
|
-
export interface ActionContext {
|
|
347
|
+
export interface ActionContext<TRoute extends string = string> {
|
|
316
348
|
/**
|
|
317
349
|
* The original `Request` — your escape hatch for headers, method,
|
|
318
350
|
* URL, and anything the web platform gives you. Never consumed;
|
|
@@ -333,7 +365,10 @@ export interface ActionContext {
|
|
|
333
365
|
readonly cookies: ReadonlyMap<string, string>;
|
|
334
366
|
/**
|
|
335
367
|
* Route parameters extracted from the URL pattern.
|
|
336
|
-
*
|
|
368
|
+
*
|
|
369
|
+
* When `TRoute` is a string literal like `'/product/:id'`,
|
|
370
|
+
* params is typed as `{ readonly id: string }` with full autocomplete.
|
|
371
|
+
* When untyped, falls back to `Record<string, string>`.
|
|
337
372
|
*
|
|
338
373
|
* @example
|
|
339
374
|
* ```ts
|
|
@@ -341,6 +376,6 @@ export interface ActionContext {
|
|
|
341
376
|
* const productId = ctx.params.id; // '42'
|
|
342
377
|
* ```
|
|
343
378
|
*/
|
|
344
|
-
readonly params: Readonly<Record<string, string>>;
|
|
379
|
+
readonly params: string extends TRoute ? Readonly<Record<string, string>> : Readonly<ExtractRouteParams<TRoute>>;
|
|
345
380
|
}
|
|
346
381
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/runtime/types.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,mEAAmE;IACnE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B;;;OAGG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAE7B;;;OAGG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,6CAA6C;IAC7C,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAEnC,yCAAyC;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,mDAAmD;IACnD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B,gDAAgD;IAChD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,cAAc;IAC7B,sEAAsE;IACtE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;IAEtD,kEAAkE;IAClE,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC;IAElE,yDAAyD;IACzD,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC;IAElE;;;;;;;;OAQG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE;QACf,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,aAAa,GAAG,YAAY,CAAC;QAC7C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QACzB,gEAAgE;QAChE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAC9B,sDAAsD;QACtD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;KAC/B,CAAC;CACH;AAID;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAEvB;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAE3B;;;;;;OAMG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,CACzB,GAAG,EAAE,OAAO,KACT,QAAQ,GAAG,IAAI,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;IAEhD;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAErE;;;;;;;OAOG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,CACjB,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,OAAO,KACT,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAElC;;;;;;;;OAQG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAEjC;;;;;;;;;;;;;;;;;;;OAmBG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,aAAa,GAAG,YAAY,CAAC;IAE7C;;;;;;;;;;;;;;;;;OAiBG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEzB;;;;;;;;;OASG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAE9B;;;;;;;;;OASG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAE9B;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;CACxB;AAID;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,sEAAsE;IACtE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACnD;AAID;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,UAAU,GAClB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClD;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GACjD;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAErD
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/runtime/types.ts"],"names":[],"mappings":"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"}
|