Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
pcattori committed Jul 2, 2024
1 parent acc3b7f commit f3528ba
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 6 deletions.
1 change: 1 addition & 0 deletions packages/react-router-dev/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
"@npmcli/package-json": "^4.0.1",
"@react-router/node": "workspace:*",
"arg": "^5.0.1",
"babel-dead-code-elimination": "^1.0.6",
"chalk": "^4.1.2",
"es-module-lexer": "^1.3.1",
"exit-hook": "2.2.1",
Expand Down
30 changes: 26 additions & 4 deletions packages/react-router-dev/vite/define-route.ts
Original file line number Diff line number Diff line change
@@ -1,17 +1,39 @@
import * as babel from "@babel/core";
import type { Binding, NodePath } from "@babel/traverse";

import { parse as _parse, t, traverse } from "./babel";
import type { ParseResult } from "@babel/parser";
import {
deadCodeElimination,
findReferencedIdentifiers,
} from "babel-dead-code-elimination";

import { generate, parse as _parse, t, traverse } from "./babel";

export function transform(
code: string,
id: string,
options: { ssr?: boolean } = {}
) {
if (options?.ssr) return code;

export function transform(code: string) {
let ast = parse(code);
let refs = findReferencedIdentifiers(ast);

let markedForRemoval: NodePath<t.Node>[] = [];
assertDefineRouteOnlyAfterExportDefault(ast);
traverse(ast, {
ExportDefaultDeclaration(path) {
analyzeRouteExport(path);
let analysis = analyzeRouteExport(path);
for (let [key, fieldPath] of Object.entries(analysis)) {
if (["headers", "serverLoader", "serverAction"].includes(key)) {
if (!fieldPath) continue;
markedForRemoval.push(fieldPath);
}
}
},
});
markedForRemoval.forEach((path) => path.remove());
deadCodeElimination(ast, refs);
return generate(ast, { sourceMaps: true, sourceFileName: id }, code);
}

export function parseFields(code: string): string[] {
Expand Down
4 changes: 2 additions & 2 deletions packages/react-router-dev/vite/plugin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1326,6 +1326,7 @@ export const reactRouterVitePlugin: ReactRouterVitePlugin = (_config) => {
enforce: "pre",
async transform(code, id, options) {
if (options?.ssr) return;
if (!code.includes("defineRoute")) return; // temporary back compat, remove once old style routes are unsupported

if (id.endsWith(ROUTE_ENTRY_QUERY_STRING)) return;

Expand All @@ -1334,8 +1335,7 @@ export const reactRouterVitePlugin: ReactRouterVitePlugin = (_config) => {
return defineRoute.assertNotImported(code);
}

if (!code.includes("defineRoute")) return; // temporary back compat, remove once old style routes are unsupported
defineRoute.transform(code);
return defineRoute.transform(code, id, options);
},
},
{
Expand Down
14 changes: 14 additions & 0 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit f3528ba

Please sign in to comment.