From 25796ab609cdc1dd805c18fe924d8360cbe73abc Mon Sep 17 00:00:00 2001 From: kenneth Date: Sat, 18 Oct 2025 14:02:20 +0000 Subject: [PATCH] refactor: migrate to vite and restructure repo Co-authored-by: Ona --- .env.sample | 9 +- AGENTS.md | 2 +- apps/drive-web/.env.sample | 4 + .../web => apps/drive-web}/components.json | 0 .../web/src => apps/drive-web}/index.html | 4 +- {packages/web => apps/drive-web}/package.json | 13 +- .../web => apps/drive-web}/src/APITester.tsx | 0 {packages/web => apps/drive-web}/src/auth.ts | 2 +- .../src/components/icons/directory-icon.tsx | 0 .../src/components/icons/text-file-icon.tsx | 0 .../src/components/theme-provider.tsx | 0 .../src/components/ui/breadcrumb.tsx | 0 .../drive-web}/src/components/ui/button.tsx | 0 .../drive-web}/src/components/ui/card.tsx | 0 .../drive-web}/src/components/ui/checkbox.tsx | 0 .../src/components/ui/context-menu.tsx | 0 .../src/components/ui/data-table.tsx | 0 .../drive-web}/src/components/ui/dialog.tsx | 0 .../src/components/ui/dropdown-menu.tsx | 0 .../drive-web}/src/components/ui/field.tsx | 0 .../drive-web}/src/components/ui/input.tsx | 0 .../drive-web}/src/components/ui/label.tsx | 0 .../src/components/ui/loading-spinner.tsx | 0 .../drive-web}/src/components/ui/progress.tsx | 0 .../src/components/ui/separator.tsx | 0 .../drive-web}/src/components/ui/sheet.tsx | 0 .../drive-web}/src/components/ui/sidebar.tsx | 0 .../drive-web}/src/components/ui/skeleton.tsx | 0 .../drive-web}/src/components/ui/sonner.tsx | 0 .../drive-web}/src/components/ui/table.tsx | 0 .../drive-web}/src/components/ui/tooltip.tsx | 0 .../drive-web}/src/components/with-atom.tsx | 0 .../src/dashboard/dashboard-sidebar.tsx | 0 .../drive-web}/src/dashboard/index.css | 0 .../drive-web}/src/dashboard/state.ts | 0 .../src/directories/directory-page/context.ts | 4 +- .../directory-content-context-menu.tsx | 2 +- .../directory-content-table-skeleton.tsx | 0 .../directory-content-table.tsx | 2 +- .../directory-page-skeleton.tsx | 0 .../directory-page/file-path-breadcrumb.tsx | 2 +- .../directory-page/new-directory-dialog.tsx | 0 .../directory-page/rename-file-dialog.tsx | 2 +- .../directory-page/skeleton-demo.tsx | 0 .../src/directories/directory-page/state.ts | 2 +- .../web => apps/drive-web}/src/entry.tsx | 0 .../drive-web}/src/files/PickedFileItem.tsx | 0 .../src/files/file-preview-dialog.tsx | 0 .../drive-web}/src/files/file-table.tsx | 2 +- .../drive-web}/src/files/files-page.tsx | 0 .../src/files/image-preview-dialog.tsx | 0 .../src/files/rename-file-dialog.tsx | 0 .../web => apps/drive-web}/src/files/state.ts | 2 +- .../web => apps/drive-web}/src/files/store.ts | 0 .../src/files/upload-file-dialog.tsx | 0 .../drive-web}/src/files/use-file-drop.ts | 4 +- .../drive-web}/src/files/use-upload-file.ts | 0 .../drive-web}/src/hooks/use-mobile.ts | 0 .../web => apps/drive-web}/src/lib/error.ts | 2 +- .../drive-web}/src/lib/keyboard.ts | 0 .../web => apps/drive-web}/src/lib/utils.ts | 0 .../drive-web}/src/routeTree.gen.ts | 0 .../drive-web}/src/routes/__root.tsx | 3 +- .../drive-web}/src/routes/_authenticated.tsx | 2 +- .../routes/_authenticated/_sidebar-layout.tsx | 0 .../directories.$directoryId.tsx | 2 +- .../_authenticated/_sidebar-layout/home.tsx | 0 .../trash.directories.$directoryId.tsx | 2 +- .../src/routes/_authenticated/index.tsx | 0 .../drive-web}/src/routes/login.tsx | 0 .../drive-web}/src/routes/login_.callback.tsx | 0 .../drive-web}/src/routes/sign-up.tsx | 0 .../drive-web}/src/styles/globals.css | 0 apps/drive-web/src/vite-env.d.ts | 10 + .../web => apps/drive-web}/tsconfig.json | 9 +- apps/drive-web/tsconfig.node.json | 23 ++ apps/drive-web/vite.config.ts | 30 ++ bun.lock | 281 ++++++++++++------ package.json | 11 +- packages/convex/_generated/api.d.ts | 8 +- packages/convex/files.ts | 2 +- packages/convex/filesystem.ts | 49 +-- packages/convex/model/directories.ts | 6 +- packages/convex/model/files.ts | 4 +- packages/convex/model/filesystem.ts | 133 ++------- packages/convex/model/user.ts | 2 +- packages/convex/package.json | 9 + packages/convex/{model => shared}/error.ts | 0 packages/convex/shared/filesystem.ts | 91 ++++++ packages/convex/shared/types.ts | 11 + packages/convex/user.ts | 4 +- packages/web/bun-env.d.ts | 17 -- packages/web/bunfig.toml | 3 - packages/web/src/server.tsx | 20 -- 94 files changed, 478 insertions(+), 312 deletions(-) create mode 100644 apps/drive-web/.env.sample rename {packages/web => apps/drive-web}/components.json (100%) rename {packages/web/src => apps/drive-web}/index.html (71%) rename {packages/web => apps/drive-web}/package.json (81%) rename {packages/web => apps/drive-web}/src/APITester.tsx (100%) rename {packages/web => apps/drive-web}/src/auth.ts (94%) rename {packages/web => apps/drive-web}/src/components/icons/directory-icon.tsx (100%) rename {packages/web => apps/drive-web}/src/components/icons/text-file-icon.tsx (100%) rename {packages/web => apps/drive-web}/src/components/theme-provider.tsx (100%) rename {packages/web => apps/drive-web}/src/components/ui/breadcrumb.tsx (100%) rename {packages/web => apps/drive-web}/src/components/ui/button.tsx (100%) rename {packages/web => apps/drive-web}/src/components/ui/card.tsx (100%) rename {packages/web => apps/drive-web}/src/components/ui/checkbox.tsx (100%) rename {packages/web => apps/drive-web}/src/components/ui/context-menu.tsx (100%) rename {packages/web => apps/drive-web}/src/components/ui/data-table.tsx (100%) rename {packages/web => apps/drive-web}/src/components/ui/dialog.tsx (100%) rename {packages/web => apps/drive-web}/src/components/ui/dropdown-menu.tsx (100%) rename {packages/web => apps/drive-web}/src/components/ui/field.tsx (100%) rename {packages/web => apps/drive-web}/src/components/ui/input.tsx (100%) rename {packages/web => apps/drive-web}/src/components/ui/label.tsx (100%) rename {packages/web => apps/drive-web}/src/components/ui/loading-spinner.tsx (100%) rename {packages/web => apps/drive-web}/src/components/ui/progress.tsx (100%) rename {packages/web => apps/drive-web}/src/components/ui/separator.tsx (100%) rename {packages/web => apps/drive-web}/src/components/ui/sheet.tsx (100%) rename {packages/web => apps/drive-web}/src/components/ui/sidebar.tsx (100%) rename {packages/web => apps/drive-web}/src/components/ui/skeleton.tsx (100%) rename {packages/web => apps/drive-web}/src/components/ui/sonner.tsx (100%) rename {packages/web => apps/drive-web}/src/components/ui/table.tsx (100%) rename {packages/web => apps/drive-web}/src/components/ui/tooltip.tsx (100%) rename {packages/web => apps/drive-web}/src/components/with-atom.tsx (100%) rename {packages/web => apps/drive-web}/src/dashboard/dashboard-sidebar.tsx (100%) rename {packages/web => apps/drive-web}/src/dashboard/index.css (100%) rename {packages/web => apps/drive-web}/src/dashboard/state.ts (100%) rename {packages/web => apps/drive-web}/src/directories/directory-page/context.ts (71%) rename {packages/web => apps/drive-web}/src/directories/directory-page/directory-content-context-menu.tsx (97%) rename {packages/web => apps/drive-web}/src/directories/directory-page/directory-content-table-skeleton.tsx (100%) rename {packages/web => apps/drive-web}/src/directories/directory-page/directory-content-table.tsx (99%) rename {packages/web => apps/drive-web}/src/directories/directory-page/directory-page-skeleton.tsx (100%) rename {packages/web => apps/drive-web}/src/directories/directory-page/file-path-breadcrumb.tsx (98%) rename {packages/web => apps/drive-web}/src/directories/directory-page/new-directory-dialog.tsx (100%) rename {packages/web => apps/drive-web}/src/directories/directory-page/rename-file-dialog.tsx (96%) rename {packages/web => apps/drive-web}/src/directories/directory-page/skeleton-demo.tsx (100%) rename {packages/web => apps/drive-web}/src/directories/directory-page/state.ts (89%) rename {packages/web => apps/drive-web}/src/entry.tsx (100%) rename {packages/web => apps/drive-web}/src/files/PickedFileItem.tsx (100%) rename {packages/web => apps/drive-web}/src/files/file-preview-dialog.tsx (100%) rename {packages/web => apps/drive-web}/src/files/file-table.tsx (99%) rename {packages/web => apps/drive-web}/src/files/files-page.tsx (100%) rename {packages/web => apps/drive-web}/src/files/image-preview-dialog.tsx (100%) rename {packages/web => apps/drive-web}/src/files/rename-file-dialog.tsx (100%) rename {packages/web => apps/drive-web}/src/files/state.ts (93%) rename {packages/web => apps/drive-web}/src/files/store.ts (100%) rename {packages/web => apps/drive-web}/src/files/upload-file-dialog.tsx (100%) rename {packages/web => apps/drive-web}/src/files/use-file-drop.ts (96%) rename {packages/web => apps/drive-web}/src/files/use-upload-file.ts (100%) rename {packages/web => apps/drive-web}/src/hooks/use-mobile.ts (100%) rename {packages/web => apps/drive-web}/src/lib/error.ts (96%) rename {packages/web => apps/drive-web}/src/lib/keyboard.ts (100%) rename {packages/web => apps/drive-web}/src/lib/utils.ts (100%) rename {packages/web => apps/drive-web}/src/routeTree.gen.ts (100%) rename {packages/web => apps/drive-web}/src/routes/__root.tsx (91%) rename {packages/web => apps/drive-web}/src/routes/_authenticated.tsx (97%) rename {packages/web => apps/drive-web}/src/routes/_authenticated/_sidebar-layout.tsx (100%) rename {packages/web => apps/drive-web}/src/routes/_authenticated/_sidebar-layout/directories.$directoryId.tsx (99%) rename {packages/web => apps/drive-web}/src/routes/_authenticated/_sidebar-layout/home.tsx (100%) rename {packages/web => apps/drive-web}/src/routes/_authenticated/_sidebar-layout/trash.directories.$directoryId.tsx (99%) rename {packages/web => apps/drive-web}/src/routes/_authenticated/index.tsx (100%) rename {packages/web => apps/drive-web}/src/routes/login.tsx (100%) rename {packages/web => apps/drive-web}/src/routes/login_.callback.tsx (100%) rename {packages/web => apps/drive-web}/src/routes/sign-up.tsx (100%) rename {packages/web => apps/drive-web}/src/styles/globals.css (100%) create mode 100644 apps/drive-web/src/vite-env.d.ts rename {packages/web => apps/drive-web}/tsconfig.json (80%) create mode 100644 apps/drive-web/tsconfig.node.json create mode 100644 apps/drive-web/vite.config.ts rename packages/convex/{model => shared}/error.ts (100%) create mode 100644 packages/convex/shared/filesystem.ts create mode 100644 packages/convex/shared/types.ts delete mode 100644 packages/web/bun-env.d.ts delete mode 100644 packages/web/bunfig.toml delete mode 100644 packages/web/src/server.tsx diff --git a/.env.sample b/.env.sample index 158d95e..c480057 100644 --- a/.env.sample +++ b/.env.sample @@ -1,8 +1,13 @@ +# this is the url to the convex instance (NOT THE DASHBOARD) CONVEX_SELF_HOSTED_URL= CONVEX_SELF_HOSTED_ADMIN_KEY= -CONVEX_URL= -# this is the url to the convex instance +# this is the url to the convex instance (NOT THE DASHBOARD) +CONVEX_URL= +# this is the convex url for invoking http actions +CONVEX_SITE_URL= + +# this is the url to the convex instance (NOT THE DASHBOARD) BUN_PUBLIC_CONVEX_URL= # this is the convex url for invoking http actions BUN_PUBLIC_CONVEX_SITE_URL= diff --git a/AGENTS.md b/AGENTS.md index e053194..7f74c84 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -5,7 +5,7 @@ backend: convex # Project structure This project uses npm workspaces. - `packages/convex` - convex functions and models -- `packages/web` - frontend dashboard +- `apps/drive-web` - frontend dashboard - `packages/path` - path utils # General Guidelines diff --git a/apps/drive-web/.env.sample b/apps/drive-web/.env.sample new file mode 100644 index 0000000..644cb2c --- /dev/null +++ b/apps/drive-web/.env.sample @@ -0,0 +1,4 @@ +# this is the url to the convex instance (NOT THE DASHBOARD) +VITE_CONVEX_URL= +# this is the convex url for invoking http actions +VITE_CONVEX_SITE_URL= \ No newline at end of file diff --git a/packages/web/components.json b/apps/drive-web/components.json similarity index 100% rename from packages/web/components.json rename to apps/drive-web/components.json diff --git a/packages/web/src/index.html b/apps/drive-web/index.html similarity index 71% rename from packages/web/src/index.html rename to apps/drive-web/index.html index 34c2977..e17e714 100644 --- a/packages/web/src/index.html +++ b/apps/drive-web/index.html @@ -3,10 +3,10 @@ - Bun + React + Drive
- + diff --git a/packages/web/package.json b/apps/drive-web/package.json similarity index 81% rename from packages/web/package.json rename to apps/drive-web/package.json index f5fdbc8..abf6d55 100644 --- a/packages/web/package.json +++ b/apps/drive-web/package.json @@ -4,9 +4,9 @@ "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", + "dev": "vite", + "build": "vite build", + "preview": "vite preview", "format": "biome format --write" }, "dependencies": { @@ -26,7 +26,6 @@ "@tanstack/react-table": "^8.21.3", "@tanstack/router-devtools": "^1.131.42", "better-auth": "1.3.8", - "bun-plugin-tailwind": "latest", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "convex": "^1.27.0", @@ -48,7 +47,11 @@ }, "devDependencies": { "@tanstack/router-cli": "^1.131.41", + "@tanstack/router-plugin": "^1.133.13", + "@types/node": "^22.10.5", "@types/react": "^19", - "@types/react-dom": "^19" + "@types/react-dom": "^19", + "@vitejs/plugin-react": "^5.0.4", + "vite": "^7.1.10" } } diff --git a/packages/web/src/APITester.tsx b/apps/drive-web/src/APITester.tsx similarity index 100% rename from packages/web/src/APITester.tsx rename to apps/drive-web/src/APITester.tsx diff --git a/packages/web/src/auth.ts b/apps/drive-web/src/auth.ts similarity index 94% rename from packages/web/src/auth.ts rename to apps/drive-web/src/auth.ts index 7419998..e811098 100644 --- a/packages/web/src/auth.ts +++ b/apps/drive-web/src/auth.ts @@ -14,7 +14,7 @@ export class BetterAuthError extends Error { } export const authClient = createAuthClient({ - baseURL: process.env.BUN_PUBLIC_CONVEX_SITE_URL, + baseURL: import.meta.env.VITE_CONVEX_SITE_URL, plugins: [convexClient(), crossDomainClient()], }) diff --git a/packages/web/src/components/icons/directory-icon.tsx b/apps/drive-web/src/components/icons/directory-icon.tsx similarity index 100% rename from packages/web/src/components/icons/directory-icon.tsx rename to apps/drive-web/src/components/icons/directory-icon.tsx diff --git a/packages/web/src/components/icons/text-file-icon.tsx b/apps/drive-web/src/components/icons/text-file-icon.tsx similarity index 100% rename from packages/web/src/components/icons/text-file-icon.tsx rename to apps/drive-web/src/components/icons/text-file-icon.tsx diff --git a/packages/web/src/components/theme-provider.tsx b/apps/drive-web/src/components/theme-provider.tsx similarity index 100% rename from packages/web/src/components/theme-provider.tsx rename to apps/drive-web/src/components/theme-provider.tsx diff --git a/packages/web/src/components/ui/breadcrumb.tsx b/apps/drive-web/src/components/ui/breadcrumb.tsx similarity index 100% rename from packages/web/src/components/ui/breadcrumb.tsx rename to apps/drive-web/src/components/ui/breadcrumb.tsx diff --git a/packages/web/src/components/ui/button.tsx b/apps/drive-web/src/components/ui/button.tsx similarity index 100% rename from packages/web/src/components/ui/button.tsx rename to apps/drive-web/src/components/ui/button.tsx diff --git a/packages/web/src/components/ui/card.tsx b/apps/drive-web/src/components/ui/card.tsx similarity index 100% rename from packages/web/src/components/ui/card.tsx rename to apps/drive-web/src/components/ui/card.tsx diff --git a/packages/web/src/components/ui/checkbox.tsx b/apps/drive-web/src/components/ui/checkbox.tsx similarity index 100% rename from packages/web/src/components/ui/checkbox.tsx rename to apps/drive-web/src/components/ui/checkbox.tsx diff --git a/packages/web/src/components/ui/context-menu.tsx b/apps/drive-web/src/components/ui/context-menu.tsx similarity index 100% rename from packages/web/src/components/ui/context-menu.tsx rename to apps/drive-web/src/components/ui/context-menu.tsx diff --git a/packages/web/src/components/ui/data-table.tsx b/apps/drive-web/src/components/ui/data-table.tsx similarity index 100% rename from packages/web/src/components/ui/data-table.tsx rename to apps/drive-web/src/components/ui/data-table.tsx diff --git a/packages/web/src/components/ui/dialog.tsx b/apps/drive-web/src/components/ui/dialog.tsx similarity index 100% rename from packages/web/src/components/ui/dialog.tsx rename to apps/drive-web/src/components/ui/dialog.tsx diff --git a/packages/web/src/components/ui/dropdown-menu.tsx b/apps/drive-web/src/components/ui/dropdown-menu.tsx similarity index 100% rename from packages/web/src/components/ui/dropdown-menu.tsx rename to apps/drive-web/src/components/ui/dropdown-menu.tsx diff --git a/packages/web/src/components/ui/field.tsx b/apps/drive-web/src/components/ui/field.tsx similarity index 100% rename from packages/web/src/components/ui/field.tsx rename to apps/drive-web/src/components/ui/field.tsx diff --git a/packages/web/src/components/ui/input.tsx b/apps/drive-web/src/components/ui/input.tsx similarity index 100% rename from packages/web/src/components/ui/input.tsx rename to apps/drive-web/src/components/ui/input.tsx diff --git a/packages/web/src/components/ui/label.tsx b/apps/drive-web/src/components/ui/label.tsx similarity index 100% rename from packages/web/src/components/ui/label.tsx rename to apps/drive-web/src/components/ui/label.tsx diff --git a/packages/web/src/components/ui/loading-spinner.tsx b/apps/drive-web/src/components/ui/loading-spinner.tsx similarity index 100% rename from packages/web/src/components/ui/loading-spinner.tsx rename to apps/drive-web/src/components/ui/loading-spinner.tsx diff --git a/packages/web/src/components/ui/progress.tsx b/apps/drive-web/src/components/ui/progress.tsx similarity index 100% rename from packages/web/src/components/ui/progress.tsx rename to apps/drive-web/src/components/ui/progress.tsx diff --git a/packages/web/src/components/ui/separator.tsx b/apps/drive-web/src/components/ui/separator.tsx similarity index 100% rename from packages/web/src/components/ui/separator.tsx rename to apps/drive-web/src/components/ui/separator.tsx diff --git a/packages/web/src/components/ui/sheet.tsx b/apps/drive-web/src/components/ui/sheet.tsx similarity index 100% rename from packages/web/src/components/ui/sheet.tsx rename to apps/drive-web/src/components/ui/sheet.tsx diff --git a/packages/web/src/components/ui/sidebar.tsx b/apps/drive-web/src/components/ui/sidebar.tsx similarity index 100% rename from packages/web/src/components/ui/sidebar.tsx rename to apps/drive-web/src/components/ui/sidebar.tsx diff --git a/packages/web/src/components/ui/skeleton.tsx b/apps/drive-web/src/components/ui/skeleton.tsx similarity index 100% rename from packages/web/src/components/ui/skeleton.tsx rename to apps/drive-web/src/components/ui/skeleton.tsx diff --git a/packages/web/src/components/ui/sonner.tsx b/apps/drive-web/src/components/ui/sonner.tsx similarity index 100% rename from packages/web/src/components/ui/sonner.tsx rename to apps/drive-web/src/components/ui/sonner.tsx diff --git a/packages/web/src/components/ui/table.tsx b/apps/drive-web/src/components/ui/table.tsx similarity index 100% rename from packages/web/src/components/ui/table.tsx rename to apps/drive-web/src/components/ui/table.tsx diff --git a/packages/web/src/components/ui/tooltip.tsx b/apps/drive-web/src/components/ui/tooltip.tsx similarity index 100% rename from packages/web/src/components/ui/tooltip.tsx rename to apps/drive-web/src/components/ui/tooltip.tsx diff --git a/packages/web/src/components/with-atom.tsx b/apps/drive-web/src/components/with-atom.tsx similarity index 100% rename from packages/web/src/components/with-atom.tsx rename to apps/drive-web/src/components/with-atom.tsx diff --git a/packages/web/src/dashboard/dashboard-sidebar.tsx b/apps/drive-web/src/dashboard/dashboard-sidebar.tsx similarity index 100% rename from packages/web/src/dashboard/dashboard-sidebar.tsx rename to apps/drive-web/src/dashboard/dashboard-sidebar.tsx diff --git a/packages/web/src/dashboard/index.css b/apps/drive-web/src/dashboard/index.css similarity index 100% rename from packages/web/src/dashboard/index.css rename to apps/drive-web/src/dashboard/index.css diff --git a/packages/web/src/dashboard/state.ts b/apps/drive-web/src/dashboard/state.ts similarity index 100% rename from packages/web/src/dashboard/state.ts rename to apps/drive-web/src/dashboard/state.ts diff --git a/packages/web/src/directories/directory-page/context.ts b/apps/drive-web/src/directories/directory-page/context.ts similarity index 71% rename from packages/web/src/directories/directory-page/context.ts rename to apps/drive-web/src/directories/directory-page/context.ts index 3b0a965..719b137 100644 --- a/packages/web/src/directories/directory-page/context.ts +++ b/apps/drive-web/src/directories/directory-page/context.ts @@ -1,6 +1,6 @@ import type { Doc } from "@fileone/convex/_generated/dataModel" -import type { DirectoryInfo } from "@fileone/convex/model/directories" -import type { FileSystemItem } from "@fileone/convex/model/filesystem" +import type { FileSystemItem } from "@fileone/convex/filesystem" +import type { DirectoryInfo } from "@fileone/convex/types" import { createContext } from "react" type DirectoryPageContextType = { diff --git a/packages/web/src/directories/directory-page/directory-content-context-menu.tsx b/apps/drive-web/src/directories/directory-page/directory-content-context-menu.tsx similarity index 97% rename from packages/web/src/directories/directory-page/directory-content-context-menu.tsx rename to apps/drive-web/src/directories/directory-page/directory-content-context-menu.tsx index c47b421..5117d4f 100644 --- a/packages/web/src/directories/directory-page/directory-content-context-menu.tsx +++ b/apps/drive-web/src/directories/directory-page/directory-content-context-menu.tsx @@ -1,5 +1,5 @@ import { api } from "@fileone/convex/_generated/api" -import { newFileSystemHandle } from "@fileone/convex/model/filesystem" +import { newFileSystemHandle } from "@fileone/convex/filesystem" import { useMutation } from "@tanstack/react-query" import { useMutation as useContextMutation } from "convex/react" import { useAtom, useAtomValue, useSetAtom, useStore } from "jotai" diff --git a/packages/web/src/directories/directory-page/directory-content-table-skeleton.tsx b/apps/drive-web/src/directories/directory-page/directory-content-table-skeleton.tsx similarity index 100% rename from packages/web/src/directories/directory-page/directory-content-table-skeleton.tsx rename to apps/drive-web/src/directories/directory-page/directory-content-table-skeleton.tsx diff --git a/packages/web/src/directories/directory-page/directory-content-table.tsx b/apps/drive-web/src/directories/directory-page/directory-content-table.tsx similarity index 99% rename from packages/web/src/directories/directory-page/directory-content-table.tsx rename to apps/drive-web/src/directories/directory-page/directory-content-table.tsx index eaa6c8c..8a27163 100644 --- a/packages/web/src/directories/directory-page/directory-content-table.tsx +++ b/apps/drive-web/src/directories/directory-page/directory-content-table.tsx @@ -9,7 +9,7 @@ import { newDirectoryHandle, newFileHandle, newFileSystemHandle, -} from "@fileone/convex/model/filesystem" +} from "@fileone/convex/filesystem" import { Link, useNavigate } from "@tanstack/react-router" import { type ColumnDef, diff --git a/packages/web/src/directories/directory-page/directory-page-skeleton.tsx b/apps/drive-web/src/directories/directory-page/directory-page-skeleton.tsx similarity index 100% rename from packages/web/src/directories/directory-page/directory-page-skeleton.tsx rename to apps/drive-web/src/directories/directory-page/directory-page-skeleton.tsx diff --git a/packages/web/src/directories/directory-page/file-path-breadcrumb.tsx b/apps/drive-web/src/directories/directory-page/file-path-breadcrumb.tsx similarity index 98% rename from packages/web/src/directories/directory-page/file-path-breadcrumb.tsx rename to apps/drive-web/src/directories/directory-page/file-path-breadcrumb.tsx index 6e7b0ca..0eeea27 100644 --- a/packages/web/src/directories/directory-page/file-path-breadcrumb.tsx +++ b/apps/drive-web/src/directories/directory-page/file-path-breadcrumb.tsx @@ -2,7 +2,7 @@ import type { Id } from "@fileone/convex/_generated/dataModel" import type { DirectoryHandle, DirectoryPathComponent, -} from "@fileone/convex/model/filesystem" +} from "@fileone/convex/filesystem" import { Link } from "@tanstack/react-router" import { Fragment, useContext } from "react" import { diff --git a/packages/web/src/directories/directory-page/new-directory-dialog.tsx b/apps/drive-web/src/directories/directory-page/new-directory-dialog.tsx similarity index 100% rename from packages/web/src/directories/directory-page/new-directory-dialog.tsx rename to apps/drive-web/src/directories/directory-page/new-directory-dialog.tsx diff --git a/packages/web/src/directories/directory-page/rename-file-dialog.tsx b/apps/drive-web/src/directories/directory-page/rename-file-dialog.tsx similarity index 96% rename from packages/web/src/directories/directory-page/rename-file-dialog.tsx rename to apps/drive-web/src/directories/directory-page/rename-file-dialog.tsx index b2933bc..f0aba61 100644 --- a/packages/web/src/directories/directory-page/rename-file-dialog.tsx +++ b/apps/drive-web/src/directories/directory-page/rename-file-dialog.tsx @@ -1,5 +1,5 @@ import { api } from "@fileone/convex/_generated/api" -import { type FileSystemItem, FileType } from "@fileone/convex/model/filesystem" +import { type FileSystemItem, FileType } from "@fileone/convex/filesystem" import { useMutation } from "@tanstack/react-query" import { useMutation as useContextMutation } from "convex/react" import { useId } from "react" diff --git a/packages/web/src/directories/directory-page/skeleton-demo.tsx b/apps/drive-web/src/directories/directory-page/skeleton-demo.tsx similarity index 100% rename from packages/web/src/directories/directory-page/skeleton-demo.tsx rename to apps/drive-web/src/directories/directory-page/skeleton-demo.tsx diff --git a/packages/web/src/directories/directory-page/state.ts b/apps/drive-web/src/directories/directory-page/state.ts similarity index 89% rename from packages/web/src/directories/directory-page/state.ts rename to apps/drive-web/src/directories/directory-page/state.ts index 0ba4767..70b0796 100644 --- a/packages/web/src/directories/directory-page/state.ts +++ b/apps/drive-web/src/directories/directory-page/state.ts @@ -1,5 +1,5 @@ import type { Doc, Id } from "@fileone/convex/_generated/dataModel" -import type { FileSystemItem, FileType } from "@fileone/convex/model/filesystem" +import type { FileSystemItem, FileType } from "@fileone/convex/filesystem" import type { RowSelectionState } from "@tanstack/react-table" import { atom } from "jotai" import type { FileDragInfo } from "../../files/use-file-drop" diff --git a/packages/web/src/entry.tsx b/apps/drive-web/src/entry.tsx similarity index 100% rename from packages/web/src/entry.tsx rename to apps/drive-web/src/entry.tsx diff --git a/packages/web/src/files/PickedFileItem.tsx b/apps/drive-web/src/files/PickedFileItem.tsx similarity index 100% rename from packages/web/src/files/PickedFileItem.tsx rename to apps/drive-web/src/files/PickedFileItem.tsx diff --git a/packages/web/src/files/file-preview-dialog.tsx b/apps/drive-web/src/files/file-preview-dialog.tsx similarity index 100% rename from packages/web/src/files/file-preview-dialog.tsx rename to apps/drive-web/src/files/file-preview-dialog.tsx diff --git a/packages/web/src/files/file-table.tsx b/apps/drive-web/src/files/file-table.tsx similarity index 99% rename from packages/web/src/files/file-table.tsx rename to apps/drive-web/src/files/file-table.tsx index 17ab4ce..3ce5da9 100644 --- a/packages/web/src/files/file-table.tsx +++ b/apps/drive-web/src/files/file-table.tsx @@ -1,6 +1,6 @@ import { api } from "@fileone/convex/_generated/api" import type { Doc } from "@fileone/convex/_generated/dataModel" -import type { DirectoryItem } from "@fileone/convex/model/directories" +import type { DirectoryItem } from "@fileone/convex/types" import { useMutation } from "@tanstack/react-query" import { Link } from "@tanstack/react-router" import { diff --git a/packages/web/src/files/files-page.tsx b/apps/drive-web/src/files/files-page.tsx similarity index 100% rename from packages/web/src/files/files-page.tsx rename to apps/drive-web/src/files/files-page.tsx diff --git a/packages/web/src/files/image-preview-dialog.tsx b/apps/drive-web/src/files/image-preview-dialog.tsx similarity index 100% rename from packages/web/src/files/image-preview-dialog.tsx rename to apps/drive-web/src/files/image-preview-dialog.tsx diff --git a/packages/web/src/files/rename-file-dialog.tsx b/apps/drive-web/src/files/rename-file-dialog.tsx similarity index 100% rename from packages/web/src/files/rename-file-dialog.tsx rename to apps/drive-web/src/files/rename-file-dialog.tsx diff --git a/packages/web/src/files/state.ts b/apps/drive-web/src/files/state.ts similarity index 93% rename from packages/web/src/files/state.ts rename to apps/drive-web/src/files/state.ts index 68720c4..007565b 100644 --- a/packages/web/src/files/state.ts +++ b/apps/drive-web/src/files/state.ts @@ -2,7 +2,7 @@ import type { Id } from "@fileone/convex/_generated/dataModel" import type { DirectoryItem, DirectoryItemKind, -} from "@fileone/convex/model/directories" +} from "@fileone/convex/types" import type { RowSelectionState } from "@tanstack/react-table" import { atom } from "jotai" diff --git a/packages/web/src/files/store.ts b/apps/drive-web/src/files/store.ts similarity index 100% rename from packages/web/src/files/store.ts rename to apps/drive-web/src/files/store.ts diff --git a/packages/web/src/files/upload-file-dialog.tsx b/apps/drive-web/src/files/upload-file-dialog.tsx similarity index 100% rename from packages/web/src/files/upload-file-dialog.tsx rename to apps/drive-web/src/files/upload-file-dialog.tsx diff --git a/packages/web/src/files/use-file-drop.ts b/apps/drive-web/src/files/use-file-drop.ts similarity index 96% rename from packages/web/src/files/use-file-drop.ts rename to apps/drive-web/src/files/use-file-drop.ts index 1906b35..5e0c9cd 100644 --- a/packages/web/src/files/use-file-drop.ts +++ b/apps/drive-web/src/files/use-file-drop.ts @@ -1,11 +1,11 @@ import { api } from "@fileone/convex/_generated/api" import type { Doc, Id } from "@fileone/convex/_generated/dataModel" -import * as Err from "@fileone/convex/model/error" +import * as Err from "@fileone/convex/error" import { type DirectoryHandle, type FileSystemHandle, isSameHandle, -} from "@fileone/convex/model/filesystem" +} from "@fileone/convex/filesystem" import { useMutation } from "@tanstack/react-query" import { useMutation as useContextMutation } from "convex/react" import type { PrimitiveAtom } from "jotai" diff --git a/packages/web/src/files/use-upload-file.ts b/apps/drive-web/src/files/use-upload-file.ts similarity index 100% rename from packages/web/src/files/use-upload-file.ts rename to apps/drive-web/src/files/use-upload-file.ts diff --git a/packages/web/src/hooks/use-mobile.ts b/apps/drive-web/src/hooks/use-mobile.ts similarity index 100% rename from packages/web/src/hooks/use-mobile.ts rename to apps/drive-web/src/hooks/use-mobile.ts diff --git a/packages/web/src/lib/error.ts b/apps/drive-web/src/lib/error.ts similarity index 96% rename from packages/web/src/lib/error.ts rename to apps/drive-web/src/lib/error.ts index d60390c..4e3590b 100644 --- a/packages/web/src/lib/error.ts +++ b/apps/drive-web/src/lib/error.ts @@ -1,7 +1,7 @@ import { Code as ErrorCode, isApplicationError, -} from "@fileone/convex/model/error" +} from "@fileone/convex/error" import { toast } from "sonner" const ERROR_MESSAGE = { diff --git a/packages/web/src/lib/keyboard.ts b/apps/drive-web/src/lib/keyboard.ts similarity index 100% rename from packages/web/src/lib/keyboard.ts rename to apps/drive-web/src/lib/keyboard.ts diff --git a/packages/web/src/lib/utils.ts b/apps/drive-web/src/lib/utils.ts similarity index 100% rename from packages/web/src/lib/utils.ts rename to apps/drive-web/src/lib/utils.ts diff --git a/packages/web/src/routeTree.gen.ts b/apps/drive-web/src/routeTree.gen.ts similarity index 100% rename from packages/web/src/routeTree.gen.ts rename to apps/drive-web/src/routeTree.gen.ts diff --git a/packages/web/src/routes/__root.tsx b/apps/drive-web/src/routes/__root.tsx similarity index 91% rename from packages/web/src/routes/__root.tsx rename to apps/drive-web/src/routes/__root.tsx index ced3de9..64cc4f5 100644 --- a/packages/web/src/routes/__root.tsx +++ b/apps/drive-web/src/routes/__root.tsx @@ -13,8 +13,9 @@ export const Route = createRootRoute({ component: RootLayout, }) -const convexClient = new ConvexReactClient(process.env.BUN_PUBLIC_CONVEX_URL!, { +const convexClient = new ConvexReactClient(import.meta.env.VITE_CONVEX_URL, { verbose: true, + expectAuth: true, }) const queryClient = new QueryClient({ defaultOptions: { diff --git a/packages/web/src/routes/_authenticated.tsx b/apps/drive-web/src/routes/_authenticated.tsx similarity index 97% rename from packages/web/src/routes/_authenticated.tsx rename to apps/drive-web/src/routes/_authenticated.tsx index adde318..b53abef 100644 --- a/packages/web/src/routes/_authenticated.tsx +++ b/apps/drive-web/src/routes/_authenticated.tsx @@ -59,7 +59,7 @@ function AuthenticatedLayout() { )} - {/* */} +
diff --git a/packages/web/src/routes/_authenticated/_sidebar-layout.tsx b/apps/drive-web/src/routes/_authenticated/_sidebar-layout.tsx similarity index 100% rename from packages/web/src/routes/_authenticated/_sidebar-layout.tsx rename to apps/drive-web/src/routes/_authenticated/_sidebar-layout.tsx diff --git a/packages/web/src/routes/_authenticated/_sidebar-layout/directories.$directoryId.tsx b/apps/drive-web/src/routes/_authenticated/_sidebar-layout/directories.$directoryId.tsx similarity index 99% rename from packages/web/src/routes/_authenticated/_sidebar-layout/directories.$directoryId.tsx rename to apps/drive-web/src/routes/_authenticated/_sidebar-layout/directories.$directoryId.tsx index 0a23d6c..dbc469e 100644 --- a/packages/web/src/routes/_authenticated/_sidebar-layout/directories.$directoryId.tsx +++ b/apps/drive-web/src/routes/_authenticated/_sidebar-layout/directories.$directoryId.tsx @@ -4,7 +4,7 @@ import { type FileSystemItem, FileType, newFileSystemHandle, -} from "@fileone/convex/model/filesystem" +} from "@fileone/convex/filesystem" import { useMutation } from "@tanstack/react-query" import { createFileRoute } from "@tanstack/react-router" import type { Row, Table } from "@tanstack/react-table" diff --git a/packages/web/src/routes/_authenticated/_sidebar-layout/home.tsx b/apps/drive-web/src/routes/_authenticated/_sidebar-layout/home.tsx similarity index 100% rename from packages/web/src/routes/_authenticated/_sidebar-layout/home.tsx rename to apps/drive-web/src/routes/_authenticated/_sidebar-layout/home.tsx diff --git a/packages/web/src/routes/_authenticated/_sidebar-layout/trash.directories.$directoryId.tsx b/apps/drive-web/src/routes/_authenticated/_sidebar-layout/trash.directories.$directoryId.tsx similarity index 99% rename from packages/web/src/routes/_authenticated/_sidebar-layout/trash.directories.$directoryId.tsx rename to apps/drive-web/src/routes/_authenticated/_sidebar-layout/trash.directories.$directoryId.tsx index 58155ab..9b814eb 100644 --- a/packages/web/src/routes/_authenticated/_sidebar-layout/trash.directories.$directoryId.tsx +++ b/apps/drive-web/src/routes/_authenticated/_sidebar-layout/trash.directories.$directoryId.tsx @@ -4,7 +4,7 @@ import { type FileSystemItem, FileType, newFileSystemHandle, -} from "@fileone/convex/model/filesystem" +} from "@fileone/convex/filesystem" import { useMutation } from "@tanstack/react-query" import { createFileRoute } from "@tanstack/react-router" import type { Row, Table } from "@tanstack/react-table" diff --git a/packages/web/src/routes/_authenticated/index.tsx b/apps/drive-web/src/routes/_authenticated/index.tsx similarity index 100% rename from packages/web/src/routes/_authenticated/index.tsx rename to apps/drive-web/src/routes/_authenticated/index.tsx diff --git a/packages/web/src/routes/login.tsx b/apps/drive-web/src/routes/login.tsx similarity index 100% rename from packages/web/src/routes/login.tsx rename to apps/drive-web/src/routes/login.tsx diff --git a/packages/web/src/routes/login_.callback.tsx b/apps/drive-web/src/routes/login_.callback.tsx similarity index 100% rename from packages/web/src/routes/login_.callback.tsx rename to apps/drive-web/src/routes/login_.callback.tsx diff --git a/packages/web/src/routes/sign-up.tsx b/apps/drive-web/src/routes/sign-up.tsx similarity index 100% rename from packages/web/src/routes/sign-up.tsx rename to apps/drive-web/src/routes/sign-up.tsx diff --git a/packages/web/src/styles/globals.css b/apps/drive-web/src/styles/globals.css similarity index 100% rename from packages/web/src/styles/globals.css rename to apps/drive-web/src/styles/globals.css diff --git a/apps/drive-web/src/vite-env.d.ts b/apps/drive-web/src/vite-env.d.ts new file mode 100644 index 0000000..2bf437f --- /dev/null +++ b/apps/drive-web/src/vite-env.d.ts @@ -0,0 +1,10 @@ +/// + +declare global { + interface ImportMetaEnv { + readonly VITE_CONVEX_URL: string + readonly VITE_CONVEX_SITE_URL: string + } +} + +export {} diff --git a/packages/web/tsconfig.json b/apps/drive-web/tsconfig.json similarity index 80% rename from packages/web/tsconfig.json rename to apps/drive-web/tsconfig.json index 3fa7ced..369a4c1 100644 --- a/packages/web/tsconfig.json +++ b/apps/drive-web/tsconfig.json @@ -1,9 +1,9 @@ { "compilerOptions": { // Environment setup & latest features - "lib": ["ESNext", "DOM"], - "target": "ESNext", - "module": "Preserve", + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "target": "ES2020", + "module": "ESNext", "moduleDetection": "force", "jsx": "react-jsx", "allowJs": true, @@ -13,6 +13,8 @@ "allowImportingTsExtensions": true, "verbatimModuleSyntax": true, "noEmit": true, + "resolveJsonModule": true, + "isolatedModules": true, // Best practices "strict": true, @@ -32,5 +34,6 @@ "noPropertyAccessFromIndexSignature": false }, + "include": ["src"], "exclude": ["dist", "node_modules"] } diff --git a/apps/drive-web/tsconfig.node.json b/apps/drive-web/tsconfig.node.json new file mode 100644 index 0000000..544ed08 --- /dev/null +++ b/apps/drive-web/tsconfig.node.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "target": "ES2022", + "lib": ["ES2023"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/apps/drive-web/vite.config.ts b/apps/drive-web/vite.config.ts new file mode 100644 index 0000000..b9fcc6c --- /dev/null +++ b/apps/drive-web/vite.config.ts @@ -0,0 +1,30 @@ +import tailwindcss from "@tailwindcss/vite" +import { TanStackRouterVite } from "@tanstack/router-plugin/vite" +import react from "@vitejs/plugin-react" +import path from "path" +import { defineConfig } from "vite" + +export default defineConfig({ + plugins: [TanStackRouterVite(), react(), tailwindcss()], + resolve: { + alias: { + "@": path.resolve(__dirname, "./src"), + }, + }, + server: { + port: 3000, + host: true, + fs: { + allow: [".."], + }, + }, + optimizeDeps: { + include: ["convex/react", "convex-helpers"], + // Workaround for better-auth bug: https://github.com/better-auth/better-auth/issues/4457 + // Vite's esbuild incorrectly transpiles better-call dependency causing 'super' keyword errors + exclude: ["better-auth", "@convex-dev/better-auth"], + esbuildOptions: { + target: "esnext", + }, + }, +}) diff --git a/bun.lock b/bun.lock index caad210..7411864 100644 --- a/bun.lock +++ b/bun.lock @@ -3,31 +3,16 @@ "workspaces": { "": { "name": "fileone", + "dependencies": { + "@tailwindcss/vite": "^4.1.14", + }, "devDependencies": { "@biomejs/biome": "2.2.4", "@types/bun": "latest", "convex": "^1.27.0", }, }, - "packages/convex": { - "name": "@fileone/convex", - "dependencies": { - "@fileone/path": "workspace:*", - }, - "peerDependencies": { - "@convex-dev/better-auth": "^0.8.9", - "better-auth": "1.3.8", - "convex": "^1.27.0", - "typescript": "^5", - }, - }, - "packages/path": { - "name": "@fileone/path", - "peerDependencies": { - "typescript": "^5", - }, - }, - "packages/web": { + "apps/drive-web": { "name": "@fileone/web", "version": "0.1.0", "dependencies": { @@ -47,7 +32,6 @@ "@tanstack/react-table": "^8.21.3", "@tanstack/router-devtools": "^1.131.42", "better-auth": "1.3.8", - "bun-plugin-tailwind": "latest", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "convex": "^1.27.0", @@ -55,6 +39,7 @@ "jotai": "^2.14.0", "jotai-effect": "^2.1.3", "jotai-scope": "^0.9.5", + "jotai-tanstack-query": "^0.11.0", "lucide-react": "^0.544.0", "motion": "^12.23.16", "nanoid": "^5.1.6", @@ -68,10 +53,36 @@ }, "devDependencies": { "@tanstack/router-cli": "^1.131.41", + "@tanstack/router-plugin": "^1.133.13", + "@types/node": "^22.10.5", "@types/react": "^19", "@types/react-dom": "^19", + "@vitejs/plugin-react": "^5.0.4", + "vite": "^7.1.10", }, }, + "packages/convex": { + "name": "@fileone/convex", + "dependencies": { + "@fileone/path": "workspace:*", + }, + "peerDependencies": { + "@convex-dev/better-auth": "^0.8.9", + "better-auth": "1.3.8", + "convex": "^1.27.0", + "convex-helpers": "^0.1.104", + "typescript": "^5", + }, + }, + "packages/path": { + "name": "@fileone/path", + "peerDependencies": { + "typescript": "^5", + }, + }, + }, + "overrides": { + "convex": "1.28.0", }, "packages": { "@babel/code-frame": ["@babel/code-frame@7.27.1", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg=="], @@ -120,6 +131,10 @@ "@babel/plugin-transform-modules-commonjs": ["@babel/plugin-transform-modules-commonjs@7.27.1", "", { "dependencies": { "@babel/helper-module-transforms": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw=="], + "@babel/plugin-transform-react-jsx-self": ["@babel/plugin-transform-react-jsx-self@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw=="], + + "@babel/plugin-transform-react-jsx-source": ["@babel/plugin-transform-react-jsx-source@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw=="], + "@babel/plugin-transform-typescript": ["@babel/plugin-transform-typescript@7.28.0", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", "@babel/helper-create-class-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", "@babel/plugin-syntax-typescript": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg=="], "@babel/preset-typescript": ["@babel/preset-typescript@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-validator-option": "^7.27.1", "@babel/plugin-syntax-jsx": "^7.27.1", "@babel/plugin-transform-modules-commonjs": "^7.27.1", "@babel/plugin-transform-typescript": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ=="], @@ -208,7 +223,7 @@ "@fileone/path": ["@fileone/path@workspace:packages/path"], - "@fileone/web": ["@fileone/web@workspace:packages/web"], + "@fileone/web": ["@fileone/web@workspace:apps/drive-web"], "@floating-ui/core": ["@floating-ui/core@1.7.3", "", { "dependencies": { "@floating-ui/utils": "^0.2.10" } }, "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w=="], @@ -220,6 +235,8 @@ "@hexagon/base64": ["@hexagon/base64@1.1.28", "", {}, "sha512-lhqDEAvWixy3bZ+UOYbPwUbBkwBq5C1LAJ/xPC8Oi+lL54oyakv/npbA0aU2hgCsx/1NUd4IBvV03+aUBWxerw=="], + "@isaacs/fs-minipass": ["@isaacs/fs-minipass@4.0.1", "", { "dependencies": { "minipass": "^7.0.4" } }, "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w=="], + "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], "@jridgewell/remapping": ["@jridgewell/remapping@2.3.5", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ=="], @@ -236,34 +253,6 @@ "@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], - "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="], - - "@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="], - - "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="], - - "@oven/bun-darwin-aarch64": ["@oven/bun-darwin-aarch64@1.3.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-WeXSaL29ylJEZMYHHW28QZ6rgAbxQ1KuNSZD9gvd3fPlo0s6s2PglvPArjjP07nmvIK9m4OffN0k4M98O7WmAg=="], - - "@oven/bun-darwin-x64": ["@oven/bun-darwin-x64@1.3.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-CFKjoUWQH0Oz3UHYfKbdKLq0wGryrFsTJEYq839qAwHQSECvVZYAnxVVDYUDa0yQFonhO2qSHY41f6HK+b7xtw=="], - - "@oven/bun-darwin-x64-baseline": ["@oven/bun-darwin-x64-baseline@1.3.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-+FSr/ub5vA/EkD3fMhHJUzYioSf/sXd50OGxNDAntVxcDu4tXL/81Ka3R/gkZmjznpLFIzovU/1Ts+b7dlkrfw=="], - - "@oven/bun-linux-aarch64": ["@oven/bun-linux-aarch64@1.3.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-WHthS/eLkCNcp9pk4W8aubRl9fIUgt2XhHyLrP0GClB1FVvmodu/zIOtG0NXNpzlzB8+gglOkGo4dPjfVf4Z+g=="], - - "@oven/bun-linux-aarch64-musl": ["@oven/bun-linux-aarch64-musl@1.3.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-HT5sr7N8NDYbQRjAnT7ISpx64y+ewZZRQozOJb0+KQObKvg4UUNXGm4Pn1xA4/WPMZDDazjO8E2vtOQw1nJlAQ=="], - - "@oven/bun-linux-x64": ["@oven/bun-linux-x64@1.3.0", "", { "os": "linux", "cpu": "x64" }, "sha512-sGEWoJQXO4GDr0x4t/yJQ/Bq1yNkOdX9tHbZZ+DBGJt3z3r7jeb4Digv8xQUk6gdTFC9vnGHuin+KW3/yD1Aww=="], - - "@oven/bun-linux-x64-baseline": ["@oven/bun-linux-x64-baseline@1.3.0", "", { "os": "linux", "cpu": "x64" }, "sha512-OmlEH3nlxQyv7HOvTH21vyNAZGv9DIPnrTznzvKiOQxkOphhCyKvPTlF13ydw4s/i18iwaUrhHy+YG9HSSxa4Q=="], - - "@oven/bun-linux-x64-musl": ["@oven/bun-linux-x64-musl@1.3.0", "", { "os": "linux", "cpu": "x64" }, "sha512-rtzUEzCynl3Rhgn/iR9DQezSFiZMcAXAbU+xfROqsweMGKwvwIA2ckyyckO08psEP8XcUZTs3LT9CH7PnaMiEA=="], - - "@oven/bun-linux-x64-musl-baseline": ["@oven/bun-linux-x64-musl-baseline@1.3.0", "", { "os": "linux", "cpu": "x64" }, "sha512-hrr7mDvUjMX1tuJaXz448tMsgKIqGJBY8+rJqztKOw1U5+a/v2w5HuIIW1ce7ut0ZwEn+KIDvAujlPvpH33vpQ=="], - - "@oven/bun-windows-x64": ["@oven/bun-windows-x64@1.3.0", "", { "os": "win32", "cpu": "x64" }, "sha512-xXwtpZVVP7T+vkxcF/TUVVOGRjEfkByO4mKveKYb4xnHWV4u4NnV0oNmzyMKkvmj10to5j2h0oZxA4ZVVv4gfA=="], - - "@oven/bun-windows-x64-baseline": ["@oven/bun-windows-x64-baseline@1.3.0", "", { "os": "win32", "cpu": "x64" }, "sha512-/jVZ8eYjpYHLDFNoT86cP+AjuWvpkzFY+0R0a1bdeu0sQ6ILuy1FV6hz1hUAP390E09VCo5oP76fnx29giHTtA=="], - "@peculiar/asn1-android": ["@peculiar/asn1-android@2.5.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.5.0", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "sha512-t8A83hgghWQkcneRsgGs2ebAlRe54ns88p7ouv8PW2tzF1nAW4yHcL4uZKrFpIU+uszIRzTkcCuie37gpkId0A=="], "@peculiar/asn1-cms": ["@peculiar/asn1-cms@2.5.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.5.0", "@peculiar/asn1-x509": "^2.5.0", "@peculiar/asn1-x509-attr": "^2.5.0", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "sha512-p0SjJ3TuuleIvjPM4aYfvYw8Fk1Hn/zAVyPJZTtZ2eE9/MIer6/18ROxX6N/e6edVSfvuZBqhxAj3YgsmSjQ/A=="], @@ -358,6 +347,8 @@ "@radix-ui/rect": ["@radix-ui/rect@1.1.1", "", {}, "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw=="], + "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-beta.38", "", {}, "sha512-N/ICGKleNhA5nc9XXQG/kkKHJ7S55u0x0XUJbbkmdCnFuoRkM1Il12q9q0eX19+M7KKUEPw/daUPIRnxhcxAIw=="], + "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.52.4", "", { "os": "android", "cpu": "arm" }, "sha512-BTm2qKNnWIQ5auf4deoetINJm2JzvihvGb9R6K/ETwKLql/Bb3Eg2H1FBp1gUb4YGbydMA3jcmQTR73q7J+GAA=="], "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.52.4", "", { "os": "android", "cpu": "arm64" }, "sha512-P9LDQiC5vpgGFgz7GSM6dKPCiqR3XYN1WwJKA4/BUVDjHpYsf3iBEmVz62uyq20NGYbiGPR5cNHI7T1HqxNs2w=="], @@ -406,47 +397,91 @@ "@simplewebauthn/server": ["@simplewebauthn/server@13.2.2", "", { "dependencies": { "@hexagon/base64": "^1.1.27", "@levischuck/tiny-cbor": "^0.2.2", "@peculiar/asn1-android": "^2.3.10", "@peculiar/asn1-ecc": "^2.3.8", "@peculiar/asn1-rsa": "^2.3.8", "@peculiar/asn1-schema": "^2.3.8", "@peculiar/asn1-x509": "^2.3.8", "@peculiar/x509": "^1.13.0" } }, "sha512-HcWLW28yTMGXpwE9VLx9J+N2KEUaELadLrkPEEI9tpI5la70xNEVEsu/C+m3u7uoq4FulLqZQhgBCzR9IZhFpA=="], - "@tanstack/history": ["@tanstack/history@1.132.31", "", {}, "sha512-UCHM2uS0t/uSszqPEo+SBSSoQVeQ+LlOWAVBl5SA7+AedeAbKafIPjFn8huZCXNLAYb0WKV2+wETr7lDK9uz7g=="], + "@tailwindcss/node": ["@tailwindcss/node@4.1.14", "", { "dependencies": { "@jridgewell/remapping": "^2.3.4", "enhanced-resolve": "^5.18.3", "jiti": "^2.6.0", "lightningcss": "1.30.1", "magic-string": "^0.30.19", "source-map-js": "^1.2.1", "tailwindcss": "4.1.14" } }, "sha512-hpz+8vFk3Ic2xssIA3e01R6jkmsAhvkQdXlEbRTk6S10xDAtiQiM3FyvZVGsucefq764euO/b8WUW9ysLdThHw=="], - "@tanstack/query-core": ["@tanstack/query-core@5.90.2", "", {}, "sha512-k/TcR3YalnzibscALLwxeiLUub6jN5EDLwKDiO7q5f4ICEoptJ+n9+7vcEFy5/x/i6Q+Lb/tXrsKCggf5uQJXQ=="], + "@tailwindcss/oxide": ["@tailwindcss/oxide@4.1.14", "", { "dependencies": { "detect-libc": "^2.0.4", "tar": "^7.5.1" }, "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.1.14", "@tailwindcss/oxide-darwin-arm64": "4.1.14", "@tailwindcss/oxide-darwin-x64": "4.1.14", "@tailwindcss/oxide-freebsd-x64": "4.1.14", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.14", "@tailwindcss/oxide-linux-arm64-gnu": "4.1.14", "@tailwindcss/oxide-linux-arm64-musl": "4.1.14", "@tailwindcss/oxide-linux-x64-gnu": "4.1.14", "@tailwindcss/oxide-linux-x64-musl": "4.1.14", "@tailwindcss/oxide-wasm32-wasi": "4.1.14", "@tailwindcss/oxide-win32-arm64-msvc": "4.1.14", "@tailwindcss/oxide-win32-x64-msvc": "4.1.14" } }, "sha512-23yx+VUbBwCg2x5XWdB8+1lkPajzLmALEfMb51zZUBYaYVPDQvBSD/WYDqiVyBIo2BZFa3yw1Rpy3G2Jp+K0dw=="], - "@tanstack/react-query": ["@tanstack/react-query@5.90.2", "", { "dependencies": { "@tanstack/query-core": "5.90.2" }, "peerDependencies": { "react": "^18 || ^19" } }, "sha512-CLABiR+h5PYfOWr/z+vWFt5VsOA2ekQeRQBFSKlcoW6Ndx/f8rfyVmq4LbgOM4GG2qtxAxjLYLOpCNTYm4uKzw=="], + "@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.1.14", "", { "os": "android", "cpu": "arm64" }, "sha512-a94ifZrGwMvbdeAxWoSuGcIl6/DOP5cdxagid7xJv6bwFp3oebp7y2ImYsnZBMTwjn5Ev5xESvS3FFYUGgPODQ=="], - "@tanstack/react-router": ["@tanstack/react-router@1.132.37", "", { "dependencies": { "@tanstack/history": "1.132.31", "@tanstack/react-store": "^0.7.0", "@tanstack/router-core": "1.132.37", "isbot": "^5.1.22", "tiny-invariant": "^1.3.3", "tiny-warning": "^1.0.3" }, "peerDependencies": { "react": ">=18.0.0 || >=19.0.0", "react-dom": ">=18.0.0 || >=19.0.0" } }, "sha512-HwF9ZIkPt1AQnj18t1z+T8iB/gF4ldG5Pk9vDWcUbt8luWzBJOyOkTJGgbMpviuLEP79LBwEsXuWZ964upNd8g=="], + "@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.1.14", "", { "os": "darwin", "cpu": "arm64" }, "sha512-HkFP/CqfSh09xCnrPJA7jud7hij5ahKyWomrC3oiO2U9i0UjP17o9pJbxUN0IJ471GTQQmzwhp0DEcpbp4MZTA=="], - "@tanstack/react-router-devtools": ["@tanstack/react-router-devtools@1.132.37", "", { "dependencies": { "@tanstack/router-devtools-core": "1.132.37", "vite": "^7.1.7" }, "peerDependencies": { "@tanstack/react-router": "^1.132.37", "react": ">=18.0.0 || >=19.0.0", "react-dom": ">=18.0.0 || >=19.0.0" } }, "sha512-6zKjnB1gTfM1UZiEe2I4bSIxxJ0Z1xC57R02l6ogRzyaqEimMIUFv873earTiWNlWwvKVuiBrwgE5/hsivgqNg=="], + "@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.1.14", "", { "os": "darwin", "cpu": "x64" }, "sha512-eVNaWmCgdLf5iv6Qd3s7JI5SEFBFRtfm6W0mphJYXgvnDEAZ5sZzqmI06bK6xo0IErDHdTA5/t7d4eTfWbWOFw=="], + + "@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.1.14", "", { "os": "freebsd", "cpu": "x64" }, "sha512-QWLoRXNikEuqtNb0dhQN6wsSVVjX6dmUFzuuiL09ZeXju25dsei2uIPl71y2Ic6QbNBsB4scwBoFnlBfabHkEw=="], + + "@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.1.14", "", { "os": "linux", "cpu": "arm" }, "sha512-VB4gjQni9+F0VCASU+L8zSIyjrLLsy03sjcR3bM0V2g4SNamo0FakZFKyUQ96ZVwGK4CaJsc9zd/obQy74o0Fw=="], + + "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.1.14", "", { "os": "linux", "cpu": "arm64" }, "sha512-qaEy0dIZ6d9vyLnmeg24yzA8XuEAD9WjpM5nIM1sUgQ/Zv7cVkharPDQcmm/t/TvXoKo/0knI3me3AGfdx6w1w=="], + + "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.1.14", "", { "os": "linux", "cpu": "arm64" }, "sha512-ISZjT44s59O8xKsPEIesiIydMG/sCXoMBCqsphDm/WcbnuWLxxb+GcvSIIA5NjUw6F8Tex7s5/LM2yDy8RqYBQ=="], + + "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.1.14", "", { "os": "linux", "cpu": "x64" }, "sha512-02c6JhLPJj10L2caH4U0zF8Hji4dOeahmuMl23stk0MU1wfd1OraE7rOloidSF8W5JTHkFdVo/O7uRUJJnUAJg=="], + + "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.1.14", "", { "os": "linux", "cpu": "x64" }, "sha512-TNGeLiN1XS66kQhxHG/7wMeQDOoL0S33x9BgmydbrWAb9Qw0KYdd8o1ifx4HOGDWhVmJ+Ul+JQ7lyknQFilO3Q=="], + + "@tailwindcss/oxide-wasm32-wasi": ["@tailwindcss/oxide-wasm32-wasi@4.1.14", "", { "dependencies": { "@emnapi/core": "^1.5.0", "@emnapi/runtime": "^1.5.0", "@emnapi/wasi-threads": "^1.1.0", "@napi-rs/wasm-runtime": "^1.0.5", "@tybys/wasm-util": "^0.10.1", "tslib": "^2.4.0" }, "cpu": "none" }, "sha512-uZYAsaW/jS/IYkd6EWPJKW/NlPNSkWkBlaeVBi/WsFQNP05/bzkebUL8FH1pdsqx4f2fH/bWFcUABOM9nfiJkQ=="], + + "@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.1.14", "", { "os": "win32", "cpu": "arm64" }, "sha512-Az0RnnkcvRqsuoLH2Z4n3JfAef0wElgzHD5Aky/e+0tBUxUhIeIqFBTMNQvmMRSP15fWwmvjBxZ3Q8RhsDnxAA=="], + + "@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.1.14", "", { "os": "win32", "cpu": "x64" }, "sha512-ttblVGHgf68kEE4om1n/n44I0yGPkCPbLsqzjvybhpwa6mKKtgFfAzy6btc3HRmuW7nHe0OOrSeNP9sQmmH9XA=="], + + "@tailwindcss/vite": ["@tailwindcss/vite@4.1.14", "", { "dependencies": { "@tailwindcss/node": "4.1.14", "@tailwindcss/oxide": "4.1.14", "tailwindcss": "4.1.14" }, "peerDependencies": { "vite": "^5.2.0 || ^6 || ^7" } }, "sha512-BoFUoU0XqgCUS1UXWhmDJroKKhNXeDzD7/XwabjkDIAbMnc4ULn5e2FuEuBbhZ6ENZoSYzKlzvZ44Yr6EUDUSA=="], + + "@tanstack/history": ["@tanstack/history@1.133.3", "", {}, "sha512-zFQnGdX0S4g5xRuS+95iiEXM+qlGvYG7ksmOKx7LaMv60lDWa0imR8/24WwXXvBWJT1KnwVdZcjvhCwz9IiJCw=="], + + "@tanstack/query-core": ["@tanstack/query-core@5.90.5", "", {}, "sha512-wLamYp7FaDq6ZnNehypKI5fNvxHPfTYylE0m/ZpuuzJfJqhR5Pxg9gvGBHZx4n7J+V5Rg5mZxHHTlv25Zt5u+w=="], + + "@tanstack/react-query": ["@tanstack/react-query@5.90.5", "", { "dependencies": { "@tanstack/query-core": "5.90.5" }, "peerDependencies": { "react": "^18 || ^19" } }, "sha512-pN+8UWpxZkEJ/Rnnj2v2Sxpx1WFlaa9L6a4UO89p6tTQbeo+m0MS8oYDjbggrR8QcTyjKoYWKS3xJQGr3ExT8Q=="], + + "@tanstack/react-router": ["@tanstack/react-router@1.133.12", "", { "dependencies": { "@tanstack/history": "1.133.3", "@tanstack/react-store": "^0.7.0", "@tanstack/router-core": "1.133.12", "isbot": "^5.1.22", "tiny-invariant": "^1.3.3", "tiny-warning": "^1.0.3" }, "peerDependencies": { "react": ">=18.0.0 || >=19.0.0", "react-dom": ">=18.0.0 || >=19.0.0" } }, "sha512-IS4/KU2r5PcVsD6PVRK6ZQtn2yVv0HGKpo/8bqbnb13j1f6Osj7VCpZ4n0ur151zMsG4MNkbtfzdJjipLnrFyA=="], + + "@tanstack/react-router-devtools": ["@tanstack/react-router-devtools@1.133.12", "", { "dependencies": { "@tanstack/router-devtools-core": "1.133.12", "vite": "^7.1.7" }, "peerDependencies": { "@tanstack/react-router": "^1.133.12", "react": ">=18.0.0 || >=19.0.0", "react-dom": ">=18.0.0 || >=19.0.0" } }, "sha512-g5rL5mY99hGyZvqdyCCfppZNa4XcaSw2QBPFujBevZa2HDVW2c9msflr7HWOw83SrZUq8cQH5dHFNzRypcqtxg=="], "@tanstack/react-store": ["@tanstack/react-store@0.7.7", "", { "dependencies": { "@tanstack/store": "0.7.7", "use-sync-external-store": "^1.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-qqT0ufegFRDGSof9D/VqaZgjNgp4tRPHZIJq2+QIHkMUtHjaJ0lYrrXjeIUJvjnTbgPfSD1XgOMEt0lmANn6Zg=="], "@tanstack/react-table": ["@tanstack/react-table@8.21.3", "", { "dependencies": { "@tanstack/table-core": "8.21.3" }, "peerDependencies": { "react": ">=16.8", "react-dom": ">=16.8" } }, "sha512-5nNMTSETP4ykGegmVkhjcS8tTLW6Vl4axfEGQN3v0zdHYbK4UfoqfPChclTrJ4EoK9QynqAu9oUf8VEmrpZ5Ww=="], - "@tanstack/router-cli": ["@tanstack/router-cli@1.132.37", "", { "dependencies": { "@tanstack/router-generator": "1.132.37", "chokidar": "^3.6.0", "yargs": "^17.7.2" }, "bin": { "tsr": "bin/tsr.cjs" } }, "sha512-dc7156OyQEFgn1pS3t8BGEtkfpXex0hOCTbeOqMISDT2Jl7kQkx9xJwmEUdp990Kyy4eKgr9+gYQgP8iwepfJw=="], + "@tanstack/router-cli": ["@tanstack/router-cli@1.133.12", "", { "dependencies": { "@tanstack/router-generator": "1.133.12", "chokidar": "^3.6.0", "yargs": "^17.7.2" }, "bin": { "tsr": "bin/tsr.cjs" } }, "sha512-5rBpY1yixbxtuLarXSTXK6mD2Wrluyqy9/LRS1k9o61dLiBi9L4HlYkkXkKtpvOXb4VhxlqgmSg2JwASYCi2ng=="], - "@tanstack/router-core": ["@tanstack/router-core@1.132.37", "", { "dependencies": { "@tanstack/history": "1.132.31", "@tanstack/store": "^0.7.0", "cookie-es": "^2.0.0", "seroval": "^1.3.2", "seroval-plugins": "^1.3.2", "tiny-invariant": "^1.3.3", "tiny-warning": "^1.0.3" } }, "sha512-7I+1qGY6uAKwh6q5QsNU8+DXDbnXfobizHIDo8ff+fkiMy9l00eGBCUQRSZa0KuE9kJAPHuCxtB/MLxsHNEoQg=="], + "@tanstack/router-core": ["@tanstack/router-core@1.133.13", "", { "dependencies": { "@tanstack/history": "1.133.3", "@tanstack/store": "^0.7.0", "cookie-es": "^2.0.0", "seroval": "^1.3.2", "seroval-plugins": "^1.3.2", "tiny-invariant": "^1.3.3", "tiny-warning": "^1.0.3" } }, "sha512-zZptdlS/wSkqozb07Y3zX5gas2OapJdjEG6/Id0e/twNefVdR4EY2TK/mgvyhHtKIpCxIcnZz/3opypgeQi9bg=="], - "@tanstack/router-devtools": ["@tanstack/router-devtools@1.132.37", "", { "dependencies": { "@tanstack/react-router-devtools": "1.132.37", "clsx": "^2.1.1", "goober": "^2.1.16", "vite": "^7.1.7" }, "peerDependencies": { "@tanstack/react-router": "^1.132.37", "csstype": "^3.0.10", "react": ">=18.0.0 || >=19.0.0", "react-dom": ">=18.0.0 || >=19.0.0" }, "optionalPeers": ["csstype"] }, "sha512-EHI5DWm+XBGZ3ENXjyVMyUk+5GSovIXI9fTPiy516P3G+DciTpThHhm6TtFr4AhlFjFX1vBLguoASsXWFNgyRQ=="], + "@tanstack/router-devtools": ["@tanstack/router-devtools@1.133.12", "", { "dependencies": { "@tanstack/react-router-devtools": "1.133.12", "clsx": "^2.1.1", "goober": "^2.1.16", "vite": "^7.1.7" }, "peerDependencies": { "@tanstack/react-router": "^1.133.12", "csstype": "^3.0.10", "react": ">=18.0.0 || >=19.0.0", "react-dom": ">=18.0.0 || >=19.0.0" }, "optionalPeers": ["csstype"] }, "sha512-CMXzbl7CEAjlR2KxadTY/HdzKElIiU2DHDjxxnZLabFepkAF5rlVZtqY0W+fQA1CnRCJMKsWXnA9hTUpOzgsyQ=="], - "@tanstack/router-devtools-core": ["@tanstack/router-devtools-core@1.132.37", "", { "dependencies": { "clsx": "^2.1.1", "goober": "^2.1.16", "solid-js": "^1.9.5", "vite": "^7.1.7" }, "peerDependencies": { "@tanstack/router-core": "^1.132.37", "csstype": "^3.0.10", "tiny-invariant": "^1.3.3" }, "optionalPeers": ["csstype"] }, "sha512-/faZqU6zrFpwNlpWlFgjOnrpKpN7s23kGtz7HLXXOnqEBPO+GdayxMszwG1q9Yv47YIRjk1CWmAnjM9q6cQ6pQ=="], + "@tanstack/router-devtools-core": ["@tanstack/router-devtools-core@1.133.12", "", { "dependencies": { "clsx": "^2.1.1", "goober": "^2.1.16", "vite": "^7.1.7" }, "peerDependencies": { "@tanstack/router-core": "^1.133.12", "csstype": "^3.0.10", "solid-js": ">=1.9.5", "tiny-invariant": "^1.3.3" }, "optionalPeers": ["csstype"] }, "sha512-MimpwjKda6CnQcgCH9K4XWonOlKT5qyKfSbmZSAc4AhUDYcUmkP+yWZ9FobFAHOZiU6KHpUpCs8nwchAjBp3wA=="], - "@tanstack/router-generator": ["@tanstack/router-generator@1.132.37", "", { "dependencies": { "@tanstack/router-core": "1.132.37", "@tanstack/router-utils": "1.132.31", "@tanstack/virtual-file-routes": "1.132.31", "prettier": "^3.5.0", "recast": "^0.23.11", "source-map": "^0.7.4", "tsx": "^4.19.2", "zod": "^3.24.2" } }, "sha512-bR+wfGOnHIZdzx7FSktqpnYf9McBDwLiaV6HFKu4Mvlg5KXZEOJDBfW3HX0oURpEMGJfcaRdMY8n5/lTFx3v5A=="], + "@tanstack/router-generator": ["@tanstack/router-generator@1.133.12", "", { "dependencies": { "@tanstack/router-core": "1.133.12", "@tanstack/router-utils": "1.133.3", "@tanstack/virtual-file-routes": "1.133.3", "prettier": "^3.5.0", "recast": "^0.23.11", "source-map": "^0.7.4", "tsx": "^4.19.2", "zod": "^3.24.2" } }, "sha512-4Z/h6s/g6kCw7eMDbNkKqcl2QB89/N9FDlZXnlzmGfUtk0wxnpJTgFEIIiFN9YiSdvVTg6HX2Qo6UwOzTDsdEQ=="], - "@tanstack/router-utils": ["@tanstack/router-utils@1.132.31", "", { "dependencies": { "@babel/core": "^7.27.4", "@babel/generator": "^7.27.5", "@babel/parser": "^7.27.5", "@babel/preset-typescript": "^7.27.1", "ansis": "^4.1.0", "diff": "^8.0.2", "fast-glob": "^3.3.3", "pathe": "^2.0.3" } }, "sha512-uf8mQ3wV58K8TL5XXBoWhkYxmCV7LLWbbf6AvcxdhnCnBNmXBGlY+T8RdsRnXyI2Iyp2HfHaVZ+8H3CEQedXfw=="], + "@tanstack/router-plugin": ["@tanstack/router-plugin@1.133.13", "", { "dependencies": { "@babel/core": "^7.27.7", "@babel/plugin-syntax-jsx": "^7.27.1", "@babel/plugin-syntax-typescript": "^7.27.1", "@babel/template": "^7.27.2", "@babel/traverse": "^7.27.7", "@babel/types": "^7.27.7", "@tanstack/router-core": "1.133.13", "@tanstack/router-generator": "1.133.13", "@tanstack/router-utils": "1.133.3", "@tanstack/virtual-file-routes": "1.133.3", "babel-dead-code-elimination": "^1.0.10", "chokidar": "^3.6.0", "unplugin": "^2.1.2", "zod": "^3.24.2" }, "peerDependencies": { "@rsbuild/core": ">=1.0.2", "@tanstack/react-router": "^1.133.13", "vite": ">=5.0.0 || >=6.0.0 || >=7.0.0", "vite-plugin-solid": "^2.11.8", "webpack": ">=5.92.0" }, "optionalPeers": ["@rsbuild/core", "@tanstack/react-router", "vite", "vite-plugin-solid", "webpack"] }, "sha512-R5cbCwdw5chQhgaVERE2JlPpGWcER4FuVkRGDbLaW/rpawIskJCjkAbhqyfgXPF8VsEUOs9+7FK6ocODnqM/qA=="], + + "@tanstack/router-utils": ["@tanstack/router-utils@1.133.3", "", { "dependencies": { "@babel/core": "^7.27.4", "@babel/generator": "^7.27.5", "@babel/parser": "^7.27.5", "@babel/preset-typescript": "^7.27.1", "ansis": "^4.1.0", "diff": "^8.0.2", "pathe": "^2.0.3", "tinyglobby": "^0.2.15" } }, "sha512-miPFlt0aG6ID5VDolYuRXgLS7cofvbZGMvHwf2Wmyxjo6GLp/kxxpkQrfM4T1I5cwjwYZZAQmdUKbVHwFZz9sQ=="], "@tanstack/store": ["@tanstack/store@0.7.7", "", {}, "sha512-xa6pTan1bcaqYDS9BDpSiS63qa6EoDkPN9RsRaxHuDdVDNntzq3xNwR5YKTU/V3SkSyC9T4YVOPh2zRQN0nhIQ=="], "@tanstack/table-core": ["@tanstack/table-core@8.21.3", "", {}, "sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg=="], - "@tanstack/virtual-file-routes": ["@tanstack/virtual-file-routes@1.132.31", "", {}, "sha512-rxS8Cm2nIXroLqkm9pE/8X2lFNuvcTIIiFi5VH4PwzvKscAuaW3YRMN1WmaGDI2mVEn+GLaoY6Kc3jOczL5i4w=="], + "@tanstack/virtual-file-routes": ["@tanstack/virtual-file-routes@1.133.3", "", {}, "sha512-6d2AP9hAjEi8mcIew2RkxBX+wClH1xedhfaYhs8fUiX+V2Cedk7RBD9E9ww2z6BGUYD8Es4fS0OIrzXZWHKGhw=="], - "@types/bun": ["@types/bun@1.2.23", "", { "dependencies": { "bun-types": "1.2.23" } }, "sha512-le8ueOY5b6VKYf19xT3McVbXqLqmxzPXHsQT/q9JHgikJ2X22wyTW3g3ohz2ZMnp7dod6aduIiq8A14Xyimm0A=="], + "@types/babel__core": ["@types/babel__core@7.20.5", "", { "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" } }, "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA=="], + + "@types/babel__generator": ["@types/babel__generator@7.27.0", "", { "dependencies": { "@babel/types": "^7.0.0" } }, "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg=="], + + "@types/babel__template": ["@types/babel__template@7.4.4", "", { "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A=="], + + "@types/babel__traverse": ["@types/babel__traverse@7.28.0", "", { "dependencies": { "@babel/types": "^7.28.2" } }, "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q=="], + + "@types/bun": ["@types/bun@1.3.0", "", { "dependencies": { "bun-types": "1.3.0" } }, "sha512-+lAGCYjXjip2qY375xX/scJeVRmZ5cY0wyHYyCYxNcdEXrQ4AOe3gACgd4iQ8ksOslJtW4VNxBJ8llUwc3a6AA=="], "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], - "@types/node": ["@types/node@24.6.2", "", { "dependencies": { "undici-types": "~7.13.0" } }, "sha512-d2L25Y4j+W3ZlNAeMKcy7yDsK425ibcAOO2t7aPTz6gNMH0z2GThtwENCDc0d/Pw9wgyRqE5Px1wkV7naz8ang=="], + "@types/node": ["@types/node@22.18.11", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-Gd33J2XIrXurb+eT2ktze3rJAfAp9ZNjlBdh4SVgyrKEOADwCbdUDaK7QgJno8Ue4kcajscsKqu6n8OBG3hhCQ=="], - "@types/react": ["@types/react@19.2.0", "", { "dependencies": { "csstype": "^3.0.2" } }, "sha512-1LOH8xovvsKsCBq1wnT4ntDUdCJKmnEakhsuoUSy6ExlHCkGP2hqnatagYTgFk6oeL0VU31u7SNjunPN+GchtA=="], + "@types/react": ["@types/react@19.2.2", "", { "dependencies": { "csstype": "^3.0.2" } }, "sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA=="], - "@types/react-dom": ["@types/react-dom@19.2.0", "", { "peerDependencies": { "@types/react": "^19.2.0" } }, "sha512-brtBs0MnE9SMx7px208g39lRmC5uHZs96caOJfTjFcYSLHNamvaSMfJNagChVNkup2SdtOxKX1FDBkRSJe1ZAg=="], + "@types/react-dom": ["@types/react-dom@19.2.2", "", { "peerDependencies": { "@types/react": "^19.2.0" } }, "sha512-9KQPoO6mZCi7jcIStSnlOWn2nEF3mNmyr3rIAsGnAbQKYbRLyqmeSc39EVgtxXVia+LMT8j3knZLAZAh+xLmrw=="], + + "@vitejs/plugin-react": ["@vitejs/plugin-react@5.0.4", "", { "dependencies": { "@babel/core": "^7.28.4", "@babel/plugin-transform-react-jsx-self": "^7.27.1", "@babel/plugin-transform-react-jsx-source": "^7.27.1", "@rolldown/pluginutils": "1.0.0-beta.38", "@types/babel__core": "^7.20.5", "react-refresh": "^0.17.0" }, "peerDependencies": { "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" } }, "sha512-La0KD0vGkVkSk6K+piWDKRUyg8Rl5iAIKRMH0vMJI0Eg47bq1eOxmoObAaQG37WMW9MSyk7Cs8EIWwJC1PtzKA=="], + + "acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], "ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], @@ -462,7 +497,9 @@ "ast-types": ["ast-types@0.16.1", "", { "dependencies": { "tslib": "^2.0.1" } }, "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg=="], - "baseline-browser-mapping": ["baseline-browser-mapping@2.8.12", "", { "bin": { "baseline-browser-mapping": "dist/cli.js" } }, "sha512-vAPMQdnyKCBtkmQA6FMCBvU9qFIppS3nzyXnEM+Lo2IAhG4Mpjv9cCxMudhgV3YdNNJv6TNqXy97dfRVL2LmaQ=="], + "babel-dead-code-elimination": ["babel-dead-code-elimination@1.0.10", "", { "dependencies": { "@babel/core": "^7.23.7", "@babel/parser": "^7.23.6", "@babel/traverse": "^7.23.7", "@babel/types": "^7.23.6" } }, "sha512-DV5bdJZTzZ0zn0DC24v3jD7Mnidh6xhKa4GfKCbq3sfW8kaWhDdZjP3i81geA8T33tdYqWKw4D3fVv0CwEgKVA=="], + + "baseline-browser-mapping": ["baseline-browser-mapping@2.8.17", "", { "bin": { "baseline-browser-mapping": "dist/cli.js" } }, "sha512-j5zJcx6golJYTG6c05LUZ3Z8Gi+M62zRT/ycz4Xq4iCOdpcxwg7ngEYD4KA0eWZC7U17qh/Smq8bYbACJ0ipBA=="], "better-auth": ["better-auth@1.3.8", "", { "dependencies": { "@better-auth/utils": "0.2.6", "@better-fetch/fetch": "^1.1.18", "@noble/ciphers": "^0.6.0", "@noble/hashes": "^1.8.0", "@simplewebauthn/browser": "^13.1.2", "@simplewebauthn/server": "^13.1.2", "better-call": "1.0.16", "defu": "^6.1.4", "jose": "^5.10.0", "kysely": "^0.28.5", "nanostores": "^0.11.4", "zod": "^4.1.5" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["react", "react-dom"] }, "sha512-uRFzHbWkhr8eWNy+BJwyMnrZPOvQjwrcLND3nc6jusRteYA9cjeRGElgCPTWTIyWUfzaQ708Lb5Mdq9Gv41Qpw=="], @@ -474,16 +511,14 @@ "browserslist": ["browserslist@4.26.3", "", { "dependencies": { "baseline-browser-mapping": "^2.8.9", "caniuse-lite": "^1.0.30001746", "electron-to-chromium": "^1.5.227", "node-releases": "^2.0.21", "update-browserslist-db": "^1.1.3" }, "bin": { "browserslist": "cli.js" } }, "sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w=="], - "bun": ["bun@1.3.0", "", { "optionalDependencies": { "@oven/bun-darwin-aarch64": "1.3.0", "@oven/bun-darwin-x64": "1.3.0", "@oven/bun-darwin-x64-baseline": "1.3.0", "@oven/bun-linux-aarch64": "1.3.0", "@oven/bun-linux-aarch64-musl": "1.3.0", "@oven/bun-linux-x64": "1.3.0", "@oven/bun-linux-x64-baseline": "1.3.0", "@oven/bun-linux-x64-musl": "1.3.0", "@oven/bun-linux-x64-musl-baseline": "1.3.0", "@oven/bun-windows-x64": "1.3.0", "@oven/bun-windows-x64-baseline": "1.3.0" }, "os": [ "linux", "win32", "darwin", ], "cpu": [ "x64", "arm64", ], "bin": { "bun": "bin/bun.exe", "bunx": "bin/bunx.exe" } }, "sha512-YI7mFs7iWc/VsGsh2aw6eAPD2cjzn1j+LKdYVk09x1CrdTWKYIHyd+dG5iQoN9//3hCDoZj8U6vKpZzEf5UARA=="], + "bun-types": ["bun-types@1.3.0", "", { "dependencies": { "@types/node": "*" }, "peerDependencies": { "@types/react": "^19" } }, "sha512-u8X0thhx+yJ0KmkxuEo9HAtdfgCBaM/aI9K90VQcQioAmkVp3SG3FkwWGibUFz3WdXAdcsqOcbU40lK7tbHdkQ=="], - "bun-plugin-tailwind": ["bun-plugin-tailwind@0.1.2", "", { "peerDependencies": { "bun": ">=1.0.0" } }, "sha512-41jNC1tZRSK3s1o7pTNrLuQG8kL/0vR/JgiTmZAJ1eHwe0w5j6HFPKeqEk0WAD13jfrUC7+ULuewFBBCoADPpg=="], - - "bun-types": ["bun-types@1.2.23", "", { "dependencies": { "@types/node": "*" }, "peerDependencies": { "@types/react": "^19" } }, "sha512-R9f0hKAZXgFU3mlrA0YpE/fiDvwV0FT9rORApt2aQVWSuJDzZOyB5QLc0N/4HF57CS8IXJ6+L5E4W1bW6NS2Aw=="], - - "caniuse-lite": ["caniuse-lite@1.0.30001747", "", {}, "sha512-mzFa2DGIhuc5490Nd/G31xN1pnBnYMadtkyTjefPI7wzypqgCEpeWu9bJr0OnDsyKrW75zA9ZAt7pbQFmwLsQg=="], + "caniuse-lite": ["caniuse-lite@1.0.30001751", "", {}, "sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw=="], "chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], + "chownr": ["chownr@3.0.0", "", {}, "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g=="], + "class-variance-authority": ["class-variance-authority@0.7.1", "", { "dependencies": { "clsx": "^2.1.1" } }, "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg=="], "cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], @@ -498,7 +533,7 @@ "convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="], - "convex": ["convex@1.27.3", "", { "dependencies": { "esbuild": "0.25.4", "jwt-decode": "^4.0.0", "prettier": "^3.0.0" }, "peerDependencies": { "@auth0/auth0-react": "^2.0.1", "@clerk/clerk-react": "^4.12.8 || ^5.0.0", "react": "^18.0.0 || ^19.0.0-0 || ^19.0.0" }, "optionalPeers": ["@auth0/auth0-react", "@clerk/clerk-react", "react"], "bin": { "convex": "bin/main.js" } }, "sha512-Ebr9lPgXkL7JO5IFr3bG+gYvHskyJjc96Fx0BBNkJUDXrR/bd9/uI4q8QszbglK75XfDu068vR0d/HK2T7tB9Q=="], + "convex": ["convex@1.28.0", "", { "dependencies": { "esbuild": "0.25.4", "prettier": "^3.0.0" }, "peerDependencies": { "@auth0/auth0-react": "^2.0.1", "@clerk/clerk-react": "^4.12.8 || ^5.0.0", "react": "^18.0.0 || ^19.0.0-0 || ^19.0.0" }, "optionalPeers": ["@auth0/auth0-react", "@clerk/clerk-react", "react"], "bin": { "convex": "bin/main.js" } }, "sha512-40FgeJ/LxP9TxnkDDztU/A5gcGTdq1klcTT5mM0Ak+kSlQiDktMpjNX1TfkWLxXaE3lI4qvawKH95v2RiYgFxA=="], "convex-helpers": ["convex-helpers@0.1.104", "", { "peerDependencies": { "@standard-schema/spec": "^1.0.0", "convex": "^1.24.0", "hono": "^4.0.5", "react": "^17.0.2 || ^18.0.0 || ^19.0.0", "typescript": "^5.5", "zod": "^3.22.4 || ^4.0.15" }, "optionalPeers": ["@standard-schema/spec", "hono", "react", "typescript", "zod"], "bin": { "convex-helpers": "bin.cjs" } }, "sha512-7CYvx7T3K6n+McDTK4ZQaQNNGBzq5aWezpjzsKbOxPXx7oNcTP9wrpef3JxeXWFzkByJv5hRCjseh9B7eNJ7Ig=="], @@ -510,29 +545,29 @@ "defu": ["defu@6.1.4", "", {}, "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg=="], + "detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], + "detect-node-es": ["detect-node-es@1.1.0", "", {}, "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ=="], "diff": ["diff@8.0.2", "", {}, "sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg=="], - "electron-to-chromium": ["electron-to-chromium@1.5.230", "", {}, "sha512-A6A6Fd3+gMdaed9wX83CvHYJb4UuapPD5X5SLq72VZJzxHSY0/LUweGXRWmQlh2ln7KV7iw7jnwXK7dlPoOnHQ=="], + "electron-to-chromium": ["electron-to-chromium@1.5.237", "", {}, "sha512-icUt1NvfhGLar5lSWH3tHNzablaA5js3HVHacQimfP8ViEBOQv+L7DKEuHdbTZ0SKCO1ogTJTIL1Gwk9S6Qvcg=="], "emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + "enhanced-resolve": ["enhanced-resolve@5.18.3", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" } }, "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww=="], + "esbuild": ["esbuild@0.25.4", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.4", "@esbuild/android-arm": "0.25.4", "@esbuild/android-arm64": "0.25.4", "@esbuild/android-x64": "0.25.4", "@esbuild/darwin-arm64": "0.25.4", "@esbuild/darwin-x64": "0.25.4", "@esbuild/freebsd-arm64": "0.25.4", "@esbuild/freebsd-x64": "0.25.4", "@esbuild/linux-arm": "0.25.4", "@esbuild/linux-arm64": "0.25.4", "@esbuild/linux-ia32": "0.25.4", "@esbuild/linux-loong64": "0.25.4", "@esbuild/linux-mips64el": "0.25.4", "@esbuild/linux-ppc64": "0.25.4", "@esbuild/linux-riscv64": "0.25.4", "@esbuild/linux-s390x": "0.25.4", "@esbuild/linux-x64": "0.25.4", "@esbuild/netbsd-arm64": "0.25.4", "@esbuild/netbsd-x64": "0.25.4", "@esbuild/openbsd-arm64": "0.25.4", "@esbuild/openbsd-x64": "0.25.4", "@esbuild/sunos-x64": "0.25.4", "@esbuild/win32-arm64": "0.25.4", "@esbuild/win32-ia32": "0.25.4", "@esbuild/win32-x64": "0.25.4" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q=="], "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], "esprima": ["esprima@4.0.1", "", { "bin": { "esparse": "./bin/esparse.js", "esvalidate": "./bin/esvalidate.js" } }, "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="], - "fast-glob": ["fast-glob@3.3.3", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="], - - "fastq": ["fastq@1.19.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ=="], - "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], - "framer-motion": ["framer-motion@12.23.22", "", { "dependencies": { "motion-dom": "^12.23.21", "motion-utils": "^12.23.6", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-ZgGvdxXCw55ZYvhoZChTlG6pUuehecgvEAJz0BHoC5pQKW1EC5xf1Mul1ej5+ai+pVY0pylyFfdl45qnM1/GsA=="], + "framer-motion": ["framer-motion@12.23.24", "", { "dependencies": { "motion-dom": "^12.23.23", "motion-utils": "^12.23.6", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-HMi5HRoRCTou+3fb3h9oTLyJGBxHfW+HnNE25tAXOvVx/IvwMHK0cx7IR4a2ZU6sh3IX1Z+4ts32PcYBOqka8w=="], "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], @@ -542,12 +577,14 @@ "get-nonce": ["get-nonce@1.0.1", "", {}, "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q=="], - "get-tsconfig": ["get-tsconfig@4.10.1", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ=="], + "get-tsconfig": ["get-tsconfig@4.12.0", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-LScr2aNr2FbjAjZh2C6X6BxRx1/x+aTDExct/xyq2XKbYOiG5c0aK7pMsSuyc0brz3ibr/lbQiHD9jzt4lccJw=="], "glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], "goober": ["goober@2.1.18", "", { "peerDependencies": { "csstype": "^3.0.10" } }, "sha512-2vFqsaDVIT9Gz7N6kAL++pLpp41l3PfDuusHcjnGLfR6+huZkl6ziX+zgVC3ZxpqWhzH6pyDdGrCeDhMIvwaxw=="], + "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], + "is-binary-path": ["is-binary-path@2.1.0", "", { "dependencies": { "binary-extensions": "^2.0.0" } }, "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw=="], "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], @@ -562,6 +599,8 @@ "isbot": ["isbot@5.1.31", "", {}, "sha512-DPgQshehErHAqSCKDb3rNW03pa2wS/v5evvUqtxt6TTnHRqAG8FdzcSSJs9656pK6Y+NT7K9R4acEYXLHYfpUQ=="], + "jiti": ["jiti@2.6.1", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ=="], + "jose": ["jose@5.10.0", "", {}, "sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg=="], "jotai": ["jotai@2.15.0", "", { "peerDependencies": { "@babel/core": ">=7.0.0", "@babel/template": ">=7.0.0", "@types/react": ">=17.0.0", "react": ">=17.0.0" }, "optionalPeers": ["@babel/core", "@babel/template", "@types/react", "react"] }, "sha512-nbp/6jN2Ftxgw0VwoVnOg0m5qYM1rVcfvij+MZx99Z5IK13eGve9FJoCwGv+17JvVthTjhSmNtT5e1coJnr6aw=="], @@ -570,27 +609,51 @@ "jotai-scope": ["jotai-scope@0.9.5", "", { "peerDependencies": { "jotai": ">=2.15.0", "react": ">=16.0.0" } }, "sha512-oOUduQ4ObALHz1+tAyoGeiuNTO3X3H8sUoOfliuMvQqS0HAhTHspFTq06b6SvKQkUtruw98XzVntsrGChmBRNA=="], + "jotai-tanstack-query": ["jotai-tanstack-query@0.11.0", "", { "peerDependencies": { "@tanstack/query-core": "*", "@tanstack/react-query": "*", "jotai": ">=2.0.0", "react": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@tanstack/react-query", "react"] }, "sha512-Ys0u0IuuS6/okUJOulFTdCVfVaeKbm1+lKVSN9zHhIxtrAXl9FM4yu7fNvxM6fSz/NCE9tZOKR0MQ3hvplaH8A=="], + "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], "jsesc": ["jsesc@3.1.0", "", { "bin": { "jsesc": "bin/jsesc" } }, "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="], "json5": ["json5@2.2.3", "", { "bin": { "json5": "lib/cli.js" } }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="], - "jwt-decode": ["jwt-decode@4.0.0", "", {}, "sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA=="], + "kysely": ["kysely@0.28.8", "", {}, "sha512-QUOgl5ZrS9IRuhq5FvOKFSsD/3+IA6MLE81/bOOTRA/YQpKDza2sFdN5g6JCB9BOpqMJDGefLCQ9F12hRS13TA=="], - "kysely": ["kysely@0.28.7", "", {}, "sha512-u/cAuTL4DRIiO2/g4vNGRgklEKNIj5Q3CG7RoUB5DV5SfEC2hMvPxKi0GWPmnzwL2ryIeud2VTcEEmqzTzEPNw=="], + "lightningcss": ["lightningcss@1.30.1", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-darwin-arm64": "1.30.1", "lightningcss-darwin-x64": "1.30.1", "lightningcss-freebsd-x64": "1.30.1", "lightningcss-linux-arm-gnueabihf": "1.30.1", "lightningcss-linux-arm64-gnu": "1.30.1", "lightningcss-linux-arm64-musl": "1.30.1", "lightningcss-linux-x64-gnu": "1.30.1", "lightningcss-linux-x64-musl": "1.30.1", "lightningcss-win32-arm64-msvc": "1.30.1", "lightningcss-win32-x64-msvc": "1.30.1" } }, "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg=="], + + "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.30.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ=="], + + "lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.30.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA=="], + + "lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.30.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig=="], + + "lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.30.1", "", { "os": "linux", "cpu": "arm" }, "sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q=="], + + "lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.30.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw=="], + + "lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.30.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ=="], + + "lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.30.1", "", { "os": "linux", "cpu": "x64" }, "sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw=="], + + "lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.30.1", "", { "os": "linux", "cpu": "x64" }, "sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ=="], + + "lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.30.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA=="], + + "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.30.1", "", { "os": "win32", "cpu": "x64" }, "sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg=="], "lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], "lucide-react": ["lucide-react@0.544.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-t5tS44bqd825zAW45UQxpG2CvcC4urOwn2TrwSH8u+MjeE+1NnWl6QqeQ/6NdjMqdOygyiT9p3Ev0p1NJykxjw=="], - "merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="], + "magic-string": ["magic-string@0.30.19", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw=="], - "micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], + "minipass": ["minipass@7.1.2", "", {}, "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw=="], - "motion": ["motion@12.23.22", "", { "dependencies": { "framer-motion": "^12.23.22", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-iSq6X9vLHbeYwmHvhK//+U74ROaPnZmBuy60XZzqNl0QtZkWfoZyMDHYnpKuWFv0sNMqHgED8aCXk94LCoQPGg=="], + "minizlib": ["minizlib@3.1.0", "", { "dependencies": { "minipass": "^7.1.2" } }, "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw=="], - "motion-dom": ["motion-dom@12.23.21", "", { "dependencies": { "motion-utils": "^12.23.6" } }, "sha512-5xDXx/AbhrfgsQmSE7YESMn4Dpo6x5/DTZ4Iyy4xqDvVHWvFVoV+V2Ri2S/ksx+D40wrZ7gPYiMWshkdoqNgNQ=="], + "motion": ["motion@12.23.24", "", { "dependencies": { "framer-motion": "^12.23.24", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-Rc5E7oe2YZ72N//S3QXGzbnXgqNrTESv8KKxABR20q2FLch9gHLo0JLyYo2hZ238bZ9Gx6cWhj9VO0IgwbMjCw=="], + + "motion-dom": ["motion-dom@12.23.23", "", { "dependencies": { "motion-utils": "^12.23.6" } }, "sha512-n5yolOs0TQQBRUFImrRfs/+6X4p3Q4n1dUEqt/H58Vx7OW6RF+foWEgmTVDhIWJIMXOuNNL0apKH2S16en9eiA=="], "motion-utils": ["motion-utils@12.23.6", "", {}, "sha512-eAWoPgr4eFEOFfg2WjIsMoqJTW6Z8MTUCgn/GZ3VRpClWBdnbjryiA3ZSNLyxCTmCQx4RmYX6jX1iWHbenUPNQ=="], @@ -602,7 +665,7 @@ "next-themes": ["next-themes@0.4.6", "", { "peerDependencies": { "react": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc", "react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc" } }, "sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA=="], - "node-releases": ["node-releases@2.0.23", "", {}, "sha512-cCmFDMSm26S6tQSDpBCg/NR8NENrVPhAJSf+XbxBG4rPFaaonlEoE9wHQmun+cls499TQGSb7ZyPBRlzgKfpeg=="], + "node-releases": ["node-releases@2.0.25", "", {}, "sha512-4auku8B/vw5psvTiiN9j1dAOsXvMoGqJuKJcR+dTdqiXEK20mMTk1UEo3HS16LeGQsVG6+qKTPM9u/qQ2LqATA=="], "normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="], @@ -620,12 +683,12 @@ "pvutils": ["pvutils@1.1.3", "", {}, "sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ=="], - "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="], - "react": ["react@19.2.0", "", {}, "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ=="], "react-dom": ["react-dom@19.2.0", "", { "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.0" } }, "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ=="], + "react-refresh": ["react-refresh@0.17.0", "", {}, "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ=="], + "react-remove-scroll": ["react-remove-scroll@2.7.1", "", { "dependencies": { "react-remove-scroll-bar": "^2.3.7", "react-style-singleton": "^2.2.3", "tslib": "^2.1.0", "use-callback-ref": "^1.3.3", "use-sidecar": "^1.1.3" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA=="], "react-remove-scroll-bar": ["react-remove-scroll-bar@2.3.8", "", { "dependencies": { "react-style-singleton": "^2.2.2", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" }, "optionalPeers": ["@types/react"] }, "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q=="], @@ -642,14 +705,10 @@ "resolve-pkg-maps": ["resolve-pkg-maps@1.0.0", "", {}, "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw=="], - "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], - "rollup": ["rollup@4.52.4", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.52.4", "@rollup/rollup-android-arm64": "4.52.4", "@rollup/rollup-darwin-arm64": "4.52.4", "@rollup/rollup-darwin-x64": "4.52.4", "@rollup/rollup-freebsd-arm64": "4.52.4", "@rollup/rollup-freebsd-x64": "4.52.4", "@rollup/rollup-linux-arm-gnueabihf": "4.52.4", "@rollup/rollup-linux-arm-musleabihf": "4.52.4", "@rollup/rollup-linux-arm64-gnu": "4.52.4", "@rollup/rollup-linux-arm64-musl": "4.52.4", "@rollup/rollup-linux-loong64-gnu": "4.52.4", "@rollup/rollup-linux-ppc64-gnu": "4.52.4", "@rollup/rollup-linux-riscv64-gnu": "4.52.4", "@rollup/rollup-linux-riscv64-musl": "4.52.4", "@rollup/rollup-linux-s390x-gnu": "4.52.4", "@rollup/rollup-linux-x64-gnu": "4.52.4", "@rollup/rollup-linux-x64-musl": "4.52.4", "@rollup/rollup-openharmony-arm64": "4.52.4", "@rollup/rollup-win32-arm64-msvc": "4.52.4", "@rollup/rollup-win32-ia32-msvc": "4.52.4", "@rollup/rollup-win32-x64-gnu": "4.52.4", "@rollup/rollup-win32-x64-msvc": "4.52.4", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-CLEVl+MnPAiKh5pl4dEWSyMTpuflgNQiLGhMv8ezD5W/qP8AKvmYpCOKRRNOh7oRKnauBZ4SyeYkMS+1VSyKwQ=="], "rou3": ["rou3@0.5.1", "", {}, "sha512-OXMmJ3zRk2xeXFGfA3K+EOPHC5u7RDFG7lIOx0X1pdnhUkI8MdVrbV+sNsD80ElpUZ+MRHdyxPnFthq9VHs8uQ=="], - "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], - "scheduler": ["scheduler@0.27.0", "", {}, "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="], "semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], @@ -676,6 +735,10 @@ "tailwindcss": ["tailwindcss@4.1.14", "", {}, "sha512-b7pCxjGO98LnxVkKjaZSDeNuljC4ueKUddjENJOADtubtdo8llTaJy7HwBMeLNSSo2N5QIAgklslK1+Ir8r6CA=="], + "tapable": ["tapable@2.3.0", "", {}, "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg=="], + + "tar": ["tar@7.5.1", "", { "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", "minipass": "^7.1.2", "minizlib": "^3.1.0", "yallist": "^5.0.0" } }, "sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g=="], + "tiny-invariant": ["tiny-invariant@1.3.3", "", {}, "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg=="], "tiny-warning": ["tiny-warning@1.0.3", "", {}, "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="], @@ -698,7 +761,9 @@ "uncrypto": ["uncrypto@0.1.3", "", {}, "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q=="], - "undici-types": ["undici-types@7.13.0", "", {}, "sha512-Ov2Rr9Sx+fRgagJ5AX0qvItZG/JKKoBRAVITs1zk7IqZGTJUwgUr7qoYBpWwakpWilTZFM98rG/AFRocu10iIQ=="], + "undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="], + + "unplugin": ["unplugin@2.3.10", "", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "acorn": "^8.15.0", "picomatch": "^4.0.3", "webpack-virtual-modules": "^0.6.2" } }, "sha512-6NCPkv1ClwH+/BGE9QeoTIl09nuiAt0gS28nn1PvYXsGKRwM2TCbFA2QiilmehPDTXIe684k4rZI1yl3A1PCUw=="], "update-browserslist-db": ["update-browserslist-db@1.1.3", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw=="], @@ -708,13 +773,15 @@ "use-sync-external-store": ["use-sync-external-store@1.6.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w=="], - "vite": ["vite@7.1.9", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-4nVGliEpxmhCL8DslSAUdxlB6+SMrhB0a1v5ijlh1xB1nEPuy1mxaHxysVucLHuWryAxLWg6a5ei+U4TLn/rFg=="], + "vite": ["vite@7.1.10", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-CmuvUBzVJ/e3HGxhg6cYk88NGgTnBoOo7ogtfJJ0fefUWAxN/WDSUa50o+oVBxuIhO8FoEZW0j2eW7sfjs5EtA=="], + + "webpack-virtual-modules": ["webpack-virtual-modules@0.6.2", "", {}, "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ=="], "wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], "y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="], - "yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], + "yallist": ["yallist@5.0.0", "", {}, "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw=="], "yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], @@ -722,11 +789,29 @@ "zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], + "@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.5.0", "", { "dependencies": { "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" }, "bundled": true }, "sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg=="], + + "@tailwindcss/oxide-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.5.0", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ=="], + + "@tailwindcss/oxide-wasm32-wasi/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.1.0", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ=="], + + "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.0.7", "", { "dependencies": { "@emnapi/core": "^1.5.0", "@emnapi/runtime": "^1.5.0", "@tybys/wasm-util": "^0.10.1" }, "bundled": true }, "sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw=="], + + "@tailwindcss/oxide-wasm32-wasi/@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="], + + "@tailwindcss/oxide-wasm32-wasi/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + + "@tanstack/react-router/@tanstack/router-core": ["@tanstack/router-core@1.133.12", "", { "dependencies": { "@tanstack/history": "1.133.3", "@tanstack/store": "^0.7.0", "cookie-es": "^2.0.0", "seroval": "^1.3.2", "seroval-plugins": "^1.3.2", "tiny-invariant": "^1.3.3", "tiny-warning": "^1.0.3" } }, "sha512-mlU0WP3GvirLxVDOe7OO3RkSR/dKxZJ4OxqmvNzDZI2K6E867AVBNwfNecAnuwTJpW6jFELoYMwmulMtA1PSxw=="], + + "@tanstack/router-generator/@tanstack/router-core": ["@tanstack/router-core@1.133.12", "", { "dependencies": { "@tanstack/history": "1.133.3", "@tanstack/store": "^0.7.0", "cookie-es": "^2.0.0", "seroval": "^1.3.2", "seroval-plugins": "^1.3.2", "tiny-invariant": "^1.3.3", "tiny-warning": "^1.0.3" } }, "sha512-mlU0WP3GvirLxVDOe7OO3RkSR/dKxZJ4OxqmvNzDZI2K6E867AVBNwfNecAnuwTJpW6jFELoYMwmulMtA1PSxw=="], + + "@tanstack/router-plugin/@tanstack/router-generator": ["@tanstack/router-generator@1.133.13", "", { "dependencies": { "@tanstack/router-core": "1.133.13", "@tanstack/router-utils": "1.133.3", "@tanstack/virtual-file-routes": "1.133.3", "prettier": "^3.5.0", "recast": "^0.23.11", "source-map": "^0.7.4", "tsx": "^4.19.2", "zod": "^3.24.2" } }, "sha512-W5locmcYSz0dY+KEOIFijUeOdQEzjCxY+uT9ExY/YeQcOBcBFIk9/UnBkE6wRLCPOBb1gfURjPNc9rI93HGrOA=="], + "anymatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], - "better-auth/zod": ["zod@4.1.11", "", {}, "sha512-WPsqwxITS2tzx1bzhIKsEs19ABD5vmCVa4xBo2tq/SrV4RNZtfws1EnCWQXM6yh8bD08a1idvkB5MZSBiZsjwg=="], + "better-auth/zod": ["zod@4.1.12", "", {}, "sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ=="], - "micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + "lru-cache/yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], "postcss/nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], diff --git a/package.json b/package.json index b074f9c..3e3e33b 100644 --- a/package.json +++ b/package.json @@ -4,16 +4,23 @@ "private": true, "type": "module", "workspaces": [ - "packages/*" + "packages/*", + "apps/*" ], "scripts": { "dev": "bun run --filter=@fileone/web dev", "build": "bun run --filter=@fileone/web build", - "start": "bun run --filter=@fileone/web start" + "preview": "bun run --filter=@fileone/web preview" }, "devDependencies": { "@biomejs/biome": "2.2.4", "@types/bun": "latest", "convex": "^1.27.0" + }, + "resolutions": { + "convex": "1.28.0" + }, + "dependencies": { + "@tailwindcss/vite": "^4.1.14" } } diff --git a/packages/convex/_generated/api.d.ts b/packages/convex/_generated/api.d.ts index cf0de01..2c7501c 100644 --- a/packages/convex/_generated/api.d.ts +++ b/packages/convex/_generated/api.d.ts @@ -20,10 +20,12 @@ import type * as filesystem from "../filesystem.js"; import type * as functions from "../functions.js"; import type * as http from "../http.js"; import type * as model_directories from "../model/directories.js"; -import type * as model_error from "../model/error.js"; import type * as model_files from "../model/files.js"; import type * as model_filesystem from "../model/filesystem.js"; import type * as model_user from "../model/user.js"; +import type * as shared_error from "../shared/error.js"; +import type * as shared_filesystem from "../shared/filesystem.js"; +import type * as shared_types from "../shared/types.js"; import type * as user from "../user.js"; import type { @@ -53,10 +55,12 @@ declare const fullApi: ApiFromModules<{ functions: typeof functions; http: typeof http; "model/directories": typeof model_directories; - "model/error": typeof model_error; "model/files": typeof model_files; "model/filesystem": typeof model_filesystem; "model/user": typeof model_user; + "shared/error": typeof shared_error; + "shared/filesystem": typeof shared_filesystem; + "shared/types": typeof shared_types; user: typeof user; }>; declare const fullApiWithMounts: typeof fullApi; diff --git a/packages/convex/files.ts b/packages/convex/files.ts index 29b7152..e57a180 100644 --- a/packages/convex/files.ts +++ b/packages/convex/files.ts @@ -3,7 +3,7 @@ import type { Id } from "./_generated/dataModel" import { authenticatedMutation, authenticatedQuery, authorizedGet } from "./functions" import * as Directories from "./model/directories" import * as Files from "./model/files" -import type { FileSystemItem } from "./model/filesystem" +import type { FileSystemItem } from "./shared/filesystem" export const generateUploadUrl = authenticatedMutation({ handler: async (ctx) => { diff --git a/packages/convex/filesystem.ts b/packages/convex/filesystem.ts index d85f99a..cbf5be8 100644 --- a/packages/convex/filesystem.ts +++ b/packages/convex/filesystem.ts @@ -1,20 +1,27 @@ import { v } from "convex/values" -import { authenticatedMutation, authenticatedQuery, authorizedGet } from "./functions" -import * as Directories from "./model/directories" -import * as Err from "./model/error" -import * as Files from "./model/files" -import type { - DirectoryHandle, - FileHandle, - FileSystemItem, -} from "./model/filesystem" -import * as FileSystem from "./model/filesystem" import { - type FileSystemHandle, - FileType, + authenticatedMutation, + authenticatedQuery, + authorizedGet, +} from "./functions" +import * as Directories from "./model/directories" +import * as Files from "./model/files" +import { + deleteItemsPermanently, + emptyTrash as emptyTrashImpl, + fetchFileUrl as fetchFileUrlImpl, + restoreItems as restoreItemsImpl, VDirectoryHandle, VFileSystemHandle, } from "./model/filesystem" +import * as Err from "./shared/error" +import type { + DirectoryHandle, + FileHandle, + FileSystemHandle, + FileSystemItem, +} from "./shared/filesystem" +import { FileType } from "./shared/filesystem" export const moveItems = authenticatedMutation({ args: { @@ -22,7 +29,10 @@ export const moveItems = authenticatedMutation({ items: v.array(VFileSystemHandle), }, handler: async (ctx, { targetDirectory: targetDirectoryHandle, items }) => { - const targetDirectory = await authorizedGet(ctx, targetDirectoryHandle.id) + const targetDirectory = await authorizedGet( + ctx, + targetDirectoryHandle.id, + ) if (!targetDirectory) { throw Err.create( Err.Code.DirectoryNotFound, @@ -131,13 +141,13 @@ export const permanentlyDeleteItems = authenticatedMutation({ handles: v.array(VFileSystemHandle), }, handler: async (ctx, { handles }) => { - return await FileSystem.deleteItemsPermanently(ctx, { handles }) + return await deleteItemsPermanently(ctx, { handles }) }, }) export const emptyTrash = authenticatedMutation({ handler: async (ctx) => { - return await FileSystem.emptyTrash(ctx) + return await emptyTrashImpl(ctx) }, }) @@ -146,7 +156,7 @@ export const restoreItems = authenticatedMutation({ handles: v.array(VFileSystemHandle), }, handler: async (ctx, { handles }) => { - return await FileSystem.restoreItems(ctx, { handles }) + return await restoreItemsImpl(ctx, { handles }) }, }) @@ -155,11 +165,6 @@ export const fetchFileUrl = authenticatedQuery({ fileId: v.id("files"), }, handler: async (ctx, { fileId }) => { - const file = await authorizedGet(ctx, fileId) - if (!file) { - throw Err.create(Err.Code.NotFound, "File not found") - } - - return await FileSystem.fetchFileUrl(ctx, { fileId }) + return await fetchFileUrlImpl(ctx, { fileId }) }, }) diff --git a/packages/convex/model/directories.ts b/packages/convex/model/directories.ts index 4ebf4c4..a8ba97e 100644 --- a/packages/convex/model/directories.ts +++ b/packages/convex/model/directories.ts @@ -1,17 +1,17 @@ -import type { Doc, Id } from "@fileone/convex/_generated/dataModel" +import type { Doc, Id } from "../_generated/dataModel" import type { AuthenticatedMutationCtx, AuthenticatedQueryCtx, } from "../functions" import { authorizedGet } from "../functions" -import * as Err from "./error" +import * as Err from "../shared/error" import { type DirectoryHandle, type DirectoryPath, type FileSystemItem, FileType, newDirectoryHandle, -} from "./filesystem" +} from "../shared/filesystem" export type DirectoryInfo = Doc<"directories"> & { path: DirectoryPath } diff --git a/packages/convex/model/files.ts b/packages/convex/model/files.ts index 21c2c36..b6eaa0c 100644 --- a/packages/convex/model/files.ts +++ b/packages/convex/model/files.ts @@ -1,7 +1,7 @@ import type { Doc, Id } from "../_generated/dataModel" import { type AuthenticatedMutationCtx, authorizedGet } from "../functions" -import * as Err from "./error" -import type { DirectoryHandle, FileHandle } from "./filesystem" +import * as Err from "../shared/error" +import type { DirectoryHandle, FileHandle } from "../shared/filesystem" export async function renameFile( ctx: AuthenticatedMutationCtx, diff --git a/packages/convex/model/filesystem.ts b/packages/convex/model/filesystem.ts index 08237bf..a2aa1e0 100644 --- a/packages/convex/model/filesystem.ts +++ b/packages/convex/model/filesystem.ts @@ -1,89 +1,24 @@ import { v } from "convex/values" import type { Doc, Id } from "../_generated/dataModel" -import type { - AuthenticatedMutationCtx, - AuthenticatedQueryCtx, +import { + type AuthenticatedMutationCtx, + type AuthenticatedQueryCtx, + authorizedGet, } from "../functions" -import { authorizedGet } from "../functions" +import * as Err from "../shared/error" +import type { + DirectoryHandle, + FileHandle, + FileSystemHandle, +} from "../shared/filesystem" +import { + FileType, + newDirectoryHandle, + newFileHandle, +} from "../shared/filesystem" import * as Directories from "./directories" -import * as Err from "./error" import * as Files from "./files" -export enum FileType { - File = "File", - Directory = "Directory", -} - -export type Directory = { - kind: FileType.Directory - doc: Doc<"directories"> -} -export type File = { - kind: FileType.File - doc: Doc<"files"> -} -export type FileSystemItem = Directory | File - -export type DirectoryPathComponent = { - handle: DirectoryHandle - name: string -} - -export type FilePathComponent = { - handle: FileHandle - name: string -} -export type PathComponent = FilePathComponent | DirectoryPathComponent -export type DirectoryPath = [ - DirectoryPathComponent, - ...DirectoryPathComponent[], -] -export type FilePath = [...DirectoryPathComponent[], PathComponent] -export type ReverseFilePath = [PathComponent, ...DirectoryPathComponent[]] - -export type DirectoryHandle = { - kind: FileType.Directory - id: Id<"directories"> -} -export type FileHandle = { - kind: FileType.File - id: Id<"files"> -} -export type FileSystemHandle = DirectoryHandle | FileHandle - -export type DeleteResult = { - deleted: { - files: number - directories: number - } - errors: Err.ApplicationErrorData[] -} - -export function newFileSystemHandle(item: FileSystemItem): FileSystemHandle { - console.log("item", item) - switch (item.kind) { - case FileType.File: - return { kind: item.kind, id: item.doc._id } - case FileType.Directory: - return { kind: item.kind, id: item.doc._id } - } -} - -export function isSameHandle( - handle1: FileSystemHandle, - handle2: FileSystemHandle, -): boolean { - return handle1.kind === handle2.kind && handle1.id === handle2.id -} - -export function newDirectoryHandle(id: Id<"directories">): DirectoryHandle { - return { kind: FileType.Directory, id } -} - -export function newFileHandle(id: Id<"files">): FileHandle { - return { kind: FileType.File, id } -} - export const VDirectoryHandle = v.object({ kind: v.literal(FileType.Directory), id: v.id("directories"), @@ -95,7 +30,7 @@ export const VFileHandle = v.object({ export const VFileSystemHandle = v.union(VFileHandle, VDirectoryHandle) export async function queryRootDirectory( - ctx: AuthenticatedQueryCtx, + ctx: AuthenticatedQueryCtx | AuthenticatedMutationCtx, ): Promise | null> { return await ctx.db .query("directories") @@ -134,24 +69,19 @@ async function collectAllHandlesRecursively( const fileHandles: FileHandle[] = [] const directoryHandles: DirectoryHandle[] = [] - // Process each handle to collect files and directories for (const handle of handles) { - // Use a queue to process items iteratively instead of recursively const queue: FileSystemHandle[] = [handle] while (queue.length > 0) { const currentHandle = queue.shift()! - // Add current item to appropriate collection if (currentHandle.kind === FileType.File) { fileHandles.push(currentHandle) } else { directoryHandles.push(currentHandle) } - // If it's a directory, collect all children and add them to the queue if (currentHandle.kind === FileType.Directory) { - // Get all child directories that are in trash (deletedAt >= 0) const childDirectories = await ctx.db .query("directories") .withIndex("byParentId", (q) => @@ -162,7 +92,6 @@ async function collectAllHandlesRecursively( ) .collect() - // Get all child files that are in trash (deletedAt >= 0) const childFiles = await ctx.db .query("files") .withIndex("byDirectoryId", (q) => @@ -173,16 +102,12 @@ async function collectAllHandlesRecursively( ) .collect() - // Add child directories to queue for processing for (const childDir of childDirectories) { - const childHandle = newDirectoryHandle(childDir._id) - queue.push(childHandle) + queue.push(newDirectoryHandle(childDir._id)) } - // Add child files to file handles collection for (const childFile of childFiles) { - const childFileHandle = newFileHandle(childFile._id) - fileHandles.push(childFileHandle) + fileHandles.push(newFileHandle(childFile._id)) } } } @@ -199,17 +124,14 @@ export async function restoreItems( ctx: AuthenticatedMutationCtx, { handles }: { handles: FileSystemHandle[] }, ) { - // Collect all items to restore (including nested items) const { fileHandles, directoryHandles } = await collectAllHandlesRecursively(ctx, { handles }) - // Restore files and directories by unsetting deletedAt const [filesResult, directoriesResult] = await Promise.all([ Files.restore(ctx, { items: fileHandles }), Directories.restore(ctx, { items: directoryHandles }), ]) - // Combine results, handling null responses return { restored: { files: filesResult?.restored || 0, @@ -225,20 +147,15 @@ export async function restoreItems( export async function deleteItemsPermanently( ctx: AuthenticatedMutationCtx, { handles }: { handles: FileSystemHandle[] }, -): Promise { - // Collect all items to delete (including nested items) - const { - fileHandles: fileHandlesToDelete, - directoryHandles: directoryHandlesToDelete, - } = await collectAllHandlesRecursively(ctx, { handles }) +) { + const { fileHandles, directoryHandles } = + await collectAllHandlesRecursively(ctx, { handles }) - // Delete files and directories using their respective models const [filesResult, directoriesResult] = await Promise.all([ - Files.deletePermanently(ctx, { items: fileHandlesToDelete }), - Directories.deletePermanently(ctx, { items: directoryHandlesToDelete }), + Files.deletePermanently(ctx, { items: fileHandles }), + Directories.deletePermanently(ctx, { items: directoryHandles }), ]) - // Combine results, handling null responses return { deleted: { files: filesResult?.deleted || 0, @@ -251,9 +168,7 @@ export async function deleteItemsPermanently( } } -export async function emptyTrash( - ctx: AuthenticatedMutationCtx, -): Promise { +export async function emptyTrash(ctx: AuthenticatedMutationCtx) { const rootDir = await queryRootDirectory(ctx) if (!rootDir) { throw Err.create(Err.Code.NotFound, "user root directory not found") diff --git a/packages/convex/model/user.ts b/packages/convex/model/user.ts index af0bb36..2fd5ef6 100644 --- a/packages/convex/model/user.ts +++ b/packages/convex/model/user.ts @@ -1,6 +1,6 @@ import type { MutationCtx, QueryCtx } from "../_generated/server" import { authComponent } from "../auth" -import * as Err from "./error" +import * as Err from "../shared/error" export type AuthUser = Awaited> diff --git a/packages/convex/package.json b/packages/convex/package.json index 509d7a4..d5721b0 100644 --- a/packages/convex/package.json +++ b/packages/convex/package.json @@ -2,6 +2,14 @@ "name": "@fileone/convex", "module": "index.ts", "type": "module", + "exports": { + "./filesystem": "./shared/filesystem.ts", + "./error": "./shared/error.ts", + "./types": "./shared/types.ts", + "./_generated/*": "./_generated/*", + "./model/*": "./model/*", + "./shared/*": "./shared/*" + }, "dependencies": { "@fileone/path": "workspace:*" }, @@ -9,6 +17,7 @@ "typescript": "^5", "better-auth": "1.3.8", "convex": "^1.27.0", + "convex-helpers": "^0.1.104", "@convex-dev/better-auth": "^0.8.9" } } diff --git a/packages/convex/model/error.ts b/packages/convex/shared/error.ts similarity index 100% rename from packages/convex/model/error.ts rename to packages/convex/shared/error.ts diff --git a/packages/convex/shared/filesystem.ts b/packages/convex/shared/filesystem.ts new file mode 100644 index 0000000..1be6fa1 --- /dev/null +++ b/packages/convex/shared/filesystem.ts @@ -0,0 +1,91 @@ +/** + * Client-safe filesystem types and utilities. + * This file contains types and pure functions that can be safely imported by frontend code. + * NO server-only dependencies should be imported here. + */ + +import type { Doc, Id } from "../_generated/dataModel" +import type * as Err from "./error" + +export enum FileType { + File = "File", + Directory = "Directory", +} + +export type Directory = { + kind: FileType.Directory + doc: Doc<"directories"> +} + +export type File = { + kind: FileType.File + doc: Doc<"files"> +} + +export type FileSystemItem = Directory | File + +export type DirectoryPathComponent = { + handle: DirectoryHandle + name: string +} + +export type FilePathComponent = { + handle: FileHandle + name: string +} + +export type PathComponent = FilePathComponent | DirectoryPathComponent + +export type DirectoryPath = [ + DirectoryPathComponent, + ...DirectoryPathComponent[], +] + +export type FilePath = [...DirectoryPathComponent[], PathComponent] + +export type ReverseFilePath = [PathComponent, ...DirectoryPathComponent[]] + +export type DirectoryHandle = { + kind: FileType.Directory + id: Id<"directories"> +} + +export type FileHandle = { + kind: FileType.File + id: Id<"files"> +} + +export type FileSystemHandle = DirectoryHandle | FileHandle + +export type DeleteResult = { + deleted: { + files: number + directories: number + } + errors: Err.ApplicationErrorData[] +} + +export function newFileSystemHandle(item: FileSystemItem): FileSystemHandle { + console.log("item", item) + switch (item.kind) { + case FileType.File: + return { kind: item.kind, id: item.doc._id } + case FileType.Directory: + return { kind: item.kind, id: item.doc._id } + } +} + +export function isSameHandle( + handle1: FileSystemHandle, + handle2: FileSystemHandle, +): boolean { + return handle1.kind === handle2.kind && handle1.id === handle2.id +} + +export function newDirectoryHandle(id: Id<"directories">): DirectoryHandle { + return { kind: FileType.Directory, id } +} + +export function newFileHandle(id: Id<"files">): FileHandle { + return { kind: FileType.File, id } +} diff --git a/packages/convex/shared/types.ts b/packages/convex/shared/types.ts new file mode 100644 index 0000000..d66e934 --- /dev/null +++ b/packages/convex/shared/types.ts @@ -0,0 +1,11 @@ +/** + * Shared types that can be safely imported by both client and server code. + * This file should NOT import any server-only dependencies. + */ + +import type { Doc } from "../_generated/dataModel" +import type { DirectoryPath } from "./filesystem" + +export type DirectoryInfo = Doc<"directories"> & { path: DirectoryPath } +export type DirectoryItem = DirectoryInfo +export type DirectoryItemKind = "directory" | "file" diff --git a/packages/convex/user.ts b/packages/convex/user.ts index 3388f64..fdb2dbc 100644 --- a/packages/convex/user.ts +++ b/packages/convex/user.ts @@ -1,8 +1,8 @@ import { authenticatedMutation } from "./functions" -import * as FileSystem from "./model/filesystem" +import { ensureRootDirectory as ensureRootDirectoryImpl } from "./model/filesystem" export const ensureRootDirectory = authenticatedMutation({ handler: async (ctx) => { - return await FileSystem.ensureRootDirectory(ctx) + return await ensureRootDirectoryImpl(ctx) }, }) diff --git a/packages/web/bun-env.d.ts b/packages/web/bun-env.d.ts deleted file mode 100644 index 2380a69..0000000 --- a/packages/web/bun-env.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -// Generated by `bun init` - -declare module "*.svg" { - /** - * A path to the SVG file - */ - const path: `${string}.svg` - export = path -} - -declare module "*.module.css" { - /** - * A record of class names to their corresponding CSS module classes - */ - const classes: { readonly [key: string]: string } - export = classes -} diff --git a/packages/web/bunfig.toml b/packages/web/bunfig.toml deleted file mode 100644 index ffe100c..0000000 --- a/packages/web/bunfig.toml +++ /dev/null @@ -1,3 +0,0 @@ -[serve.static] -env = "BUN_PUBLIC_*" -plugins = ["bun-plugin-tailwind"] \ No newline at end of file diff --git a/packages/web/src/server.tsx b/packages/web/src/server.tsx deleted file mode 100644 index 27b7062..0000000 --- a/packages/web/src/server.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import { serve } from "bun" -import index from "./index.html" - -const server = serve({ - port: process.env.PORT || 3001, - routes: { - // Serve index.html for all unmatched routes. - "/*": index, - }, - - development: process.env.NODE_ENV !== "production" && { - // Enable browser hot reloading in development - hmr: true, - - // Echo console logs from the browser to the server - console: true, - }, -}) - -console.log(`🚀 Server running at ${server.url}`)