diff --git a/integration/cli-test.ts b/integration/cli-test.ts index 0352460a2a..ea90a3e870 100644 --- a/integration/cli-test.ts +++ b/integration/cli-test.ts @@ -213,7 +213,7 @@ const helpText = dedent` --json Print the routes as JSON \`reveal\` Options: --config, -c Use specified Vite config file (string) - --no-typescript Generate plain JavaScript files + --no-typescript Generate plain JavaScript files (deprecated; will be removed in v9) \`typegen\` Options: --watch Automatically regenerate types whenever route config (\`routes.ts\`) or route modules change @@ -461,10 +461,46 @@ test.describe("cli", () => { expect(existsSync(entryServerFile)).toBeFalsy(); expect(existsSync(entryClientFile)).toBeFalsy(); - run(["reveal", "--no-typescript"], { cwd }); + let { stderr, status } = run(["reveal", "--no-typescript"], { + cwd, + env: { + ...process.env, + FORCE_COLOR: undefined, + NO_COLOR: "1", + }, + }); expect(existsSync(entryServerFile)).toBeTruthy(); expect(existsSync(entryClientFile)).toBeTruthy(); + expect(readFileSync(entryServerFile, "utf-8")).toContain( + "renderToPipeableStream", + ); + expect(readFileSync(entryServerFile, "utf-8")).not.toContain( + "import type", + ); + expect(stderr.toString().trim()).toBe( + "The --no-typescript flag is deprecated and will be removed in React Router v9.", + ); + expect(status).toBe(0); + expect(build({ cwd }).status).toBe(0); + }); + + test("generates a web JavaScript server entry for non-Node projects", async () => { + const cwd = await createProject(); + let packageJsonPath = path.join(cwd, "package.json"); + let pkg = JSON.parse(readFileSync(packageJsonPath, "utf-8")); + delete pkg.dependencies["@react-router/express"]; + delete pkg.dependencies["@react-router/node"]; + delete pkg.dependencies["@react-router/serve"]; + writeFileSync(packageJsonPath, JSON.stringify(pkg, null, 2)); + + let entryServerFile = path.join(cwd, "app", "entry.server.jsx"); + + run(["reveal", "entry.server", "--no-typescript"], { cwd }); + + expect(readFileSync(entryServerFile, "utf-8")).toContain( + "renderToReadableStream", + ); }); }); diff --git a/packages/create-react-router/copy-template.ts b/packages/create-react-router/copy-template.ts index d4e352b0ca..065b74c2c3 100644 --- a/packages/create-react-router/copy-template.ts +++ b/packages/create-react-router/copy-template.ts @@ -78,10 +78,7 @@ function isLocalFilePath(input: string): boolean { path.isAbsolute(input) ? input : path.resolve(process.cwd(), input), ) ); - } catch ( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - e - ) { + } catch { return false; } } @@ -331,10 +328,7 @@ async function downloadAndExtractTarball( }, }), ); - } catch ( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - e - ) { + } catch { throw new CopyTemplateError( "There was a problem extracting the file from the provided template." + ` Template URL: \`${tarballUrl}\`` + @@ -401,10 +395,7 @@ function isValidGithubRepoUrl( ? pathSegments[2] === "tree" && pathSegments.length >= 4 : true) ); - } catch ( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - e - ) { + } catch { return false; } } diff --git a/packages/create-react-router/prompt.ts b/packages/create-react-router/prompt.ts index e63f0c187e..434fc837e9 100644 --- a/packages/create-react-router/prompt.ts +++ b/packages/create-react-router/prompt.ts @@ -61,10 +61,7 @@ export async function prompt< answer = await prompts[type](Object.assign({ stdin, stdout }, question)); answers[name] = answer as any; quit = await onSubmit(question, answer, answers); - } catch ( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - e - ) { + } catch { quit = !(await onCancel(question, answers)); } if (quit) { diff --git a/packages/create-react-router/prompts-prompt-base.ts b/packages/create-react-router/prompts-prompt-base.ts index 3648988b01..59e1652d06 100644 --- a/packages/create-react-router/prompts-prompt-base.ts +++ b/packages/create-react-router/prompts-prompt-base.ts @@ -42,10 +42,7 @@ export class Prompt extends EventEmitter { if (a === false) { try { this._(str, key); - } catch ( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - e - ) {} + } catch {} // @ts-expect-error } else if (typeof this[a] === "function") { // @ts-expect-error diff --git a/packages/create-react-router/utils.ts b/packages/create-react-router/utils.ts index 79d9420956..e51416edd8 100644 --- a/packages/create-react-router/utils.ts +++ b/packages/create-react-router/utils.ts @@ -226,10 +226,7 @@ export function isUrl(value: string | URL) { try { new URL(value); return true; - } catch ( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - e - ) { + } catch { return false; } } diff --git a/packages/react-router-dev/.changes/patch.prebuild-javascript-entries.md b/packages/react-router-dev/.changes/patch.prebuild-javascript-entries.md new file mode 100644 index 0000000000..41b029707f --- /dev/null +++ b/packages/react-router-dev/.changes/patch.prebuild-javascript-entries.md @@ -0,0 +1,3 @@ +Generate JavaScript entry files at package build time so `react-router reveal --no-typescript` does not require Prettier at runtime + +- Deprecate the `--no-typescript` flag ahead of its removal in React Router v9 diff --git a/packages/react-router-dev/cli/commands.ts b/packages/react-router-dev/cli/commands.ts index 4a86cbcc65..c074afe557 100644 --- a/packages/react-router-dev/cli/commands.ts +++ b/packages/react-router-dev/cli/commands.ts @@ -14,7 +14,6 @@ import type { ViteBuildOptions } from "../vite/build"; import { hasNodeDependency, loadConfig } from "../config/config"; import { formatRoutes } from "../config/format"; import type { RoutesFormat } from "../config/format"; -import { transpile as convertFileToJS } from "./useJavascript"; import * as profiler from "../vite/profiler"; import * as Typegen from "../typegen"; import { preloadVite, getVite } from "../vite/vite"; @@ -177,18 +176,20 @@ export async function generateEntry( await copyFile(defaultEntry, outputFile); } else { let pkgJson = await readPackageJSON(rootDirectory); + let useTypeScript = flags.typescript ?? true; + let outputExtension = useTypeScript ? "tsx" : "jsx"; let defaultEntryClient = path.resolve( defaultsDirectory, - "entry.client.tsx", + `entry.client.${outputExtension}`, ); let defaultEntryServer = path.resolve( defaultsDirectory, hasNodeDependency(pkgJson.dependencies) && !configResult.value.future.unstable_enableNodeReadableStream - ? `entry.server.node.tsx` - : `entry.server.web.tsx`, + ? `entry.server.node.${outputExtension}` + : `entry.server.web.${outputExtension}`, ); let isServerEntry = entry === "entry.server"; @@ -201,20 +202,10 @@ export async function generateEntry( defaultEntryClient, ); - let useTypeScript = flags.typescript ?? true; - let outputExtension = useTypeScript ? "tsx" : "jsx"; let outputEntry = `${entry}.${outputExtension}`; outputFile = path.resolve(appDirectory, outputEntry); - if (!useTypeScript) { - let javascript = await convertFileToJS(contents, { - cwd: rootDirectory, - filename: isServerEntry ? defaultEntryServer : defaultEntryClient, - }); - await writeFile(outputFile, javascript, "utf-8"); - } else { - await writeFile(outputFile, contents, "utf-8"); - } + await writeFile(outputFile, contents, "utf-8"); } console.log( diff --git a/packages/react-router-dev/cli/run.ts b/packages/react-router-dev/cli/run.ts index 4d527d2f6a..61d838b416 100644 --- a/packages/react-router-dev/cli/run.ts +++ b/packages/react-router-dev/cli/run.ts @@ -45,7 +45,7 @@ ${colors.blueBright("react-router")} --json Print the routes as JSON \`reveal\` Options: --config, -c Use specified Vite config file (string) - --no-typescript Generate plain JavaScript files + --no-typescript Generate plain JavaScript files (deprecated; will be removed in v9) \`typegen\` Options: --watch Automatically regenerate types whenever route config (\`routes.ts\`) or route modules change @@ -198,6 +198,11 @@ export async function run( flags.interactive = flags.interactive ?? isMain; if (values["no-typescript"]) { + console.warn( + colors.yellow( + "The --no-typescript flag is deprecated and will be removed in React Router v9.", + ), + ); flags.typescript = false; } diff --git a/packages/react-router-dev/package.json b/packages/react-router-dev/package.json index 7f25d822c1..36d9004773 100644 --- a/packages/react-router-dev/package.json +++ b/packages/react-router-dev/package.json @@ -92,8 +92,6 @@ "@babel/core": "^7.29.7", "@babel/generator": "^7.29.7", "@babel/parser": "^7.29.7", - "@babel/plugin-syntax-jsx": "^7.29.7", - "@babel/preset-typescript": "^7.29.7", "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7", "@react-router/node": "workspace:*", @@ -110,7 +108,6 @@ "pathe": "^2.0.3", "picocolors": "^1.1.1", "pkg-types": "^2.3.1", - "prettier": "^3.8.3", "react-refresh": "^0.18.0", "semver": "^7.8.1", "tinyglobby": "^0.2.16", @@ -118,6 +115,8 @@ }, "devDependencies": { "@react-router/serve": "workspace:*", + "@babel/plugin-syntax-jsx": "^7.29.7", + "@babel/preset-typescript": "^7.29.7", "@types/babel__core": "^7.20.5", "@types/babel__generator": "^7.27.0", "@types/babel__traverse": "^7.28.0", @@ -132,6 +131,7 @@ "esbuild-register": "^3.6.0", "execa": "9.6.1", "fast-glob": "3.3.3", + "prettier": "^3.8.3", "react-router": "workspace:^", "tsdown": "catalog:", "typescript": "catalog:", diff --git a/packages/react-router-dev/tsdown.config.ts b/packages/react-router-dev/tsdown.config.ts index d0dfc52ba9..0d60042889 100644 --- a/packages/react-router-dev/tsdown.config.ts +++ b/packages/react-router-dev/tsdown.config.ts @@ -4,6 +4,7 @@ import { defineConfig } from "tsdown"; // @ts-ignore - out of scope import { createBanner } from "../../build.utils.ts"; +import { transpile as convertFileToJS } from "./cli/useJavascript.ts"; import pkg from "./package.json" with { type: "json" }; @@ -34,6 +35,16 @@ async function copyBuildAssets() { `config/defaults/${file}`, `dist/config/defaults/${file}`, ); + if (file.endsWith(".tsx")) { + let inputFile = `config/defaults/${file}`; + let tsx = await fsp.readFile(inputFile, "utf-8"); + let jsx = await convertFileToJS(tsx, { filename: inputFile }); + await fsp.writeFile( + `dist/config/defaults/${file.replace(/\.tsx$/, ".jsx")}`, + jsx, + "utf-8", + ); + } } await fsp.mkdir("dist/config/default-rsc-entries", { diff --git a/packages/react-router-dev/vite/has-dependency.ts b/packages/react-router-dev/vite/has-dependency.ts index 4f0a7e8269..c14112a9c8 100644 --- a/packages/react-router-dev/vite/has-dependency.ts +++ b/packages/react-router-dev/vite/has-dependency.ts @@ -11,10 +11,7 @@ export function hasDependency({ }) { try { return Boolean(nodeRequire.resolve(name, { paths: [rootDirectory] })); - } catch ( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - e - ) { + } catch { return false; } } diff --git a/packages/react-router-node/stream.ts b/packages/react-router-node/stream.ts index 0d495b14a2..40086489cf 100644 --- a/packages/react-router-node/stream.ts +++ b/packages/react-router-node/stream.ts @@ -272,10 +272,7 @@ class StreamPump { if (available <= 0) { this.pause(); } - } catch ( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - e - ) { + } catch { this.controller.error( new Error( "Could not create Buffer, chunk must be of type string or an instance of Buffer, ArrayBuffer, or Array or an Array-like Object", diff --git a/packages/react-router/__tests__/dom/nav-link-active-test.tsx b/packages/react-router/__tests__/dom/nav-link-active-test.tsx index f5de0a4a71..dbb908746b 100644 --- a/packages/react-router/__tests__/dom/nav-link-active-test.tsx +++ b/packages/react-router/__tests__/dom/nav-link-active-test.tsx @@ -1084,19 +1084,13 @@ function createDeferred() { res(val); try { await promise; - } catch ( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - e - ) {} + } catch {} }; reject = async (error?: Error) => { rej(error); try { await promise; - } catch ( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - e - ) {} + } catch {} }; }); return { diff --git a/packages/react-router/__tests__/router/utils/data-router-setup.ts b/packages/react-router/__tests__/router/utils/data-router-setup.ts index c414cbdf7b..dd605f374b 100644 --- a/packages/react-router/__tests__/router/utils/data-router-setup.ts +++ b/packages/react-router/__tests__/router/utils/data-router-setup.ts @@ -381,10 +381,7 @@ export function setup({ await internalHelpers.dfd.resolve(redirectResponse); } await tick(); - } catch ( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - e - ) {} + } catch {} return helpers; } @@ -404,10 +401,7 @@ export function setup({ async reject(value) { try { await internalHelpers.dfd.reject(value); - } catch ( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - e - ) {} + } catch {} }, async redirect(href, status = 301, headers = {}, shims = []) { return _redirect(true, href, status, headers, shims); diff --git a/packages/react-router/__tests__/router/utils/utils.ts b/packages/react-router/__tests__/router/utils/utils.ts index cdeb40b37d..e1e83bd124 100644 --- a/packages/react-router/__tests__/router/utils/utils.ts +++ b/packages/react-router/__tests__/router/utils/utils.ts @@ -40,19 +40,13 @@ export function createDeferred() { res(val); try { await promise; - } catch ( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - e - ) {} + } catch {} }; reject = async (error?: Error) => { rej(error); try { await promise; - } catch ( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - e - ) {} + } catch {} }; }); return { diff --git a/packages/react-router/lib/dom/dom.ts b/packages/react-router/lib/dom/dom.ts index 73e53a4c39..db2eabe051 100644 --- a/packages/react-router/lib/dom/dom.ts +++ b/packages/react-router/lib/dom/dom.ts @@ -146,10 +146,7 @@ function isFormDataSubmitterSupported() { 0, ); _formDataSupportsSubmitter = false; - } catch ( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - e - ) { + } catch { _formDataSupportsSubmitter = true; } } diff --git a/packages/react-router/lib/dom/lib.tsx b/packages/react-router/lib/dom/lib.tsx index 10254e1198..94ad1aae67 100644 --- a/packages/react-router/lib/dom/lib.tsx +++ b/packages/react-router/lib/dom/lib.tsx @@ -121,10 +121,7 @@ try { // @ts-expect-error REACT_ROUTER_VERSION; } -} catch ( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - e -) { +} catch { // no-op } //#endregion @@ -751,10 +748,7 @@ function deserializeErrors( // because we don't serialize SSR stack traces for security reasons error.stack = ""; serialized[key] = error; - } catch ( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - e - ) { + } catch { // no-op - fall through and create a normal Error } } @@ -3143,10 +3137,7 @@ export function useScrollRestoration({ if (sessionPositions) { savedScrollPositions = JSON.parse(sessionPositions); } - } catch ( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - e - ) { + } catch { // no-op, use default empty object } }, [storageKey]); diff --git a/packages/react-router/lib/dom/ssr/components.tsx b/packages/react-router/lib/dom/ssr/components.tsx index 40273ccf74..0808f0f53e 100644 --- a/packages/react-router/lib/dom/ssr/components.tsx +++ b/packages/react-router/lib/dom/ssr/components.tsx @@ -718,10 +718,7 @@ export function Meta(): React.JSX.Element { dangerouslySetInnerHTML={{ __html: escapeHtml(json) }} /> ); - } catch ( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - e - ) { + } catch { return null; } } diff --git a/packages/react-router/lib/dom/ssr/single-fetch.tsx b/packages/react-router/lib/dom/ssr/single-fetch.tsx index e1ff2ad7b7..9cfbef89e2 100644 --- a/packages/react-router/lib/dom/ssr/single-fetch.tsx +++ b/packages/react-router/lib/dom/ssr/single-fetch.tsx @@ -511,10 +511,7 @@ async function bubbleMiddlewareErrors( } }); } - } catch ( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - e - ) { + } catch { // No-op - this logic is only intended to process successful responses // If the `.data` failed, the routes will handle those errors themselves } @@ -657,10 +654,7 @@ async function fetchAndDecodeViaTurboStream( } } return { status: res.status, data }; - } catch ( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - e - ) { + } catch { // Can't clone after consuming the body via turbo-stream so we can't // include the body here. In an ideal world we'd look for a turbo-stream // content type here, or even X-Remix-Response but then folks can't @@ -776,19 +770,13 @@ function createDeferred() { res(val); try { await promise; - } catch ( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - e - ) {} + } catch {} }; reject = async (error?: unknown) => { rej(error); try { await promise; - } catch ( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - e - ) {} + } catch {} }; }); return { diff --git a/packages/react-router/lib/router/history.ts b/packages/react-router/lib/router/history.ts index 559ea24382..08148d6a0e 100644 --- a/packages/react-router/lib/router/history.ts +++ b/packages/react-router/lib/router/history.ts @@ -538,10 +538,7 @@ export function warning(cond: any, message: string) { // find the source for a warning that appears in the console by // enabling "pause on exceptions" in your JavaScript debugger. throw new Error(message); - } catch ( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - e - ) {} + } catch {} } } diff --git a/packages/react-router/lib/router/router.ts b/packages/react-router/lib/router/router.ts index e26a6d87c8..97d346fa04 100644 --- a/packages/react-router/lib/router/router.ts +++ b/packages/react-router/lib/router/router.ts @@ -5266,10 +5266,7 @@ function normalizeNavigateOptions( text: undefined, }, }; - } catch ( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - e - ) { + } catch { return getInvalidBodyError(); } } @@ -5299,10 +5296,7 @@ function normalizeNavigateOptions( try { searchParams = new URLSearchParams(opts.body); formData = convertSearchParamsToFormData(searchParams); - } catch ( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - e - ) { + } catch { return getInvalidBodyError(); } } @@ -6617,10 +6611,7 @@ async function callDataStrategyImpl( m._lazyPromises?.route, ]), ); - } catch ( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - e - ) { + } catch { // No-op } @@ -6939,10 +6930,7 @@ function normalizeRedirectLocation( if (hasInvalidProtocol(url.toString())) { throw new Error("Invalid redirect location"); } - } catch ( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - e - ) {} + } catch {} return location; } @@ -7663,10 +7651,7 @@ function restoreAppliedTransitions( } } } - } catch ( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - e - ) { + } catch { // no-op, use default empty object } } @@ -7702,19 +7687,13 @@ function createDeferred() { res(val); try { await promise; - } catch ( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - e - ) {} + } catch {} }; reject = async (error?: Error) => { rej(error); try { await promise; - } catch ( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - e - ) {} + } catch {} }; }); return { diff --git a/packages/react-router/lib/router/utils.ts b/packages/react-router/lib/router/utils.ts index 28f501bbe8..8f78217250 100644 --- a/packages/react-router/lib/router/utils.ts +++ b/packages/react-router/lib/router/utils.ts @@ -2425,10 +2425,7 @@ export function parseToInfo( } else { isExternal = true; } - } catch ( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - e - ) { + } catch { // We can't do external URL detection without a valid URL warning( false, diff --git a/packages/react-router/lib/rsc/html-stream/server.ts b/packages/react-router/lib/rsc/html-stream/server.ts index 84a24b4679..ba9eb70c80 100644 --- a/packages/react-router/lib/rsc/html-stream/server.ts +++ b/packages/react-router/lib/rsc/html-stream/server.ts @@ -109,10 +109,7 @@ async function writeRSCStream( controller, nonce, ); - } catch ( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - e - ) { + } catch { let base64 = JSON.stringify(btoa(String.fromCodePoint(...chunk))); writeChunk( `Uint8Array.from(atob(${base64}), m => m.codePointAt(0))`, diff --git a/packages/react-router/lib/rsc/server.ssr.tsx b/packages/react-router/lib/rsc/server.ssr.tsx index 8dae5b56ad..a3e53ea72c 100644 --- a/packages/react-router/lib/rsc/server.ssr.tsx +++ b/packages/react-router/lib/rsc/server.ssr.tsx @@ -451,10 +451,7 @@ export async function routeRSCServerRequest({ statusText, headers, }); - } catch ( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - error2 - ) { + } catch { // Throw the original error below } diff --git a/packages/react-router/lib/server-runtime/cookies.ts b/packages/react-router/lib/server-runtime/cookies.ts index 3a3fa29346..54ecc5b0f6 100644 --- a/packages/react-router/lib/server-runtime/cookies.ts +++ b/packages/react-router/lib/server-runtime/cookies.ts @@ -204,10 +204,7 @@ function encodeData(value: any): string { function decodeData(value: string): any { try { return JSON.parse(decodeURIComponent(myEscape(atob(value)))); - } catch ( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - e - ) { + } catch { return {}; } } diff --git a/packages/react-router/lib/server-runtime/crypto.ts b/packages/react-router/lib/server-runtime/crypto.ts index 7059b24791..90d77fff35 100644 --- a/packages/react-router/lib/server-runtime/crypto.ts +++ b/packages/react-router/lib/server-runtime/crypto.ts @@ -28,10 +28,7 @@ export const unsign = async ( let valid = await crypto.subtle.verify("HMAC", key, signature, data); return valid ? value : false; - } catch ( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - e - ) { + } catch { // atob will throw a DOMException with name === 'InvalidCharacterError' // if the signature contains a non-base64 character, which should just // be treated as an invalid signature. diff --git a/packages/react-router/lib/server-runtime/dev.ts b/packages/react-router/lib/server-runtime/dev.ts index 4cd69b6420..136c66cf40 100644 --- a/packages/react-router/lib/server-runtime/dev.ts +++ b/packages/react-router/lib/server-runtime/dev.ts @@ -25,10 +25,7 @@ export function getBuildTimeHeader(request: Request, headerName: string) { ) { return request.headers.get(headerName); } - } catch ( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - e - ) {} + } catch {} } return null; } diff --git a/packages/react-router/lib/server-runtime/server.ts b/packages/react-router/lib/server-runtime/server.ts index e1373fe4e3..dd0523d54d 100644 --- a/packages/react-router/lib/server-runtime/server.ts +++ b/packages/react-router/lib/server-runtime/server.ts @@ -593,10 +593,7 @@ async function handleDocumentRequest( error.statusText, data, ); - } catch ( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - e - ) { + } catch { // If we can't unwrap the response - just leave it as-is } } diff --git a/packages/react-router/lib/server-runtime/single-fetch.ts b/packages/react-router/lib/server-runtime/single-fetch.ts index 620ac0aa05..fd6d361fe7 100644 --- a/packages/react-router/lib/server-runtime/single-fetch.ts +++ b/packages/react-router/lib/server-runtime/single-fetch.ts @@ -49,10 +49,7 @@ export async function singleFetchAction( ? build.allowedActionOrigins : [], ); - } catch ( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - e - ) { + } catch { return handleQueryError(new Error("Bad Request"), 400); } diff --git a/packages/react-router/vendor/turbo-stream-v2/turbo-stream.ts b/packages/react-router/vendor/turbo-stream-v2/turbo-stream.ts index 791a75836d..db584e291d 100644 --- a/packages/react-router/vendor/turbo-stream-v2/turbo-stream.ts +++ b/packages/react-router/vendor/turbo-stream-v2/turbo-stream.ts @@ -70,10 +70,7 @@ async function decodeInitial( let line: unknown; try { line = JSON.parse(read.value); - } catch ( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - reason - ) { + } catch { throw new SyntaxError(); } @@ -103,10 +100,7 @@ async function decodeDeferred( let jsonLine: unknown; try { jsonLine = JSON.parse(lineData); - } catch ( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - reason - ) { + } catch { throw new SyntaxError(); } @@ -126,10 +120,7 @@ async function decodeDeferred( let jsonLine: unknown; try { jsonLine = JSON.parse(lineData); - } catch ( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - reason - ) { + } catch { throw new SyntaxError(); } const value = unflatten.call(this, jsonLine); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c8122d4263..2dd8471dcd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -766,12 +766,6 @@ importers: '@babel/parser': specifier: ^7.29.7 version: 7.29.7 - '@babel/plugin-syntax-jsx': - specifier: ^7.29.7 - version: 7.29.7(@babel/core@7.29.7) - '@babel/preset-typescript': - specifier: ^7.29.7 - version: 7.29.7(@babel/core@7.29.7) '@babel/traverse': specifier: ^7.29.7 version: 7.29.7 @@ -820,9 +814,6 @@ importers: pkg-types: specifier: ^2.3.1 version: 2.3.1 - prettier: - specifier: ^3.8.3 - version: 3.8.3 react-refresh: specifier: ^0.18.0 version: 0.18.0 @@ -839,6 +830,12 @@ importers: specifier: ^1.4.1 version: 1.4.1(typescript@6.0.3) devDependencies: + '@babel/plugin-syntax-jsx': + specifier: ^7.29.7 + version: 7.29.7(@babel/core@7.29.7) + '@babel/preset-typescript': + specifier: ^7.29.7 + version: 7.29.7(@babel/core@7.29.7) '@react-router/serve': specifier: workspace:* version: link:../react-router-serve @@ -884,6 +881,9 @@ importers: fast-glob: specifier: 3.3.3 version: 3.3.3 + prettier: + specifier: ^3.8.3 + version: 3.8.3 react-router: specifier: workspace:^ version: link:../react-router