Skip to content

Commit c364bd4

Browse files
Fix reveal and routes CLI commands (#12745)
1 parent c5b2641 commit c364bd4

File tree

16 files changed

+142
-200
lines changed

16 files changed

+142
-200
lines changed

.changeset/popular-lobsters-agree.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@react-router/dev": patch
3+
---
4+
5+
Fix `reveal` and `routes` CLI commands
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
import path from "node:path";
2+
import fse from "fs-extra";
3+
import execa from "execa";
4+
5+
function getProjectDir() {
6+
let projectDir = path.join(
7+
__dirname,
8+
".tmp",
9+
`reveal-test-${Math.random().toString(32).slice(2)}`
10+
);
11+
fse.copySync(path.join(__dirname, "fixtures", "basic"), projectDir);
12+
return projectDir;
13+
}
14+
15+
async function runCli(cwd: string, args: string[]) {
16+
return await execa(
17+
"node",
18+
[
19+
"--require",
20+
require.resolve("esbuild-register"),
21+
path.resolve(__dirname, "../cli/index.ts"),
22+
...args,
23+
],
24+
{ cwd }
25+
);
26+
}
27+
28+
describe("the reveal command", () => {
29+
it("generates an entry.server.tsx file in the app directory", async () => {
30+
let projectDir = getProjectDir();
31+
32+
let entryClientFile = path.join(projectDir, "app", "entry.client.tsx");
33+
let entryServerFile = path.join(projectDir, "app", "entry.server.tsx");
34+
35+
expect(fse.existsSync(entryServerFile)).toBeFalsy();
36+
expect(fse.existsSync(entryClientFile)).toBeFalsy();
37+
38+
await runCli(projectDir, ["reveal"]);
39+
40+
expect(fse.existsSync(entryServerFile)).toBeTruthy();
41+
expect(fse.existsSync(entryClientFile)).toBeTruthy();
42+
});
43+
44+
it("generates an entry.server.tsx file in the app directory when specific entries are provided", async () => {
45+
let projectDir = getProjectDir();
46+
47+
let entryClientFile = path.join(projectDir, "app", "entry.client.tsx");
48+
let entryServerFile = path.join(projectDir, "app", "entry.server.tsx");
49+
50+
expect(fse.existsSync(entryServerFile)).toBeFalsy();
51+
expect(fse.existsSync(entryClientFile)).toBeFalsy();
52+
53+
await runCli(projectDir, ["reveal", "entry.server"]);
54+
expect(fse.existsSync(entryServerFile)).toBeTruthy();
55+
expect(fse.existsSync(entryClientFile)).toBeFalsy();
56+
fse.removeSync(entryServerFile);
57+
58+
await runCli(projectDir, ["reveal", "entry.client"]);
59+
expect(fse.existsSync(entryClientFile)).toBeTruthy();
60+
expect(fse.existsSync(entryServerFile)).toBeFalsy();
61+
});
62+
63+
it("generates an entry.server.jsx file in the app directory", async () => {
64+
let projectDir = getProjectDir();
65+
66+
let entryClientFile = path.join(projectDir, "app", "entry.client.jsx");
67+
let entryServerFile = path.join(projectDir, "app", "entry.server.jsx");
68+
69+
expect(fse.existsSync(entryServerFile)).toBeFalsy();
70+
expect(fse.existsSync(entryClientFile)).toBeFalsy();
71+
72+
await runCli(projectDir, ["reveal", "--no-typescript"]);
73+
74+
expect(fse.existsSync(entryServerFile)).toBeTruthy();
75+
expect(fse.existsSync(entryClientFile)).toBeTruthy();
76+
});
77+
});
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import path from "node:path";
2+
import execa from "execa";
3+
4+
async function runCli(cwd: string, args: string[]) {
5+
return await execa(
6+
"node",
7+
[
8+
"--require",
9+
require.resolve("esbuild-register"),
10+
path.resolve(__dirname, "../cli/index.ts"),
11+
...args,
12+
],
13+
{ cwd }
14+
);
15+
}
16+
17+
describe("the routes command", () => {
18+
it("displays routes", async () => {
19+
let projectDir = path.join(__dirname, "fixtures", "basic");
20+
21+
let result = await runCli(projectDir, ["routes"]);
22+
23+
expect(result.stdout).toMatchInlineSnapshot(`
24+
"<Routes>
25+
<Route file="root.tsx">
26+
<Route index file="routes/_index.tsx" />
27+
</Route>
28+
</Routes>"
29+
`);
30+
});
31+
});
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
node_modules
22

3-
/.cache
43
/build
5-
/public/build
64
.env
5+
6+
.react-router/
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
// Note that since this is used in a unit test context, we don't have access to
2+
// the `dev` build yet, so we can't import from `@react-router/dev/routes`.
3+
const routes = [{ file: "routes/_index.tsx", index: true }];
4+
5+
export default routes;
Binary file not shown.

packages/react-router-dev/__tests__/fixtures/node/tsconfig.json renamed to packages/react-router-dev/__tests__/fixtures/basic/tsconfig.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
{
2-
"include": ["remix.env.d.ts", "**/*.ts", "**/*.tsx"],
2+
"include": ["**/*.ts", "**/*.tsx"],
33
"compilerOptions": {
44
"lib": ["DOM", "DOM.Iterable", "ES2022"],
5+
"types": ["@react-router/node", "vite/client"],
56
"verbatimModuleSyntax": true,
67
"esModuleInterop": true,
78
"jsx": "react-jsx",

0 commit comments

Comments
 (0)