From 11e4a2166810345e0347f6b7803b90111378fa24 Mon Sep 17 00:00:00 2001 From: Tim Dorr Date: Wed, 11 Jun 2025 16:16:44 +0000 Subject: [PATCH 1/2] fix: Add validation for a route's id not being 'root' --- .../__tests__/route-config-test.ts | 15 +++++++++++++++ packages/react-router-dev/config/routes.ts | 7 ++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/packages/react-router-dev/__tests__/route-config-test.ts b/packages/react-router-dev/__tests__/route-config-test.ts index 0fc700d7fa..de788448ac 100644 --- a/packages/react-router-dev/__tests__/route-config-test.ts +++ b/packages/react-router-dev/__tests__/route-config-test.ts @@ -76,6 +76,21 @@ describe("route config", () => { `); }); + it("is invalid it uses the 'root' id", () => { + let result = validateRouteConfig({ + routeConfigFile: "routes.ts", + routeConfig: [route("/", "root.tsx", { id: "root" })], + }); + + expect(result.valid).toBe(false); + expect(!result.valid && result.message).toMatchInlineSnapshot(` + "Route config in "routes.ts" is invalid. + + Path: routes.0.id + A route cannot use the reserved id 'root'." + `); + }); + it("is invalid when property is wrong type", () => { let result = validateRouteConfig({ routeConfigFile: "routes.ts", diff --git a/packages/react-router-dev/config/routes.ts b/packages/react-router-dev/config/routes.ts index ef384788e6..03a2a4d898 100644 --- a/packages/react-router-dev/config/routes.ts +++ b/packages/react-router-dev/config/routes.ts @@ -112,7 +112,12 @@ export const routeConfigEntrySchema: v.BaseSchema< ); }, "Invalid type: Expected object but received a promise. Did you forget to await?"), v.object({ - id: v.optional(v.string()), + id: v.optional( + v.pipe( + v.string(), + v.notValue("root", "A route cannot use the reserved id 'root'.") + ) + ), path: v.optional(v.string()), index: v.optional(v.boolean()), caseSensitive: v.optional(v.boolean()), From cc297a59618c0c9ec5abe1a7b3dd6cd5a1c3e70a Mon Sep 17 00:00:00 2001 From: Tim Dorr Date: Wed, 11 Jun 2025 16:19:11 +0000 Subject: [PATCH 2/2] Add a changeset --- .changeset/tender-snails-attack.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/tender-snails-attack.md diff --git a/.changeset/tender-snails-attack.md b/.changeset/tender-snails-attack.md new file mode 100644 index 0000000000..c1f9d8f756 --- /dev/null +++ b/.changeset/tender-snails-attack.md @@ -0,0 +1,5 @@ +--- +"@react-router/dev": patch +--- + +Add validation for a route's id not being 'root'