@c0va23/react-router-dev 7.8.3-alpha.2 → 7.9.4-patch.1

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.
@@ -24,7 +24,11 @@ setServerCallback(
24
24
  );
25
25
 
26
26
  createFromReadableStream<RSCPayload>(getRSCStream()).then((payload) => {
27
- startTransition(() => {
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: unstable_RouterContextProvider
19
+ // loadContext: RouterContextProvider
20
20
  ) {
21
21
  return new Promise((resolve, reject) => {
22
22
  let shellRendered = false;
package/dist/config.d.ts CHANGED
@@ -40,7 +40,7 @@ interface FutureConfig {
40
40
  /**
41
41
  * Enable route middleware
42
42
  */
43
- unstable_middleware: boolean;
43
+ v8_middleware: boolean;
44
44
  unstable_optimizeDeps: boolean;
45
45
  /**
46
46
  * Automatically split route modules into multiple chunks when possible.
package/dist/config.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @c0va23/react-router-dev v7.8.3-alpha.2
2
+ * @c0va23/react-router-dev v7.9.4-patch.1
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
package/dist/routes.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @c0va23/react-router-dev v7.8.3-alpha.2
2
+ * @c0va23/react-router-dev v7.9.4-patch.1
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -1,4 +1,4 @@
1
- import { UNSAFE_MiddlewareEnabled, unstable_RouterContextProvider, AppLoadContext } from 'react-router';
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<unstable_RouterContextProvider> : MaybePromise<AppLoadContext>;
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)
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @c0va23/react-router-dev v7.8.3-alpha.2
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 import_node_events = require("events");
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
- let url = new URL(nodeReq.originalUrl, origin);
102
- let controller = new AbortController();
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
- unstable_middleware: reactRouterUserConfig.future?.unstable_middleware ?? false,
577
- unstable_optimizeDeps: reactRouterUserConfig.future?.unstable_optimizeDeps ?? false,
578
- unstable_splitRouteModules: reactRouterUserConfig.future?.unstable_splitRouteModules ?? false,
579
- unstable_subResourceIntegrity: reactRouterUserConfig.future?.unstable_subResourceIntegrity ?? false,
580
- unstable_viteEnvironmentApi: reactRouterUserConfig.future?.unstable_viteEnvironmentApi ?? false
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({ root, viteNodeContext, reactRouterConfigFile, skipRoutes });
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 toNodeRequest(res, nodeRes);
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
- export { reactRouterVitePlugin as reactRouter };
11
+ declare function reactRouterRSCVitePlugin(): Vite.PluginOption[];
12
+
13
+ export { reactRouterVitePlugin as reactRouter, reactRouterRSCVitePlugin as unstable_reactRouterRSC };