@react-router/dev 0.0.0-experimental-35027c3be → 0.0.0-experimental-47c4c03cf
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 +51 -0
- package/README.md +1 -1
- package/dist/cli/index.js +14 -36
- package/dist/config.d.ts +0 -1
- package/dist/config.js +1 -1
- package/dist/routes.js +1 -1
- package/dist/static/refresh-utils.cjs +6 -1
- package/dist/vite/cloudflare.js +1 -2
- package/dist/vite.js +97 -73
- package/package.json +6 -6
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,56 @@
|
|
|
1
1
|
# `@react-router/dev`
|
|
2
2
|
|
|
3
|
+
## 7.4.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- Generate types for `virtual:react-router/server-build` module ([#13152](https://github.com/remix-run/react-router/pull/13152))
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- When `future.unstable_splitRouteModules` is set to `"enforce"`, allow both splittable and unsplittable root route exports since it's always in a single chunk. ([#13238](https://github.com/remix-run/react-router/pull/13238))
|
|
12
|
+
- When `future.unstable_viteEnvironmentApi` is enabled, allow plugins that override the default SSR environment (such as `@cloudflare/vite-plugin`) to be placed before or after the React Router plugin. ([#13183](https://github.com/remix-run/react-router/pull/13183))
|
|
13
|
+
- Fix conflicts with other Vite plugins that use the `configureServer` and/or `configurePreviewServer` hooks ([#13184](https://github.com/remix-run/react-router/pull/13184))
|
|
14
|
+
- Updated dependencies:
|
|
15
|
+
- `react-router@7.4.0`
|
|
16
|
+
- `@react-router/node@7.4.0`
|
|
17
|
+
- `@react-router/serve@7.4.0`
|
|
18
|
+
|
|
19
|
+
## 7.3.0
|
|
20
|
+
|
|
21
|
+
### Patch Changes
|
|
22
|
+
|
|
23
|
+
- Fix support for custom client `build.rollupOptions.output.entryFileNames` ([#13098](https://github.com/remix-run/react-router/pull/13098))
|
|
24
|
+
|
|
25
|
+
- Fix usage of `prerender` option when `serverBundles` option has been configured or provided by a preset, e.g. `vercelPreset` from `@vercel/react-router` ([#13082](https://github.com/remix-run/react-router/pull/13082))
|
|
26
|
+
|
|
27
|
+
- Fix support for custom `build.assetsDir` ([#13077](https://github.com/remix-run/react-router/pull/13077))
|
|
28
|
+
|
|
29
|
+
- Remove unused dependencies ([#13134](https://github.com/remix-run/react-router/pull/13134))
|
|
30
|
+
|
|
31
|
+
- Stub all routes except root in "SPA Mode" server builds to avoid issues when route modules or their dependencies import non-SSR-friendly modules ([#13023](https://github.com/remix-run/react-router/pull/13023))
|
|
32
|
+
|
|
33
|
+
- Fix errors with `future.unstable_viteEnvironmentApi` when the `ssr` environment has been configured by another plugin to be a custom `Vite.DevEnvironment` rather than the default `Vite.RunnableDevEnvironment` ([#13008](https://github.com/remix-run/react-router/pull/13008))
|
|
34
|
+
|
|
35
|
+
- Remove unused Vite file system watcher ([#13133](https://github.com/remix-run/react-router/pull/13133))
|
|
36
|
+
|
|
37
|
+
- Fix support for custom SSR build input when `serverBundles` option has been configured ([#13107](https://github.com/remix-run/react-router/pull/13107))
|
|
38
|
+
|
|
39
|
+
Note that for consumers using the `future.unstable_viteEnvironmentApi` and `serverBundles` options together, hyphens are no longer supported in server bundle IDs since they also need to be valid Vite environment names.
|
|
40
|
+
|
|
41
|
+
- Fix dev server when using HTTPS by stripping HTTP/2 pseudo headers from dev server requests ([#12830](https://github.com/remix-run/react-router/pull/12830))
|
|
42
|
+
|
|
43
|
+
- Lazy load Cloudflare platform proxy on first dev server request when using the `cloudflareDevProxy` Vite plugin to avoid creating unnecessary workerd processes ([#13016](https://github.com/remix-run/react-router/pull/13016))
|
|
44
|
+
|
|
45
|
+
- When `future.unstable_viteEnvironmentApi` is enabled and the `ssr` environment has `optimizeDeps.noDiscovery` disabled, define `optimizeDeps.entries` and `optimizeDeps.include` ([#13007](https://github.com/remix-run/react-router/pull/13007))
|
|
46
|
+
|
|
47
|
+
- Fix duplicated entries in typegen for layout routes and their corresponding index route ([#13140](https://github.com/remix-run/react-router/pull/13140))
|
|
48
|
+
|
|
49
|
+
- Updated dependencies:
|
|
50
|
+
- `react-router@7.3.0`
|
|
51
|
+
- `@react-router/node@7.3.0`
|
|
52
|
+
- `@react-router/serve@7.3.0`
|
|
53
|
+
|
|
3
54
|
## 7.2.0
|
|
4
55
|
|
|
5
56
|
### Minor Changes
|
package/README.md
CHANGED
package/dist/cli/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
* @react-router/dev v0.0.0-experimental-
|
|
3
|
+
* @react-router/dev v0.0.0-experimental-47c4c03cf
|
|
4
4
|
*
|
|
5
5
|
* Copyright (c) Remix Software Inc.
|
|
6
6
|
*
|
|
@@ -419,7 +419,6 @@ async function resolveConfig({
|
|
|
419
419
|
unstable_middleware: reactRouterUserConfig.future?.unstable_middleware ?? false,
|
|
420
420
|
unstable_optimizeDeps: reactRouterUserConfig.future?.unstable_optimizeDeps ?? false,
|
|
421
421
|
unstable_splitRouteModules: reactRouterUserConfig.future?.unstable_splitRouteModules ?? false,
|
|
422
|
-
unstable_subResourceIntegrity: reactRouterUserConfig.future?.unstable_subResourceIntegrity ?? false,
|
|
423
422
|
unstable_viteEnvironmentApi: reactRouterUserConfig.future?.unstable_viteEnvironmentApi ?? false
|
|
424
423
|
};
|
|
425
424
|
let reactRouterConfig = deepFreeze({
|
|
@@ -861,7 +860,7 @@ async function writeAll(ctx) {
|
|
|
861
860
|
});
|
|
862
861
|
const registerPath = Path4.join(typegenDir, "+register.ts");
|
|
863
862
|
import_node_fs3.default.writeFileSync(registerPath, register(ctx));
|
|
864
|
-
const virtualPath = Path4.join(typegenDir, "+virtual.ts");
|
|
863
|
+
const virtualPath = Path4.join(typegenDir, "+virtual.d.ts");
|
|
865
864
|
import_node_fs3.default.writeFileSync(virtualPath, virtual);
|
|
866
865
|
}
|
|
867
866
|
function register(ctx) {
|
|
@@ -1048,6 +1047,7 @@ var init_route_chunks = __esm({
|
|
|
1048
1047
|
routeChunkExportNames = [
|
|
1049
1048
|
"clientAction",
|
|
1050
1049
|
"clientLoader",
|
|
1050
|
+
"unstable_clientMiddleware",
|
|
1051
1051
|
"HydrateFallback"
|
|
1052
1052
|
];
|
|
1053
1053
|
mainChunkName = "main";
|
|
@@ -1057,6 +1057,7 @@ var init_route_chunks = __esm({
|
|
|
1057
1057
|
main: `${routeChunkQueryStringPrefix}main`,
|
|
1058
1058
|
clientAction: `${routeChunkQueryStringPrefix}clientAction`,
|
|
1059
1059
|
clientLoader: `${routeChunkQueryStringPrefix}clientLoader`,
|
|
1060
|
+
unstable_clientMiddleware: `${routeChunkQueryStringPrefix}unstable_clientMiddleware`,
|
|
1060
1061
|
HydrateFallback: `${routeChunkQueryStringPrefix}HydrateFallback`
|
|
1061
1062
|
};
|
|
1062
1063
|
}
|
|
@@ -1099,12 +1100,12 @@ async function resolveViteConfig({
|
|
|
1099
1100
|
function extractPluginContext(viteConfig) {
|
|
1100
1101
|
return viteConfig["__reactRouterPluginContext"];
|
|
1101
1102
|
}
|
|
1102
|
-
function
|
|
1103
|
+
function isSsrBundleEnvironmentName(name) {
|
|
1103
1104
|
return name.startsWith(SSR_BUNDLE_PREFIX);
|
|
1104
1105
|
}
|
|
1105
1106
|
function getServerEnvironmentEntries(ctx, record) {
|
|
1106
1107
|
return Object.entries(record).filter(
|
|
1107
|
-
([name]) => ctx.buildManifest?.serverBundles ?
|
|
1108
|
+
([name]) => ctx.buildManifest?.serverBundles ? isSsrBundleEnvironmentName(name) : name === "ssr"
|
|
1108
1109
|
);
|
|
1109
1110
|
}
|
|
1110
1111
|
function getServerEnvironmentKeys(ctx, record) {
|
|
@@ -1198,13 +1199,8 @@ async function getEnvironmentOptionsResolvers(ctx, viteCommand) {
|
|
|
1198
1199
|
return mergeEnvironmentOptions(getBaseOptions({ viteUserConfig }), {
|
|
1199
1200
|
resolve: {
|
|
1200
1201
|
external: (
|
|
1201
|
-
//
|
|
1202
|
-
|
|
1203
|
-
// for Cloudflare, all server dependencies are externalized, but our
|
|
1204
|
-
// `ssrExternals` config inadvertently overrides this. This doesn't
|
|
1205
|
-
// impact consumers because for them `ssrExternals` is undefined and
|
|
1206
|
-
// Cloudflare's "noExternal: true" config remains intact.
|
|
1207
|
-
ctx.reactRouterConfig.future.unstable_viteEnvironmentApi && viteUserConfig.environments?.ssr?.resolve?.noExternal === true ? void 0 : ssrExternals
|
|
1202
|
+
// If `unstable_viteEnvironmentApi` is `true`, `resolve.external` is set in the `configEnvironment` hook
|
|
1203
|
+
ctx.reactRouterConfig.future.unstable_viteEnvironmentApi ? void 0 : ssrExternals
|
|
1208
1204
|
),
|
|
1209
1205
|
conditions,
|
|
1210
1206
|
externalConditions: conditions
|
|
@@ -1254,7 +1250,10 @@ async function getEnvironmentOptionsResolvers(ctx, viteCommand) {
|
|
|
1254
1250
|
output: (ctx.reactRouterConfig.future.unstable_viteEnvironmentApi ? viteUserConfig?.environments?.client?.build?.rollupOptions?.output : viteUserConfig?.build?.rollupOptions?.output) ?? {
|
|
1255
1251
|
entryFileNames: ({ moduleIds }) => {
|
|
1256
1252
|
let routeChunkModuleId = moduleIds.find(isRouteChunkModuleId);
|
|
1257
|
-
let routeChunkName = routeChunkModuleId ? getRouteChunkNameFromModuleId(routeChunkModuleId)
|
|
1253
|
+
let routeChunkName = routeChunkModuleId ? getRouteChunkNameFromModuleId(routeChunkModuleId)?.replace(
|
|
1254
|
+
"unstable_",
|
|
1255
|
+
""
|
|
1256
|
+
) : null;
|
|
1258
1257
|
let routeChunkSuffix = routeChunkName ? `-${(0, import_kebabCase.default)(routeChunkName)}` : "";
|
|
1259
1258
|
return path7.posix.join(
|
|
1260
1259
|
(ctx.reactRouterConfig.future.unstable_viteEnvironmentApi ? viteUserConfig?.environments?.client?.build?.assetsDir : viteUserConfig?.build?.assetsDir) ?? "assets",
|
|
@@ -1289,21 +1288,7 @@ async function getEnvironmentOptionsResolvers(ctx, viteCommand) {
|
|
|
1289
1288
|
environmentOptionsResolvers.ssr = ({ viteUserConfig }) => mergeEnvironmentOptions(getBaseServerOptions({ viteUserConfig }), {
|
|
1290
1289
|
build: {
|
|
1291
1290
|
outDir: getServerBuildDirectory(ctx.reactRouterConfig)
|
|
1292
|
-
}
|
|
1293
|
-
optimizeDeps: ctx.reactRouterConfig.future.unstable_viteEnvironmentApi && viteUserConfig.environments?.ssr?.optimizeDeps?.noDiscovery === false ? {
|
|
1294
|
-
entries: [
|
|
1295
|
-
vite2.normalizePath(ctx.entryServerFilePath),
|
|
1296
|
-
...Object.values(ctx.reactRouterConfig.routes).map(
|
|
1297
|
-
(route) => resolveRelativeRouteFilePath(route, ctx.reactRouterConfig)
|
|
1298
|
-
)
|
|
1299
|
-
],
|
|
1300
|
-
include: [
|
|
1301
|
-
"react",
|
|
1302
|
-
"react/jsx-dev-runtime",
|
|
1303
|
-
"react-dom/server",
|
|
1304
|
-
"react-router"
|
|
1305
|
-
]
|
|
1306
|
-
} : void 0
|
|
1291
|
+
}
|
|
1307
1292
|
});
|
|
1308
1293
|
}
|
|
1309
1294
|
if (ctx.reactRouterConfig.future.unstable_viteEnvironmentApi && viteCommand === "serve") {
|
|
@@ -1323,12 +1308,11 @@ function resolveEnvironmentsOptions(environmentResolvers, resolverOptions) {
|
|
|
1323
1308
|
function isNonNullable(x) {
|
|
1324
1309
|
return x != null;
|
|
1325
1310
|
}
|
|
1326
|
-
var import_node_crypto,
|
|
1311
|
+
var import_node_crypto, path7, url, fse, babel2, import_react_router2, import_es_module_lexer, import_pick3, import_jsesc, import_picocolors4, import_kebabCase, CLIENT_NON_COMPONENT_EXPORTS, CLIENT_ROUTE_EXPORTS, BUILD_CLIENT_ROUTE_QUERY_STRING, SSR_BUNDLE_PREFIX, CSS_DEV_HELPER_ENVIRONMENT_NAME, virtualHmrRuntime, virtualInjectHmrRuntime, virtual2, getServerBuildDirectory, getClientBuildDirectory, defaultEntriesDir, defaultEntries, REACT_REFRESH_HEADER;
|
|
1327
1312
|
var init_plugin = __esm({
|
|
1328
1313
|
"vite/plugin.ts"() {
|
|
1329
1314
|
"use strict";
|
|
1330
1315
|
import_node_crypto = require("crypto");
|
|
1331
|
-
fs4 = __toESM(require("fs"));
|
|
1332
1316
|
path7 = __toESM(require("path"));
|
|
1333
1317
|
url = __toESM(require("url"));
|
|
1334
1318
|
fse = __toESM(require("fs-extra"));
|
|
@@ -1374,12 +1358,6 @@ var init_plugin = __esm({
|
|
|
1374
1358
|
CSS_DEV_HELPER_ENVIRONMENT_NAME = "__react_router_css_dev_helper__";
|
|
1375
1359
|
virtualHmrRuntime = create("hmr-runtime");
|
|
1376
1360
|
virtualInjectHmrRuntime = create("inject-hmr-runtime");
|
|
1377
|
-
resolveRelativeRouteFilePath = (route, reactRouterConfig) => {
|
|
1378
|
-
let vite2 = getVite();
|
|
1379
|
-
let file = route.file;
|
|
1380
|
-
let fullPath = path7.resolve(reactRouterConfig.appDirectory, file);
|
|
1381
|
-
return vite2.normalizePath(fullPath);
|
|
1382
|
-
};
|
|
1383
1361
|
virtual2 = {
|
|
1384
1362
|
serverBuild: create("server-build"),
|
|
1385
1363
|
serverManifest: create("server-manifest"),
|
package/dist/config.d.ts
CHANGED
package/dist/config.js
CHANGED
package/dist/routes.js
CHANGED
|
@@ -45,7 +45,12 @@ const enqueueUpdate = debounce(async () => {
|
|
|
45
45
|
|
|
46
46
|
let needsRevalidation = new Set(
|
|
47
47
|
Array.from(routeUpdates.values())
|
|
48
|
-
.filter(
|
|
48
|
+
.filter(
|
|
49
|
+
(route) =>
|
|
50
|
+
route.hasLoader ||
|
|
51
|
+
route.hasClientLoader ||
|
|
52
|
+
route.hasClientMiddleware
|
|
53
|
+
)
|
|
49
54
|
.map((route) => route.id)
|
|
50
55
|
);
|
|
51
56
|
|
package/dist/vite/cloudflare.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @react-router/dev v0.0.0-experimental-
|
|
2
|
+
* @react-router/dev v0.0.0-experimental-47c4c03cf
|
|
3
3
|
*
|
|
4
4
|
* Copyright (c) Remix Software Inc.
|
|
5
5
|
*
|
|
@@ -512,7 +512,6 @@ async function resolveConfig({
|
|
|
512
512
|
unstable_middleware: reactRouterUserConfig.future?.unstable_middleware ?? false,
|
|
513
513
|
unstable_optimizeDeps: reactRouterUserConfig.future?.unstable_optimizeDeps ?? false,
|
|
514
514
|
unstable_splitRouteModules: reactRouterUserConfig.future?.unstable_splitRouteModules ?? false,
|
|
515
|
-
unstable_subResourceIntegrity: reactRouterUserConfig.future?.unstable_subResourceIntegrity ?? false,
|
|
516
515
|
unstable_viteEnvironmentApi: reactRouterUserConfig.future?.unstable_viteEnvironmentApi ?? false
|
|
517
516
|
};
|
|
518
517
|
let reactRouterConfig = deepFreeze({
|
package/dist/vite.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @react-router/dev v0.0.0-experimental-
|
|
2
|
+
* @react-router/dev v0.0.0-experimental-47c4c03cf
|
|
3
3
|
*
|
|
4
4
|
* Copyright (c) Remix Software Inc.
|
|
5
5
|
*
|
|
@@ -46,7 +46,6 @@ module.exports = __toCommonJS(vite_exports);
|
|
|
46
46
|
|
|
47
47
|
// vite/plugin.ts
|
|
48
48
|
var import_node_crypto = require("crypto");
|
|
49
|
-
var fs3 = __toESM(require("fs"));
|
|
50
49
|
var path6 = __toESM(require("path"));
|
|
51
50
|
var url = __toESM(require("url"));
|
|
52
51
|
var fse = __toESM(require("fs-extra"));
|
|
@@ -476,7 +475,6 @@ async function resolveConfig({
|
|
|
476
475
|
unstable_middleware: reactRouterUserConfig.future?.unstable_middleware ?? false,
|
|
477
476
|
unstable_optimizeDeps: reactRouterUserConfig.future?.unstable_optimizeDeps ?? false,
|
|
478
477
|
unstable_splitRouteModules: reactRouterUserConfig.future?.unstable_splitRouteModules ?? false,
|
|
479
|
-
unstable_subResourceIntegrity: reactRouterUserConfig.future?.unstable_subResourceIntegrity ?? false,
|
|
480
478
|
unstable_viteEnvironmentApi: reactRouterUserConfig.future?.unstable_viteEnvironmentApi ?? false
|
|
481
479
|
};
|
|
482
480
|
let reactRouterConfig = deepFreeze({
|
|
@@ -827,7 +825,7 @@ async function writeAll(ctx) {
|
|
|
827
825
|
});
|
|
828
826
|
const registerPath = Path4.join(typegenDir, "+register.ts");
|
|
829
827
|
import_node_fs2.default.writeFileSync(registerPath, register(ctx));
|
|
830
|
-
const virtualPath = Path4.join(typegenDir, "+virtual.ts");
|
|
828
|
+
const virtualPath = Path4.join(typegenDir, "+virtual.d.ts");
|
|
831
829
|
import_node_fs2.default.writeFileSync(virtualPath, virtual);
|
|
832
830
|
}
|
|
833
831
|
function register(ctx) {
|
|
@@ -1819,6 +1817,7 @@ function detectRouteChunks(code, cache, cacheKey) {
|
|
|
1819
1817
|
var routeChunkExportNames = [
|
|
1820
1818
|
"clientAction",
|
|
1821
1819
|
"clientLoader",
|
|
1820
|
+
"unstable_clientMiddleware",
|
|
1822
1821
|
"HydrateFallback"
|
|
1823
1822
|
];
|
|
1824
1823
|
var mainChunkName = "main";
|
|
@@ -1834,6 +1833,7 @@ var routeChunkQueryStrings = {
|
|
|
1834
1833
|
main: `${routeChunkQueryStringPrefix}main`,
|
|
1835
1834
|
clientAction: `${routeChunkQueryStringPrefix}clientAction`,
|
|
1836
1835
|
clientLoader: `${routeChunkQueryStringPrefix}clientLoader`,
|
|
1836
|
+
unstable_clientMiddleware: `${routeChunkQueryStringPrefix}unstable_clientMiddleware`,
|
|
1837
1837
|
HydrateFallback: `${routeChunkQueryStringPrefix}HydrateFallback`
|
|
1838
1838
|
};
|
|
1839
1839
|
function getRouteChunkModuleId(filePath, chunkName) {
|
|
@@ -2016,12 +2016,9 @@ function isSsrBundleEnvironmentName(name) {
|
|
|
2016
2016
|
return name.startsWith(SSR_BUNDLE_PREFIX);
|
|
2017
2017
|
}
|
|
2018
2018
|
var CSS_DEV_HELPER_ENVIRONMENT_NAME = "__react_router_css_dev_helper__";
|
|
2019
|
-
function isSeverBundleEnvironmentName(name) {
|
|
2020
|
-
return name.startsWith(SSR_BUNDLE_PREFIX);
|
|
2021
|
-
}
|
|
2022
2019
|
function getServerEnvironmentEntries(ctx, record) {
|
|
2023
2020
|
return Object.entries(record).filter(
|
|
2024
|
-
([name]) => ctx.buildManifest?.serverBundles ?
|
|
2021
|
+
([name]) => ctx.buildManifest?.serverBundles ? isSsrBundleEnvironmentName(name) : name === "ssr"
|
|
2025
2022
|
);
|
|
2026
2023
|
}
|
|
2027
2024
|
function getServerEnvironmentValues(ctx, record) {
|
|
@@ -2400,34 +2397,6 @@ var reactRouterVitePlugin = () => {
|
|
|
2400
2397
|
);
|
|
2401
2398
|
return /* @__PURE__ */ new Set([...cssUrlPaths, ...chunkAssetPaths]);
|
|
2402
2399
|
};
|
|
2403
|
-
let generateSriManifest = async (ctx2) => {
|
|
2404
|
-
let clientBuildDirectory = getClientBuildDirectory(ctx2.reactRouterConfig);
|
|
2405
|
-
let entries = fs3.readdirSync(clientBuildDirectory, {
|
|
2406
|
-
withFileTypes: true,
|
|
2407
|
-
recursive: true
|
|
2408
|
-
});
|
|
2409
|
-
let sriManifest = {};
|
|
2410
|
-
for (const entry of entries) {
|
|
2411
|
-
if (entry.isFile() && entry.name.endsWith(".js")) {
|
|
2412
|
-
let contents;
|
|
2413
|
-
try {
|
|
2414
|
-
contents = await fse.readFile(
|
|
2415
|
-
path6.join(entry.path, entry.name),
|
|
2416
|
-
"utf-8"
|
|
2417
|
-
);
|
|
2418
|
-
} catch (e) {
|
|
2419
|
-
logger.error(`Failed to read file for SRI generation: ${entry.name}`);
|
|
2420
|
-
throw e;
|
|
2421
|
-
}
|
|
2422
|
-
let hash = (0, import_node_crypto.createHash)("sha384").update(contents).digest().toString("base64");
|
|
2423
|
-
let filepath = getVite().normalizePath(
|
|
2424
|
-
path6.relative(clientBuildDirectory, path6.join(entry.path, entry.name))
|
|
2425
|
-
);
|
|
2426
|
-
sriManifest[`${ctx2.publicPath}${filepath}`] = `sha384-${hash}`;
|
|
2427
|
-
}
|
|
2428
|
-
}
|
|
2429
|
-
return sriManifest;
|
|
2430
|
-
};
|
|
2431
2400
|
let generateReactRouterManifestsForBuild = async ({
|
|
2432
2401
|
routeIds
|
|
2433
2402
|
}) => {
|
|
@@ -2453,6 +2422,9 @@ var reactRouterVitePlugin = () => {
|
|
|
2453
2422
|
let isRootRoute = route.parentId === void 0;
|
|
2454
2423
|
let hasClientAction = sourceExports.includes("clientAction");
|
|
2455
2424
|
let hasClientLoader = sourceExports.includes("clientLoader");
|
|
2425
|
+
let hasClientMiddleware = sourceExports.includes(
|
|
2426
|
+
"unstable_clientMiddleware"
|
|
2427
|
+
);
|
|
2456
2428
|
let hasHydrateFallback = sourceExports.includes("HydrateFallback");
|
|
2457
2429
|
let { hasRouteChunkByExportName } = await detectRouteChunksIfEnabled(
|
|
2458
2430
|
cache,
|
|
@@ -2467,6 +2439,7 @@ var reactRouterVitePlugin = () => {
|
|
|
2467
2439
|
valid: {
|
|
2468
2440
|
clientAction: !hasClientAction || hasRouteChunkByExportName.clientAction,
|
|
2469
2441
|
clientLoader: !hasClientLoader || hasRouteChunkByExportName.clientLoader,
|
|
2442
|
+
unstable_clientMiddleware: !hasClientMiddleware || hasRouteChunkByExportName.unstable_clientMiddleware,
|
|
2470
2443
|
HydrateFallback: !hasHydrateFallback || hasRouteChunkByExportName.HydrateFallback
|
|
2471
2444
|
}
|
|
2472
2445
|
});
|
|
@@ -2481,6 +2454,7 @@ var reactRouterVitePlugin = () => {
|
|
|
2481
2454
|
hasLoader: sourceExports.includes("loader"),
|
|
2482
2455
|
hasClientAction,
|
|
2483
2456
|
hasClientLoader,
|
|
2457
|
+
hasClientMiddleware,
|
|
2484
2458
|
hasErrorBoundary: sourceExports.includes("ErrorBoundary"),
|
|
2485
2459
|
...getReactRouterManifestBuildAssets(
|
|
2486
2460
|
ctx,
|
|
@@ -2501,6 +2475,11 @@ var reactRouterVitePlugin = () => {
|
|
|
2501
2475
|
viteManifest,
|
|
2502
2476
|
getRouteChunkModuleId(routeFile, "clientLoader")
|
|
2503
2477
|
) : void 0,
|
|
2478
|
+
clientMiddlewareModule: hasRouteChunkByExportName.unstable_clientMiddleware ? getPublicModulePathForEntry(
|
|
2479
|
+
ctx,
|
|
2480
|
+
viteManifest,
|
|
2481
|
+
getRouteChunkModuleId(routeFile, "unstable_clientMiddleware")
|
|
2482
|
+
) : void 0,
|
|
2504
2483
|
hydrateFallbackModule: hasRouteChunkByExportName.HydrateFallback ? getPublicModulePathForEntry(
|
|
2505
2484
|
ctx,
|
|
2506
2485
|
viteManifest,
|
|
@@ -2522,8 +2501,7 @@ var reactRouterVitePlugin = () => {
|
|
|
2522
2501
|
let nonFingerprintedValues = { url: url2, version };
|
|
2523
2502
|
let reactRouterBrowserManifest = {
|
|
2524
2503
|
...fingerprintedValues,
|
|
2525
|
-
...nonFingerprintedValues
|
|
2526
|
-
sri: void 0
|
|
2504
|
+
...nonFingerprintedValues
|
|
2527
2505
|
};
|
|
2528
2506
|
await writeFileSafe(
|
|
2529
2507
|
path6.join(getClientBuildDirectory(ctx.reactRouterConfig), manifestPath),
|
|
@@ -2531,14 +2509,9 @@ var reactRouterVitePlugin = () => {
|
|
|
2531
2509
|
reactRouterBrowserManifest
|
|
2532
2510
|
)};`
|
|
2533
2511
|
);
|
|
2534
|
-
let sri = void 0;
|
|
2535
|
-
if (ctx.reactRouterConfig.future.unstable_subResourceIntegrity) {
|
|
2536
|
-
sri = await generateSriManifest(ctx);
|
|
2537
|
-
}
|
|
2538
2512
|
let reactRouterServerManifest = {
|
|
2539
2513
|
...reactRouterBrowserManifest,
|
|
2540
|
-
routes: serverRoutes
|
|
2541
|
-
sri
|
|
2514
|
+
routes: serverRoutes
|
|
2542
2515
|
};
|
|
2543
2516
|
return {
|
|
2544
2517
|
reactRouterBrowserManifest,
|
|
@@ -2558,6 +2531,9 @@ var reactRouterVitePlugin = () => {
|
|
|
2558
2531
|
let sourceExports = routeManifestExports[key];
|
|
2559
2532
|
let hasClientAction = sourceExports.includes("clientAction");
|
|
2560
2533
|
let hasClientLoader = sourceExports.includes("clientLoader");
|
|
2534
|
+
let hasClientMiddleware = sourceExports.includes(
|
|
2535
|
+
"unstable_clientMiddleware"
|
|
2536
|
+
);
|
|
2561
2537
|
let hasHydrateFallback = sourceExports.includes("HydrateFallback");
|
|
2562
2538
|
let routeModulePath = combineURLs(
|
|
2563
2539
|
ctx.publicPath,
|
|
@@ -2579,6 +2555,7 @@ var reactRouterVitePlugin = () => {
|
|
|
2579
2555
|
valid: {
|
|
2580
2556
|
clientAction: !hasClientAction || hasRouteChunkByExportName.clientAction,
|
|
2581
2557
|
clientLoader: !hasClientLoader || hasRouteChunkByExportName.clientLoader,
|
|
2558
|
+
unstable_clientMiddleware: !hasClientMiddleware || hasRouteChunkByExportName.unstable_clientMiddleware,
|
|
2582
2559
|
HydrateFallback: !hasHydrateFallback || hasRouteChunkByExportName.HydrateFallback
|
|
2583
2560
|
}
|
|
2584
2561
|
});
|
|
@@ -2593,16 +2570,17 @@ var reactRouterVitePlugin = () => {
|
|
|
2593
2570
|
// Split route modules are a build-time optimization
|
|
2594
2571
|
clientActionModule: void 0,
|
|
2595
2572
|
clientLoaderModule: void 0,
|
|
2573
|
+
clientMiddlewareModule: void 0,
|
|
2596
2574
|
hydrateFallbackModule: void 0,
|
|
2597
2575
|
hasAction: sourceExports.includes("action"),
|
|
2598
2576
|
hasLoader: sourceExports.includes("loader"),
|
|
2599
2577
|
hasClientAction,
|
|
2600
2578
|
hasClientLoader,
|
|
2579
|
+
hasClientMiddleware,
|
|
2601
2580
|
hasErrorBoundary: sourceExports.includes("ErrorBoundary"),
|
|
2602
2581
|
imports: []
|
|
2603
2582
|
};
|
|
2604
2583
|
}
|
|
2605
|
-
let sri = void 0;
|
|
2606
2584
|
let reactRouterManifestForDev = {
|
|
2607
2585
|
version: String(Math.random()),
|
|
2608
2586
|
url: combineURLs(ctx.publicPath, virtual2.browserManifest.url),
|
|
@@ -2616,7 +2594,6 @@ var reactRouterVitePlugin = () => {
|
|
|
2616
2594
|
),
|
|
2617
2595
|
imports: []
|
|
2618
2596
|
},
|
|
2619
|
-
sri,
|
|
2620
2597
|
routes
|
|
2621
2598
|
};
|
|
2622
2599
|
currentReactRouterManifestForDev = reactRouterManifestForDev;
|
|
@@ -2796,6 +2773,41 @@ var reactRouterVitePlugin = () => {
|
|
|
2796
2773
|
}
|
|
2797
2774
|
};
|
|
2798
2775
|
},
|
|
2776
|
+
configEnvironment(name, options) {
|
|
2777
|
+
if (ctx.reactRouterConfig.future.unstable_viteEnvironmentApi && (ctx.buildManifest?.serverBundles ? isSsrBundleEnvironmentName(name) : name === "ssr")) {
|
|
2778
|
+
const vite2 = getVite();
|
|
2779
|
+
return {
|
|
2780
|
+
resolve: {
|
|
2781
|
+
external: (
|
|
2782
|
+
// This check is required to honor the "noExternal: true" config
|
|
2783
|
+
// provided by vite-plugin-cloudflare within this repo. When compiling
|
|
2784
|
+
// for Cloudflare, all server dependencies are pre-bundled, but our
|
|
2785
|
+
// `ssrExternals` config inadvertently overrides this. This doesn't
|
|
2786
|
+
// impact consumers because for them `ssrExternals` is undefined and
|
|
2787
|
+
// Cloudflare's "noExternal: true" config remains intact.
|
|
2788
|
+
options.resolve?.noExternal === true ? void 0 : ssrExternals
|
|
2789
|
+
)
|
|
2790
|
+
},
|
|
2791
|
+
optimizeDeps: options.optimizeDeps?.noDiscovery === false ? {
|
|
2792
|
+
entries: [
|
|
2793
|
+
vite2.normalizePath(ctx.entryServerFilePath),
|
|
2794
|
+
...Object.values(ctx.reactRouterConfig.routes).map(
|
|
2795
|
+
(route) => resolveRelativeRouteFilePath(
|
|
2796
|
+
route,
|
|
2797
|
+
ctx.reactRouterConfig
|
|
2798
|
+
)
|
|
2799
|
+
)
|
|
2800
|
+
],
|
|
2801
|
+
include: [
|
|
2802
|
+
"react",
|
|
2803
|
+
"react/jsx-dev-runtime",
|
|
2804
|
+
"react-dom/server",
|
|
2805
|
+
"react-router"
|
|
2806
|
+
]
|
|
2807
|
+
} : void 0
|
|
2808
|
+
};
|
|
2809
|
+
}
|
|
2810
|
+
},
|
|
2799
2811
|
async configResolved(resolvedViteConfig) {
|
|
2800
2812
|
await import_es_module_lexer.init;
|
|
2801
2813
|
viteConfig = resolvedViteConfig;
|
|
@@ -2828,6 +2840,9 @@ var reactRouterVitePlugin = () => {
|
|
|
2828
2840
|
);
|
|
2829
2841
|
}
|
|
2830
2842
|
}
|
|
2843
|
+
const childCompilerPlugins = await asyncFlatten(
|
|
2844
|
+
childCompilerConfigFile.config.plugins ?? []
|
|
2845
|
+
);
|
|
2831
2846
|
viteChildCompiler = await vite2.createServer({
|
|
2832
2847
|
...viteUserConfig,
|
|
2833
2848
|
// Ensure child compiler cannot overwrite the default cache directory
|
|
@@ -2841,9 +2856,13 @@ var reactRouterVitePlugin = () => {
|
|
|
2841
2856
|
configFile: false,
|
|
2842
2857
|
envFile: false,
|
|
2843
2858
|
plugins: [
|
|
2844
|
-
|
|
2859
|
+
childCompilerPlugins.filter(
|
|
2845
2860
|
(plugin2) => typeof plugin2 === "object" && plugin2 !== null && "name" in plugin2 && plugin2.name !== "react-router" && plugin2.name !== "react-router:route-exports" && plugin2.name !== "react-router:hmr-updates"
|
|
2846
|
-
)
|
|
2861
|
+
).map((plugin2) => ({
|
|
2862
|
+
...plugin2,
|
|
2863
|
+
configureServer: void 0,
|
|
2864
|
+
configurePreviewServer: void 0
|
|
2865
|
+
})),
|
|
2847
2866
|
{
|
|
2848
2867
|
name: "react-router:override-optimize-deps",
|
|
2849
2868
|
config(userConfig) {
|
|
@@ -2972,6 +2991,7 @@ var reactRouterVitePlugin = () => {
|
|
|
2972
2991
|
let vite2 = getVite();
|
|
2973
2992
|
let ssrEnvironment = viteDevServer.environments.ssr;
|
|
2974
2993
|
if (!vite2.isRunnableDevEnvironment(ssrEnvironment)) {
|
|
2994
|
+
next();
|
|
2975
2995
|
return;
|
|
2976
2996
|
}
|
|
2977
2997
|
build = await ssrEnvironment.runner.import(
|
|
@@ -3189,6 +3209,9 @@ var reactRouterVitePlugin = () => {
|
|
|
3189
3209
|
valid: {
|
|
3190
3210
|
clientAction: !exportNames.includes("clientAction"),
|
|
3191
3211
|
clientLoader: !exportNames.includes("clientLoader"),
|
|
3212
|
+
unstable_clientMiddleware: !exportNames.includes(
|
|
3213
|
+
"unstable_clientMiddleware"
|
|
3214
|
+
),
|
|
3192
3215
|
HydrateFallback: !exportNames.includes("HydrateFallback")
|
|
3193
3216
|
}
|
|
3194
3217
|
});
|
|
@@ -3461,6 +3484,8 @@ var reactRouterVitePlugin = () => {
|
|
|
3461
3484
|
"hasAction",
|
|
3462
3485
|
"hasClientAction",
|
|
3463
3486
|
"clientActionModule",
|
|
3487
|
+
"hasClientMiddleware",
|
|
3488
|
+
"clientMiddlewareModule",
|
|
3464
3489
|
"hasErrorBoundary",
|
|
3465
3490
|
"hydrateFallbackModule"
|
|
3466
3491
|
].some((key) => oldRouteMetadata[key] !== newRouteMetadata[key])) {
|
|
@@ -3614,11 +3639,13 @@ async function getRouteMetadata(cache, ctx, viteChildCompiler, route, readRouteF
|
|
|
3614
3639
|
// Ensure the Vite dev server responds with a JS module
|
|
3615
3640
|
clientActionModule: hasRouteChunkByExportName.clientAction ? `${getRouteChunkModuleId(moduleUrl, "clientAction")}` : void 0,
|
|
3616
3641
|
clientLoaderModule: hasRouteChunkByExportName.clientLoader ? `${getRouteChunkModuleId(moduleUrl, "clientLoader")}` : void 0,
|
|
3642
|
+
clientMiddlewareModule: hasRouteChunkByExportName.unstable_clientMiddleware ? `${getRouteChunkModuleId(moduleUrl, "unstable_clientMiddleware")}` : void 0,
|
|
3617
3643
|
hydrateFallbackModule: hasRouteChunkByExportName.HydrateFallback ? `${getRouteChunkModuleId(moduleUrl, "HydrateFallback")}` : void 0,
|
|
3618
3644
|
hasAction: sourceExports.includes("action"),
|
|
3619
3645
|
hasClientAction: sourceExports.includes("clientAction"),
|
|
3620
3646
|
hasLoader: sourceExports.includes("loader"),
|
|
3621
3647
|
hasClientLoader: sourceExports.includes("clientLoader"),
|
|
3648
|
+
hasClientMiddleware: sourceExports.includes("unstable_clientMiddleware"),
|
|
3622
3649
|
hasErrorBoundary: sourceExports.includes("ErrorBoundary"),
|
|
3623
3650
|
imports: []
|
|
3624
3651
|
};
|
|
@@ -3807,7 +3834,7 @@ async function prerenderData(handler, prerenderPath, onlyRoutes, clientBuildDire
|
|
|
3807
3834
|
let data = await response.text();
|
|
3808
3835
|
if (response.status !== 200) {
|
|
3809
3836
|
throw new Error(
|
|
3810
|
-
`Prerender (data): Received a ${response.status} status code from \`entry.server.tsx\` while prerendering the \`${
|
|
3837
|
+
`Prerender (data): Received a ${response.status} status code from \`entry.server.tsx\` while prerendering the \`${prerenderPath}\` path.
|
|
3811
3838
|
${normalizedPath}`
|
|
3812
3839
|
);
|
|
3813
3840
|
}
|
|
@@ -4041,6 +4068,9 @@ var resolveRouteFileCode = async (ctx, input) => {
|
|
|
4041
4068
|
input.readRouteFile
|
|
4042
4069
|
);
|
|
4043
4070
|
};
|
|
4071
|
+
function isRootRouteModuleId(ctx, id) {
|
|
4072
|
+
return normalizeRelativeFilePath(id, ctx.reactRouterConfig) === ctx.reactRouterConfig.routes.root.file;
|
|
4073
|
+
}
|
|
4044
4074
|
async function detectRouteChunksIfEnabled(cache, ctx, id, input) {
|
|
4045
4075
|
function noRouteChunks() {
|
|
4046
4076
|
return {
|
|
@@ -4049,6 +4079,7 @@ async function detectRouteChunksIfEnabled(cache, ctx, id, input) {
|
|
|
4049
4079
|
hasRouteChunkByExportName: {
|
|
4050
4080
|
clientAction: false,
|
|
4051
4081
|
clientLoader: false,
|
|
4082
|
+
unstable_clientMiddleware: false,
|
|
4052
4083
|
HydrateFallback: false
|
|
4053
4084
|
}
|
|
4054
4085
|
};
|
|
@@ -4056,7 +4087,7 @@ async function detectRouteChunksIfEnabled(cache, ctx, id, input) {
|
|
|
4056
4087
|
if (!ctx.reactRouterConfig.future.unstable_splitRouteModules) {
|
|
4057
4088
|
return noRouteChunks();
|
|
4058
4089
|
}
|
|
4059
|
-
if (
|
|
4090
|
+
if (isRootRouteModuleId(ctx, id)) {
|
|
4060
4091
|
return noRouteChunks();
|
|
4061
4092
|
}
|
|
4062
4093
|
let code = await resolveRouteFileCode(ctx, input);
|
|
@@ -4079,6 +4110,9 @@ function validateRouteChunks({
|
|
|
4079
4110
|
id,
|
|
4080
4111
|
valid
|
|
4081
4112
|
}) {
|
|
4113
|
+
if (isRootRouteModuleId(ctx, id)) {
|
|
4114
|
+
return;
|
|
4115
|
+
}
|
|
4082
4116
|
let invalidChunks = Object.entries(valid).filter(([_, isValid]) => !isValid).map(([chunkName]) => chunkName);
|
|
4083
4117
|
if (invalidChunks.length === 0) {
|
|
4084
4118
|
return;
|
|
@@ -4250,13 +4284,8 @@ async function getEnvironmentOptionsResolvers(ctx, viteCommand) {
|
|
|
4250
4284
|
return mergeEnvironmentOptions(getBaseOptions({ viteUserConfig }), {
|
|
4251
4285
|
resolve: {
|
|
4252
4286
|
external: (
|
|
4253
|
-
//
|
|
4254
|
-
|
|
4255
|
-
// for Cloudflare, all server dependencies are externalized, but our
|
|
4256
|
-
// `ssrExternals` config inadvertently overrides this. This doesn't
|
|
4257
|
-
// impact consumers because for them `ssrExternals` is undefined and
|
|
4258
|
-
// Cloudflare's "noExternal: true" config remains intact.
|
|
4259
|
-
ctx.reactRouterConfig.future.unstable_viteEnvironmentApi && viteUserConfig.environments?.ssr?.resolve?.noExternal === true ? void 0 : ssrExternals
|
|
4287
|
+
// If `unstable_viteEnvironmentApi` is `true`, `resolve.external` is set in the `configEnvironment` hook
|
|
4288
|
+
ctx.reactRouterConfig.future.unstable_viteEnvironmentApi ? void 0 : ssrExternals
|
|
4260
4289
|
),
|
|
4261
4290
|
conditions,
|
|
4262
4291
|
externalConditions: conditions
|
|
@@ -4306,7 +4335,10 @@ async function getEnvironmentOptionsResolvers(ctx, viteCommand) {
|
|
|
4306
4335
|
output: (ctx.reactRouterConfig.future.unstable_viteEnvironmentApi ? viteUserConfig?.environments?.client?.build?.rollupOptions?.output : viteUserConfig?.build?.rollupOptions?.output) ?? {
|
|
4307
4336
|
entryFileNames: ({ moduleIds }) => {
|
|
4308
4337
|
let routeChunkModuleId = moduleIds.find(isRouteChunkModuleId);
|
|
4309
|
-
let routeChunkName = routeChunkModuleId ? getRouteChunkNameFromModuleId(routeChunkModuleId)
|
|
4338
|
+
let routeChunkName = routeChunkModuleId ? getRouteChunkNameFromModuleId(routeChunkModuleId)?.replace(
|
|
4339
|
+
"unstable_",
|
|
4340
|
+
""
|
|
4341
|
+
) : null;
|
|
4310
4342
|
let routeChunkSuffix = routeChunkName ? `-${(0, import_kebabCase.default)(routeChunkName)}` : "";
|
|
4311
4343
|
return path6.posix.join(
|
|
4312
4344
|
(ctx.reactRouterConfig.future.unstable_viteEnvironmentApi ? viteUserConfig?.environments?.client?.build?.assetsDir : viteUserConfig?.build?.assetsDir) ?? "assets",
|
|
@@ -4341,21 +4373,7 @@ async function getEnvironmentOptionsResolvers(ctx, viteCommand) {
|
|
|
4341
4373
|
environmentOptionsResolvers.ssr = ({ viteUserConfig }) => mergeEnvironmentOptions(getBaseServerOptions({ viteUserConfig }), {
|
|
4342
4374
|
build: {
|
|
4343
4375
|
outDir: getServerBuildDirectory(ctx.reactRouterConfig)
|
|
4344
|
-
}
|
|
4345
|
-
optimizeDeps: ctx.reactRouterConfig.future.unstable_viteEnvironmentApi && viteUserConfig.environments?.ssr?.optimizeDeps?.noDiscovery === false ? {
|
|
4346
|
-
entries: [
|
|
4347
|
-
vite2.normalizePath(ctx.entryServerFilePath),
|
|
4348
|
-
...Object.values(ctx.reactRouterConfig.routes).map(
|
|
4349
|
-
(route) => resolveRelativeRouteFilePath(route, ctx.reactRouterConfig)
|
|
4350
|
-
)
|
|
4351
|
-
],
|
|
4352
|
-
include: [
|
|
4353
|
-
"react",
|
|
4354
|
-
"react/jsx-dev-runtime",
|
|
4355
|
-
"react-dom/server",
|
|
4356
|
-
"react-router"
|
|
4357
|
-
]
|
|
4358
|
-
} : void 0
|
|
4376
|
+
}
|
|
4359
4377
|
});
|
|
4360
4378
|
}
|
|
4361
4379
|
if (ctx.reactRouterConfig.future.unstable_viteEnvironmentApi && viteCommand === "serve") {
|
|
@@ -4385,6 +4403,12 @@ async function getEnvironmentsOptions(ctx, viteCommand, resolverOptions) {
|
|
|
4385
4403
|
function isNonNullable(x) {
|
|
4386
4404
|
return x != null;
|
|
4387
4405
|
}
|
|
4406
|
+
async function asyncFlatten(arr) {
|
|
4407
|
+
do {
|
|
4408
|
+
arr = (await Promise.all(arr)).flat(Infinity);
|
|
4409
|
+
} while (arr.some((v2) => v2?.then));
|
|
4410
|
+
return arr;
|
|
4411
|
+
}
|
|
4388
4412
|
// Annotate the CommonJS export names for ESM import in node:
|
|
4389
4413
|
0 && (module.exports = {
|
|
4390
4414
|
reactRouter
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@react-router/dev",
|
|
3
|
-
"version": "0.0.0-experimental-
|
|
3
|
+
"version": "0.0.0-experimental-47c4c03cf",
|
|
4
4
|
"description": "Dev tools and CLI for React Router",
|
|
5
5
|
"homepage": "https://reactrouter.com",
|
|
6
6
|
"bugs": {
|
|
@@ -86,7 +86,7 @@
|
|
|
86
86
|
"set-cookie-parser": "^2.6.0",
|
|
87
87
|
"valibot": "^0.41.0",
|
|
88
88
|
"vite-node": "3.0.0-beta.2",
|
|
89
|
-
"@react-router/node": "0.0.0-experimental-
|
|
89
|
+
"@react-router/node": "0.0.0-experimental-47c4c03cf"
|
|
90
90
|
},
|
|
91
91
|
"devDependencies": {
|
|
92
92
|
"@types/babel__core": "^7.20.5",
|
|
@@ -110,15 +110,15 @@
|
|
|
110
110
|
"vite": "^6.1.0",
|
|
111
111
|
"wireit": "0.14.9",
|
|
112
112
|
"wrangler": "^3.109.2",
|
|
113
|
-
"
|
|
114
|
-
"react-router": "
|
|
113
|
+
"react-router": "^0.0.0-experimental-47c4c03cf",
|
|
114
|
+
"@react-router/serve": "0.0.0-experimental-47c4c03cf"
|
|
115
115
|
},
|
|
116
116
|
"peerDependencies": {
|
|
117
117
|
"typescript": "^5.1.0",
|
|
118
118
|
"vite": "^5.1.0 || ^6.0.0",
|
|
119
119
|
"wrangler": "^3.28.2",
|
|
120
|
-
"@react-router/serve": "^0.0.0-experimental-
|
|
121
|
-
"react-router": "^0.0.0-experimental-
|
|
120
|
+
"@react-router/serve": "^0.0.0-experimental-47c4c03cf",
|
|
121
|
+
"react-router": "^0.0.0-experimental-47c4c03cf"
|
|
122
122
|
},
|
|
123
123
|
"peerDependenciesMeta": {
|
|
124
124
|
"@react-router/serve": {
|