@c0va23/react-router-dev 7.8.3-alpha.2 → 7.9.4-patch.2
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/CHANGELOG.md +170 -0
- package/dist/cli/index.js +245 -105
- package/dist/config/default-rsc-entries/entry.client.tsx +9 -1
- package/dist/config/default-rsc-entries/entry.rsc.tsx +12 -1
- package/dist/config/default-rsc-entries/entry.ssr.tsx +5 -1
- package/dist/config/defaults/entry.server.node.tsx +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.js +1 -1
- package/dist/routes.js +1 -1
- package/dist/vite/cloudflare.d.ts +2 -2
- package/dist/vite/cloudflare.js +30 -82
- package/dist/vite.d.ts +3 -1
- package/dist/vite.js +1304 -364
- package/package.json +14 -15
- package/dist/internal.d.ts +0 -9
- package/dist/internal.js +0 -2010
|
@@ -24,7 +24,11 @@ setServerCallback(
|
|
|
24
24
|
);
|
|
25
25
|
|
|
26
26
|
createFromReadableStream<RSCPayload>(getRSCStream()).then((payload) => {
|
|
27
|
-
|
|
27
|
+
// @ts-expect-error - on 18 types, requires 19.
|
|
28
|
+
startTransition(async () => {
|
|
29
|
+
const formState =
|
|
30
|
+
payload.type === "render" ? await payload.formState : undefined;
|
|
31
|
+
|
|
28
32
|
hydrateRoot(
|
|
29
33
|
document,
|
|
30
34
|
<StrictMode>
|
|
@@ -33,6 +37,10 @@ createFromReadableStream<RSCPayload>(getRSCStream()).then((payload) => {
|
|
|
33
37
|
createFromReadableStream={createFromReadableStream}
|
|
34
38
|
/>
|
|
35
39
|
</StrictMode>,
|
|
40
|
+
{
|
|
41
|
+
// @ts-expect-error - no types for this yet
|
|
42
|
+
formState,
|
|
43
|
+
},
|
|
36
44
|
);
|
|
37
45
|
});
|
|
38
46
|
});
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createTemporaryReferenceSet,
|
|
3
3
|
decodeAction,
|
|
4
|
+
decodeFormState,
|
|
4
5
|
decodeReply,
|
|
5
6
|
loadServerAction,
|
|
6
7
|
renderToReadableStream,
|
|
@@ -8,15 +9,19 @@ import {
|
|
|
8
9
|
import { unstable_matchRSCServerRequest as matchRSCServerRequest } from "react-router";
|
|
9
10
|
|
|
10
11
|
import routes from "virtual:react-router/unstable_rsc/routes";
|
|
12
|
+
import basename from "virtual:react-router/unstable_rsc/basename";
|
|
13
|
+
import unstable_reactRouterServeConfig from "virtual:react-router/unstable_rsc/react-router-serve-config";
|
|
11
14
|
|
|
12
15
|
export async function fetchServer(request: Request) {
|
|
13
16
|
return await matchRSCServerRequest({
|
|
14
17
|
createTemporaryReferenceSet,
|
|
15
|
-
decodeReply,
|
|
16
18
|
decodeAction,
|
|
19
|
+
decodeFormState,
|
|
20
|
+
decodeReply,
|
|
17
21
|
loadServerAction,
|
|
18
22
|
request,
|
|
19
23
|
routes,
|
|
24
|
+
basename,
|
|
20
25
|
generateResponse(match, options) {
|
|
21
26
|
return new Response(renderToReadableStream(match.payload, options), {
|
|
22
27
|
status: match.statusCode,
|
|
@@ -26,9 +31,15 @@ export async function fetchServer(request: Request) {
|
|
|
26
31
|
});
|
|
27
32
|
}
|
|
28
33
|
|
|
34
|
+
export { unstable_reactRouterServeConfig };
|
|
35
|
+
|
|
29
36
|
export default async function handler(request: Request) {
|
|
30
37
|
const ssr = await import.meta.viteRsc.loadModule<
|
|
31
38
|
typeof import("./entry.ssr")
|
|
32
39
|
>("ssr", "index");
|
|
33
40
|
return ssr.default(request, fetchServer);
|
|
34
41
|
}
|
|
42
|
+
|
|
43
|
+
if (import.meta.hot) {
|
|
44
|
+
import.meta.hot.accept();
|
|
45
|
+
}
|
|
@@ -12,16 +12,20 @@ export default async function handler(
|
|
|
12
12
|
) {
|
|
13
13
|
const bootstrapScriptContent =
|
|
14
14
|
await import.meta.viteRsc.loadBootstrapScriptContent("index");
|
|
15
|
+
|
|
15
16
|
return routeRSCServerRequest({
|
|
16
17
|
request,
|
|
17
18
|
fetchServer,
|
|
18
19
|
createFromReadableStream,
|
|
19
|
-
renderHTML(getPayload) {
|
|
20
|
+
async renderHTML(getPayload) {
|
|
21
|
+
const payload = getPayload();
|
|
22
|
+
|
|
20
23
|
return ReactDomServer.renderToReadableStream(
|
|
21
24
|
<RSCStaticRouter getPayload={getPayload} />,
|
|
22
25
|
{
|
|
23
26
|
bootstrapScriptContent,
|
|
24
27
|
signal: request.signal,
|
|
28
|
+
formState: await payload.formState,
|
|
25
29
|
},
|
|
26
30
|
);
|
|
27
31
|
},
|
|
@@ -16,7 +16,7 @@ export default function handleRequest(
|
|
|
16
16
|
routerContext: EntryContext,
|
|
17
17
|
loadContext: AppLoadContext,
|
|
18
18
|
// If you have middleware enabled:
|
|
19
|
-
// loadContext:
|
|
19
|
+
// loadContext: RouterContextProvider
|
|
20
20
|
) {
|
|
21
21
|
return new Promise((resolve, reject) => {
|
|
22
22
|
let shellRendered = false;
|
package/dist/config.d.ts
CHANGED
package/dist/config.js
CHANGED
package/dist/routes.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { UNSAFE_MiddlewareEnabled,
|
|
1
|
+
import { UNSAFE_MiddlewareEnabled, RouterContextProvider, AppLoadContext } from 'react-router';
|
|
2
2
|
import { Plugin } from 'vite';
|
|
3
3
|
import { PlatformProxy, GetPlatformProxyOptions } from 'wrangler';
|
|
4
4
|
|
|
@@ -10,7 +10,7 @@ type LoadContext<Env, Cf extends CfProperties> = {
|
|
|
10
10
|
type GetLoadContext<Env, Cf extends CfProperties> = (args: {
|
|
11
11
|
request: Request;
|
|
12
12
|
context: LoadContext<Env, Cf>;
|
|
13
|
-
}) => UNSAFE_MiddlewareEnabled extends true ? MaybePromise<
|
|
13
|
+
}) => UNSAFE_MiddlewareEnabled extends true ? MaybePromise<RouterContextProvider> : MaybePromise<AppLoadContext>;
|
|
14
14
|
/**
|
|
15
15
|
* Vite plugin that provides [Node proxies to local workerd
|
|
16
16
|
* bindings](https://developers.cloudflare.com/workers/wrangler/api/#getplatformproxy)
|
package/dist/vite/cloudflare.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @c0va23/react-router-dev v7.
|
|
2
|
+
* @c0va23/react-router-dev v7.9.4-patch.1
|
|
3
3
|
*
|
|
4
4
|
* Copyright (c) Remix Software Inc.
|
|
5
5
|
*
|
|
@@ -45,14 +45,11 @@ __export(cloudflare_exports, {
|
|
|
45
45
|
module.exports = __toCommonJS(cloudflare_exports);
|
|
46
46
|
|
|
47
47
|
// vite/cloudflare-dev-proxy.ts
|
|
48
|
+
var import_node_fetch_server2 = require("@remix-run/node-fetch-server");
|
|
48
49
|
var import_react_router = require("react-router");
|
|
49
50
|
|
|
50
51
|
// vite/node-adapter.ts
|
|
51
|
-
var
|
|
52
|
-
var import_node_tls = require("tls");
|
|
53
|
-
var import_node_stream = require("stream");
|
|
54
|
-
var import_set_cookie_parser = require("set-cookie-parser");
|
|
55
|
-
var import_node = require("@react-router/node");
|
|
52
|
+
var import_node_fetch_server = require("@remix-run/node-fetch-server");
|
|
56
53
|
|
|
57
54
|
// invariant.ts
|
|
58
55
|
function invariant(value, message) {
|
|
@@ -65,76 +62,13 @@ function invariant(value, message) {
|
|
|
65
62
|
}
|
|
66
63
|
|
|
67
64
|
// vite/node-adapter.ts
|
|
68
|
-
function fromNodeHeaders(nodeReq) {
|
|
69
|
-
let nodeHeaders = nodeReq.headers;
|
|
70
|
-
if (nodeReq.httpVersionMajor >= 2) {
|
|
71
|
-
nodeHeaders = { ...nodeHeaders };
|
|
72
|
-
if (nodeHeaders[":authority"]) {
|
|
73
|
-
nodeHeaders.host = nodeHeaders[":authority"];
|
|
74
|
-
}
|
|
75
|
-
delete nodeHeaders[":authority"];
|
|
76
|
-
delete nodeHeaders[":method"];
|
|
77
|
-
delete nodeHeaders[":path"];
|
|
78
|
-
delete nodeHeaders[":scheme"];
|
|
79
|
-
}
|
|
80
|
-
let headers = new Headers();
|
|
81
|
-
for (let [key, values] of Object.entries(nodeHeaders)) {
|
|
82
|
-
if (values) {
|
|
83
|
-
if (Array.isArray(values)) {
|
|
84
|
-
for (let value of values) {
|
|
85
|
-
headers.append(key, value);
|
|
86
|
-
}
|
|
87
|
-
} else {
|
|
88
|
-
headers.set(key, values);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
return headers;
|
|
93
|
-
}
|
|
94
65
|
function fromNodeRequest(nodeReq, nodeRes) {
|
|
95
|
-
let protocol = nodeReq.socket instanceof import_node_tls.TLSSocket && nodeReq.socket.encrypted ? "https" : "http";
|
|
96
|
-
let origin = nodeReq.headers.origin && "null" !== nodeReq.headers.origin ? nodeReq.headers.origin : `${protocol}://${nodeReq.headers.host}`;
|
|
97
66
|
invariant(
|
|
98
67
|
nodeReq.originalUrl,
|
|
99
68
|
"Expected `nodeReq.originalUrl` to be defined"
|
|
100
69
|
);
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
let init = {
|
|
104
|
-
method: nodeReq.method,
|
|
105
|
-
headers: fromNodeHeaders(nodeReq),
|
|
106
|
-
signal: controller.signal
|
|
107
|
-
};
|
|
108
|
-
nodeRes.on("finish", () => controller = null);
|
|
109
|
-
nodeRes.on("close", () => controller?.abort());
|
|
110
|
-
if (nodeReq.method !== "GET" && nodeReq.method !== "HEAD") {
|
|
111
|
-
init.body = (0, import_node.createReadableStreamFromReadable)(nodeReq);
|
|
112
|
-
init.duplex = "half";
|
|
113
|
-
}
|
|
114
|
-
return new Request(url.href, init);
|
|
115
|
-
}
|
|
116
|
-
async function toNodeRequest(res, nodeRes) {
|
|
117
|
-
nodeRes.statusCode = res.status;
|
|
118
|
-
if (!nodeRes.req || nodeRes.req.httpVersionMajor < 2) {
|
|
119
|
-
nodeRes.statusMessage = res.statusText;
|
|
120
|
-
}
|
|
121
|
-
let cookiesStrings = [];
|
|
122
|
-
for (let [name, value] of res.headers) {
|
|
123
|
-
if (name === "set-cookie") {
|
|
124
|
-
cookiesStrings.push(...(0, import_set_cookie_parser.splitCookiesString)(value));
|
|
125
|
-
} else nodeRes.setHeader(name, value);
|
|
126
|
-
}
|
|
127
|
-
if (cookiesStrings.length) {
|
|
128
|
-
nodeRes.setHeader("set-cookie", cookiesStrings);
|
|
129
|
-
}
|
|
130
|
-
if (res.body) {
|
|
131
|
-
let responseBody = res.body;
|
|
132
|
-
let readable = import_node_stream.Readable.from(responseBody);
|
|
133
|
-
readable.pipe(nodeRes);
|
|
134
|
-
await (0, import_node_events.once)(readable, "end");
|
|
135
|
-
} else {
|
|
136
|
-
nodeRes.end();
|
|
137
|
-
}
|
|
70
|
+
nodeReq.url = nodeReq.originalUrl;
|
|
71
|
+
return (0, import_node_fetch_server.createRequest)(nodeReq, nodeRes);
|
|
138
72
|
}
|
|
139
73
|
|
|
140
74
|
// vite/vite.ts
|
|
@@ -407,7 +341,8 @@ async function resolveConfig({
|
|
|
407
341
|
root,
|
|
408
342
|
viteNodeContext,
|
|
409
343
|
reactRouterConfigFile,
|
|
410
|
-
skipRoutes
|
|
344
|
+
skipRoutes,
|
|
345
|
+
validateConfig
|
|
411
346
|
}) {
|
|
412
347
|
let reactRouterUserConfig = {};
|
|
413
348
|
if (reactRouterConfigFile) {
|
|
@@ -425,6 +360,12 @@ async function resolveConfig({
|
|
|
425
360
|
return err(`${reactRouterConfigFile} must export a config`);
|
|
426
361
|
}
|
|
427
362
|
reactRouterUserConfig = configModule.default;
|
|
363
|
+
if (validateConfig) {
|
|
364
|
+
const error = validateConfig(reactRouterUserConfig);
|
|
365
|
+
if (error) {
|
|
366
|
+
return err(error);
|
|
367
|
+
}
|
|
368
|
+
}
|
|
428
369
|
} catch (error) {
|
|
429
370
|
return err(`Error loading ${reactRouterConfigFile}: ${error}`);
|
|
430
371
|
}
|
|
@@ -513,7 +454,7 @@ async function resolveConfig({
|
|
|
513
454
|
}
|
|
514
455
|
let appDirectory = import_pathe3.default.resolve(root, userAppDirectory || "app");
|
|
515
456
|
let buildDirectory = import_pathe3.default.resolve(root, userBuildDirectory);
|
|
516
|
-
let rootRouteFile = findEntry(appDirectory, "root");
|
|
457
|
+
let rootRouteFile = findEntry(appDirectory, "root", { absolute: true });
|
|
517
458
|
if (!rootRouteFile) {
|
|
518
459
|
let rootRouteDisplayPath = import_pathe3.default.relative(
|
|
519
460
|
root,
|
|
@@ -554,7 +495,7 @@ async function resolveConfig({
|
|
|
554
495
|
{
|
|
555
496
|
id: "root",
|
|
556
497
|
path: "",
|
|
557
|
-
file: rootRouteFile,
|
|
498
|
+
file: import_pathe3.default.relative(appDirectory, rootRouteFile),
|
|
558
499
|
children: result.routeConfig
|
|
559
500
|
}
|
|
560
501
|
];
|
|
@@ -573,11 +514,11 @@ async function resolveConfig({
|
|
|
573
514
|
}
|
|
574
515
|
}
|
|
575
516
|
let future = {
|
|
576
|
-
|
|
577
|
-
unstable_optimizeDeps:
|
|
578
|
-
unstable_splitRouteModules:
|
|
579
|
-
unstable_subResourceIntegrity:
|
|
580
|
-
unstable_viteEnvironmentApi:
|
|
517
|
+
v8_middleware: userAndPresetConfigs.future?.v8_middleware ?? false,
|
|
518
|
+
unstable_optimizeDeps: userAndPresetConfigs.future?.unstable_optimizeDeps ?? false,
|
|
519
|
+
unstable_splitRouteModules: userAndPresetConfigs.future?.unstable_splitRouteModules ?? false,
|
|
520
|
+
unstable_subResourceIntegrity: userAndPresetConfigs.future?.unstable_subResourceIntegrity ?? false,
|
|
521
|
+
unstable_viteEnvironmentApi: userAndPresetConfigs.future?.unstable_viteEnvironmentApi ?? false
|
|
581
522
|
};
|
|
582
523
|
let reactRouterConfig = deepFreeze({
|
|
583
524
|
appDirectory,
|
|
@@ -603,7 +544,8 @@ async function createConfigLoader({
|
|
|
603
544
|
rootDirectory: root,
|
|
604
545
|
watch,
|
|
605
546
|
mode,
|
|
606
|
-
skipRoutes
|
|
547
|
+
skipRoutes,
|
|
548
|
+
validateConfig
|
|
607
549
|
}) {
|
|
608
550
|
root = import_pathe3.default.normalize(root ?? process.env.REACT_ROUTER_ROOT ?? process.cwd());
|
|
609
551
|
let vite2 = await import("vite");
|
|
@@ -622,7 +564,13 @@ async function createConfigLoader({
|
|
|
622
564
|
});
|
|
623
565
|
};
|
|
624
566
|
updateReactRouterConfigFile();
|
|
625
|
-
let getConfig = () => resolveConfig({
|
|
567
|
+
let getConfig = () => resolveConfig({
|
|
568
|
+
root,
|
|
569
|
+
viteNodeContext,
|
|
570
|
+
reactRouterConfigFile,
|
|
571
|
+
skipRoutes,
|
|
572
|
+
validateConfig
|
|
573
|
+
});
|
|
626
574
|
let appDirectory;
|
|
627
575
|
let initialConfigResult = await getConfig();
|
|
628
576
|
if (!initialConfigResult.ok) {
|
|
@@ -870,7 +818,7 @@ var cloudflareDevProxyVitePlugin = (options = {}) => {
|
|
|
870
818
|
context ??= await getContext();
|
|
871
819
|
let loadContext = getLoadContext ? await getLoadContext({ request: req, context }) : context;
|
|
872
820
|
let res = await handler(req, loadContext);
|
|
873
|
-
await
|
|
821
|
+
await (0, import_node_fetch_server2.sendResponse)(nodeRes, res);
|
|
874
822
|
} catch (error) {
|
|
875
823
|
next(error);
|
|
876
824
|
}
|
package/dist/vite.d.ts
CHANGED
|
@@ -8,4 +8,6 @@ type ReactRouterVitePlugin = () => Vite.Plugin[];
|
|
|
8
8
|
*/
|
|
9
9
|
declare const reactRouterVitePlugin: ReactRouterVitePlugin;
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
declare function reactRouterRSCVitePlugin(): Vite.PluginOption[];
|
|
12
|
+
|
|
13
|
+
export { reactRouterVitePlugin as reactRouter, reactRouterRSCVitePlugin as unstable_reactRouterRSC };
|