From 223a594479eb5bda21ddae197d682856609739c2 Mon Sep 17 00:00:00 2001 From: kenneth Date: Tue, 16 Sep 2025 23:01:40 +0000 Subject: [PATCH] refactor: convert to monorepo Co-authored-by: Ona --- bun.lock | 12 ++++- package.json | 47 ++++--------------- bun-env.d.ts => packages/web/bun-env.d.ts | 0 bunfig.toml => packages/web/bunfig.toml | 0 .../web/components.json | 0 packages/web/package.json | 45 ++++++++++++++++++ {src => packages/web/src}/APITester.tsx | 0 .../src}/components/icons/directory-icon.tsx | 0 .../src}/components/icons/text-file-icon.tsx | 0 .../web/src}/components/theme-provider.tsx | 0 .../web/src}/components/ui/breadcrumb.tsx | 0 .../web/src}/components/ui/button.tsx | 0 .../web/src}/components/ui/checkbox.tsx | 0 .../web/src}/components/ui/context-menu.tsx | 0 .../web/src}/components/ui/data-table.tsx | 0 .../web/src}/components/ui/dropdown-menu.tsx | 0 .../web/src}/components/ui/input.tsx | 0 .../src}/components/ui/loading-spinner.tsx | 0 .../web/src}/components/ui/separator.tsx | 0 .../web/src}/components/ui/sheet.tsx | 0 .../web/src}/components/ui/sidebar.tsx | 0 .../web/src}/components/ui/skeleton.tsx | 0 .../web/src}/components/ui/sonner.tsx | 0 .../web/src}/components/ui/table.tsx | 0 .../web/src}/components/ui/tooltip.tsx | 0 .../web/src}/dashboard/dashboard-sidebar.tsx | 0 {src => packages/web/src}/dashboard/index.css | 0 {src => packages/web/src}/entry.tsx | 0 .../web/src}/files/file-table.tsx | 0 .../web/src}/files/files-page.tsx | 0 {src => packages/web/src}/files/state.ts | 4 +- {src => packages/web/src}/hooks/use-mobile.ts | 0 {src => packages/web/src}/index.html | 0 {src => packages/web/src}/lib/error.ts | 2 +- {src => packages/web/src}/lib/utils.ts | 0 {src => packages/web/src}/routeTree.gen.ts | 0 {src => packages/web/src}/routes/__root.tsx | 0 .../web/src}/routes/_authenticated.tsx | 0 .../routes/_authenticated/_sidebar-layout.tsx | 0 .../_authenticated/_sidebar-layout/files.tsx | 0 .../web/src}/routes/_authenticated/index.tsx | 0 {src => packages/web/src}/routes/login.tsx | 0 .../web/src}/routes/login_.callback.tsx | 0 src/index.tsx => packages/web/src/server.tsx | 22 --------- {src => packages/web/src}/styles/globals.css | 0 tsconfig.json => packages/web/tsconfig.json | 2 +- 46 files changed, 68 insertions(+), 66 deletions(-) rename bun-env.d.ts => packages/web/bun-env.d.ts (100%) rename bunfig.toml => packages/web/bunfig.toml (100%) rename components.json => packages/web/components.json (100%) create mode 100644 packages/web/package.json rename {src => packages/web/src}/APITester.tsx (100%) rename {src => packages/web/src}/components/icons/directory-icon.tsx (100%) rename {src => packages/web/src}/components/icons/text-file-icon.tsx (100%) rename {src => packages/web/src}/components/theme-provider.tsx (100%) rename {src => packages/web/src}/components/ui/breadcrumb.tsx (100%) rename {src => packages/web/src}/components/ui/button.tsx (100%) rename {src => packages/web/src}/components/ui/checkbox.tsx (100%) rename {src => packages/web/src}/components/ui/context-menu.tsx (100%) rename {src => packages/web/src}/components/ui/data-table.tsx (100%) rename {src => packages/web/src}/components/ui/dropdown-menu.tsx (100%) rename {src => packages/web/src}/components/ui/input.tsx (100%) rename {src => packages/web/src}/components/ui/loading-spinner.tsx (100%) rename {src => packages/web/src}/components/ui/separator.tsx (100%) rename {src => packages/web/src}/components/ui/sheet.tsx (100%) rename {src => packages/web/src}/components/ui/sidebar.tsx (100%) rename {src => packages/web/src}/components/ui/skeleton.tsx (100%) rename {src => packages/web/src}/components/ui/sonner.tsx (100%) rename {src => packages/web/src}/components/ui/table.tsx (100%) rename {src => packages/web/src}/components/ui/tooltip.tsx (100%) rename {src => packages/web/src}/dashboard/dashboard-sidebar.tsx (100%) rename {src => packages/web/src}/dashboard/index.css (100%) rename {src => packages/web/src}/entry.tsx (100%) rename {src => packages/web/src}/files/file-table.tsx (100%) rename {src => packages/web/src}/files/files-page.tsx (100%) rename {src => packages/web/src}/files/state.ts (76%) rename {src => packages/web/src}/hooks/use-mobile.ts (100%) rename {src => packages/web/src}/index.html (100%) rename {src => packages/web/src}/lib/error.ts (89%) rename {src => packages/web/src}/lib/utils.ts (100%) rename {src => packages/web/src}/routeTree.gen.ts (100%) rename {src => packages/web/src}/routes/__root.tsx (100%) rename {src => packages/web/src}/routes/_authenticated.tsx (100%) rename {src => packages/web/src}/routes/_authenticated/_sidebar-layout.tsx (100%) rename {src => packages/web/src}/routes/_authenticated/_sidebar-layout/files.tsx (100%) rename {src => packages/web/src}/routes/_authenticated/index.tsx (100%) rename {src => packages/web/src}/routes/login.tsx (100%) rename {src => packages/web/src}/routes/login_.callback.tsx (100%) rename src/index.tsx => packages/web/src/server.tsx (53%) rename {src => packages/web/src}/styles/globals.css (100%) rename tsconfig.json => packages/web/tsconfig.json (95%) diff --git a/bun.lock b/bun.lock index c85967f..155809f 100644 --- a/bun.lock +++ b/bun.lock @@ -3,6 +3,14 @@ "workspaces": { "": { "name": "bun-react-template", + "devDependencies": { + "@biomejs/biome": "2.2.4", + "@types/bun": "latest", + }, + }, + "packages/web": { + "name": "@fileone/web", + "version": "0.1.0", "dependencies": { "@convex-dev/workos": "^0.0.1", "@radix-ui/react-checkbox": "^1.3.3", @@ -33,9 +41,7 @@ "tw-animate-css": "^1.3.8", }, "devDependencies": { - "@biomejs/biome": "2.2.4", "@tanstack/router-cli": "^1.131.41", - "@types/bun": "latest", "@types/react": "^19", "@types/react-dom": "^19", }, @@ -174,6 +180,8 @@ "@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.4", "", { "os": "win32", "cpu": "x64" }, "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ=="], + "@fileone/web": ["@fileone/web@workspace:packages/web"], + "@floating-ui/core": ["@floating-ui/core@1.7.3", "", { "dependencies": { "@floating-ui/utils": "^0.2.10" } }, "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w=="], "@floating-ui/dom": ["@floating-ui/dom@1.7.4", "", { "dependencies": { "@floating-ui/core": "^1.7.3", "@floating-ui/utils": "^0.2.10" } }, "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA=="], diff --git a/package.json b/package.json index a466d51..6ff7eb6 100644 --- a/package.json +++ b/package.json @@ -1,47 +1,18 @@ { - "name": "bun-react-template", + "name": "fileone", "version": "0.1.0", "private": true, "type": "module", + "workspaces": [ + "packages/*" + ], "scripts": { - "dev": "bun --hot src/index.tsx", - "build": "bun build ./src/index.html --outdir=dist --sourcemap --target=browser --minify --define:process.env.NODE_ENV='\"production\"' --env='BUN_PUBLIC_*'", - "start": "NODE_ENV=production bun src/index.tsx" - }, - "dependencies": { - "@convex-dev/workos": "^0.0.1", - "@radix-ui/react-checkbox": "^1.3.3", - "@radix-ui/react-context-menu": "^2.2.16", - "@radix-ui/react-dialog": "^1.1.15", - "@radix-ui/react-dropdown-menu": "^2.1.16", - "@radix-ui/react-separator": "^1.1.7", - "@radix-ui/react-slot": "^1.2.3", - "@radix-ui/react-tooltip": "^1.2.8", - "@tanstack/react-query": "^5.87.4", - "@tanstack/react-router": "^1.131.41", - "@tanstack/react-table": "^8.21.3", - "@tanstack/router-devtools": "^1.131.42", - "@workos-inc/authkit-react": "^0.12.0", - "bun-plugin-tailwind": "latest", - "class-variance-authority": "^0.7.1", - "clsx": "^2.1.1", - "convex": "^1.27.0", - "convex-helpers": "^0.1.104", - "jotai": "^2.14.0", - "lucide-react": "^0.544.0", - "next-themes": "^0.4.6", - "react": "^19", - "react-dom": "^19", - "sonner": "^2.0.7", - "tailwind-merge": "^3.3.1", - "tailwindcss": "^4", - "tw-animate-css": "^1.3.8" + "dev": "bun run --filter=@fileone/web dev", + "build": "bun run --filter=@fileone/web build", + "start": "bun run --filter=@fileone/web start" }, "devDependencies": { "@biomejs/biome": "2.2.4", - "@tanstack/router-cli": "^1.131.41", - "@types/bun": "latest", - "@types/react": "^19", - "@types/react-dom": "^19" + "@types/bun": "latest" } -} +} \ No newline at end of file diff --git a/bun-env.d.ts b/packages/web/bun-env.d.ts similarity index 100% rename from bun-env.d.ts rename to packages/web/bun-env.d.ts diff --git a/bunfig.toml b/packages/web/bunfig.toml similarity index 100% rename from bunfig.toml rename to packages/web/bunfig.toml diff --git a/components.json b/packages/web/components.json similarity index 100% rename from components.json rename to packages/web/components.json diff --git a/packages/web/package.json b/packages/web/package.json new file mode 100644 index 0000000..f926ebc --- /dev/null +++ b/packages/web/package.json @@ -0,0 +1,45 @@ +{ + "name": "@fileone/web", + "version": "0.1.0", + "private": true, + "type": "module", + "scripts": { + "dev": "bun --hot src/server.tsx", + "build": "bun build ./src/index.html --outdir=dist --sourcemap --target=browser --minify --define:process.env.NODE_ENV='\"production\"' --env='BUN_PUBLIC_*'", + "start": "NODE_ENV=production bun src/index.tsx" + }, + "dependencies": { + "@convex-dev/workos": "^0.0.1", + "@radix-ui/react-checkbox": "^1.3.3", + "@radix-ui/react-context-menu": "^2.2.16", + "@radix-ui/react-dialog": "^1.1.15", + "@radix-ui/react-dropdown-menu": "^2.1.16", + "@radix-ui/react-separator": "^1.1.7", + "@radix-ui/react-slot": "^1.2.3", + "@radix-ui/react-tooltip": "^1.2.8", + "@tanstack/react-query": "^5.87.4", + "@tanstack/react-router": "^1.131.41", + "@tanstack/react-table": "^8.21.3", + "@tanstack/router-devtools": "^1.131.42", + "@workos-inc/authkit-react": "^0.12.0", + "bun-plugin-tailwind": "latest", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "convex": "^1.27.0", + "convex-helpers": "^0.1.104", + "jotai": "^2.14.0", + "lucide-react": "^0.544.0", + "next-themes": "^0.4.6", + "react": "^19", + "react-dom": "^19", + "sonner": "^2.0.7", + "tailwind-merge": "^3.3.1", + "tailwindcss": "^4", + "tw-animate-css": "^1.3.8" + }, + "devDependencies": { + "@tanstack/router-cli": "^1.131.41", + "@types/react": "^19", + "@types/react-dom": "^19" + } +} \ No newline at end of file diff --git a/src/APITester.tsx b/packages/web/src/APITester.tsx similarity index 100% rename from src/APITester.tsx rename to packages/web/src/APITester.tsx diff --git a/src/components/icons/directory-icon.tsx b/packages/web/src/components/icons/directory-icon.tsx similarity index 100% rename from src/components/icons/directory-icon.tsx rename to packages/web/src/components/icons/directory-icon.tsx diff --git a/src/components/icons/text-file-icon.tsx b/packages/web/src/components/icons/text-file-icon.tsx similarity index 100% rename from src/components/icons/text-file-icon.tsx rename to packages/web/src/components/icons/text-file-icon.tsx diff --git a/src/components/theme-provider.tsx b/packages/web/src/components/theme-provider.tsx similarity index 100% rename from src/components/theme-provider.tsx rename to packages/web/src/components/theme-provider.tsx diff --git a/src/components/ui/breadcrumb.tsx b/packages/web/src/components/ui/breadcrumb.tsx similarity index 100% rename from src/components/ui/breadcrumb.tsx rename to packages/web/src/components/ui/breadcrumb.tsx diff --git a/src/components/ui/button.tsx b/packages/web/src/components/ui/button.tsx similarity index 100% rename from src/components/ui/button.tsx rename to packages/web/src/components/ui/button.tsx diff --git a/src/components/ui/checkbox.tsx b/packages/web/src/components/ui/checkbox.tsx similarity index 100% rename from src/components/ui/checkbox.tsx rename to packages/web/src/components/ui/checkbox.tsx diff --git a/src/components/ui/context-menu.tsx b/packages/web/src/components/ui/context-menu.tsx similarity index 100% rename from src/components/ui/context-menu.tsx rename to packages/web/src/components/ui/context-menu.tsx diff --git a/src/components/ui/data-table.tsx b/packages/web/src/components/ui/data-table.tsx similarity index 100% rename from src/components/ui/data-table.tsx rename to packages/web/src/components/ui/data-table.tsx diff --git a/src/components/ui/dropdown-menu.tsx b/packages/web/src/components/ui/dropdown-menu.tsx similarity index 100% rename from src/components/ui/dropdown-menu.tsx rename to packages/web/src/components/ui/dropdown-menu.tsx diff --git a/src/components/ui/input.tsx b/packages/web/src/components/ui/input.tsx similarity index 100% rename from src/components/ui/input.tsx rename to packages/web/src/components/ui/input.tsx diff --git a/src/components/ui/loading-spinner.tsx b/packages/web/src/components/ui/loading-spinner.tsx similarity index 100% rename from src/components/ui/loading-spinner.tsx rename to packages/web/src/components/ui/loading-spinner.tsx diff --git a/src/components/ui/separator.tsx b/packages/web/src/components/ui/separator.tsx similarity index 100% rename from src/components/ui/separator.tsx rename to packages/web/src/components/ui/separator.tsx diff --git a/src/components/ui/sheet.tsx b/packages/web/src/components/ui/sheet.tsx similarity index 100% rename from src/components/ui/sheet.tsx rename to packages/web/src/components/ui/sheet.tsx diff --git a/src/components/ui/sidebar.tsx b/packages/web/src/components/ui/sidebar.tsx similarity index 100% rename from src/components/ui/sidebar.tsx rename to packages/web/src/components/ui/sidebar.tsx diff --git a/src/components/ui/skeleton.tsx b/packages/web/src/components/ui/skeleton.tsx similarity index 100% rename from src/components/ui/skeleton.tsx rename to packages/web/src/components/ui/skeleton.tsx diff --git a/src/components/ui/sonner.tsx b/packages/web/src/components/ui/sonner.tsx similarity index 100% rename from src/components/ui/sonner.tsx rename to packages/web/src/components/ui/sonner.tsx diff --git a/src/components/ui/table.tsx b/packages/web/src/components/ui/table.tsx similarity index 100% rename from src/components/ui/table.tsx rename to packages/web/src/components/ui/table.tsx diff --git a/src/components/ui/tooltip.tsx b/packages/web/src/components/ui/tooltip.tsx similarity index 100% rename from src/components/ui/tooltip.tsx rename to packages/web/src/components/ui/tooltip.tsx diff --git a/src/dashboard/dashboard-sidebar.tsx b/packages/web/src/dashboard/dashboard-sidebar.tsx similarity index 100% rename from src/dashboard/dashboard-sidebar.tsx rename to packages/web/src/dashboard/dashboard-sidebar.tsx diff --git a/src/dashboard/index.css b/packages/web/src/dashboard/index.css similarity index 100% rename from src/dashboard/index.css rename to packages/web/src/dashboard/index.css diff --git a/src/entry.tsx b/packages/web/src/entry.tsx similarity index 100% rename from src/entry.tsx rename to packages/web/src/entry.tsx diff --git a/src/files/file-table.tsx b/packages/web/src/files/file-table.tsx similarity index 100% rename from src/files/file-table.tsx rename to packages/web/src/files/file-table.tsx diff --git a/src/files/files-page.tsx b/packages/web/src/files/files-page.tsx similarity index 100% rename from src/files/files-page.tsx rename to packages/web/src/files/files-page.tsx diff --git a/src/files/state.ts b/packages/web/src/files/state.ts similarity index 76% rename from src/files/state.ts rename to packages/web/src/files/state.ts index 20bf81c..5379e42 100644 --- a/src/files/state.ts +++ b/packages/web/src/files/state.ts @@ -1,9 +1,9 @@ import { atom } from "jotai" -import type { Id } from "../../convex/_generated/dataModel" +import type { Id } from "@convex/_generated/dataModel" import type { DirectoryItem, DirectoryItemKind, -} from "../../convex/model/directories" +} from "@convex/model/directories" export const contextMenuTargeItemAtom = atom(null) export const optimisticDeletedItemsAtom = atom( diff --git a/src/hooks/use-mobile.ts b/packages/web/src/hooks/use-mobile.ts similarity index 100% rename from src/hooks/use-mobile.ts rename to packages/web/src/hooks/use-mobile.ts diff --git a/src/index.html b/packages/web/src/index.html similarity index 100% rename from src/index.html rename to packages/web/src/index.html diff --git a/src/lib/error.ts b/packages/web/src/lib/error.ts similarity index 89% rename from src/lib/error.ts rename to packages/web/src/lib/error.ts index 35c3861..6f271ea 100644 --- a/src/lib/error.ts +++ b/packages/web/src/lib/error.ts @@ -1,5 +1,5 @@ import { toast } from "sonner" -import { Code as ErrorCode, isApplicationError } from "../../convex/model/error" +import { Code as ErrorCode, isApplicationError } from "@convex/model/error" const ERROR_MESSAGE = { [ErrorCode.DirectoryExists]: "Directory already exists", diff --git a/src/lib/utils.ts b/packages/web/src/lib/utils.ts similarity index 100% rename from src/lib/utils.ts rename to packages/web/src/lib/utils.ts diff --git a/src/routeTree.gen.ts b/packages/web/src/routeTree.gen.ts similarity index 100% rename from src/routeTree.gen.ts rename to packages/web/src/routeTree.gen.ts diff --git a/src/routes/__root.tsx b/packages/web/src/routes/__root.tsx similarity index 100% rename from src/routes/__root.tsx rename to packages/web/src/routes/__root.tsx diff --git a/src/routes/_authenticated.tsx b/packages/web/src/routes/_authenticated.tsx similarity index 100% rename from src/routes/_authenticated.tsx rename to packages/web/src/routes/_authenticated.tsx diff --git a/src/routes/_authenticated/_sidebar-layout.tsx b/packages/web/src/routes/_authenticated/_sidebar-layout.tsx similarity index 100% rename from src/routes/_authenticated/_sidebar-layout.tsx rename to packages/web/src/routes/_authenticated/_sidebar-layout.tsx diff --git a/src/routes/_authenticated/_sidebar-layout/files.tsx b/packages/web/src/routes/_authenticated/_sidebar-layout/files.tsx similarity index 100% rename from src/routes/_authenticated/_sidebar-layout/files.tsx rename to packages/web/src/routes/_authenticated/_sidebar-layout/files.tsx diff --git a/src/routes/_authenticated/index.tsx b/packages/web/src/routes/_authenticated/index.tsx similarity index 100% rename from src/routes/_authenticated/index.tsx rename to packages/web/src/routes/_authenticated/index.tsx diff --git a/src/routes/login.tsx b/packages/web/src/routes/login.tsx similarity index 100% rename from src/routes/login.tsx rename to packages/web/src/routes/login.tsx diff --git a/src/routes/login_.callback.tsx b/packages/web/src/routes/login_.callback.tsx similarity index 100% rename from src/routes/login_.callback.tsx rename to packages/web/src/routes/login_.callback.tsx diff --git a/src/index.tsx b/packages/web/src/server.tsx similarity index 53% rename from src/index.tsx rename to packages/web/src/server.tsx index a4e3ca6..27b7062 100644 --- a/src/index.tsx +++ b/packages/web/src/server.tsx @@ -6,28 +6,6 @@ const server = serve({ routes: { // Serve index.html for all unmatched routes. "/*": index, - - "/api/hello": { - async GET(req) { - return Response.json({ - message: "Hello, world!", - method: "GET", - }) - }, - async PUT(req) { - return Response.json({ - message: "Hello, world!", - method: "PUT", - }) - }, - }, - - "/api/hello/:name": async (req) => { - const name = req.params.name - return Response.json({ - message: `Hello, ${name}!`, - }) - }, }, development: process.env.NODE_ENV !== "production" && { diff --git a/src/styles/globals.css b/packages/web/src/styles/globals.css similarity index 100% rename from src/styles/globals.css rename to packages/web/src/styles/globals.css diff --git a/tsconfig.json b/packages/web/tsconfig.json similarity index 95% rename from tsconfig.json rename to packages/web/tsconfig.json index 888b701..f61a786 100644 --- a/tsconfig.json +++ b/packages/web/tsconfig.json @@ -24,7 +24,7 @@ "baseUrl": ".", "paths": { "@/*": ["./src/*"], - "@convex/*": ["./convex/*"] + "@convex/*": ["../../convex/*"] }, // Some stricter flags (disabled by default)