@cedarjs/router 0.0.4
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/LICENSE +21 -0
- package/README.md +36 -0
- package/dist/ActivePageContext.d.ts +15 -0
- package/dist/ActivePageContext.d.ts.map +1 -0
- package/dist/ActivePageContext.js +17 -0
- package/dist/AuthenticatedRoute.d.ts +11 -0
- package/dist/AuthenticatedRoute.d.ts.map +1 -0
- package/dist/AuthenticatedRoute.js +49 -0
- package/dist/PageLoadingContext.d.ts +14 -0
- package/dist/PageLoadingContext.d.ts.map +1 -0
- package/dist/PageLoadingContext.js +29 -0
- package/dist/Route.d.ts +32 -0
- package/dist/Route.d.ts.map +1 -0
- package/dist/Route.js +7 -0
- package/dist/Set.d.ts +58 -0
- package/dist/Set.d.ts.map +1 -0
- package/dist/Set.js +28 -0
- package/dist/a11yUtils.d.ts +14 -0
- package/dist/a11yUtils.d.ts.map +1 -0
- package/dist/a11yUtils.js +35 -0
- package/dist/active-route-loader.d.ts +12 -0
- package/dist/active-route-loader.d.ts.map +1 -0
- package/dist/active-route-loader.js +82 -0
- package/dist/analyzeRoutes.d.ts +44 -0
- package/dist/analyzeRoutes.d.ts.map +1 -0
- package/dist/analyzeRoutes.js +128 -0
- package/dist/cjs/ActivePageContext.d.ts +15 -0
- package/dist/cjs/ActivePageContext.d.ts.map +1 -0
- package/dist/cjs/ActivePageContext.js +42 -0
- package/dist/cjs/AuthenticatedRoute.d.ts +11 -0
- package/dist/cjs/AuthenticatedRoute.d.ts.map +1 -0
- package/dist/cjs/AuthenticatedRoute.js +83 -0
- package/dist/cjs/PageLoadingContext.d.ts +14 -0
- package/dist/cjs/PageLoadingContext.d.ts.map +1 -0
- package/dist/cjs/PageLoadingContext.js +64 -0
- package/dist/cjs/Route.d.ts +32 -0
- package/dist/cjs/Route.d.ts.map +1 -0
- package/dist/cjs/Route.js +41 -0
- package/dist/cjs/Set.d.ts +58 -0
- package/dist/cjs/Set.d.ts.map +1 -0
- package/dist/cjs/Set.js +67 -0
- package/dist/cjs/a11yUtils.d.ts +14 -0
- package/dist/cjs/a11yUtils.d.ts.map +1 -0
- package/dist/cjs/a11yUtils.js +61 -0
- package/dist/cjs/active-route-loader.d.ts +12 -0
- package/dist/cjs/active-route-loader.d.ts.map +1 -0
- package/dist/cjs/active-route-loader.js +116 -0
- package/dist/cjs/analyzeRoutes.d.ts +44 -0
- package/dist/cjs/analyzeRoutes.d.ts.map +1 -0
- package/dist/cjs/analyzeRoutes.js +143 -0
- package/dist/cjs/createNamedContext.d.ts +3 -0
- package/dist/cjs/createNamedContext.d.ts.map +1 -0
- package/dist/cjs/createNamedContext.js +33 -0
- package/dist/cjs/dummyComponent.d.ts +3 -0
- package/dist/cjs/dummyComponent.d.ts.map +1 -0
- package/dist/cjs/dummyComponent.js +24 -0
- package/dist/cjs/history.d.ts +24 -0
- package/dist/cjs/history.d.ts.map +1 -0
- package/dist/cjs/history.js +146 -0
- package/dist/cjs/index.d.ts +35 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +110 -0
- package/dist/cjs/link.d.ts +9 -0
- package/dist/cjs/link.d.ts.map +1 -0
- package/dist/cjs/link.js +62 -0
- package/dist/cjs/location.d.ts +28 -0
- package/dist/cjs/location.d.ts.map +1 -0
- package/dist/cjs/location.js +110 -0
- package/dist/cjs/namedRoutes.d.ts +3 -0
- package/dist/cjs/namedRoutes.d.ts.map +1 -0
- package/dist/cjs/namedRoutes.js +28 -0
- package/dist/cjs/navLink.d.ts +11 -0
- package/dist/cjs/navLink.d.ts.map +1 -0
- package/dist/cjs/navLink.js +70 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/page.d.ts +28 -0
- package/dist/cjs/page.d.ts.map +1 -0
- package/dist/cjs/page.js +42 -0
- package/dist/cjs/params.d.ts +13 -0
- package/dist/cjs/params.d.ts.map +1 -0
- package/dist/cjs/params.js +64 -0
- package/dist/cjs/react-util.d.ts +3 -0
- package/dist/cjs/react-util.d.ts.map +1 -0
- package/dist/cjs/react-util.js +37 -0
- package/dist/cjs/redirect.d.ts +12 -0
- package/dist/cjs/redirect.d.ts.map +1 -0
- package/dist/cjs/redirect.js +35 -0
- package/dist/cjs/route-announcement.d.ts +13 -0
- package/dist/cjs/route-announcement.d.ts.map +1 -0
- package/dist/cjs/route-announcement.js +61 -0
- package/dist/cjs/route-focus.d.ts +12 -0
- package/dist/cjs/route-focus.d.ts.map +1 -0
- package/dist/cjs/route-focus.js +36 -0
- package/dist/cjs/route-validators.d.ts +21 -0
- package/dist/cjs/route-validators.d.ts.map +1 -0
- package/dist/cjs/route-validators.js +71 -0
- package/dist/cjs/routeParamsTypes.d.ts +49 -0
- package/dist/cjs/routeParamsTypes.d.ts.map +1 -0
- package/dist/cjs/routeParamsTypes.js +16 -0
- package/dist/cjs/router-context.d.ts +21 -0
- package/dist/cjs/router-context.d.ts.map +1 -0
- package/dist/cjs/router-context.js +69 -0
- package/dist/cjs/router.d.ts +11 -0
- package/dist/cjs/router.d.ts.map +1 -0
- package/dist/cjs/router.js +207 -0
- package/dist/cjs/rsc/ClientRouter.d.ts +4 -0
- package/dist/cjs/rsc/ClientRouter.d.ts.map +1 -0
- package/dist/cjs/rsc/ClientRouter.js +90 -0
- package/dist/cjs/rsc/RscCache.d.ts +23 -0
- package/dist/cjs/rsc/RscCache.d.ts.map +1 -0
- package/dist/cjs/rsc/RscCache.js +110 -0
- package/dist/cjs/rsc/RscRoutes.d.ts +7 -0
- package/dist/cjs/rsc/RscRoutes.d.ts.map +1 -0
- package/dist/cjs/rsc/RscRoutes.js +124 -0
- package/dist/cjs/rsc/ServerRouteLoader.d.ts +12 -0
- package/dist/cjs/rsc/ServerRouteLoader.d.ts.map +1 -0
- package/dist/cjs/rsc/ServerRouteLoader.js +65 -0
- package/dist/cjs/rsc/ServerRouter.d.ts +11 -0
- package/dist/cjs/rsc/ServerRouter.d.ts.map +1 -0
- package/dist/cjs/rsc/ServerRouter.js +170 -0
- package/dist/cjs/rsc/SsrRouter.d.ts +4 -0
- package/dist/cjs/rsc/SsrRouter.d.ts.map +1 -0
- package/dist/cjs/rsc/SsrRouter.js +56 -0
- package/dist/cjs/rsc/clientSsr.d.ts +2 -0
- package/dist/cjs/rsc/clientSsr.d.ts.map +1 -0
- package/dist/cjs/rsc/clientSsr.js +114 -0
- package/dist/cjs/rsc/rscCss.d.ts +2 -0
- package/dist/cjs/rsc/rscCss.d.ts.map +1 -0
- package/dist/cjs/rsc/rscCss.js +94 -0
- package/dist/cjs/rsc/ssrModuleMap.d.ts +14 -0
- package/dist/cjs/rsc/ssrModuleMap.d.ts.map +1 -0
- package/dist/cjs/rsc/ssrModuleMap.js +49 -0
- package/dist/cjs/rsc/utils.d.ts +20 -0
- package/dist/cjs/rsc/utils.d.ts.map +1 -0
- package/dist/cjs/rsc/utils.js +68 -0
- package/dist/cjs/rsc-link.d.ts +6 -0
- package/dist/cjs/rsc-link.d.ts.map +1 -0
- package/dist/cjs/rsc-link.js +41 -0
- package/dist/cjs/skipNav.d.ts +81 -0
- package/dist/cjs/skipNav.d.ts.map +1 -0
- package/dist/cjs/skipNav.js +69 -0
- package/dist/cjs/splash-page.d.ts +12 -0
- package/dist/cjs/splash-page.d.ts.map +1 -0
- package/dist/cjs/splash-page.js +515 -0
- package/dist/cjs/useBlocker.d.ts +11 -0
- package/dist/cjs/useBlocker.d.ts.map +1 -0
- package/dist/cjs/useBlocker.js +65 -0
- package/dist/cjs/useIsMounted.d.ts +2 -0
- package/dist/cjs/useIsMounted.d.ts.map +1 -0
- package/dist/cjs/useIsMounted.js +37 -0
- package/dist/cjs/useMatch.d.ts +43 -0
- package/dist/cjs/useMatch.d.ts.map +1 -0
- package/dist/cjs/useMatch.js +72 -0
- package/dist/cjs/useRouteName.d.ts +3 -0
- package/dist/cjs/useRouteName.d.ts.map +1 -0
- package/dist/cjs/useRouteName.js +40 -0
- package/dist/cjs/useRoutePaths.d.ts +4 -0
- package/dist/cjs/useRoutePaths.d.ts.map +1 -0
- package/dist/cjs/useRoutePaths.js +50 -0
- package/dist/cjs/util.d.ts +121 -0
- package/dist/cjs/util.d.ts.map +1 -0
- package/dist/cjs/util.js +214 -0
- package/dist/createNamedContext.d.ts +3 -0
- package/dist/createNamedContext.d.ts.map +1 -0
- package/dist/createNamedContext.js +9 -0
- package/dist/dummyComponent.d.ts +3 -0
- package/dist/dummyComponent.d.ts.map +1 -0
- package/dist/dummyComponent.js +4 -0
- package/dist/history.d.ts +24 -0
- package/dist/history.d.ts.map +1 -0
- package/dist/history.js +118 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +49 -0
- package/dist/link.d.ts +9 -0
- package/dist/link.d.ts.map +1 -0
- package/dist/link.js +28 -0
- package/dist/location.d.ts +28 -0
- package/dist/location.d.ts.map +1 -0
- package/dist/location.js +74 -0
- package/dist/namedRoutes.d.ts +3 -0
- package/dist/namedRoutes.d.ts.map +1 -0
- package/dist/namedRoutes.js +4 -0
- package/dist/navLink.d.ts +11 -0
- package/dist/navLink.d.ts.map +1 -0
- package/dist/navLink.js +36 -0
- package/dist/page.d.ts +28 -0
- package/dist/page.d.ts.map +1 -0
- package/dist/page.js +17 -0
- package/dist/params.d.ts +13 -0
- package/dist/params.d.ts.map +1 -0
- package/dist/params.js +28 -0
- package/dist/react-util.d.ts +3 -0
- package/dist/react-util.d.ts.map +1 -0
- package/dist/react-util.js +13 -0
- package/dist/redirect.d.ts +12 -0
- package/dist/redirect.d.ts.map +1 -0
- package/dist/redirect.js +11 -0
- package/dist/route-announcement.d.ts +13 -0
- package/dist/route-announcement.d.ts.map +1 -0
- package/dist/route-announcement.js +31 -0
- package/dist/route-focus.d.ts +12 -0
- package/dist/route-focus.d.ts.map +1 -0
- package/dist/route-focus.js +6 -0
- package/dist/route-validators.d.ts +21 -0
- package/dist/route-validators.d.ts.map +1 -0
- package/dist/route-validators.js +44 -0
- package/dist/routeParamsTypes.d.ts +49 -0
- package/dist/routeParamsTypes.d.ts.map +1 -0
- package/dist/routeParamsTypes.js +0 -0
- package/dist/router-context.d.ts +21 -0
- package/dist/router-context.d.ts.map +1 -0
- package/dist/router-context.js +34 -0
- package/dist/router.d.ts +11 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/router.js +173 -0
- package/dist/rsc/ClientRouter.d.ts +4 -0
- package/dist/rsc/ClientRouter.d.ts.map +1 -0
- package/dist/rsc/ClientRouter.js +56 -0
- package/dist/rsc/RscCache.d.ts +23 -0
- package/dist/rsc/RscCache.d.ts.map +1 -0
- package/dist/rsc/RscCache.js +86 -0
- package/dist/rsc/RscRoutes.d.ts +7 -0
- package/dist/rsc/RscRoutes.d.ts.map +1 -0
- package/dist/rsc/RscRoutes.js +100 -0
- package/dist/rsc/ServerRouteLoader.d.ts +12 -0
- package/dist/rsc/ServerRouteLoader.d.ts.map +1 -0
- package/dist/rsc/ServerRouteLoader.js +31 -0
- package/dist/rsc/ServerRouter.d.ts +11 -0
- package/dist/rsc/ServerRouter.d.ts.map +1 -0
- package/dist/rsc/ServerRouter.js +136 -0
- package/dist/rsc/SsrRouter.d.ts +4 -0
- package/dist/rsc/SsrRouter.d.ts.map +1 -0
- package/dist/rsc/SsrRouter.js +22 -0
- package/dist/rsc/clientSsr.d.ts +2 -0
- package/dist/rsc/clientSsr.d.ts.map +1 -0
- package/dist/rsc/clientSsr.js +80 -0
- package/dist/rsc/rscCss.d.ts +2 -0
- package/dist/rsc/rscCss.d.ts.map +1 -0
- package/dist/rsc/rscCss.js +60 -0
- package/dist/rsc/ssrModuleMap.d.ts +14 -0
- package/dist/rsc/ssrModuleMap.d.ts.map +1 -0
- package/dist/rsc/ssrModuleMap.js +25 -0
- package/dist/rsc/utils.d.ts +20 -0
- package/dist/rsc/utils.d.ts.map +1 -0
- package/dist/rsc/utils.js +31 -0
- package/dist/rsc-link.d.ts +6 -0
- package/dist/rsc-link.d.ts.map +1 -0
- package/dist/rsc-link.js +7 -0
- package/dist/skipNav.d.ts +81 -0
- package/dist/skipNav.d.ts.map +1 -0
- package/dist/skipNav.js +34 -0
- package/dist/splash-page.d.ts +12 -0
- package/dist/splash-page.d.ts.map +1 -0
- package/dist/splash-page.js +481 -0
- package/dist/useBlocker.d.ts +11 -0
- package/dist/useBlocker.d.ts.map +1 -0
- package/dist/useBlocker.js +41 -0
- package/dist/useIsMounted.d.ts +2 -0
- package/dist/useIsMounted.d.ts.map +1 -0
- package/dist/useIsMounted.js +13 -0
- package/dist/useMatch.d.ts +43 -0
- package/dist/useMatch.d.ts.map +1 -0
- package/dist/useMatch.js +48 -0
- package/dist/useRouteName.d.ts +3 -0
- package/dist/useRouteName.d.ts.map +1 -0
- package/dist/useRouteName.js +16 -0
- package/dist/useRoutePaths.d.ts +4 -0
- package/dist/useRoutePaths.d.ts.map +1 -0
- package/dist/useRoutePaths.js +25 -0
- package/dist/util.d.ts +121 -0
- package/dist/util.d.ts.map +1 -0
- package/dist/util.js +183 -0
- package/package.json +127 -0
- package/skip-nav.css +31 -0
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { use, useState, useEffect } from "react";
|
|
2
|
+
import { createFromFetch, encodeReply } from "react-server-dom-webpack/client";
|
|
3
|
+
import { RscCache } from "./RscCache.js";
|
|
4
|
+
const BASE_PATH = "/rw-rsc/";
|
|
5
|
+
const rscCache = new RscCache();
|
|
6
|
+
let updateCurrentRscCacheKey = (key) => {
|
|
7
|
+
console.error("updateCurrentRscCacheKey called before it was set");
|
|
8
|
+
console.error("updateCurrentRscCacheKey key", key);
|
|
9
|
+
};
|
|
10
|
+
function onStreamFinished(fetchPromise, onFinished) {
|
|
11
|
+
return fetchPromise.then((response) => response.clone().text()).then(onFinished);
|
|
12
|
+
}
|
|
13
|
+
async function rsaFetch(serializedLocation, rsaId, rsaArgs) {
|
|
14
|
+
const rscId = "_";
|
|
15
|
+
const searchParams = new URLSearchParams();
|
|
16
|
+
searchParams.set("action_id", rsaId);
|
|
17
|
+
const url = BASE_PATH + rscId + "?" + searchParams + "&" + serializedLocation;
|
|
18
|
+
let body = "";
|
|
19
|
+
try {
|
|
20
|
+
body = await encodeReply(rsaArgs);
|
|
21
|
+
} catch (e) {
|
|
22
|
+
console.error("Error encoding Server Action arguments", e);
|
|
23
|
+
}
|
|
24
|
+
return fetch(url, {
|
|
25
|
+
method: "POST",
|
|
26
|
+
body,
|
|
27
|
+
headers: { "rw-rsc": "1" }
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
function rscFetch(serializedLocation) {
|
|
31
|
+
const rscId = "__rwjs__Routes";
|
|
32
|
+
return fetch(BASE_PATH + rscId + "?" + serializedLocation, {
|
|
33
|
+
headers: { "rw-rsc": "1" }
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
function rscFetchRoutes(serializedLocation) {
|
|
37
|
+
console.log(
|
|
38
|
+
"rscFetchRoutes :: args:\n serializedProps: " + serializedLocation
|
|
39
|
+
);
|
|
40
|
+
const rscCacheKey = serializedLocation;
|
|
41
|
+
const cached = rscCache.get(rscCacheKey);
|
|
42
|
+
if (cached) {
|
|
43
|
+
console.log("rscFetchRoutes :: cache hit for", rscCacheKey);
|
|
44
|
+
return cached;
|
|
45
|
+
} else {
|
|
46
|
+
console.log("rscFetchRoutes :: cache miss for", rscCacheKey);
|
|
47
|
+
}
|
|
48
|
+
const options = {
|
|
49
|
+
// React will hold on to `callServer` and use that when it detects a server
|
|
50
|
+
// action is invoked (like `action={onSubmit}` in a <form> element). So for
|
|
51
|
+
// now at least we need to send it with every RSC request, so React knows
|
|
52
|
+
// what `callServer` method to use for server actions inside the RSC.
|
|
53
|
+
// TODO (RSC): Need to figure out the types for callServer
|
|
54
|
+
// @ts-expect-error types
|
|
55
|
+
callServer: async function(rsaId, args) {
|
|
56
|
+
console.log("RscRoutes :: callServer rsaId", rsaId, "args", args);
|
|
57
|
+
const rscCacheKey2 = `${serializedLocation}::${rsaId}::${Date.now()}`;
|
|
58
|
+
const responsePromise = rsaFetch(serializedLocation, rsaId, args);
|
|
59
|
+
onStreamFinished(responsePromise, () => {
|
|
60
|
+
updateCurrentRscCacheKey(rscCacheKey2);
|
|
61
|
+
});
|
|
62
|
+
const modelPromise2 = createFromFetch(responsePromise, options);
|
|
63
|
+
rscCache.set(rscCacheKey2, modelPromise2);
|
|
64
|
+
const model = await modelPromise2;
|
|
65
|
+
return model.__rwjs__rsa_data;
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
const modelPromise = createFromFetch(rscFetch(serializedLocation), options);
|
|
69
|
+
rscCache.set(rscCacheKey, modelPromise);
|
|
70
|
+
return modelPromise;
|
|
71
|
+
}
|
|
72
|
+
const RscRoutes = ({ pathname, search }) => {
|
|
73
|
+
const serializedLocation = `__rwjs__pathname=${pathname}&__rwjs__search=${search}`;
|
|
74
|
+
const [currentRscCacheKey, setCurrentRscCacheKey] = useState(() => {
|
|
75
|
+
console.log("RscRoutes :: useState initial value");
|
|
76
|
+
rscFetchRoutes(serializedLocation);
|
|
77
|
+
return serializedLocation;
|
|
78
|
+
});
|
|
79
|
+
useEffect(() => {
|
|
80
|
+
console.log("RscRoutes :: useEffect set updateCurrentRscCacheKey");
|
|
81
|
+
updateCurrentRscCacheKey = (key) => {
|
|
82
|
+
console.log("RscRoutes inside updateCurrentRscCacheKey", key);
|
|
83
|
+
setCurrentRscCacheKey(key);
|
|
84
|
+
};
|
|
85
|
+
}, []);
|
|
86
|
+
useEffect(() => {
|
|
87
|
+
console.log("RscRoutes :: useEffect about to call rscFetchRoutes");
|
|
88
|
+
rscFetchRoutes(serializedLocation);
|
|
89
|
+
setCurrentRscCacheKey(serializedLocation);
|
|
90
|
+
}, [serializedLocation]);
|
|
91
|
+
console.log("RscRoutes :: rendering cache entry for\n" + currentRscCacheKey);
|
|
92
|
+
const rscModelPromise = rscCache.get(currentRscCacheKey);
|
|
93
|
+
if (!rscModelPromise) {
|
|
94
|
+
throw new Error("Missing RSC cache entry for " + currentRscCacheKey);
|
|
95
|
+
}
|
|
96
|
+
return use(rscModelPromise).__rwjs__Routes[0];
|
|
97
|
+
};
|
|
98
|
+
export {
|
|
99
|
+
RscRoutes
|
|
100
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { Spec } from '../page.js';
|
|
3
|
+
interface Props {
|
|
4
|
+
path: string;
|
|
5
|
+
spec: Spec;
|
|
6
|
+
params?: Record<string, string>;
|
|
7
|
+
whileLoadingPage?: () => React.ReactNode | null;
|
|
8
|
+
children?: React.ReactNode;
|
|
9
|
+
}
|
|
10
|
+
export declare const ServerRouteLoader: ({ spec, params }: Props) => React.JSX.Element;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=ServerRouteLoader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ServerRouteLoader.d.ts","sourceRoot":"","sources":["../../src/rsc/ServerRouteLoader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAA;AAEvC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAEtC,UAAU,KAAK;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,IAAI,CAAA;IACV,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,gBAAgB,CAAC,EAAE,MAAM,KAAK,CAAC,SAAS,GAAG,IAAI,CAAA;IAC/C,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC3B;AAED,eAAO,MAAM,iBAAiB,qBAAsB,KAAK,sBA+BxD,CAAA"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import React, { Suspense } from "react";
|
|
2
|
+
const ServerRouteLoader = ({ spec, params }) => {
|
|
3
|
+
const LazyRouteComponent = spec.LazyComponent;
|
|
4
|
+
if (params) {
|
|
5
|
+
delete params["ref"];
|
|
6
|
+
delete params["key"];
|
|
7
|
+
}
|
|
8
|
+
return /* @__PURE__ */ React.createElement(Suspense, { fallback: /* @__PURE__ */ React.createElement("div", null, "Loading...") }, /* @__PURE__ */ React.createElement(LazyRouteComponent, { ...params }), /* @__PURE__ */ React.createElement(
|
|
9
|
+
"div",
|
|
10
|
+
{
|
|
11
|
+
id: "redwood-announcer",
|
|
12
|
+
style: {
|
|
13
|
+
position: "absolute",
|
|
14
|
+
top: 0,
|
|
15
|
+
width: 1,
|
|
16
|
+
height: 1,
|
|
17
|
+
padding: 0,
|
|
18
|
+
overflow: "hidden",
|
|
19
|
+
clip: "rect(0, 0, 0, 0)",
|
|
20
|
+
whiteSpace: "nowrap",
|
|
21
|
+
border: 0
|
|
22
|
+
},
|
|
23
|
+
role: "alert",
|
|
24
|
+
"aria-live": "assertive",
|
|
25
|
+
"aria-atomic": "true"
|
|
26
|
+
}
|
|
27
|
+
));
|
|
28
|
+
};
|
|
29
|
+
export {
|
|
30
|
+
ServerRouteLoader
|
|
31
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import type { RouterContextProviderProps } from '../router-context.js';
|
|
4
|
+
import type { TrailingSlashesTypes } from '../util.js';
|
|
5
|
+
export interface RouterProps extends Omit<RouterContextProviderProps, 'routes' | 'activeRouteName'> {
|
|
6
|
+
trailingSlashes?: TrailingSlashesTypes;
|
|
7
|
+
pageLoadingDelay?: number;
|
|
8
|
+
children: ReactNode;
|
|
9
|
+
}
|
|
10
|
+
export declare const Router: React.FC<RouterProps>;
|
|
11
|
+
//# sourceMappingURL=ServerRouter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ServerRouter.d.ts","sourceRoot":"","sources":["../../src/rsc/ServerRouter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,KAAK,MAAM,OAAO,CAAA;AAQzB,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAA;AAEtE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAKtD,MAAM,WAAW,WACf,SAAQ,IAAI,CAAC,0BAA0B,EAAE,QAAQ,GAAG,iBAAiB,CAAC;IACtE,eAAe,CAAC,EAAE,oBAAoB,CAAA;IACtC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,EAAE,SAAS,CAAA;CACpB;AAED,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CA4GxC,CAAA"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { getAuthState, getLocation } from "@cedarjs/server-store";
|
|
3
|
+
import { analyzeRoutes } from "../analyzeRoutes.js";
|
|
4
|
+
import { namedRoutes } from "../namedRoutes.js";
|
|
5
|
+
import { normalizePage } from "../page.js";
|
|
6
|
+
import { SplashPage } from "../splash-page.js";
|
|
7
|
+
import { matchPath, parseSearch, replaceParams, validatePath } from "../util.js";
|
|
8
|
+
import { ServerRouteLoader } from "./ServerRouteLoader.js";
|
|
9
|
+
const Router = ({ paramTypes, children }) => {
|
|
10
|
+
const location = getLocation();
|
|
11
|
+
console.log("ServerRouter.tsx location", location);
|
|
12
|
+
const analyzedRoutes = analyzeRoutes(children, {
|
|
13
|
+
currentPathName: location.pathname,
|
|
14
|
+
// @TODO We haven't handled this with SSR/Streaming yet.
|
|
15
|
+
// May need a babel plugin to extract userParamTypes from Routes.tsx
|
|
16
|
+
userParamTypes: paramTypes
|
|
17
|
+
});
|
|
18
|
+
const {
|
|
19
|
+
pathRouteMap,
|
|
20
|
+
hasRootRoute,
|
|
21
|
+
namedRoutesMap,
|
|
22
|
+
NotFoundPage,
|
|
23
|
+
activeRoutePath
|
|
24
|
+
} = analyzedRoutes;
|
|
25
|
+
Object.assign(namedRoutes, namedRoutesMap);
|
|
26
|
+
const hasGeneratedRoutes = Object.keys(namedRoutes).length > 0;
|
|
27
|
+
const shouldShowSplash = !hasRootRoute && location.pathname === "/" || !hasGeneratedRoutes;
|
|
28
|
+
if (shouldShowSplash && typeof SplashPage !== "undefined") {
|
|
29
|
+
return /* @__PURE__ */ React.createElement(
|
|
30
|
+
SplashPage,
|
|
31
|
+
{
|
|
32
|
+
hasGeneratedRoutes,
|
|
33
|
+
allStandardRoutes: pathRouteMap
|
|
34
|
+
}
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
if (!activeRoutePath) {
|
|
38
|
+
if (NotFoundPage) {
|
|
39
|
+
return /* @__PURE__ */ React.createElement(
|
|
40
|
+
ServerRouteLoader,
|
|
41
|
+
{
|
|
42
|
+
spec: normalizePage(NotFoundPage),
|
|
43
|
+
path: location.pathname
|
|
44
|
+
}
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
const { path, page, name, redirect, whileLoadingPage, sets } = pathRouteMap[activeRoutePath];
|
|
50
|
+
if (!path) {
|
|
51
|
+
throw new Error(`Route "${name}" needs to specify a path`);
|
|
52
|
+
}
|
|
53
|
+
validatePath(path, name || path);
|
|
54
|
+
const { params: pathParams } = matchPath(path, location.pathname, {
|
|
55
|
+
userParamTypes: paramTypes
|
|
56
|
+
});
|
|
57
|
+
const searchParams = parseSearch(location.search);
|
|
58
|
+
const allParams = { ...searchParams, ...pathParams };
|
|
59
|
+
let redirectPath = void 0;
|
|
60
|
+
if (redirect) {
|
|
61
|
+
if (redirect.startsWith("/")) {
|
|
62
|
+
redirectPath = replaceParams(redirect, allParams);
|
|
63
|
+
} else {
|
|
64
|
+
const redirectRouteObject = Object.values(pathRouteMap).find(
|
|
65
|
+
(route) => route.name === redirect
|
|
66
|
+
);
|
|
67
|
+
if (!redirectRouteObject) {
|
|
68
|
+
throw new Error(
|
|
69
|
+
`Redirect target route "${redirect}" does not exist for route "${name}"`
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
redirectPath = replaceParams(redirectRouteObject.path, allParams);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return /* @__PURE__ */ React.createElement(React.Fragment, null, !redirectPath && page && /* @__PURE__ */ React.createElement(
|
|
76
|
+
WrappedPage,
|
|
77
|
+
{
|
|
78
|
+
sets,
|
|
79
|
+
routeLoaderElement: /* @__PURE__ */ React.createElement(
|
|
80
|
+
ServerRouteLoader,
|
|
81
|
+
{
|
|
82
|
+
path,
|
|
83
|
+
spec: normalizePage(page),
|
|
84
|
+
params: allParams,
|
|
85
|
+
whileLoadingPage
|
|
86
|
+
}
|
|
87
|
+
)
|
|
88
|
+
}
|
|
89
|
+
));
|
|
90
|
+
};
|
|
91
|
+
function hasRole(requiredRoles) {
|
|
92
|
+
const { roles } = getAuthState();
|
|
93
|
+
const requiredRolesArray = Array.isArray(requiredRoles) ? requiredRoles : [requiredRoles];
|
|
94
|
+
return requiredRolesArray.some((role) => roles.includes(role));
|
|
95
|
+
}
|
|
96
|
+
const AuthenticatedRoute = ({
|
|
97
|
+
children,
|
|
98
|
+
roles
|
|
99
|
+
}) => {
|
|
100
|
+
const { isAuthenticated } = getAuthState();
|
|
101
|
+
const isAuthorized = isAuthenticated && (!roles || hasRole(roles));
|
|
102
|
+
if (isAuthorized) {
|
|
103
|
+
return /* @__PURE__ */ React.createElement(React.Fragment, null, children);
|
|
104
|
+
}
|
|
105
|
+
if (!isAuthenticated) {
|
|
106
|
+
throw new Error("401 Unauthorized");
|
|
107
|
+
}
|
|
108
|
+
throw new Error("403 Forbidden");
|
|
109
|
+
};
|
|
110
|
+
const WrappedPage = ({ routeLoaderElement, sets }) => {
|
|
111
|
+
if (!sets || sets.length === 0) {
|
|
112
|
+
return routeLoaderElement;
|
|
113
|
+
}
|
|
114
|
+
return sets.reduceRight((acc, set) => {
|
|
115
|
+
let wrapped = set.wrappers.reduceRight((acc2, Wrapper, index) => {
|
|
116
|
+
return React.createElement(
|
|
117
|
+
Wrapper,
|
|
118
|
+
{ ...set.props, key: set.id + "-" + index },
|
|
119
|
+
acc2
|
|
120
|
+
);
|
|
121
|
+
}, acc);
|
|
122
|
+
if (set.isPrivate) {
|
|
123
|
+
const unauthenticated = set.props.unauthenticated;
|
|
124
|
+
if (!unauthenticated || typeof unauthenticated !== "string") {
|
|
125
|
+
throw new Error(
|
|
126
|
+
"You must specify an `unauthenticated` route when using PrivateSet"
|
|
127
|
+
);
|
|
128
|
+
}
|
|
129
|
+
wrapped = /* @__PURE__ */ React.createElement(AuthenticatedRoute, { ...set.props, unauthenticated }, wrapped);
|
|
130
|
+
}
|
|
131
|
+
return wrapped;
|
|
132
|
+
}, routeLoaderElement);
|
|
133
|
+
};
|
|
134
|
+
export {
|
|
135
|
+
Router
|
|
136
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SsrRouter.d.ts","sourceRoot":"","sources":["../../src/rsc/SsrRouter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAA;AAKtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAI/C,eAAO,MAAM,MAAM,6BAA8B,WAAW,sBAQ3D,CAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import React, { useMemo } from "react";
|
|
2
|
+
import { analyzeRoutes } from "../analyzeRoutes.js";
|
|
3
|
+
import { LocationProvider, useLocation } from "../location.js";
|
|
4
|
+
import { namedRoutes } from "../namedRoutes.js";
|
|
5
|
+
import { renderRoutesSsr } from "./clientSsr.js";
|
|
6
|
+
const Router = ({ paramTypes, children }) => {
|
|
7
|
+
return /* @__PURE__ */ React.createElement(LocationProvider, null, /* @__PURE__ */ React.createElement(LocationAwareRouter, { paramTypes }, children));
|
|
8
|
+
};
|
|
9
|
+
const LocationAwareRouter = ({ paramTypes, children }) => {
|
|
10
|
+
const { pathname } = useLocation();
|
|
11
|
+
const { namedRoutesMap } = useMemo(() => {
|
|
12
|
+
return analyzeRoutes(children, {
|
|
13
|
+
currentPathName: pathname,
|
|
14
|
+
userParamTypes: paramTypes
|
|
15
|
+
});
|
|
16
|
+
}, [pathname, children, paramTypes]);
|
|
17
|
+
Object.assign(namedRoutes, namedRoutesMap);
|
|
18
|
+
return renderRoutesSsr(pathname);
|
|
19
|
+
};
|
|
20
|
+
export {
|
|
21
|
+
Router
|
|
22
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clientSsr.d.ts","sourceRoot":"","sources":["../../src/rsc/clientSsr.ts"],"names":[],"mappings":"AAuEA,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,gBA2DrD"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { getPaths } from "@cedarjs/project-config";
|
|
3
|
+
import { moduleMap } from "./ssrModuleMap.js";
|
|
4
|
+
import { importRsdwClient, importRsdwServer, importReact } from "./utils.js";
|
|
5
|
+
import { makeFilePath } from "./utils.js";
|
|
6
|
+
async function getEntries() {
|
|
7
|
+
const entriesPath = getPaths().web.distRscEntries;
|
|
8
|
+
const entries = await import(makeFilePath(entriesPath));
|
|
9
|
+
return entries;
|
|
10
|
+
}
|
|
11
|
+
async function getRoutesComponent() {
|
|
12
|
+
const { serverEntries } = await getEntries();
|
|
13
|
+
const entryPath = path.join(
|
|
14
|
+
getPaths().web.distRsc,
|
|
15
|
+
serverEntries["__rwjs__Routes"]
|
|
16
|
+
);
|
|
17
|
+
console.log("getRoutesComponent entryPath", entryPath);
|
|
18
|
+
const routesModule = await import(makeFilePath(entryPath));
|
|
19
|
+
return routesModule.default;
|
|
20
|
+
}
|
|
21
|
+
function resolveClientEntryForProd(filePath, clientEntries) {
|
|
22
|
+
const basePath = getPaths().web.distSsr;
|
|
23
|
+
const entriesFile = getPaths().web.distRscEntries;
|
|
24
|
+
const baseDir = path.dirname(entriesFile);
|
|
25
|
+
const absoluteClientEntries = Object.fromEntries(
|
|
26
|
+
Object.entries(clientEntries).map(([key, val]) => {
|
|
27
|
+
let fullKey = path.join(baseDir, key);
|
|
28
|
+
if (process.platform === "win32") {
|
|
29
|
+
fullKey = fullKey.replaceAll("\\", "/");
|
|
30
|
+
}
|
|
31
|
+
return [fullKey, basePath + path.sep + val];
|
|
32
|
+
})
|
|
33
|
+
);
|
|
34
|
+
const filePathSlash = filePath.replaceAll("\\", "/");
|
|
35
|
+
const clientEntry = absoluteClientEntries[filePathSlash];
|
|
36
|
+
console.log("resolveClientEntryForProd during SSR - clientEntry", clientEntry);
|
|
37
|
+
if (!clientEntry) {
|
|
38
|
+
if (absoluteClientEntries["*"] === "*") {
|
|
39
|
+
return basePath + path.relative(getPaths().base, filePathSlash);
|
|
40
|
+
}
|
|
41
|
+
throw new Error("No client entry found for " + filePathSlash);
|
|
42
|
+
}
|
|
43
|
+
return clientEntry;
|
|
44
|
+
}
|
|
45
|
+
const rscCache = /* @__PURE__ */ new Map();
|
|
46
|
+
async function renderRoutesSsr(pathname) {
|
|
47
|
+
console.log("renderRoutesSsr pathname", pathname);
|
|
48
|
+
const cached = rscCache.get(pathname);
|
|
49
|
+
if (cached) {
|
|
50
|
+
return cached;
|
|
51
|
+
}
|
|
52
|
+
const Routes = await getRoutesComponent();
|
|
53
|
+
console.log("clientSsr.ts getEntries()", await getEntries());
|
|
54
|
+
const clientEntries = (await getEntries()).ssrEntries;
|
|
55
|
+
const bundlerConfig = new Proxy(
|
|
56
|
+
{},
|
|
57
|
+
{
|
|
58
|
+
get(_target, encodedId) {
|
|
59
|
+
console.log("Proxy get encodedId", encodedId);
|
|
60
|
+
const [filePath, name] = encodedId.split("#");
|
|
61
|
+
const id = resolveClientEntryForProd(filePath, clientEntries);
|
|
62
|
+
console.log("clientSsr.ts::Proxy id", id);
|
|
63
|
+
return { id, chunks: [id], name, async: true };
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
);
|
|
67
|
+
const { createElement } = await importReact();
|
|
68
|
+
const { renderToReadableStream } = await importRsdwServer();
|
|
69
|
+
console.log("clientSsr.ts right before renderToReadableStream");
|
|
70
|
+
const stream = renderToReadableStream(createElement(Routes), bundlerConfig);
|
|
71
|
+
const { createFromReadableStream } = await importRsdwClient();
|
|
72
|
+
const data = createFromReadableStream(stream, {
|
|
73
|
+
ssrManifest: { moduleMap, moduleLoading: null }
|
|
74
|
+
});
|
|
75
|
+
rscCache.set(pathname, data);
|
|
76
|
+
return data;
|
|
77
|
+
}
|
|
78
|
+
export {
|
|
79
|
+
renderRoutesSsr
|
|
80
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rscCss.d.ts","sourceRoot":"","sources":["../../src/rsc/rscCss.ts"],"names":[],"mappings":"AAaA,wBAAgB,6BAA6B,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,kBAiCrE"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { getPaths } from "@cedarjs/project-config";
|
|
4
|
+
function getRscStylesheetLinkGenerator(existingLinks) {
|
|
5
|
+
const clientBuildManifestPath = path.join(
|
|
6
|
+
getPaths().web.distBrowser,
|
|
7
|
+
"client-build-manifest.json"
|
|
8
|
+
);
|
|
9
|
+
const clientBuildManifest = JSON.parse(
|
|
10
|
+
fs.readFileSync(clientBuildManifestPath, "utf-8")
|
|
11
|
+
);
|
|
12
|
+
const clientCss = extractCssMappingFromManifest(clientBuildManifest);
|
|
13
|
+
const serverBuildManifestPath = path.join(
|
|
14
|
+
getPaths().web.distRsc,
|
|
15
|
+
"server-build-manifest.json"
|
|
16
|
+
);
|
|
17
|
+
const serverBuildManifest = JSON.parse(
|
|
18
|
+
fs.readFileSync(serverBuildManifestPath, "utf-8")
|
|
19
|
+
);
|
|
20
|
+
const serverCss = extractCssMappingFromManifest(serverBuildManifest);
|
|
21
|
+
const allCss = /* @__PURE__ */ new Set();
|
|
22
|
+
for (const cssList of clientCss.values()) {
|
|
23
|
+
for (const css of cssList) {
|
|
24
|
+
allCss.add(css);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
for (const cssList of serverCss.values()) {
|
|
28
|
+
for (const css of cssList) {
|
|
29
|
+
allCss.add(css);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
const cssLinks = Array.from(allCss);
|
|
33
|
+
return () => [...existingLinks || [], ...cssLinks];
|
|
34
|
+
}
|
|
35
|
+
function extractCssMappingFromManifest(manifest) {
|
|
36
|
+
const manifestCss = /* @__PURE__ */ new Map();
|
|
37
|
+
const lookupCssAssets = (id) => {
|
|
38
|
+
const assets = [];
|
|
39
|
+
const asset = manifest[id];
|
|
40
|
+
if (!asset) {
|
|
41
|
+
return assets;
|
|
42
|
+
}
|
|
43
|
+
if (asset.css) {
|
|
44
|
+
assets.push(...asset.css);
|
|
45
|
+
}
|
|
46
|
+
if (asset.imports) {
|
|
47
|
+
for (const importId of asset.imports) {
|
|
48
|
+
assets.push(...lookupCssAssets(importId));
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return assets;
|
|
52
|
+
};
|
|
53
|
+
for (const key of Object.keys(manifest)) {
|
|
54
|
+
manifestCss.set(key, lookupCssAssets(key));
|
|
55
|
+
}
|
|
56
|
+
return manifestCss;
|
|
57
|
+
}
|
|
58
|
+
export {
|
|
59
|
+
getRscStylesheetLinkGenerator
|
|
60
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
type SSRModuleMap = null | {
|
|
2
|
+
[clientId: string]: {
|
|
3
|
+
[clientExportName: string]: ClientReferenceManifestEntry;
|
|
4
|
+
};
|
|
5
|
+
};
|
|
6
|
+
type ClientReferenceManifestEntry = ImportManifestEntry;
|
|
7
|
+
type ImportManifestEntry = {
|
|
8
|
+
id: string;
|
|
9
|
+
chunks: string[];
|
|
10
|
+
name: string;
|
|
11
|
+
};
|
|
12
|
+
export declare const moduleMap: SSRModuleMap;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=ssrModuleMap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ssrModuleMap.d.ts","sourceRoot":"","sources":["../../src/rsc/ssrModuleMap.ts"],"names":[],"mappings":"AAEA,KAAK,YAAY,GAAG,IAAI,GAAG;IACzB,CAAC,QAAQ,EAAE,MAAM,GAAG;QAClB,CAAC,gBAAgB,EAAE,MAAM,GAAG,4BAA4B,CAAA;KACzD,CAAA;CACF,CAAA;AACD,KAAK,4BAA4B,GAAG,mBAAmB,CAAA;AACvD,KAAK,mBAAmB,GAAG;IACzB,EAAE,EAAE,MAAM,CAAA;IAEV,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAMD,eAAO,MAAM,SAAS,EAAE,YAuBvB,CAAA"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { makeFilePath } from "./utils.js";
|
|
2
|
+
const moduleMap = new Proxy(
|
|
3
|
+
{},
|
|
4
|
+
{
|
|
5
|
+
get(_target, filePath) {
|
|
6
|
+
return new Proxy(
|
|
7
|
+
{},
|
|
8
|
+
{
|
|
9
|
+
get(_target2, name) {
|
|
10
|
+
filePath = makeFilePath(filePath);
|
|
11
|
+
const manifestEntry = {
|
|
12
|
+
id: filePath,
|
|
13
|
+
chunks: [filePath],
|
|
14
|
+
name
|
|
15
|
+
};
|
|
16
|
+
return manifestEntry;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
);
|
|
23
|
+
export {
|
|
24
|
+
moduleMap
|
|
25
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { default as RSDWClientModule } from 'react-server-dom-webpack/client.edge';
|
|
2
|
+
import type { default as RSDWServerModule } from 'react-server-dom-webpack/server.edge';
|
|
3
|
+
type RSDWClientType = typeof RSDWClientModule;
|
|
4
|
+
type RSDWServerType = typeof RSDWServerModule;
|
|
5
|
+
export declare function makeFilePath(path: string): string;
|
|
6
|
+
/**
|
|
7
|
+
* See vite/streamHelpers.ts.
|
|
8
|
+
*
|
|
9
|
+
* This function ensures we load the same version of rsdw_client to prevent multiple instances of React
|
|
10
|
+
*/
|
|
11
|
+
export declare function importReact(): Promise<any>;
|
|
12
|
+
/**
|
|
13
|
+
* See vite/streamHelpers.ts.
|
|
14
|
+
*
|
|
15
|
+
* This function ensures we load the same version of rsdw_client to prevent multiple instances of React
|
|
16
|
+
*/
|
|
17
|
+
export declare function importRsdwClient(): Promise<RSDWClientType>;
|
|
18
|
+
export declare function importRsdwServer(): Promise<RSDWServerType>;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/rsc/utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,sCAAsC,CAAA;AACvF,OAAO,KAAK,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,sCAAsC,CAAA;AAIvF,KAAK,cAAc,GAAG,OAAO,gBAAgB,CAAA;AAC7C,KAAK,cAAc,GAAG,OAAO,gBAAgB,CAAA;AAE7C,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,UAExC;AAED;;;;GAIG;AACH,wBAAsB,WAAW,iBAKhC;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,cAAc,CAAC,CAOhE;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,cAAc,CAAC,CAWhE"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { pathToFileURL } from "node:url";
|
|
3
|
+
import { getPaths } from "@cedarjs/project-config";
|
|
4
|
+
function makeFilePath(path2) {
|
|
5
|
+
return pathToFileURL(path2).href;
|
|
6
|
+
}
|
|
7
|
+
async function importReact() {
|
|
8
|
+
const distSsr = getPaths().web.distSsr;
|
|
9
|
+
const reactPath = makeFilePath(path.join(distSsr, "__rwjs__react.mjs"));
|
|
10
|
+
return (await import(reactPath)).default;
|
|
11
|
+
}
|
|
12
|
+
async function importRsdwClient() {
|
|
13
|
+
const distSsr = getPaths().web.distSsr;
|
|
14
|
+
const rsdwClientPath = makeFilePath(
|
|
15
|
+
path.join(distSsr, "__rwjs__rsdw-client.mjs")
|
|
16
|
+
);
|
|
17
|
+
return (await import(rsdwClientPath)).default;
|
|
18
|
+
}
|
|
19
|
+
async function importRsdwServer() {
|
|
20
|
+
const dynamicImport = "";
|
|
21
|
+
return import(
|
|
22
|
+
/* @vite-ignore */
|
|
23
|
+
dynamicImport + "react-server-dom-webpack/server.edge"
|
|
24
|
+
);
|
|
25
|
+
}
|
|
26
|
+
export {
|
|
27
|
+
importReact,
|
|
28
|
+
importRsdwClient,
|
|
29
|
+
importRsdwServer,
|
|
30
|
+
makeFilePath
|
|
31
|
+
};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface LinkProps {
|
|
3
|
+
to: string;
|
|
4
|
+
}
|
|
5
|
+
export declare const Link: React.ForwardRefExoticComponent<LinkProps & React.AnchorHTMLAttributes<HTMLAnchorElement> & React.RefAttributes<HTMLAnchorElement>>;
|
|
6
|
+
//# sourceMappingURL=rsc-link.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rsc-link.d.ts","sourceRoot":"","sources":["../src/rsc-link.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqB,MAAM,OAAO,CAAA;AAEzC,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAA;CACX;AAmBD,eAAO,MAAM,IAAI,qIAKf,CAAA"}
|