@zenithbuild/router 0.6.5 → 0.6.7
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/events.d.ts +21 -0
- package/dist/events.js +23 -75
- package/dist/history.d.ts +26 -0
- package/dist/history.js +2 -10
- package/dist/index.d.ts +4 -41
- package/dist/index.js +0 -1
- package/dist/match.d.ts +22 -0
- package/dist/match.js +40 -98
- package/dist/navigate.d.ts +5 -0
- package/dist/navigate.js +6 -40
- package/dist/router.d.ts +18 -0
- package/dist/router.js +22 -63
- package/package.json +11 -5
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/manifest.d.ts +0 -32
- package/dist/manifest.d.ts.map +0 -1
- package/dist/manifest.js +0 -180
- package/dist/manifest.js.map +0 -1
- package/dist/navigation/client-router.d.ts +0 -59
- package/dist/navigation/client-router.d.ts.map +0 -1
- package/dist/navigation/client-router.js +0 -373
- package/dist/navigation/client-router.js.map +0 -1
- package/dist/navigation/index.d.ts +0 -30
- package/dist/navigation/index.d.ts.map +0 -1
- package/dist/navigation/index.js +0 -44
- package/dist/navigation/index.js.map +0 -1
- package/dist/navigation/zen-link.d.ts +0 -234
- package/dist/navigation/zen-link.d.ts.map +0 -1
- package/dist/navigation/zen-link.js +0 -437
- package/dist/navigation/zen-link.js.map +0 -1
- package/dist/runtime.d.ts +0 -33
- package/dist/runtime.d.ts.map +0 -1
- package/dist/runtime.js +0 -157
- package/dist/runtime.js.map +0 -1
- package/dist/types.d.ts +0 -50
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -7
- package/dist/types.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"zen-link.d.ts","sourceRoot":"","sources":["../../src/navigation/zen-link.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,437 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ZenLink Runtime Module
|
|
3
|
-
*
|
|
4
|
-
* Provides programmatic navigation and ZenLink utilities.
|
|
5
|
-
* This module can be imported in `.zen` files or TypeScript.
|
|
6
|
-
*
|
|
7
|
-
* @package @zenithbuild/router
|
|
8
|
-
*
|
|
9
|
-
* @example
|
|
10
|
-
* ```ts
|
|
11
|
-
* import { navigate, zenLink, isActive } from '@zenithbuild/router'
|
|
12
|
-
*
|
|
13
|
-
* // Programmatic navigation
|
|
14
|
-
* navigate('/about')
|
|
15
|
-
*
|
|
16
|
-
* // Check active state
|
|
17
|
-
* if (isActive('/blog')) {
|
|
18
|
-
* console.log('On blog section')
|
|
19
|
-
* }
|
|
20
|
-
* ```
|
|
21
|
-
*/
|
|
22
|
-
// ============================================
|
|
23
|
-
// Internal State
|
|
24
|
-
// ============================================
|
|
25
|
-
/** Prefetched routes cache */
|
|
26
|
-
const prefetchedRoutes = new Set();
|
|
27
|
-
/** Global transition handler (set at layout level) */
|
|
28
|
-
let globalTransitionHandler = null;
|
|
29
|
-
/** Navigation in progress flag */
|
|
30
|
-
let isNavigating = false;
|
|
31
|
-
// ============================================
|
|
32
|
-
// Utilities
|
|
33
|
-
// ============================================
|
|
34
|
-
/**
|
|
35
|
-
* Check if URL is external (different origin)
|
|
36
|
-
*/
|
|
37
|
-
export function isExternalUrl(url) {
|
|
38
|
-
if (!url)
|
|
39
|
-
return false;
|
|
40
|
-
// Protocol-relative or absolute URLs with different origin
|
|
41
|
-
if (url.startsWith('//') || url.startsWith('http://') || url.startsWith('https://')) {
|
|
42
|
-
try {
|
|
43
|
-
const linkUrl = new URL(url, window.location.origin);
|
|
44
|
-
return linkUrl.origin !== window.location.origin;
|
|
45
|
-
}
|
|
46
|
-
catch {
|
|
47
|
-
return true;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
// mailto:, tel:, javascript:, etc.
|
|
51
|
-
if (/^[a-zA-Z][a-zA-Z\d+\-.]*:/.test(url)) {
|
|
52
|
-
return true;
|
|
53
|
-
}
|
|
54
|
-
return false;
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* Check if link should use SPA navigation
|
|
58
|
-
*/
|
|
59
|
-
export function shouldUseSPANavigation(href, target) {
|
|
60
|
-
// Don't use SPA for external links
|
|
61
|
-
if (isExternalUrl(href))
|
|
62
|
-
return false;
|
|
63
|
-
// Don't use SPA if target is set (except _self)
|
|
64
|
-
if (target && target !== '_self')
|
|
65
|
-
return false;
|
|
66
|
-
// Don't use SPA for hash-only links on same page
|
|
67
|
-
if (href.startsWith('#'))
|
|
68
|
-
return false;
|
|
69
|
-
// Don't use SPA for download links or special protocols
|
|
70
|
-
if (href.startsWith('mailto:') || href.startsWith('tel:') || href.startsWith('javascript:')) {
|
|
71
|
-
return false;
|
|
72
|
-
}
|
|
73
|
-
return true;
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* Normalize a path
|
|
77
|
-
*/
|
|
78
|
-
export function normalizePath(path) {
|
|
79
|
-
// Ensure path starts with /
|
|
80
|
-
if (!path.startsWith('/')) {
|
|
81
|
-
const currentDir = window.location.pathname.split('/').slice(0, -1).join('/');
|
|
82
|
-
path = currentDir + '/' + path;
|
|
83
|
-
}
|
|
84
|
-
// Remove trailing slash (except for root)
|
|
85
|
-
if (path !== '/' && path.endsWith('/')) {
|
|
86
|
-
path = path.slice(0, -1);
|
|
87
|
-
}
|
|
88
|
-
return path;
|
|
89
|
-
}
|
|
90
|
-
// ============================================
|
|
91
|
-
// Navigation API
|
|
92
|
-
// ============================================
|
|
93
|
-
/**
|
|
94
|
-
* Navigate to a new URL (SPA navigation)
|
|
95
|
-
*
|
|
96
|
-
* This is the primary API for programmatic navigation.
|
|
97
|
-
*
|
|
98
|
-
* @example
|
|
99
|
-
* ```ts
|
|
100
|
-
* // Simple navigation
|
|
101
|
-
* navigate('/about')
|
|
102
|
-
*
|
|
103
|
-
* // With options
|
|
104
|
-
* navigate('/dashboard', { replace: true })
|
|
105
|
-
*
|
|
106
|
-
* // With transition
|
|
107
|
-
* navigate('/gallery', {
|
|
108
|
-
* onTransition: async (ctx) => {
|
|
109
|
-
* await animateOut(ctx.currentPage)
|
|
110
|
-
* await animateIn(ctx.nextPage)
|
|
111
|
-
* }
|
|
112
|
-
* })
|
|
113
|
-
* ```
|
|
114
|
-
*/
|
|
115
|
-
export async function zenNavigate(to, options = {}) {
|
|
116
|
-
// Prevent concurrent navigations
|
|
117
|
-
if (isNavigating) {
|
|
118
|
-
console.warn('[ZenLink] Navigation already in progress');
|
|
119
|
-
return;
|
|
120
|
-
}
|
|
121
|
-
isNavigating = true;
|
|
122
|
-
try {
|
|
123
|
-
// Access global router
|
|
124
|
-
const router = window.__zenith_router;
|
|
125
|
-
if (router && router.navigate) {
|
|
126
|
-
// Use router's navigate function
|
|
127
|
-
await router.navigate(to, options);
|
|
128
|
-
}
|
|
129
|
-
else {
|
|
130
|
-
// Fallback: use History API directly
|
|
131
|
-
const normalizedPath = normalizePath(to);
|
|
132
|
-
if (options.replace) {
|
|
133
|
-
window.history.replaceState(options.state || null, '', normalizedPath);
|
|
134
|
-
}
|
|
135
|
-
else {
|
|
136
|
-
window.history.pushState(options.state || null, '', normalizedPath);
|
|
137
|
-
}
|
|
138
|
-
// Dispatch popstate to trigger route resolution
|
|
139
|
-
window.dispatchEvent(new PopStateEvent('popstate'));
|
|
140
|
-
}
|
|
141
|
-
// Scroll to top if requested (default: true)
|
|
142
|
-
if (options.scrollToTop !== false) {
|
|
143
|
-
window.scrollTo({ top: 0, behavior: 'smooth' });
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
finally {
|
|
147
|
-
isNavigating = false;
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
// Clean alias
|
|
151
|
-
export const navigate = zenNavigate;
|
|
152
|
-
/**
|
|
153
|
-
* Navigate back in history
|
|
154
|
-
*/
|
|
155
|
-
export function zenBack() {
|
|
156
|
-
window.history.back();
|
|
157
|
-
}
|
|
158
|
-
export const back = zenBack;
|
|
159
|
-
/**
|
|
160
|
-
* Navigate forward in history
|
|
161
|
-
*/
|
|
162
|
-
export function zenForward() {
|
|
163
|
-
window.history.forward();
|
|
164
|
-
}
|
|
165
|
-
export const forward = zenForward;
|
|
166
|
-
/**
|
|
167
|
-
* Navigate to a specific history index
|
|
168
|
-
*/
|
|
169
|
-
export function zenGo(delta) {
|
|
170
|
-
window.history.go(delta);
|
|
171
|
-
}
|
|
172
|
-
export const go = zenGo;
|
|
173
|
-
// ============================================
|
|
174
|
-
// Active State
|
|
175
|
-
// ============================================
|
|
176
|
-
/**
|
|
177
|
-
* Check if a path is currently active
|
|
178
|
-
*
|
|
179
|
-
* @example
|
|
180
|
-
* ```ts
|
|
181
|
-
* // Check if on blog section
|
|
182
|
-
* if (isActive('/blog')) {
|
|
183
|
-
* addClass(link, 'active')
|
|
184
|
-
* }
|
|
185
|
-
*
|
|
186
|
-
* // Exact match only
|
|
187
|
-
* if (isActive('/blog', true)) {
|
|
188
|
-
* addClass(link, 'active-exact')
|
|
189
|
-
* }
|
|
190
|
-
* ```
|
|
191
|
-
*/
|
|
192
|
-
export function zenIsActive(path, exact = false) {
|
|
193
|
-
const router = window.__zenith_router;
|
|
194
|
-
if (router && router.isActive) {
|
|
195
|
-
return router.isActive(path, exact);
|
|
196
|
-
}
|
|
197
|
-
// Fallback: compare with current pathname
|
|
198
|
-
const currentPath = window.location.pathname;
|
|
199
|
-
const normalizedPath = normalizePath(path);
|
|
200
|
-
if (exact) {
|
|
201
|
-
return currentPath === normalizedPath;
|
|
202
|
-
}
|
|
203
|
-
// Root path special case
|
|
204
|
-
if (normalizedPath === '/') {
|
|
205
|
-
return currentPath === '/';
|
|
206
|
-
}
|
|
207
|
-
return currentPath.startsWith(normalizedPath);
|
|
208
|
-
}
|
|
209
|
-
export const isActive = zenIsActive;
|
|
210
|
-
// ============================================
|
|
211
|
-
// Prefetching
|
|
212
|
-
// ============================================
|
|
213
|
-
/**
|
|
214
|
-
* Prefetch a route for faster navigation
|
|
215
|
-
*
|
|
216
|
-
* @example
|
|
217
|
-
* ```ts
|
|
218
|
-
* // Prefetch on hover
|
|
219
|
-
* element.addEventListener('mouseenter', () => {
|
|
220
|
-
* prefetch('/about')
|
|
221
|
-
* })
|
|
222
|
-
* ```
|
|
223
|
-
*/
|
|
224
|
-
export async function zenPrefetch(path) {
|
|
225
|
-
// Normalize path
|
|
226
|
-
const normalizedPath = normalizePath(path);
|
|
227
|
-
// Don't prefetch if already done
|
|
228
|
-
if (prefetchedRoutes.has(normalizedPath)) {
|
|
229
|
-
return;
|
|
230
|
-
}
|
|
231
|
-
// Mark as prefetched
|
|
232
|
-
prefetchedRoutes.add(normalizedPath);
|
|
233
|
-
// Try router prefetch first
|
|
234
|
-
const router = window.__zenith_router;
|
|
235
|
-
if (router && router.prefetch) {
|
|
236
|
-
try {
|
|
237
|
-
await router.prefetch(normalizedPath);
|
|
238
|
-
}
|
|
239
|
-
catch {
|
|
240
|
-
// Silently ignore prefetch errors
|
|
241
|
-
}
|
|
242
|
-
return;
|
|
243
|
-
}
|
|
244
|
-
// Fallback: use link preload hint
|
|
245
|
-
try {
|
|
246
|
-
const link = document.createElement('link');
|
|
247
|
-
link.rel = 'prefetch';
|
|
248
|
-
link.href = normalizedPath;
|
|
249
|
-
link.as = 'document';
|
|
250
|
-
document.head.appendChild(link);
|
|
251
|
-
}
|
|
252
|
-
catch {
|
|
253
|
-
// Ignore errors
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
export const prefetch = zenPrefetch;
|
|
257
|
-
/**
|
|
258
|
-
* Check if a route has been prefetched
|
|
259
|
-
*/
|
|
260
|
-
export function zenIsPrefetched(path) {
|
|
261
|
-
return prefetchedRoutes.has(normalizePath(path));
|
|
262
|
-
}
|
|
263
|
-
export const isPrefetched = zenIsPrefetched;
|
|
264
|
-
// ============================================
|
|
265
|
-
// Transitions API
|
|
266
|
-
// ============================================
|
|
267
|
-
/**
|
|
268
|
-
* Set global transition handler
|
|
269
|
-
*
|
|
270
|
-
* This allows setting a layout-level transition that applies to all navigations.
|
|
271
|
-
*
|
|
272
|
-
* @example
|
|
273
|
-
* ```ts
|
|
274
|
-
* // In layout component
|
|
275
|
-
* setGlobalTransition(async (ctx) => {
|
|
276
|
-
* ctx.currentPage?.classList.add('fade-out')
|
|
277
|
-
* await delay(300)
|
|
278
|
-
* ctx.nextPage?.classList.add('fade-in')
|
|
279
|
-
* })
|
|
280
|
-
* ```
|
|
281
|
-
*/
|
|
282
|
-
export function setGlobalTransition(handler) {
|
|
283
|
-
globalTransitionHandler = handler;
|
|
284
|
-
}
|
|
285
|
-
/**
|
|
286
|
-
* Get current global transition handler
|
|
287
|
-
*/
|
|
288
|
-
export function getGlobalTransition() {
|
|
289
|
-
return globalTransitionHandler;
|
|
290
|
-
}
|
|
291
|
-
/**
|
|
292
|
-
* Create a transition context
|
|
293
|
-
*/
|
|
294
|
-
export function createTransitionContext(fromPath, toPath, direction = 'forward') {
|
|
295
|
-
return {
|
|
296
|
-
currentPage: document.querySelector('[data-zen-page]'),
|
|
297
|
-
nextPage: null,
|
|
298
|
-
betweenPage: null,
|
|
299
|
-
direction,
|
|
300
|
-
fromPath,
|
|
301
|
-
toPath,
|
|
302
|
-
params: {},
|
|
303
|
-
query: {}
|
|
304
|
-
};
|
|
305
|
-
}
|
|
306
|
-
// ============================================
|
|
307
|
-
// Route State
|
|
308
|
-
// ============================================
|
|
309
|
-
/**
|
|
310
|
-
* Get current route state
|
|
311
|
-
*/
|
|
312
|
-
export function zenGetRoute() {
|
|
313
|
-
const router = window.__zenith_router;
|
|
314
|
-
if (router && router.getRoute) {
|
|
315
|
-
return router.getRoute();
|
|
316
|
-
}
|
|
317
|
-
// Fallback
|
|
318
|
-
const query = {};
|
|
319
|
-
const params = new URLSearchParams(window.location.search);
|
|
320
|
-
params.forEach((value, key) => {
|
|
321
|
-
query[key] = value;
|
|
322
|
-
});
|
|
323
|
-
return {
|
|
324
|
-
path: window.location.pathname,
|
|
325
|
-
params: {},
|
|
326
|
-
query
|
|
327
|
-
};
|
|
328
|
-
}
|
|
329
|
-
export const getRoute = zenGetRoute;
|
|
330
|
-
/**
|
|
331
|
-
* Get a route parameter
|
|
332
|
-
*/
|
|
333
|
-
export function zenGetParam(name) {
|
|
334
|
-
return zenGetRoute().params[name];
|
|
335
|
-
}
|
|
336
|
-
export const getParam = zenGetParam;
|
|
337
|
-
/**
|
|
338
|
-
* Get a query parameter
|
|
339
|
-
*/
|
|
340
|
-
export function zenGetQuery(name) {
|
|
341
|
-
return zenGetRoute().query[name];
|
|
342
|
-
}
|
|
343
|
-
export const getQuery = zenGetQuery;
|
|
344
|
-
// ============================================
|
|
345
|
-
// ZenLink Factory (for programmatic creation)
|
|
346
|
-
// ============================================
|
|
347
|
-
/**
|
|
348
|
-
* Create a ZenLink element programmatically
|
|
349
|
-
*
|
|
350
|
-
* @example
|
|
351
|
-
* ```ts
|
|
352
|
-
* const link = createZenLink({
|
|
353
|
-
* href: '/about',
|
|
354
|
-
* class: 'nav-link',
|
|
355
|
-
* children: 'About Us'
|
|
356
|
-
* })
|
|
357
|
-
* container.appendChild(link)
|
|
358
|
-
* ```
|
|
359
|
-
*/
|
|
360
|
-
export function createZenLink(props) {
|
|
361
|
-
const link = document.createElement('a');
|
|
362
|
-
// Set href
|
|
363
|
-
link.href = props.href;
|
|
364
|
-
// Set class
|
|
365
|
-
const classes = ['zen-link'];
|
|
366
|
-
if (props.class)
|
|
367
|
-
classes.push(props.class);
|
|
368
|
-
if (zenIsActive(props.href, props.exact))
|
|
369
|
-
classes.push('zen-link-active');
|
|
370
|
-
if (isExternalUrl(props.href))
|
|
371
|
-
classes.push('zen-link-external');
|
|
372
|
-
link.className = classes.join(' ');
|
|
373
|
-
// Set target
|
|
374
|
-
if (props.target) {
|
|
375
|
-
link.target = props.target;
|
|
376
|
-
}
|
|
377
|
-
else if (isExternalUrl(props.href)) {
|
|
378
|
-
link.target = '_blank';
|
|
379
|
-
}
|
|
380
|
-
// Set rel for security
|
|
381
|
-
if (isExternalUrl(props.href) || props.target === '_blank') {
|
|
382
|
-
link.rel = 'noopener noreferrer';
|
|
383
|
-
}
|
|
384
|
-
// Set aria-label
|
|
385
|
-
if (props.ariaLabel) {
|
|
386
|
-
link.setAttribute('aria-label', props.ariaLabel);
|
|
387
|
-
}
|
|
388
|
-
// Set content
|
|
389
|
-
if (props.children) {
|
|
390
|
-
if (typeof props.children === 'string') {
|
|
391
|
-
link.textContent = props.children;
|
|
392
|
-
}
|
|
393
|
-
else if (Array.isArray(props.children)) {
|
|
394
|
-
props.children.forEach(child => link.appendChild(child));
|
|
395
|
-
}
|
|
396
|
-
else {
|
|
397
|
-
link.appendChild(props.children);
|
|
398
|
-
}
|
|
399
|
-
}
|
|
400
|
-
// Click handler
|
|
401
|
-
link.addEventListener('click', (event) => {
|
|
402
|
-
// Allow modifier keys for native behavior
|
|
403
|
-
if (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) {
|
|
404
|
-
return;
|
|
405
|
-
}
|
|
406
|
-
// Check if we should use SPA navigation
|
|
407
|
-
if (!shouldUseSPANavigation(props.href, props.target)) {
|
|
408
|
-
return;
|
|
409
|
-
}
|
|
410
|
-
// Prevent default
|
|
411
|
-
event.preventDefault();
|
|
412
|
-
// Call user's onClick handler
|
|
413
|
-
if (props.onClick) {
|
|
414
|
-
const result = props.onClick(event);
|
|
415
|
-
if (result === false)
|
|
416
|
-
return;
|
|
417
|
-
}
|
|
418
|
-
// Navigate
|
|
419
|
-
zenNavigate(props.href, {
|
|
420
|
-
replace: props.replace,
|
|
421
|
-
onTransition: props.onTransition,
|
|
422
|
-
noTransition: props.noTransition
|
|
423
|
-
});
|
|
424
|
-
});
|
|
425
|
-
// Preload on hover
|
|
426
|
-
if (props.preload) {
|
|
427
|
-
link.addEventListener('mouseenter', () => {
|
|
428
|
-
if (shouldUseSPANavigation(props.href, props.target)) {
|
|
429
|
-
zenPrefetch(props.href);
|
|
430
|
-
}
|
|
431
|
-
});
|
|
432
|
-
}
|
|
433
|
-
return link;
|
|
434
|
-
}
|
|
435
|
-
// Alias
|
|
436
|
-
export const zenLink = createZenLink;
|
|
437
|
-
//# sourceMappingURL=zen-link.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"zen-link.js","sourceRoot":"","sources":["../../src/navigation/zen-link.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime.d.ts
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Zenith Runtime Router (Native Bridge)
|
|
3
|
-
*
|
|
4
|
-
* SPA-style client-side router with SSR support via native resolution.
|
|
5
|
-
*/
|
|
6
|
-
import type { RouteState, NavigateOptions, RuntimeRouteRecord, RouteListener } from "./types";
|
|
7
|
-
export declare function initRouter(manifest: RuntimeRouteRecord[], outlet?: HTMLElement | string): void;
|
|
8
|
-
/**
|
|
9
|
-
* Resolve route - uses native implementation if available (Node.js/SSR)
|
|
10
|
-
* or falls back to JS implementation for the browser.
|
|
11
|
-
*/
|
|
12
|
-
export declare function resolveRoute(pathname: string): {
|
|
13
|
-
record: RuntimeRouteRecord;
|
|
14
|
-
params: Record<string, string>;
|
|
15
|
-
} | null;
|
|
16
|
-
export declare function navigate(to: string, options?: NavigateOptions): Promise<void>;
|
|
17
|
-
export declare function getRoute(): RouteState;
|
|
18
|
-
/**
|
|
19
|
-
* zenRoute() - Zenith Law: Environment Resolution
|
|
20
|
-
*
|
|
21
|
-
* Canonical primitive for resolving the current route environment.
|
|
22
|
-
* Must be resolved once and execute before state initialization.
|
|
23
|
-
*/
|
|
24
|
-
export declare function zenRoute(): {
|
|
25
|
-
path: string;
|
|
26
|
-
slugs: string[];
|
|
27
|
-
};
|
|
28
|
-
export declare function onRouteChange(listener: RouteListener): () => void;
|
|
29
|
-
export declare function isActive(path: string, exact?: boolean): boolean;
|
|
30
|
-
export declare function prefetch(path: string): Promise<void>;
|
|
31
|
-
export declare function isPrefetched(_path: string): boolean;
|
|
32
|
-
export declare function generateRuntimeRouterCode(): string;
|
|
33
|
-
//# sourceMappingURL=runtime.d.ts.map
|
package/dist/runtime.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EACV,UAAU,EACV,eAAe,EAGf,kBAAkB,EAClB,aAAa,EACd,MAAM,SAAS,CAAA;AAgBhB,wBAAgB,UAAU,CACxB,QAAQ,EAAE,kBAAkB,EAAE,EAC9B,MAAM,CAAC,EAAE,WAAW,GAAG,MAAM,GAC5B,IAAI,CAON;AAcD;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,GACf;IAAE,MAAM,EAAE,kBAAkB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAAG,IAAI,CA6BvE;AA8CD,wBAAsB,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CASvF;AAGD,wBAAgB,QAAQ,IAAI,UAAU,CAAwB;AAE9D;;;;;GAKG;AACH,wBAAgB,QAAQ,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAM5D;AAMD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,IAAI,CAGjE;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,OAAe,GAAG,OAAO,CAEtE;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAK1D;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAiB;AAErE,wBAAgB,yBAAyB,IAAI,MAAM,CAElD"}
|
package/dist/runtime.js
DELETED
|
@@ -1,157 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Zenith Runtime Router (Native Bridge)
|
|
3
|
-
*
|
|
4
|
-
* SPA-style client-side router with SSR support via native resolution.
|
|
5
|
-
*/
|
|
6
|
-
// @ts-ignore
|
|
7
|
-
import native from "../index.js";
|
|
8
|
-
import { state } from "@zenithbuild/runtime";
|
|
9
|
-
const { resolveRouteNative, generateRuntimeRouterNative } = native;
|
|
10
|
-
// Zenith strict signal integration: use reactive state
|
|
11
|
-
const currentRoute = state({
|
|
12
|
-
path: "/",
|
|
13
|
-
params: {},
|
|
14
|
-
query: {},
|
|
15
|
-
matched: undefined
|
|
16
|
-
});
|
|
17
|
-
const routeListeners = new Set();
|
|
18
|
-
let routeManifest = [];
|
|
19
|
-
let routerOutlet = null;
|
|
20
|
-
export function initRouter(manifest, outlet) {
|
|
21
|
-
routeManifest = manifest;
|
|
22
|
-
if (outlet) {
|
|
23
|
-
routerOutlet = typeof outlet === "string" ? document.querySelector(outlet) : outlet;
|
|
24
|
-
}
|
|
25
|
-
window.addEventListener("popstate", handlePopState);
|
|
26
|
-
resolveAndRender(window.location.pathname, parseQueryString(window.location.search), false);
|
|
27
|
-
}
|
|
28
|
-
function parseQueryString(search) {
|
|
29
|
-
const query = {};
|
|
30
|
-
if (!search || search === "?")
|
|
31
|
-
return query;
|
|
32
|
-
const params = new URLSearchParams(search);
|
|
33
|
-
params.forEach((value, key) => { query[key] = value; });
|
|
34
|
-
return query;
|
|
35
|
-
}
|
|
36
|
-
function handlePopState(_event) {
|
|
37
|
-
resolveAndRender(window.location.pathname, parseQueryString(window.location.search), false, false);
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Resolve route - uses native implementation if available (Node.js/SSR)
|
|
41
|
-
* or falls back to JS implementation for the browser.
|
|
42
|
-
*/
|
|
43
|
-
export function resolveRoute(pathname) {
|
|
44
|
-
if (typeof process !== 'undefined' && process.versions && process.versions.node) {
|
|
45
|
-
// SSR / Node environment
|
|
46
|
-
const resolved = resolveRouteNative(pathname, routeManifest);
|
|
47
|
-
if (!resolved)
|
|
48
|
-
return null;
|
|
49
|
-
return {
|
|
50
|
-
record: resolved.matched,
|
|
51
|
-
params: resolved.params
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
// Client-side fallback implementation
|
|
55
|
-
const normalizedPath = pathname === "" ? "/" : pathname;
|
|
56
|
-
for (const route of routeManifest) {
|
|
57
|
-
const regex = route.regex instanceof RegExp ? route.regex : new RegExp(route.regex.source, route.regex.flags);
|
|
58
|
-
const match = regex.exec(normalizedPath);
|
|
59
|
-
if (match) {
|
|
60
|
-
const params = {};
|
|
61
|
-
for (let i = 0; i < route.paramNames.length; i++) {
|
|
62
|
-
const paramName = route.paramNames[i];
|
|
63
|
-
const paramValue = match[i + 1];
|
|
64
|
-
if (paramName && paramValue !== undefined) {
|
|
65
|
-
params[paramName] = decodeURIComponent(paramValue);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
return { record: route, params };
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
return null;
|
|
72
|
-
}
|
|
73
|
-
async function resolveAndRender(path, query, updateHistory = true, replace = false) {
|
|
74
|
-
const prevRoute = { ...currentRoute };
|
|
75
|
-
const resolved = resolveRoute(path);
|
|
76
|
-
if (resolved) {
|
|
77
|
-
// Update reactive state properties instead of replacing object
|
|
78
|
-
currentRoute.path = path;
|
|
79
|
-
currentRoute.params = resolved.params;
|
|
80
|
-
currentRoute.query = query;
|
|
81
|
-
currentRoute.matched = resolved.record;
|
|
82
|
-
const pageModule = resolved.record.module || (resolved.record.load ? await resolved.record.load() : null);
|
|
83
|
-
if (pageModule)
|
|
84
|
-
await renderPage(pageModule);
|
|
85
|
-
}
|
|
86
|
-
else {
|
|
87
|
-
currentRoute.path = path;
|
|
88
|
-
currentRoute.params = {};
|
|
89
|
-
currentRoute.query = query;
|
|
90
|
-
currentRoute.matched = undefined;
|
|
91
|
-
}
|
|
92
|
-
if (updateHistory) {
|
|
93
|
-
const url = path + (Object.keys(query).length > 0 ? "?" + new URLSearchParams(query).toString() : "");
|
|
94
|
-
if (replace)
|
|
95
|
-
window.history.replaceState(null, "", url);
|
|
96
|
-
else
|
|
97
|
-
window.history.pushState(null, "", url);
|
|
98
|
-
}
|
|
99
|
-
notifyListeners(currentRoute, prevRoute);
|
|
100
|
-
window.__zenith_route = currentRoute;
|
|
101
|
-
}
|
|
102
|
-
async function renderPage(pageModule) {
|
|
103
|
-
if (!routerOutlet)
|
|
104
|
-
return;
|
|
105
|
-
routerOutlet.innerHTML = pageModule.html;
|
|
106
|
-
// ... logic for styles and scripts
|
|
107
|
-
}
|
|
108
|
-
function notifyListeners(route, prevRoute) {
|
|
109
|
-
routeListeners.forEach(listener => { listener(route, prevRoute); });
|
|
110
|
-
}
|
|
111
|
-
export async function navigate(to, options = {}) {
|
|
112
|
-
let path, query = {};
|
|
113
|
-
if (to.includes("?")) {
|
|
114
|
-
const [pathname, search] = to.split("?");
|
|
115
|
-
path = pathname || "/";
|
|
116
|
-
query = parseQueryString("?" + (search || ""));
|
|
117
|
-
}
|
|
118
|
-
else
|
|
119
|
-
path = to;
|
|
120
|
-
await resolveAndRender(path, query, true, options.replace || false);
|
|
121
|
-
}
|
|
122
|
-
// Return the reactive proxy directly
|
|
123
|
-
export function getRoute() { return currentRoute; }
|
|
124
|
-
/**
|
|
125
|
-
* zenRoute() - Zenith Law: Environment Resolution
|
|
126
|
-
*
|
|
127
|
-
* Canonical primitive for resolving the current route environment.
|
|
128
|
-
* Must be resolved once and execute before state initialization.
|
|
129
|
-
*/
|
|
130
|
-
export function zenRoute() {
|
|
131
|
-
const path = typeof window !== 'undefined' ? window.location.pathname : currentRoute.path;
|
|
132
|
-
return {
|
|
133
|
-
path,
|
|
134
|
-
slugs: getSlugs(path)
|
|
135
|
-
};
|
|
136
|
-
}
|
|
137
|
-
function getSlugs(path) {
|
|
138
|
-
return path.split('/').filter(Boolean);
|
|
139
|
-
}
|
|
140
|
-
export function onRouteChange(listener) {
|
|
141
|
-
routeListeners.add(listener);
|
|
142
|
-
return () => { routeListeners.delete(listener); };
|
|
143
|
-
}
|
|
144
|
-
export function isActive(path, exact = false) {
|
|
145
|
-
return exact ? currentRoute.path === path : currentRoute.path.startsWith(path);
|
|
146
|
-
}
|
|
147
|
-
export async function prefetch(path) {
|
|
148
|
-
const resolved = resolveRoute(path);
|
|
149
|
-
if (resolved && resolved.record.load && !resolved.record.module) {
|
|
150
|
-
resolved.record.module = await resolved.record.load();
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
export function isPrefetched(_path) { return false; }
|
|
154
|
-
export function generateRuntimeRouterCode() {
|
|
155
|
-
return generateRuntimeRouterNative();
|
|
156
|
-
}
|
|
157
|
-
//# sourceMappingURL=runtime.js.map
|
package/dist/runtime.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
|