diff --git a/.changeset/brown-seals-look.md b/.changeset/brown-seals-look.md new file mode 100644 index 00000000000..89ea98e61aa --- /dev/null +++ b/.changeset/brown-seals-look.md @@ -0,0 +1,5 @@ +--- +"@remix-run/dev": minor +--- + +Warn users about obsolete future flags in remix.config.js diff --git a/packages/remix-dev/config.ts b/packages/remix-dev/config.ts index 32c570f0408..e94bc6e3605 100644 --- a/packages/remix-dev/config.ts +++ b/packages/remix-dev/config.ts @@ -608,8 +608,39 @@ export async function readConfig( tsconfigPath = rootJsConfig; } + // Note: When a future flag is removed from here, it should be added to the + // list below so we can let folks know if they have obsolete flags in their + // config. If we ever convert remix.config.js to a TS file so we get proper + // typings this won't be necessary anymore. let future: FutureConfig = {}; + if (appConfig.future) { + let userFlags = appConfig.future; + let deprecatedFlags = [ + "unstable_cssModules", + "unstable_cssSideEffectImports", + "unstable_dev", + "unstable_postcss", + "unstable_tailwind", + "unstable_vanillaExtract", + "v2_dev", + "v2_errorBoundary", + "v2_headers", + "v2_meta", + "v2_normalizeFormMethod", + "v2_routeConvention", + ] as const; + + let obsoleteFlags = deprecatedFlags.filter((f) => f in userFlags); + if (obsoleteFlags.length > 0) { + logger.warn( + `⚠️ REMIX FUTURE CHANGE: the following Remix future flags are now obsolete ` + + `and can be removed from your remix.config.js file:\n` + + obsoleteFlags.map((f) => `- ${f}\n`).join("") + ); + } + } + return { appDirectory, cacheDirectory, diff --git a/packages/remix-dev/warnOnce.ts b/packages/remix-dev/warnOnce.ts deleted file mode 100644 index 1a1a057e4f0..00000000000 --- a/packages/remix-dev/warnOnce.ts +++ /dev/null @@ -1,8 +0,0 @@ -const alreadyWarned: { [message: string]: boolean } = {}; - -export function warnOnce(message: string, key = message): void { - if (!alreadyWarned[key]) { - alreadyWarned[key] = true; - console.warn(message); - } -}