From 38e091857dd264c9562e23bacdd1057ca1e48fc8 Mon Sep 17 00:00:00 2001 From: Logan McAnsh Date: Wed, 22 Mar 2023 12:06:32 -0400 Subject: [PATCH 1/4] fix: add NODE_ENV check to warnOnce Signed-off-by: Logan McAnsh --- packages/remix-react/warnings.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/remix-react/warnings.ts b/packages/remix-react/warnings.ts index 45acd960108..cdf914ac49f 100644 --- a/packages/remix-react/warnings.ts +++ b/packages/remix-react/warnings.ts @@ -1,7 +1,11 @@ const alreadyWarned: { [message: string]: boolean } = {}; export function warnOnce(condition: boolean, message: string): void { - if (!condition && !alreadyWarned[message]) { + if ( + !condition && + !alreadyWarned[message] && + process.env.NODE_ENV !== "production" + ) { alreadyWarned[message] = true; console.warn(message); } From cb55f2e4bb2b4e512263b8e8b510c4e6b4df4b4e Mon Sep 17 00:00:00 2001 From: Logan McAnsh Date: Wed, 22 Mar 2023 12:08:22 -0400 Subject: [PATCH 2/4] fix: update deprecated links warn check Signed-off-by: Logan McAnsh --- packages/remix-react/components.tsx | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/packages/remix-react/components.tsx b/packages/remix-react/components.tsx index 187c0752098..3990a18004d 100644 --- a/packages/remix-react/components.tsx +++ b/packages/remix-react/components.tsx @@ -368,13 +368,15 @@ export function Links() { ); React.useEffect(() => { - warnOnce( - links.some((link) => "imagesizes" in link || "imagesrcset" in link), - "⚠️ DEPRECATED: The `imagesizes` & `imagesrcset` properties in " + - "your links have been deprecated in favor of `imageSizes` & " + - "`imageSrcSet` and support will be removed in Remix v2. Please update " + - "your code to use the new property names instead." - ); + if (links.some((link) => "imagesizes" in link || "imagesrcset" in link)) { + warnOnce( + false, + "⚠️ DEPRECATED: The `imagesizes` & `imagesrcset` properties in " + + "your links have been deprecated in favor of `imageSizes` & " + + "`imageSrcSet` and support will be removed in Remix v2. Please update " + + "your code to use the new property names instead." + ); + } }, [links]); return ( From 49d940b221617a0fd0a9127548d693fd0972623d Mon Sep 17 00:00:00 2001 From: Logan McAnsh Date: Wed, 22 Mar 2023 12:15:40 -0400 Subject: [PATCH 3/4] chore: rename to logDeprecationOnce Signed-off-by: Logan McAnsh --- packages/remix-react/browser.tsx | 8 +++----- packages/remix-react/components.tsx | 14 +++++--------- packages/remix-react/warnings.ts | 16 +++++++++++----- 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/packages/remix-react/browser.tsx b/packages/remix-react/browser.tsx index 35993a5d4d2..3d212b1f312 100644 --- a/packages/remix-react/browser.tsx +++ b/packages/remix-react/browser.tsx @@ -14,7 +14,7 @@ import { import { deserializeErrors } from "./errors"; import type { RouteModules } from "./routeModules"; import { createClientRoutes } from "./routes"; -import { warnOnce } from "./warnings"; +import { logDeprecationOnce } from "./warnings"; /* eslint-disable prefer-let/prefer-let */ declare global { @@ -140,8 +140,7 @@ if (import.meta && import.meta.hot) { export function RemixBrowser(_props: RemixBrowserProps): ReactElement { if (!router) { if (!window.__remixContext.future.v2_errorBoundary) { - warnOnce( - false, + logDeprecationOnce( "⚠️ DEPRECATED: The separation of `CatchBoundary` and `ErrorBoundary` has " + "been deprecated and Remix v2 will use a singular `ErrorBoundary` for " + "all thrown values (`Response` and `Error`). Please migrate to the new " + @@ -152,8 +151,7 @@ export function RemixBrowser(_props: RemixBrowserProps): ReactElement { } if (!window.__remixContext.future.v2_normalizeFormMethod) { - warnOnce( - false, + logDeprecationOnce( "⚠️ DEPRECATED: Please enable the `future.v2_normalizeFormMethod` flag to " + "prepare for the Remix v2 release. Lowercase `useNavigation().formMethod`" + "values are being normalized to uppercase in v2 to align with the `fetch()` " + diff --git a/packages/remix-react/components.tsx b/packages/remix-react/components.tsx index 3990a18004d..a63ce84e4ff 100644 --- a/packages/remix-react/components.tsx +++ b/packages/remix-react/components.tsx @@ -75,7 +75,7 @@ import type { TransitionStates, } from "./transition"; import { IDLE_TRANSITION, IDLE_FETCHER } from "./transition"; -import { warnOnce } from "./warnings"; +import { logDeprecationOnce } from "./warnings"; function useDataRouterContext() { let context = React.useContext(DataRouterContext); @@ -369,8 +369,7 @@ export function Links() { React.useEffect(() => { if (links.some((link) => "imagesizes" in link || "imagesrcset" in link)) { - warnOnce( - false, + logDeprecationOnce( "⚠️ DEPRECATED: The `imagesizes` & `imagesrcset` properties in " + "your links have been deprecated in favor of `imageSizes` & " + "`imageSrcSet` and support will be removed in Remix v2. Please update " + @@ -1236,8 +1235,7 @@ export function useTransition(): Transition { let navigation = useNavigation(); React.useEffect(() => { - warnOnce( - false, + logDeprecationOnce( "⚠️ DEPRECATED: The `useTransition` hook has been deprecated in favor of " + "`useNavigation` and will be removed in Remix v2. Please update your " + "code to leverage `useNavigation`.\n\nSee https://remix.run/docs/hooks/use-transition " + @@ -1474,8 +1472,7 @@ function addFetcherDeprecationWarnings(fetcher: Fetcher) { let type: Fetcher["type"] = fetcher.type; Object.defineProperty(fetcher, "type", { get() { - warnOnce( - false, + logDeprecationOnce( "⚠️ DEPRECATED: The `useFetcher().type` field has been deprecated and " + "will be removed in Remix v2. Please update your code to rely on " + "`fetcher.state`.\n\nSee https://remix.run/docs/hooks/use-fetcher for " + @@ -1496,8 +1493,7 @@ function addFetcherDeprecationWarnings(fetcher: Fetcher) { let submission: Fetcher["submission"] = fetcher.submission; Object.defineProperty(fetcher, "submission", { get() { - warnOnce( - false, + logDeprecationOnce( "⚠️ DEPRECATED: The `useFetcher().submission` field has been deprecated and " + "will be removed in Remix v2. The submission fields now live directly " + "on the fetcher (`fetcher.formData`).\n\n" + diff --git a/packages/remix-react/warnings.ts b/packages/remix-react/warnings.ts index cdf914ac49f..0a1272d46ed 100644 --- a/packages/remix-react/warnings.ts +++ b/packages/remix-react/warnings.ts @@ -1,12 +1,18 @@ const alreadyWarned: { [message: string]: boolean } = {}; export function warnOnce(condition: boolean, message: string): void { - if ( - !condition && - !alreadyWarned[message] && - process.env.NODE_ENV !== "production" - ) { + if (!condition && !alreadyWarned[message]) { alreadyWarned[message] = true; console.warn(message); } } + +export function logDeprecationOnce( + message: string, + key: string = message +): void { + if (process.env.NODE_ENV !== "production" && !alreadyWarned[key]) { + alreadyWarned[key] = true; + console.warn(message); + } +} From d96310049ae5d98e1154c50891c19dc83263fed6 Mon Sep 17 00:00:00 2001 From: Logan McAnsh Date: Wed, 22 Mar 2023 12:20:04 -0400 Subject: [PATCH 4/4] Create .changeset/no-production-deprecation-warnings.md --- .changeset/mean-deers-wink.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .changeset/mean-deers-wink.md diff --git a/.changeset/mean-deers-wink.md b/.changeset/mean-deers-wink.md new file mode 100644 index 00000000000..4387970f1b3 --- /dev/null +++ b/.changeset/mean-deers-wink.md @@ -0,0 +1,6 @@ +--- +"remix": patch +"@remix-run/react": patch +--- + +don't warn about runtime deprecation warnings in production