From 6373919fc40f7e041e09d22a568de0501de644de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sat, 11 Jan 2025 16:36:06 +0100 Subject: [PATCH] Router setup --- bun.lockb | Bin 90696 -> 135736 bytes packages/example/package.json | 6 ++ packages/example/src/App.css | 42 ---------- packages/example/src/App.tsx | 40 --------- packages/example/src/Reffuse.ts | 5 -- packages/example/src/assets/react.svg | 1 - packages/example/src/index.css | 71 +--------------- packages/example/src/main.tsx | 16 ++-- packages/example/src/reffuse.ts | 5 ++ packages/example/src/routeTree.gen.ts | 111 +++++++++++++++++++++++++ packages/example/src/routes/__root.tsx | 22 +++++ packages/example/src/routes/count.tsx | 27 ++++++ packages/example/src/routes/index.tsx | 10 +++ packages/example/tailwind.config.js | 11 +++ packages/example/vite.config.ts | 18 +++- packages/reffuse/src/Reffuse.tsx | 2 +- 16 files changed, 222 insertions(+), 165 deletions(-) delete mode 100644 packages/example/src/App.css delete mode 100644 packages/example/src/App.tsx delete mode 100644 packages/example/src/Reffuse.ts delete mode 100644 packages/example/src/assets/react.svg create mode 100644 packages/example/src/reffuse.ts create mode 100644 packages/example/src/routeTree.gen.ts create mode 100644 packages/example/src/routes/__root.tsx create mode 100644 packages/example/src/routes/count.tsx create mode 100644 packages/example/src/routes/index.tsx create mode 100644 packages/example/tailwind.config.js diff --git a/bun.lockb b/bun.lockb index 3a7a538d3a29a24196e9f1365227be783685dda6..8da25e415c9c6f20f454a380650b7ada14e3c489 100755 GIT binary patch delta 41116 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 delta 14070 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 diff --git a/packages/example/package.json b/packages/example/package.json index 75b4953..eb4afd7 100644 --- a/packages/example/package.json +++ b/packages/example/package.json @@ -11,16 +11,22 @@ }, "devDependencies": { "@eslint/js": "^9.17.0", + "@tanstack/react-router": "^1.95.3", + "@tanstack/router-devtools": "^1.95.3", + "@tanstack/router-plugin": "^1.95.3", "@types/react": "^19.0.4", "@types/react-dom": "^19.0.2", "@vitejs/plugin-react": "^4.3.4", + "autoprefixer": "^10.4.20", "effect": "^3.12.1", "eslint": "^9.17.0", "eslint-plugin-react-hooks": "^5.0.0", "eslint-plugin-react-refresh": "^0.4.16", "globals": "^15.14.0", + "postcss": "^8.4.49", "react": "^19.0.0", "react-dom": "^19.0.0", + "tailwindcss": "^3.4.17", "typescript": "~5.6.2", "typescript-eslint": "^8.18.2", "vite": "^6.0.5" diff --git a/packages/example/src/App.css b/packages/example/src/App.css deleted file mode 100644 index b9d355d..0000000 --- a/packages/example/src/App.css +++ /dev/null @@ -1,42 +0,0 @@ -#root { - max-width: 1280px; - margin: 0 auto; - padding: 2rem; - text-align: center; -} - -.logo { - height: 6em; - padding: 1.5em; - will-change: filter; - transition: filter 300ms; -} -.logo:hover { - filter: drop-shadow(0 0 2em #646cffaa); -} -.logo.react:hover { - filter: drop-shadow(0 0 2em #61dafbaa); -} - -@keyframes logo-spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} - -@media (prefers-reduced-motion: no-preference) { - a:nth-of-type(2) .logo { - animation: logo-spin infinite 20s linear; - } -} - -.card { - padding: 2em; -} - -.read-the-docs { - color: #888; -} diff --git a/packages/example/src/App.tsx b/packages/example/src/App.tsx deleted file mode 100644 index f7ec0ee..0000000 --- a/packages/example/src/App.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import { Ref } from "effect" -import "./App.css" -import reactLogo from "./assets/react.svg" -import { Reffuse } from "./Reffuse" -import viteLogo from "/vite.svg" - - -export function App() { - - const runtime = Reffuse.useRuntime() - - const countRef = Reffuse.useRef(0) - const [count] = Reffuse.useRefState(countRef) - - - return <> - -

Vite + React

-
- {/* -

- Edit src/App.tsx and save to test HMR -

-
-

- Click on the Vite and React logos to learn more -

- - -} diff --git a/packages/example/src/Reffuse.ts b/packages/example/src/Reffuse.ts deleted file mode 100644 index 9037b3a..0000000 --- a/packages/example/src/Reffuse.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { Reffuse as TReffuse } from "@thilawyn/reffuse" -import { Layer } from "effect" - - -export const Reffuse = TReffuse.make(Layer.empty) diff --git a/packages/example/src/assets/react.svg b/packages/example/src/assets/react.svg deleted file mode 100644 index 6c87de9..0000000 --- a/packages/example/src/assets/react.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/example/src/index.css b/packages/example/src/index.css index 6119ad9..b5c61c9 100644 --- a/packages/example/src/index.css +++ b/packages/example/src/index.css @@ -1,68 +1,3 @@ -:root { - font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; - line-height: 1.5; - font-weight: 400; - - color-scheme: light dark; - color: rgba(255, 255, 255, 0.87); - background-color: #242424; - - font-synthesis: none; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -a { - font-weight: 500; - color: #646cff; - text-decoration: inherit; -} -a:hover { - color: #535bf2; -} - -body { - margin: 0; - display: flex; - place-items: center; - min-width: 320px; - min-height: 100vh; -} - -h1 { - font-size: 3.2em; - line-height: 1.1; -} - -button { - border-radius: 8px; - border: 1px solid transparent; - padding: 0.6em 1.2em; - font-size: 1em; - font-weight: 500; - font-family: inherit; - background-color: #1a1a1a; - cursor: pointer; - transition: border-color 0.25s; -} -button:hover { - border-color: #646cff; -} -button:focus, -button:focus-visible { - outline: 4px auto -webkit-focus-ring-color; -} - -@media (prefers-color-scheme: light) { - :root { - color: #213547; - background-color: #ffffff; - } - a:hover { - color: #747bff; - } - button { - background-color: #f9f9f9; - } -} +@tailwind base; +@tailwind components; +@tailwind utilities; diff --git a/packages/example/src/main.tsx b/packages/example/src/main.tsx index e263ba2..0f57e0d 100644 --- a/packages/example/src/main.tsx +++ b/packages/example/src/main.tsx @@ -1,14 +1,20 @@ +import { createRouter, RouterProvider } from "@tanstack/react-router" import { StrictMode } from "react" import { createRoot } from "react-dom/client" -import { App } from "./App.tsx" import "./index.css" -import { Reffuse } from "./Reffuse.ts" +import { routeTree } from './routeTree.gen' +const router = createRouter({ routeTree }) + +declare module "@tanstack/react-router" { + interface Register { + router: typeof router + } +} + createRoot(document.getElementById("root")!).render( - - - + ) diff --git a/packages/example/src/reffuse.ts b/packages/example/src/reffuse.ts new file mode 100644 index 0000000..1a73e66 --- /dev/null +++ b/packages/example/src/reffuse.ts @@ -0,0 +1,5 @@ +import { make } from "@thilawyn/reffuse/Reffuse" +import { Layer } from "effect" + + +export const Reffuse = make(Layer.empty) diff --git a/packages/example/src/routeTree.gen.ts b/packages/example/src/routeTree.gen.ts new file mode 100644 index 0000000..640dfa0 --- /dev/null +++ b/packages/example/src/routeTree.gen.ts @@ -0,0 +1,111 @@ +/* eslint-disable */ + +// @ts-nocheck + +// noinspection JSUnusedGlobalSymbols + +// This file was automatically generated by TanStack Router. +// You should NOT make any changes in this file as it will be overwritten. +// Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified. + +// Import Routes + +import { Route as rootRoute } from './routes/__root' +import { Route as CountImport } from './routes/count' +import { Route as IndexImport } from './routes/index' + +// Create/Update Routes + +const CountRoute = CountImport.update({ + id: '/count', + path: '/count', + getParentRoute: () => rootRoute, +} as any) + +const IndexRoute = IndexImport.update({ + id: '/', + path: '/', + getParentRoute: () => rootRoute, +} as any) + +// Populate the FileRoutesByPath interface + +declare module '@tanstack/react-router' { + interface FileRoutesByPath { + '/': { + id: '/' + path: '/' + fullPath: '/' + preLoaderRoute: typeof IndexImport + parentRoute: typeof rootRoute + } + '/count': { + id: '/count' + path: '/count' + fullPath: '/count' + preLoaderRoute: typeof CountImport + parentRoute: typeof rootRoute + } + } +} + +// Create and export the route tree + +export interface FileRoutesByFullPath { + '/': typeof IndexRoute + '/count': typeof CountRoute +} + +export interface FileRoutesByTo { + '/': typeof IndexRoute + '/count': typeof CountRoute +} + +export interface FileRoutesById { + __root__: typeof rootRoute + '/': typeof IndexRoute + '/count': typeof CountRoute +} + +export interface FileRouteTypes { + fileRoutesByFullPath: FileRoutesByFullPath + fullPaths: '/' | '/count' + fileRoutesByTo: FileRoutesByTo + to: '/' | '/count' + id: '__root__' | '/' | '/count' + fileRoutesById: FileRoutesById +} + +export interface RootRouteChildren { + IndexRoute: typeof IndexRoute + CountRoute: typeof CountRoute +} + +const rootRouteChildren: RootRouteChildren = { + IndexRoute: IndexRoute, + CountRoute: CountRoute, +} + +export const routeTree = rootRoute + ._addFileChildren(rootRouteChildren) + ._addFileTypes() + +/* ROUTE_MANIFEST_START +{ + "routes": { + "__root__": { + "filePath": "__root.tsx", + "children": [ + "/", + "/count" + ] + }, + "/": { + "filePath": "index.tsx" + }, + "/count": { + "filePath": "count.tsx" + } + } +} +ROUTE_MANIFEST_END */ diff --git a/packages/example/src/routes/__root.tsx b/packages/example/src/routes/__root.tsx new file mode 100644 index 0000000..7749f30 --- /dev/null +++ b/packages/example/src/routes/__root.tsx @@ -0,0 +1,22 @@ +import { Reffuse } from "@/reffuse" +import { createRootRoute, Link, Outlet } from "@tanstack/react-router" +import { TanStackRouterDevtools } from "@tanstack/router-devtools" + + +export const Route = createRootRoute({ + component: Root +}) + +function Root() { + return ( + +
+ Index + Count +
+ + + +
+ ) +} diff --git a/packages/example/src/routes/count.tsx b/packages/example/src/routes/count.tsx new file mode 100644 index 0000000..f36f36a --- /dev/null +++ b/packages/example/src/routes/count.tsx @@ -0,0 +1,27 @@ +import { Reffuse } from "@/reffuse" +import { createFileRoute } from "@tanstack/react-router" +import { Ref } from "effect" + + +export const Route = createFileRoute("/count")({ + component: Count +}) + +function Count() { + + const runtime = Reffuse.useRuntime() + + const countRef = Reffuse.useRef(0) + const [count] = Reffuse.useRefState(countRef) + + + return ( +
+ {/* +
+ ) + +} diff --git a/packages/example/src/routes/index.tsx b/packages/example/src/routes/index.tsx new file mode 100644 index 0000000..25b530d --- /dev/null +++ b/packages/example/src/routes/index.tsx @@ -0,0 +1,10 @@ +import { createFileRoute } from "@tanstack/react-router" + + +export const Route = createFileRoute("/")({ + component: Index +}) + +function Index() { + return <> +} diff --git a/packages/example/tailwind.config.js b/packages/example/tailwind.config.js new file mode 100644 index 0000000..f802d2c --- /dev/null +++ b/packages/example/tailwind.config.js @@ -0,0 +1,11 @@ +/** @type {import("tailwindcss").Config} */ +export default { + content: [ + "./index.html", + "./src/**/*.{js,ts,jsx,tsx}", + ], + theme: { + extend: {}, + }, + plugins: [], +} diff --git a/packages/example/vite.config.ts b/packages/example/vite.config.ts index 8b0f57b..6b20c32 100644 --- a/packages/example/vite.config.ts +++ b/packages/example/vite.config.ts @@ -1,7 +1,19 @@ -import { defineConfig } from 'vite' -import react from '@vitejs/plugin-react' +import { TanStackRouterVite } from "@tanstack/router-plugin/vite" +import react from "@vitejs/plugin-react" +import path from "node:path" +import { defineConfig } from "vite" + // https://vite.dev/config/ export default defineConfig({ - plugins: [react()], + plugins: [ + TanStackRouterVite(), + react(), + ], + + resolve: { + alias: { + "@": path.resolve(__dirname, "./src"), + }, + }, }) diff --git a/packages/reffuse/src/Reffuse.tsx b/packages/reffuse/src/Reffuse.tsx index 7038090..c1bdf2a 100644 --- a/packages/reffuse/src/Reffuse.tsx +++ b/packages/reffuse/src/Reffuse.tsx @@ -64,7 +64,7 @@ export class Reffuse { const runtime = this.useRuntime() return React.useEffect(() => { - const fiber = runtime.runFork(self.pipe(Effect.scoped), options) + const fiber = runtime.runFork(Effect.scoped(self), options) return () => { runtime.runFork(Fiber.interrupt(fiber)) } }, [runtime, ...deps ?? []]) }