@zenithbuild/router 1.3.9 → 1.3.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +41 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +56 -0
- package/dist/index.js.map +1 -0
- package/dist/manifest.d.ts +32 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/manifest.js +180 -0
- package/dist/manifest.js.map +1 -0
- package/dist/navigation/client-router.d.ts +59 -0
- package/dist/navigation/client-router.d.ts.map +1 -0
- package/dist/navigation/client-router.js +373 -0
- package/dist/navigation/client-router.js.map +1 -0
- package/dist/navigation/index.d.ts +30 -0
- package/dist/navigation/index.d.ts.map +1 -0
- package/dist/navigation/index.js +44 -0
- package/dist/navigation/index.js.map +1 -0
- package/dist/navigation/zen-link.d.ts +234 -0
- package/dist/navigation/zen-link.d.ts.map +1 -0
- package/dist/navigation/zen-link.js +437 -0
- package/dist/navigation/zen-link.js.map +1 -0
- package/dist/runtime.d.ts +33 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +150 -0
- package/dist/runtime.js.map +1 -0
- package/dist/types.d.ts +50 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +7 -0
- package/dist/types.js.map +1 -0
- package/package.json +11 -11
- package/tsconfig.json +12 -14
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zenithbuild/router
|
|
3
|
+
*
|
|
4
|
+
* File-based SPA router for Zenith framework.
|
|
5
|
+
* Includes routing, navigation, and ZenLink components.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Deterministic, compile-time route resolution
|
|
9
|
+
* - File-based routing (pages/ directory → routes)
|
|
10
|
+
* - SPA navigation with prefetching
|
|
11
|
+
* - ZenLink component for declarative links
|
|
12
|
+
* - Type-safe route parameters
|
|
13
|
+
* - Hydration-safe, no runtime hacks
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```ts
|
|
17
|
+
* import { navigate, isActive, prefetch } from '@zenithbuild/router'
|
|
18
|
+
*
|
|
19
|
+
* // Navigate programmatically
|
|
20
|
+
* navigate('/about')
|
|
21
|
+
*
|
|
22
|
+
* // Check active state
|
|
23
|
+
* if (isActive('/blog')) {
|
|
24
|
+
* console.log('On blog section')
|
|
25
|
+
* }
|
|
26
|
+
* ```
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```ts
|
|
30
|
+
* // Build-time manifest generation
|
|
31
|
+
* import { generateRouteManifest, discoverPages } from '@zenithbuild/router/manifest'
|
|
32
|
+
*
|
|
33
|
+
* const manifest = generateRouteManifest('./src/pages')
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export * from "./types";
|
|
37
|
+
export { generateRouteManifest, generateRouteManifestCode } from "./manifest";
|
|
38
|
+
export { initRouter, resolveRoute, navigate, getRoute, onRouteChange, isActive, prefetch, isPrefetched, generateRuntimeRouterCode, zenRoute } from "./runtime";
|
|
39
|
+
export { zenNavigate, zenBack, zenForward, zenGo, zenIsActive, zenPrefetch, zenIsPrefetched, zenGetRoute, zenGetParam, zenGetQuery, createZenLink, zenLink, back, forward, go, getParam, getQuery, isExternalUrl, shouldUseSPANavigation, normalizePath, setGlobalTransition, getGlobalTransition, createTransitionContext } from "./navigation/index";
|
|
40
|
+
export type { ZenLinkProps, TransitionContext, TransitionHandler } from "./navigation/index";
|
|
41
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAMH,cAAc,SAAS,CAAA;AAMvB,OAAO,EACH,qBAAqB,EACrB,yBAAyB,EAC5B,MAAM,YAAY,CAAA;AAMnB,OAAO,EACH,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,aAAa,EACb,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,yBAAyB,EACzB,QAAQ,EACX,MAAM,WAAW,CAAA;AAMlB,OAAO,EAEH,WAAW,EACX,OAAO,EACP,UAAU,EACV,KAAK,EACL,WAAW,EACX,WAAW,EACX,eAAe,EACf,WAAW,EACX,WAAW,EACX,WAAW,EACX,aAAa,EACb,OAAO,EAEP,IAAI,EACJ,OAAO,EACP,EAAE,EACF,QAAQ,EACR,QAAQ,EACR,aAAa,EACb,sBAAsB,EACtB,aAAa,EACb,mBAAmB,EACnB,mBAAmB,EACnB,uBAAuB,EAC1B,MAAM,oBAAoB,CAAA;AAM3B,YAAY,EACR,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACpB,MAAM,oBAAoB,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zenithbuild/router
|
|
3
|
+
*
|
|
4
|
+
* File-based SPA router for Zenith framework.
|
|
5
|
+
* Includes routing, navigation, and ZenLink components.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Deterministic, compile-time route resolution
|
|
9
|
+
* - File-based routing (pages/ directory → routes)
|
|
10
|
+
* - SPA navigation with prefetching
|
|
11
|
+
* - ZenLink component for declarative links
|
|
12
|
+
* - Type-safe route parameters
|
|
13
|
+
* - Hydration-safe, no runtime hacks
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```ts
|
|
17
|
+
* import { navigate, isActive, prefetch } from '@zenithbuild/router'
|
|
18
|
+
*
|
|
19
|
+
* // Navigate programmatically
|
|
20
|
+
* navigate('/about')
|
|
21
|
+
*
|
|
22
|
+
* // Check active state
|
|
23
|
+
* if (isActive('/blog')) {
|
|
24
|
+
* console.log('On blog section')
|
|
25
|
+
* }
|
|
26
|
+
* ```
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```ts
|
|
30
|
+
* // Build-time manifest generation
|
|
31
|
+
* import { generateRouteManifest, discoverPages } from '@zenithbuild/router/manifest'
|
|
32
|
+
*
|
|
33
|
+
* const manifest = generateRouteManifest('./src/pages')
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
// ============================================
|
|
37
|
+
// Core Types
|
|
38
|
+
// ============================================
|
|
39
|
+
export * from "./types";
|
|
40
|
+
// ============================================
|
|
41
|
+
// Build-time Manifest Generation
|
|
42
|
+
// ============================================
|
|
43
|
+
export { generateRouteManifest, generateRouteManifestCode } from "./manifest";
|
|
44
|
+
// ============================================
|
|
45
|
+
// Runtime Router
|
|
46
|
+
// ============================================
|
|
47
|
+
export { initRouter, resolveRoute, navigate, getRoute, onRouteChange, isActive, prefetch, isPrefetched, generateRuntimeRouterCode, zenRoute } from "./runtime";
|
|
48
|
+
// ============================================
|
|
49
|
+
// Navigation Utilities
|
|
50
|
+
// ============================================
|
|
51
|
+
export {
|
|
52
|
+
// Navigation API (zen* prefixed names)
|
|
53
|
+
zenNavigate, zenBack, zenForward, zenGo, zenIsActive, zenPrefetch, zenIsPrefetched, zenGetRoute, zenGetParam, zenGetQuery, createZenLink, zenLink,
|
|
54
|
+
// Additional navigation utilities
|
|
55
|
+
back, forward, go, getParam, getQuery, isExternalUrl, shouldUseSPANavigation, normalizePath, setGlobalTransition, getGlobalTransition, createTransitionContext } from "./navigation/index";
|
|
56
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,+CAA+C;AAC/C,aAAa;AACb,+CAA+C;AAE/C,cAAc,SAAS,CAAA;AAEvB,+CAA+C;AAC/C,iCAAiC;AACjC,+CAA+C;AAE/C,OAAO,EACH,qBAAqB,EACrB,yBAAyB,EAC5B,MAAM,YAAY,CAAA;AAEnB,+CAA+C;AAC/C,iBAAiB;AACjB,+CAA+C;AAE/C,OAAO,EACH,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,aAAa,EACb,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,yBAAyB,EACzB,QAAQ,EACX,MAAM,WAAW,CAAA;AAElB,+CAA+C;AAC/C,uBAAuB;AACvB,+CAA+C;AAE/C,OAAO;AACH,uCAAuC;AACvC,WAAW,EACX,OAAO,EACP,UAAU,EACV,KAAK,EACL,WAAW,EACX,WAAW,EACX,eAAe,EACf,WAAW,EACX,WAAW,EACX,WAAW,EACX,aAAa,EACb,OAAO;AACP,kCAAkC;AAClC,IAAI,EACJ,OAAO,EACP,EAAE,EACF,QAAQ,EACR,QAAQ,EACR,aAAa,EACb,sBAAsB,EACtB,aAAa,EACb,mBAAmB,EACnB,mBAAmB,EACnB,uBAAuB,EAC1B,MAAM,oBAAoB,CAAA"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { type RouteDefinition, type ParsedSegment } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* Discover all .zen files in the pages directory
|
|
4
|
+
*/
|
|
5
|
+
export declare function discoverPages(pagesDir: string): string[];
|
|
6
|
+
/**
|
|
7
|
+
* Convert a file path to a route path
|
|
8
|
+
*/
|
|
9
|
+
export declare function filePathToRoutePath(filePath: string, pagesDir: string): string;
|
|
10
|
+
/**
|
|
11
|
+
* Parse a route path into segments
|
|
12
|
+
*/
|
|
13
|
+
export declare function parseRouteSegments(routePath: string): ParsedSegment[];
|
|
14
|
+
/**
|
|
15
|
+
* Calculate route score
|
|
16
|
+
*/
|
|
17
|
+
export declare function calculateRouteScore(segments: ParsedSegment[]): number;
|
|
18
|
+
/**
|
|
19
|
+
* Extract parameter names
|
|
20
|
+
*/
|
|
21
|
+
export declare function extractParamNames(segments: ParsedSegment[]): string[];
|
|
22
|
+
/**
|
|
23
|
+
* Convert route path to regex pattern
|
|
24
|
+
*/
|
|
25
|
+
export declare function routePathToRegex(routePath: string): RegExp;
|
|
26
|
+
/**
|
|
27
|
+
* Generate a route definition from a file path
|
|
28
|
+
*/
|
|
29
|
+
export declare function generateRouteDefinition(filePath: string, pagesDir: string): RouteDefinition;
|
|
30
|
+
export declare function generateRouteManifest(pagesDir: string): RouteDefinition[];
|
|
31
|
+
export declare function generateRouteManifestCode(definitions: RouteDefinition[]): string;
|
|
32
|
+
//# sourceMappingURL=manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAGA,OAAO,EACH,KAAK,eAAe,EACpB,KAAK,aAAa,EAErB,MAAM,SAAS,CAAA;AAchB;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAqBxD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAgC9E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,EAAE,CAuBrE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,MAAM,CASrE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,MAAM,EAAE,CAIrE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CA2B1D;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,eAAe,CAc3F;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,EAAE,CAMzE;AAED,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,eAAe,EAAE,GAAG,MAAM,CAahF"}
|
package/dist/manifest.js
ADDED
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import native from "../index.js";
|
|
4
|
+
const { generateRouteManifestNative } = native;
|
|
5
|
+
/**
|
|
6
|
+
* Scoring constants for route ranking
|
|
7
|
+
*/
|
|
8
|
+
const SEGMENT_SCORES = {
|
|
9
|
+
[0 /* SegmentType.Static */]: 10,
|
|
10
|
+
[1 /* SegmentType.Dynamic */]: 5,
|
|
11
|
+
[2 /* SegmentType.CatchAll */]: 1,
|
|
12
|
+
[3 /* SegmentType.OptionalCatchAll */]: 0
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Discover all .zen files in the pages directory
|
|
16
|
+
*/
|
|
17
|
+
export function discoverPages(pagesDir) {
|
|
18
|
+
const pages = [];
|
|
19
|
+
function walk(dir) {
|
|
20
|
+
if (!fs.existsSync(dir))
|
|
21
|
+
return;
|
|
22
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
23
|
+
for (const entry of entries) {
|
|
24
|
+
const fullPath = path.join(dir, entry.name);
|
|
25
|
+
if (entry.isDirectory()) {
|
|
26
|
+
walk(fullPath);
|
|
27
|
+
}
|
|
28
|
+
else if (entry.isFile() && entry.name.endsWith(".zen")) {
|
|
29
|
+
pages.push(fullPath);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
walk(pagesDir);
|
|
34
|
+
return pages;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Convert a file path to a route path
|
|
38
|
+
*/
|
|
39
|
+
export function filePathToRoutePath(filePath, pagesDir) {
|
|
40
|
+
const relativePath = path.relative(pagesDir, filePath);
|
|
41
|
+
const withoutExt = relativePath.replace(/\.zen$/, "");
|
|
42
|
+
const segmentsList = withoutExt.split(path.sep);
|
|
43
|
+
const routeSegments = [];
|
|
44
|
+
for (const segment of segmentsList) {
|
|
45
|
+
if (segment === "index")
|
|
46
|
+
continue;
|
|
47
|
+
const optionalCatchAllMatch = segment.match(/^\[\[\.\.\.(\w+)\]\]$/);
|
|
48
|
+
if (optionalCatchAllMatch) {
|
|
49
|
+
routeSegments.push(`*${optionalCatchAllMatch[1]}?`);
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
const catchAllMatch = segment.match(/^\[\.\.\.(\w+)\]$/);
|
|
53
|
+
if (catchAllMatch) {
|
|
54
|
+
routeSegments.push(`*${catchAllMatch[1]}`);
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
const dynamicMatch = segment.match(/^\[(\w+)\]$/);
|
|
58
|
+
if (dynamicMatch) {
|
|
59
|
+
routeSegments.push(`:${dynamicMatch[1]}`);
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
routeSegments.push(segment);
|
|
63
|
+
}
|
|
64
|
+
const routePath = "/" + routeSegments.join("/");
|
|
65
|
+
return routePath === "/" ? "/" : routePath.replace(/\/$/, "");
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Parse a route path into segments
|
|
69
|
+
*/
|
|
70
|
+
export function parseRouteSegments(routePath) {
|
|
71
|
+
if (routePath === "/")
|
|
72
|
+
return [];
|
|
73
|
+
const segmentsList = routePath.slice(1).split("/");
|
|
74
|
+
const parsed = [];
|
|
75
|
+
for (const segment of segmentsList) {
|
|
76
|
+
if (segment.startsWith("*") && segment.endsWith("?")) {
|
|
77
|
+
parsed.push({ segmentType: 3 /* SegmentType.OptionalCatchAll */, paramName: segment.slice(1, -1), raw: segment });
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
if (segment.startsWith("*")) {
|
|
81
|
+
parsed.push({ segmentType: 2 /* SegmentType.CatchAll */, paramName: segment.slice(1), raw: segment });
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
if (segment.startsWith(":")) {
|
|
85
|
+
parsed.push({ segmentType: 1 /* SegmentType.Dynamic */, paramName: segment.slice(1), raw: segment });
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
parsed.push({ segmentType: 0 /* SegmentType.Static */, raw: segment });
|
|
89
|
+
}
|
|
90
|
+
return parsed;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Calculate route score
|
|
94
|
+
*/
|
|
95
|
+
export function calculateRouteScore(segments) {
|
|
96
|
+
if (segments.length === 0)
|
|
97
|
+
return 100;
|
|
98
|
+
let score = 0;
|
|
99
|
+
for (const segment of segments) {
|
|
100
|
+
score += SEGMENT_SCORES[segment.segmentType];
|
|
101
|
+
}
|
|
102
|
+
const staticCount = segments.filter(s => s.segmentType === 0 /* SegmentType.Static */).length;
|
|
103
|
+
score += staticCount * 2;
|
|
104
|
+
return score;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Extract parameter names
|
|
108
|
+
*/
|
|
109
|
+
export function extractParamNames(segments) {
|
|
110
|
+
return segments
|
|
111
|
+
.filter(s => s.paramName !== undefined)
|
|
112
|
+
.map(s => s.paramName);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Convert route path to regex pattern
|
|
116
|
+
*/
|
|
117
|
+
export function routePathToRegex(routePath) {
|
|
118
|
+
if (routePath === "/")
|
|
119
|
+
return /^\/$/;
|
|
120
|
+
const segmentsList = routePath.slice(1).split("/");
|
|
121
|
+
const regexParts = [];
|
|
122
|
+
for (let i = 0; i < segmentsList.length; i++) {
|
|
123
|
+
const segment = segmentsList[i];
|
|
124
|
+
if (!segment)
|
|
125
|
+
continue;
|
|
126
|
+
if (segment.startsWith("*") && segment.endsWith("?")) {
|
|
127
|
+
regexParts.push("(?:\\/(.*))?");
|
|
128
|
+
continue;
|
|
129
|
+
}
|
|
130
|
+
if (segment.startsWith("*")) {
|
|
131
|
+
regexParts.push("\\/(.+)");
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
if (segment.startsWith(":")) {
|
|
135
|
+
regexParts.push("\\/([^/]+)");
|
|
136
|
+
continue;
|
|
137
|
+
}
|
|
138
|
+
const escaped = segment.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
139
|
+
regexParts.push(`\\/${escaped}`);
|
|
140
|
+
}
|
|
141
|
+
return new RegExp(`^${regexParts.join("")}\\/?$`);
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Generate a route definition from a file path
|
|
145
|
+
*/
|
|
146
|
+
export function generateRouteDefinition(filePath, pagesDir) {
|
|
147
|
+
const routePath = filePathToRoutePath(filePath, pagesDir);
|
|
148
|
+
const segments = parseRouteSegments(routePath);
|
|
149
|
+
const paramNames = extractParamNames(segments);
|
|
150
|
+
const score = calculateRouteScore(segments);
|
|
151
|
+
// Note: RouteDefinition extends RouteRecord, which no longer has segments
|
|
152
|
+
return {
|
|
153
|
+
path: routePath,
|
|
154
|
+
paramNames,
|
|
155
|
+
score,
|
|
156
|
+
filePath,
|
|
157
|
+
regex: routePathToRegex(routePath)
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
export function generateRouteManifest(pagesDir) {
|
|
161
|
+
// Optional: use native generator if available, but for now we keep the TS one for build-time safety
|
|
162
|
+
const pages = discoverPages(pagesDir);
|
|
163
|
+
const definitions = pages.map(filePath => generateRouteDefinition(filePath, pagesDir));
|
|
164
|
+
definitions.sort((a, b) => b.score - a.score);
|
|
165
|
+
return definitions;
|
|
166
|
+
}
|
|
167
|
+
export function generateRouteManifestCode(definitions) {
|
|
168
|
+
const routeEntries = definitions.map(def => {
|
|
169
|
+
const regex = routePathToRegex(def.path);
|
|
170
|
+
return ` {
|
|
171
|
+
path: ${JSON.stringify(def.path)},
|
|
172
|
+
regex: ${regex.toString()},
|
|
173
|
+
paramNames: ${JSON.stringify(def.paramNames)},
|
|
174
|
+
score: ${def.score},
|
|
175
|
+
filePath: ${JSON.stringify(def.filePath)}
|
|
176
|
+
}`;
|
|
177
|
+
});
|
|
178
|
+
return `// Auto-generated route manifest\n// Do not edit directly\n\nexport const routeManifest = [\n${routeEntries.join(",\n")}\n];\n`;
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Navigation & Prefetch Runtime
|
|
3
|
+
*
|
|
4
|
+
* Phase 7: Prefetch compiled output, safe SPA navigation, route caching
|
|
5
|
+
*
|
|
6
|
+
* This runtime handles:
|
|
7
|
+
* - Prefetching compiled HTML + JS for routes
|
|
8
|
+
* - Caching prefetched routes
|
|
9
|
+
* - Safe DOM mounting and hydration
|
|
10
|
+
* - Browser history management
|
|
11
|
+
* - Explicit data exposure for navigation
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Route cache entry containing compiled output
|
|
15
|
+
*/
|
|
16
|
+
export interface RouteCacheEntry {
|
|
17
|
+
html: string;
|
|
18
|
+
js: string;
|
|
19
|
+
styles: string[];
|
|
20
|
+
routePath: string;
|
|
21
|
+
compiledAt: number;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Navigation options with explicit data
|
|
25
|
+
*/
|
|
26
|
+
export interface NavigateOptions {
|
|
27
|
+
loaderData?: any;
|
|
28
|
+
props?: any;
|
|
29
|
+
stores?: any;
|
|
30
|
+
replace?: boolean;
|
|
31
|
+
prefetch?: boolean;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Prefetch a route's compiled output
|
|
35
|
+
*
|
|
36
|
+
* @param routePath - The route path to prefetch (e.g., "/dashboard")
|
|
37
|
+
* @returns Promise that resolves when prefetch is complete
|
|
38
|
+
*/
|
|
39
|
+
export declare function prefetchRoute(routePath: string): Promise<void>;
|
|
40
|
+
/**
|
|
41
|
+
* Get cached route entry
|
|
42
|
+
*/
|
|
43
|
+
export declare function getCachedRoute(routePath: string): RouteCacheEntry | null;
|
|
44
|
+
/**
|
|
45
|
+
* Navigate to a route with explicit data
|
|
46
|
+
*
|
|
47
|
+
* @param routePath - The route path to navigate to
|
|
48
|
+
* @param options - Navigation options with loaderData, props, stores
|
|
49
|
+
*/
|
|
50
|
+
export declare function navigate(routePath: string, options?: NavigateOptions): Promise<void>;
|
|
51
|
+
/**
|
|
52
|
+
* Handle browser back/forward navigation
|
|
53
|
+
*/
|
|
54
|
+
export declare function setupHistoryHandling(): void;
|
|
55
|
+
/**
|
|
56
|
+
* Generate navigation runtime code (to be included in bundle)
|
|
57
|
+
*/
|
|
58
|
+
export declare function generateNavigationRuntime(): string;
|
|
59
|
+
//# sourceMappingURL=client-router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-router.d.ts","sourceRoot":"","sources":["../../src/navigation/client-router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,UAAU,CAAC,EAAE,GAAG,CAAA;IAChB,KAAK,CAAC,EAAE,GAAG,CAAA;IACX,MAAM,CAAC,EAAE,GAAG,CAAA;IACZ,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACrB;AAaD;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA+BpE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAGxE;AAED;;;;;GAKG;AACH,wBAAsB,QAAQ,CAC1B,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,eAAoB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAgEf;AAoGD;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAY3C;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,CAgJlD"}
|