@react-router/dev 7.6.2 → 7.6.3-pre.0
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 +12 -0
- package/dist/cli/index.js +40 -30
- package/dist/config.js +1 -1
- package/dist/routes.js +7 -2
- package/dist/vite/cloudflare.d.ts +1 -1
- package/dist/vite/cloudflare.js +15 -10
- package/dist/vite.js +81 -69
- package/package.json +8 -9
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# `@react-router/dev`
|
|
2
2
|
|
|
3
|
+
## 7.6.3-pre.0
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Add Vite 7 support ([#13748](https://github.com/remix-run/react-router/pull/13748))
|
|
8
|
+
- Skip `package.json` resolution checks when a custom `entry.server.(j|t)sx` file is provided. ([#13744](https://github.com/remix-run/react-router/pull/13744))
|
|
9
|
+
- Add validation for a route's id not being 'root' ([#13792](https://github.com/remix-run/react-router/pull/13792))
|
|
10
|
+
- Updated dependencies:
|
|
11
|
+
- `@react-router/node@7.6.3-pre.0`
|
|
12
|
+
- `react-router@7.6.3-pre.0`
|
|
13
|
+
- `@react-router/serve@7.6.3-pre.0`
|
|
14
|
+
|
|
3
15
|
## 7.6.2
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
package/dist/cli/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
* @react-router/dev v7.6.
|
|
3
|
+
* @react-router/dev v7.6.3-pre.0
|
|
4
4
|
*
|
|
5
5
|
* Copyright (c) Remix Software Inc.
|
|
6
6
|
*
|
|
@@ -130,6 +130,11 @@ async function createContext({
|
|
|
130
130
|
}) {
|
|
131
131
|
await preloadVite();
|
|
132
132
|
const vite2 = getVite();
|
|
133
|
+
const [{ ViteNodeServer }, { ViteNodeRunner }, { installSourcemapsSupport }] = await Promise.all([
|
|
134
|
+
import("vite-node/server"),
|
|
135
|
+
import("vite-node/client"),
|
|
136
|
+
import("vite-node/source-map")
|
|
137
|
+
]);
|
|
133
138
|
const devServer = await vite2.createServer({
|
|
134
139
|
root,
|
|
135
140
|
mode,
|
|
@@ -159,11 +164,11 @@ async function createContext({
|
|
|
159
164
|
plugins: []
|
|
160
165
|
});
|
|
161
166
|
await devServer.pluginContainer.buildStart({});
|
|
162
|
-
const server = new
|
|
163
|
-
|
|
167
|
+
const server = new ViteNodeServer(devServer);
|
|
168
|
+
installSourcemapsSupport({
|
|
164
169
|
getSourceMap: (source) => server.getSourceMap(source)
|
|
165
170
|
});
|
|
166
|
-
const runner = new
|
|
171
|
+
const runner = new ViteNodeRunner({
|
|
167
172
|
root: devServer.config.root,
|
|
168
173
|
base: devServer.config.base,
|
|
169
174
|
fetchModule(id) {
|
|
@@ -175,13 +180,9 @@ async function createContext({
|
|
|
175
180
|
});
|
|
176
181
|
return { devServer, server, runner };
|
|
177
182
|
}
|
|
178
|
-
var import_server, import_client, import_source_map;
|
|
179
183
|
var init_vite_node = __esm({
|
|
180
184
|
"vite/vite-node.ts"() {
|
|
181
185
|
"use strict";
|
|
182
|
-
import_server = require("vite-node/server");
|
|
183
|
-
import_client = require("vite-node/client");
|
|
184
|
-
import_source_map = require("vite-node/source-map");
|
|
185
186
|
init_vite();
|
|
186
187
|
init_ssr_externals();
|
|
187
188
|
}
|
|
@@ -272,7 +273,12 @@ var init_routes = __esm({
|
|
|
272
273
|
return !(typeof value === "object" && value !== null && "then" in value && "catch" in value);
|
|
273
274
|
}, "Invalid type: Expected object but received a promise. Did you forget to await?"),
|
|
274
275
|
v.object({
|
|
275
|
-
id: v.optional(
|
|
276
|
+
id: v.optional(
|
|
277
|
+
v.pipe(
|
|
278
|
+
v.string(),
|
|
279
|
+
v.notValue("root", "A route cannot use the reserved id 'root'.")
|
|
280
|
+
)
|
|
281
|
+
),
|
|
276
282
|
path: v.optional(v.string()),
|
|
277
283
|
index: v.optional(v.boolean()),
|
|
278
284
|
caseSensitive: v.optional(v.boolean()),
|
|
@@ -1448,7 +1454,7 @@ async function cleanBuildDirectory(viteConfig, ctx) {
|
|
|
1448
1454
|
return !relativePath.startsWith("..") && !path6.isAbsolute(relativePath);
|
|
1449
1455
|
};
|
|
1450
1456
|
if (viteConfig.build.emptyOutDir ?? isWithinRoot()) {
|
|
1451
|
-
await
|
|
1457
|
+
await (0, import_promises2.rm)(buildDirectory, { force: true, recursive: true });
|
|
1452
1458
|
}
|
|
1453
1459
|
}
|
|
1454
1460
|
async function cleanViteManifests(environmentsOptions, ctx) {
|
|
@@ -1461,15 +1467,15 @@ async function cleanViteManifests(environmentsOptions, ctx) {
|
|
|
1461
1467
|
);
|
|
1462
1468
|
await Promise.all(
|
|
1463
1469
|
viteManifestPaths.map(async (viteManifestPath) => {
|
|
1464
|
-
let manifestExists =
|
|
1470
|
+
let manifestExists = (0, import_node_fs3.existsSync)(viteManifestPath);
|
|
1465
1471
|
if (!manifestExists) return;
|
|
1466
1472
|
if (!ctx.viteManifestEnabled) {
|
|
1467
|
-
await
|
|
1473
|
+
await (0, import_promises2.rm)(viteManifestPath, { force: true, recursive: true });
|
|
1468
1474
|
}
|
|
1469
1475
|
let viteDir = path6.dirname(viteManifestPath);
|
|
1470
|
-
let viteDirFiles = await
|
|
1476
|
+
let viteDirFiles = await (0, import_promises2.readdir)(viteDir, { recursive: true });
|
|
1471
1477
|
if (viteDirFiles.length === 0) {
|
|
1472
|
-
await
|
|
1478
|
+
await (0, import_promises2.rm)(viteDir, { force: true, recursive: true });
|
|
1473
1479
|
}
|
|
1474
1480
|
})
|
|
1475
1481
|
);
|
|
@@ -1535,13 +1541,13 @@ async function getEnvironmentOptionsResolvers(ctx, viteCommand) {
|
|
|
1535
1541
|
},
|
|
1536
1542
|
build: {
|
|
1537
1543
|
// We move SSR-only assets to client assets. Note that the
|
|
1538
|
-
// SSR build can also emit code-split JS files (e.g
|
|
1544
|
+
// SSR build can also emit code-split JS files (e.g., by
|
|
1539
1545
|
// dynamic import) under the same assets directory
|
|
1540
1546
|
// regardless of "ssrEmitAssets" option, so we also need to
|
|
1541
|
-
// keep these JS files
|
|
1547
|
+
// keep these JS files to be kept as-is.
|
|
1542
1548
|
ssrEmitAssets: true,
|
|
1543
1549
|
copyPublicDir: false,
|
|
1544
|
-
//
|
|
1550
|
+
// The client only uses assets in the public directory
|
|
1545
1551
|
rollupOptions: {
|
|
1546
1552
|
input: (ctx.reactRouterConfig.future.unstable_viteEnvironmentApi ? viteUserConfig.environments?.ssr?.build?.rollupOptions?.input : viteUserConfig.build?.rollupOptions?.input) ?? virtual.serverBuild.id,
|
|
1547
1553
|
output: {
|
|
@@ -1565,7 +1571,7 @@ async function getEnvironmentOptionsResolvers(ctx, viteCommand) {
|
|
|
1565
1571
|
route.file
|
|
1566
1572
|
);
|
|
1567
1573
|
let isRootRoute = route.file === ctx.reactRouterConfig.routes.root.file;
|
|
1568
|
-
let code =
|
|
1574
|
+
let code = (0, import_node_fs3.readFileSync)(routeFilePath, "utf-8");
|
|
1569
1575
|
return [
|
|
1570
1576
|
`${routeFilePath}${BUILD_CLIENT_ROUTE_QUERY_STRING}`,
|
|
1571
1577
|
...ctx.reactRouterConfig.future.unstable_splitRouteModules && !isRootRoute ? routeChunkExportNames.map(
|
|
@@ -1634,18 +1640,19 @@ function resolveEnvironmentsOptions(environmentResolvers, resolverOptions) {
|
|
|
1634
1640
|
function isNonNullable(x) {
|
|
1635
1641
|
return x != null;
|
|
1636
1642
|
}
|
|
1637
|
-
var import_node_crypto,
|
|
1643
|
+
var import_node_crypto, import_node_fs3, import_promises2, path6, url, babel2, import_react_router2, import_es_module_lexer, import_tinyglobby, import_pick3, import_jsesc, import_picocolors4, import_kebabCase, CLIENT_NON_COMPONENT_EXPORTS, CLIENT_ROUTE_EXPORTS, BUILD_CLIENT_ROUTE_QUERY_STRING, SSR_BUNDLE_PREFIX, virtualHmrRuntime, virtualInjectHmrRuntime, virtual, getServerBuildDirectory, getClientBuildDirectory, defaultEntriesDir, defaultEntries, REACT_REFRESH_HEADER;
|
|
1638
1644
|
var init_plugin = __esm({
|
|
1639
1645
|
"vite/plugin.ts"() {
|
|
1640
1646
|
"use strict";
|
|
1641
1647
|
import_node_crypto = require("crypto");
|
|
1642
|
-
|
|
1648
|
+
import_node_fs3 = require("fs");
|
|
1649
|
+
import_promises2 = require("fs/promises");
|
|
1643
1650
|
path6 = __toESM(require("path"));
|
|
1644
1651
|
url = __toESM(require("url"));
|
|
1645
|
-
fse = __toESM(require("fs-extra"));
|
|
1646
1652
|
babel2 = __toESM(require("@babel/core"));
|
|
1647
1653
|
import_react_router2 = require("react-router");
|
|
1648
1654
|
import_es_module_lexer = require("es-module-lexer");
|
|
1655
|
+
import_tinyglobby = require("tinyglobby");
|
|
1649
1656
|
import_pick3 = __toESM(require("lodash/pick"));
|
|
1650
1657
|
import_jsesc = __toESM(require("jsesc"));
|
|
1651
1658
|
import_picocolors4 = __toESM(require("picocolors"));
|
|
@@ -1701,7 +1708,9 @@ var init_plugin = __esm({
|
|
|
1701
1708
|
"config",
|
|
1702
1709
|
"defaults"
|
|
1703
1710
|
);
|
|
1704
|
-
defaultEntries =
|
|
1711
|
+
defaultEntries = (0, import_node_fs3.readdirSync)(defaultEntriesDir).map(
|
|
1712
|
+
(filename2) => path6.join(defaultEntriesDir, filename2)
|
|
1713
|
+
);
|
|
1705
1714
|
invariant(defaultEntries.length > 0, "No default entries found");
|
|
1706
1715
|
REACT_REFRESH_HEADER = `
|
|
1707
1716
|
import RefreshRuntime from "${virtualHmrRuntime.id}";
|
|
@@ -1981,8 +1990,9 @@ var import_semver = __toESM(require("semver"));
|
|
|
1981
1990
|
var import_picocolors8 = __toESM(require("picocolors"));
|
|
1982
1991
|
|
|
1983
1992
|
// cli/commands.ts
|
|
1993
|
+
var import_node_fs4 = require("fs");
|
|
1994
|
+
var import_promises3 = require("fs/promises");
|
|
1984
1995
|
var path7 = __toESM(require("path"));
|
|
1985
|
-
var import_fs_extra = __toESM(require("fs-extra"));
|
|
1986
1996
|
var import_package_json2 = __toESM(require("@npmcli/package-json"));
|
|
1987
1997
|
var import_exit_hook = __toESM(require("exit-hook"));
|
|
1988
1998
|
var import_picocolors7 = __toESM(require("picocolors"));
|
|
@@ -2156,21 +2166,21 @@ async function generateEntry(entry, rootDirectory, flags = {}) {
|
|
|
2156
2166
|
let useTypeScript = flags.typescript ?? true;
|
|
2157
2167
|
let outputExtension = useTypeScript ? "tsx" : "jsx";
|
|
2158
2168
|
let outputEntry = `${entry}.${outputExtension}`;
|
|
2159
|
-
let
|
|
2169
|
+
let outputFile = path7.resolve(appDirectory, outputEntry);
|
|
2160
2170
|
if (!useTypeScript) {
|
|
2161
2171
|
let javascript = transpile(contents, {
|
|
2162
2172
|
cwd: rootDirectory,
|
|
2163
2173
|
filename: isServerEntry ? defaultEntryServer : defaultEntryClient
|
|
2164
2174
|
});
|
|
2165
|
-
await
|
|
2175
|
+
await (0, import_promises3.writeFile)(outputFile, javascript, "utf-8");
|
|
2166
2176
|
} else {
|
|
2167
|
-
await
|
|
2177
|
+
await (0, import_promises3.writeFile)(outputFile, contents, "utf-8");
|
|
2168
2178
|
}
|
|
2169
2179
|
console.log(
|
|
2170
2180
|
import_picocolors7.default.blue(
|
|
2171
2181
|
`Entry file ${entry} created at ${path7.relative(
|
|
2172
2182
|
rootDirectory,
|
|
2173
|
-
|
|
2183
|
+
outputFile
|
|
2174
2184
|
)}.`
|
|
2175
2185
|
)
|
|
2176
2186
|
);
|
|
@@ -2184,7 +2194,7 @@ function resolveRootDirectory(root, flags) {
|
|
|
2184
2194
|
async function checkForEntry(rootDirectory, appDirectory, entries2) {
|
|
2185
2195
|
for (let entry of entries2) {
|
|
2186
2196
|
let entryPath = path7.resolve(appDirectory, entry);
|
|
2187
|
-
let exists =
|
|
2197
|
+
let exists = (0, import_node_fs4.existsSync)(entryPath);
|
|
2188
2198
|
if (exists) {
|
|
2189
2199
|
let relative7 = path7.relative(rootDirectory, entryPath);
|
|
2190
2200
|
console.error(import_picocolors7.default.red(`Entry file ${relative7} already exists.`));
|
|
@@ -2194,12 +2204,12 @@ async function checkForEntry(rootDirectory, appDirectory, entries2) {
|
|
|
2194
2204
|
}
|
|
2195
2205
|
async function createServerEntry(rootDirectory, appDirectory, inputFile) {
|
|
2196
2206
|
await checkForEntry(rootDirectory, appDirectory, serverEntries);
|
|
2197
|
-
let contents = await
|
|
2207
|
+
let contents = await (0, import_promises3.readFile)(inputFile, "utf-8");
|
|
2198
2208
|
return contents;
|
|
2199
2209
|
}
|
|
2200
2210
|
async function createClientEntry(rootDirectory, appDirectory, inputFile) {
|
|
2201
2211
|
await checkForEntry(rootDirectory, appDirectory, clientEntries);
|
|
2202
|
-
let contents = await
|
|
2212
|
+
let contents = await (0, import_promises3.readFile)(inputFile, "utf-8");
|
|
2203
2213
|
return contents;
|
|
2204
2214
|
}
|
|
2205
2215
|
async function typegen(root, flags) {
|
package/dist/config.js
CHANGED
package/dist/routes.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @react-router/dev v7.6.
|
|
2
|
+
* @react-router/dev v7.6.3-pre.0
|
|
3
3
|
*
|
|
4
4
|
* Copyright (c) Remix Software Inc.
|
|
5
5
|
*
|
|
@@ -74,7 +74,12 @@ var routeConfigEntrySchema = v.pipe(
|
|
|
74
74
|
return !(typeof value === "object" && value !== null && "then" in value && "catch" in value);
|
|
75
75
|
}, "Invalid type: Expected object but received a promise. Did you forget to await?"),
|
|
76
76
|
v.object({
|
|
77
|
-
id: v.optional(
|
|
77
|
+
id: v.optional(
|
|
78
|
+
v.pipe(
|
|
79
|
+
v.string(),
|
|
80
|
+
v.notValue("root", "A route cannot use the reserved id 'root'.")
|
|
81
|
+
)
|
|
82
|
+
),
|
|
78
83
|
path: v.optional(v.string()),
|
|
79
84
|
index: v.optional(v.boolean()),
|
|
80
85
|
caseSensitive: v.optional(v.boolean()),
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { UNSAFE_MiddlewareEnabled, unstable_InitialContext, AppLoadContext } from 'react-router';
|
|
2
2
|
import { Plugin } from 'vite';
|
|
3
|
-
import {
|
|
3
|
+
import { PlatformProxy, GetPlatformProxyOptions } from 'wrangler';
|
|
4
4
|
|
|
5
5
|
type MaybePromise<T> = T | Promise<T>;
|
|
6
6
|
type CfProperties = Record<string, unknown>;
|
package/dist/vite/cloudflare.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @react-router/dev v7.6.
|
|
2
|
+
* @react-router/dev v7.6.3-pre.0
|
|
3
3
|
*
|
|
4
4
|
* Copyright (c) Remix Software Inc.
|
|
5
5
|
*
|
|
@@ -174,11 +174,6 @@ var import_node_fs = __toESM(require("fs"));
|
|
|
174
174
|
var import_node_child_process = require("child_process");
|
|
175
175
|
var import_package_json = __toESM(require("@npmcli/package-json"));
|
|
176
176
|
|
|
177
|
-
// vite/vite-node.ts
|
|
178
|
-
var import_server = require("vite-node/server");
|
|
179
|
-
var import_client = require("vite-node/client");
|
|
180
|
-
var import_source_map = require("vite-node/source-map");
|
|
181
|
-
|
|
182
177
|
// vite/ssr-externals.ts
|
|
183
178
|
var ssrExternals = isReactRouterRepo() ? [
|
|
184
179
|
// This is only needed within this repo because these packages
|
|
@@ -202,6 +197,11 @@ async function createContext({
|
|
|
202
197
|
}) {
|
|
203
198
|
await preloadVite();
|
|
204
199
|
const vite2 = getVite();
|
|
200
|
+
const [{ ViteNodeServer }, { ViteNodeRunner }, { installSourcemapsSupport }] = await Promise.all([
|
|
201
|
+
import("vite-node/server"),
|
|
202
|
+
import("vite-node/client"),
|
|
203
|
+
import("vite-node/source-map")
|
|
204
|
+
]);
|
|
205
205
|
const devServer = await vite2.createServer({
|
|
206
206
|
root,
|
|
207
207
|
mode,
|
|
@@ -231,11 +231,11 @@ async function createContext({
|
|
|
231
231
|
plugins: []
|
|
232
232
|
});
|
|
233
233
|
await devServer.pluginContainer.buildStart({});
|
|
234
|
-
const server = new
|
|
235
|
-
|
|
234
|
+
const server = new ViteNodeServer(devServer);
|
|
235
|
+
installSourcemapsSupport({
|
|
236
236
|
getSourceMap: (source) => server.getSourceMap(source)
|
|
237
237
|
});
|
|
238
|
-
const runner = new
|
|
238
|
+
const runner = new ViteNodeRunner({
|
|
239
239
|
root: devServer.config.root,
|
|
240
240
|
base: devServer.config.base,
|
|
241
241
|
fetchModule(id) {
|
|
@@ -269,7 +269,12 @@ var routeConfigEntrySchema = v.pipe(
|
|
|
269
269
|
return !(typeof value === "object" && value !== null && "then" in value && "catch" in value);
|
|
270
270
|
}, "Invalid type: Expected object but received a promise. Did you forget to await?"),
|
|
271
271
|
v.object({
|
|
272
|
-
id: v.optional(
|
|
272
|
+
id: v.optional(
|
|
273
|
+
v.pipe(
|
|
274
|
+
v.string(),
|
|
275
|
+
v.notValue("root", "A route cannot use the reserved id 'root'.")
|
|
276
|
+
)
|
|
277
|
+
),
|
|
273
278
|
path: v.optional(v.string()),
|
|
274
279
|
index: v.optional(v.boolean()),
|
|
275
280
|
caseSensitive: v.optional(v.boolean()),
|
package/dist/vite.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @react-router/dev v7.6.
|
|
2
|
+
* @react-router/dev v7.6.3-pre.0
|
|
3
3
|
*
|
|
4
4
|
* Copyright (c) Remix Software Inc.
|
|
5
5
|
*
|
|
@@ -46,13 +46,14 @@ module.exports = __toCommonJS(vite_exports);
|
|
|
46
46
|
|
|
47
47
|
// vite/plugin.ts
|
|
48
48
|
var import_node_crypto = require("crypto");
|
|
49
|
-
var
|
|
49
|
+
var import_node_fs2 = require("fs");
|
|
50
|
+
var import_promises2 = require("fs/promises");
|
|
50
51
|
var path5 = __toESM(require("path"));
|
|
51
52
|
var url = __toESM(require("url"));
|
|
52
|
-
var fse = __toESM(require("fs-extra"));
|
|
53
53
|
var babel = __toESM(require("@babel/core"));
|
|
54
54
|
var import_react_router2 = require("react-router");
|
|
55
55
|
var import_es_module_lexer = require("es-module-lexer");
|
|
56
|
+
var import_tinyglobby = require("tinyglobby");
|
|
56
57
|
var import_pick3 = __toESM(require("lodash/pick"));
|
|
57
58
|
var import_jsesc = __toESM(require("jsesc"));
|
|
58
59
|
var import_picocolors3 = __toESM(require("picocolors"));
|
|
@@ -68,11 +69,6 @@ var import_node_fs = __toESM(require("fs"));
|
|
|
68
69
|
var import_node_child_process = require("child_process");
|
|
69
70
|
var import_package_json = __toESM(require("@npmcli/package-json"));
|
|
70
71
|
|
|
71
|
-
// vite/vite-node.ts
|
|
72
|
-
var import_server = require("vite-node/server");
|
|
73
|
-
var import_client = require("vite-node/client");
|
|
74
|
-
var import_source_map = require("vite-node/source-map");
|
|
75
|
-
|
|
76
72
|
// vite/vite.ts
|
|
77
73
|
var import_pathe2 = __toESM(require("pathe"));
|
|
78
74
|
|
|
@@ -140,6 +136,11 @@ async function createContext({
|
|
|
140
136
|
}) {
|
|
141
137
|
await preloadVite();
|
|
142
138
|
const vite2 = getVite();
|
|
139
|
+
const [{ ViteNodeServer }, { ViteNodeRunner }, { installSourcemapsSupport }] = await Promise.all([
|
|
140
|
+
import("vite-node/server"),
|
|
141
|
+
import("vite-node/client"),
|
|
142
|
+
import("vite-node/source-map")
|
|
143
|
+
]);
|
|
143
144
|
const devServer = await vite2.createServer({
|
|
144
145
|
root,
|
|
145
146
|
mode,
|
|
@@ -169,11 +170,11 @@ async function createContext({
|
|
|
169
170
|
plugins: []
|
|
170
171
|
});
|
|
171
172
|
await devServer.pluginContainer.buildStart({});
|
|
172
|
-
const server = new
|
|
173
|
-
|
|
173
|
+
const server = new ViteNodeServer(devServer);
|
|
174
|
+
installSourcemapsSupport({
|
|
174
175
|
getSourceMap: (source) => server.getSourceMap(source)
|
|
175
176
|
});
|
|
176
|
-
const runner = new
|
|
177
|
+
const runner = new ViteNodeRunner({
|
|
177
178
|
root: devServer.config.root,
|
|
178
179
|
base: devServer.config.base,
|
|
179
180
|
fetchModule(id) {
|
|
@@ -207,7 +208,12 @@ var routeConfigEntrySchema = v.pipe(
|
|
|
207
208
|
return !(typeof value === "object" && value !== null && "then" in value && "catch" in value);
|
|
208
209
|
}, "Invalid type: Expected object but received a promise. Did you forget to await?"),
|
|
209
210
|
v.object({
|
|
210
|
-
id: v.optional(
|
|
211
|
+
id: v.optional(
|
|
212
|
+
v.pipe(
|
|
213
|
+
v.string(),
|
|
214
|
+
v.notValue("root", "A route cannot use the reserved id 'root'.")
|
|
215
|
+
)
|
|
216
|
+
),
|
|
211
217
|
path: v.optional(v.string()),
|
|
212
218
|
index: v.optional(v.boolean()),
|
|
213
219
|
caseSensitive: v.optional(v.boolean()),
|
|
@@ -684,22 +690,22 @@ async function resolveEntryFiles({
|
|
|
684
690
|
let userEntryServerFile = findEntry(appDirectory, "entry.server");
|
|
685
691
|
let entryServerFile;
|
|
686
692
|
let entryClientFile = userEntryClientFile || "entry.client.tsx";
|
|
687
|
-
let packageJsonPath = findEntry(rootDirectory, "package", {
|
|
688
|
-
extensions: [".json"],
|
|
689
|
-
absolute: true,
|
|
690
|
-
walkParents: true
|
|
691
|
-
});
|
|
692
|
-
if (!packageJsonPath) {
|
|
693
|
-
throw new Error(
|
|
694
|
-
`Could not find package.json in ${rootDirectory} or any of its parent directories`
|
|
695
|
-
);
|
|
696
|
-
}
|
|
697
|
-
let packageJsonDirectory = import_pathe3.default.dirname(packageJsonPath);
|
|
698
|
-
let pkgJson = await import_package_json.default.load(packageJsonDirectory);
|
|
699
|
-
let deps = pkgJson.content.dependencies ?? {};
|
|
700
693
|
if (userEntryServerFile) {
|
|
701
694
|
entryServerFile = userEntryServerFile;
|
|
702
695
|
} else {
|
|
696
|
+
let packageJsonPath = findEntry(rootDirectory, "package", {
|
|
697
|
+
extensions: [".json"],
|
|
698
|
+
absolute: true,
|
|
699
|
+
walkParents: true
|
|
700
|
+
});
|
|
701
|
+
if (!packageJsonPath) {
|
|
702
|
+
throw new Error(
|
|
703
|
+
`Could not find package.json in ${rootDirectory} or any of its parent directories. Please add a package.json, or provide a custom entry.server.tsx/jsx file in your app directory.`
|
|
704
|
+
);
|
|
705
|
+
}
|
|
706
|
+
let packageJsonDirectory = import_pathe3.default.dirname(packageJsonPath);
|
|
707
|
+
let pkgJson = await import_package_json.default.load(packageJsonDirectory);
|
|
708
|
+
let deps = pkgJson.content.dependencies ?? {};
|
|
703
709
|
if (!deps["@react-router/node"]) {
|
|
704
710
|
throw new Error(
|
|
705
711
|
`Could not determine server runtime. Please install @react-router/node, or provide a custom entry.server.tsx/jsx file in your app directory.`
|
|
@@ -2447,8 +2453,8 @@ function dedupe(array2) {
|
|
|
2447
2453
|
return [...new Set(array2)];
|
|
2448
2454
|
}
|
|
2449
2455
|
var writeFileSafe = async (file, contents) => {
|
|
2450
|
-
await
|
|
2451
|
-
await
|
|
2456
|
+
await (0, import_promises2.mkdir)(path5.dirname(file), { recursive: true });
|
|
2457
|
+
await (0, import_promises2.writeFile)(file, contents);
|
|
2452
2458
|
};
|
|
2453
2459
|
var getExportNames = (code) => {
|
|
2454
2460
|
let [, exportSpecifiers] = (0, import_es_module_lexer.parse)(code);
|
|
@@ -2482,7 +2488,7 @@ var compileRouteFile = async (viteChildCompiler, ctx, routeFile, readRouteFile)
|
|
|
2482
2488
|
};
|
|
2483
2489
|
let [id, code] = await Promise.all([
|
|
2484
2490
|
resolveId(),
|
|
2485
|
-
readRouteFile?.() ??
|
|
2491
|
+
readRouteFile?.() ?? (0, import_promises2.readFile)(routePath, "utf-8"),
|
|
2486
2492
|
// pluginContainer.transform(...) fails if we don't do this first:
|
|
2487
2493
|
moduleGraph.ensureEntryFromUrl(url2, ssr)
|
|
2488
2494
|
]);
|
|
@@ -2544,7 +2550,9 @@ var defaultEntriesDir = path5.resolve(
|
|
|
2544
2550
|
"config",
|
|
2545
2551
|
"defaults"
|
|
2546
2552
|
);
|
|
2547
|
-
var defaultEntries =
|
|
2553
|
+
var defaultEntries = (0, import_node_fs2.readdirSync)(defaultEntriesDir).map(
|
|
2554
|
+
(filename2) => path5.join(defaultEntriesDir, filename2)
|
|
2555
|
+
);
|
|
2548
2556
|
invariant(defaultEntries.length > 0, "No default entries found");
|
|
2549
2557
|
var reactRouterDevLoadContext = () => void 0;
|
|
2550
2558
|
var reactRouterVitePlugin = () => {
|
|
@@ -2681,7 +2689,7 @@ var reactRouterVitePlugin = () => {
|
|
|
2681
2689
|
` : ""}`;
|
|
2682
2690
|
};
|
|
2683
2691
|
let loadViteManifest = async (directory) => {
|
|
2684
|
-
let manifestContents = await
|
|
2692
|
+
let manifestContents = await (0, import_promises2.readFile)(
|
|
2685
2693
|
path5.resolve(directory, ".vite", "manifest.json"),
|
|
2686
2694
|
"utf-8"
|
|
2687
2695
|
);
|
|
@@ -2703,7 +2711,7 @@ var reactRouterVitePlugin = () => {
|
|
|
2703
2711
|
};
|
|
2704
2712
|
let generateSriManifest = async (ctx2) => {
|
|
2705
2713
|
let clientBuildDirectory = getClientBuildDirectory(ctx2.reactRouterConfig);
|
|
2706
|
-
let entries =
|
|
2714
|
+
let entries = (0, import_node_fs2.readdirSync)(clientBuildDirectory, {
|
|
2707
2715
|
withFileTypes: true,
|
|
2708
2716
|
recursive: true
|
|
2709
2717
|
});
|
|
@@ -2713,7 +2721,7 @@ var reactRouterVitePlugin = () => {
|
|
|
2713
2721
|
const entryNormalizedPath = "parentPath" in entry && typeof entry.parentPath === "string" ? entry.parentPath : entry.path;
|
|
2714
2722
|
let contents;
|
|
2715
2723
|
try {
|
|
2716
|
-
contents = await
|
|
2724
|
+
contents = await (0, import_promises2.readFile)(
|
|
2717
2725
|
path5.join(entryNormalizedPath, entry.name),
|
|
2718
2726
|
"utf-8"
|
|
2719
2727
|
);
|
|
@@ -2969,6 +2977,7 @@ var reactRouterVitePlugin = () => {
|
|
|
2969
2977
|
config: async (_viteUserConfig, _viteConfigEnv) => {
|
|
2970
2978
|
await preloadVite();
|
|
2971
2979
|
let vite2 = getVite();
|
|
2980
|
+
let viteMajorVersion = parseInt(vite2.version.split(".")[0], 10);
|
|
2972
2981
|
viteUserConfig = _viteUserConfig;
|
|
2973
2982
|
viteConfigEnv = _viteConfigEnv;
|
|
2974
2983
|
viteCommand = viteConfigEnv.command;
|
|
@@ -2998,7 +3007,7 @@ var reactRouterVitePlugin = () => {
|
|
|
2998
3007
|
vite2.loadEnv(
|
|
2999
3008
|
viteConfigEnv.mode,
|
|
3000
3009
|
viteUserConfig.envDir ?? ctx.rootDirectory,
|
|
3001
|
-
// We override default prefix of "VITE_" with a blank string since
|
|
3010
|
+
// We override the default prefix of "VITE_" with a blank string since
|
|
3002
3011
|
// we're targeting the server, so we want to load all environment
|
|
3003
3012
|
// variables, not just those explicitly marked for the client
|
|
3004
3013
|
""
|
|
@@ -3027,7 +3036,13 @@ var reactRouterVitePlugin = () => {
|
|
|
3027
3036
|
...Object.values(ctx.reactRouterConfig.routes).map(
|
|
3028
3037
|
(route) => resolveRelativeRouteFilePath(route, ctx.reactRouterConfig)
|
|
3029
3038
|
)
|
|
3030
|
-
]
|
|
3039
|
+
].map(
|
|
3040
|
+
(entry) => (
|
|
3041
|
+
// In Vite 7, the `optimizeDeps.entries` option only accepts glob patterns.
|
|
3042
|
+
// In prior versions, absolute file paths were treated differently.
|
|
3043
|
+
viteMajorVersion >= 7 ? (0, import_tinyglobby.escapePath)(entry) : entry
|
|
3044
|
+
)
|
|
3045
|
+
) : [],
|
|
3031
3046
|
include: [
|
|
3032
3047
|
// Pre-bundle React dependencies to avoid React duplicates,
|
|
3033
3048
|
// even if React dependencies are not direct dependencies.
|
|
@@ -3062,7 +3077,7 @@ var reactRouterVitePlugin = () => {
|
|
|
3062
3077
|
conditions: viteCommand === "build" ? viteClientConditions : ["development", ...viteClientConditions]
|
|
3063
3078
|
},
|
|
3064
3079
|
base: viteUserConfig.base,
|
|
3065
|
-
// When consumer provides an
|
|
3080
|
+
// When consumer provides an allowlist for files that can be read by
|
|
3066
3081
|
// the server, ensure that the default entry files are included.
|
|
3067
3082
|
// If we don't do this and a default entry file is used, the server
|
|
3068
3083
|
// will throw an error that the file is not allowed to be read.
|
|
@@ -3354,15 +3369,15 @@ var reactRouterVitePlugin = () => {
|
|
|
3354
3369
|
let src = path5.join(serverBuildDirectory, ssrAssetPath);
|
|
3355
3370
|
let dest = path5.join(clientBuildDirectory, ssrAssetPath);
|
|
3356
3371
|
if (!userSsrEmitAssets) {
|
|
3357
|
-
if (!
|
|
3358
|
-
await
|
|
3372
|
+
if (!(0, import_node_fs2.existsSync)(dest)) {
|
|
3373
|
+
await (0, import_promises2.rename)(src, dest);
|
|
3359
3374
|
movedAssetPaths.push(dest);
|
|
3360
3375
|
} else {
|
|
3361
|
-
await
|
|
3376
|
+
await (0, import_promises2.rm)(src, { force: true, recursive: true });
|
|
3362
3377
|
removedAssetPaths.push(dest);
|
|
3363
3378
|
}
|
|
3364
|
-
} else if (!
|
|
3365
|
-
await
|
|
3379
|
+
} else if (!(0, import_node_fs2.existsSync)(dest)) {
|
|
3380
|
+
await (0, import_promises2.cp)(src, dest, { recursive: true });
|
|
3366
3381
|
copiedAssetPaths.push(dest);
|
|
3367
3382
|
}
|
|
3368
3383
|
}
|
|
@@ -3373,7 +3388,7 @@ var reactRouterVitePlugin = () => {
|
|
|
3373
3388
|
await Promise.all(
|
|
3374
3389
|
ssrCssPaths.map(async (cssPath) => {
|
|
3375
3390
|
let src = path5.join(serverBuildDirectory, cssPath);
|
|
3376
|
-
await
|
|
3391
|
+
await (0, import_promises2.rm)(src, { force: true, recursive: true });
|
|
3377
3392
|
removedAssetPaths.push(src);
|
|
3378
3393
|
})
|
|
3379
3394
|
);
|
|
@@ -3384,9 +3399,9 @@ var reactRouterVitePlugin = () => {
|
|
|
3384
3399
|
await Promise.all(
|
|
3385
3400
|
Array.from(cleanedAssetDirs).map(async (dir) => {
|
|
3386
3401
|
try {
|
|
3387
|
-
const files = await
|
|
3402
|
+
const files = await (0, import_promises2.readdir)(dir, { recursive: true });
|
|
3388
3403
|
if (files.length === 0) {
|
|
3389
|
-
await
|
|
3404
|
+
await (0, import_promises2.rm)(dir, { force: true, recursive: true });
|
|
3390
3405
|
}
|
|
3391
3406
|
} catch {
|
|
3392
3407
|
}
|
|
@@ -3450,7 +3465,7 @@ var reactRouterVitePlugin = () => {
|
|
|
3450
3465
|
"due to ssr:false"
|
|
3451
3466
|
].join(" ")
|
|
3452
3467
|
);
|
|
3453
|
-
|
|
3468
|
+
(0, import_node_fs2.rmSync)(serverBuildDirectory, { force: true, recursive: true });
|
|
3454
3469
|
}
|
|
3455
3470
|
}
|
|
3456
3471
|
},
|
|
@@ -3468,7 +3483,7 @@ var reactRouterVitePlugin = () => {
|
|
|
3468
3483
|
// primarily ensures code is never duplicated across a route module and
|
|
3469
3484
|
// its chunks. If we didn't have this plugin, any app that explicitly
|
|
3470
3485
|
// imports a route module would result in duplicate code since the app
|
|
3471
|
-
// would contain code for both the unprocessed route module
|
|
3486
|
+
// would contain code for both the unprocessed route module and its
|
|
3472
3487
|
// individual chunks. This is because, since they have different module
|
|
3473
3488
|
// IDs, they are treated as completely separate modules even though they
|
|
3474
3489
|
// all reference the same underlying file. This plugin addresses this by
|
|
@@ -3774,11 +3789,8 @@ var reactRouterVitePlugin = () => {
|
|
|
3774
3789
|
);
|
|
3775
3790
|
return [
|
|
3776
3791
|
"const exports = {}",
|
|
3777
|
-
await
|
|
3778
|
-
await
|
|
3779
|
-
require.resolve("./static/refresh-utils.cjs"),
|
|
3780
|
-
"utf8"
|
|
3781
|
-
),
|
|
3792
|
+
await (0, import_promises2.readFile)(reactRefreshRuntimePath, "utf8"),
|
|
3793
|
+
await (0, import_promises2.readFile)(require.resolve("./static/refresh-utils.cjs"), "utf8"),
|
|
3782
3794
|
"export default exports"
|
|
3783
3795
|
].join("\n");
|
|
3784
3796
|
}
|
|
@@ -3861,10 +3873,10 @@ var reactRouterVitePlugin = () => {
|
|
|
3861
3873
|
{
|
|
3862
3874
|
name: "react-router-server-change-trigger-client-hmr",
|
|
3863
3875
|
// This hook is only available in Vite v6+ so this is a no-op in v5.
|
|
3864
|
-
// Previously the server and client modules were shared in a single module
|
|
3876
|
+
// Previously, the server and client modules were shared in a single module
|
|
3865
3877
|
// graph. This meant that changes to server code automatically resulted in
|
|
3866
|
-
// client HMR updates. In Vite v6
|
|
3867
|
-
// each other so we need to manually trigger client HMR updates if server
|
|
3878
|
+
// client HMR updates. In Vite v6+, these module graphs are separate from
|
|
3879
|
+
// each other, so we need to manually trigger client HMR updates if server
|
|
3868
3880
|
// code has changed.
|
|
3869
3881
|
hotUpdate({ server, modules }) {
|
|
3870
3882
|
if (this.environment.name !== "ssr" && modules.length <= 0) {
|
|
@@ -4058,7 +4070,7 @@ async function handleSpaMode(viteConfig, reactRouterConfig, serverBuildDirectory
|
|
|
4058
4070
|
"SPA Mode: Did you forget to include `<Scripts/>` in your root route? Your pre-rendered HTML cannot hydrate without `<Scripts />`."
|
|
4059
4071
|
);
|
|
4060
4072
|
}
|
|
4061
|
-
await
|
|
4073
|
+
await (0, import_promises2.writeFile)(path5.join(clientBuildDirectory, filename2), html);
|
|
4062
4074
|
let prettyDir = path5.relative(process.cwd(), clientBuildDirectory);
|
|
4063
4075
|
let prettyPath = path5.join(prettyDir, filename2);
|
|
4064
4076
|
if (build.prerender.length > 0) {
|
|
@@ -4189,8 +4201,8 @@ ${normalizedPath}`
|
|
|
4189
4201
|
}
|
|
4190
4202
|
let outdir = path5.relative(process.cwd(), clientBuildDirectory);
|
|
4191
4203
|
let outfile = path5.join(outdir, ...normalizedPath.split("/"));
|
|
4192
|
-
await
|
|
4193
|
-
await
|
|
4204
|
+
await (0, import_promises2.mkdir)(path5.dirname(outfile), { recursive: true });
|
|
4205
|
+
await (0, import_promises2.writeFile)(outfile, data);
|
|
4194
4206
|
viteConfig.logger.info(
|
|
4195
4207
|
`Prerender (data): ${prerenderPath} -> ${import_picocolors3.default.bold(outfile)}`
|
|
4196
4208
|
);
|
|
@@ -4228,8 +4240,8 @@ ${html}`
|
|
|
4228
4240
|
}
|
|
4229
4241
|
let outdir = path5.relative(process.cwd(), clientBuildDirectory);
|
|
4230
4242
|
let outfile = path5.join(outdir, ...normalizedPath.split("/"), "index.html");
|
|
4231
|
-
await
|
|
4232
|
-
await
|
|
4243
|
+
await (0, import_promises2.mkdir)(path5.dirname(outfile), { recursive: true });
|
|
4244
|
+
await (0, import_promises2.writeFile)(outfile, html);
|
|
4233
4245
|
viteConfig.logger.info(
|
|
4234
4246
|
`Prerender (html): ${prerenderPath} -> ${import_picocolors3.default.bold(outfile)}`
|
|
4235
4247
|
);
|
|
@@ -4247,8 +4259,8 @@ ${content.toString("utf8")}`
|
|
|
4247
4259
|
}
|
|
4248
4260
|
let outdir = path5.relative(process.cwd(), clientBuildDirectory);
|
|
4249
4261
|
let outfile = path5.join(outdir, ...normalizedPath.split("/"));
|
|
4250
|
-
await
|
|
4251
|
-
await
|
|
4262
|
+
await (0, import_promises2.mkdir)(path5.dirname(outfile), { recursive: true });
|
|
4263
|
+
await (0, import_promises2.writeFile)(outfile, content);
|
|
4252
4264
|
viteConfig.logger.info(
|
|
4253
4265
|
`Prerender (resource): ${prerenderPath} -> ${import_picocolors3.default.bold(outfile)}`
|
|
4254
4266
|
);
|
|
@@ -4501,7 +4513,7 @@ async function cleanBuildDirectory(viteConfig, ctx) {
|
|
|
4501
4513
|
return !relativePath.startsWith("..") && !path5.isAbsolute(relativePath);
|
|
4502
4514
|
};
|
|
4503
4515
|
if (viteConfig.build.emptyOutDir ?? isWithinRoot()) {
|
|
4504
|
-
await
|
|
4516
|
+
await (0, import_promises2.rm)(buildDirectory, { force: true, recursive: true });
|
|
4505
4517
|
}
|
|
4506
4518
|
}
|
|
4507
4519
|
async function cleanViteManifests(environmentsOptions, ctx) {
|
|
@@ -4514,15 +4526,15 @@ async function cleanViteManifests(environmentsOptions, ctx) {
|
|
|
4514
4526
|
);
|
|
4515
4527
|
await Promise.all(
|
|
4516
4528
|
viteManifestPaths.map(async (viteManifestPath) => {
|
|
4517
|
-
let manifestExists =
|
|
4529
|
+
let manifestExists = (0, import_node_fs2.existsSync)(viteManifestPath);
|
|
4518
4530
|
if (!manifestExists) return;
|
|
4519
4531
|
if (!ctx.viteManifestEnabled) {
|
|
4520
|
-
await
|
|
4532
|
+
await (0, import_promises2.rm)(viteManifestPath, { force: true, recursive: true });
|
|
4521
4533
|
}
|
|
4522
4534
|
let viteDir = path5.dirname(viteManifestPath);
|
|
4523
|
-
let viteDirFiles = await
|
|
4535
|
+
let viteDirFiles = await (0, import_promises2.readdir)(viteDir, { recursive: true });
|
|
4524
4536
|
if (viteDirFiles.length === 0) {
|
|
4525
|
-
await
|
|
4537
|
+
await (0, import_promises2.rm)(viteDir, { force: true, recursive: true });
|
|
4526
4538
|
}
|
|
4527
4539
|
})
|
|
4528
4540
|
);
|
|
@@ -4658,13 +4670,13 @@ async function getEnvironmentOptionsResolvers(ctx, viteCommand) {
|
|
|
4658
4670
|
},
|
|
4659
4671
|
build: {
|
|
4660
4672
|
// We move SSR-only assets to client assets. Note that the
|
|
4661
|
-
// SSR build can also emit code-split JS files (e.g
|
|
4673
|
+
// SSR build can also emit code-split JS files (e.g., by
|
|
4662
4674
|
// dynamic import) under the same assets directory
|
|
4663
4675
|
// regardless of "ssrEmitAssets" option, so we also need to
|
|
4664
|
-
// keep these JS files
|
|
4676
|
+
// keep these JS files to be kept as-is.
|
|
4665
4677
|
ssrEmitAssets: true,
|
|
4666
4678
|
copyPublicDir: false,
|
|
4667
|
-
//
|
|
4679
|
+
// The client only uses assets in the public directory
|
|
4668
4680
|
rollupOptions: {
|
|
4669
4681
|
input: (ctx.reactRouterConfig.future.unstable_viteEnvironmentApi ? viteUserConfig.environments?.ssr?.build?.rollupOptions?.input : viteUserConfig.build?.rollupOptions?.input) ?? virtual.serverBuild.id,
|
|
4670
4682
|
output: {
|
|
@@ -4688,7 +4700,7 @@ async function getEnvironmentOptionsResolvers(ctx, viteCommand) {
|
|
|
4688
4700
|
route.file
|
|
4689
4701
|
);
|
|
4690
4702
|
let isRootRoute = route.file === ctx.reactRouterConfig.routes.root.file;
|
|
4691
|
-
let code =
|
|
4703
|
+
let code = (0, import_node_fs2.readFileSync)(routeFilePath, "utf-8");
|
|
4692
4704
|
return [
|
|
4693
4705
|
`${routeFilePath}${BUILD_CLIENT_ROUTE_QUERY_STRING}`,
|
|
4694
4706
|
...ctx.reactRouterConfig.future.unstable_splitRouteModules && !isRootRoute ? routeChunkExportNames.map(
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@react-router/dev",
|
|
3
|
-
"version": "7.6.
|
|
3
|
+
"version": "7.6.3-pre.0",
|
|
4
4
|
"description": "Dev tools and CLI for React Router",
|
|
5
5
|
"homepage": "https://reactrouter.com",
|
|
6
6
|
"bugs": {
|
|
@@ -75,7 +75,6 @@
|
|
|
75
75
|
"dedent": "^1.5.3",
|
|
76
76
|
"es-module-lexer": "^1.3.1",
|
|
77
77
|
"exit-hook": "2.2.1",
|
|
78
|
-
"fs-extra": "^10.0.0",
|
|
79
78
|
"jsesc": "3.0.2",
|
|
80
79
|
"lodash": "^4.17.21",
|
|
81
80
|
"pathe": "^1.1.2",
|
|
@@ -84,9 +83,10 @@
|
|
|
84
83
|
"react-refresh": "^0.14.0",
|
|
85
84
|
"semver": "^7.3.7",
|
|
86
85
|
"set-cookie-parser": "^2.6.0",
|
|
86
|
+
"tinyglobby": "^0.2.14",
|
|
87
87
|
"valibot": "^0.41.0",
|
|
88
88
|
"vite-node": "^3.1.4",
|
|
89
|
-
"@react-router/node": "7.6.
|
|
89
|
+
"@react-router/node": "7.6.3-pre.0"
|
|
90
90
|
},
|
|
91
91
|
"devDependencies": {
|
|
92
92
|
"@types/babel__core": "^7.20.5",
|
|
@@ -94,7 +94,6 @@
|
|
|
94
94
|
"@types/babel__traverse": "^7.20.5",
|
|
95
95
|
"@types/dedent": "^0.7.0",
|
|
96
96
|
"@types/express": "^4.17.9",
|
|
97
|
-
"@types/fs-extra": "^8.1.2",
|
|
98
97
|
"@types/jsesc": "^3.0.1",
|
|
99
98
|
"@types/lodash": "^4.14.182",
|
|
100
99
|
"@types/node": "^20.0.0",
|
|
@@ -110,15 +109,15 @@
|
|
|
110
109
|
"vite": "^6.1.0",
|
|
111
110
|
"wireit": "0.14.9",
|
|
112
111
|
"wrangler": "^4.2.0",
|
|
113
|
-
"@react-router/serve": "7.6.
|
|
114
|
-
"react-router": "^7.6.
|
|
112
|
+
"@react-router/serve": "7.6.3-pre.0",
|
|
113
|
+
"react-router": "^7.6.3-pre.0"
|
|
115
114
|
},
|
|
116
115
|
"peerDependencies": {
|
|
117
116
|
"typescript": "^5.1.0",
|
|
118
|
-
"vite": "^5.1.0 || ^6.0.0",
|
|
117
|
+
"vite": "^5.1.0 || ^6.0.0 || ^7.0.0",
|
|
119
118
|
"wrangler": "^3.28.2 || ^4.0.0",
|
|
120
|
-
"@react-router/serve": "^7.6.
|
|
121
|
-
"react-router": "^7.6.
|
|
119
|
+
"@react-router/serve": "^7.6.3-pre.0",
|
|
120
|
+
"react-router": "^7.6.3-pre.0"
|
|
122
121
|
},
|
|
123
122
|
"peerDependenciesMeta": {
|
|
124
123
|
"@react-router/serve": {
|