Guest User

Untitled

a guest
May 16th, 2026
22
0
261 days
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.01 KB | None | 0 0
  1. Source Tree:
  2.  
  3. ```
  4. frontend
  5. ├── dev.ts
  6. ├── bunfig.toml
  7. ├── package.json
  8. ├── router-plugin.ts
  9. ├── tsconfig.json
  10. ├── tmp
  11. ├── build.ts
  12. └── src
  13. ├── index.html
  14. ├── script.tsx
  15. └── routes
  16. ├── index.tsx
  17. ├── __root.tsx
  18. ├── posts
  19. │ ├── index.tsx
  20. │ └── $postId.tsx
  21. ├── contact.tsx
  22. ├── _dashboard.tsx
  23. ├── _dashboard
  24. │ ├── settings.tsx
  25. │ └── dashboard.tsx
  26. ├── $.tsx
  27. ├── posts.tsx
  28. └── about.tsx
  29.  
  30. ```
  31.  
  32. `/Users/praybh/Desktop/bun.monorepo/packages/frontend/dev.ts`:
  33.  
  34. ```````ts
  35. import { BunRuntime } from "@effect/platform-bun";
  36. import { Config, Effect } from "effect";
  37. import index from "./src/index.html";
  38.  
  39. const program = Effect.gen(function* () {
  40. const port = yield* Config.port("FRONTEND_PORT").pipe(
  41. Config.withDefault(3000),
  42. );
  43. const backendPort = yield* Config.port("BACKEND_PORT").pipe(
  44. Config.withDefault(4000),
  45. );
  46.  
  47. const proxyToBackend = (req: Bun.BunRequest) => {
  48. const url = new URL(req.url);
  49. const target = new URL(
  50. url.pathname + url.search,
  51. `http://localhost:${backendPort}`,
  52. );
  53. return fetch(target, req);
  54. };
  55.  
  56. const server = Bun.serve({
  57. port,
  58. routes: {
  59. "/rpc/*": proxyToBackend,
  60. "/api/*": proxyToBackend,
  61. "/*": index,
  62. },
  63. development: { hmr: true, console: true },
  64. });
  65.  
  66. yield* Effect.logInfo(`@app/frontend dev: ${server.url}`);
  67. return yield* Effect.never;
  68. });
  69.  
  70. BunRuntime.runMain(program);
  71.  
  72. ```````
  73.  
  74. `/Users/praybh/Desktop/bun.monorepo/packages/frontend/bunfig.toml`:
  75.  
  76. ```````toml
  77. [serve.static]
  78. plugins = ["./router-plugin.ts"]
  79.  
  80. ```````
  81.  
  82. `/Users/praybh/Desktop/bun.monorepo/packages/frontend/package.json`:
  83.  
  84. ```````json
  85. {
  86. "name": "@app/frontend",
  87. "type": "module",
  88. "private": true,
  89. "exports": {
  90. "./*": "./src/*.ts"
  91. },
  92. "scripts": {
  93. "lint": "bunx @biomejs/biome check --write && tsc -b",
  94. "dev": "bun --hot dev.ts",
  95. "build": "bun build.ts"
  96. },
  97. "dependencies": {
  98. "@effect/platform-bun": "catalog:effect:backend",
  99. "@pkg/shared": "workspace:*",
  100. "@tanstack/react-router": "^1.170.0",
  101. "@tanstack/react-router-devtools": "^1.167.0",
  102. "@tanstack/router-plugin": "file:./tmp/tanstack-router-plugin-1.168.1-1778914603.tgz",
  103. "react": "^19.0.0",
  104. "react-dom": "^19.0.0"
  105. },
  106. "devDependencies": {
  107. "@types/react": "^19.0.0",
  108. "@types/react-dom": "^19.0.0"
  109. }
  110. }
  111.  
  112. ```````
  113.  
  114. `/Users/praybh/Desktop/bun.monorepo/packages/frontend/router-plugin.ts`:
  115.  
  116. ```````ts
  117. import { tanstackRouter } from "@tanstack/router-plugin/bun";
  118.  
  119. // autoCodeSplitting is disabled under Bun for now: the code-splitter rewrites
  120. // route imports with a `?tsr-split=...` query that unplugin's Bun adapter has
  121. // no resolveId path for. File-based route generation works fine without it.
  122. export default tanstackRouter({
  123. target: "react",
  124. autoCodeSplitting: false,
  125. });
  126.  
  127. ```````
  128.  
  129. `/Users/praybh/Desktop/bun.monorepo/packages/frontend/tsconfig.json`:
  130.  
  131. ```````json
  132. {
  133. "extends": "../../tsconfig.base.json",
  134. "include": ["src/**/*", "dev.ts"],
  135. "compilerOptions": {
  136. "outDir": "dist",
  137. "lib": ["ESNext", "DOM", "DOM.Iterable"],
  138. "paths": {
  139. "@/*": ["./src/*"]
  140. }
  141. }
  142. }
  143.  
  144. ```````
  145.  
  146. `/Users/praybh/Desktop/bun.monorepo/packages/frontend/build.ts`:
  147.  
  148. ```````ts
  149. import {
  150. tanstackRouter,
  151. tanstackRouterBunDefaultDefines,
  152. } from "@tanstack/router-plugin/bun";
  153.  
  154. const result = await Bun.build({
  155. entrypoints: ["./src/index.html"],
  156. outdir: "./dist",
  157. plugins: [
  158. tanstackRouter({
  159. target: "react",
  160. autoCodeSplitting: false,
  161. }),
  162. ],
  163. define: {
  164. ...tanstackRouterBunDefaultDefines,
  165. },
  166. });
  167.  
  168. if (!result.success) {
  169. for (const log of result.logs) console.error(log);
  170. process.exit(1);
  171. }
  172.  
  173. ```````
  174.  
  175. `/Users/praybh/Desktop/bun.monorepo/packages/frontend/src/index.html`:
  176.  
  177. ```````html
  178. <!doctype html>
  179. <html lang="en">
  180. <head>
  181. <meta charset="utf-8" />
  182. <meta name="viewport" content="width=device-width, initial-scale=1" />
  183. <title>app</title>
  184. </head>
  185. <body>
  186. <div id="root"></div>
  187. <script type="module" src="./script.tsx"></script>
  188. </body>
  189. </html>
  190.  
  191. ```````
  192.  
  193. `/Users/praybh/Desktop/bun.monorepo/packages/frontend/src/script.tsx`:
  194.  
  195. ```````tsx
  196. import { createRouter, RouterProvider } from "@tanstack/react-router";
  197. import { createRoot } from "react-dom/client";
  198. import { routeTree } from "./routeTree.gen";
  199.  
  200. declare module "@tanstack/react-router" {
  201. interface Register {
  202. router: typeof router;
  203. }
  204. }
  205.  
  206. const router = createRouter({ routeTree });
  207.  
  208. const container = document.getElementById("root");
  209. if (container) createRoot(container).render(<RouterProvider router={router} />);
  210.  
  211. ```````
  212.  
  213. `/Users/praybh/Desktop/bun.monorepo/packages/frontend/src/routes/index.tsx`:
  214.  
  215. ```````tsx
  216. import { createFileRoute } from "@tanstack/react-router";
  217.  
  218. export const Route = createFileRoute("/")({
  219. component: () => <h1>Index</h1>,
  220. });
  221.  
  222. ```````
  223.  
  224. `/Users/praybh/Desktop/bun.monorepo/packages/frontend/src/routes/__root.tsx`:
  225.  
  226. ```````tsx
  227. import { createRootRoute, Link, Outlet } from "@tanstack/react-router";
  228. import { TanStackRouterDevtools } from "@tanstack/react-router-devtools";
  229.  
  230. export const Route = createRootRoute({
  231. component: RootLayout,
  232. });
  233.  
  234. function RootLayout() {
  235. return (
  236. <>
  237. <header>
  238. <nav>
  239. <Link to="/">Home</Link>
  240. {" · "}
  241. <Link to="/about">About</Link>
  242. {" · "}
  243. <Link to="/posts">Posts</Link>
  244. {" · "}
  245. <Link to="/dashboard">Dashboard</Link>
  246. {" · "}
  247. <Link to="/does-not-exist">404 demo</Link>
  248. </nav>
  249. </header>
  250. <main>
  251. <Outlet />
  252. </main>
  253. <TanStackRouterDevtools />
  254. </>
  255. );
  256. }
  257.  
  258. ```````
  259.  
  260. `/Users/praybh/Desktop/bun.monorepo/packages/frontend/src/routes/posts/index.tsx`:
  261.  
  262. ```````tsx
  263. import { createFileRoute } from "@tanstack/react-router";
  264.  
  265. export const Route = createFileRoute("/posts/")({
  266. component: () => <p>Pick a post above.</p>,
  267. });
  268.  
  269. ```````
  270.  
  271. `/Users/praybh/Desktop/bun.monorepo/packages/frontend/src/routes/posts/$postId.tsx`:
  272.  
  273. ```````tsx
  274. import { createFileRoute } from "@tanstack/react-router";
  275.  
  276. export const Route = createFileRoute("/posts/$postId")({
  277. component: PostDetail,
  278. });
  279.  
  280. function PostDetail() {
  281. const { postId } = Route.useParams();
  282. return <article>Post: {postId}</article>;
  283. }
  284.  
  285. ```````
  286.  
  287. `/Users/praybh/Desktop/bun.monorepo/packages/frontend/src/routes/contact.tsx`:
  288.  
  289. ```````tsx
  290. import { createFileRoute } from "@tanstack/react-router";
  291.  
  292. export const Route = createFileRoute("/contact")({
  293. component: () => <h1>Contact (added live)</h1>,
  294. });
  295.  
  296. ```````
  297.  
  298. `/Users/praybh/Desktop/bun.monorepo/packages/frontend/src/routes/_dashboard.tsx`:
  299.  
  300. ```````tsx
  301. import { createFileRoute, Link, Outlet } from "@tanstack/react-router";
  302.  
  303. export const Route = createFileRoute("/_dashboard")({
  304. component: DashboardShell,
  305. });
  306.  
  307. function DashboardShell() {
  308. return (
  309. <section>
  310. <aside>
  311. <strong>Dashboard</strong>
  312. <nav>
  313. <Link to="/dashboard">Home</Link>
  314. {" · "}
  315. <Link to="/settings">Settings</Link>
  316. </nav>
  317. </aside>
  318. <Outlet />
  319. </section>
  320. );
  321. }
  322.  
  323. ```````
  324.  
  325. `/Users/praybh/Desktop/bun.monorepo/packages/frontend/src/routes/_dashboard/settings.tsx`:
  326.  
  327. ```````tsx
  328. import { createFileRoute } from "@tanstack/react-router";
  329.  
  330. export const Route = createFileRoute("/_dashboard/settings")({
  331. component: () => <h2>Settings</h2>,
  332. });
  333.  
  334. ```````
  335.  
  336. `/Users/praybh/Desktop/bun.monorepo/packages/frontend/src/routes/_dashboard/dashboard.tsx`:
  337.  
  338. ```````tsx
  339. import { createFileRoute } from "@tanstack/react-router";
  340.  
  341. export const Route = createFileRoute("/_dashboard/dashboard")({
  342. component: () => <h2>Dashboard home</h2>,
  343. });
  344.  
  345. ```````
  346.  
  347. `/Users/praybh/Desktop/bun.monorepo/packages/frontend/src/routes/$.tsx`:
  348.  
  349. ```````tsx
  350. import { createFileRoute } from "@tanstack/react-router";
  351.  
  352. export const Route = createFileRoute("/$")({
  353. component: NotFound,
  354. });
  355.  
  356. function NotFound() {
  357. const { _splat } = Route.useParams();
  358. return <h2>Not found: /{_splat}</h2>;
  359. }
  360.  
  361. ```````
  362.  
  363. `/Users/praybh/Desktop/bun.monorepo/packages/frontend/src/routes/posts.tsx`:
  364.  
  365. ```````tsx
  366. import { createFileRoute, Link, Outlet } from "@tanstack/react-router";
  367.  
  368. export const Route = createFileRoute("/posts")({
  369. component: PostsLayout,
  370. });
  371.  
  372. function PostsLayout() {
  373. return (
  374. <section>
  375. <header>
  376. <nav>
  377. <Link to="/posts">All posts</Link>
  378. {" · "}
  379. <Link to="/posts/$postId" params={{ postId: "hello-world" }}>
  380. hello-world
  381. </Link>
  382. {" · "}
  383. <Link to="/posts/$postId" params={{ postId: "second" }}>
  384. second
  385. </Link>
  386. </nav>
  387. </header>
  388. <Outlet />
  389. </section>
  390. );
  391. }
  392.  
  393. ```````
  394.  
  395. `/Users/praybh/Desktop/bun.monorepo/packages/frontend/src/routes/about.tsx`:
  396.  
  397. ```````tsx
  398. import { createFileRoute } from "@tanstack/react-router";
  399.  
  400. export const Route = createFileRoute("/about")({
  401. component: () => <h1>About</h1>,
  402. });
  403.  
  404. ```````
Advertisement
Add Comment
Please, Sign In to add comment