@reckona/mreact-router 0.0.201 → 0.0.202
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 +1 -1
- package/dist/adapters/cloudflare.d.ts.map +1 -1
- package/dist/adapters/cloudflare.js +51 -4
- package/dist/adapters/cloudflare.js.map +1 -1
- package/dist/adapters/node.d.ts +7 -0
- package/dist/adapters/node.d.ts.map +1 -1
- package/dist/adapters/node.js +7 -1
- package/dist/adapters/node.js.map +1 -1
- package/dist/adapters/static.d.ts.map +1 -1
- package/dist/adapters/static.js +14 -3
- package/dist/adapters/static.js.map +1 -1
- package/dist/build.d.ts +3 -0
- package/dist/build.d.ts.map +1 -1
- package/dist/build.js +42 -5
- package/dist/build.js.map +1 -1
- package/dist/built-runtime.d.ts +4 -1
- package/dist/built-runtime.d.ts.map +1 -1
- package/dist/built-runtime.js.map +1 -1
- package/dist/cache.d.ts +26 -0
- package/dist/cache.d.ts.map +1 -1
- package/dist/cache.js +78 -12
- package/dist/cache.js.map +1 -1
- package/dist/cli-options.d.ts +4 -0
- package/dist/cli-options.d.ts.map +1 -1
- package/dist/cli-options.js +17 -0
- package/dist/cli-options.js.map +1 -1
- package/dist/cli.js +2 -1
- package/dist/cli.js.map +1 -1
- package/dist/node-server.d.ts +6 -0
- package/dist/node-server.d.ts.map +1 -1
- package/dist/node-server.js +19 -1
- package/dist/node-server.js.map +1 -1
- package/dist/prerender-entry.d.ts +5 -0
- package/dist/prerender-entry.d.ts.map +1 -0
- package/dist/prerender-entry.js +41 -0
- package/dist/prerender-entry.js.map +1 -0
- package/dist/render.d.ts +13 -0
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +139 -87
- package/dist/render.js.map +1 -1
- package/dist/request-header-tracking.d.ts +44 -0
- package/dist/request-header-tracking.d.ts.map +1 -0
- package/dist/request-header-tracking.js +116 -0
- package/dist/request-header-tracking.js.map +1 -0
- package/dist/route-source.d.ts +16 -0
- package/dist/route-source.d.ts.map +1 -1
- package/dist/route-source.js +55 -1
- package/dist/route-source.js.map +1 -1
- package/dist/security-headers.d.ts +16 -0
- package/dist/security-headers.d.ts.map +1 -1
- package/dist/security-headers.js +37 -0
- package/dist/security-headers.js.map +1 -1
- package/dist/serve.d.ts +7 -0
- package/dist/serve.d.ts.map +1 -1
- package/dist/serve.js +94 -28
- package/dist/serve.js.map +1 -1
- package/package.json +11 -11
- package/src/adapters/cloudflare.ts +81 -9
- package/src/adapters/node.ts +14 -1
- package/src/adapters/static.ts +18 -5
- package/src/build.ts +71 -4
- package/src/built-runtime.ts +2 -2
- package/src/cache.ts +117 -11
- package/src/cli-options.ts +24 -0
- package/src/cli.ts +5 -0
- package/src/node-server.ts +27 -1
- package/src/prerender-entry.ts +56 -0
- package/src/render.ts +188 -98
- package/src/request-header-tracking.ts +161 -0
- package/src/route-source.ts +71 -0
- package/src/security-headers.ts +41 -0
- package/src/serve.ts +133 -30
package/README.md
CHANGED
|
@@ -332,7 +332,7 @@ MREACT_ROUTER_LOG=requests mreact-router dev
|
|
|
332
332
|
|
|
333
333
|
Each line includes method, path, status, duration, and runtime. Query strings, headers, and request bodies are intentionally omitted.
|
|
334
334
|
|
|
335
|
-
Built Node output binds to `127.0.0.1` by default. Use `mreact-router start .mreact --host 0.0.0.0 --host-policy=strict` or `HOST=0.0.0.0 MREACT_ROUTER_HOST_POLICY=strict mreact-router start .mreact` inside containers behind explicit port publishing or a reverse proxy. This bind address is separate from Host header trust; configure `--allowed-hosts`, `MREACT_ROUTER_ALLOWED_HOSTS`, or `hostPolicy` for public deployments.
|
|
335
|
+
Built Node output binds to `127.0.0.1` by default. Use `mreact-router start .mreact --host 0.0.0.0 --host-policy=strict` or `HOST=0.0.0.0 MREACT_ROUTER_HOST_POLICY=strict mreact-router start .mreact` inside containers behind explicit port publishing or a reverse proxy. This bind address is separate from Host header trust; configure `--allowed-hosts`, `MREACT_ROUTER_ALLOWED_HOSTS`, or `hostPolicy` for public deployments. Node ignores `X-Forwarded-Proto` by default. Use `--trust-forwarded-proto`, `MREACT_ROUTER_TRUST_FORWARDED_PROTO=1`, or `trustForwardedProto: true` only when a trusted proxy overwrites the header and the Node port is inaccessible to untrusted clients. `hostPolicy: "trusted-proxy"` does not enable protocol trust.
|
|
336
336
|
|
|
337
337
|
Use `mreact-router --help`, `mreact-router help build`, or command-level help such as `mreact-router build --help` to inspect supported commands, build targets, and generated artifacts.
|
|
338
338
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloudflare.d.ts","sourceRoot":"","sources":["../../src/adapters/cloudflare.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAyB,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAE7D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EASL,KAAK,WAAW,EACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EACV,uBAAuB,EAGvB,aAAa,EAEd,MAAM,aAAa,CAAC;AACrB,OAAO,EAML,KAAK,eAAe,EACrB,MAAM,cAAc,CAAC;AAGtB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAK7C,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"cloudflare.d.ts","sourceRoot":"","sources":["../../src/adapters/cloudflare.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,7 @@ import { validateRouteMetadata } from "../metadata.js";
|
|
|
9
9
|
import { routeSecurityHeaders } from "../security-headers.js";
|
|
10
10
|
import { emitRouterDevtoolsEvent } from "./devtools.js";
|
|
11
11
|
import { escapeHtmlAttribute, escapeHtmlText } from "@reckona/mreact-shared/html-escape";
|
|
12
|
+
import { isCurrentPrerenderedRoute } from "../prerender-entry.js";
|
|
12
13
|
const clientPrefix = "/_mreact/client/";
|
|
13
14
|
const cloudflareMiddlewareRouteModuleKey = "__middleware__";
|
|
14
15
|
const defaultPrerenderCacheOrigin = "https://mreact.local";
|
|
@@ -81,7 +82,25 @@ export function createCloudflareRouteModuleRenderer(options) {
|
|
|
81
82
|
if (middlewareResult.type === "response") {
|
|
82
83
|
return middlewareResult.response;
|
|
83
84
|
}
|
|
84
|
-
|
|
85
|
+
if (middlewareResult.request !== request) {
|
|
86
|
+
// The route was matched against the pre-middleware URL, so a rewrite has
|
|
87
|
+
// to re-match: otherwise the rewritten path would still render the module
|
|
88
|
+
// the visitor asked for, which is the module a rewrite is often used to
|
|
89
|
+
// keep them away from. The built runtime re-matches the same way.
|
|
90
|
+
request = middlewareResult.request;
|
|
91
|
+
const rematched = matchCloudflareRoute(sortedCloudflareRoutes(context.serverManifest), new URL(request.url).pathname);
|
|
92
|
+
if (rematched === undefined) {
|
|
93
|
+
return new Response("Not Found", { status: 404 });
|
|
94
|
+
}
|
|
95
|
+
context = { ...context, params: rematched.params, route: rematched.route };
|
|
96
|
+
}
|
|
97
|
+
// Middleware apps skip the prerendered fast path in `handleCloudflareRequest`
|
|
98
|
+
// so that access gates run first, so the stored HTML is resolved here
|
|
99
|
+
// instead, against the post-middleware path.
|
|
100
|
+
const prerendered = prerenderedResponse(context.serverManifest.prerenderedRoutes, normalizeRoutePath(new URL(request.url).pathname), request.method, isCloudflareNavigationRequest(request));
|
|
101
|
+
if (prerendered !== undefined) {
|
|
102
|
+
return prerendered;
|
|
103
|
+
}
|
|
85
104
|
if (context.route.kind !== "server" && isCloudflareNavigationRequest(request)) {
|
|
86
105
|
return cloudflareDocumentReloadNavigationResponse();
|
|
87
106
|
}
|
|
@@ -605,7 +624,13 @@ async function handleCloudflareRequest(options, request, env, context) {
|
|
|
605
624
|
});
|
|
606
625
|
return assetResponse;
|
|
607
626
|
}
|
|
608
|
-
|
|
627
|
+
// Prerendered HTML may only short-circuit `render` when the app has no
|
|
628
|
+
// middleware. Middleware runs inside `render`, so serving stored HTML here
|
|
629
|
+
// would bypass auth, geo blocking and maintenance gates for exactly the
|
|
630
|
+
// routes they are most often used to protect.
|
|
631
|
+
const staticResponse = builtServerManifestHasMiddleware(options.serverManifest)
|
|
632
|
+
? undefined
|
|
633
|
+
: prerenderedResponse(options.serverManifest.prerenderedRoutes, normalizeRoutePath(url.pathname), request.method, isCloudflareNavigationRequest(request));
|
|
609
634
|
if (staticResponse !== undefined) {
|
|
610
635
|
emitRouterDevtoolsEvent({
|
|
611
636
|
method: request.method,
|
|
@@ -690,12 +715,22 @@ function cacheControlHasDirective(cacheControl, directive) {
|
|
|
690
715
|
const normalizedDirective = directive.toLowerCase();
|
|
691
716
|
return cacheControl.split(",").some((part) => part.trim().toLowerCase() === normalizedDirective);
|
|
692
717
|
}
|
|
718
|
+
// `serverManifest.files` is keyed on paths relative to the project root, so a
|
|
719
|
+
// default `src/app` project stores the middleware as "src/app/middleware.ts".
|
|
720
|
+
// This mirrors `hasMiddleware` in built-runtime.ts, which resolves the same two
|
|
721
|
+
// names against the routes directory.
|
|
722
|
+
function builtServerManifestHasMiddleware(manifest) {
|
|
723
|
+
const routesDir = (manifest.routesDir ?? "").replaceAll("\\", "/").replace(/\/+$/, "");
|
|
724
|
+
const prefix = routesDir === "" ? "" : `${routesDir}/`;
|
|
725
|
+
return (manifest.files[`${prefix}middleware.ts`] !== undefined ||
|
|
726
|
+
manifest.files[`${prefix}middleware.mreact.ts`] !== undefined);
|
|
727
|
+
}
|
|
693
728
|
function prerenderedResponse(prerenderedRoutes, path, method, isNavigation) {
|
|
694
729
|
if (method !== "GET" && method !== "HEAD") {
|
|
695
730
|
return undefined;
|
|
696
731
|
}
|
|
697
732
|
const prerendered = prerenderedRoutes?.[path];
|
|
698
|
-
if (prerendered
|
|
733
|
+
if (!isCurrentPrerenderedRoute(prerendered)) {
|
|
699
734
|
return undefined;
|
|
700
735
|
}
|
|
701
736
|
if (isNavigation && !prerendered.html.includes("data-mreact-route-id")) {
|
|
@@ -711,7 +746,7 @@ function cloudflareRouteRequiresModule(route, manifest) {
|
|
|
711
746
|
route.kind === "server" ||
|
|
712
747
|
(route.kind === "page" &&
|
|
713
748
|
(route.segments.some((segment) => segment.kind !== "static") ||
|
|
714
|
-
manifest.prerenderedRoutes?.[route.path]
|
|
749
|
+
!isCurrentPrerenderedRoute(manifest.prerenderedRoutes?.[route.path]))));
|
|
715
750
|
}
|
|
716
751
|
function cloudflareRouteGlobKeyMatchesRoute(key, routeFile) {
|
|
717
752
|
const normalizedKey = normalizeCloudflareRouteModulePath(key);
|
|
@@ -722,6 +757,18 @@ function normalizeCloudflareRouteModulePath(path) {
|
|
|
722
757
|
const withoutPrefix = path.replace(/\\/g, "/").replace(/^\.\//, "").replace(/^\/+/, "");
|
|
723
758
|
return withoutPrefix.replace(/\.(?:mjs|js|ts|tsx)$/, "");
|
|
724
759
|
}
|
|
760
|
+
// The manifest is the same object across requests, so a rewrite-heavy app pays
|
|
761
|
+
// for the specificity sort once rather than on every rewritten request.
|
|
762
|
+
const sortedRoutesByManifest = new WeakMap();
|
|
763
|
+
function sortedCloudflareRoutes(manifest) {
|
|
764
|
+
const cached = sortedRoutesByManifest.get(manifest);
|
|
765
|
+
if (cached !== undefined) {
|
|
766
|
+
return cached;
|
|
767
|
+
}
|
|
768
|
+
const sorted = [...manifest.routes].sort(compareCloudflareRoutes);
|
|
769
|
+
sortedRoutesByManifest.set(manifest, sorted);
|
|
770
|
+
return sorted;
|
|
771
|
+
}
|
|
725
772
|
function matchCloudflareRoute(routes, pathname) {
|
|
726
773
|
const normalizedPath = normalizeRoutePath(pathname);
|
|
727
774
|
const pathSegments = normalizedPath === "/" ? [] : normalizedPath.slice(1).split("/");
|