@reckona/mreact-router 0.0.203 → 0.0.205
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +53 -9
- package/dist/actions.d.ts +6 -0
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +70 -10
- package/dist/actions.js.map +1 -1
- package/dist/adapters/aws-lambda.d.ts +15 -4
- package/dist/adapters/aws-lambda.d.ts.map +1 -1
- package/dist/adapters/aws-lambda.js +301 -63
- package/dist/adapters/aws-lambda.js.map +1 -1
- package/dist/adapters/cloudflare.d.ts +2 -1
- package/dist/adapters/cloudflare.d.ts.map +1 -1
- package/dist/adapters/cloudflare.js +18 -10
- package/dist/adapters/cloudflare.js.map +1 -1
- package/dist/adapters/edge.d.ts +1 -1
- package/dist/adapters/edge.d.ts.map +1 -1
- package/dist/adapters/edge.js.map +1 -1
- package/dist/adapters/node.d.ts +5 -3
- package/dist/adapters/node.d.ts.map +1 -1
- package/dist/adapters/node.js +2 -1
- package/dist/adapters/node.js.map +1 -1
- package/dist/adapters/static.d.ts.map +1 -1
- package/dist/adapters/static.js +24 -2
- package/dist/adapters/static.js.map +1 -1
- package/dist/build.d.ts +1 -0
- package/dist/build.d.ts.map +1 -1
- package/dist/build.js +91 -5
- package/dist/build.js.map +1 -1
- package/dist/built-runtime.d.ts +2 -0
- package/dist/built-runtime.d.ts.map +1 -1
- package/dist/built-runtime.js +16 -0
- package/dist/built-runtime.js.map +1 -1
- package/dist/cache.d.ts +3 -1
- package/dist/cache.d.ts.map +1 -1
- package/dist/cache.js +211 -13
- package/dist/cache.js.map +1 -1
- package/dist/cli.js +12 -1
- package/dist/cli.js.map +1 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +32 -1
- package/dist/client.js.map +1 -1
- package/dist/config.d.ts +3 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +21 -2
- package/dist/config.js.map +1 -1
- package/dist/csp.d.ts +1 -0
- package/dist/csp.d.ts.map +1 -1
- package/dist/csp.js +11 -6
- package/dist/csp.js.map +1 -1
- package/dist/dehydrate-policy.d.ts +3 -0
- package/dist/dehydrate-policy.d.ts.map +1 -0
- package/dist/dehydrate-policy.js +16 -0
- package/dist/dehydrate-policy.js.map +1 -0
- package/dist/dev-server.d.ts +7 -2
- package/dist/dev-server.d.ts.map +1 -1
- package/dist/dev-server.js +120 -11
- package/dist/dev-server.js.map +1 -1
- package/dist/http.d.ts +1 -1
- package/dist/http.d.ts.map +1 -1
- package/dist/http.js +147 -7
- package/dist/http.js.map +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +22 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +22 -8
- package/dist/logger.js.map +1 -1
- package/dist/metadata.d.ts +8 -0
- package/dist/metadata.d.ts.map +1 -1
- package/dist/metadata.js +60 -22
- package/dist/metadata.js.map +1 -1
- package/dist/navigation-marker.d.ts.map +1 -1
- package/dist/navigation-marker.js +72 -9
- package/dist/navigation-marker.js.map +1 -1
- package/dist/navigation.d.ts +1 -0
- package/dist/navigation.d.ts.map +1 -1
- package/dist/navigation.js +1 -1
- package/dist/navigation.js.map +1 -1
- package/dist/node-server.d.ts +5 -2
- package/dist/node-server.d.ts.map +1 -1
- package/dist/node-server.js +75 -6
- package/dist/node-server.js.map +1 -1
- package/dist/prerender-entry.d.ts +14 -0
- package/dist/prerender-entry.d.ts.map +1 -1
- package/dist/prerender-entry.js +40 -3
- package/dist/prerender-entry.js.map +1 -1
- package/dist/render.d.ts +9 -1
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +102 -123
- package/dist/render.js.map +1 -1
- package/dist/serve.d.ts +8 -2
- package/dist/serve.d.ts.map +1 -1
- package/dist/serve.js +22 -20
- package/dist/serve.js.map +1 -1
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +52 -19
- package/dist/session.js.map +1 -1
- package/dist/upgrade.d.ts +59 -2
- package/dist/upgrade.d.ts.map +1 -1
- package/dist/upgrade.js +282 -1
- package/dist/upgrade.js.map +1 -1
- package/dist/vite-config.d.ts +2 -0
- package/dist/vite-config.d.ts.map +1 -1
- package/dist/vite-config.js +2 -0
- package/dist/vite-config.js.map +1 -1
- package/dist/vite.d.ts +4 -1
- package/dist/vite.d.ts.map +1 -1
- package/dist/vite.js +117 -6
- package/dist/vite.js.map +1 -1
- package/package.json +11 -11
- package/src/actions.ts +81 -11
- package/src/adapters/aws-lambda.ts +426 -115
- package/src/adapters/cloudflare.ts +29 -13
- package/src/adapters/edge.ts +2 -0
- package/src/adapters/node.ts +8 -10
- package/src/adapters/static.ts +31 -2
- package/src/build.ts +117 -10
- package/src/built-runtime.ts +28 -0
- package/src/cache.ts +262 -15
- package/src/cli.ts +14 -1
- package/src/client.ts +32 -1
- package/src/config.ts +43 -6
- package/src/csp.ts +14 -11
- package/src/dehydrate-policy.ts +23 -0
- package/src/dev-server.ts +188 -15
- package/src/http.ts +172 -6
- package/src/index.ts +14 -1
- package/src/logger.ts +47 -10
- package/src/metadata.ts +125 -60
- package/src/navigation-marker.ts +79 -9
- package/src/navigation.ts +1 -1
- package/src/node-server.ts +128 -22
- package/src/prerender-entry.ts +52 -3
- package/src/render.ts +807 -753
- package/src/serve.ts +49 -56
- package/src/session.ts +56 -25
- package/src/upgrade.ts +402 -3
- package/src/vite-config.ts +6 -0
- package/src/vite.ts +157 -5
package/src/prerender-entry.ts
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import type { BuiltPrerenderedRoute } from "./build.js";
|
|
2
|
+
import { responseHeadersContainCspNonce } from "./csp.js";
|
|
2
3
|
import { hasNavigationRouteMarker } from "./navigation-marker.js";
|
|
3
4
|
|
|
4
5
|
export const PRERENDERED_ROUTE_SCHEMA_VERSION = 4;
|
|
5
6
|
|
|
7
|
+
const validatedNavigationHtmlByEntry = new WeakMap<object, string | null>();
|
|
8
|
+
|
|
6
9
|
export function isCurrentPrerenderedRoute(value: unknown): value is BuiltPrerenderedRoute {
|
|
7
10
|
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
8
11
|
return false;
|
|
@@ -17,9 +20,6 @@ export function isCurrentPrerenderedRoute(value: unknown): value is BuiltPrerend
|
|
|
17
20
|
!hasStoredHstsHeader(entry.headers) &&
|
|
18
21
|
isCanonicalHstsHeader(entry.strictTransportSecurity) &&
|
|
19
22
|
typeof entry.html === "string" &&
|
|
20
|
-
(entry.navigationHtml === undefined ||
|
|
21
|
-
(typeof entry.navigationHtml === "string" &&
|
|
22
|
-
hasNavigationRouteMarker(entry.navigationHtml))) &&
|
|
23
23
|
typeof entry.status === "number" &&
|
|
24
24
|
Number.isInteger(entry.status) &&
|
|
25
25
|
entry.status >= 100 &&
|
|
@@ -27,6 +27,39 @@ export function isCurrentPrerenderedRoute(value: unknown): value is BuiltPrerend
|
|
|
27
27
|
);
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
+
/**
|
|
31
|
+
* Returns a navigation variant only after validating its route marker.
|
|
32
|
+
*
|
|
33
|
+
* Stored entries are stable objects during a runtime's lifetime, so the
|
|
34
|
+
* marker scan is cached by identity. Document requests never call this
|
|
35
|
+
* function and therefore never inspect navigation HTML.
|
|
36
|
+
*/
|
|
37
|
+
export function validatedPrerenderedNavigationHtml(
|
|
38
|
+
entry: BuiltPrerenderedRoute,
|
|
39
|
+
): string | undefined {
|
|
40
|
+
const cached = validatedNavigationHtmlByEntry.get(entry);
|
|
41
|
+
if (cached !== undefined) {
|
|
42
|
+
return cached === null ? undefined : cached;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const candidate = entry.navigationHtml;
|
|
46
|
+
const validated =
|
|
47
|
+
typeof candidate === "string" && hasNavigationRouteMarker(candidate) ? candidate : null;
|
|
48
|
+
validatedNavigationHtmlByEntry.set(entry, validated);
|
|
49
|
+
return validated === null ? undefined : validated;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Adds a regenerated navigation variant only when it satisfies the marker
|
|
54
|
+
* contract. Invalid navigation output must not replace a valid document.
|
|
55
|
+
*/
|
|
56
|
+
export function mergePrerenderedNavigationHtml(
|
|
57
|
+
entry: BuiltPrerenderedRoute,
|
|
58
|
+
navigationHtml: string,
|
|
59
|
+
): BuiltPrerenderedRoute {
|
|
60
|
+
return hasNavigationRouteMarker(navigationHtml) ? { ...entry, navigationHtml } : entry;
|
|
61
|
+
}
|
|
62
|
+
|
|
30
63
|
function hasStoredHstsHeader(headers: Record<string, string>): boolean {
|
|
31
64
|
try {
|
|
32
65
|
return new Headers(headers).has("strict-transport-security");
|
|
@@ -47,6 +80,21 @@ export function isVisitorDependentResponse(response: Response): boolean {
|
|
|
47
80
|
return isVisitorDependentHeaders(response.headers);
|
|
48
81
|
}
|
|
49
82
|
|
|
83
|
+
export function protectNonceBearingResponse(response: Response): Response {
|
|
84
|
+
if (!responseHeadersContainCspNonce(response.headers)) {
|
|
85
|
+
return response;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const headers = new Headers(response.headers);
|
|
89
|
+
headers.set("cache-control", "private, no-store");
|
|
90
|
+
headers.set("x-mreact-cache", "DYNAMIC");
|
|
91
|
+
return new Response(response.body, {
|
|
92
|
+
headers,
|
|
93
|
+
status: response.status,
|
|
94
|
+
statusText: response.statusText,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
|
|
50
98
|
export function storedPrerenderedRouteHeaders(headers: Headers): Record<string, string> {
|
|
51
99
|
const stored: Record<string, string> = {};
|
|
52
100
|
|
|
@@ -114,6 +162,7 @@ function isVisitorDependentHeaders(headers: Headers): boolean {
|
|
|
114
162
|
return (
|
|
115
163
|
headers.get("x-mreact-cache")?.toUpperCase() === "DYNAMIC" ||
|
|
116
164
|
headers.has("set-cookie") ||
|
|
165
|
+
responseHeadersContainCspNonce(headers) ||
|
|
117
166
|
hasVisitorDependentVary ||
|
|
118
167
|
forbidsSharedStorage
|
|
119
168
|
);
|