Skip to content

Commit

Permalink
Clean redundant ?client-route=1 usage in dev (#9395)
Browse files Browse the repository at this point in the history
  • Loading branch information
markdalgleish committed May 9, 2024
1 parent c650ae2 commit 45c7552
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 27 deletions.
5 changes: 5 additions & 0 deletions .changeset/slimy-shrimps-roll.md
@@ -0,0 +1,5 @@
---
"@remix-run/dev": patch
---

Clean up redundant `?client-route=1` imports in development
47 changes: 20 additions & 27 deletions packages/remix-dev/vite/plugin.ts
Expand Up @@ -130,9 +130,11 @@ const CLIENT_ROUTE_EXPORTS = [
"shouldRevalidate",
];

// The "=1" suffix ensures client route requests can be processed before hitting
// the Vite plugin since "?client-route" can be serialized as "?client-route="
const CLIENT_ROUTE_QUERY_STRING = "?client-route=1";
/** This is used to manage a build optimization to remove unused route exports
from the client build output. This is important in cases where custom route
exports are only ever used on the server. Without this optimization we can't
tree-shake any unused custom exports because routes are entry points. */
const BUILD_CLIENT_ROUTE_QUERY_STRING = "?__remix-build-client-route";

// Only expose a subset of route properties to the "serverBundles" function
const branchRouteProperties = [
Expand Down Expand Up @@ -318,10 +320,6 @@ const getHash = (source: BinaryLike, maxLength?: number): string => {
return typeof maxLength === "number" ? hash.slice(0, maxLength) : hash;
};

const isClientRoute = (id: string): boolean => {
return id.endsWith(CLIENT_ROUTE_QUERY_STRING);
};

const resolveChunk = (
ctx: RemixPluginContext,
viteManifest: Vite.Manifest,
Expand All @@ -332,7 +330,7 @@ const resolveChunk = (
path.relative(ctx.rootDirectory, absoluteFilePath)
);
let entryChunk =
viteManifest[rootRelativeFilePath + CLIENT_ROUTE_QUERY_STRING] ??
viteManifest[rootRelativeFilePath + BUILD_CLIENT_ROUTE_QUERY_STRING] ??
viteManifest[rootRelativeFilePath];

if (!entryChunk) {
Expand Down Expand Up @@ -966,7 +964,7 @@ export const remixVitePlugin: RemixVitePlugin = (remixUserConfig = {}) => {
`${resolveFileUrl(
ctx,
resolveRelativeRouteFilePath(route, ctx.remixConfig)
)}${CLIENT_ROUTE_QUERY_STRING}`
)}`
),
hasAction: sourceExports.includes("action"),
hasLoader: sourceExports.includes("loader"),
Expand Down Expand Up @@ -1142,7 +1140,7 @@ export const remixVitePlugin: RemixVitePlugin = (remixUserConfig = {}) => {
`${path.resolve(
ctx.remixConfig.appDirectory,
route.file
)}${CLIENT_ROUTE_QUERY_STRING}`
)}${BUILD_CLIENT_ROUTE_QUERY_STRING}`
),
],
},
Expand Down Expand Up @@ -1271,8 +1269,8 @@ export const remixVitePlugin: RemixVitePlugin = (remixUserConfig = {}) => {
cssModulesManifest[id] = code;
}

if (isClientRoute(id)) {
let routeModuleId = id.replace(CLIENT_ROUTE_QUERY_STRING, "");
if (id.endsWith(BUILD_CLIENT_ROUTE_QUERY_STRING)) {
let routeModuleId = id.replace(BUILD_CLIENT_ROUTE_QUERY_STRING, "");
let sourceExports = await getRouteModuleExports(
viteChildCompiler,
ctx,
Expand Down Expand Up @@ -1695,10 +1693,6 @@ export const remixVitePlugin: RemixVitePlugin = (remixUserConfig = {}) => {
let useFastRefresh = !ssr && (isJSX || code.includes(devRuntime));
if (!useFastRefresh) return;

if (isClientRoute(id)) {
return { code: addRefreshWrapper(ctx.remixConfig, code, id) };
}

let result = await babel.transformAsync(code, {
configFile: false,
babelrc: false,
Expand Down Expand Up @@ -1789,17 +1783,16 @@ function addRefreshWrapper(
id: string
): string {
let route = getRoute(remixConfig, id);
let acceptExports =
route || isClientRoute(id)
? [
"clientAction",
"clientLoader",
"handle",
"meta",
"links",
"shouldRevalidate",
]
: [];
let acceptExports = route
? [
"clientAction",
"clientLoader",
"handle",
"meta",
"links",
"shouldRevalidate",
]
: [];
return (
REACT_REFRESH_HEADER.replaceAll("__SOURCE__", JSON.stringify(id)) +
code +
Expand Down

0 comments on commit 45c7552

Please sign in to comment.