From f52f3fcec43bd87f635b4a12ea6c3161c8a10de3 Mon Sep 17 00:00:00 2001 From: logscore Date: Mon, 13 Oct 2025 21:06:27 -0600 Subject: [PATCH] TANNNERRRRRRRROUTTERRRRRR --- .rules/GENERAL.md | 1 + README.md | 8 - apps/server/package.json | 1 - .../dropbox/tests/dropbox-provider.test.ts | 566 ------------ .../dropbox/tests/integration.test.ts | 155 ---- .../src/providers/dropbox/tests/test-utils.ts | 148 --- .../src/providers/s3/tests/basic.test.ts | 83 -- .../providers/s3/tests/integration.test.ts | 235 ----- .../providers/s3/tests/s3-provider.test.ts | 68 -- .../src/providers/s3/tests/test-utils.ts | 116 --- apps/server/vitest.config.ts | 3 - apps/web/.eslintrc.json | 3 - apps/web/index.html | 19 + apps/web/next.config.ts | 9 - apps/web/package.json | 29 +- apps/web/postcss.config.mjs | 4 +- apps/web/{src/app => public}/favicon.ico | Bin apps/web/public/robots.txt | 7 + .../[providerSlug]/[accountId]/layout.tsx | 22 - .../(dashboard)/dashboard/layout.tsx | 14 - apps/web/src/app/(protected)/layout.tsx | 5 - .../(contributors)/contributors/page.tsx | 13 - apps/web/src/app/(public)/(legal)/layout.tsx | 17 - apps/web/src/app/(public)/layout.tsx | 5 - apps/web/src/app/layout.tsx | 115 --- apps/web/src/app/page.tsx | 7 - apps/web/src/app/robots.ts | 19 - apps/web/src/app/sitemap.ts | 36 - .../src/components/brand-assets/bg-angels.tsx | 13 +- apps/web/src/components/home/hero.tsx | 17 +- .../providers/default-account-provider.tsx | 9 +- apps/web/src/{app => }/globals.css | 0 apps/web/src/hooks/useTheme.ts | 13 - apps/web/src/main.tsx | 44 + apps/web/src/routeTree.gen.ts | 388 ++++++++ apps/web/src/routes/__root.tsx | 76 ++ apps/web/src/routes/_protected.tsx | 44 + apps/web/src/routes/_protected/dashboard.tsx | 17 + .../dashboard/$providerSlug.$accountId.tsx} | 27 +- .../_protected/dashboard/index.tsx} | 11 +- .../_protected/dashboard/settings.tsx} | 9 +- apps/web/src/routes/_public.tsx | 33 + .../_public/-privacy-content.tsx} | 8 +- apps/web/src/routes/_public/contributors.tsx | 16 + .../_public/forgot-password.tsx} | 7 +- apps/web/src/routes/_public/privacy.tsx | 10 + .../_public/reset-password.tsx} | 7 +- .../page.tsx => routes/_public/signin.tsx} | 12 +- .../page.tsx => routes/_public/signup.tsx} | 7 +- .../page.tsx => routes/_public/terms.tsx} | 13 +- .../_public/verify-email.tsx} | 7 +- apps/web/src/routes/debug.tsx | 164 ++++ apps/web/src/routes/index.tsx | 21 + apps/web/src/utils/fonts.ts | 21 +- apps/web/src/vite-env.d.ts | 1 + apps/web/tsconfig.json | 23 +- apps/web/vite.config.ts | 35 + apps/web/vitest.config.ts | 3 - bun.lock | 872 +++++------------- docker-compose.test.yml | 48 - docker-compose.yml | 104 +-- knip.config.ts | 6 - package.json | 32 +- packages/auth/package.json | 3 - packages/auth/tests/auth.test.ts | 103 --- packages/auth/vitest.config.ts | 3 - packages/cache/package.json | 8 +- packages/cache/tests/cache.test.ts | 1 - packages/cache/vitest.config.ts | 3 - packages/db/package.json | 15 +- packages/db/src/mock.ts | 19 - packages/db/tests/db.test.ts | 1 - packages/db/vitest.config.ts | 3 - packages/env/package.json | 3 - packages/env/vitest.config.ts | 3 - packages/shared/package.json | 3 - .../shared/tests/validators.account.test.ts | 67 -- .../shared/tests/validators.email.test.ts | 73 -- .../tests/validators.file-utils.test.ts | 42 - packages/shared/tests/validators.file.test.ts | 110 --- .../shared/tests/validators.password.test.ts | 96 -- .../shared/tests/validators.provider.test.ts | 112 --- packages/shared/tests/validators.tag.test.ts | 127 --- packages/shared/tests/validators.user.test.ts | 63 -- packages/shared/vitest.config.ts | 3 - packages/vitest/package.json | 13 - packages/vitest/src/index.ts | 49 - vitest.config.ts | 3 - 88 files changed, 1290 insertions(+), 3462 deletions(-) create mode 100644 .rules/GENERAL.md delete mode 100644 apps/server/src/providers/dropbox/tests/dropbox-provider.test.ts delete mode 100644 apps/server/src/providers/dropbox/tests/integration.test.ts delete mode 100644 apps/server/src/providers/dropbox/tests/test-utils.ts delete mode 100644 apps/server/src/providers/s3/tests/basic.test.ts delete mode 100644 apps/server/src/providers/s3/tests/integration.test.ts delete mode 100644 apps/server/src/providers/s3/tests/s3-provider.test.ts delete mode 100644 apps/server/src/providers/s3/tests/test-utils.ts delete mode 100644 apps/server/vitest.config.ts delete mode 100644 apps/web/.eslintrc.json create mode 100644 apps/web/index.html delete mode 100644 apps/web/next.config.ts rename apps/web/{src/app => public}/favicon.ico (100%) create mode 100644 apps/web/public/robots.txt delete mode 100644 apps/web/src/app/(protected)/(dashboard)/dashboard/[providerSlug]/[accountId]/layout.tsx delete mode 100644 apps/web/src/app/(protected)/(dashboard)/dashboard/layout.tsx delete mode 100644 apps/web/src/app/(protected)/layout.tsx delete mode 100644 apps/web/src/app/(public)/(contributors)/contributors/page.tsx delete mode 100644 apps/web/src/app/(public)/(legal)/layout.tsx delete mode 100644 apps/web/src/app/(public)/layout.tsx delete mode 100644 apps/web/src/app/layout.tsx delete mode 100644 apps/web/src/app/page.tsx delete mode 100644 apps/web/src/app/robots.ts delete mode 100644 apps/web/src/app/sitemap.ts rename apps/web/src/{app => }/globals.css (100%) delete mode 100644 apps/web/src/hooks/useTheme.ts create mode 100644 apps/web/src/main.tsx create mode 100644 apps/web/src/routeTree.gen.ts create mode 100644 apps/web/src/routes/__root.tsx create mode 100644 apps/web/src/routes/_protected.tsx create mode 100644 apps/web/src/routes/_protected/dashboard.tsx rename apps/web/src/{app/(protected)/(dashboard)/dashboard/[providerSlug]/[accountId]/page.tsx => routes/_protected/dashboard/$providerSlug.$accountId.tsx} (58%) rename apps/web/src/{app/(protected)/(dashboard)/dashboard/page.tsx => routes/_protected/dashboard/index.tsx} (75%) rename apps/web/src/{app/(protected)/(dashboard)/dashboard/settings/page.tsx => routes/_protected/dashboard/settings.tsx} (96%) create mode 100644 apps/web/src/routes/_public.tsx rename apps/web/src/{app/(public)/(legal)/privacy/page.tsx => routes/_public/-privacy-content.tsx} (99%) create mode 100644 apps/web/src/routes/_public/contributors.tsx rename apps/web/src/{app/(public)/(auth)/forgot-password/page.tsx => routes/_public/forgot-password.tsx} (58%) create mode 100644 apps/web/src/routes/_public/privacy.tsx rename apps/web/src/{app/(public)/(auth)/reset-password/page.tsx => routes/_public/reset-password.tsx} (68%) rename apps/web/src/{app/(public)/(auth)/signin/page.tsx => routes/_public/signin.tsx} (58%) rename apps/web/src/{app/(public)/(auth)/signup/page.tsx => routes/_public/signup.tsx} (71%) rename apps/web/src/{app/(public)/(legal)/terms/page.tsx => routes/_public/terms.tsx} (96%) rename apps/web/src/{app/(public)/(auth)/verify-email/page.tsx => routes/_public/verify-email.tsx} (64%) create mode 100644 apps/web/src/routes/debug.tsx create mode 100644 apps/web/src/routes/index.tsx create mode 100644 apps/web/src/vite-env.d.ts create mode 100644 apps/web/vite.config.ts delete mode 100644 apps/web/vitest.config.ts delete mode 100644 docker-compose.test.yml delete mode 100644 packages/auth/tests/auth.test.ts delete mode 100644 packages/auth/vitest.config.ts delete mode 100644 packages/cache/tests/cache.test.ts delete mode 100644 packages/cache/vitest.config.ts delete mode 100644 packages/db/src/mock.ts delete mode 100644 packages/db/tests/db.test.ts delete mode 100644 packages/db/vitest.config.ts delete mode 100644 packages/env/vitest.config.ts delete mode 100644 packages/shared/tests/validators.account.test.ts delete mode 100644 packages/shared/tests/validators.email.test.ts delete mode 100644 packages/shared/tests/validators.file-utils.test.ts delete mode 100644 packages/shared/tests/validators.file.test.ts delete mode 100644 packages/shared/tests/validators.password.test.ts delete mode 100644 packages/shared/tests/validators.provider.test.ts delete mode 100644 packages/shared/tests/validators.tag.test.ts delete mode 100644 packages/shared/tests/validators.user.test.ts delete mode 100644 packages/shared/vitest.config.ts delete mode 100644 packages/vitest/package.json delete mode 100644 packages/vitest/src/index.ts delete mode 100644 vitest.config.ts diff --git a/.rules/GENERAL.md b/.rules/GENERAL.md new file mode 100644 index 0000000..c74ec3f --- /dev/null +++ b/.rules/GENERAL.md @@ -0,0 +1 @@ +- Only do the minimum required changes to accomplish the stated task. diff --git a/README.md b/README.md index aab89d8..32d233e 100644 --- a/README.md +++ b/README.md @@ -272,14 +272,6 @@ Make sure you have configured the Google OAuth credentials in your `.env` file a If you want to contribute, please refer to the [contributing guide](https://github.com/nimbusdotstorage/Nimbus/blob/main/CONTRIBUTING.md) -### 9. Tests - -Vitest and MinIO via Docker are used for testing. To run tests, use must use `bun run test` becasuse `bun test` is reserved for `bun` (just like `bun build` etc). - -Tests **require** the `docker-compose.test.yml` to be running. - -Look at the scripts in `package.json` for all the `test:*` options. - ## Deploying Docker images (ex. Coolify) Follow the [DEPLOYMENT.md](DEPLOYMENT.md) file for instructions on how to deploy with Coolify. diff --git a/apps/server/package.json b/apps/server/package.json index 4a9646f..99ebe79 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -46,7 +46,6 @@ }, "devDependencies": { "@microsoft/microsoft-graph-types": "^2.40.0", - "@nimbus/vitest": "workspace:*", "@types/pg": "^8.15.4" } } diff --git a/apps/server/src/providers/dropbox/tests/dropbox-provider.test.ts b/apps/server/src/providers/dropbox/tests/dropbox-provider.test.ts deleted file mode 100644 index 40d8e05..0000000 --- a/apps/server/src/providers/dropbox/tests/dropbox-provider.test.ts +++ /dev/null @@ -1,566 +0,0 @@ -import { - createFileMetadata, - createFolderMetadata, - createProviderWithFreshMockClient, - createProviderWithMockClient, - mockDropboxClient, - mockResponses, - resetAllMocks, - restoreMockClient, -} from "./test-utils"; -import { beforeEach, describe, expect, it } from "vitest"; -import { DropboxProvider } from "../dropbox-provider"; -import { Readable } from "node:stream"; - -describe("DropboxProvider", () => { - let provider: DropboxProvider; - - beforeEach(() => { - resetAllMocks(); - provider = createProviderWithMockClient(); - // Ensure mock client is properly set - restoreMockClient(provider); - }); - - describe("Constructor", () => { - it("should create DropboxProvider with access token", () => { - const dropboxProvider = new DropboxProvider("test-token"); - expect(dropboxProvider).toBeInstanceOf(DropboxProvider); - expect(dropboxProvider.getAccessToken()).toBe("test-token"); - }); - }); - - describe("Authentication Interface", () => { - it("should get and set access token", () => { - const authProvider = createProviderWithMockClient(); - expect(authProvider.getAccessToken()).toBe("mock-access-token"); - - authProvider.setAccessToken("new-token"); - restoreMockClient(authProvider); - expect(authProvider.getAccessToken()).toBe("new-token"); - }); - }); - - describe("create", () => { - it("should create a folder", async () => { - const folderMetadata = createFolderMetadata(); - mockDropboxClient.filesCreateFolderV2.mockResolvedValue(mockResponses.createFolder); - - const result = await provider.create(folderMetadata); - - expect(mockDropboxClient.filesCreateFolderV2).toHaveBeenCalledWith({ - path: "/test-folder", - autorename: false, - }); - expect(result).toEqual({ - id: "/test-folder", - name: "test-folder", - mimeType: "application/x-directory", - size: 0, - createdTime: expect.any(String), - modifiedTime: expect.any(String), - type: "folder", - parentId: "", - trashed: false, - }); - }); - - it("should create a file with Buffer content", async () => { - const fileMetadata = createFileMetadata(); - const content = Buffer.from("test content"); - mockDropboxClient.filesUpload.mockResolvedValue(mockResponses.uploadFile); - - const result = await provider.create(fileMetadata, content); - - expect(mockDropboxClient.filesUpload).toHaveBeenCalledWith({ - path: "/test-file.txt", - contents: content, - mode: { ".tag": "add" }, - autorename: false, - }); - expect(result).toEqual({ - id: "/test-file.txt", - name: "test-file.txt", - mimeType: "text/plain", - size: 11, - createdTime: "2023-01-01T12:00:00Z", - modifiedTime: "2023-01-01T12:00:00Z", - type: "file", - parentId: "", - trashed: false, - }); - }); - - it("should create a file with Readable stream content", async () => { - const fileMetadata = createFileMetadata(); - const content = Readable.from(["test content"]); - mockDropboxClient.filesUpload.mockResolvedValue(mockResponses.uploadFile); - - const result = await provider.create(fileMetadata, content); - - expect(mockDropboxClient.filesUpload).toHaveBeenCalled(); - expect(result).not.toBeNull(); - }); - - it("should throw error when creating file without content", async () => { - const fileMetadata = createFileMetadata(); - - await expect(provider.create(fileMetadata)).rejects.toThrow("Content is required for file upload"); - }); - - it("should handle nested folder creation", async () => { - const folderMetadata = createFolderMetadata({ - name: "nested-folder", - parentId: "/parent-folder", - }); - mockDropboxClient.filesCreateFolderV2.mockResolvedValue({ - result: { - metadata: { - ...mockResponses.createFolder.result.metadata, - path_display: "/parent-folder/nested-folder", - }, - }, - }); - - const result = await provider.create(folderMetadata); - - expect(mockDropboxClient.filesCreateFolderV2).toHaveBeenCalledWith({ - path: "/parent-folder/nested-folder", - autorename: false, - }); - expect(result?.parentId).toBe("/parent-folder"); - }); - }); - - describe("getById", () => { - it("should get file by ID", async () => { - mockDropboxClient.filesGetMetadata.mockResolvedValue(mockResponses.getMetadata); - - const result = await provider.getById("/test-file.txt"); - - expect(mockDropboxClient.filesGetMetadata).toHaveBeenCalledWith({ - path: "/test-file.txt", - include_media_info: false, - include_deleted: false, - }); - expect(result).toEqual({ - id: "/test-file.txt", - name: "test-file.txt", - mimeType: "text/plain", - size: 11, - createdTime: "2023-01-01T12:00:00Z", - modifiedTime: "2023-01-01T12:00:00Z", - type: "file", - parentId: "", - trashed: false, - }); - }); - - it("should return null when file not found", async () => { - const notFoundError = { - error: { - error: { - ".tag": "path", - path: { - ".tag": "not_found", - }, - }, - }, - }; - mockDropboxClient.filesGetMetadata.mockRejectedValue(notFoundError); - - const result = await provider.getById("/nonexistent.txt"); - - expect(result).toBeNull(); - }); - }); - - describe("update", () => { - it("should rename/move file", async () => { - const isolatedProvider = createProviderWithFreshMockClient(); - const isolatedMockClient = (isolatedProvider as any).client; - const updateMetadata = { name: "renamed-file.txt", parentId: "", mimeType: "text/plain" }; - - isolatedMockClient.filesMoveV2.mockResolvedValue(mockResponses.moveFile); - - const result = await isolatedProvider.update("/test-file.txt", updateMetadata); - - expect(isolatedMockClient.filesMoveV2).toHaveBeenCalledWith({ - from_path: "/test-file.txt", - to_path: "/renamed-file.txt", - autorename: false, - }); - expect(result).not.toBeNull(); - }); - - it("should move file to different folder", async () => { - const updateMetadata = { name: "test-file.txt", parentId: "/new-folder", mimeType: "text/plain" }; - mockDropboxClient.filesMoveV2.mockResolvedValue(mockResponses.moveFile); - - const _result = await provider.update("/test-file.txt", updateMetadata); - - expect(mockDropboxClient.filesMoveV2).toHaveBeenCalledWith({ - from_path: "/test-file.txt", - to_path: "/new-folder/test-file.txt", - autorename: false, - }); - }); - }); - - describe("delete", () => { - it("should delete file", async () => { - mockDropboxClient.filesDeleteV2.mockResolvedValue({}); - - const result = await provider.delete("/test-file.txt"); - - expect(mockDropboxClient.filesDeleteV2).toHaveBeenCalledWith({ - path: "/test-file.txt", - }); - expect(result).toBe(true); - }); - - it("should handle delete errors", async () => { - mockDropboxClient.filesDeleteV2.mockRejectedValue(new Error("Delete failed")); - - await expect(provider.delete("/test-file.txt")).rejects.toThrow("Delete failed"); - }); - }); - - describe("listChildren", () => { - it("should list files in root folder", async () => { - mockDropboxClient.filesListFolder.mockResolvedValue(mockResponses.listFolder); - - const result = await provider.listChildren(); - - expect(mockDropboxClient.filesListFolder).toHaveBeenCalledWith({ - path: "", - recursive: false, - include_media_info: false, - include_deleted: false, - include_has_explicit_shared_members: false, - limit: 100, - }); - expect(result.items).toHaveLength(2); - expect(result.nextPageToken).toBe("cursor-123"); - }); - - it("should list files in specific folder", async () => { - mockDropboxClient.filesListFolder.mockResolvedValue(mockResponses.listFolder); - - const _result = await provider.listChildren("/test-folder"); - - expect(mockDropboxClient.filesListFolder).toHaveBeenCalledWith({ - path: "/test-folder", - recursive: false, - include_media_info: false, - include_deleted: false, - include_has_explicit_shared_members: false, - limit: 100, - }); - }); - - it("should handle pagination with page token", async () => { - mockDropboxClient.filesListFolderContinue.mockResolvedValue(mockResponses.listFolder); - - const _result = await provider.listChildren("", { pageToken: "next-cursor" }); - - expect(mockDropboxClient.filesListFolderContinue).toHaveBeenCalledWith({ - cursor: "next-cursor", - }); - }); - - it("should respect page size limit", async () => { - mockDropboxClient.filesListFolder.mockResolvedValue(mockResponses.listFolder); - - await provider.listChildren("", { pageSize: 50 }); - - expect(mockDropboxClient.filesListFolder).toHaveBeenCalledWith( - expect.objectContaining({ - limit: 50, - }) - ); - }); - - it("should limit page size to Dropbox maximum", async () => { - mockDropboxClient.filesListFolder.mockResolvedValue(mockResponses.listFolder); - - await provider.listChildren("", { pageSize: 5000 }); - - expect(mockDropboxClient.filesListFolder).toHaveBeenCalledWith( - expect.objectContaining({ - limit: 2000, // Dropbox max - }) - ); - }); - }); - - describe("download", () => { - it("should download file", async () => { - mockDropboxClient.filesDownload.mockResolvedValue(mockResponses.download); - - const result = await provider.download("/test-file.txt"); - - expect(mockDropboxClient.filesDownload).toHaveBeenCalledWith({ - path: "/test-file.txt", - }); - expect(result).toEqual({ - data: Buffer.from("test content"), - filename: "test-file.txt", - mimeType: "text/plain", - size: 11, - }); - }); - - it("should return null on download error", async () => { - const notFoundError = { - error: { - error: { - ".tag": "path", - path: { - ".tag": "not_found", - }, - }, - }, - }; - mockDropboxClient.filesDownload.mockRejectedValue(notFoundError); - - const result = await provider.download("/test-file.txt"); - - expect(result).toBeNull(); - }); - }); - - describe("copy", () => { - it("should copy file", async () => { - mockDropboxClient.filesCopyV2.mockResolvedValue(mockResponses.copy); - - const result = await provider.copy("/source.txt", "/target-folder"); - - expect(mockDropboxClient.filesCopyV2).toHaveBeenCalledWith({ - from_path: "/source.txt", - to_path: "/target-folder/source.txt", - autorename: false, - }); - expect(result).not.toBeNull(); - }); - - it("should copy file with new name", async () => { - mockDropboxClient.filesCopyV2.mockResolvedValue(mockResponses.copy); - - const _result = await provider.copy("/source.txt", "/target-folder", "new-name.txt"); - - expect(mockDropboxClient.filesCopyV2).toHaveBeenCalledWith({ - from_path: "/source.txt", - to_path: "/target-folder/new-name.txt", - autorename: false, - }); - }); - }); - - describe("move", () => { - it("should move file", async () => { - mockDropboxClient.filesMoveV2.mockResolvedValue(mockResponses.moveFile); - - const result = await provider.move("/source.txt", "/target-folder"); - - expect(mockDropboxClient.filesMoveV2).toHaveBeenCalledWith({ - from_path: "/source.txt", - to_path: "/target-folder/source.txt", - autorename: false, - }); - expect(result).not.toBeNull(); - }); - - it("should move file with new name", async () => { - mockDropboxClient.filesMoveV2.mockResolvedValue(mockResponses.moveFile); - - const _result = await provider.move("/source.txt", "/target-folder", "new-name.txt"); - - expect(mockDropboxClient.filesMoveV2).toHaveBeenCalledWith({ - from_path: "/source.txt", - to_path: "/target-folder/new-name.txt", - autorename: false, - }); - }); - }); - - describe("getDriveInfo", () => { - it("should get drive information", async () => { - mockDropboxClient.usersGetSpaceUsage.mockResolvedValue(mockResponses.spaceUsage); - - const result = await provider.getDriveInfo(); - - expect(result).toEqual({ - totalSpace: 2000000000, - usedSpace: 1000000, - trashSize: 0, - trashItems: 0, - fileCount: 0, - state: "normal", - }); - }); - - it("should return null on error", async () => { - mockDropboxClient.usersGetSpaceUsage.mockRejectedValue(new Error("API error")); - - const result = await provider.getDriveInfo(); - - expect(result).toBeNull(); - }); - - it("should handle team allocation", async () => { - mockDropboxClient.usersGetSpaceUsage.mockResolvedValue({ - result: { - used: 1000000, - allocation: { - ".tag": "team", - allocated: 5000000000, - }, - }, - }); - - const result = await provider.getDriveInfo(); - - expect(result?.totalSpace).toBe(5000000000); - }); - }); - - describe("getShareableLink", () => { - it("should create shareable link", async () => { - mockDropboxClient.sharingCreateSharedLinkWithSettings.mockResolvedValue(mockResponses.shareableLink); - - const result = await provider.getShareableLink("/test-file.txt"); - - expect(mockDropboxClient.sharingCreateSharedLinkWithSettings).toHaveBeenCalledWith({ - path: "/test-file.txt", - settings: { - requested_visibility: { ".tag": "public" }, - audience: { ".tag": "public" }, - access: { ".tag": "viewer" }, - }, - }); - expect(result).toBe("https://dropbox.com/s/test-link"); - }); - - it("should return null on error", async () => { - mockDropboxClient.sharingCreateSharedLinkWithSettings.mockRejectedValue(new Error("Link creation failed")); - - const result = await provider.getShareableLink("/test-file.txt"); - - expect(result).toBeNull(); - }); - }); - - describe("search", () => { - it("should search files", async () => { - mockDropboxClient.filesSearchV2.mockResolvedValue(mockResponses.search); - - const result = await provider.search("test query"); - - expect(mockDropboxClient.filesSearchV2).toHaveBeenCalledWith({ - query: "test query", - options: { - path: "", - max_results: 100, - order_by: { ".tag": "relevance" }, - file_status: { ".tag": "active" }, - filename_only: false, - }, - }); - expect(result.items).toHaveLength(1); - expect(result.nextPageToken).toBe("search-cursor"); - }); - - it("should respect search options", async () => { - mockDropboxClient.filesSearchV2.mockResolvedValue(mockResponses.search); - - await provider.search("test", { pageSize: 50 }); - - expect(mockDropboxClient.filesSearchV2).toHaveBeenCalledWith({ - query: "test", - options: { - path: "", - max_results: 50, - order_by: { ".tag": "relevance" }, - file_status: { ".tag": "active" }, - filename_only: false, - }, - }); - }); - - it("should limit search results to Dropbox maximum", async () => { - mockDropboxClient.filesSearchV2.mockResolvedValue(mockResponses.search); - - await provider.search("test", { pageSize: 5000 }); - - expect(mockDropboxClient.filesSearchV2).toHaveBeenCalledWith( - expect.objectContaining({ - options: expect.objectContaining({ - max_results: 1000, // Dropbox search max - }), - }) - ); - }); - }); - - describe("Path Utilities", () => { - it("should handle root folder correctly", async () => { - mockDropboxClient.filesListFolder.mockResolvedValue(mockResponses.listFolder); - - await provider.listChildren(""); - await provider.listChildren("/"); - await provider.listChildren("root"); - - // All should normalize to empty string for root - expect(mockDropboxClient.filesListFolder).toHaveBeenCalledTimes(3); - mockDropboxClient.filesListFolder.mock.calls.forEach(call => { - expect(call[0].path).toBe(""); - }); - }); - - it("should normalize folder paths correctly", async () => { - const folderMetadata = createFolderMetadata({ - name: "test-folder", - parentId: "/parent/", - }); - mockDropboxClient.filesCreateFolderV2.mockResolvedValue(mockResponses.createFolder); - - await provider.create(folderMetadata); - - expect(mockDropboxClient.filesCreateFolderV2).toHaveBeenCalledWith({ - path: "/parent/test-folder", - autorename: false, - }); - }); - }); - - describe("MIME Type Handling", () => { - it("should detect MIME types correctly", async () => { - const fileMetadata = createFileMetadata({ name: "document.pdf" }); - mockDropboxClient.filesUpload.mockResolvedValue({ - result: { - ...mockResponses.uploadFile.result, - name: "document.pdf", - }, - }); - - const result = await provider.create(fileMetadata, Buffer.from("content")); - - expect(result?.mimeType).toBe("application/pdf"); - }); - - it("should use default MIME type for unknown extensions", async () => { - const fileMetadata = createFileMetadata({ name: "file.unknown" }); - mockDropboxClient.filesUpload.mockResolvedValue({ - result: { - ...mockResponses.uploadFile.result, - name: "file.unknown", - }, - }); - - const result = await provider.create(fileMetadata, Buffer.from("content")); - - expect(result?.mimeType).toBe("application/octet-stream"); - }); - }); -}); diff --git a/apps/server/src/providers/dropbox/tests/integration.test.ts b/apps/server/src/providers/dropbox/tests/integration.test.ts deleted file mode 100644 index 638574d..0000000 --- a/apps/server/src/providers/dropbox/tests/integration.test.ts +++ /dev/null @@ -1,155 +0,0 @@ -import { beforeEach, describe, expect, it } from "vitest"; -import { DropboxProvider } from "../dropbox-provider"; - -// Integration tests require real Dropbox credentials -// Tests will be automatically skipped if DROPBOX_TEST_ACCESS_TOKEN is not set -const testAccessToken = process.env.DROPBOX_TEST_ACCESS_TOKEN; - -if (testAccessToken) { - console.log("Running integration tests if DROPBOX_TEST_ACCESS_TOKEN is set"); -} - -(testAccessToken ? describe : describe.skip)("DropboxProvider Integration Tests", () => { - let provider: DropboxProvider; - - beforeEach(() => { - provider = new DropboxProvider(testAccessToken!); - }); - - describe("Real API Integration", () => { - it("should authenticate and get user space", async () => { - const driveInfo = await provider.getDriveInfo(); - - expect(driveInfo).not.toBeNull(); - if (driveInfo) { - expect(driveInfo.totalSpace).toBeGreaterThan(0); - expect(driveInfo.usedSpace).toBeGreaterThanOrEqual(0); - expect(driveInfo.state).toBe("normal"); - } - }); - - it("should list root folder contents", async () => { - const result = await provider.listChildren(); - - expect(result).toBeDefined(); - expect(result.items).toBeInstanceOf(Array); - // Root folder may be empty, so we just check structure - }); - - it("should create and delete a test folder", async () => { - const folderName = `test-folder-${Date.now()}`; - let folderId: string | undefined; - - try { - // Create folder - const folder = await provider.create({ - name: folderName, - mimeType: "application/x-directory", - parentId: "", - }); - - expect(folder).not.toBeNull(); - expect(folder?.name).toBe(folderName); - expect(folder?.type).toBe("folder"); - - folderId = folder?.id; - - // Verify folder exists - if (folder) { - const retrieved = await provider.getById(folder.id); - expect(retrieved).not.toBeNull(); - expect(retrieved?.name).toBe(folderName); - } - } finally { - // Cleanup: Delete folder if it was created - if (folderId) { - try { - await provider.delete(folderId); - } catch (cleanupError) { - console.warn(`Failed to cleanup test folder ${folderId}:`, cleanupError); - } - } - } - - // Verify folder is deleted - if (folderId) { - const shouldBeNull = await provider.getById(folderId); - expect(shouldBeNull).toBeNull(); - } - }); - - it("should create, download, and delete a test file", async () => { - const fileName = `test-file-${Date.now()}.txt`; - const fileContent = "This is a test file content"; - let fileId: string | undefined; - - try { - // Create file - const file = await provider.create( - { - name: fileName, - mimeType: "text/plain", - parentId: "", - }, - Buffer.from(fileContent) - ); - - expect(file).not.toBeNull(); - expect(file?.name).toBe(fileName); - expect(file?.type).toBe("file"); - - fileId = file?.id; - - if (file) { - // Download file - const downloadResult = await provider.download(file.id); - expect(downloadResult).not.toBeNull(); - if (downloadResult) { - expect(downloadResult.filename).toBe(fileName); - expect(downloadResult.data.toString()).toBe(fileContent); - } - } - } finally { - // Cleanup: Delete file if it was created - if (fileId) { - try { - await provider.delete(fileId); - } catch (cleanupError) { - console.warn(`Failed to cleanup test file ${fileId}:`, cleanupError); - } - } - } - - // Verify file is deleted - if (fileId) { - const shouldBeNull = await provider.getById(fileId); - expect(shouldBeNull).toBeNull(); - } - }); - - it("should search for files", async () => { - // This test assumes there are some files in the Dropbox account - const result = await provider.search("test", { pageSize: 10 }); - - expect(result).toBeDefined(); - expect(result.items).toBeInstanceOf(Array); - // Results may be empty if no files match - }); - }); - - describe("Error Handling", () => { - it("should handle invalid file ID gracefully", async () => { - const result = await provider.getById("/invalid/path/that/does/not/exist"); - expect(result).toBeNull(); - }); - - it("should handle invalid delete gracefully", async () => { - await expect(provider.delete("/invalid/path")).rejects.toThrow(); - }); - - it("should handle download of non-existent file", async () => { - const result = await provider.download("/invalid/path"); - expect(result).toBeNull(); - }); - }); -}); diff --git a/apps/server/src/providers/dropbox/tests/test-utils.ts b/apps/server/src/providers/dropbox/tests/test-utils.ts deleted file mode 100644 index 5b753a7..0000000 --- a/apps/server/src/providers/dropbox/tests/test-utils.ts +++ /dev/null @@ -1,148 +0,0 @@ -import { DropboxProvider } from "../dropbox-provider"; -import type { FileMetadata } from "@nimbus/shared"; -import { vi } from "vitest"; - -const MOCK_FILE_RESPONSE = { - ".tag": "file" as const, - id: "id:test-file-id", - name: "test-file.txt", - path_lower: "/test-file.txt", - path_display: "/test-file.txt", - size: 11, - client_modified: "2023-01-01T12:00:00Z", - server_modified: "2023-01-01T12:00:00Z", - content_hash: "abc123", -}; - -const MOCK_FOLDER_RESPONSE = { - ".tag": "folder" as const, - id: "id:test-folder-id", - name: "test-folder", - path_lower: "/test-folder", - path_display: "/test-folder", -}; - -function createMockDropboxClient() { - return { - filesCreateFolderV2: vi.fn(), - filesUpload: vi.fn(), - filesGetMetadata: vi.fn(), - filesMoveV2: vi.fn(), - filesDeleteV2: vi.fn(), - filesListFolder: vi.fn(), - filesListFolderContinue: vi.fn(), - filesDownload: vi.fn(), - filesCopyV2: vi.fn(), - usersGetSpaceUsage: vi.fn(), - sharingCreateSharedLinkWithSettings: vi.fn(), - filesSearchV2: vi.fn(), - }; -} - -export const mockDropboxClient = createMockDropboxClient(); - -export function createProviderWithMockClient(): DropboxProvider { - const provider = new DropboxProvider("mock-access-token"); - (provider as any).client = mockDropboxClient; - return provider; -} - -export function createProviderWithFreshMockClient(): DropboxProvider { - const provider = new DropboxProvider("mock-access-token"); - const freshMockClient = createMockDropboxClient(); - (provider as any).client = freshMockClient; - return provider; -} - -export function restoreMockClient(provider: DropboxProvider): void { - (provider as any).client = mockDropboxClient; -} - -export function createFileMetadata(overrides: Partial = {}): FileMetadata { - return { - name: "test-file.txt", - mimeType: "text/plain", - parentId: "", - ...overrides, - }; -} - -export function createFolderMetadata(overrides: Partial = {}): FileMetadata { - return { - name: "test-folder", - mimeType: "application/x-directory", - parentId: "", - ...overrides, - }; -} - -export function resetAllMocks() { - Object.values(mockDropboxClient).forEach(mock => mock.mockReset()); -} - -// Mock successful responses -export const mockResponses = { - createFolder: { - result: { - metadata: MOCK_FOLDER_RESPONSE, - }, - }, - uploadFile: { - result: MOCK_FILE_RESPONSE, - }, - getMetadata: { - result: MOCK_FILE_RESPONSE, - }, - moveFile: { - result: { - metadata: MOCK_FILE_RESPONSE, - }, - }, - listFolder: { - result: { - entries: [MOCK_FILE_RESPONSE, MOCK_FOLDER_RESPONSE], - has_more: true, - cursor: "cursor-123", - }, - }, - download: { - result: { - name: "test-file.txt", - size: 11, - fileBinary: Buffer.from("test content"), - }, - }, - copy: { - result: { - metadata: MOCK_FILE_RESPONSE, - }, - }, - spaceUsage: { - result: { - used: 1000000, - allocation: { - ".tag": "individual", - allocated: 2000000000, - }, - }, - }, - shareableLink: { - result: { - url: "https://dropbox.com/s/test-link", - }, - }, - search: { - result: { - matches: [ - { - metadata: { - ".tag": "metadata", - metadata: MOCK_FILE_RESPONSE, - }, - }, - ], - has_more: true, - cursor: "search-cursor", - }, - }, -}; diff --git a/apps/server/src/providers/s3/tests/basic.test.ts b/apps/server/src/providers/s3/tests/basic.test.ts deleted file mode 100644 index 1fcf565..0000000 --- a/apps/server/src/providers/s3/tests/basic.test.ts +++ /dev/null @@ -1,83 +0,0 @@ -import { cleanupTestBucket, createTestS3Provider, setupTestBucket } from "./test-utils"; -import { afterAll, beforeAll, describe, expect, it } from "vitest"; -import { S3Provider } from "../s3-provider"; - -describe("S3Provider Basic Tests", () => { - const bucketName = "basic-test-bucket"; - let s3Provider: S3Provider; - let testFileId: string | null = null; - - beforeAll(async () => { - await setupTestBucket(bucketName); - }); - - afterAll(async () => { - // Cleanup: Delete test file if it exists - if (testFileId) { - try { - await s3Provider.delete(testFileId); - } catch (error) { - console.warn("Failed to cleanup test file:", error); - } - } - await cleanupTestBucket(bucketName); - }); - - describe("Basic Operations", () => { - it("should create S3Provider instance", () => { - s3Provider = createTestS3Provider(bucketName); - expect(s3Provider).toBeInstanceOf(S3Provider); - }); - - it("should validate bucket access", async () => { - const driveInfo = await s3Provider.getDriveInfo(); - expect(driveInfo).toBeTruthy(); - }); - - it("should list root files", async () => { - const files = await s3Provider.listChildren(); - expect(files).toHaveProperty("items"); - expect(Array.isArray(files.items)).toBe(true); - }); - - it("should create a test file", async () => { - const testContent = Buffer.from("Hello from Nimbus S3 Provider! 🚀"); - const createdFile = await s3Provider.create( - { - name: "nimbus-test.txt", - mimeType: "text/plain", - }, - testContent - ); - - expect(createdFile).toBeDefined(); - if (!createdFile) return; - expect(createdFile.name).toBe("nimbus-test.txt"); - expect(createdFile.mimeType).toBe("text/plain"); - testFileId = createdFile.id; - }); - - it("should download the created file", async () => { - expect(testFileId).toBeDefined(); - if (!testFileId) return; - const downloaded = await s3Provider.download(testFileId); - expect(downloaded).toBeDefined(); - if (!downloaded) return; - expect(downloaded.data.toString()).toBe("Hello from Nimbus S3 Provider! 🚀"); - expect(downloaded.size).toBeGreaterThan(0); - expect(downloaded.mimeType).toBe("text/plain"); - }); - - it("should delete the test file", async () => { - expect(testFileId).toBeDefined(); - if (!testFileId) return; - const deleted = await s3Provider.delete(testFileId); - expect(deleted).toBe(true); - - // Verify file is actually deleted - const files = await s3Provider.listChildren(); - const fileExists = files.items.some(item => item.id === testFileId); - expect(fileExists).toBe(false); - }); - }); -}); diff --git a/apps/server/src/providers/s3/tests/integration.test.ts b/apps/server/src/providers/s3/tests/integration.test.ts deleted file mode 100644 index c425ade..0000000 --- a/apps/server/src/providers/s3/tests/integration.test.ts +++ /dev/null @@ -1,235 +0,0 @@ -import { - cleanupTestBucket, - cleanupTestFiles, - createTestS3Provider, - generateTestFileName, - setupTestBucket, -} from "./test-utils"; -import { afterAll, beforeAll, describe, expect, it } from "vitest"; -import { S3Provider } from "../s3-provider"; - -// Test data interfaces -interface TestFile { - id: string; - name: string; - size?: number; - mimeType?: string; - parentId?: string; -} - -interface TestFolder { - id: string; - name: string; - mimeType: string; -} - -interface TestEnvironment { - folder: TestFolder; - rootFile: TestFile; - nestedFile: TestFile; -} - -/** - * Test resource manager for handling setup and cleanup - */ -class TestResourceManager { - private resources: Array<{ id: string }> = []; - - constructor(private s3Provider: S3Provider) {} - - /** - * Creates a test folder with a unique name and tracks it for cleanup - */ - async createFolder(baseName = "test-folder"): Promise { - const name = generateTestFileName(baseName); - const folder = await this.s3Provider.create({ - name, - mimeType: "application/vnd.google-apps.folder", - }); - this.resources.push({ id: folder!.id }); - return folder!; - } - - /** - * Creates a test file with unique name and content and tracks it for cleanup - */ - async createFile(baseName = "test-file", content = "Test file content", parentId?: string): Promise { - const name = generateTestFileName(baseName) + ".txt"; - const file = await this.s3Provider.create( - { - name, - mimeType: "text/plain", - ...(parentId && { parentId }), - }, - Buffer.from(content) - ); - this.resources.push({ id: file!.id }); - return file!; - } - - /** - * Sets up a complete test environment with folder and files - */ - async setupEnvironment(): Promise { - const folder = await this.createFolder(); - const rootFile = await this.createFile("root-test", "Root file content"); - const nestedFile = await this.createFile("nested-test", "Nested file content", folder.id); - - return { folder, rootFile, nestedFile }; - } - - /** - * Cleans up all tracked resources - */ - async cleanup(): Promise { - const fileIds = this.resources.filter(r => r?.id).map(r => r.id); - await cleanupTestFiles(this.s3Provider, fileIds); - this.resources = []; - } - - /** - * Adds an existing resource to be tracked for cleanup - */ - trackResource(resource: { id: string }): void { - this.resources.push(resource); - } -} - -describe("S3Provider Integration Tests", () => { - const bucketName = generateTestFileName("integration-test-bucket"); - let s3Provider: S3Provider; - let resourceManager: TestResourceManager; - - beforeAll(async () => { - await setupTestBucket(bucketName); - s3Provider = createTestS3Provider(bucketName); - resourceManager = new TestResourceManager(s3Provider); - }); - - afterAll(async () => { - await cleanupTestBucket(bucketName); - }); - - describe("Authentication Interface", () => { - it("should get access token", () => { - const token = s3Provider.getAccessToken(); - expect(typeof token).toBe("string"); - expect(token.length).toBeGreaterThan(0); - }); - - it("should reject token updates", () => { - expect(() => { - s3Provider.setAccessToken("test-token"); - }).toThrow("S3Provider does not support dynamic credential updates"); - }); - }); - - describe("Drive Information", () => { - it("should get drive info successfully", async () => { - const driveInfo = await s3Provider.getDriveInfo(); - expect(driveInfo).toBeDefined(); - expect(typeof driveInfo).toBe("object"); - }); - }); - - describe("File Operations", () => { - it("should create folders and files successfully", async () => { - // Create a folder - const testFolder = await resourceManager.createFolder("create-test-folder"); - expect(testFolder).toBeDefined(); - expect(testFolder.name).toContain("create-test-folder"); - - // Create a file in root - const rootFile = await resourceManager.createFile("create-root-test", "Root file content"); - expect(rootFile).toBeDefined(); - expect(rootFile.name).toContain("create-root-test"); - - // Create a file in folder - const nestedFile = await resourceManager.createFile("create-nested-test", "Nested file content", testFolder.id); - expect(nestedFile).toBeDefined(); - expect(nestedFile.name).toContain("create-nested-test"); - }); - - it("should retrieve files by ID", async () => { - const rootFile = await resourceManager.createFile("retrieve-test", "Content for retrieval"); - - const retrieved = await s3Provider.getById(rootFile.id); - expect(retrieved).toBeDefined(); - expect(retrieved!.id).toBe(rootFile.id); - expect(retrieved!.name).toBe(rootFile.name); - }); - - it("should list directory contents", async () => { - const { folder } = await resourceManager.setupEnvironment(); - - const rootListing = await s3Provider.listChildren(); - expect(rootListing).toBeDefined(); - expect(Array.isArray(rootListing.items)).toBe(true); - - const folderListing = await s3Provider.listChildren(folder.id); - expect(folderListing).toBeDefined(); - expect(Array.isArray(folderListing.items)).toBe(true); - expect(folderListing.items.length).toBeGreaterThan(0); - }); - - it("should download file content", async () => { - const testContent = "Content for download test"; - const rootFile = await resourceManager.createFile("download-test", testContent); - - const downloaded = await s3Provider.download(rootFile.id); - expect(downloaded).toBeDefined(); - if (!downloaded) return; - expect(downloaded.data.toString()).toBe(testContent); - expect(downloaded.size).toBeGreaterThan(0); - }); - - it("should update file metadata", async () => { - const rootFile = await resourceManager.createFile("update-test", "Content for update"); - - const newName = generateTestFileName("renamed-test") + ".txt"; - const updatedFile = await s3Provider.update(rootFile.id, { - name: newName, - }); - expect(updatedFile).toBeDefined(); - expect(updatedFile!.name).toBe(newName); - }); - - it("should copy files between directories", async () => { - const { folder, rootFile } = await resourceManager.setupEnvironment(); - - const copyName = generateTestFileName("copied-file") + ".txt"; - const copiedFile = await s3Provider.copy(rootFile.id, folder.id, copyName); - resourceManager.trackResource({ id: copiedFile!.id }); - expect(copiedFile).toBeDefined(); - expect(copiedFile!.name).toBe(copyName); - }); - - it("should move files between directories", async () => { - const { nestedFile } = await resourceManager.setupEnvironment(); - const moveName = generateTestFileName("moved-to-root") + ".txt"; - const movedFile = await s3Provider.move(nestedFile.id, "", moveName); - resourceManager.trackResource({ id: movedFile!.id }); - expect(movedFile).toBeDefined(); - expect(movedFile!.name).toBe(moveName); - }); - - it("should search for files", async () => { - const searchTerm = generateTestFileName("searchable"); - await resourceManager.createFile(searchTerm, "Searchable content"); - const searchResults = await s3Provider.search(searchTerm); - expect(searchResults).toBeDefined(); - expect(Array.isArray(searchResults.items)).toBe(true); - // Note: Search might not always return results immediately in S3 - }); - }); - - describe("Shareable Links", () => { - it("should handle shareable links appropriately", async () => { - const testManager = new TestResourceManager(s3Provider); - const testFile = await testManager.createFile("shareable-test", "Content for sharing"); - const shareLink = await s3Provider.getShareableLink(testFile.id); - // S3 typically returns null for shareable links - expect(shareLink === null || typeof shareLink === "string").toBe(true); - }); - }); -}); diff --git a/apps/server/src/providers/s3/tests/s3-provider.test.ts b/apps/server/src/providers/s3/tests/s3-provider.test.ts deleted file mode 100644 index dc028a5..0000000 --- a/apps/server/src/providers/s3/tests/s3-provider.test.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { describe, expect, it } from "vitest"; -import { S3Provider } from "../s3-provider"; - -describe("S3Provider", () => { - const mockConfig = { - accessKeyId: "test-access-key", - secretAccessKey: "test-secret-key", - region: "us-east-1", - bucketName: "test-bucket", - }; - - describe("Constructor", () => { - it("should create S3Provider with correct config", () => { - const s3Provider = new S3Provider(mockConfig); - expect(s3Provider).toBeInstanceOf(S3Provider); - // The token is base64 encoded with a timestamp, so we decode it to check. - const decodedToken = Buffer.from(s3Provider.getAccessToken(), "base64").toString("utf-8"); - expect(decodedToken).toContain(mockConfig.accessKeyId); - }); - - it("should handle custom endpoint", () => { - const providerWithEndpoint = new S3Provider({ - ...mockConfig, - endpoint: "https://minio.example.com", - }); - expect(providerWithEndpoint).toBeInstanceOf(S3Provider); - }); - - it("should throw an error if region is missing", () => { - expect(() => { - new S3Provider({ - accessKeyId: "", - secretAccessKey: "", - region: "", // AWS SDK requires a region - bucketName: "", - }); - }).toThrow(); - }); - }); - - describe("Authentication Interface", () => { - it("should get access token and reject token updates", () => { - const s3Provider = new S3Provider(mockConfig); - const originalToken = s3Provider.getAccessToken(); - - expect(typeof originalToken).toBe("string"); - expect(originalToken.length).toBeGreaterThan(0); - - // S3Provider should reject dynamic token updates for security - expect(() => { - s3Provider.setAccessToken("new-token"); - }).toThrow("S3Provider does not support dynamic credential updates"); - }); - }); - - describe("S3-Compatible Services", () => { - it("should support MinIO configuration", () => { - const minioProvider = new S3Provider({ - accessKeyId: "minio-key", - secretAccessKey: "minio-secret", - region: "us-east-1", - bucketName: "test-bucket", - endpoint: "http://localhost:9000", - }); - expect(minioProvider).toBeInstanceOf(S3Provider); - }); - }); -}); diff --git a/apps/server/src/providers/s3/tests/test-utils.ts b/apps/server/src/providers/s3/tests/test-utils.ts deleted file mode 100644 index 357124b..0000000 --- a/apps/server/src/providers/s3/tests/test-utils.ts +++ /dev/null @@ -1,116 +0,0 @@ -import { CreateBucketCommand, S3Client } from "@aws-sdk/client-s3"; -import { S3Provider } from "../s3-provider"; - -const config = { - endpoint: "http://localhost:9000", - region: "us-east-1", - accessKeyId: "minioadmin", - secretAccessKey: "minioadmin", - forcePathStyle: true, // Required for local S3 docker container -}; - -// Create S3 client -const createLocalS3Client = () => { - return new S3Client({ - endpoint: config.endpoint, - region: config.region, - credentials: { - accessKeyId: config.accessKeyId, - secretAccessKey: config.secretAccessKey, - }, - forcePathStyle: config.forcePathStyle, - }); -}; - -// Setup test bucket -export const setupTestBucket = async (bucketName: string) => { - const s3Client = createLocalS3Client(); - - try { - await s3Client.send( - new CreateBucketCommand({ - Bucket: bucketName, - }) - ); - } catch (error) { - // Bucket might already exist, which is fine - console.log(`Test bucket '${bucketName}' already exists or error:`, error); - } -}; - -// Cleanup test bucket -export const cleanupTestBucket = async (bucketName: string) => { - const s3Client = createLocalS3Client(); - - try { - // List all objects in the bucket - const { ListObjectsV2Command } = await import("@aws-sdk/client-s3"); - const listResponse = await s3Client.send( - new ListObjectsV2Command({ - Bucket: bucketName, - }) - ); - - // Delete all objects - if (listResponse.Contents && listResponse.Contents.length > 0) { - const { DeleteObjectCommand } = await import("@aws-sdk/client-s3"); - - for (const object of listResponse.Contents) { - if (object.Key) { - await s3Client.send( - new DeleteObjectCommand({ - Bucket: bucketName, - Key: object.Key, - }) - ); - } - } - } - - // Delete the bucket - const { DeleteBucketCommand } = await import("@aws-sdk/client-s3"); - await s3Client.send( - new DeleteBucketCommand({ - Bucket: bucketName, - }) - ); - } catch (error) { - console.log(`Error cleaning up test bucket:`, error); - } -}; - -/** - * Creates an S3Provider instance - */ -export function createTestS3Provider(bucketName: string): S3Provider { - return new S3Provider({ - accessKeyId: config.accessKeyId, - secretAccessKey: config.secretAccessKey, - region: config.region, - bucketName, - endpoint: config.endpoint, - forcePathStyle: config.forcePathStyle, - }); -} - -/** - * Generates a unique test file name - */ -export function generateTestFileName(prefix = "test") { - return `${prefix}-${Date.now()}-${Math.random().toString(36).substring(2, 15)}`; -} - -/** - * Cleans up test files created during testing - */ -export async function cleanupTestFiles(s3Provider: S3Provider, fileIds: string[]) { - const cleanupPromises = fileIds.map(async fileId => { - try { - await s3Provider.delete(fileId); - } catch (error) { - console.warn(`Failed to cleanup test file ${fileId}:`, error); - } - }); - - await Promise.all(cleanupPromises); -} diff --git a/apps/server/vitest.config.ts b/apps/server/vitest.config.ts deleted file mode 100644 index 724bcf4..0000000 --- a/apps/server/vitest.config.ts +++ /dev/null @@ -1,3 +0,0 @@ -import defineConfig from "@nimbus/vitest"; - -export default defineConfig; diff --git a/apps/web/.eslintrc.json b/apps/web/.eslintrc.json deleted file mode 100644 index a885bd8..0000000 --- a/apps/web/.eslintrc.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": ["next/core-web-vitals", "next/typescript"] -} diff --git a/apps/web/index.html b/apps/web/index.html new file mode 100644 index 0000000..76fceb0 --- /dev/null +++ b/apps/web/index.html @@ -0,0 +1,19 @@ + + + + + + + + + + Nimbus + + +
+ + + diff --git a/apps/web/next.config.ts b/apps/web/next.config.ts deleted file mode 100644 index 0044a46..0000000 --- a/apps/web/next.config.ts +++ /dev/null @@ -1,9 +0,0 @@ -import type { NextConfig } from "next"; - -const nextConfig: NextConfig = { - reactStrictMode: true, - output: "standalone", - transpilePackages: ["@t3-oss/env-core"], -}; - -export default nextConfig; diff --git a/apps/web/package.json b/apps/web/package.json index bd46d18..cdf3984 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -4,19 +4,14 @@ "type": "module", "private": true, "scripts": { - "lint": "next lint", - "dev": "next dev --turbopack", - "build": "next build && bash scripts/handle-nextjs-standalone-build.sh", - "start": "bun run .next/build-start-folder/apps/web/server.js", - "docker:build": "bun run build && docker build -t nimbus-web-manual .", - "docker:run": "source .env && docker run --name nimbus-web-manual --env-file .env -p $WEB_PORT:$WEB_PORT nimbus-web-manual:latest", + "lint": "oxlint --fix", + "dev": "vite", + "build": "vite build", + "start": "vite preview --port ${WEB_PORT:-3000}", "docker:up": "bun run build && docker compose up -d", - "docker:down": "docker compose down", - "docker:remove": "docker compose down --rmi local -v", - "docker:reset": "bun run docker:remove && bun run docker:up" + "docker:down": "docker compose down" }, "dependencies": { - "@databuddy/sdk": "^2.0.0", "@dnd-kit/react": "^0.1.20", "@hookform/resolvers": "^5.2.1", "@nimbus/auth": "workspace:*", @@ -38,10 +33,11 @@ "@radix-ui/react-tabs": "^1.1.12", "@radix-ui/react-tooltip": "^1.2.7", "@t3-oss/env-core": "^0.13.8", - "@tailwindcss/postcss": "^4.1.11", "@tanstack/react-query": "^5.83.0", "@tanstack/react-query-devtools": "^5.84.1", + "@tanstack/react-router-devtools": "^1.133.0", "@tanstack/react-table": "^8.21.3", + "@tanstack/router": "^0.0.1-beta.53", "axios": "^1.11.0", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", @@ -49,28 +45,27 @@ "hono": "^4.8.10", "lucide-react": "^0.534.0", "motion": "^12.23.12", - "next": "15.3", "next-themes": "^0.4.6", - "posthog-js": "^1.260.1", "react": "^19.1.1", "react-dom": "^19.1.1", "react-dropzone": "^14.3.8", "react-hook-form": "^7.61.1", "recharts": "^3.1.0", "sonner": "^2.0.6", - "stripe": "^17.4.0", "tailwind-merge": "^3.3.1", - "tailwind-scrollbar": "^4.0.2", "tailwindcss": "^4.1.11", "tw-animate-css": "^1.3.6", "vaul": "^1.1.2", "zod": "^4.0.14" }, "devDependencies": { - "@nimbus/vitest": "workspace:*", + "@tanstack/router-plugin": "^1.94.4", + "@types/node": "^22.10.2", "@types/react": "^19.1.9", "@types/react-dom": "^19.1.7", + "@vitejs/plugin-react": "^4.3.4", "eslint": "^9.32.0", - "eslint-config-next": "15.4" + "vite": "^6.0.7", + "vite-tsconfig-paths": "^5.1.4" } } diff --git a/apps/web/postcss.config.mjs b/apps/web/postcss.config.mjs index f50127c..2f95834 100644 --- a/apps/web/postcss.config.mjs +++ b/apps/web/postcss.config.mjs @@ -1,5 +1,7 @@ +import tailwindcss from "@tailwindcss/postcss"; + const config = { - plugins: ["@tailwindcss/postcss"], + plugins: [tailwindcss], }; export default config; diff --git a/apps/web/src/app/favicon.ico b/apps/web/public/favicon.ico similarity index 100% rename from apps/web/src/app/favicon.ico rename to apps/web/public/favicon.ico diff --git a/apps/web/public/robots.txt b/apps/web/public/robots.txt new file mode 100644 index 0000000..60dcb8e --- /dev/null +++ b/apps/web/public/robots.txt @@ -0,0 +1,7 @@ +User-agent: * +Allow: / +Disallow: /dashboard/ +Disallow: /api/auth/ +Disallow: /reset-password + +Sitemap: https://nimbus.example.com/sitemap.xml diff --git a/apps/web/src/app/(protected)/(dashboard)/dashboard/[providerSlug]/[accountId]/layout.tsx b/apps/web/src/app/(protected)/(dashboard)/dashboard/[providerSlug]/[accountId]/layout.tsx deleted file mode 100644 index db0be6c..0000000 --- a/apps/web/src/app/(protected)/(dashboard)/dashboard/[providerSlug]/[accountId]/layout.tsx +++ /dev/null @@ -1,22 +0,0 @@ -"use client"; - -import { DownloadProvider } from "@/components/providers/download-provider"; -import { AccountProvider } from "@/components/providers/account-provider"; -import { SidebarInset, SidebarProvider } from "@/components/ui/sidebar"; -import { AppSidebar } from "@/components/dashboard/sidebar"; -import type { ReactNode } from "react"; - -export default function AppLayout({ children }: { children: ReactNode }) { - return ( - - - - - -
{children}
-
-
-
-
- ); -} diff --git a/apps/web/src/app/(protected)/(dashboard)/dashboard/layout.tsx b/apps/web/src/app/(protected)/(dashboard)/dashboard/layout.tsx deleted file mode 100644 index dd7aa0b..0000000 --- a/apps/web/src/app/(protected)/(dashboard)/dashboard/layout.tsx +++ /dev/null @@ -1,14 +0,0 @@ -"use client"; - -import type { ReactNode } from "react"; - -import { DefaultAccountProvider } from "@/components/providers/default-account-provider"; -import { UserInfoProvider } from "@/components/providers/user-info-provider"; - -export default function AppLayout({ children }: { children: ReactNode }) { - return ( - - {children} - - ); -} diff --git a/apps/web/src/app/(protected)/layout.tsx b/apps/web/src/app/(protected)/layout.tsx deleted file mode 100644 index df405dc..0000000 --- a/apps/web/src/app/(protected)/layout.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { ProtectedRoute } from "@/components/providers/protected-route"; - -export default function ProtectedLayout({ children }: { children: React.ReactNode }) { - return {children}; -} diff --git a/apps/web/src/app/(public)/(contributors)/contributors/page.tsx b/apps/web/src/app/(public)/(contributors)/contributors/page.tsx deleted file mode 100644 index 03573f2..0000000 --- a/apps/web/src/app/(public)/(contributors)/contributors/page.tsx +++ /dev/null @@ -1,13 +0,0 @@ -"use client"; - -import Contributors from "@/components/contributors/contributors"; -import Header from "@/components/home/header"; - -export default function ContributorsPage() { - return ( -
-
- -
- ); -} diff --git a/apps/web/src/app/(public)/(legal)/layout.tsx b/apps/web/src/app/(public)/(legal)/layout.tsx deleted file mode 100644 index 090cdee..0000000 --- a/apps/web/src/app/(public)/(legal)/layout.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import Header from "@/components/home/header"; -import Footer from "@/components/home/footer"; -import type { ReactNode } from "react"; - -// this is a copy of Analogs legal layout component with some changes -// https://github.com/analogdotnow/Analog/blob/main/apps/web/src/app/(legal)/layout.tsx - -export default function LegalLayout({ children }: { children: ReactNode }) { - return ( - //
-
-
- {children} -
-
- ); -} diff --git a/apps/web/src/app/(public)/layout.tsx b/apps/web/src/app/(public)/layout.tsx deleted file mode 100644 index 6cc7438..0000000 --- a/apps/web/src/app/(public)/layout.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { PublicRoute } from "@/components/providers/public-route"; - -export default function PublicLayout({ children }: { children: React.ReactNode }) { - return {children}; -} diff --git a/apps/web/src/app/layout.tsx b/apps/web/src/app/layout.tsx deleted file mode 100644 index 21a6b82..0000000 --- a/apps/web/src/app/layout.tsx +++ /dev/null @@ -1,115 +0,0 @@ -import { ReactQueryProvider } from "@/components/providers/query-provider"; -import { ThemeProvider } from "@/components/providers/theme-provider"; -import { PHProvider } from "@/components/providers/posthog-provider"; -import { AppProviders } from "@/components/providers/app-providers"; -import { ReactQueryDevtools } from "@tanstack/react-query-devtools"; -import { Geist, Geist_Mono } from "next/font/google"; -import { Databuddy } from "@databuddy/sdk/react"; -import { siteConfig } from "@/utils/site-config"; -import OGImage from "@/public/images/og.png"; -import type env from "@nimbus/env/client"; -import { manrope } from "@/utils/fonts"; -import type { ReactNode } from "react"; -import type { Metadata } from "next"; -import { Toaster } from "sonner"; -import "@/app/globals.css"; - -export const metadata: Metadata = { - keywords: ["nimbus", "cloud", "storage", "file", "sharing", "upload", "download", "sync", "backup"], - title: { - default: siteConfig.name, - template: `%s | ${siteConfig.name}`, - }, - description: siteConfig.description, - metadataBase: new URL(siteConfig.url as string), - openGraph: { - title: siteConfig.name, - description: siteConfig.description, - url: siteConfig.url, - siteName: siteConfig.name, - images: [ - { - url: OGImage.src, - width: OGImage.width, - height: OGImage.height, - alt: siteConfig.name, - }, - ], - locale: "en_US", - type: "website", - }, - twitter: { - title: siteConfig.name, - description: siteConfig.description, - site: siteConfig.twitterHandle, - card: "summary_large_image", - images: [ - { - url: OGImage.src, - width: OGImage.width, - height: OGImage.height, - alt: siteConfig.name, - }, - ], - }, - robots: { - index: true, - follow: true, - nocache: false, - googleBot: { - index: true, - follow: true, - noimageindex: false, - "max-video-preview": -1, - "max-image-preview": "large", - "max-snippet": -1, - }, - }, -}; - -const geistSans = Geist({ - variable: "--font-geist-sans", - subsets: ["latin"], -}); - -const geistMono = Geist_Mono({ - variable: "--font-geist-mono", - subsets: ["latin"], -}); - -export default function RootLayout({ children }: { children: ReactNode }) { - return ( - - - - - -
-
{children}
- - -
-
-
- -
- - - ); -} diff --git a/apps/web/src/app/page.tsx b/apps/web/src/app/page.tsx deleted file mode 100644 index 749c1fc..0000000 --- a/apps/web/src/app/page.tsx +++ /dev/null @@ -1,7 +0,0 @@ -"use client"; - -import Hero from "@/components/home/hero"; - -export default function Home() { - return ; -} diff --git a/apps/web/src/app/robots.ts b/apps/web/src/app/robots.ts deleted file mode 100644 index e82ef01..0000000 --- a/apps/web/src/app/robots.ts +++ /dev/null @@ -1,19 +0,0 @@ -import type { MetadataRoute } from "next"; -import { getBaseUrl } from "@/lib/utils"; - -export const dynamic = "force-static"; - -export default function robots(): MetadataRoute.Robots { - const baseUrl = getBaseUrl(); - - return { - rules: [ - { - userAgent: "*", - allow: "/", - disallow: ["/dashboard/*", "/api/auth/*", "/reset-password"], - }, - ], - sitemap: `${baseUrl}/sitemap.xml`, - }; -} diff --git a/apps/web/src/app/sitemap.ts b/apps/web/src/app/sitemap.ts deleted file mode 100644 index 5491238..0000000 --- a/apps/web/src/app/sitemap.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { getBaseUrl, buildUrl } from "@/lib/utils"; -import type { MetadataRoute } from "next"; - -export const dynamic = "force-static"; - -export default function sitemap(): MetadataRoute.Sitemap { - const baseUrl = getBaseUrl(); - const now = new Date(); - - return [ - { - url: baseUrl, - lastModified: now, - changeFrequency: "weekly", - priority: 1, - }, - { - url: buildUrl("/signin"), - lastModified: now, - changeFrequency: "yearly", - priority: 0.6, - }, - { - url: buildUrl("/signup"), - lastModified: now, - changeFrequency: "yearly", - priority: 0.6, - }, - { - url: buildUrl("/contributors"), - lastModified: now, - changeFrequency: "monthly", - priority: 0.7, - }, - ]; -} diff --git a/apps/web/src/components/brand-assets/bg-angels.tsx b/apps/web/src/components/brand-assets/bg-angels.tsx index ee13f31..0694dcb 100644 --- a/apps/web/src/components/brand-assets/bg-angels.tsx +++ b/apps/web/src/components/brand-assets/bg-angels.tsx @@ -1,8 +1,5 @@ -import HeroBgDark from "@/public/images/hero-dithered-black.png"; -import HeroBgLight from "public/images/hero-dithered-white.png"; import { type ComponentProps } from "react"; import { cn } from "@/lib/utils"; -import Image from "next/image"; type BgAngelsProps = { className?: string; @@ -12,23 +9,21 @@ type BgAngelsProps = { export default function BgAngels({ className, alt }: BgAngelsProps) { return ( <> - {alt - {alt ); diff --git a/apps/web/src/components/home/hero.tsx b/apps/web/src/components/home/hero.tsx index 4a415ac..f7ecba3 100644 --- a/apps/web/src/components/home/hero.tsx +++ b/apps/web/src/components/home/hero.tsx @@ -1,13 +1,10 @@ import { AnimatedGroup } from "@/components/ui/animated-group"; import BgAngels from "@/components/brand-assets/bg-angels"; import { WaitlistForm } from "@/components/home/waitlist"; -import HeroLight from "@/public/images/hero-light.png"; -import HeroDark from "@/public/images/hero-dark.png"; import { useIsMobile } from "@/hooks/use-mobile"; import Header from "@/components/home/header"; import Footer from "@/components/home/footer"; import { type Variants } from "motion/react"; -import Image from "next/image"; const transitionVariants: { item: Variants } = { item: { @@ -84,23 +81,17 @@ export default function Hero() { >
- Hero - Hero
diff --git a/apps/web/src/components/providers/default-account-provider.tsx b/apps/web/src/components/providers/default-account-provider.tsx index cb2ac44..baca086 100644 --- a/apps/web/src/components/providers/default-account-provider.tsx +++ b/apps/web/src/components/providers/default-account-provider.tsx @@ -2,9 +2,9 @@ import { createContext, useContext, useEffect, useState, type ReactNode } from "react"; import type { DriveProvider, DriveProviderSlug } from "@nimbus/shared"; +import { useNavigate, useLocation } from "@tanstack/react-router"; import { providerToSlug, slugToProvider } from "@nimbus/shared"; import { useUserInfoProvider } from "./user-info-provider"; -import { usePathname, useRouter } from "next/navigation"; interface AccountProvider { defaultProviderSlug: DriveProviderSlug | null; @@ -18,8 +18,9 @@ const DefaultAccountProviderContext = createContext export function DefaultAccountProvider({ children }: { children: ReactNode }) { const { user, error: userInfoError, isLoading: userInfoIsPending } = useUserInfoProvider(); - const router = useRouter(); - const pathname = usePathname(); + const navigate = useNavigate(); + const location = useLocation(); + const pathname = location.pathname; const [state, setState] = useState(() => ({ defaultProviderSlug: null, @@ -78,7 +79,7 @@ export function DefaultAccountProvider({ children }: { children: ReactNode }) { } const path = `/dashboard/${providerSlug}/${accountId}`; if (pathname !== path) { - router.push(path); + navigate({ to: path as any }); } }; diff --git a/apps/web/src/app/globals.css b/apps/web/src/globals.css similarity index 100% rename from apps/web/src/app/globals.css rename to apps/web/src/globals.css diff --git a/apps/web/src/hooks/useTheme.ts b/apps/web/src/hooks/useTheme.ts deleted file mode 100644 index fb3afbe..0000000 --- a/apps/web/src/hooks/useTheme.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { useTheme as useNextTheme } from "next-themes"; -import { useIsMounted } from "./useIsMounted"; - -export const useTheme = () => { - const { theme, setTheme } = useNextTheme(); - const isMounted = useIsMounted(); - - const toggleTheme = (): void => { - setTheme(theme === "dark" ? "light" : "dark"); - }; - - return { theme, toggleTheme, isMounted }; -}; diff --git a/apps/web/src/main.tsx b/apps/web/src/main.tsx new file mode 100644 index 0000000..63b73fd --- /dev/null +++ b/apps/web/src/main.tsx @@ -0,0 +1,44 @@ +import { RouterProvider, createRouter } from "@tanstack/react-router"; +import { routeTree } from "./routeTree.gen"; +import ReactDOM from "react-dom/client"; +import { StrictMode } from "react"; +import "./globals.css"; + +// Create a new router instance +const router = createRouter({ + routeTree, + defaultPreload: "intent", + defaultPreloadStaleTime: 0, + context: undefined!, + defaultPendingComponent: () => ( +
+
+
+

Loading...

+
+
+ ), +}); + +// Register the router instance for type safety +declare module "@tanstack/react-router" { + interface Register { + router: typeof router; + } +} + +// Render the app +const rootElement = document.getElementById("root"); + +if (!rootElement) { + throw new Error("Root element not found. Make sure there is a div with id='root' in your index.html"); +} + +if (!rootElement.innerHTML) { + const root = ReactDOM.createRoot(rootElement); + root.render( + + + + ); +} diff --git a/apps/web/src/routeTree.gen.ts b/apps/web/src/routeTree.gen.ts new file mode 100644 index 0000000..647c7e7 --- /dev/null +++ b/apps/web/src/routeTree.gen.ts @@ -0,0 +1,388 @@ +/* eslint-disable */ + +// @ts-nocheck + +// noinspection JSUnusedGlobalSymbols + +// This file was automatically generated by TanStack Router. +// You should NOT make any changes in this file as it will be overwritten. +// Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified. + +import { Route as ProtectedDashboardProviderSlugAccountIdRouteImport } from "./routes/_protected/dashboard/$providerSlug.$accountId"; +import { Route as ProtectedDashboardSettingsRouteImport } from "./routes/_protected/dashboard/settings"; +import { Route as ProtectedDashboardIndexRouteImport } from "./routes/_protected/dashboard/index"; +import { Route as PublicForgotPasswordRouteImport } from "./routes/_public/forgot-password"; +import { Route as PublicResetPasswordRouteImport } from "./routes/_public/reset-password"; +import { Route as PublicContributorsRouteImport } from "./routes/_public/contributors"; +import { Route as ProtectedDashboardRouteImport } from "./routes/_protected/dashboard"; +import { Route as PublicVerifyEmailRouteImport } from "./routes/_public/verify-email"; +import { Route as PublicPrivacyRouteImport } from "./routes/_public/privacy"; +import { Route as PublicSignupRouteImport } from "./routes/_public/signup"; +import { Route as PublicSigninRouteImport } from "./routes/_public/signin"; +import { Route as PublicTermsRouteImport } from "./routes/_public/terms"; +import { Route as ProtectedRouteImport } from "./routes/_protected"; +import { Route as PublicRouteImport } from "./routes/_public"; +import { Route as rootRouteImport } from "./routes/__root"; +import { Route as IndexRouteImport } from "./routes/index"; +import { Route as DebugRouteImport } from "./routes/debug"; + +const DebugRoute = DebugRouteImport.update({ + id: "/debug", + path: "/debug", + getParentRoute: () => rootRouteImport, +} as any); +const PublicRoute = PublicRouteImport.update({ + id: "/_public", + getParentRoute: () => rootRouteImport, +} as any); +const ProtectedRoute = ProtectedRouteImport.update({ + id: "/_protected", + getParentRoute: () => rootRouteImport, +} as any); +const IndexRoute = IndexRouteImport.update({ + id: "/", + path: "/", + getParentRoute: () => rootRouteImport, +} as any); +const PublicVerifyEmailRoute = PublicVerifyEmailRouteImport.update({ + id: "/verify-email", + path: "/verify-email", + getParentRoute: () => PublicRoute, +} as any); +const PublicTermsRoute = PublicTermsRouteImport.update({ + id: "/terms", + path: "/terms", + getParentRoute: () => PublicRoute, +} as any); +const PublicSignupRoute = PublicSignupRouteImport.update({ + id: "/signup", + path: "/signup", + getParentRoute: () => PublicRoute, +} as any); +const PublicSigninRoute = PublicSigninRouteImport.update({ + id: "/signin", + path: "/signin", + getParentRoute: () => PublicRoute, +} as any); +const PublicResetPasswordRoute = PublicResetPasswordRouteImport.update({ + id: "/reset-password", + path: "/reset-password", + getParentRoute: () => PublicRoute, +} as any); +const PublicPrivacyRoute = PublicPrivacyRouteImport.update({ + id: "/privacy", + path: "/privacy", + getParentRoute: () => PublicRoute, +} as any); +const PublicForgotPasswordRoute = PublicForgotPasswordRouteImport.update({ + id: "/forgot-password", + path: "/forgot-password", + getParentRoute: () => PublicRoute, +} as any); +const PublicContributorsRoute = PublicContributorsRouteImport.update({ + id: "/contributors", + path: "/contributors", + getParentRoute: () => PublicRoute, +} as any); +const ProtectedDashboardRoute = ProtectedDashboardRouteImport.update({ + id: "/dashboard", + path: "/dashboard", + getParentRoute: () => ProtectedRoute, +} as any); +const ProtectedDashboardIndexRoute = ProtectedDashboardIndexRouteImport.update({ + id: "/", + path: "/", + getParentRoute: () => ProtectedDashboardRoute, +} as any); +const ProtectedDashboardSettingsRoute = ProtectedDashboardSettingsRouteImport.update({ + id: "/settings", + path: "/settings", + getParentRoute: () => ProtectedDashboardRoute, +} as any); +const ProtectedDashboardProviderSlugAccountIdRoute = ProtectedDashboardProviderSlugAccountIdRouteImport.update({ + id: "/$providerSlug/$accountId", + path: "/$providerSlug/$accountId", + getParentRoute: () => ProtectedDashboardRoute, +} as any); + +export interface FileRoutesByFullPath { + "/": typeof IndexRoute; + "/debug": typeof DebugRoute; + "/dashboard": typeof ProtectedDashboardRouteWithChildren; + "/contributors": typeof PublicContributorsRoute; + "/forgot-password": typeof PublicForgotPasswordRoute; + "/privacy": typeof PublicPrivacyRoute; + "/reset-password": typeof PublicResetPasswordRoute; + "/signin": typeof PublicSigninRoute; + "/signup": typeof PublicSignupRoute; + "/terms": typeof PublicTermsRoute; + "/verify-email": typeof PublicVerifyEmailRoute; + "/dashboard/settings": typeof ProtectedDashboardSettingsRoute; + "/dashboard/": typeof ProtectedDashboardIndexRoute; + "/dashboard/$providerSlug/$accountId": typeof ProtectedDashboardProviderSlugAccountIdRoute; +} +export interface FileRoutesByTo { + "/": typeof IndexRoute; + "/debug": typeof DebugRoute; + "/contributors": typeof PublicContributorsRoute; + "/forgot-password": typeof PublicForgotPasswordRoute; + "/privacy": typeof PublicPrivacyRoute; + "/reset-password": typeof PublicResetPasswordRoute; + "/signin": typeof PublicSigninRoute; + "/signup": typeof PublicSignupRoute; + "/terms": typeof PublicTermsRoute; + "/verify-email": typeof PublicVerifyEmailRoute; + "/dashboard/settings": typeof ProtectedDashboardSettingsRoute; + "/dashboard": typeof ProtectedDashboardIndexRoute; + "/dashboard/$providerSlug/$accountId": typeof ProtectedDashboardProviderSlugAccountIdRoute; +} +export interface FileRoutesById { + __root__: typeof rootRouteImport; + "/": typeof IndexRoute; + "/_protected": typeof ProtectedRouteWithChildren; + "/_public": typeof PublicRouteWithChildren; + "/debug": typeof DebugRoute; + "/_protected/dashboard": typeof ProtectedDashboardRouteWithChildren; + "/_public/contributors": typeof PublicContributorsRoute; + "/_public/forgot-password": typeof PublicForgotPasswordRoute; + "/_public/privacy": typeof PublicPrivacyRoute; + "/_public/reset-password": typeof PublicResetPasswordRoute; + "/_public/signin": typeof PublicSigninRoute; + "/_public/signup": typeof PublicSignupRoute; + "/_public/terms": typeof PublicTermsRoute; + "/_public/verify-email": typeof PublicVerifyEmailRoute; + "/_protected/dashboard/settings": typeof ProtectedDashboardSettingsRoute; + "/_protected/dashboard/": typeof ProtectedDashboardIndexRoute; + "/_protected/dashboard/$providerSlug/$accountId": typeof ProtectedDashboardProviderSlugAccountIdRoute; +} +export interface FileRouteTypes { + fileRoutesByFullPath: FileRoutesByFullPath; + fullPaths: + | "/" + | "/debug" + | "/dashboard" + | "/contributors" + | "/forgot-password" + | "/privacy" + | "/reset-password" + | "/signin" + | "/signup" + | "/terms" + | "/verify-email" + | "/dashboard/settings" + | "/dashboard/" + | "/dashboard/$providerSlug/$accountId"; + fileRoutesByTo: FileRoutesByTo; + to: + | "/" + | "/debug" + | "/contributors" + | "/forgot-password" + | "/privacy" + | "/reset-password" + | "/signin" + | "/signup" + | "/terms" + | "/verify-email" + | "/dashboard/settings" + | "/dashboard" + | "/dashboard/$providerSlug/$accountId"; + id: + | "__root__" + | "/" + | "/_protected" + | "/_public" + | "/debug" + | "/_protected/dashboard" + | "/_public/contributors" + | "/_public/forgot-password" + | "/_public/privacy" + | "/_public/reset-password" + | "/_public/signin" + | "/_public/signup" + | "/_public/terms" + | "/_public/verify-email" + | "/_protected/dashboard/settings" + | "/_protected/dashboard/" + | "/_protected/dashboard/$providerSlug/$accountId"; + fileRoutesById: FileRoutesById; +} +export interface RootRouteChildren { + IndexRoute: typeof IndexRoute; + ProtectedRoute: typeof ProtectedRouteWithChildren; + PublicRoute: typeof PublicRouteWithChildren; + DebugRoute: typeof DebugRoute; +} + +declare module "@tanstack/react-router" { + interface FileRoutesByPath { + "/debug": { + id: "/debug"; + path: "/debug"; + fullPath: "/debug"; + preLoaderRoute: typeof DebugRouteImport; + parentRoute: typeof rootRouteImport; + }; + "/_public": { + id: "/_public"; + path: ""; + fullPath: ""; + preLoaderRoute: typeof PublicRouteImport; + parentRoute: typeof rootRouteImport; + }; + "/_protected": { + id: "/_protected"; + path: ""; + fullPath: ""; + preLoaderRoute: typeof ProtectedRouteImport; + parentRoute: typeof rootRouteImport; + }; + "/": { + id: "/"; + path: "/"; + fullPath: "/"; + preLoaderRoute: typeof IndexRouteImport; + parentRoute: typeof rootRouteImport; + }; + "/_public/verify-email": { + id: "/_public/verify-email"; + path: "/verify-email"; + fullPath: "/verify-email"; + preLoaderRoute: typeof PublicVerifyEmailRouteImport; + parentRoute: typeof PublicRoute; + }; + "/_public/terms": { + id: "/_public/terms"; + path: "/terms"; + fullPath: "/terms"; + preLoaderRoute: typeof PublicTermsRouteImport; + parentRoute: typeof PublicRoute; + }; + "/_public/signup": { + id: "/_public/signup"; + path: "/signup"; + fullPath: "/signup"; + preLoaderRoute: typeof PublicSignupRouteImport; + parentRoute: typeof PublicRoute; + }; + "/_public/signin": { + id: "/_public/signin"; + path: "/signin"; + fullPath: "/signin"; + preLoaderRoute: typeof PublicSigninRouteImport; + parentRoute: typeof PublicRoute; + }; + "/_public/reset-password": { + id: "/_public/reset-password"; + path: "/reset-password"; + fullPath: "/reset-password"; + preLoaderRoute: typeof PublicResetPasswordRouteImport; + parentRoute: typeof PublicRoute; + }; + "/_public/privacy": { + id: "/_public/privacy"; + path: "/privacy"; + fullPath: "/privacy"; + preLoaderRoute: typeof PublicPrivacyRouteImport; + parentRoute: typeof PublicRoute; + }; + "/_public/forgot-password": { + id: "/_public/forgot-password"; + path: "/forgot-password"; + fullPath: "/forgot-password"; + preLoaderRoute: typeof PublicForgotPasswordRouteImport; + parentRoute: typeof PublicRoute; + }; + "/_public/contributors": { + id: "/_public/contributors"; + path: "/contributors"; + fullPath: "/contributors"; + preLoaderRoute: typeof PublicContributorsRouteImport; + parentRoute: typeof PublicRoute; + }; + "/_protected/dashboard": { + id: "/_protected/dashboard"; + path: "/dashboard"; + fullPath: "/dashboard"; + preLoaderRoute: typeof ProtectedDashboardRouteImport; + parentRoute: typeof ProtectedRoute; + }; + "/_protected/dashboard/": { + id: "/_protected/dashboard/"; + path: "/"; + fullPath: "/dashboard/"; + preLoaderRoute: typeof ProtectedDashboardIndexRouteImport; + parentRoute: typeof ProtectedDashboardRoute; + }; + "/_protected/dashboard/settings": { + id: "/_protected/dashboard/settings"; + path: "/settings"; + fullPath: "/dashboard/settings"; + preLoaderRoute: typeof ProtectedDashboardSettingsRouteImport; + parentRoute: typeof ProtectedDashboardRoute; + }; + "/_protected/dashboard/$providerSlug/$accountId": { + id: "/_protected/dashboard/$providerSlug/$accountId"; + path: "/$providerSlug/$accountId"; + fullPath: "/dashboard/$providerSlug/$accountId"; + preLoaderRoute: typeof ProtectedDashboardProviderSlugAccountIdRouteImport; + parentRoute: typeof ProtectedDashboardRoute; + }; + } +} + +interface ProtectedDashboardRouteChildren { + ProtectedDashboardSettingsRoute: typeof ProtectedDashboardSettingsRoute; + ProtectedDashboardIndexRoute: typeof ProtectedDashboardIndexRoute; + ProtectedDashboardProviderSlugAccountIdRoute: typeof ProtectedDashboardProviderSlugAccountIdRoute; +} + +const ProtectedDashboardRouteChildren: ProtectedDashboardRouteChildren = { + ProtectedDashboardSettingsRoute: ProtectedDashboardSettingsRoute, + ProtectedDashboardIndexRoute: ProtectedDashboardIndexRoute, + ProtectedDashboardProviderSlugAccountIdRoute: ProtectedDashboardProviderSlugAccountIdRoute, +}; + +const ProtectedDashboardRouteWithChildren = ProtectedDashboardRoute._addFileChildren(ProtectedDashboardRouteChildren); + +interface ProtectedRouteChildren { + ProtectedDashboardRoute: typeof ProtectedDashboardRouteWithChildren; +} + +const ProtectedRouteChildren: ProtectedRouteChildren = { + ProtectedDashboardRoute: ProtectedDashboardRouteWithChildren, +}; + +const ProtectedRouteWithChildren = ProtectedRoute._addFileChildren(ProtectedRouteChildren); + +interface PublicRouteChildren { + PublicContributorsRoute: typeof PublicContributorsRoute; + PublicForgotPasswordRoute: typeof PublicForgotPasswordRoute; + PublicPrivacyRoute: typeof PublicPrivacyRoute; + PublicResetPasswordRoute: typeof PublicResetPasswordRoute; + PublicSigninRoute: typeof PublicSigninRoute; + PublicSignupRoute: typeof PublicSignupRoute; + PublicTermsRoute: typeof PublicTermsRoute; + PublicVerifyEmailRoute: typeof PublicVerifyEmailRoute; +} + +const PublicRouteChildren: PublicRouteChildren = { + PublicContributorsRoute: PublicContributorsRoute, + PublicForgotPasswordRoute: PublicForgotPasswordRoute, + PublicPrivacyRoute: PublicPrivacyRoute, + PublicResetPasswordRoute: PublicResetPasswordRoute, + PublicSigninRoute: PublicSigninRoute, + PublicSignupRoute: PublicSignupRoute, + PublicTermsRoute: PublicTermsRoute, + PublicVerifyEmailRoute: PublicVerifyEmailRoute, +}; + +const PublicRouteWithChildren = PublicRoute._addFileChildren(PublicRouteChildren); + +const rootRouteChildren: RootRouteChildren = { + IndexRoute: IndexRoute, + ProtectedRoute: ProtectedRouteWithChildren, + PublicRoute: PublicRouteWithChildren, + DebugRoute: DebugRoute, +}; +export const routeTree = rootRouteImport._addFileChildren(rootRouteChildren)._addFileTypes(); diff --git a/apps/web/src/routes/__root.tsx b/apps/web/src/routes/__root.tsx new file mode 100644 index 0000000..2500ae2 --- /dev/null +++ b/apps/web/src/routes/__root.tsx @@ -0,0 +1,76 @@ +import { createRootRoute, Outlet, ErrorComponent } from "@tanstack/react-router"; +import { ReactQueryProvider } from "@/components/providers/query-provider"; +import { ThemeProvider } from "@/components/providers/theme-provider"; +import { AppProviders } from "@/components/providers/app-providers"; +import { ReactQueryDevtools } from "@tanstack/react-query-devtools"; +import { TanStackRouterDevtools } from "@tanstack/router-devtools"; +import { geistSans, geistMono, manrope } from "@/utils/fonts"; +import { Toaster } from "sonner"; +import { Suspense } from "react"; + +export const Route = createRootRoute({ + component: RootComponent, + notFoundComponent: NotFound, + errorComponent: RootErrorComponent, +}); + +function RootComponent() { + return ( + + + +
+ Loading...
}> + + + +
+ + + + + + + + + + ); +} + +function RootErrorComponent({ error }: { error: Error }) { + return ( +
+
+

Oops! Something went wrong

+

{error.message}

+
+ + + Go Home + +
+
+
+ ); +} + +function NotFound() { + return ( +
+
+

404

+

Page not found

+ + Return Home + +
+
+ ); +} diff --git a/apps/web/src/routes/_protected.tsx b/apps/web/src/routes/_protected.tsx new file mode 100644 index 0000000..53033ea --- /dev/null +++ b/apps/web/src/routes/_protected.tsx @@ -0,0 +1,44 @@ +import { createFileRoute, Outlet, redirect } from "@tanstack/react-router"; +import { authClient } from "@nimbus/auth/auth-client"; + +export const Route = createFileRoute("/_protected")({ + beforeLoad: async ({ location }) => { + try { + // Check if user is authenticated + const session = await authClient.getSession(); + + if (!session?.data?.user) { + // Redirect to signin with the current path as redirect parameter + throw redirect({ + to: "/signin", + search: { + redirect: location.pathname, + }, + }); + } + + // Return session data to be available in route context + return { + session, + }; + } catch (error) { + // If it's already a redirect, re-throw it + if (error instanceof Error && error.message.includes("redirect")) { + throw error; + } + + // For other errors, redirect to signin + throw redirect({ + to: "/signin", + search: { + redirect: location.pathname, + }, + }); + } + }, + component: ProtectedLayout, +}); + +function ProtectedLayout() { + return ; +} diff --git a/apps/web/src/routes/_protected/dashboard.tsx b/apps/web/src/routes/_protected/dashboard.tsx new file mode 100644 index 0000000..19f2ade --- /dev/null +++ b/apps/web/src/routes/_protected/dashboard.tsx @@ -0,0 +1,17 @@ +import { DefaultAccountProvider } from "@/components/providers/default-account-provider"; +import { UserInfoProvider } from "@/components/providers/user-info-provider"; +import { createFileRoute, Outlet } from "@tanstack/react-router"; + +export const Route = createFileRoute("/_protected/dashboard")({ + component: DashboardLayout, +}); + +function DashboardLayout() { + return ( + + + + + + ); +} diff --git a/apps/web/src/app/(protected)/(dashboard)/dashboard/[providerSlug]/[accountId]/page.tsx b/apps/web/src/routes/_protected/dashboard/$providerSlug.$accountId.tsx similarity index 58% rename from apps/web/src/app/(protected)/(dashboard)/dashboard/[providerSlug]/[accountId]/page.tsx rename to apps/web/src/routes/_protected/dashboard/$providerSlug.$accountId.tsx index ea9009e..78728eb 100644 --- a/apps/web/src/app/(protected)/(dashboard)/dashboard/[providerSlug]/[accountId]/page.tsx +++ b/apps/web/src/routes/_protected/dashboard/$providerSlug.$accountId.tsx @@ -1,18 +1,29 @@ -"use client"; - import DndKitProvider from "@/components/providers/dnd-kit-provider"; import { FileTable } from "@/components/dashboard/file-browser"; +import { createFileRoute } from "@tanstack/react-router"; import { useGetFiles } from "@/hooks/useFileOperations"; import { Header } from "@/components/dashboard/header"; -import { useSearchParams } from "next/navigation"; import { Suspense } from "react"; -export default function DrivePage() { - const searchParams = useSearchParams(); - const folderId = searchParams.get("folderId") ?? "root"; +type DashboardSearch = { + folderId?: string; +}; + +export const Route = createFileRoute("/_protected/dashboard/$providerSlug/$accountId")({ + component: DrivePage, + validateSearch: (search: Record): DashboardSearch => { + return { + folderId: (search.folderId as string) || undefined, + }; + }, +}); + +function DrivePage() { + const { folderId } = Route.useSearch(); + const currentFolderId = folderId ?? "root"; const { data, isLoading, refetch, error } = useGetFiles({ - parentId: folderId, + parentId: currentFolderId, pageSize: 30, pageToken: undefined, // TODO: implement sorting, filtering, pagination, and a generalized web content/view interfaces @@ -22,7 +33,7 @@ export default function DrivePage() { return ( <> - +
diff --git a/apps/web/src/app/(protected)/(dashboard)/dashboard/page.tsx b/apps/web/src/routes/_protected/dashboard/index.tsx similarity index 75% rename from apps/web/src/app/(protected)/(dashboard)/dashboard/page.tsx rename to apps/web/src/routes/_protected/dashboard/index.tsx index 5d9d355..902069e 100644 --- a/apps/web/src/app/(protected)/(dashboard)/dashboard/page.tsx +++ b/apps/web/src/routes/_protected/dashboard/index.tsx @@ -1,16 +1,19 @@ -"use client"; - import { useUserInfoProvider } from "@/components/providers/user-info-provider"; import { LoadingStatePage } from "@/components/loading-state-page"; +import { createFileRoute } from "@tanstack/react-router"; -export default function DashboardPage() { +export const Route = createFileRoute("/_protected/dashboard/")({ + component: DashboardPage, +}); + +function DashboardPage() { const { error } = useUserInfoProvider(); const title = "Loading your dashboard..."; const description = "Please wait while we fetch your provider and account information."; const errorTitle = "Error loading your dashboard"; const errorDescription = "Please try again later."; - // DefaultAccountProvider navigates to the default account /dashboard/:providerSlug/:accountId, if on /dashboard. In layout.tsx + // DefaultAccountProvider navigates to the default account /dashboard/:providerSlug/:accountId return ( { + try { + // Check if user is authenticated + const session = await authClient.getSession(); + + // If user is authenticated and trying to access signin/signup, redirect to dashboard + if (session?.data?.user) { + const authPaths = ["/signin", "/signup"]; + if (authPaths.includes(location.pathname)) { + throw redirect({ + to: "/dashboard", + }); + } + } + } catch (error) { + // If it's a redirect, re-throw it + if (error instanceof Error && error.message.includes("redirect")) { + throw error; + } + // For other errors, just continue (allow access to public routes) + console.error("Auth check error in public route:", error); + } + }, + component: PublicLayout, +}); + +function PublicLayout() { + return ; +} diff --git a/apps/web/src/app/(public)/(legal)/privacy/page.tsx b/apps/web/src/routes/_public/-privacy-content.tsx similarity index 99% rename from apps/web/src/app/(public)/(legal)/privacy/page.tsx rename to apps/web/src/routes/_public/-privacy-content.tsx index 1573964..256d9bb 100644 --- a/apps/web/src/app/(public)/(legal)/privacy/page.tsx +++ b/apps/web/src/routes/_public/-privacy-content.tsx @@ -7,16 +7,10 @@ import { } from "@/components/landing-page/legal/text"; import { COMPANY_NAME, CONTACT_EMAIL, LEGAL_UPDATE_DATE, URL, WEBSITE_NAME } from "@nimbus/shared"; import { Card, CardContent } from "@/components/ui/card"; -import type { Metadata } from "next"; - // this is a copy of Analogs privacy component with some changes // https://github.com/analogdotnow/Analog/blob/main/apps/web/src/app/(legal)/privacy/page.tsx -export const metadata: Metadata = { - title: "Privacy Policy - Nimbus", -}; - -export default function PrivacyPage() { +export function PrivacyPageContent() { return (
diff --git a/apps/web/src/routes/_public/contributors.tsx b/apps/web/src/routes/_public/contributors.tsx new file mode 100644 index 0000000..6c9e983 --- /dev/null +++ b/apps/web/src/routes/_public/contributors.tsx @@ -0,0 +1,16 @@ +import Contributors from "@/components/contributors/contributors"; +import { createFileRoute } from "@tanstack/react-router"; +import Header from "@/components/home/header"; + +export const Route = createFileRoute("/_public/contributors")({ + component: ContributorsPage, +}); + +function ContributorsPage() { + return ( +
+
+ +
+ ); +} diff --git a/apps/web/src/app/(public)/(auth)/forgot-password/page.tsx b/apps/web/src/routes/_public/forgot-password.tsx similarity index 58% rename from apps/web/src/app/(public)/(auth)/forgot-password/page.tsx rename to apps/web/src/routes/_public/forgot-password.tsx index 1f9738b..6b4cfe0 100644 --- a/apps/web/src/app/(public)/(auth)/forgot-password/page.tsx +++ b/apps/web/src/routes/_public/forgot-password.tsx @@ -1,6 +1,11 @@ import { ForgotPasswordForm } from "@/components/auth/forgot-password-form"; +import { createFileRoute } from "@tanstack/react-router"; -export default function ForgotPasswordPage() { +export const Route = createFileRoute("/_public/forgot-password")({ + component: ForgotPasswordPage, +}); + +function ForgotPasswordPage() { return (
diff --git a/apps/web/src/routes/_public/privacy.tsx b/apps/web/src/routes/_public/privacy.tsx new file mode 100644 index 0000000..4e8e052 --- /dev/null +++ b/apps/web/src/routes/_public/privacy.tsx @@ -0,0 +1,10 @@ +import { createFileRoute } from "@tanstack/react-router"; +import { PrivacyPageContent } from "./-privacy-content"; + +export const Route = createFileRoute("/_public/privacy")({ + component: PrivacyPage, +}); + +function PrivacyPage() { + return ; +} diff --git a/apps/web/src/app/(public)/(auth)/reset-password/page.tsx b/apps/web/src/routes/_public/reset-password.tsx similarity index 68% rename from apps/web/src/app/(public)/(auth)/reset-password/page.tsx rename to apps/web/src/routes/_public/reset-password.tsx index c451c9e..728e1f9 100644 --- a/apps/web/src/app/(public)/(auth)/reset-password/page.tsx +++ b/apps/web/src/routes/_public/reset-password.tsx @@ -1,6 +1,11 @@ import { ResetPasswordForm } from "@/components/auth/reset-password-form"; +import { createFileRoute } from "@tanstack/react-router"; import { Suspense } from "react"; +export const Route = createFileRoute("/_public/reset-password")({ + component: ResetPasswordPage, +}); + function ResetPasswordContent() { return (
@@ -11,7 +16,7 @@ function ResetPasswordContent() { ); } -export default function ResetPasswordPage() { +function ResetPasswordPage() { return ( diff --git a/apps/web/src/app/(public)/(auth)/signin/page.tsx b/apps/web/src/routes/_public/signin.tsx similarity index 58% rename from apps/web/src/app/(public)/(auth)/signin/page.tsx rename to apps/web/src/routes/_public/signin.tsx index 2c6e97c..0355ad3 100644 --- a/apps/web/src/app/(public)/(auth)/signin/page.tsx +++ b/apps/web/src/routes/_public/signin.tsx @@ -1,8 +1,18 @@ import { SigninFormSkeleton } from "@/components/auth/skeletons/signin-form"; import { SignInForm } from "@/components/auth/signin-form"; +import { createFileRoute } from "@tanstack/react-router"; import { Suspense } from "react"; -export default function SigninPage() { +export const Route = createFileRoute("/_public/signin")({ + component: SigninPage, + validateSearch: (search: Record) => { + return { + redirect: (search.redirect as string) || undefined, + }; + }, +}); + +function SigninPage() { return (
diff --git a/apps/web/src/app/(public)/(auth)/signup/page.tsx b/apps/web/src/routes/_public/signup.tsx similarity index 71% rename from apps/web/src/app/(public)/(auth)/signup/page.tsx rename to apps/web/src/routes/_public/signup.tsx index 8711d21..c36bcee 100644 --- a/apps/web/src/app/(public)/(auth)/signup/page.tsx +++ b/apps/web/src/routes/_public/signup.tsx @@ -1,8 +1,13 @@ import { SignupFormSkeleton } from "@/components/auth/skeletons/signup-form"; import { SignupForm } from "@/components/auth/signup-form"; +import { createFileRoute } from "@tanstack/react-router"; import { Suspense } from "react"; -export default function SignupPage() { +export const Route = createFileRoute("/_public/signup")({ + component: SignupPage, +}); + +function SignupPage() { return (
diff --git a/apps/web/src/app/(public)/(legal)/terms/page.tsx b/apps/web/src/routes/_public/terms.tsx similarity index 96% rename from apps/web/src/app/(public)/(legal)/terms/page.tsx rename to apps/web/src/routes/_public/terms.tsx index d7d6757..7b89e25 100644 --- a/apps/web/src/app/(public)/(legal)/terms/page.tsx +++ b/apps/web/src/routes/_public/terms.tsx @@ -1,16 +1,13 @@ import { LegalHeading1, LegalHeading2, LegalParagraph, LegalTextLink } from "@/components/landing-page/legal/text"; import { COMPANY_NAME, COUNTRY, LEGAL_UPDATE_DATE, STATE, URL } from "@nimbus/shared"; +import { createFileRoute } from "@tanstack/react-router"; import { Card, CardContent } from "@/components/ui/card"; -import type { Metadata } from "next"; -// this is a copy of Analogs terms component with some changes -// https://github.com/analogdotnow/Analog/blob/main/apps/web/src/app/(legal)/terms/page.tsx +export const Route = createFileRoute("/_public/terms")({ + component: TermsPage, +}); -export const metadata: Metadata = { - title: `Terms of Service - ${COMPANY_NAME}`, -}; - -export default function TermsPage() { +function TermsPage() { return (
diff --git a/apps/web/src/app/(public)/(auth)/verify-email/page.tsx b/apps/web/src/routes/_public/verify-email.tsx similarity index 64% rename from apps/web/src/app/(public)/(auth)/verify-email/page.tsx rename to apps/web/src/routes/_public/verify-email.tsx index 66f9b1c..87b79de 100644 --- a/apps/web/src/app/(public)/(auth)/verify-email/page.tsx +++ b/apps/web/src/routes/_public/verify-email.tsx @@ -1,7 +1,12 @@ import { VerifyEmailContent } from "@/components/auth/verify-email-content"; +import { createFileRoute } from "@tanstack/react-router"; import { Suspense } from "react"; -export default function VerifyEmailPage() { +export const Route = createFileRoute("/_public/verify-email")({ + component: VerifyEmailPage, +}); + +function VerifyEmailPage() { return (
diff --git a/apps/web/src/routes/debug.tsx b/apps/web/src/routes/debug.tsx new file mode 100644 index 0000000..31d96e9 --- /dev/null +++ b/apps/web/src/routes/debug.tsx @@ -0,0 +1,164 @@ +import { createFileRoute } from "@tanstack/react-router"; +import { authClient } from "@nimbus/auth/auth-client"; +import { useState, useEffect } from "react"; + +export const Route = createFileRoute("/debug")({ + component: DebugPage, +}); + +function DebugPage() { + const [authState, setAuthState] = useState(null); + const [authError, setAuthError] = useState(null); + const [loading, setLoading] = useState(true); + + useEffect(() => { + const checkAuth = async () => { + try { + const session = await authClient.getSession(); + setAuthState(session); + } catch (error) { + setAuthError(error instanceof Error ? error.message : "Unknown error"); + } finally { + setLoading(false); + } + }; + checkAuth(); + }, []); + + return ( +
+
+
+

Debug Information

+

TanStack Router + Vite Migration Debug Page

+
+ + {/* Router Status */} +
+

✅ Router Status

+

If you can see this page, TanStack Router is working correctly!

+
+
+ Current Path: + {window.location.pathname} +
+
+ Search: + {window.location.search || "(none)"} +
+
+
+ + {/* Authentication Status */} +
+

🔐 Authentication Status

+ {loading ? ( +

Checking authentication...

+ ) : authError ? ( +
+

Error: {authError}

+
+ ) : ( +
+
+ Authenticated: + {authState?.user ? "Yes" : "No"} +
+ {authState?.user && ( + <> +
+ User Email: + {authState.user.email} +
+
+ User Name: + {authState.user.name || "(not set)"} +
+ + )} +
+ )} +
+ + {/* Environment Check */} +
+

🌍 Environment

+
+
+ Mode: + {import.meta.env.MODE} +
+
+ Dev: + {import.meta.env.DEV ? "Yes" : "No"} +
+
+ Prod: + {import.meta.env.PROD ? "Yes" : "No"} +
+
+
+ + {/* Quick Links */} + + + {/* System Info */} +
+

💻 System Info

+
+
+ User Agent: + {navigator.userAgent} +
+
+ Viewport: + + {window.innerWidth} x {window.innerHeight} + +
+
+
+ + {/* Console Log */} +
+

📝 Instructions

+
+

1. Open your browser's developer console (F12)

+

2. Check the Console tab for any errors

+

3. Check the Network tab to see if all assets are loading

+

4. Try navigating to different routes using the links above

+

5. If you see a blank page on other routes, check the console for errors

+
+
+
+
+ ); +} diff --git a/apps/web/src/routes/index.tsx b/apps/web/src/routes/index.tsx new file mode 100644 index 0000000..2368c2d --- /dev/null +++ b/apps/web/src/routes/index.tsx @@ -0,0 +1,21 @@ +import { createFileRoute } from "@tanstack/react-router"; +import Hero from "@/components/home/hero"; +import { Suspense } from "react"; + +export const Route = createFileRoute("/")({ + component: HomePage, +}); + +function HomePage() { + return ( + +
+
+ } + > + +
+ ); +} diff --git a/apps/web/src/utils/fonts.ts b/apps/web/src/utils/fonts.ts index 52daa51..928df40 100644 --- a/apps/web/src/utils/fonts.ts +++ b/apps/web/src/utils/fonts.ts @@ -1,8 +1,17 @@ -import { Manrope } from "next/font/google"; +// Google Fonts are loaded via index.html or CSS +// This file exports font configuration for use in the app -export const manrope = Manrope({ - subsets: ["latin"], - weight: ["200", "300", "400", "500", "600", "700", "800"], +export const manrope = { variable: "--font-manrope", - display: "swap", -}); + className: "font-manrope", +}; + +export const geistSans = { + variable: "--font-geist-sans", + className: "font-geist-sans", +}; + +export const geistMono = { + variable: "--font-geist-mono", + className: "font-geist-mono", +}; diff --git a/apps/web/src/vite-env.d.ts b/apps/web/src/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/apps/web/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/apps/web/tsconfig.json b/apps/web/tsconfig.json index a170e82..cc7da64 100644 --- a/apps/web/tsconfig.json +++ b/apps/web/tsconfig.json @@ -1,13 +1,14 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "jsx": "preserve", - "lib": ["esnext", "dom", "dom.iterable"], - "plugins": [ - { - "name": "next" - } - ], + "jsx": "react-jsx", + "lib": ["ES2020", "dom", "dom.iterable"], + "target": "ES2020", + "module": "ESNext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "types": ["vite/client"], + "skipLibCheck": true, "baseUrl": ".", "paths": { "@/*": ["./src/*"], @@ -23,12 +24,6 @@ "path": "../../packages/shared/tsconfig.json" } ], - "include": [ - "next-env.d.ts", - ".next/types/**/*.ts", - "**/*.ts", - "**/*.tsx", - "src/components/providers/useDefaultAccount" - ], + "include": ["src", "**/*.ts", "**/*.tsx"], "exclude": ["node_modules"] } diff --git a/apps/web/vite.config.ts b/apps/web/vite.config.ts new file mode 100644 index 0000000..c53773c --- /dev/null +++ b/apps/web/vite.config.ts @@ -0,0 +1,35 @@ +import tanstackRouter from "@tanstack/router-plugin/vite"; +import tsconfigPaths from "vite-tsconfig-paths"; +import react from "@vitejs/plugin-react"; +import { defineConfig } from "vite"; +import path from "path"; + +export default defineConfig({ + plugins: [ + tanstackRouter({ + routesDirectory: "./src/routes", + generatedRouteTree: "./src/routeTree.gen.ts", + routeFileIgnorePrefix: "-", + quoteStyle: "double", + }), + react(), + tsconfigPaths(), + ], + resolve: { + alias: { + "@": path.resolve(__dirname, "./src"), + "@/public": path.resolve(__dirname, "./public"), + }, + }, + server: { + port: 3000, + host: true, + }, + build: { + outDir: "dist", + sourcemap: true, + }, + optimizeDeps: { + exclude: ["@nimbus/auth", "@nimbus/env", "@nimbus/server", "@nimbus/shared"], + }, +}); diff --git a/apps/web/vitest.config.ts b/apps/web/vitest.config.ts deleted file mode 100644 index 724bcf4..0000000 --- a/apps/web/vitest.config.ts +++ /dev/null @@ -1,3 +0,0 @@ -import defineConfig from "@nimbus/vitest"; - -export default defineConfig; diff --git a/bun.lock b/bun.lock index 2297581..4e92821 100644 --- a/bun.lock +++ b/bun.lock @@ -4,15 +4,10 @@ "": { "name": "nimbus", "dependencies": { - "@better-auth/stripe": "^1.3.24", "stripe": "^19.0.0", }, "devDependencies": { "@changesets/cli": "^2.29.5", - "@nimbus/vitest": "workspace:*", - "@vitest/coverage-v8": "^3.2.4", - "@vitest/ui": "^3.2.4", - "dotenv": "^17.2.1", "glob": "^11.0.3", "husky": "^9.1.7", "knip": "^5.62.0", @@ -23,9 +18,6 @@ "prettier-plugin-tailwindcss": "^0.6.14", "turbo": "^2.5.6", "typescript": "^5.9.2", - "vite-tsconfig-paths": "^5.1.4", - "vitest": "^3.2.4", - "vitest-mock-extended": "^3.1.0", }, }, "apps/server": { @@ -56,7 +48,6 @@ }, "devDependencies": { "@microsoft/microsoft-graph-types": "^2.40.0", - "@nimbus/vitest": "workspace:*", "@types/pg": "^8.15.4", }, }, @@ -64,7 +55,6 @@ "name": "@nimbus/web", "version": "0.0.9", "dependencies": { - "@databuddy/sdk": "^2.0.0", "@dnd-kit/react": "^0.1.20", "@hookform/resolvers": "^5.2.1", "@nimbus/auth": "workspace:*", @@ -86,10 +76,12 @@ "@radix-ui/react-tabs": "^1.1.12", "@radix-ui/react-tooltip": "^1.2.7", "@t3-oss/env-core": "^0.13.8", - "@tailwindcss/postcss": "^4.1.11", "@tanstack/react-query": "^5.83.0", "@tanstack/react-query-devtools": "^5.84.1", + "@tanstack/react-router-devtools": "^1.133.0", "@tanstack/react-table": "^8.21.3", + "@tanstack/router": "^0.0.1-beta.53", + "@tanstack/router-devtools": "^1.94.4", "axios": "^1.11.0", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", @@ -97,29 +89,28 @@ "hono": "^4.8.10", "lucide-react": "^0.534.0", "motion": "^12.23.12", - "next": "15.3", "next-themes": "^0.4.6", - "posthog-js": "^1.260.1", "react": "^19.1.1", "react-dom": "^19.1.1", "react-dropzone": "^14.3.8", "react-hook-form": "^7.61.1", "recharts": "^3.1.0", "sonner": "^2.0.6", - "stripe": "^17.4.0", "tailwind-merge": "^3.3.1", - "tailwind-scrollbar": "^4.0.2", "tailwindcss": "^4.1.11", "tw-animate-css": "^1.3.6", "vaul": "^1.1.2", "zod": "^4.0.14", }, "devDependencies": { - "@nimbus/vitest": "workspace:*", + "@tanstack/router-plugin": "^1.94.4", + "@types/node": "^22.10.2", "@types/react": "^19.1.9", "@types/react-dom": "^19.1.7", + "@vitejs/plugin-react": "^4.3.4", "eslint": "^9.32.0", - "eslint-config-next": "15.4", + "vite": "^6.0.7", + "vite-tsconfig-paths": "^5.1.4", }, }, "packages/auth": { @@ -134,9 +125,6 @@ "drizzle-orm": "^0.44.4", "resend": "^4.7.0", }, - "devDependencies": { - "@nimbus/vitest": "workspace:*", - }, }, "packages/cache": { "name": "@nimbus/cache", @@ -146,9 +134,6 @@ "iovalkey": "^0.3.3", "rate-limiter-flexible": "^7.2.0", }, - "devDependencies": { - "@nimbus/vitest": "workspace:*", - }, }, "packages/db": { "name": "@nimbus/db", @@ -160,7 +145,6 @@ "postgres": "^3.4.7", }, "devDependencies": { - "@nimbus/vitest": "workspace:*", "drizzle-kit": "^0.31.4", }, }, @@ -171,9 +155,6 @@ "@t3-oss/env-core": "^0.13.8", "zod": "^4.0.14", }, - "devDependencies": { - "@nimbus/vitest": "workspace:*", - }, }, "packages/shared": { "name": "@nimbus/shared", @@ -182,24 +163,9 @@ "@nimbus/db": "workspace:*", "zod": "^4.0.14", }, - "devDependencies": { - "@nimbus/vitest": "workspace:*", - }, - }, - "packages/vitest": { - "name": "@nimbus/vitest", - "version": "0.0.0", - "devDependencies": { - "@vitest/coverage-v8": "^3.2.4", - "vitest": "^3.2.4", - }, }, }, "packages": { - "@alloc/quick-lru": ["@alloc/quick-lru@5.2.0", "", {}, "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw=="], - - "@ampproject/remapping": ["@ampproject/remapping@2.3.0", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw=="], - "@aws-crypto/crc32": ["@aws-crypto/crc32@5.2.0", "", { "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", "tslib": "^2.6.2" } }, "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg=="], "@aws-crypto/crc32c": ["@aws-crypto/crc32c@5.2.0", "", { "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", "tslib": "^2.6.2" } }, "sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag=="], @@ -282,17 +248,67 @@ "@aws-sdk/xml-builder": ["@aws-sdk/xml-builder@3.873.0", "", { "dependencies": { "@smithy/types": "^4.3.2", "tslib": "^2.6.2" } }, "sha512-kLO7k7cGJ6KaHiExSJWojZurF7SnGMDHXRuQunFnEoD0n1yB6Lqy/S/zHiQ7oJnBhPr9q0TW9qFkrsZb1Uc54w=="], + "@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=="], + + "@babel/compat-data": ["@babel/compat-data@7.28.4", "", {}, "sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw=="], + + "@babel/core": ["@babel/core@7.28.4", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.3", "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-module-transforms": "^7.28.3", "@babel/helpers": "^7.28.4", "@babel/parser": "^7.28.4", "@babel/template": "^7.27.2", "@babel/traverse": "^7.28.4", "@babel/types": "^7.28.4", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA=="], + + "@babel/generator": ["@babel/generator@7.28.3", "", { "dependencies": { "@babel/parser": "^7.28.3", "@babel/types": "^7.28.2", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw=="], + + "@babel/helper-annotate-as-pure": ["@babel/helper-annotate-as-pure@7.27.3", "", { "dependencies": { "@babel/types": "^7.27.3" } }, "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg=="], + + "@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.27.2", "", { "dependencies": { "@babel/compat-data": "^7.27.2", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ=="], + + "@babel/helper-create-class-features-plugin": ["@babel/helper-create-class-features-plugin@7.28.3", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", "@babel/helper-member-expression-to-functions": "^7.27.1", "@babel/helper-optimise-call-expression": "^7.27.1", "@babel/helper-replace-supers": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", "@babel/traverse": "^7.28.3", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg=="], + + "@babel/helper-globals": ["@babel/helper-globals@7.28.0", "", {}, "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw=="], + + "@babel/helper-member-expression-to-functions": ["@babel/helper-member-expression-to-functions@7.27.1", "", { "dependencies": { "@babel/traverse": "^7.27.1", "@babel/types": "^7.27.1" } }, "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA=="], + + "@babel/helper-module-imports": ["@babel/helper-module-imports@7.27.1", "", { "dependencies": { "@babel/traverse": "^7.27.1", "@babel/types": "^7.27.1" } }, "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w=="], + + "@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.28.3", "", { "dependencies": { "@babel/helper-module-imports": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1", "@babel/traverse": "^7.28.3" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw=="], + + "@babel/helper-optimise-call-expression": ["@babel/helper-optimise-call-expression@7.27.1", "", { "dependencies": { "@babel/types": "^7.27.1" } }, "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw=="], + + "@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.27.1", "", {}, "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw=="], + + "@babel/helper-replace-supers": ["@babel/helper-replace-supers@7.27.1", "", { "dependencies": { "@babel/helper-member-expression-to-functions": "^7.27.1", "@babel/helper-optimise-call-expression": "^7.27.1", "@babel/traverse": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA=="], + + "@babel/helper-skip-transparent-expression-wrappers": ["@babel/helper-skip-transparent-expression-wrappers@7.27.1", "", { "dependencies": { "@babel/traverse": "^7.27.1", "@babel/types": "^7.27.1" } }, "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg=="], + "@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.27.1", "", {}, "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow=="], - "@babel/parser": ["@babel/parser@7.28.3", "", { "dependencies": { "@babel/types": "^7.28.2" }, "bin": "./bin/babel-parser.js" }, "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA=="], + "@babel/helper-validator-option": ["@babel/helper-validator-option@7.27.1", "", {}, "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg=="], + + "@babel/helpers": ["@babel/helpers@7.28.4", "", { "dependencies": { "@babel/template": "^7.27.2", "@babel/types": "^7.28.4" } }, "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w=="], + + "@babel/parser": ["@babel/parser@7.28.4", "", { "dependencies": { "@babel/types": "^7.28.4" }, "bin": "./bin/babel-parser.js" }, "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg=="], + + "@babel/plugin-syntax-jsx": ["@babel/plugin-syntax-jsx@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w=="], + + "@babel/plugin-syntax-typescript": ["@babel/plugin-syntax-typescript@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ=="], + + "@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=="], "@babel/runtime": ["@babel/runtime@7.28.3", "", {}, "sha512-9uIQ10o0WGdpP6GDhXcdOJPJuDgFtIDtN/9+ArJQ2NAfAmiuhTQdzkaTGR33v43GYS2UrSA0eX2pPPHoFVvpxA=="], - "@babel/types": ["@babel/types@7.28.2", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ=="], + "@babel/template": ["@babel/template@7.27.2", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/parser": "^7.27.2", "@babel/types": "^7.27.1" } }, "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw=="], - "@bcoe/v8-coverage": ["@bcoe/v8-coverage@1.0.2", "", {}, "sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA=="], + "@babel/traverse": ["@babel/traverse@7.28.4", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.3", "@babel/helper-globals": "^7.28.0", "@babel/parser": "^7.28.4", "@babel/template": "^7.27.2", "@babel/types": "^7.28.4", "debug": "^4.3.1" } }, "sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ=="], + + "@babel/types": ["@babel/types@7.28.2", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ=="], "@better-auth/stripe": ["@better-auth/stripe@1.3.24", "", { "dependencies": { "zod": "^4.1.5" }, "peerDependencies": { "better-auth": "1.3.24", "stripe": "^18" } }, "sha512-7Ib0w4FRbUSgWTVljLU/H7NKZzu8l1iJ0CdZgY24qKahpNy0yoTV/tQbaUv1eQ/bw4+X46g8EpsNZsxgdwDZJQ=="], @@ -336,8 +352,6 @@ "@cypress/request": ["@cypress/request@3.0.9", "", { "dependencies": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", "caseless": "~0.12.0", "combined-stream": "~1.0.6", "extend": "~3.0.2", "forever-agent": "~0.6.1", "form-data": "~4.0.4", "http-signature": "~1.4.0", "is-typedarray": "~1.0.0", "isstream": "~0.1.2", "json-stringify-safe": "~5.0.1", "mime-types": "~2.1.19", "performance-now": "^2.1.0", "qs": "6.14.0", "safe-buffer": "^5.1.2", "tough-cookie": "^5.0.0", "tunnel-agent": "^0.6.0", "uuid": "^8.3.2" } }, "sha512-I3l7FdGRXluAS44/0NguwWlO83J18p0vlr2FYHrJkWdNYhgVoiYo61IXPqaOsL+vNxU1ZqMACzItGK3/KKDsdw=="], - "@databuddy/sdk": ["@databuddy/sdk@2.0.0", "", { "peerDependencies": { "react": ">=18", "vue": ">=3" }, "optionalPeers": ["react", "vue"] }, "sha512-jwNeLwg03jN3380W2eyhegjO/eqqVcVXekO01n/d9dzalnaCm6DCEG3lGd8PMBf8ztu/dv1QTivkd4W6rO+tNQ=="], - "@dnd-kit/abstract": ["@dnd-kit/abstract@0.1.21", "", { "dependencies": { "@dnd-kit/geometry": "^0.1.21", "@dnd-kit/state": "^0.1.21", "tslib": "^2.6.2" } }, "sha512-6sJut6/D21xPIK8EFMu+JJeF+fBCOmQKN1BRpeUYFi5m9P1CJpTYbBwfI107h7PHObI6a5bsckiKkRpF2orHpw=="], "@dnd-kit/collision": ["@dnd-kit/collision@0.1.21", "", { "dependencies": { "@dnd-kit/abstract": "^0.1.21", "@dnd-kit/geometry": "^0.1.21", "tslib": "^2.6.2" } }, "sha512-9AJ4NbuwGDexxMCZXZyKdNQhbAe93p6C6IezQaDaWmdCqZHMHmC3+ul7pGefBQfOooSarGwIf8Bn182o9SMa1A=="], @@ -458,50 +472,6 @@ "@humanwhocodes/retry": ["@humanwhocodes/retry@0.4.3", "", {}, "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ=="], - "@img/sharp-darwin-arm64": ["@img/sharp-darwin-arm64@0.34.3", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-arm64": "1.2.0" }, "os": "darwin", "cpu": "arm64" }, "sha512-ryFMfvxxpQRsgZJqBd4wsttYQbCxsJksrv9Lw/v798JcQ8+w84mBWuXwl+TT0WJ/WrYOLaYpwQXi3sA9nTIaIg=="], - - "@img/sharp-darwin-x64": ["@img/sharp-darwin-x64@0.34.3", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-x64": "1.2.0" }, "os": "darwin", "cpu": "x64" }, "sha512-yHpJYynROAj12TA6qil58hmPmAwxKKC7reUqtGLzsOHfP7/rniNGTL8tjWX6L3CTV4+5P4ypcS7Pp+7OB+8ihA=="], - - "@img/sharp-libvips-darwin-arm64": ["@img/sharp-libvips-darwin-arm64@1.2.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-sBZmpwmxqwlqG9ueWFXtockhsxefaV6O84BMOrhtg/YqbTaRdqDE7hxraVE3y6gVM4eExmfzW4a8el9ArLeEiQ=="], - - "@img/sharp-libvips-darwin-x64": ["@img/sharp-libvips-darwin-x64@1.2.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-M64XVuL94OgiNHa5/m2YvEQI5q2cl9d/wk0qFTDVXcYzi43lxuiFTftMR1tOnFQovVXNZJ5TURSDK2pNe9Yzqg=="], - - "@img/sharp-libvips-linux-arm": ["@img/sharp-libvips-linux-arm@1.2.0", "", { "os": "linux", "cpu": "arm" }, "sha512-mWd2uWvDtL/nvIzThLq3fr2nnGfyr/XMXlq8ZJ9WMR6PXijHlC3ksp0IpuhK6bougvQrchUAfzRLnbsen0Cqvw=="], - - "@img/sharp-libvips-linux-arm64": ["@img/sharp-libvips-linux-arm64@1.2.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-RXwd0CgG+uPRX5YYrkzKyalt2OJYRiJQ8ED/fi1tq9WQW2jsQIn0tqrlR5l5dr/rjqq6AHAxURhj2DVjyQWSOA=="], - - "@img/sharp-libvips-linux-ppc64": ["@img/sharp-libvips-linux-ppc64@1.2.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-Xod/7KaDDHkYu2phxxfeEPXfVXFKx70EAFZ0qyUdOjCcxbjqyJOEUpDe6RIyaunGxT34Anf9ue/wuWOqBW2WcQ=="], - - "@img/sharp-libvips-linux-s390x": ["@img/sharp-libvips-linux-s390x@1.2.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-eMKfzDxLGT8mnmPJTNMcjfO33fLiTDsrMlUVcp6b96ETbnJmd4uvZxVJSKPQfS+odwfVaGifhsB07J1LynFehw=="], - - "@img/sharp-libvips-linux-x64": ["@img/sharp-libvips-linux-x64@1.2.0", "", { "os": "linux", "cpu": "x64" }, "sha512-ZW3FPWIc7K1sH9E3nxIGB3y3dZkpJlMnkk7z5tu1nSkBoCgw2nSRTFHI5pB/3CQaJM0pdzMF3paf9ckKMSE9Tg=="], - - "@img/sharp-libvips-linuxmusl-arm64": ["@img/sharp-libvips-linuxmusl-arm64@1.2.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-UG+LqQJbf5VJ8NWJ5Z3tdIe/HXjuIdo4JeVNADXBFuG7z9zjoegpzzGIyV5zQKi4zaJjnAd2+g2nna8TZvuW9Q=="], - - "@img/sharp-libvips-linuxmusl-x64": ["@img/sharp-libvips-linuxmusl-x64@1.2.0", "", { "os": "linux", "cpu": "x64" }, "sha512-SRYOLR7CXPgNze8akZwjoGBoN1ThNZoqpOgfnOxmWsklTGVfJiGJoC/Lod7aNMGA1jSsKWM1+HRX43OP6p9+6Q=="], - - "@img/sharp-linux-arm": ["@img/sharp-linux-arm@0.34.3", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm": "1.2.0" }, "os": "linux", "cpu": "arm" }, "sha512-oBK9l+h6KBN0i3dC8rYntLiVfW8D8wH+NPNT3O/WBHeW0OQWCjfWksLUaPidsrDKpJgXp3G3/hkmhptAW0I3+A=="], - - "@img/sharp-linux-arm64": ["@img/sharp-linux-arm64@0.34.3", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm64": "1.2.0" }, "os": "linux", "cpu": "arm64" }, "sha512-QdrKe3EvQrqwkDrtuTIjI0bu6YEJHTgEeqdzI3uWJOH6G1O8Nl1iEeVYRGdj1h5I21CqxSvQp1Yv7xeU3ZewbA=="], - - "@img/sharp-linux-ppc64": ["@img/sharp-linux-ppc64@0.34.3", "", { "optionalDependencies": { "@img/sharp-libvips-linux-ppc64": "1.2.0" }, "os": "linux", "cpu": "ppc64" }, "sha512-GLtbLQMCNC5nxuImPR2+RgrviwKwVql28FWZIW1zWruy6zLgA5/x2ZXk3mxj58X/tszVF69KK0Is83V8YgWhLA=="], - - "@img/sharp-linux-s390x": ["@img/sharp-linux-s390x@0.34.3", "", { "optionalDependencies": { "@img/sharp-libvips-linux-s390x": "1.2.0" }, "os": "linux", "cpu": "s390x" }, "sha512-3gahT+A6c4cdc2edhsLHmIOXMb17ltffJlxR0aC2VPZfwKoTGZec6u5GrFgdR7ciJSsHT27BD3TIuGcuRT0KmQ=="], - - "@img/sharp-linux-x64": ["@img/sharp-linux-x64@0.34.3", "", { "optionalDependencies": { "@img/sharp-libvips-linux-x64": "1.2.0" }, "os": "linux", "cpu": "x64" }, "sha512-8kYso8d806ypnSq3/Ly0QEw90V5ZoHh10yH0HnrzOCr6DKAPI6QVHvwleqMkVQ0m+fc7EH8ah0BB0QPuWY6zJQ=="], - - "@img/sharp-linuxmusl-arm64": ["@img/sharp-linuxmusl-arm64@0.34.3", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-arm64": "1.2.0" }, "os": "linux", "cpu": "arm64" }, "sha512-vAjbHDlr4izEiXM1OTggpCcPg9tn4YriK5vAjowJsHwdBIdx0fYRsURkxLG2RLm9gyBq66gwtWI8Gx0/ov+JKQ=="], - - "@img/sharp-linuxmusl-x64": ["@img/sharp-linuxmusl-x64@0.34.3", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-x64": "1.2.0" }, "os": "linux", "cpu": "x64" }, "sha512-gCWUn9547K5bwvOn9l5XGAEjVTTRji4aPTqLzGXHvIr6bIDZKNTA34seMPgM0WmSf+RYBH411VavCejp3PkOeQ=="], - - "@img/sharp-wasm32": ["@img/sharp-wasm32@0.34.3", "", { "dependencies": { "@emnapi/runtime": "^1.4.4" }, "cpu": "none" }, "sha512-+CyRcpagHMGteySaWos8IbnXcHgfDn7pO2fiC2slJxvNq9gDipYBN42/RagzctVRKgxATmfqOSulgZv5e1RdMg=="], - - "@img/sharp-win32-arm64": ["@img/sharp-win32-arm64@0.34.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-MjnHPnbqMXNC2UgeLJtX4XqoVHHlZNd+nPt1kRPmj63wURegwBhZlApELdtxM2OIZDRv/DFtLcNhVbd1z8GYXQ=="], - - "@img/sharp-win32-ia32": ["@img/sharp-win32-ia32@0.34.3", "", { "os": "win32", "cpu": "ia32" }, "sha512-xuCdhH44WxuXgOM714hn4amodJMZl3OEvf0GVTm0BEyMeA2to+8HEdRPShH0SLYptJY1uBw+SCFP9WVQi1Q/cw=="], - - "@img/sharp-win32-x64": ["@img/sharp-win32-x64@0.34.3", "", { "os": "win32", "cpu": "x64" }, "sha512-OWwz05d++TxzLEv4VnsTz5CmZ6mI6S05sfQGEMrNrQcOEERbX46332IvE7pO/EUiw7jUrrS40z/M7kPyjfl04g=="], - "@inquirer/external-editor": ["@inquirer/external-editor@1.0.1", "", { "dependencies": { "chardet": "^2.1.0", "iconv-lite": "^0.6.3" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-Oau4yL24d2B5IL4ma4UpbQigkVhzPDXLoqy1ggK4gnHg/stmkffJE4oOXHXF3uz0UEpywG68KcyXsyYpA1Re/Q=="], "@iovalkey/commands": ["@iovalkey/commands@0.1.0", "", {}, "sha512-/B9W4qKSSITDii5nkBCHyPkIkAi+ealUtr1oqBJsLxjSRLka4pxun2VvMNSmcwgAMxgXtQfl0qRv7TE+udPJzg=="], @@ -512,10 +482,6 @@ "@isaacs/cliui": ["@isaacs/cliui@8.0.2", "", { "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", "strip-ansi": "^7.0.1", "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", "wrap-ansi": "^8.1.0", "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" } }, "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA=="], - "@isaacs/fs-minipass": ["@isaacs/fs-minipass@4.0.1", "", { "dependencies": { "minipass": "^7.0.4" } }, "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w=="], - - "@istanbuljs/schema": ["@istanbuljs/schema@0.1.3", "", {}, "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA=="], - "@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=="], @@ -538,26 +504,6 @@ "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.0.3", "", { "dependencies": { "@emnapi/core": "^1.4.5", "@emnapi/runtime": "^1.4.5", "@tybys/wasm-util": "^0.10.0" } }, "sha512-rZxtMsLwjdXkMUGC3WwsPwLNVqVqnTJT6MNIB6e+5fhMcSCPP0AOsNWuMQ5mdCq6HNjs/ZeWAEchpqeprqBD2Q=="], - "@next/env": ["@next/env@15.3.5", "", {}, "sha512-7g06v8BUVtN2njAX/r8gheoVffhiKFVt4nx74Tt6G4Hqw9HCLYQVx/GkH2qHvPtAHZaUNZ0VXAa0pQP6v1wk7g=="], - - "@next/eslint-plugin-next": ["@next/eslint-plugin-next@15.4.7", "", { "dependencies": { "fast-glob": "3.3.1" } }, "sha512-asj3RRiEruRLVr+k2ZC4hll9/XBzegMpFMr8IIRpNUYypG86m/a76339X2WETl1C53A512w2INOc2KZV769KPA=="], - - "@next/swc-darwin-arm64": ["@next/swc-darwin-arm64@15.3.5", "", { "os": "darwin", "cpu": "arm64" }, "sha512-lM/8tilIsqBq+2nq9kbTW19vfwFve0NR7MxfkuSUbRSgXlMQoJYg+31+++XwKVSXk4uT23G2eF/7BRIKdn8t8w=="], - - "@next/swc-darwin-x64": ["@next/swc-darwin-x64@15.3.5", "", { "os": "darwin", "cpu": "x64" }, "sha512-WhwegPQJ5IfoUNZUVsI9TRAlKpjGVK0tpJTL6KeiC4cux9774NYE9Wu/iCfIkL/5J8rPAkqZpG7n+EfiAfidXA=="], - - "@next/swc-linux-arm64-gnu": ["@next/swc-linux-arm64-gnu@15.3.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-LVD6uMOZ7XePg3KWYdGuzuvVboxujGjbcuP2jsPAN3MnLdLoZUXKRc6ixxfs03RH7qBdEHCZjyLP/jBdCJVRJQ=="], - - "@next/swc-linux-arm64-musl": ["@next/swc-linux-arm64-musl@15.3.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-k8aVScYZ++BnS2P69ClK7v4nOu702jcF9AIHKu6llhHEtBSmM2zkPGl9yoqbSU/657IIIb0QHpdxEr0iW9z53A=="], - - "@next/swc-linux-x64-gnu": ["@next/swc-linux-x64-gnu@15.3.5", "", { "os": "linux", "cpu": "x64" }, "sha512-2xYU0DI9DGN/bAHzVwADid22ba5d/xrbrQlr2U+/Q5WkFUzeL0TDR963BdrtLS/4bMmKZGptLeg6282H/S2i8A=="], - - "@next/swc-linux-x64-musl": ["@next/swc-linux-x64-musl@15.3.5", "", { "os": "linux", "cpu": "x64" }, "sha512-TRYIqAGf1KCbuAB0gjhdn5Ytd8fV+wJSM2Nh2is/xEqR8PZHxfQuaiNhoF50XfY90sNpaRMaGhF6E+qjV1b9Tg=="], - - "@next/swc-win32-arm64-msvc": ["@next/swc-win32-arm64-msvc@15.3.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-h04/7iMEUSMY6fDGCvdanKqlO1qYvzNxntZlCzfE8i5P0uqzVQWQquU1TIhlz0VqGQGXLrFDuTJVONpqGqjGKQ=="], - - "@next/swc-win32-x64-msvc": ["@next/swc-win32-x64-msvc@15.3.5", "", { "os": "win32", "cpu": "x64" }, "sha512-5fhH6fccXxnX2KhllnGhkYMndhOiLOLEiVGYjP2nizqeGWkN10sA9taATlXwake2E2XMvYZjjz0Uj7T0y+z1yw=="], - "@nimbus/auth": ["@nimbus/auth@workspace:packages/auth"], "@nimbus/cache": ["@nimbus/cache@workspace:packages/cache"], @@ -570,8 +516,6 @@ "@nimbus/shared": ["@nimbus/shared@workspace:packages/shared"], - "@nimbus/vitest": ["@nimbus/vitest@workspace:packages/vitest"], - "@nimbus/web": ["@nimbus/web@workspace:apps/web"], "@noble/ciphers": ["@noble/ciphers@0.6.0", "", {}, "sha512-mIbq/R9QXk5/cTfESb1OKtyFnk7oc1Om/8onA1158K9/OZUQFDEVy55jVTato+xmp3XX6F6Qh0zz0Nc1AxAlRQ=="], @@ -584,8 +528,6 @@ "@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=="], - "@nolyfill/is-core-module": ["@nolyfill/is-core-module@1.0.39", "", {}, "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA=="], - "@number-flow/react": ["@number-flow/react@0.5.10", "", { "dependencies": { "esm-env": "^1.1.4", "number-flow": "0.5.8" }, "peerDependencies": { "react": "^18 || ^19", "react-dom": "^18 || ^19" } }, "sha512-a8Wh5eNITn7Km4xbddAH7QH8eNmnduR6k34ER1hkHSGO4H2yU1DDnuAWLQM99vciGInFODemSc0tdxrXkJEpbA=="], "@oxc-resolver/binding-android-arm-eabi": ["@oxc-resolver/binding-android-arm-eabi@11.6.2", "", { "os": "android", "cpu": "arm" }, "sha512-b1h87/Nv5QPiT2xXg7RiSzJ0HsKSMf1U8vj6cUKdEDD1+KhDaXEH9xffB5QE54Df3SM4+wrYVy9NREil7/0C/Q=="], @@ -664,10 +606,6 @@ "@peculiar/asn1-x509": ["@peculiar/asn1-x509@2.4.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.4.0", "asn1js": "^3.0.6", "pvtsutils": "^1.3.6", "tslib": "^2.8.1" } }, "sha512-F7mIZY2Eao2TaoVqigGMLv+NDdpwuBKU1fucHPONfzaBS4JXXCNCmfO0Z3dsy7JzKGqtDcYC1mr9JjaZQZNiuw=="], - "@pkgjs/parseargs": ["@pkgjs/parseargs@0.11.0", "", {}, "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg=="], - - "@polka/url": ["@polka/url@1.0.0-next.29", "", {}, "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww=="], - "@preact/signals-core": ["@preact/signals-core@1.12.1", "", {}, "sha512-BwbTXpj+9QutoZLQvbttRg5x3l5468qaV2kufh+51yha1c53ep5dY4kTuZR35+3pAZxpfQerGJiQqg34ZNZ6uA=="], "@radix-ui/number": ["@radix-ui/number@1.1.1", "", {}, "sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g=="], @@ -756,6 +694,8 @@ "@reduxjs/toolkit": ["@reduxjs/toolkit@2.8.2", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "@standard-schema/utils": "^0.3.0", "immer": "^10.0.3", "redux": "^5.0.1", "redux-thunk": "^3.1.0", "reselect": "^5.1.0" }, "peerDependencies": { "react": "^16.9.0 || ^17.0.0 || ^18 || ^19", "react-redux": "^7.2.1 || ^8.1.3 || ^9.0.0" }, "optionalPeers": ["react", "react-redux"] }, "sha512-MYlOhQ0sLdw4ud48FoC5w0dH9VfWQjtCjreKwYTT3l+r427qYC5Y8PihNutepr8XrNaBUDQo9khWUwQxZaqt5A=="], + "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-beta.27", "", {}, "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA=="], + "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.48.1", "", { "os": "android", "cpu": "arm" }, "sha512-rGmb8qoG/zdmKoYELCBwu7vt+9HxZ7Koos3pD0+sH5fR3u3Wb/jGcpnqxcnWsPEKDUyzeLSqksN8LJtgXjqBYw=="], "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.48.1", "", { "os": "android", "cpu": "arm64" }, "sha512-4e9WtTxrk3gu1DFE+imNJr4WsL13nWbD/Y6wQcyku5qadlKHY3OQ3LJ/INrrjngv2BJIHnIzbqMk1GTAC2P8yQ=="], @@ -796,10 +736,6 @@ "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.48.1", "", { "os": "win32", "cpu": "x64" }, "sha512-8a/caCUN4vkTChxkaIJcMtwIVcBhi4X2PQRoT+yCK3qRYaZ7cURrmJFL5Ux9H9RaMIXj9RuihckdmkBX3zZsgg=="], - "@rtsao/scc": ["@rtsao/scc@1.1.0", "", {}, "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g=="], - - "@rushstack/eslint-patch": ["@rushstack/eslint-patch@1.12.0", "", {}, "sha512-5EwMtOqvJMMa3HbmxLlF74e+3/HhwBTMcvt3nqVJgGCozO6hzIPOBlwm8mGVNR9SN2IJpxSnlxczyDjcn7qIyw=="], - "@selderee/plugin-htmlparser2": ["@selderee/plugin-htmlparser2@0.11.0", "", { "dependencies": { "domhandler": "^5.0.3", "selderee": "^0.11.0" } }, "sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ=="], "@simplewebauthn/browser": ["@simplewebauthn/browser@13.1.2", "", {}, "sha512-aZnW0KawAM83fSBUgglP5WofbrLbLyr7CoPqYr66Eppm7zO86YX6rrCjRB3hQKPrL7ATvY4FVXlykZ6w6FwYYw=="], @@ -910,41 +846,9 @@ "@standard-schema/utils": ["@standard-schema/utils@0.3.0", "", {}, "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g=="], - "@swc/counter": ["@swc/counter@0.1.3", "", {}, "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ=="], - - "@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], - "@t3-oss/env-core": ["@t3-oss/env-core@0.13.8", "", { "peerDependencies": { "arktype": "^2.1.0", "typescript": ">=5.0.0", "valibot": "^1.0.0-beta.7 || ^1.0.0", "zod": "^3.24.0 || ^4.0.0-beta.0" }, "optionalPeers": ["arktype", "typescript", "valibot", "zod"] }, "sha512-L1inmpzLQyYu4+Q1DyrXsGJYCXbtXjC4cICw1uAKv0ppYPQv656lhZPU91Qd1VS6SO/bou1/q5ufVzBGbNsUpw=="], - "@tailwindcss/node": ["@tailwindcss/node@4.1.12", "", { "dependencies": { "@jridgewell/remapping": "^2.3.4", "enhanced-resolve": "^5.18.3", "jiti": "^2.5.1", "lightningcss": "1.30.1", "magic-string": "^0.30.17", "source-map-js": "^1.2.1", "tailwindcss": "4.1.12" } }, "sha512-3hm9brwvQkZFe++SBt+oLjo4OLDtkvlE8q2WalaD/7QWaeM7KEJbAiY/LJZUaCs7Xa8aUu4xy3uoyX4q54UVdQ=="], - - "@tailwindcss/oxide": ["@tailwindcss/oxide@4.1.12", "", { "dependencies": { "detect-libc": "^2.0.4", "tar": "^7.4.3" }, "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.1.12", "@tailwindcss/oxide-darwin-arm64": "4.1.12", "@tailwindcss/oxide-darwin-x64": "4.1.12", "@tailwindcss/oxide-freebsd-x64": "4.1.12", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.12", "@tailwindcss/oxide-linux-arm64-gnu": "4.1.12", "@tailwindcss/oxide-linux-arm64-musl": "4.1.12", "@tailwindcss/oxide-linux-x64-gnu": "4.1.12", "@tailwindcss/oxide-linux-x64-musl": "4.1.12", "@tailwindcss/oxide-wasm32-wasi": "4.1.12", "@tailwindcss/oxide-win32-arm64-msvc": "4.1.12", "@tailwindcss/oxide-win32-x64-msvc": "4.1.12" } }, "sha512-gM5EoKHW/ukmlEtphNwaGx45fGoEmP10v51t9unv55voWh6WrOL19hfuIdo2FjxIaZzw776/BUQg7Pck++cIVw=="], - - "@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.1.12", "", { "os": "android", "cpu": "arm64" }, "sha512-oNY5pq+1gc4T6QVTsZKwZaGpBb2N1H1fsc1GD4o7yinFySqIuRZ2E4NvGasWc6PhYJwGK2+5YT1f9Tp80zUQZQ=="], - - "@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.1.12", "", { "os": "darwin", "cpu": "arm64" }, "sha512-cq1qmq2HEtDV9HvZlTtrj671mCdGB93bVY6J29mwCyaMYCP/JaUBXxrQQQm7Qn33AXXASPUb2HFZlWiiHWFytw=="], - - "@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.1.12", "", { "os": "darwin", "cpu": "x64" }, "sha512-6UCsIeFUcBfpangqlXay9Ffty9XhFH1QuUFn0WV83W8lGdX8cD5/+2ONLluALJD5+yJ7k8mVtwy3zMZmzEfbLg=="], - - "@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.1.12", "", { "os": "freebsd", "cpu": "x64" }, "sha512-JOH/f7j6+nYXIrHobRYCtoArJdMJh5zy5lr0FV0Qu47MID/vqJAY3r/OElPzx1C/wdT1uS7cPq+xdYYelny1ww=="], - - "@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.1.12", "", { "os": "linux", "cpu": "arm" }, "sha512-v4Ghvi9AU1SYgGr3/j38PD8PEe6bRfTnNSUE3YCMIRrrNigCFtHZ2TCm8142X8fcSqHBZBceDx+JlFJEfNg5zQ=="], - - "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.1.12", "", { "os": "linux", "cpu": "arm64" }, "sha512-YP5s1LmetL9UsvVAKusHSyPlzSRqYyRB0f+Kl/xcYQSPLEw/BvGfxzbH+ihUciePDjiXwHh+p+qbSP3SlJw+6g=="], - - "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.1.12", "", { "os": "linux", "cpu": "arm64" }, "sha512-V8pAM3s8gsrXcCv6kCHSuwyb/gPsd863iT+v1PGXC4fSL/OJqsKhfK//v8P+w9ThKIoqNbEnsZqNy+WDnwQqCA=="], - - "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.1.12", "", { "os": "linux", "cpu": "x64" }, "sha512-xYfqYLjvm2UQ3TZggTGrwxjYaLB62b1Wiysw/YE3Yqbh86sOMoTn0feF98PonP7LtjsWOWcXEbGqDL7zv0uW8Q=="], - - "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.1.12", "", { "os": "linux", "cpu": "x64" }, "sha512-ha0pHPamN+fWZY7GCzz5rKunlv9L5R8kdh+YNvP5awe3LtuXb5nRi/H27GeL2U+TdhDOptU7T6Is7mdwh5Ar3A=="], - - "@tailwindcss/oxide-wasm32-wasi": ["@tailwindcss/oxide-wasm32-wasi@4.1.12", "", { "dependencies": { "@emnapi/core": "^1.4.5", "@emnapi/runtime": "^1.4.5", "@emnapi/wasi-threads": "^1.0.4", "@napi-rs/wasm-runtime": "^0.2.12", "@tybys/wasm-util": "^0.10.0", "tslib": "^2.8.0" }, "cpu": "none" }, "sha512-4tSyu3dW+ktzdEpuk6g49KdEangu3eCYoqPhWNsZgUhyegEda3M9rG0/j1GV/JjVVsj+lG7jWAyrTlLzd/WEBg=="], - - "@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.1.12", "", { "os": "win32", "cpu": "arm64" }, "sha512-iGLyD/cVP724+FGtMWslhcFyg4xyYyM+5F4hGvKA7eifPkXHRAUDFaimu53fpNg9X8dfP75pXx/zFt/jlNF+lg=="], - - "@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.1.12", "", { "os": "win32", "cpu": "x64" }, "sha512-NKIh5rzw6CpEodv/++r0hGLlfgT/gFN+5WNdZtvh6wpU2BpGNgdjvj6H2oFc8nCM839QM1YOhjpgbAONUb4IxA=="], - - "@tailwindcss/postcss": ["@tailwindcss/postcss@4.1.12", "", { "dependencies": { "@alloc/quick-lru": "^5.2.0", "@tailwindcss/node": "4.1.12", "@tailwindcss/oxide": "4.1.12", "postcss": "^8.4.41", "tailwindcss": "4.1.12" } }, "sha512-5PpLYhCAwf9SJEeIsSmCDLgyVfdBhdBpzX1OJ87anT9IVR0Z9pjM0FNixCAUAHGnMBGB8K99SwAheXrT0Kh6QQ=="], + "@tanstack/history": ["@tanstack/history@1.132.31", "", {}, "sha512-UCHM2uS0t/uSszqPEo+SBSSoQVeQ+LlOWAVBl5SA7+AedeAbKafIPjFn8huZCXNLAYb0WKV2+wETr7lDK9uz7g=="], "@tanstack/query-core": ["@tanstack/query-core@5.85.5", "", {}, "sha512-KO0WTob4JEApv69iYp1eGvfMSUkgw//IpMnq+//cORBzXf0smyRwPLrUvEe5qtAEGjwZTXrjxg+oJNP/C00t6w=="], @@ -954,17 +858,47 @@ "@tanstack/react-query-devtools": ["@tanstack/react-query-devtools@5.85.5", "", { "dependencies": { "@tanstack/query-devtools": "5.84.0" }, "peerDependencies": { "@tanstack/react-query": "^5.85.5", "react": "^18 || ^19" } }, "sha512-6Ol6Q+LxrCZlQR4NoI5181r+ptTwnlPG2t7H9Sp3klxTBhYGunONqcgBn2YKRPsaKiYM8pItpKMdMXMEINntMQ=="], + "@tanstack/react-router": ["@tanstack/react-router@1.132.47", "", { "dependencies": { "@tanstack/history": "1.132.31", "@tanstack/react-store": "^0.7.0", "@tanstack/router-core": "1.132.47", "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-mjCN1ueVLHBOK1gqLeacCrUPBZietMKTkr7xZlC32dCGn4e+83zMSlRTS2TrEl7+wEH+bqjnoyx8ALYTSiQ1Cg=="], + + "@tanstack/react-router-devtools": ["@tanstack/react-router-devtools@1.133.0", "", { "dependencies": { "@tanstack/router-devtools-core": "1.133.0", "vite": "^7.1.7" }, "peerDependencies": { "@tanstack/react-router": "^1.132.47", "react": ">=18.0.0 || >=19.0.0", "react-dom": ">=18.0.0 || >=19.0.0" } }, "sha512-NgfENd3qU4QOQTDiyBDIk5YVT/jDGqb6SbJ/d6ZFWyURzxk4bQStKVZ1E/6jVbq5kNEJ55l6obXCB4WKIM3jHQ=="], + + "@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": ["@tanstack/router@0.0.1-beta.53", "", { "dependencies": { "@babel/runtime": "^7.16.7", "@tanstack/store": "0.0.1-beta.52", "tiny-invariant": "^1.3.1" } }, "sha512-nX1avh939ufOCoXhJ5wihX/ft6sn50ARrj4FAhRYn50KKzo9fXsYSmPyVgqVdW0hJ4n9XXKIMkwwpzEhLQmqrA=="], + + "@tanstack/router-core": ["@tanstack/router-core@1.132.47", "", { "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-8YKFHmG6VUqXaWAJzEqjyW6w31dARS2USd2mtI5ZeZcihqMbskK28N4iotBXNn+sSKJnPRjc7A4jTnnEf8Mn8Q=="], + + "@tanstack/router-devtools": ["@tanstack/router-devtools@1.133.0", "", { "dependencies": { "@tanstack/react-router-devtools": "1.133.0", "clsx": "^2.1.1", "goober": "^2.1.16", "vite": "^7.1.7" }, "peerDependencies": { "@tanstack/react-router": "^1.132.47", "csstype": "^3.0.10", "react": ">=18.0.0 || >=19.0.0", "react-dom": ">=18.0.0 || >=19.0.0" }, "optionalPeers": ["csstype"] }, "sha512-TJ4mykqur/U31sOiHIIBdA5xLUyyOUi0H7wl1TLd4mJsD1hwZCRCewhpXpWLInlDU+4OuFYX5atnD6iu5fAIug=="], + + "@tanstack/router-devtools-core": ["@tanstack/router-devtools-core@1.133.0", "", { "dependencies": { "clsx": "^2.1.1", "goober": "^2.1.16", "vite": "^7.1.7" }, "peerDependencies": { "@tanstack/router-core": "^1.132.47", "csstype": "^3.0.10", "solid-js": ">=1.9.5", "tiny-invariant": "^1.3.3" }, "optionalPeers": ["csstype"] }, "sha512-0ZTsKxKEjQsQjnskygflTtbcVktXPOhBE2ofMOaSM+jMTUpNoiul/1BVPIvN61TfUTLeuXvvXDGi58pf20VQUg=="], + + "@tanstack/router-generator": ["@tanstack/router-generator@1.132.51", "", { "dependencies": { "@tanstack/router-core": "1.132.47", "@tanstack/router-utils": "1.132.51", "@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-iAGz2IZ2rr38o+7cgE33qPyNFJFx7PcPOvUXk5kcX1TtXeyTgVLoe7vqQzKYbungZmht2V8xSFmy6kakUJhxOA=="], + + "@tanstack/router-plugin": ["@tanstack/router-plugin@1.132.56", "", { "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.132.47", "@tanstack/router-generator": "1.132.51", "@tanstack/router-utils": "1.132.51", "@tanstack/virtual-file-routes": "1.132.31", "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.132.47", "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-kwW2NWMoxMMOoxbRPAxYoEjB+iy4vnYTS9VctKMcwYDtIGK1pQuLR3XtpdhNt0S5reKXfqJG2hEj6yTHUcJs7g=="], + + "@tanstack/router-utils": ["@tanstack/router-utils@1.132.51", "", { "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-8wmYmc8LY0MhgNw1jfwjTdpYgl5CmvvkamoHOUcz4odFiAWOXLhwo3UBOwKihw+6SxJ/M7l9tEcq5PdLUOUi0Q=="], + + "@tanstack/store": ["@tanstack/store@0.0.1-beta.52", "", { "dependencies": { "immer": "^9.0.15" } }, "sha512-3/5XqeG09sCJnakHpq8qgXjdVpm97aITbi1wfbjLGXdVsss62zpJAvc4vL8ccHf+J/OmoS4dJTNuEZ0alywZtg=="], + "@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=="], + "@tootallnate/quickjs-emscripten": ["@tootallnate/quickjs-emscripten@0.23.0", "", {}, "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA=="], "@tybys/wasm-util": ["@tybys/wasm-util@0.10.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ=="], - "@types/bluebird": ["@types/bluebird@3.5.42", "", {}, "sha512-Jhy+MWRlro6UjVi578V/4ZGNfeCOcNCp0YaFNIUGFKlImowqwb1O/22wDVk3FDGMLqxdpOV3qQHD5fPEH4hK6A=="], + "@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/chai": ["@types/chai@5.2.2", "", { "dependencies": { "@types/deep-eql": "*" } }, "sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg=="], + "@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/bluebird": ["@types/bluebird@3.5.42", "", {}, "sha512-Jhy+MWRlro6UjVi578V/4ZGNfeCOcNCp0YaFNIUGFKlImowqwb1O/22wDVk3FDGMLqxdpOV3qQHD5fPEH4hK6A=="], "@types/d3-array": ["@types/d3-array@3.2.1", "", {}, "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg=="], @@ -984,22 +918,16 @@ "@types/d3-timer": ["@types/d3-timer@3.0.2", "", {}, "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw=="], - "@types/deep-eql": ["@types/deep-eql@4.0.2", "", {}, "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw=="], - "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="], - "@types/json5": ["@types/json5@0.0.29", "", {}, "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ=="], - - "@types/node": ["@types/node@24.3.0", "", { "dependencies": { "undici-types": "~7.10.0" } }, "sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow=="], + "@types/node": ["@types/node@22.18.10", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-anNG/V/Efn/YZY4pRzbACnKxNKoBng2VTFydVu8RRs5hQjikP8CQfaeAV59VFSCzKNp90mXiVXW2QzV56rwMrg=="], "@types/node-fetch": ["@types/node-fetch@2.6.13", "", { "dependencies": { "@types/node": "*", "form-data": "^4.0.4" } }, "sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw=="], "@types/pg": ["@types/pg@8.15.5", "", { "dependencies": { "@types/node": "*", "pg-protocol": "*", "pg-types": "^2.2.0" } }, "sha512-LF7lF6zWEKxuT3/OR8wAZGzkg4ENGXFNyiV/JeOt9z5B+0ZVwbql9McqX5c/WStFq1GaGso7H1AzP/qSzmlCKQ=="], - "@types/prismjs": ["@types/prismjs@1.26.5", "", {}, "sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ=="], - "@types/react": ["@types/react@19.1.11", "", { "dependencies": { "csstype": "^3.0.2" } }, "sha512-lr3jdBw/BGj49Eps7EvqlUaoeA0xpj3pc0RoJkHpYaCHkVK7i28dKyImLQb3JVlqs3aYSXf7qYuWOW/fgZnTXQ=="], "@types/react-dom": ["@types/react-dom@19.1.7", "", { "peerDependencies": { "@types/react": "^19.0.0" } }, "sha512-i5ZzwYpqjmrKenzkoLM2Ibzt6mAsM7pxB6BCIouEVVmgiqaMj1TjaK7hnA36hbW5aZv20kx7Lw6hWzPWg0Rurw=="], @@ -1008,81 +936,7 @@ "@types/uuid": ["@types/uuid@9.0.8", "", {}, "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA=="], - "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.41.0", "", { "dependencies": { "@eslint-community/regexpp": "^4.10.0", "@typescript-eslint/scope-manager": "8.41.0", "@typescript-eslint/type-utils": "8.41.0", "@typescript-eslint/utils": "8.41.0", "@typescript-eslint/visitor-keys": "8.41.0", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.41.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-8fz6oa6wEKZrhXWro/S3n2eRJqlRcIa6SlDh59FXJ5Wp5XRZ8B9ixpJDcjadHq47hMx0u+HW6SNa6LjJQ6NLtw=="], - - "@typescript-eslint/parser": ["@typescript-eslint/parser@8.41.0", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.41.0", "@typescript-eslint/types": "8.41.0", "@typescript-eslint/typescript-estree": "8.41.0", "@typescript-eslint/visitor-keys": "8.41.0", "debug": "^4.3.4" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-gTtSdWX9xiMPA/7MV9STjJOOYtWwIJIYxkQxnSV1U3xcE+mnJSH3f6zI0RYP+ew66WSlZ5ed+h0VCxsvdC1jJg=="], - - "@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.41.0", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.41.0", "@typescript-eslint/types": "^8.41.0", "debug": "^4.3.4" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-b8V9SdGBQzQdjJ/IO3eDifGpDBJfvrNTp2QD9P2BeqWTGrRibgfgIlBSw6z3b6R7dPzg752tOs4u/7yCLxksSQ=="], - - "@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.41.0", "", { "dependencies": { "@typescript-eslint/types": "8.41.0", "@typescript-eslint/visitor-keys": "8.41.0" } }, "sha512-n6m05bXn/Cd6DZDGyrpXrELCPVaTnLdPToyhBoFkLIMznRUQUEQdSp96s/pcWSQdqOhrgR1mzJ+yItK7T+WPMQ=="], - - "@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.41.0", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-TDhxYFPUYRFxFhuU5hTIJk+auzM/wKvWgoNYOPcOf6i4ReYlOoYN8q1dV5kOTjNQNJgzWN3TUUQMtlLOcUgdUw=="], - - "@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.41.0", "", { "dependencies": { "@typescript-eslint/types": "8.41.0", "@typescript-eslint/typescript-estree": "8.41.0", "@typescript-eslint/utils": "8.41.0", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-63qt1h91vg3KsjVVonFJWjgSK7pZHSQFKH6uwqxAH9bBrsyRhO6ONoKyXxyVBzG1lJnFAJcKAcxLS54N1ee1OQ=="], - - "@typescript-eslint/types": ["@typescript-eslint/types@8.41.0", "", {}, "sha512-9EwxsWdVqh42afLbHP90n2VdHaWU/oWgbH2P0CfcNfdKL7CuKpwMQGjwev56vWu9cSKU7FWSu6r9zck6CVfnag=="], - - "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.41.0", "", { "dependencies": { "@typescript-eslint/project-service": "8.41.0", "@typescript-eslint/tsconfig-utils": "8.41.0", "@typescript-eslint/types": "8.41.0", "@typescript-eslint/visitor-keys": "8.41.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-D43UwUYJmGhuwHfY7MtNKRZMmfd8+p/eNSfFe6tH5mbVDto+VQCayeAt35rOx3Cs6wxD16DQtIKw/YXxt5E0UQ=="], - - "@typescript-eslint/utils": ["@typescript-eslint/utils@8.41.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", "@typescript-eslint/scope-manager": "8.41.0", "@typescript-eslint/types": "8.41.0", "@typescript-eslint/typescript-estree": "8.41.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-udbCVstxZ5jiPIXrdH+BZWnPatjlYwJuJkDA4Tbo3WyYLh8NvB+h/bKeSZHDOFKfphsZYJQqaFtLeXEqurQn1A=="], - - "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.41.0", "", { "dependencies": { "@typescript-eslint/types": "8.41.0", "eslint-visitor-keys": "^4.2.1" } }, "sha512-+GeGMebMCy0elMNg67LRNoVnUFPIm37iu5CmHESVx56/9Jsfdpsvbv605DQ81Pi/x11IdKUsS5nzgTYbCQU9fg=="], - - "@unrs/resolver-binding-android-arm-eabi": ["@unrs/resolver-binding-android-arm-eabi@1.11.1", "", { "os": "android", "cpu": "arm" }, "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw=="], - - "@unrs/resolver-binding-android-arm64": ["@unrs/resolver-binding-android-arm64@1.11.1", "", { "os": "android", "cpu": "arm64" }, "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g=="], - - "@unrs/resolver-binding-darwin-arm64": ["@unrs/resolver-binding-darwin-arm64@1.11.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g=="], - - "@unrs/resolver-binding-darwin-x64": ["@unrs/resolver-binding-darwin-x64@1.11.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ=="], - - "@unrs/resolver-binding-freebsd-x64": ["@unrs/resolver-binding-freebsd-x64@1.11.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw=="], - - "@unrs/resolver-binding-linux-arm-gnueabihf": ["@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1", "", { "os": "linux", "cpu": "arm" }, "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw=="], - - "@unrs/resolver-binding-linux-arm-musleabihf": ["@unrs/resolver-binding-linux-arm-musleabihf@1.11.1", "", { "os": "linux", "cpu": "arm" }, "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw=="], - - "@unrs/resolver-binding-linux-arm64-gnu": ["@unrs/resolver-binding-linux-arm64-gnu@1.11.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ=="], - - "@unrs/resolver-binding-linux-arm64-musl": ["@unrs/resolver-binding-linux-arm64-musl@1.11.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w=="], - - "@unrs/resolver-binding-linux-ppc64-gnu": ["@unrs/resolver-binding-linux-ppc64-gnu@1.11.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA=="], - - "@unrs/resolver-binding-linux-riscv64-gnu": ["@unrs/resolver-binding-linux-riscv64-gnu@1.11.1", "", { "os": "linux", "cpu": "none" }, "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ=="], - - "@unrs/resolver-binding-linux-riscv64-musl": ["@unrs/resolver-binding-linux-riscv64-musl@1.11.1", "", { "os": "linux", "cpu": "none" }, "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew=="], - - "@unrs/resolver-binding-linux-s390x-gnu": ["@unrs/resolver-binding-linux-s390x-gnu@1.11.1", "", { "os": "linux", "cpu": "s390x" }, "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg=="], - - "@unrs/resolver-binding-linux-x64-gnu": ["@unrs/resolver-binding-linux-x64-gnu@1.11.1", "", { "os": "linux", "cpu": "x64" }, "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w=="], - - "@unrs/resolver-binding-linux-x64-musl": ["@unrs/resolver-binding-linux-x64-musl@1.11.1", "", { "os": "linux", "cpu": "x64" }, "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA=="], - - "@unrs/resolver-binding-wasm32-wasi": ["@unrs/resolver-binding-wasm32-wasi@1.11.1", "", { "dependencies": { "@napi-rs/wasm-runtime": "^0.2.11" }, "cpu": "none" }, "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ=="], - - "@unrs/resolver-binding-win32-arm64-msvc": ["@unrs/resolver-binding-win32-arm64-msvc@1.11.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw=="], - - "@unrs/resolver-binding-win32-ia32-msvc": ["@unrs/resolver-binding-win32-ia32-msvc@1.11.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ=="], - - "@unrs/resolver-binding-win32-x64-msvc": ["@unrs/resolver-binding-win32-x64-msvc@1.11.1", "", { "os": "win32", "cpu": "x64" }, "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g=="], - - "@vitest/coverage-v8": ["@vitest/coverage-v8@3.2.4", "", { "dependencies": { "@ampproject/remapping": "^2.3.0", "@bcoe/v8-coverage": "^1.0.2", "ast-v8-to-istanbul": "^0.3.3", "debug": "^4.4.1", "istanbul-lib-coverage": "^3.2.2", "istanbul-lib-report": "^3.0.1", "istanbul-lib-source-maps": "^5.0.6", "istanbul-reports": "^3.1.7", "magic-string": "^0.30.17", "magicast": "^0.3.5", "std-env": "^3.9.0", "test-exclude": "^7.0.1", "tinyrainbow": "^2.0.0" }, "peerDependencies": { "@vitest/browser": "3.2.4", "vitest": "3.2.4" }, "optionalPeers": ["@vitest/browser"] }, "sha512-EyF9SXU6kS5Ku/U82E259WSnvg6c8KTjppUncuNdm5QHpe17mwREHnjDzozC8x9MZ0xfBUFSaLkRv4TMA75ALQ=="], - - "@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - - "@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - - "@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - - "@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - - "@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - - "@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - - "@vitest/ui": ["@vitest/ui@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "fflate": "^0.8.2", "flatted": "^3.3.3", "pathe": "^2.0.3", "sirv": "^3.0.1", "tinyglobby": "^0.2.14", "tinyrainbow": "^2.0.0" }, "peerDependencies": { "vitest": "3.2.4" } }, "sha512-hGISOaP18plkzbWEcP/QvtRW1xDXF2+96HbEX6byqQhAUbiS5oH6/9JwW+QsQCIYON2bI6QZBF+2PvOmrRZ9wA=="], - - "@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@vitejs/plugin-react": ["@vitejs/plugin-react@4.7.0", "", { "dependencies": { "@babel/core": "^7.28.0", "@babel/plugin-transform-react-jsx-self": "^7.27.1", "@babel/plugin-transform-react-jsx-source": "^7.27.1", "@rolldown/pluginutils": "1.0.0-beta.27", "@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-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA=="], "acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], @@ -1100,66 +954,42 @@ "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + "ansis": ["ansis@4.2.0", "", {}, "sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig=="], + + "anymatch": ["anymatch@3.1.3", "", { "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw=="], + "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], "aria-hidden": ["aria-hidden@1.2.6", "", { "dependencies": { "tslib": "^2.0.0" } }, "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA=="], - "aria-query": ["aria-query@5.3.2", "", {}, "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw=="], - - "array-buffer-byte-length": ["array-buffer-byte-length@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "is-array-buffer": "^3.0.5" } }, "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw=="], - - "array-includes": ["array-includes@3.1.9", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-abstract": "^1.24.0", "es-object-atoms": "^1.1.1", "get-intrinsic": "^1.3.0", "is-string": "^1.1.1", "math-intrinsics": "^1.1.0" } }, "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ=="], - "array-union": ["array-union@2.1.0", "", {}, "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw=="], - "array.prototype.findlast": ["array.prototype.findlast@1.2.5", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.2", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "es-shim-unscopables": "^1.0.2" } }, "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ=="], - - "array.prototype.findlastindex": ["array.prototype.findlastindex@1.2.6", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-abstract": "^1.23.9", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "es-shim-unscopables": "^1.1.0" } }, "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ=="], - - "array.prototype.flat": ["array.prototype.flat@1.3.3", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-shim-unscopables": "^1.0.2" } }, "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg=="], - - "array.prototype.flatmap": ["array.prototype.flatmap@1.3.3", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-shim-unscopables": "^1.0.2" } }, "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg=="], - - "array.prototype.tosorted": ["array.prototype.tosorted@1.1.4", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.3", "es-errors": "^1.3.0", "es-shim-unscopables": "^1.0.2" } }, "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA=="], - - "arraybuffer.prototype.slice": ["arraybuffer.prototype.slice@1.0.4", "", { "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "is-array-buffer": "^3.0.4" } }, "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ=="], - "asn1": ["asn1@0.2.6", "", { "dependencies": { "safer-buffer": "~2.1.0" } }, "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ=="], "asn1js": ["asn1js@3.0.6", "", { "dependencies": { "pvtsutils": "^1.3.6", "pvutils": "^1.1.3", "tslib": "^2.8.1" } }, "sha512-UOCGPYbl0tv8+006qks/dTgV9ajs97X2p0FAbyS2iyCRrmLSRolDaHdp+v/CLgnzHc3fVB+CwYiUmei7ndFcgA=="], "assert-plus": ["assert-plus@1.0.0", "", {}, "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw=="], - "assertion-error": ["assertion-error@2.0.1", "", {}, "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA=="], - - "ast-types": ["ast-types@0.13.4", "", { "dependencies": { "tslib": "^2.0.1" } }, "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w=="], - - "ast-types-flow": ["ast-types-flow@0.0.8", "", {}, "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ=="], - - "ast-v8-to-istanbul": ["ast-v8-to-istanbul@0.3.4", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.29", "estree-walker": "^3.0.3", "js-tokens": "^9.0.1" } }, "sha512-cxrAnZNLBnQwBPByK4CeDaw5sWZtMilJE/Q3iDA0aamgaIVNDF9T6K2/8DfYDZEejZ2jNnDrG9m8MY72HFd0KA=="], - - "async-function": ["async-function@1.0.0", "", {}, "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA=="], + "ast-types": ["ast-types@0.16.1", "", { "dependencies": { "tslib": "^2.0.1" } }, "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg=="], "asynckit": ["asynckit@0.4.0", "", {}, "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="], "attr-accept": ["attr-accept@2.2.5", "", {}, "sha512-0bDNnY/u6pPwHDMoF0FieU354oBi0a8rD9FcsLwzcGWbc8KS8KPIi7y+s13OlVY+gMWc/9xEMUgNE6Qm8ZllYQ=="], - "available-typed-arrays": ["available-typed-arrays@1.0.7", "", { "dependencies": { "possible-typed-array-names": "^1.0.0" } }, "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ=="], - "aws-sign2": ["aws-sign2@0.7.0", "", {}, "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA=="], "aws4": ["aws4@1.13.2", "", {}, "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw=="], - "axe-core": ["axe-core@4.10.3", "", {}, "sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg=="], - "axios": ["axios@1.11.0", "", { "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.4", "proxy-from-env": "^1.1.0" } }, "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA=="], - "axobject-query": ["axobject-query@4.1.0", "", {}, "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ=="], + "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=="], "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], "base64-js": ["base64-js@1.5.1", "", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="], + "baseline-browser-mapping": ["baseline-browser-mapping@2.8.16", "", { "bin": { "baseline-browser-mapping": "dist/cli.js" } }, "sha512-OMu3BGQ4E7P1ErFsIPpbJh0qvDudM/UuJeHgkAvfWe+0HFJCXh+t/l8L6fVLR55RI/UbKrVLnAXZSVwd9ysWYw=="], + "basic-ftp": ["basic-ftp@5.0.5", "", {}, "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg=="], "bcrypt-pbkdf": ["bcrypt-pbkdf@1.0.2", "", { "dependencies": { "tweetnacl": "^0.14.3" } }, "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w=="], @@ -1172,6 +1002,8 @@ "bignumber.js": ["bignumber.js@9.3.1", "", {}, "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ=="], + "binary-extensions": ["binary-extensions@2.3.0", "", {}, "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw=="], + "bluebird": ["bluebird@3.7.2", "", {}, "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="], "bowser": ["bowser@2.12.1", "", {}, "sha512-z4rE2Gxh7tvshQ4hluIT7XcFrgLIQaw9X3A+kTTRdovCz5PMukm/0QC/BKSYPj3omF5Qfypn9O/c5kgpmvYUCw=="], @@ -1182,37 +1014,29 @@ "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], + "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=="], + "buffer": ["buffer@5.6.0", "", { "dependencies": { "base64-js": "^1.0.2", "ieee754": "^1.1.4" } }, "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw=="], "buffer-equal-constant-time": ["buffer-equal-constant-time@1.0.1", "", {}, "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA=="], "buffer-from": ["buffer-from@1.1.2", "", {}, "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="], - "busboy": ["busboy@1.6.0", "", { "dependencies": { "streamsearch": "^1.1.0" } }, "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA=="], - - "cac": ["cac@6.7.14", "", {}, "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ=="], - - "call-bind": ["call-bind@1.0.8", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.2" } }, "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww=="], - "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], "call-bound": ["call-bound@1.0.4", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" } }, "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg=="], "callsites": ["callsites@3.1.0", "", {}, "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="], - "caniuse-lite": ["caniuse-lite@1.0.30001737", "", {}, "sha512-BiloLiXtQNrY5UyF0+1nSJLXUENuhka2pzy2Fx5pGxqavdrxSCW4U6Pn/PoG3Efspi2frRbHpBV2XsrPE6EDlw=="], + "caniuse-lite": ["caniuse-lite@1.0.30001750", "", {}, "sha512-cuom0g5sdX6rw00qOoLNSFCJ9/mYIsuSOA+yzpDw8eopiFqcVwQvZHqov0vmEighRxX++cfC0Vg1G+1Iy/mSpQ=="], "caseless": ["caseless@0.12.0", "", {}, "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="], - "chai": ["chai@5.3.3", "", { "dependencies": { "assertion-error": "^2.0.1", "check-error": "^2.1.1", "deep-eql": "^5.0.1", "loupe": "^3.1.0", "pathval": "^2.0.0" } }, "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw=="], - "chalk": ["chalk@5.6.0", "", {}, "sha512-46QrSQFyVSEyYAgQ22hQ+zDa60YHA4fBstHmtSApj1Y5vKtG27fWowW03jCk5KcbXEWPZUIR894aARCA/G1kfQ=="], "chardet": ["chardet@2.1.0", "", {}, "sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA=="], - "check-error": ["check-error@2.1.1", "", {}, "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw=="], - - "chownr": ["chownr@3.0.0", "", {}, "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g=="], + "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=="], "ci-info": ["ci-info@3.9.0", "", {}, "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ=="], @@ -1222,20 +1046,14 @@ "cli-truncate": ["cli-truncate@4.0.0", "", { "dependencies": { "slice-ansi": "^5.0.0", "string-width": "^7.0.0" } }, "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA=="], - "client-only": ["client-only@0.0.1", "", {}, "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="], - "clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="], "cluster-key-slot": ["cluster-key-slot@1.1.2", "", {}, "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA=="], - "color": ["color@4.2.3", "", { "dependencies": { "color-convert": "^2.0.1", "color-string": "^1.9.0" } }, "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A=="], - "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], - "color-string": ["color-string@1.9.1", "", { "dependencies": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" } }, "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg=="], - "colorette": ["colorette@2.0.20", "", {}, "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w=="], "combined-stream": ["combined-stream@1.0.8", "", { "dependencies": { "delayed-stream": "~1.0.0" } }, "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg=="], @@ -1244,7 +1062,9 @@ "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], - "core-js": ["core-js@3.45.1", "", {}, "sha512-L4NPsJlCfZsPeXukyzHFlg/i7IIVwHSItR0wg0FLNqYClJ4MQYTYLbC7EkjKYRLZF2iof2MUgN0EGy7MdQFChg=="], + "convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="], + + "cookie-es": ["cookie-es@2.0.0", "", {}, "sha512-RAj4E421UYRgqokKUmotqAwuplYw15qtdXfY+hGzgCJ/MBjCVZcSoHK/kH9kocfjRjcDME7IiDWR/1WX1TM2Pg=="], "core-util-is": ["core-util-is@1.0.2", "", {}, "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ=="], @@ -1274,34 +1094,20 @@ "d3-timer": ["d3-timer@3.0.1", "", {}, "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA=="], - "damerau-levenshtein": ["damerau-levenshtein@1.0.8", "", {}, "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA=="], - "dashdash": ["dashdash@1.14.1", "", { "dependencies": { "assert-plus": "^1.0.0" } }, "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g=="], "data-uri-to-buffer": ["data-uri-to-buffer@4.0.1", "", {}, "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A=="], - "data-view-buffer": ["data-view-buffer@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-data-view": "^1.0.2" } }, "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ=="], - - "data-view-byte-length": ["data-view-byte-length@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-data-view": "^1.0.2" } }, "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ=="], - - "data-view-byte-offset": ["data-view-byte-offset@1.0.1", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" } }, "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ=="], - "date-fns": ["date-fns@4.1.0", "", {}, "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg=="], "debug": ["debug@4.4.1", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ=="], "decimal.js-light": ["decimal.js-light@2.5.1", "", {}, "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg=="], - "deep-eql": ["deep-eql@5.0.2", "", {}, "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q=="], - "deep-is": ["deep-is@0.1.4", "", {}, "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="], "deepmerge": ["deepmerge@4.3.1", "", {}, "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A=="], - "define-data-property": ["define-data-property@1.1.4", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "gopd": "^1.0.1" } }, "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A=="], - - "define-properties": ["define-properties@1.2.1", "", { "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" } }, "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg=="], - "defu": ["defu@6.1.4", "", {}, "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg=="], "degenerator": ["degenerator@5.0.1", "", { "dependencies": { "ast-types": "^0.13.4", "escodegen": "^2.1.0", "esprima": "^4.0.1" } }, "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ=="], @@ -1316,9 +1122,9 @@ "detect-node-es": ["detect-node-es@1.1.0", "", {}, "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ=="], - "dir-glob": ["dir-glob@3.0.1", "", { "dependencies": { "path-type": "^4.0.0" } }, "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA=="], + "diff": ["diff@8.0.2", "", {}, "sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg=="], - "doctrine": ["doctrine@2.1.0", "", { "dependencies": { "esutils": "^2.0.2" } }, "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw=="], + "dir-glob": ["dir-glob@3.0.1", "", { "dependencies": { "path-type": "^4.0.0" } }, "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA=="], "dom-serializer": ["dom-serializer@2.0.0", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", "entities": "^4.2.0" } }, "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg=="], @@ -1328,8 +1134,6 @@ "domutils": ["domutils@3.2.2", "", { "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", "domhandler": "^5.0.3" } }, "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw=="], - "dotenv": ["dotenv@17.2.1", "", {}, "sha512-kQhDYKZecqnM0fCnzI5eIv5L4cAe/iRI+HqMbO/hbRdTAeXDG+M9FjipUxNfbARuEg4iHIbhnhs78BCHNbSxEQ=="], - "drizzle-kit": ["drizzle-kit@0.31.4", "", { "dependencies": { "@drizzle-team/brocli": "^0.10.2", "@esbuild-kit/esm-loader": "^2.5.5", "esbuild": "^0.25.4", "esbuild-register": "^3.5.0" }, "bin": { "drizzle-kit": "bin.cjs" } }, "sha512-tCPWVZWZqWVx2XUsVpJRnH9Mx0ClVOf5YUHerZ5so1OKSlqww4zy1R5ksEdGRcO3tM3zj0PYN6V48TbQCL1RfA=="], "drizzle-orm": ["drizzle-orm@0.44.5", "", { "peerDependencies": { "@aws-sdk/client-rds-data": ">=3", "@cloudflare/workers-types": ">=4", "@electric-sql/pglite": ">=0.2.0", "@libsql/client": ">=0.10.0", "@libsql/client-wasm": ">=0.10.0", "@neondatabase/serverless": ">=0.10.0", "@op-engineering/op-sqlite": ">=2", "@opentelemetry/api": "^1.4.1", "@planetscale/database": ">=1.13", "@prisma/client": "*", "@tidbcloud/serverless": "*", "@types/better-sqlite3": "*", "@types/pg": "*", "@types/sql.js": "*", "@upstash/redis": ">=1.34.7", "@vercel/postgres": ">=0.8.0", "@xata.io/client": "*", "better-sqlite3": ">=7", "bun-types": "*", "expo-sqlite": ">=14.0.0", "gel": ">=2", "knex": "*", "kysely": "*", "mysql2": ">=2", "pg": ">=8", "postgres": ">=3", "sql.js": ">=1", "sqlite3": ">=5" }, "optionalPeers": ["@aws-sdk/client-rds-data", "@cloudflare/workers-types", "@electric-sql/pglite", "@libsql/client", "@libsql/client-wasm", "@neondatabase/serverless", "@op-engineering/op-sqlite", "@opentelemetry/api", "@planetscale/database", "@prisma/client", "@tidbcloud/serverless", "@types/better-sqlite3", "@types/pg", "@types/sql.js", "@upstash/redis", "@vercel/postgres", "@xata.io/client", "better-sqlite3", "bun-types", "expo-sqlite", "gel", "knex", "kysely", "mysql2", "pg", "postgres", "sql.js", "sqlite3"] }, "sha512-jBe37K7d8ZSKptdKfakQFdeljtu3P2Cbo7tJoJSVZADzIKOBo9IAJPOmMsH2bZl90bZgh8FQlD8BjxXA/zuBkQ=="], @@ -1344,9 +1148,9 @@ "ecdsa-sig-formatter": ["ecdsa-sig-formatter@1.0.11", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ=="], - "emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], + "electron-to-chromium": ["electron-to-chromium@1.5.235", "", {}, "sha512-i/7ntLFwOdoHY7sgjlTIDo4Sl8EdoTjWIaKinYOVfC6bOp71bmwenyZthWHcasxgHDNWbWxvG9M3Ia116zIaYQ=="], - "enhanced-resolve": ["enhanced-resolve@5.18.3", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" } }, "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww=="], + "emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], "enquirer": ["enquirer@2.4.1", "", { "dependencies": { "ansi-colors": "^4.1.1", "strip-ansi": "^6.0.1" } }, "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ=="], @@ -1354,52 +1158,28 @@ "environment": ["environment@1.1.0", "", {}, "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q=="], - "es-abstract": ["es-abstract@1.24.0", "", { "dependencies": { "array-buffer-byte-length": "^1.0.2", "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.4", "data-view-buffer": "^1.0.2", "data-view-byte-length": "^1.0.2", "data-view-byte-offset": "^1.0.1", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "es-set-tostringtag": "^2.1.0", "es-to-primitive": "^1.3.0", "function.prototype.name": "^1.1.8", "get-intrinsic": "^1.3.0", "get-proto": "^1.0.1", "get-symbol-description": "^1.1.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "internal-slot": "^1.1.0", "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", "is-data-view": "^1.0.2", "is-negative-zero": "^2.0.3", "is-regex": "^1.2.1", "is-set": "^2.0.3", "is-shared-array-buffer": "^1.0.4", "is-string": "^1.1.1", "is-typed-array": "^1.1.15", "is-weakref": "^1.1.1", "math-intrinsics": "^1.1.0", "object-inspect": "^1.13.4", "object-keys": "^1.1.1", "object.assign": "^4.1.7", "own-keys": "^1.0.1", "regexp.prototype.flags": "^1.5.4", "safe-array-concat": "^1.1.3", "safe-push-apply": "^1.0.0", "safe-regex-test": "^1.1.0", "set-proto": "^1.0.0", "stop-iteration-iterator": "^1.1.0", "string.prototype.trim": "^1.2.10", "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", "typed-array-buffer": "^1.0.3", "typed-array-byte-length": "^1.0.3", "typed-array-byte-offset": "^1.0.4", "typed-array-length": "^1.0.7", "unbox-primitive": "^1.1.0", "which-typed-array": "^1.1.19" } }, "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg=="], - "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], - "es-iterator-helpers": ["es-iterator-helpers@1.2.1", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-abstract": "^1.23.6", "es-errors": "^1.3.0", "es-set-tostringtag": "^2.0.3", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.6", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", "iterator.prototype": "^1.1.4", "safe-array-concat": "^1.1.3" } }, "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w=="], - - "es-module-lexer": ["es-module-lexer@1.7.0", "", {}, "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA=="], - "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="], "es-set-tostringtag": ["es-set-tostringtag@2.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA=="], - "es-shim-unscopables": ["es-shim-unscopables@1.1.0", "", { "dependencies": { "hasown": "^2.0.2" } }, "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw=="], - - "es-to-primitive": ["es-to-primitive@1.3.0", "", { "dependencies": { "is-callable": "^1.2.7", "is-date-object": "^1.0.5", "is-symbol": "^1.0.4" } }, "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g=="], - "es-toolkit": ["es-toolkit@1.39.10", "", {}, "sha512-E0iGnTtbDhkeczB0T+mxmoVlT4YNweEKBLq7oaU4p11mecdsZpNWOglI4895Vh4usbQ+LsJiuLuI2L0Vdmfm2w=="], "esbuild": ["esbuild@0.25.9", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.9", "@esbuild/android-arm": "0.25.9", "@esbuild/android-arm64": "0.25.9", "@esbuild/android-x64": "0.25.9", "@esbuild/darwin-arm64": "0.25.9", "@esbuild/darwin-x64": "0.25.9", "@esbuild/freebsd-arm64": "0.25.9", "@esbuild/freebsd-x64": "0.25.9", "@esbuild/linux-arm": "0.25.9", "@esbuild/linux-arm64": "0.25.9", "@esbuild/linux-ia32": "0.25.9", "@esbuild/linux-loong64": "0.25.9", "@esbuild/linux-mips64el": "0.25.9", "@esbuild/linux-ppc64": "0.25.9", "@esbuild/linux-riscv64": "0.25.9", "@esbuild/linux-s390x": "0.25.9", "@esbuild/linux-x64": "0.25.9", "@esbuild/netbsd-arm64": "0.25.9", "@esbuild/netbsd-x64": "0.25.9", "@esbuild/openbsd-arm64": "0.25.9", "@esbuild/openbsd-x64": "0.25.9", "@esbuild/openharmony-arm64": "0.25.9", "@esbuild/sunos-x64": "0.25.9", "@esbuild/win32-arm64": "0.25.9", "@esbuild/win32-ia32": "0.25.9", "@esbuild/win32-x64": "0.25.9" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g=="], "esbuild-register": ["esbuild-register@3.6.0", "", { "dependencies": { "debug": "^4.3.4" }, "peerDependencies": { "esbuild": ">=0.12 <1" } }, "sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg=="], + "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], + "escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], "escodegen": ["escodegen@2.1.0", "", { "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", "esutils": "^2.0.2" }, "optionalDependencies": { "source-map": "~0.6.1" }, "bin": { "esgenerate": "bin/esgenerate.js", "escodegen": "bin/escodegen.js" } }, "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w=="], "eslint": ["eslint@9.34.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.21.0", "@eslint/config-helpers": "^0.3.1", "@eslint/core": "^0.15.2", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "9.34.0", "@eslint/plugin-kit": "^0.3.5", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^8.4.0", "eslint-visitor-keys": "^4.2.1", "espree": "^10.4.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "peerDependencies": { "jiti": "*" }, "optionalPeers": ["jiti"], "bin": { "eslint": "bin/eslint.js" } }, "sha512-RNCHRX5EwdrESy3Jc9o8ie8Bog+PeYvvSR8sDGoZxNFTvZ4dlxUB3WzQ3bQMztFrSRODGrLLj8g6OFuGY/aiQg=="], - "eslint-config-next": ["eslint-config-next@15.4.7", "", { "dependencies": { "@next/eslint-plugin-next": "15.4.7", "@rushstack/eslint-patch": "^1.10.3", "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", "eslint-import-resolver-node": "^0.3.6", "eslint-import-resolver-typescript": "^3.5.2", "eslint-plugin-import": "^2.31.0", "eslint-plugin-jsx-a11y": "^6.10.0", "eslint-plugin-react": "^7.37.0", "eslint-plugin-react-hooks": "^5.0.0" }, "peerDependencies": { "eslint": "^7.23.0 || ^8.0.0 || ^9.0.0", "typescript": ">=3.3.1" }, "optionalPeers": ["typescript"] }, "sha512-tkKKNVJKI4zMIgTpvG2x6mmdhuOdgXUL3AaSPHwxLQkvzi4Yryqvk6B0R5Z4gkpe7FKopz3ZmlpePH3NTHy3gA=="], - - "eslint-import-resolver-node": ["eslint-import-resolver-node@0.3.9", "", { "dependencies": { "debug": "^3.2.7", "is-core-module": "^2.13.0", "resolve": "^1.22.4" } }, "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g=="], - - "eslint-import-resolver-typescript": ["eslint-import-resolver-typescript@3.10.1", "", { "dependencies": { "@nolyfill/is-core-module": "1.0.39", "debug": "^4.4.0", "get-tsconfig": "^4.10.0", "is-bun-module": "^2.0.0", "stable-hash": "^0.0.5", "tinyglobby": "^0.2.13", "unrs-resolver": "^1.6.2" }, "peerDependencies": { "eslint": "*", "eslint-plugin-import": "*", "eslint-plugin-import-x": "*" }, "optionalPeers": ["eslint-plugin-import", "eslint-plugin-import-x"] }, "sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ=="], - - "eslint-module-utils": ["eslint-module-utils@2.12.1", "", { "dependencies": { "debug": "^3.2.7" } }, "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw=="], - - "eslint-plugin-import": ["eslint-plugin-import@2.32.0", "", { "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.9", "array.prototype.findlastindex": "^1.2.6", "array.prototype.flat": "^1.3.3", "array.prototype.flatmap": "^1.3.3", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", "eslint-module-utils": "^2.12.1", "hasown": "^2.0.2", "is-core-module": "^2.16.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", "object.fromentries": "^2.0.8", "object.groupby": "^1.0.3", "object.values": "^1.2.1", "semver": "^6.3.1", "string.prototype.trimend": "^1.0.9", "tsconfig-paths": "^3.15.0" }, "peerDependencies": { "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA=="], - - "eslint-plugin-jsx-a11y": ["eslint-plugin-jsx-a11y@6.10.2", "", { "dependencies": { "aria-query": "^5.3.2", "array-includes": "^3.1.8", "array.prototype.flatmap": "^1.3.2", "ast-types-flow": "^0.0.8", "axe-core": "^4.10.0", "axobject-query": "^4.1.0", "damerau-levenshtein": "^1.0.8", "emoji-regex": "^9.2.2", "hasown": "^2.0.2", "jsx-ast-utils": "^3.3.5", "language-tags": "^1.0.9", "minimatch": "^3.1.2", "object.fromentries": "^2.0.8", "safe-regex-test": "^1.0.3", "string.prototype.includes": "^2.0.1" }, "peerDependencies": { "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" } }, "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q=="], - - "eslint-plugin-react": ["eslint-plugin-react@7.37.5", "", { "dependencies": { "array-includes": "^3.1.8", "array.prototype.findlast": "^1.2.5", "array.prototype.flatmap": "^1.3.3", "array.prototype.tosorted": "^1.1.4", "doctrine": "^2.1.0", "es-iterator-helpers": "^1.2.1", "estraverse": "^5.3.0", "hasown": "^2.0.2", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", "object.entries": "^1.1.9", "object.fromentries": "^2.0.8", "object.values": "^1.2.1", "prop-types": "^15.8.1", "resolve": "^2.0.0-next.5", "semver": "^6.3.1", "string.prototype.matchall": "^4.0.12", "string.prototype.repeat": "^1.0.0" }, "peerDependencies": { "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" } }, "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA=="], - - "eslint-plugin-react-hooks": ["eslint-plugin-react-hooks@5.2.0", "", { "peerDependencies": { "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" } }, "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg=="], - "eslint-scope": ["eslint-scope@8.4.0", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg=="], "eslint-visitor-keys": ["eslint-visitor-keys@4.2.1", "", {}, "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ=="], @@ -1416,16 +1196,12 @@ "estraverse": ["estraverse@5.3.0", "", {}, "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="], - "estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "esutils": ["esutils@2.0.3", "", {}, "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="], "eventemitter3": ["eventemitter3@5.0.1", "", {}, "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA=="], "events": ["events@3.3.0", "", {}, "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="], - "expect-type": ["expect-type@1.2.2", "", {}, "sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA=="], - "extend": ["extend@3.0.2", "", {}, "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="], "extendable-error": ["extendable-error@0.1.7", "", {}, "sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg=="], @@ -1450,8 +1226,6 @@ "fetch-blob": ["fetch-blob@3.2.0", "", { "dependencies": { "node-domexception": "^1.0.0", "web-streams-polyfill": "^3.0.3" } }, "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ=="], - "fflate": ["fflate@0.8.2", "", {}, "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A=="], - "file-entry-cache": ["file-entry-cache@8.0.0", "", { "dependencies": { "flat-cache": "^4.0.0" } }, "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ=="], "file-selector": ["file-selector@2.1.2", "", { "dependencies": { "tslib": "^2.7.0" } }, "sha512-QgXo+mXTe8ljeqUFaX3QVHc5osSItJ/Km+xpocx0aSqWGMSCf6qYs/VnzZgS864Pjn5iceMRFigeAV7AfTlaig=="], @@ -1466,8 +1240,6 @@ "follow-redirects": ["follow-redirects@1.15.11", "", {}, "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ=="], - "for-each": ["for-each@0.3.5", "", { "dependencies": { "is-callable": "^1.2.7" } }, "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg=="], - "foreground-child": ["foreground-child@3.3.1", "", { "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" } }, "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw=="], "forever-agent": ["forever-agent@0.6.1", "", {}, "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw=="], @@ -1486,14 +1258,12 @@ "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], - "function.prototype.name": ["function.prototype.name@1.1.8", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "functions-have-names": "^1.2.3", "hasown": "^2.0.2", "is-callable": "^1.2.7" } }, "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q=="], - - "functions-have-names": ["functions-have-names@1.2.3", "", {}, "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ=="], - "gaxios": ["gaxios@7.1.1", "", { "dependencies": { "extend": "^3.0.2", "https-proxy-agent": "^7.0.1", "node-fetch": "^3.3.2" } }, "sha512-Odju3uBUJyVCkW64nLD4wKLhbh93bh6vIg/ZIXkWiLPBrdgtc65+tls/qml+un3pr6JqYVFDZbbmLDQT68rTOQ=="], "gcp-metadata": ["gcp-metadata@7.0.1", "", { "dependencies": { "gaxios": "^7.0.0", "google-logging-utils": "^1.0.0", "json-bigint": "^1.0.0" } }, "sha512-UcO3kefx6dCcZkgcTGgVOTFb7b1LlQ02hY1omMjjrrBzkajRMCFgYOjs7J71WqnuG1k2b+9ppGL7FsOfhZMQKQ=="], + "gensync": ["gensync@1.0.0-beta.2", "", {}, "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="], + "get-east-asian-width": ["get-east-asian-width@1.3.0", "", {}, "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ=="], "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], @@ -1502,8 +1272,6 @@ "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], - "get-symbol-description": ["get-symbol-description@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6" } }, "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg=="], - "get-tsconfig": ["get-tsconfig@4.10.1", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ=="], "get-uri": ["get-uri@6.0.5", "", { "dependencies": { "basic-ftp": "^5.0.2", "data-uri-to-buffer": "^6.0.2", "debug": "^4.3.4" } }, "sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg=="], @@ -1516,12 +1284,12 @@ "globals": ["globals@14.0.0", "", {}, "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ=="], - "globalthis": ["globalthis@1.0.4", "", { "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" } }, "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ=="], - "globby": ["globby@11.1.0", "", { "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", "fast-glob": "^3.2.9", "ignore": "^5.2.0", "merge2": "^1.4.1", "slash": "^3.0.0" } }, "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g=="], "globrex": ["globrex@0.1.2", "", {}, "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg=="], + "goober": ["goober@2.1.18", "", { "peerDependencies": { "csstype": "^3.0.10" } }, "sha512-2vFqsaDVIT9Gz7N6kAL++pLpp41l3PfDuusHcjnGLfR6+huZkl6ziX+zgVC3ZxpqWhzH6pyDdGrCeDhMIvwaxw=="], + "google-auth-library": ["google-auth-library@10.3.0", "", { "dependencies": { "base64-js": "^1.3.0", "ecdsa-sig-formatter": "^1.0.11", "gaxios": "^7.0.0", "gcp-metadata": "^7.0.0", "google-logging-utils": "^1.0.0", "gtoken": "^8.0.0", "jws": "^4.0.0" } }, "sha512-ylSE3RlCRZfZB56PFJSfUCuiuPq83Fx8hqu1KPWGK8FVdSaxlp/qkeMMX/DT/18xkwXIHvXEXkZsljRwfrdEfQ=="], "google-logging-utils": ["google-logging-utils@1.1.1", "", {}, "sha512-rcX58I7nqpu4mbKztFeOAObbomBbHU2oIb/d3tJfF3dizGSApqtSwYJigGCooHdnMyQBIw8BrWyK96w3YXgr6A=="], @@ -1532,18 +1300,10 @@ "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], - "graphemer": ["graphemer@1.4.0", "", {}, "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag=="], - "gtoken": ["gtoken@8.0.0", "", { "dependencies": { "gaxios": "^7.0.0", "jws": "^4.0.0" } }, "sha512-+CqsMbHPiSTdtSO14O51eMNlrp9N79gmeqmXeouJOhfucAedHw9noVe/n5uJk3tbKE6a+6ZCQg3RPhVhHByAIw=="], - "has-bigints": ["has-bigints@1.1.0", "", {}, "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg=="], - "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], - "has-property-descriptors": ["has-property-descriptors@1.0.2", "", { "dependencies": { "es-define-property": "^1.0.0" } }, "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg=="], - - "has-proto": ["has-proto@1.2.0", "", { "dependencies": { "dunder-proto": "^1.0.0" } }, "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ=="], - "has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="], "has-tostringtag": ["has-tostringtag@1.0.2", "", { "dependencies": { "has-symbols": "^1.0.3" } }, "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw=="], @@ -1552,8 +1312,6 @@ "hono": ["hono@4.9.4", "", {}, "sha512-61hl6MF6ojTl/8QSRu5ran6GXt+6zsngIUN95KzF5v5UjiX/xnrLR358BNRawwIRO49JwUqJqQe3Rb2v559R8Q=="], - "html-escaper": ["html-escaper@2.0.2", "", {}, "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg=="], - "html-to-text": ["html-to-text@9.0.5", "", { "dependencies": { "@selderee/plugin-htmlparser2": "^0.11.0", "deepmerge": "^4.3.1", "dom-serializer": "^2.0.0", "htmlparser2": "^8.0.2", "selderee": "^0.11.0" } }, "sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg=="], "htmlparser2": ["htmlparser2@8.0.2", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", "domutils": "^3.0.1", "entities": "^4.4.0" } }, "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA=="], @@ -1584,106 +1342,50 @@ "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], - "internal-slot": ["internal-slot@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.2", "side-channel": "^1.1.0" } }, "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw=="], - "internmap": ["internmap@2.0.3", "", {}, "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg=="], "iovalkey": ["iovalkey@0.3.3", "", { "dependencies": { "@iovalkey/commands": "^0.1.0", "cluster-key-slot": "^1.1.0", "debug": "^4.3.4", "denque": "^2.1.0", "lodash.defaults": "^4.2.0", "lodash.isarguments": "^3.1.0", "redis-errors": "^1.2.0", "redis-parser": "^3.0.0", "standard-as-callback": "^2.1.0" } }, "sha512-4rTJX6Q5wTYEvxboXi8DsEiUo+OvqJGtLYOSGm37KpdRXsG5XJjbVtYKGJpPSWP+QT7rWscA4vsrdmzbEbenpw=="], "ip-address": ["ip-address@10.0.1", "", {}, "sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA=="], - "is-array-buffer": ["is-array-buffer@3.0.5", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" } }, "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A=="], - - "is-arrayish": ["is-arrayish@0.3.2", "", {}, "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="], - - "is-async-function": ["is-async-function@2.1.1", "", { "dependencies": { "async-function": "^1.0.0", "call-bound": "^1.0.3", "get-proto": "^1.0.1", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" } }, "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ=="], - - "is-bigint": ["is-bigint@1.1.0", "", { "dependencies": { "has-bigints": "^1.0.2" } }, "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ=="], - - "is-boolean-object": ["is-boolean-object@1.2.2", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A=="], - - "is-bun-module": ["is-bun-module@2.0.0", "", { "dependencies": { "semver": "^7.7.1" } }, "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ=="], - - "is-callable": ["is-callable@1.2.7", "", {}, "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA=="], - - "is-core-module": ["is-core-module@2.16.1", "", { "dependencies": { "hasown": "^2.0.2" } }, "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w=="], - - "is-data-view": ["is-data-view@1.0.2", "", { "dependencies": { "call-bound": "^1.0.2", "get-intrinsic": "^1.2.6", "is-typed-array": "^1.1.13" } }, "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw=="], - - "is-date-object": ["is-date-object@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" } }, "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg=="], + "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=="], - "is-finalizationregistry": ["is-finalizationregistry@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg=="], - "is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="], - "is-generator-function": ["is-generator-function@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "get-proto": "^1.0.0", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" } }, "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ=="], - "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], - "is-map": ["is-map@2.0.3", "", {}, "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw=="], - - "is-negative-zero": ["is-negative-zero@2.0.3", "", {}, "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw=="], - "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], - "is-number-object": ["is-number-object@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw=="], - "is-plain-obj": ["is-plain-obj@2.1.0", "", {}, "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA=="], - "is-regex": ["is-regex@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g=="], - - "is-set": ["is-set@2.0.3", "", {}, "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg=="], - - "is-shared-array-buffer": ["is-shared-array-buffer@1.0.4", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A=="], - - "is-string": ["is-string@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA=="], - "is-subdir": ["is-subdir@1.2.0", "", { "dependencies": { "better-path-resolve": "1.0.0" } }, "sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw=="], - "is-symbol": ["is-symbol@1.1.1", "", { "dependencies": { "call-bound": "^1.0.2", "has-symbols": "^1.1.0", "safe-regex-test": "^1.1.0" } }, "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w=="], - - "is-typed-array": ["is-typed-array@1.1.15", "", { "dependencies": { "which-typed-array": "^1.1.16" } }, "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ=="], - "is-typedarray": ["is-typedarray@1.0.0", "", {}, "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA=="], - "is-weakmap": ["is-weakmap@2.0.2", "", {}, "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w=="], - - "is-weakref": ["is-weakref@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew=="], - - "is-weakset": ["is-weakset@2.0.4", "", { "dependencies": { "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" } }, "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ=="], - "is-windows": ["is-windows@1.0.2", "", {}, "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA=="], - "isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="], + "isbot": ["isbot@5.1.31", "", {}, "sha512-DPgQshehErHAqSCKDb3rNW03pa2wS/v5evvUqtxt6TTnHRqAG8FdzcSSJs9656pK6Y+NT7K9R4acEYXLHYfpUQ=="], "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], "isstream": ["isstream@0.1.2", "", {}, "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g=="], - "istanbul-lib-coverage": ["istanbul-lib-coverage@3.2.2", "", {}, "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg=="], - - "istanbul-lib-report": ["istanbul-lib-report@3.0.1", "", { "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", "supports-color": "^7.1.0" } }, "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw=="], - - "istanbul-lib-source-maps": ["istanbul-lib-source-maps@5.0.6", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.23", "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0" } }, "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A=="], - - "istanbul-reports": ["istanbul-reports@3.2.0", "", { "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" } }, "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA=="], - - "iterator.prototype": ["iterator.prototype@1.1.5", "", { "dependencies": { "define-data-property": "^1.1.4", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.6", "get-proto": "^1.0.0", "has-symbols": "^1.1.0", "set-function-name": "^2.0.2" } }, "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g=="], - "jackspeak": ["jackspeak@4.1.1", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" } }, "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ=="], "jiti": ["jiti@2.5.1", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w=="], "jose": ["jose@5.10.0", "", {}, "sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg=="], - "js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], "js-yaml": ["js-yaml@4.1.0", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA=="], "jsbn": ["jsbn@0.1.1", "", {}, "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg=="], + "jsesc": ["jsesc@3.1.0", "", { "bin": { "jsesc": "bin/jsesc" } }, "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="], + "json-bigint": ["json-bigint@1.0.0", "", { "dependencies": { "bignumber.js": "^9.0.0" } }, "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ=="], "json-buffer": ["json-buffer@3.0.1", "", {}, "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="], @@ -1696,7 +1398,7 @@ "json-stringify-safe": ["json-stringify-safe@5.0.1", "", {}, "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA=="], - "json5": ["json5@1.0.2", "", { "dependencies": { "minimist": "^1.2.0" }, "bin": { "json5": "lib/cli.js" } }, "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA=="], + "json5": ["json5@2.2.3", "", { "bin": { "json5": "lib/cli.js" } }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="], "jsonfile": ["jsonfile@4.0.0", "", { "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg=="], @@ -1704,8 +1406,6 @@ "jsprim": ["jsprim@2.0.2", "", { "dependencies": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", "json-schema": "0.4.0", "verror": "1.10.0" } }, "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ=="], - "jsx-ast-utils": ["jsx-ast-utils@3.3.5", "", { "dependencies": { "array-includes": "^3.1.6", "array.prototype.flat": "^1.3.1", "object.assign": "^4.1.4", "object.values": "^1.1.6" } }, "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ=="], - "jwa": ["jwa@2.0.1", "", { "dependencies": { "buffer-equal-constant-time": "^1.0.1", "ecdsa-sig-formatter": "1.0.11", "safe-buffer": "^5.0.1" } }, "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg=="], "jws": ["jws@4.0.0", "", { "dependencies": { "jwa": "^2.0.0", "safe-buffer": "^5.0.1" } }, "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg=="], @@ -1716,10 +1416,6 @@ "kysely": ["kysely@0.28.5", "", {}, "sha512-rlB0I/c6FBDWPcQoDtkxi9zIvpmnV5xoIalfCMSMCa7nuA6VGA3F54TW9mEgX4DVf10sXAWCF5fDbamI/5ZpKA=="], - "language-subtag-registry": ["language-subtag-registry@0.3.23", "", {}, "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ=="], - - "language-tags": ["language-tags@1.0.9", "", { "dependencies": { "language-subtag-registry": "^0.3.20" } }, "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA=="], - "leac": ["leac@0.6.0", "", {}, "sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg=="], "levn": ["levn@0.4.1", "", { "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" } }, "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ=="], @@ -1780,18 +1476,10 @@ "loose-envify": ["loose-envify@1.4.0", "", { "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { "loose-envify": "cli.js" } }, "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="], - "loupe": ["loupe@3.2.1", "", {}, "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ=="], - "lru-cache": ["lru-cache@11.1.0", "", {}, "sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A=="], "lucide-react": ["lucide-react@0.534.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-4Bz7rujQ/mXHqCwjx09ih/Q9SCizz9CjBV5repw9YSHZZZaop9/Oj0RgCDt6WdEaeAPfbcZ8l2b4jzApStqgNw=="], - "magic-string": ["magic-string@0.30.18", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-yi8swmWbO17qHhwIBNeeZxTceJMeBvWJaId6dyvTSOwTipqeHhMhOrz6513r1sOKnpvQ7zkhlG8tPrpilwTxHQ=="], - - "magicast": ["magicast@0.3.5", "", { "dependencies": { "@babel/parser": "^7.25.4", "@babel/types": "^7.25.4", "source-map-js": "^1.2.0" } }, "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ=="], - - "make-dir": ["make-dir@4.0.0", "", { "dependencies": { "semver": "^7.5.3" } }, "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw=="], - "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], "merge-options": ["merge-options@3.0.4", "", { "dependencies": { "is-plain-obj": "^2.1.0" } }, "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ=="], @@ -1812,10 +1500,6 @@ "minipass": ["minipass@7.1.2", "", {}, "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw=="], - "minizlib": ["minizlib@3.0.2", "", { "dependencies": { "minipass": "^7.1.2" } }, "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA=="], - - "mkdirp": ["mkdirp@3.0.1", "", { "bin": { "mkdirp": "dist/cjs/src/bin.js" } }, "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg=="], - "motion": ["motion@12.23.12", "", { "dependencies": { "framer-motion": "^12.23.12", "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-8jCD8uW5GD1csOoqh1WhH1A6j5APHVE15nuBkFeRiMzYBdRwyAHmSP/oXSuW0WJPZRXTFdBoG4hY9TFWNhhwng=="], "motion-dom": ["motion-dom@12.23.12", "", { "dependencies": { "motion-utils": "^12.23.6" } }, "sha512-RcR4fvMCTESQBD/uKQe49D5RUeDOokkGRmz4ceaJKDBgHYtZtntC/s2vLvY38gqGaytinij/yi3hMcWVcEF5Kw=="], @@ -1824,8 +1508,6 @@ "mri": ["mri@1.2.0", "", {}, "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA=="], - "mrmime": ["mrmime@2.0.1", "", {}, "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ=="], - "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], "nano-spawn": ["nano-spawn@1.0.2", "", {}, "sha512-21t+ozMQDAL/UGgQVBbZ/xXvNO10++ZPuTmKRO8k9V3AClVRht49ahtDjfY8l1q6nSHOrE5ASfthzH3ol6R/hg=="], @@ -1840,40 +1522,28 @@ "netmask": ["netmask@2.0.2", "", {}, "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg=="], - "next": ["next@15.3.5", "", { "dependencies": { "@next/env": "15.3.5", "@swc/counter": "0.1.3", "@swc/helpers": "0.5.15", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", "styled-jsx": "5.1.6" }, "optionalDependencies": { "@next/swc-darwin-arm64": "15.3.5", "@next/swc-darwin-x64": "15.3.5", "@next/swc-linux-arm64-gnu": "15.3.5", "@next/swc-linux-arm64-musl": "15.3.5", "@next/swc-linux-x64-gnu": "15.3.5", "@next/swc-linux-x64-musl": "15.3.5", "@next/swc-win32-arm64-msvc": "15.3.5", "@next/swc-win32-x64-msvc": "15.3.5", "sharp": "^0.34.1" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "@playwright/test": "^1.41.2", "babel-plugin-react-compiler": "*", "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "sass": "^1.3.0" }, "optionalPeers": ["@opentelemetry/api", "@playwright/test", "babel-plugin-react-compiler", "sass"], "bin": { "next": "dist/bin/next" } }, "sha512-RkazLBMMDJSJ4XZQ81kolSpwiCt907l0xcgcpF4xC2Vml6QVcPNXW0NQRwQ80FFtSn7UM52XN0anaw8TEJXaiw=="], - "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-domexception": ["node-domexception@1.0.0", "", {}, "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ=="], "node-fetch": ["node-fetch@2.7.0", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A=="], + "node-releases": ["node-releases@2.0.23", "", {}, "sha512-cCmFDMSm26S6tQSDpBCg/NR8NENrVPhAJSf+XbxBG4rPFaaonlEoE9wHQmun+cls499TQGSb7ZyPBRlzgKfpeg=="], + + "normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="], + "number-flow": ["number-flow@0.5.8", "", { "dependencies": { "esm-env": "^1.1.4" } }, "sha512-FPr1DumWyGi5Nucoug14bC6xEz70A1TnhgSHhKyfqjgji2SOTz+iLJxKtv37N5JyJbteGYCm6NQ9p1O4KZ7iiA=="], "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], "object-inspect": ["object-inspect@1.13.4", "", {}, "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew=="], - "object-keys": ["object-keys@1.1.1", "", {}, "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="], - - "object.assign": ["object.assign@4.1.7", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0", "has-symbols": "^1.1.0", "object-keys": "^1.1.1" } }, "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw=="], - - "object.entries": ["object.entries@1.1.9", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-object-atoms": "^1.1.1" } }, "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw=="], - - "object.fromentries": ["object.fromentries@2.0.8", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.2", "es-object-atoms": "^1.0.0" } }, "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ=="], - - "object.groupby": ["object.groupby@1.0.3", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.2" } }, "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ=="], - - "object.values": ["object.values@1.2.1", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA=="], - "onetime": ["onetime@7.0.0", "", { "dependencies": { "mimic-function": "^5.0.0" } }, "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ=="], "optionator": ["optionator@0.9.4", "", { "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", "word-wrap": "^1.2.5" } }, "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g=="], "outdent": ["outdent@0.5.0", "", {}, "sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q=="], - "own-keys": ["own-keys@1.0.1", "", { "dependencies": { "get-intrinsic": "^1.2.6", "object-keys": "^1.1.1", "safe-push-apply": "^1.0.0" } }, "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg=="], - "oxc-resolver": ["oxc-resolver@11.6.2", "", { "dependencies": { "napi-postinstall": "^0.3.0" }, "optionalDependencies": { "@oxc-resolver/binding-android-arm-eabi": "11.6.2", "@oxc-resolver/binding-android-arm64": "11.6.2", "@oxc-resolver/binding-darwin-arm64": "11.6.2", "@oxc-resolver/binding-darwin-x64": "11.6.2", "@oxc-resolver/binding-freebsd-x64": "11.6.2", "@oxc-resolver/binding-linux-arm-gnueabihf": "11.6.2", "@oxc-resolver/binding-linux-arm-musleabihf": "11.6.2", "@oxc-resolver/binding-linux-arm64-gnu": "11.6.2", "@oxc-resolver/binding-linux-arm64-musl": "11.6.2", "@oxc-resolver/binding-linux-ppc64-gnu": "11.6.2", "@oxc-resolver/binding-linux-riscv64-gnu": "11.6.2", "@oxc-resolver/binding-linux-riscv64-musl": "11.6.2", "@oxc-resolver/binding-linux-s390x-gnu": "11.6.2", "@oxc-resolver/binding-linux-x64-gnu": "11.6.2", "@oxc-resolver/binding-linux-x64-musl": "11.6.2", "@oxc-resolver/binding-wasm32-wasi": "11.6.2", "@oxc-resolver/binding-win32-arm64-msvc": "11.6.2", "@oxc-resolver/binding-win32-ia32-msvc": "11.6.2", "@oxc-resolver/binding-win32-x64-msvc": "11.6.2" } }, "sha512-9lXwNQUzgPs5UgjKig5+EINESHYJCFsRQLzPyjWLc7sshl6ZXvXPiQfEGqUIs2fsd9SdV/jYmL7IuaK43cL0SA=="], "oxlint": ["oxlint@1.12.0", "", { "optionalDependencies": { "@oxlint/darwin-arm64": "1.12.0", "@oxlint/darwin-x64": "1.12.0", "@oxlint/linux-arm64-gnu": "1.12.0", "@oxlint/linux-arm64-musl": "1.12.0", "@oxlint/linux-x64-gnu": "1.12.0", "@oxlint/linux-x64-musl": "1.12.0", "@oxlint/win32-arm64": "1.12.0", "@oxlint/win32-x64": "1.12.0", "oxlint-tsgolint": ">=0.0.1" }, "bin": { "oxlint": "bin/oxlint", "oxc_language_server": "bin/oxc_language_server" } }, "sha512-tBQ9aB00aYLlGXE21WJHnKQAI8xoi2V6Eiz/WvGV7FwU9YLYuNOurEEVbfoS5u0ODX8GLvGWj1fdHh5Rb74Kkw=="], @@ -1906,16 +1576,12 @@ "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], - "path-parse": ["path-parse@1.0.7", "", {}, "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="], - "path-scurry": ["path-scurry@2.0.0", "", { "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" } }, "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg=="], "path-type": ["path-type@4.0.0", "", {}, "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="], "pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], - "pathval": ["pathval@2.0.1", "", {}, "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ=="], - "peberminta": ["peberminta@0.9.0", "", {}, "sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ=="], "performance-now": ["performance-now@2.1.0", "", {}, "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow=="], @@ -1944,8 +1610,6 @@ "pify": ["pify@4.0.1", "", {}, "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="], - "possible-typed-array-names": ["possible-typed-array-names@1.1.0", "", {}, "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg=="], - "postcss": ["postcss@8.5.6", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg=="], "postgres": ["postgres@3.4.7", "", {}, "sha512-Jtc2612XINuBjIl/QTWsV5UvE8UHuNblcO3vVADSrKsrc6RqGX6lOW1cEo3CM2v0XG4Nat8nI+YM7/f26VxXLw=="], @@ -1958,10 +1622,6 @@ "postgres-interval": ["postgres-interval@1.2.0", "", { "dependencies": { "xtend": "^4.0.0" } }, "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ=="], - "posthog-js": ["posthog-js@1.260.2", "", { "dependencies": { "core-js": "^3.38.1", "fflate": "^0.4.8", "preact": "^10.19.3", "web-vitals": "^4.2.4" }, "peerDependencies": { "@rrweb/types": "2.0.0-alpha.17", "rrweb-snapshot": "2.0.0-alpha.17" }, "optionalPeers": ["@rrweb/types", "rrweb-snapshot"] }, "sha512-2Q+QUz9j9+uG16wp0WcOEbezVsLZCobZyTX8NvWPMGKyPaf2lOsjbPjznsq5JiIt324B6NAqzpWYZTzvhn9k9Q=="], - - "preact": ["preact@10.27.1", "", {}, "sha512-V79raXEWch/rbqoNc7nT9E4ep7lu+mI3+sBmfRD4i1M73R3WLYcCtdI0ibxGVf4eQL8ZIz2nFacqEC+rmnOORQ=="], - "prelude-ls": ["prelude-ls@1.2.1", "", {}, "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="], "prettier": ["prettier@3.6.2", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ=="], @@ -1970,8 +1630,6 @@ "prettier-plugin-tailwindcss": ["prettier-plugin-tailwindcss@0.6.14", "", { "peerDependencies": { "@ianvs/prettier-plugin-sort-imports": "*", "@prettier/plugin-hermes": "*", "@prettier/plugin-oxc": "*", "@prettier/plugin-pug": "*", "@shopify/prettier-plugin-liquid": "*", "@trivago/prettier-plugin-sort-imports": "*", "@zackad/prettier-plugin-twig": "*", "prettier": "^3.0", "prettier-plugin-astro": "*", "prettier-plugin-css-order": "*", "prettier-plugin-import-sort": "*", "prettier-plugin-jsdoc": "*", "prettier-plugin-marko": "*", "prettier-plugin-multiline-arrays": "*", "prettier-plugin-organize-attributes": "*", "prettier-plugin-organize-imports": "*", "prettier-plugin-sort-imports": "*", "prettier-plugin-style-order": "*", "prettier-plugin-svelte": "*" }, "optionalPeers": ["@ianvs/prettier-plugin-sort-imports", "@prettier/plugin-hermes", "@prettier/plugin-oxc", "@prettier/plugin-pug", "@shopify/prettier-plugin-liquid", "@trivago/prettier-plugin-sort-imports", "@zackad/prettier-plugin-twig", "prettier-plugin-astro", "prettier-plugin-css-order", "prettier-plugin-import-sort", "prettier-plugin-jsdoc", "prettier-plugin-marko", "prettier-plugin-multiline-arrays", "prettier-plugin-organize-attributes", "prettier-plugin-organize-imports", "prettier-plugin-sort-imports", "prettier-plugin-style-order", "prettier-plugin-svelte"] }, "sha512-pi2e/+ZygeIqntN+vC573BcW5Cve8zUB0SSAGxqpB4f96boZF4M3phPVoOFCeypwkpRYdi7+jQ5YJJUwrkGUAg=="], - "prism-react-renderer": ["prism-react-renderer@2.4.1", "", { "dependencies": { "@types/prismjs": "^1.26.0", "clsx": "^2.0.0" }, "peerDependencies": { "react": ">=16.0.0" } }, "sha512-ey8Ls/+Di31eqzUxC46h8MksNuGx/n0AAC8uKpwFau4RPDYLuE3EXTp8N8G2vX2N7UC/+IXeNUnlWBGGcAG+Ig=="], - "promise-queue": ["promise-queue@2.2.5", "", {}, "sha512-p/iXrPSVfnqPft24ZdNNLECw/UrtLTpT3jpAAMzl/o5/rDsGCPo3/CQS2611flL6LkoEJ3oQZw7C8Q80ZISXRQ=="], "prop-types": ["prop-types@15.8.1", "", { "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.13.1" } }, "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg=="], @@ -2008,6 +1666,8 @@ "react-redux": ["react-redux@9.2.0", "", { "dependencies": { "@types/use-sync-external-store": "^0.0.6", "use-sync-external-store": "^1.4.0" }, "peerDependencies": { "@types/react": "^18.2.25 || ^19", "react": "^18.0 || ^19", "redux": "^5.0.0" }, "optionalPeers": ["@types/react", "redux"] }, "sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g=="], + "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=="], @@ -2018,6 +1678,10 @@ "readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], + "readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="], + + "recast": ["recast@0.23.11", "", { "dependencies": { "ast-types": "^0.16.1", "esprima": "~4.0.0", "source-map": "~0.6.1", "tiny-invariant": "^1.3.3", "tslib": "^2.0.1" } }, "sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA=="], + "recharts": ["recharts@3.1.2", "", { "dependencies": { "@reduxjs/toolkit": "1.x.x || 2.x.x", "clsx": "^2.1.1", "decimal.js-light": "^2.5.1", "es-toolkit": "^1.39.3", "eventemitter3": "^5.0.1", "immer": "^10.1.1", "react-redux": "8.x.x || 9.x.x", "reselect": "5.1.1", "tiny-invariant": "^1.3.3", "use-sync-external-store": "^1.2.2", "victory-vendor": "^37.0.2" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-is": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-vhNbYwaxNbk/IATK0Ki29k3qvTkGqwvCgyQAQ9MavvvBwjvKnMTswdbklJpcOAoMPN/qxF3Lyqob0zO+ZXkZ4g=="], "redis-errors": ["redis-errors@1.2.0", "", {}, "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w=="], @@ -2028,16 +1692,10 @@ "redux-thunk": ["redux-thunk@3.1.0", "", { "peerDependencies": { "redux": "^5.0.0" } }, "sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw=="], - "reflect.getprototypeof": ["reflect.getprototypeof@1.0.10", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.9", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.7", "get-proto": "^1.0.1", "which-builtin-type": "^1.2.1" } }, "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw=="], - - "regexp.prototype.flags": ["regexp.prototype.flags@1.5.4", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-errors": "^1.3.0", "get-proto": "^1.0.1", "gopd": "^1.2.0", "set-function-name": "^2.0.2" } }, "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA=="], - "reselect": ["reselect@5.1.1", "", {}, "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w=="], "resend": ["resend@4.8.0", "", { "dependencies": { "@react-email/render": "1.1.2" } }, "sha512-R8eBOFQDO6dzRTDmaMEdpqrkmgSjPpVXt4nGfWsZdYOet0kqra0xgbvTES6HmCriZEXbmGk3e0DiGIaLFTFSHA=="], - "resolve": ["resolve@1.22.10", "", { "dependencies": { "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w=="], - "resolve-from": ["resolve-from@5.0.0", "", {}, "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw=="], "resolve-pkg-maps": ["resolve-pkg-maps@1.0.0", "", {}, "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw=="], @@ -2054,14 +1712,8 @@ "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], - "safe-array-concat": ["safe-array-concat@1.1.3", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", "get-intrinsic": "^1.2.6", "has-symbols": "^1.1.0", "isarray": "^2.0.5" } }, "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q=="], - "safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], - "safe-push-apply": ["safe-push-apply@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0", "isarray": "^2.0.5" } }, "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA=="], - - "safe-regex-test": ["safe-regex-test@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-regex": "^1.2.1" } }, "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw=="], - "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], "scheduler": ["scheduler@0.26.0", "", {}, "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA=="], @@ -2070,16 +1722,12 @@ "semver": ["semver@7.7.2", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="], + "seroval": ["seroval@1.3.2", "", {}, "sha512-RbcPH1n5cfwKrru7v7+zrZvjLurgHhGyso3HTyGtRivGWgYjbOmGuivCQaORNELjNONoK35nj28EoWul9sb1zQ=="], + + "seroval-plugins": ["seroval-plugins@1.3.3", "", { "peerDependencies": { "seroval": "^1.0" } }, "sha512-16OL3NnUBw8JG1jBLUoZJsLnQq0n5Ua6aHalhJK4fMQkz1lqR7Osz1sA30trBtd9VUDc2NgkuRCn8+/pBwqZ+w=="], + "set-cookie-parser": ["set-cookie-parser@2.7.1", "", {}, "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ=="], - "set-function-length": ["set-function-length@1.2.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2" } }, "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg=="], - - "set-function-name": ["set-function-name@2.0.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", "has-property-descriptors": "^1.0.2" } }, "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ=="], - - "set-proto": ["set-proto@1.0.0", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0" } }, "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw=="], - - "sharp": ["sharp@0.34.3", "", { "dependencies": { "color": "^4.2.3", "detect-libc": "^2.0.4", "semver": "^7.7.2" }, "optionalDependencies": { "@img/sharp-darwin-arm64": "0.34.3", "@img/sharp-darwin-x64": "0.34.3", "@img/sharp-libvips-darwin-arm64": "1.2.0", "@img/sharp-libvips-darwin-x64": "1.2.0", "@img/sharp-libvips-linux-arm": "1.2.0", "@img/sharp-libvips-linux-arm64": "1.2.0", "@img/sharp-libvips-linux-ppc64": "1.2.0", "@img/sharp-libvips-linux-s390x": "1.2.0", "@img/sharp-libvips-linux-x64": "1.2.0", "@img/sharp-libvips-linuxmusl-arm64": "1.2.0", "@img/sharp-libvips-linuxmusl-x64": "1.2.0", "@img/sharp-linux-arm": "0.34.3", "@img/sharp-linux-arm64": "0.34.3", "@img/sharp-linux-ppc64": "0.34.3", "@img/sharp-linux-s390x": "0.34.3", "@img/sharp-linux-x64": "0.34.3", "@img/sharp-linuxmusl-arm64": "0.34.3", "@img/sharp-linuxmusl-x64": "0.34.3", "@img/sharp-wasm32": "0.34.3", "@img/sharp-win32-arm64": "0.34.3", "@img/sharp-win32-ia32": "0.34.3", "@img/sharp-win32-x64": "0.34.3" } }, "sha512-eX2IQ6nFohW4DbvHIOLRB3MHFpYqaqvXd3Tp5e/T/dSH83fxaNJQRvDMhASmkNTsNTVF2/OOopzRCt7xokgPfg=="], - "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], @@ -2092,14 +1740,8 @@ "side-channel-weakmap": ["side-channel-weakmap@1.0.2", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3", "side-channel-map": "^1.0.1" } }, "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A=="], - "siginfo": ["siginfo@2.0.0", "", {}, "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g=="], - "signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], - "simple-swizzle": ["simple-swizzle@0.2.2", "", { "dependencies": { "is-arrayish": "^0.3.1" } }, "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg=="], - - "sirv": ["sirv@3.0.1", "", { "dependencies": { "@polka/url": "^1.0.0-next.24", "mrmime": "^2.0.0", "totalist": "^3.0.0" } }, "sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A=="], - "slash": ["slash@3.0.0", "", {}, "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="], "slice-ansi": ["slice-ansi@5.0.0", "", { "dependencies": { "ansi-styles": "^6.0.0", "is-fullwidth-code-point": "^4.0.0" } }, "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ=="], @@ -2112,9 +1754,11 @@ "socks-proxy-agent": ["socks-proxy-agent@8.0.5", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "^4.3.4", "socks": "^2.8.3" } }, "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw=="], + "solid-js": ["solid-js@1.9.9", "", { "dependencies": { "csstype": "^3.1.0", "seroval": "~1.3.0", "seroval-plugins": "~1.3.0" } }, "sha512-A0ZBPJQldAeGCTW0YRYJmt7RCeh5rbFfPZ2aOttgYnctHE7HgKeHCBB/PVc2P7eOfmNXqMFFFoYYdm3S4dcbkA=="], + "sonner": ["sonner@2.0.7", "", { "peerDependencies": { "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc", "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc" } }, "sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w=="], - "source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + "source-map": ["source-map@0.7.6", "", {}, "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ=="], "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], @@ -2128,38 +1772,16 @@ "sshpk": ["sshpk@1.18.0", "", { "dependencies": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", "bcrypt-pbkdf": "^1.0.0", "dashdash": "^1.12.0", "ecc-jsbn": "~0.1.1", "getpass": "^0.1.1", "jsbn": "~0.1.0", "safer-buffer": "^2.0.2", "tweetnacl": "~0.14.0" }, "bin": { "sshpk-conv": "bin/sshpk-conv", "sshpk-sign": "bin/sshpk-sign", "sshpk-verify": "bin/sshpk-verify" } }, "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ=="], - "stable-hash": ["stable-hash@0.0.5", "", {}, "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA=="], - - "stackback": ["stackback@0.0.2", "", {}, "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw=="], - "standard-as-callback": ["standard-as-callback@2.1.0", "", {}, "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A=="], - "std-env": ["std-env@3.9.0", "", {}, "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw=="], - - "stop-iteration-iterator": ["stop-iteration-iterator@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "internal-slot": "^1.1.0" } }, "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ=="], - "stream-browserify": ["stream-browserify@3.0.0", "", { "dependencies": { "inherits": "~2.0.4", "readable-stream": "^3.5.0" } }, "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA=="], - "streamsearch": ["streamsearch@1.1.0", "", {}, "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg=="], - "string-argv": ["string-argv@0.3.2", "", {}, "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q=="], "string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], "string-width-cjs": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], - "string.prototype.includes": ["string.prototype.includes@2.0.1", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.3" } }, "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg=="], - - "string.prototype.matchall": ["string.prototype.matchall@4.0.12", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-abstract": "^1.23.6", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.6", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", "regexp.prototype.flags": "^1.5.3", "set-function-name": "^2.0.2", "side-channel": "^1.1.0" } }, "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA=="], - - "string.prototype.repeat": ["string.prototype.repeat@1.0.0", "", { "dependencies": { "define-properties": "^1.1.3", "es-abstract": "^1.17.5" } }, "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w=="], - - "string.prototype.trim": ["string.prototype.trim@1.2.10", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", "define-data-property": "^1.1.4", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-object-atoms": "^1.0.0", "has-property-descriptors": "^1.0.2" } }, "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA=="], - - "string.prototype.trimend": ["string.prototype.trimend@1.0.9", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ=="], - - "string.prototype.trimstart": ["string.prototype.trimstart@1.0.8", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg=="], - "string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], "strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], @@ -2170,68 +1792,40 @@ "strip-json-comments": ["strip-json-comments@5.0.2", "", {}, "sha512-4X2FR3UwhNUE9G49aIsJW5hRRR3GXGTBTZRMfv568O60ojM8HcWjV/VxAxCDW3SUND33O6ZY66ZuRcdkj73q2g=="], - "strip-literal": ["strip-literal@3.0.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA=="], - "stripe": ["stripe@19.0.0", "", { "dependencies": { "qs": "^6.11.0" }, "peerDependencies": { "@types/node": ">=16" }, "optionalPeers": ["@types/node"] }, "sha512-4HG17r7mui4Awic75DVSFVmH4EIXqNvoo3T2cYrVhcwovQz3gzQIPUiqzLzGcgxdUd9CB8zCntKzm0o63tUBgw=="], "strnum": ["strnum@2.1.1", "", {}, "sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw=="], - "styled-jsx": ["styled-jsx@5.1.6", "", { "dependencies": { "client-only": "0.0.1" }, "peerDependencies": { "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" } }, "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA=="], - "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], - "supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="], - "tailwind-merge": ["tailwind-merge@3.3.1", "", {}, "sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g=="], - "tailwind-scrollbar": ["tailwind-scrollbar@4.0.2", "", { "dependencies": { "prism-react-renderer": "^2.4.1" }, "peerDependencies": { "tailwindcss": "4.x" } }, "sha512-wAQiIxAPqk0MNTPptVe/xoyWi27y+NRGnTwvn4PQnbvB9kp8QUBiGl/wsfoVBHnQxTmhXJSNt9NHTmcz9EivFA=="], - "tailwindcss": ["tailwindcss@4.1.12", "", {}, "sha512-DzFtxOi+7NsFf7DBtI3BJsynR+0Yp6etH+nRPTbpWnS2pZBaSksv/JGctNwSWzbFjp0vxSqknaUylseZqMDGrA=="], - "tapable": ["tapable@2.2.3", "", {}, "sha512-ZL6DDuAlRlLGghwcfmSn9sK3Hr6ArtyudlSAiCqQ6IfE+b+HHbydbYDIG15IfS5do+7XQQBdBiubF/cV2dnDzg=="], - - "tar": ["tar@7.4.3", "", { "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", "minipass": "^7.1.2", "minizlib": "^3.0.1", "mkdirp": "^3.0.1", "yallist": "^5.0.0" } }, "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw=="], - "term-size": ["term-size@2.2.1", "", {}, "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg=="], - "test-exclude": ["test-exclude@7.0.1", "", { "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^10.4.1", "minimatch": "^9.0.4" } }, "sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg=="], - "tiny-invariant": ["tiny-invariant@1.3.3", "", {}, "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg=="], - "tinybench": ["tinybench@2.9.0", "", {}, "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg=="], - - "tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "tiny-warning": ["tiny-warning@1.0.3", "", {}, "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="], "tinyglobby": ["tinyglobby@0.2.14", "", { "dependencies": { "fdir": "^6.4.4", "picomatch": "^4.0.2" } }, "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ=="], - "tinypool": ["tinypool@1.1.1", "", {}, "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg=="], - - "tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - - "tinyspy": ["tinyspy@4.0.3", "", {}, "sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A=="], - "tldts": ["tldts@6.1.86", "", { "dependencies": { "tldts-core": "^6.1.86" }, "bin": { "tldts": "bin/cli.js" } }, "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ=="], "tldts-core": ["tldts-core@6.1.86", "", {}, "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA=="], "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], - "totalist": ["totalist@3.0.1", "", {}, "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ=="], - "tough-cookie": ["tough-cookie@5.1.2", "", { "dependencies": { "tldts": "^6.1.32" } }, "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A=="], "tr46": ["tr46@0.0.3", "", {}, "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="], - "ts-api-utils": ["ts-api-utils@2.1.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ=="], - - "ts-essentials": ["ts-essentials@10.1.1", "", { "peerDependencies": { "typescript": ">=4.5.0" }, "optionalPeers": ["typescript"] }, "sha512-4aTB7KLHKmUvkjNj8V+EdnmuVTiECzn3K+zIbRthumvHu+j44x3w63xpfs0JL3NGIzGXqoQ7AV591xHO+XrOTw=="], - "tsconfck": ["tsconfck@3.1.6", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "tsconfck": "bin/tsconfck.js" } }, "sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w=="], - "tsconfig-paths": ["tsconfig-paths@3.15.0", "", { "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg=="], - "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + "tsx": ["tsx@4.20.6", "", { "dependencies": { "esbuild": "~0.25.0", "get-tsconfig": "^4.7.5" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "bin": { "tsx": "dist/cli.mjs" } }, "sha512-ytQKuwgmrrkDTFP4LjR0ToE2nqgy886GpvRSpU0JAnrdBYppuY5rLkRUYPU1yCryb24SsKBTL/hlDQAEFVwtZg=="], + "tunnel-agent": ["tunnel-agent@0.6.0", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w=="], "turbo": ["turbo@2.5.6", "", { "optionalDependencies": { "turbo-darwin-64": "2.5.6", "turbo-darwin-arm64": "2.5.6", "turbo-linux-64": "2.5.6", "turbo-linux-arm64": "2.5.6", "turbo-windows-64": "2.5.6", "turbo-windows-arm64": "2.5.6" }, "bin": { "turbo": "bin/turbo" } }, "sha512-gxToHmi9oTBNB05UjUsrWf0OyN5ZXtD0apOarC1KIx232Vp3WimRNy3810QzeNSgyD5rsaIDXlxlbnOzlouo+w=="], @@ -2254,25 +1848,17 @@ "type-check": ["type-check@0.4.0", "", { "dependencies": { "prelude-ls": "^1.2.1" } }, "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew=="], - "typed-array-buffer": ["typed-array-buffer@1.0.3", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-typed-array": "^1.1.14" } }, "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw=="], - - "typed-array-byte-length": ["typed-array-byte-length@1.0.3", "", { "dependencies": { "call-bind": "^1.0.8", "for-each": "^0.3.3", "gopd": "^1.2.0", "has-proto": "^1.2.0", "is-typed-array": "^1.1.14" } }, "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg=="], - - "typed-array-byte-offset": ["typed-array-byte-offset@1.0.4", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "for-each": "^0.3.3", "gopd": "^1.2.0", "has-proto": "^1.2.0", "is-typed-array": "^1.1.15", "reflect.getprototypeof": "^1.0.9" } }, "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ=="], - - "typed-array-length": ["typed-array-length@1.0.7", "", { "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "is-typed-array": "^1.1.13", "possible-typed-array-names": "^1.0.0", "reflect.getprototypeof": "^1.0.6" } }, "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg=="], - "typescript": ["typescript@5.9.2", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A=="], - "unbox-primitive": ["unbox-primitive@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "has-bigints": "^1.0.2", "has-symbols": "^1.1.0", "which-boxed-primitive": "^1.1.1" } }, "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw=="], - "uncrypto": ["uncrypto@0.1.3", "", {}, "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q=="], - "undici-types": ["undici-types@7.10.0", "", {}, "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag=="], + "undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="], "universalify": ["universalify@0.1.2", "", {}, "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="], - "unrs-resolver": ["unrs-resolver@1.11.1", "", { "dependencies": { "napi-postinstall": "^0.3.0" }, "optionalDependencies": { "@unrs/resolver-binding-android-arm-eabi": "1.11.1", "@unrs/resolver-binding-android-arm64": "1.11.1", "@unrs/resolver-binding-darwin-arm64": "1.11.1", "@unrs/resolver-binding-darwin-x64": "1.11.1", "@unrs/resolver-binding-freebsd-x64": "1.11.1", "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1", "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1", "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1", "@unrs/resolver-binding-linux-arm64-musl": "1.11.1", "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1", "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1", "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1", "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1", "@unrs/resolver-binding-linux-x64-gnu": "1.11.1", "@unrs/resolver-binding-linux-x64-musl": "1.11.1", "@unrs/resolver-binding-wasm32-wasi": "1.11.1", "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1", "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1", "@unrs/resolver-binding-win32-x64-msvc": "1.11.1" } }, "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg=="], + "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=="], "uri-js": ["uri-js@4.4.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="], @@ -2294,38 +1880,22 @@ "victory-vendor": ["victory-vendor@37.3.6", "", { "dependencies": { "@types/d3-array": "^3.0.3", "@types/d3-ease": "^3.0.0", "@types/d3-interpolate": "^3.0.1", "@types/d3-scale": "^4.0.2", "@types/d3-shape": "^3.1.0", "@types/d3-time": "^3.0.0", "@types/d3-timer": "^3.0.0", "d3-array": "^3.1.6", "d3-ease": "^3.0.1", "d3-interpolate": "^3.0.1", "d3-scale": "^4.0.2", "d3-shape": "^3.1.0", "d3-time": "^3.0.0", "d3-timer": "^3.0.1" } }, "sha512-SbPDPdDBYp+5MJHhBCAyI7wKM3d5ivekigc2Dk2s7pgbZ9wIgIBYGVw4zGHBml/qTFbexrofXW6Gu4noGxrOwQ=="], - "vite": ["vite@7.1.3", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.14" }, "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-OOUi5zjkDxYrKhTV3V7iKsoS37VUM7v40+HuwEmcrsf11Cdx9y3DIr2Px6liIcZFwt3XSRpQvFpL3WVy7ApkGw=="], - - "vite-node": ["vite-node@3.2.4", "", { "dependencies": { "cac": "^6.7.14", "debug": "^4.4.1", "es-module-lexer": "^1.7.0", "pathe": "^2.0.3", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "bin": { "vite-node": "vite-node.mjs" } }, "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg=="], + "vite": ["vite@6.3.6", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.4", "picomatch": "^4.0.2", "postcss": "^8.5.3", "rollup": "^4.34.9", "tinyglobby": "^0.2.13" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "jiti": ">=1.21.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "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-0msEVHJEScQbhkbVTb/4iHZdJ6SXp/AvxL2sjwYQFfBqleHtnCqv1J3sa9zbWz/6kW1m9Tfzn92vW+kZ1WV6QA=="], "vite-tsconfig-paths": ["vite-tsconfig-paths@5.1.4", "", { "dependencies": { "debug": "^4.1.1", "globrex": "^0.1.2", "tsconfck": "^3.0.3" }, "peerDependencies": { "vite": "*" }, "optionalPeers": ["vite"] }, "sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w=="], - "vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - - "vitest-mock-extended": ["vitest-mock-extended@3.1.0", "", { "dependencies": { "ts-essentials": ">=10.0.0" }, "peerDependencies": { "typescript": "3.x || 4.x || 5.x", "vitest": ">=3.0.0" } }, "sha512-vCM0VkuocOUBwwqwV7JB7YStw07pqeKvEIrZnR8l3PtwYi6rAAJAyJACeC1UYNfbQWi85nz7EdiXWBFI5hll2g=="], - "walk-up-path": ["walk-up-path@4.0.0", "", {}, "sha512-3hu+tD8YzSLGuFYtPRb48vdhKMi0KQV5sn+uWr8+7dMEq/2G/dtLrdDinkLjqq5TIbIBjYJ4Ax/n3YiaW7QM8A=="], "web-streams-polyfill": ["web-streams-polyfill@3.3.3", "", {}, "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw=="], - "web-vitals": ["web-vitals@4.2.4", "", {}, "sha512-r4DIlprAGwJ7YM11VZp4R884m0Vmgr6EAKe3P+kO0PPj3Unqyvv59rczf6UiGcb9Z8QxZVcqKNwv/g0WNdWwsw=="], - "webidl-conversions": ["webidl-conversions@3.0.1", "", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="], + "webpack-virtual-modules": ["webpack-virtual-modules@0.6.2", "", {}, "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ=="], + "whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="], "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], - "which-boxed-primitive": ["which-boxed-primitive@1.1.1", "", { "dependencies": { "is-bigint": "^1.1.0", "is-boolean-object": "^1.2.1", "is-number-object": "^1.1.1", "is-string": "^1.1.1", "is-symbol": "^1.1.1" } }, "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA=="], - - "which-builtin-type": ["which-builtin-type@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "function.prototype.name": "^1.1.6", "has-tostringtag": "^1.0.2", "is-async-function": "^2.0.0", "is-date-object": "^1.1.0", "is-finalizationregistry": "^1.1.0", "is-generator-function": "^1.0.10", "is-regex": "^1.2.1", "is-weakref": "^1.0.2", "isarray": "^2.0.5", "which-boxed-primitive": "^1.1.0", "which-collection": "^1.0.2", "which-typed-array": "^1.1.16" } }, "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q=="], - - "which-collection": ["which-collection@1.0.2", "", { "dependencies": { "is-map": "^2.0.3", "is-set": "^2.0.3", "is-weakmap": "^2.0.2", "is-weakset": "^2.0.3" } }, "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw=="], - - "which-typed-array": ["which-typed-array@1.1.19", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.4", "for-each": "^0.3.5", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" } }, "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw=="], - - "why-is-node-running": ["why-is-node-running@2.3.0", "", { "dependencies": { "siginfo": "^2.0.0", "stackback": "0.0.2" }, "bin": { "why-is-node-running": "cli.js" } }, "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w=="], - "word-wrap": ["word-wrap@1.2.5", "", {}, "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA=="], "wrap-ansi": ["wrap-ansi@9.0.0", "", { "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", "strip-ansi": "^7.1.0" } }, "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q=="], @@ -2334,7 +1904,7 @@ "xtend": ["xtend@4.0.2", "", {}, "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="], - "yallist": ["yallist@5.0.0", "", {}, "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw=="], + "yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], "yaml": ["yaml@2.8.1", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw=="], @@ -2350,6 +1920,36 @@ "@aws-crypto/util/@smithy/util-utf8": ["@smithy/util-utf8@2.3.0", "", { "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A=="], + "@babel/core/@babel/types": ["@babel/types@7.28.4", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q=="], + + "@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + + "@babel/generator/@babel/types": ["@babel/types@7.28.4", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q=="], + + "@babel/helper-annotate-as-pure/@babel/types": ["@babel/types@7.28.4", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q=="], + + "@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], + + "@babel/helper-compilation-targets/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + + "@babel/helper-create-class-features-plugin/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + + "@babel/helper-member-expression-to-functions/@babel/types": ["@babel/types@7.28.4", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q=="], + + "@babel/helper-module-imports/@babel/types": ["@babel/types@7.28.4", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q=="], + + "@babel/helper-optimise-call-expression/@babel/types": ["@babel/types@7.28.4", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q=="], + + "@babel/helper-skip-transparent-expression-wrappers/@babel/types": ["@babel/types@7.28.4", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q=="], + + "@babel/helpers/@babel/types": ["@babel/types@7.28.4", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q=="], + + "@babel/parser/@babel/types": ["@babel/types@7.28.4", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q=="], + + "@babel/template/@babel/types": ["@babel/types@7.28.4", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q=="], + + "@babel/traverse/@babel/types": ["@babel/types@7.28.4", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q=="], + "@changesets/apply-release-plan/prettier": ["prettier@2.8.8", "", { "bin": { "prettier": "bin-prettier.js" } }, "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q=="], "@changesets/parse/js-yaml": ["js-yaml@3.14.1", "", { "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g=="], @@ -2384,56 +1984,54 @@ "@manypkg/get-packages/fs-extra": ["fs-extra@8.1.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", "universalify": "^0.1.0" } }, "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g=="], - "@next/eslint-plugin-next/fast-glob": ["fast-glob@3.3.1", "", { "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.4" } }, "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg=="], + "@tanstack/react-router-devtools/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=="], - "@nimbus/web/stripe": ["stripe@17.7.0", "", { "dependencies": { "@types/node": ">=8.1.0", "qs": "^6.11.0" } }, "sha512-aT2BU9KkizY9SATf14WhhYVv2uOapBWX0OFWF4xvcj1mPaNotlSc2CsxpS4DS46ZueSppmCF5BX1sNYBtwBvfw=="], + "@tanstack/react-store/@tanstack/store": ["@tanstack/store@0.7.7", "", {}, "sha512-xa6pTan1bcaqYDS9BDpSiS63qa6EoDkPN9RsRaxHuDdVDNntzq3xNwR5YKTU/V3SkSyC9T4YVOPh2zRQN0nhIQ=="], - "@nimbus/web/zod": ["zod@4.1.3", "", {}, "sha512-1neef4bMce1hNTrxvHVKxWjKfGDn0oAli3Wy1Uwb7TRO1+wEwoZUZNP1NXIEESybOBiFnBOhI6a4m6tCLE8dog=="], + "@tanstack/router-core/@tanstack/store": ["@tanstack/store@0.7.7", "", {}, "sha512-xa6pTan1bcaqYDS9BDpSiS63qa6EoDkPN9RsRaxHuDdVDNntzq3xNwR5YKTU/V3SkSyC9T4YVOPh2zRQN0nhIQ=="], - "@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.4.5", "", { "dependencies": { "@emnapi/wasi-threads": "1.0.4", "tslib": "^2.4.0" }, "bundled": true }, "sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q=="], + "@tanstack/router-devtools/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=="], - "@tailwindcss/oxide-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.4.5", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg=="], + "@tanstack/router-devtools-core/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=="], - "@tailwindcss/oxide-wasm32-wasi/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.0.4", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g=="], + "@tanstack/router-generator/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], - "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@0.2.12", "", { "dependencies": { "@emnapi/core": "^1.4.3", "@emnapi/runtime": "^1.4.3", "@tybys/wasm-util": "^0.10.0" }, "bundled": true }, "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ=="], + "@tanstack/router-plugin/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], - "@tailwindcss/oxide-wasm32-wasi/@tybys/wasm-util": ["@tybys/wasm-util@0.10.0", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ=="], + "@tanstack/router-utils/tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], - "@tailwindcss/oxide-wasm32-wasi/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + "@tanstack/store/immer": ["immer@9.0.21", "", {}, "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA=="], - "@typescript-eslint/eslint-plugin/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], + "@types/babel__core/@babel/parser": ["@babel/parser@7.28.3", "", { "dependencies": { "@babel/types": "^7.28.2" }, "bin": "./bin/babel-parser.js" }, "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA=="], - "@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + "@types/babel__generator/@babel/types": ["@babel/types@7.28.4", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q=="], - "@unrs/resolver-binding-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@0.2.12", "", { "dependencies": { "@emnapi/core": "^1.4.3", "@emnapi/runtime": "^1.4.3", "@tybys/wasm-util": "^0.10.0" } }, "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ=="], + "@types/babel__template/@babel/types": ["@babel/types@7.28.4", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q=="], + + "@types/babel__traverse/@babel/types": ["@babel/types@7.28.4", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q=="], + + "@types/node-fetch/@types/node": ["@types/node@24.3.0", "", { "dependencies": { "undici-types": "~7.10.0" } }, "sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow=="], + + "@types/pg/@types/node": ["@types/node@24.3.0", "", { "dependencies": { "undici-types": "~7.10.0" } }, "sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow=="], + + "anymatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + + "babel-dead-code-elimination/@babel/types": ["@babel/types@7.28.4", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q=="], "box-node-sdk/@types/node": ["@types/node@18.19.123", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-K7DIaHnh0mzVxreCR9qwgNxp3MH9dltPNIEddW9MYUlcKAzm+3grKNSTe2vCJHI1FaLpvpL5JGJrz1UZDKYvDg=="], + "chokidar/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + "cli-truncate/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], + "degenerator/ast-types": ["ast-types@0.13.4", "", { "dependencies": { "tslib": "^2.0.1" } }, "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w=="], + + "escodegen/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + "eslint/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], "eslint/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], - "eslint-import-resolver-node/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], - - "eslint-module-utils/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], - - "eslint-plugin-import/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], - - "eslint-plugin-import/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], - - "eslint-plugin-import/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - - "eslint-plugin-jsx-a11y/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], - - "eslint-plugin-react/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], - - "eslint-plugin-react/resolve": ["resolve@2.0.0-next.5", "", { "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA=="], - - "eslint-plugin-react/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], "gaxios/node-fetch": ["node-fetch@3.3.2", "", { "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", "formdata-polyfill": "^4.0.10" } }, "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA=="], @@ -2450,36 +2048,32 @@ "log-update/strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], - "loose-envify/js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], - "micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], - "next/postcss": ["postcss@8.4.31", "", { "dependencies": { "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" } }, "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ=="], - "p-locate/p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], "postcss/nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], - "posthog-js/fflate": ["fflate@0.4.8", "", {}, "sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA=="], - "proxy-agent/lru-cache": ["lru-cache@7.18.3", "", {}, "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA=="], "react-promise-suspense/fast-deep-equal": ["fast-deep-equal@2.0.1", "", {}, "sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w=="], "read-yaml-file/js-yaml": ["js-yaml@3.14.1", "", { "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g=="], + "readdirp/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + + "recast/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + "slice-ansi/ansi-styles": ["ansi-styles@6.2.1", "", {}, "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug=="], "slice-ansi/is-fullwidth-code-point": ["is-fullwidth-code-point@4.0.0", "", {}, "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ=="], + "source-map-support/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + "string-width/strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], "string-width-cjs/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], - "test-exclude/glob": ["glob@10.4.5", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg=="], - - "test-exclude/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], - "wrap-ansi/ansi-styles": ["ansi-styles@6.2.1", "", {}, "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug=="], "wrap-ansi/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], @@ -2546,9 +2140,15 @@ "@manypkg/find-root/find-up/locate-path": ["locate-path@5.0.0", "", { "dependencies": { "p-locate": "^4.1.0" } }, "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="], - "@next/eslint-plugin-next/fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + "@tanstack/react-router-devtools/vite/tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], - "@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + "@tanstack/router-devtools-core/vite/tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], + + "@tanstack/router-devtools/vite/tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], + + "@types/node-fetch/@types/node/undici-types": ["undici-types@7.10.0", "", {}, "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag=="], + + "@types/pg/@types/node/undici-types": ["undici-types@7.10.0", "", {}, "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag=="], "box-node-sdk/@types/node/undici-types": ["undici-types@5.26.5", "", {}, "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="], @@ -2564,18 +2164,10 @@ "log-update/strip-ansi/ansi-regex": ["ansi-regex@6.2.0", "", {}, "sha512-TKY5pyBkHyADOPYlRT9Lx6F544mPl0vS5Ew7BJ45hA08Q+t3GjbueLliBWN3sMICk6+y7HdyxSzC4bWS8baBdg=="], - "next/postcss/nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], - "read-yaml-file/js-yaml/argparse": ["argparse@1.0.10", "", { "dependencies": { "sprintf-js": "~1.0.2" } }, "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="], "string-width/strip-ansi/ansi-regex": ["ansi-regex@6.2.0", "", {}, "sha512-TKY5pyBkHyADOPYlRT9Lx6F544mPl0vS5Ew7BJ45hA08Q+t3GjbueLliBWN3sMICk6+y7HdyxSzC4bWS8baBdg=="], - "test-exclude/glob/jackspeak": ["jackspeak@3.4.3", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" }, "optionalDependencies": { "@pkgjs/parseargs": "^0.11.0" } }, "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw=="], - - "test-exclude/glob/path-scurry": ["path-scurry@1.11.1", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="], - - "test-exclude/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], - "wrap-ansi-cjs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], "wrap-ansi/string-width/emoji-regex": ["emoji-regex@10.4.0", "", {}, "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw=="], @@ -2591,7 +2183,5 @@ "@manypkg/find-root/find-up/locate-path/p-locate": ["p-locate@4.1.0", "", { "dependencies": { "p-limit": "^2.2.0" } }, "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A=="], "cli-truncate/string-width/strip-ansi/ansi-regex": ["ansi-regex@6.2.0", "", {}, "sha512-TKY5pyBkHyADOPYlRT9Lx6F544mPl0vS5Ew7BJ45hA08Q+t3GjbueLliBWN3sMICk6+y7HdyxSzC4bWS8baBdg=="], - - "test-exclude/glob/path-scurry/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], } } diff --git a/docker-compose.test.yml b/docker-compose.test.yml deleted file mode 100644 index c3cc882..0000000 --- a/docker-compose.test.yml +++ /dev/null @@ -1,48 +0,0 @@ -services: - # Database Service - db: - image: postgres:16 - container_name: nimbus-test-db - restart: unless-stopped - environment: - POSTGRES_USER: postgres - POSTGRES_PASSWORD: postgres - POSTGRES_DB: nimbus-test - ports: - - "5432:5432" - volumes: - - postgres-data:/var/lib/postgresql/data - healthcheck: - test: ["CMD-SHELL", "pg_isready -U postgres"] - interval: 10s - timeout: 5s - retries: 5 - networks: - - nimbus-test-network - - # S3 Service - minio: - image: minio/minio:latest - container_name: nimbus-test-minio - ports: - - "127.0.0.1:9000:9000" # MinIO API - - "127.0.0.1:9001:9001" # MinIO Console - environment: - - MINIO_ROOT_USER=minioadmin - - MINIO_ROOT_PASSWORD=minioadmin - - MINIO_REGION=us-east-1 - command: server /data --console-address :9001 - healthcheck: - test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/ready"] - interval: 30s - timeout: 10s - retries: 3 - start_period: 10s - -volumes: - postgres-data: - name: nimbus-test-db-data - -networks: - nimbus-test-network: - driver: bridge diff --git a/docker-compose.yml b/docker-compose.yml index 82a0bee..ac8a563 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -56,59 +56,59 @@ services: networks: - nimbus-network - # Server Service - server: - build: - context: . - dockerfile: apps/server/Dockerfile - target: runner - container_name: nimbus-server - restart: unless-stopped - env_file: .env - environment: - NODE_ENV: production - PORT: ${SERVER_PORT:-1284} - DATABASE_URL: postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB} - # Valkey connection settings with username/password - VALKEY_HOST: ${VALKEY_HOST} - VALKEY_PORT: ${VALKEY_PORT} - VALKEY_USERNAME: ${VALKEY_USERNAME} - VALKEY_PASSWORD: ${VALKEY_PASSWORD} - # Connection URL format with username and password - VALKEY_URL: valkey://${VALKEY_USERNAME}:${VALKEY_PASSWORD}@${VALKEY_HOST}:${VALKEY_PORT}/0 - ports: - - "1284:1284" - depends_on: - db: - condition: service_healthy - cache: - condition: service_healthy - networks: - - nimbus-network + # # Server Service + # server: + # build: + # context: . + # dockerfile: apps/server/Dockerfile + # target: runner + # container_name: nimbus-server + # restart: unless-stopped + # env_file: .env + # environment: + # NODE_ENV: production + # PORT: ${SERVER_PORT:-1284} + # DATABASE_URL: postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB} + # # Valkey connection settings with username/password + # VALKEY_HOST: ${VALKEY_HOST} + # VALKEY_PORT: ${VALKEY_PORT} + # VALKEY_USERNAME: ${VALKEY_USERNAME} + # VALKEY_PASSWORD: ${VALKEY_PASSWORD} + # # Connection URL format with username and password + # VALKEY_URL: valkey://${VALKEY_USERNAME}:${VALKEY_PASSWORD}@${VALKEY_HOST}:${VALKEY_PORT}/0 + # ports: + # - "1284:1284" + # depends_on: + # db: + # condition: service_healthy + # cache: + # condition: service_healthy + # networks: + # - nimbus-network - # Web Service - web: - build: - context: . - dockerfile: apps/web/Dockerfile - target: runner - args: - NEXT_PUBLIC_BACKEND_URL: ${NEXT_PUBLIC_BACKEND_URL} - NEXT_PUBLIC_FRONTEND_URL: ${NEXT_PUBLIC_FRONTEND_URL} - container_name: nimbus-web - restart: unless-stopped - env_file: .env - environment: - NODE_ENV: production - NEXT_PUBLIC_BACKEND_URL: ${NEXT_PUBLIC_BACKEND_URL} - NEXT_PUBLIC_FRONTEND_URL: ${NEXT_PUBLIC_FRONTEND_URL} - ports: - - "3000:3000" - depends_on: - server: - condition: service_started - networks: - - nimbus-network + # # Web Service + # web: + # build: + # context: . + # dockerfile: apps/web/Dockerfile + # target: runner + # args: + # NEXT_PUBLIC_BACKEND_URL: ${NEXT_PUBLIC_BACKEND_URL} + # NEXT_PUBLIC_FRONTEND_URL: ${NEXT_PUBLIC_FRONTEND_URL} + # container_name: nimbus-web + # restart: unless-stopped + # env_file: .env + # environment: + # NODE_ENV: production + # NEXT_PUBLIC_BACKEND_URL: ${NEXT_PUBLIC_BACKEND_URL} + # NEXT_PUBLIC_FRONTEND_URL: ${NEXT_PUBLIC_FRONTEND_URL} + # ports: + # - "3000:3000" + # depends_on: + # server: + # condition: service_started + # networks: + # - nimbus-network volumes: postgres-data: diff --git a/knip.config.ts b/knip.config.ts index 30d66c1..da1ae34 100644 --- a/knip.config.ts +++ b/knip.config.ts @@ -5,7 +5,6 @@ const indexEntry = "src/index.{ts,js}"; const project = "**/*.{ts,js}"; const ignoreUtils = ["src/utils/*"]; -const ignoreViteV8 = ["@vitest/coverage-v8"]; const ignoreComponents = ["**/components/**"]; const config: KnipConfig = { @@ -45,11 +44,6 @@ const config: KnipConfig = { "packages/tsconfig": { entry: "base.json", }, - - "packages/vitest": { - entry: "src/index.ts", - ignoreDependencies: ignoreViteV8, - }, }, }; diff --git a/package.json b/package.json index ed0813d..6642d02 100644 --- a/package.json +++ b/package.json @@ -3,10 +3,6 @@ "version": "0.0.0", "devDependencies": { "@changesets/cli": "^2.29.5", - "@nimbus/vitest": "workspace:*", - "@vitest/coverage-v8": "^3.2.4", - "@vitest/ui": "^3.2.4", - "dotenv": "^17.2.1", "glob": "^11.0.3", "husky": "^9.1.7", "knip": "^5.62.0", @@ -16,42 +12,26 @@ "prettier-plugin-sort-imports": "^1.8.8", "prettier-plugin-tailwindcss": "^0.6.14", "turbo": "^2.5.6", - "typescript": "^5.9.2", - "vite-tsconfig-paths": "^5.1.4", - "vitest": "^3.2.4", - "vitest-mock-extended": "^3.1.0" + "typescript": "^5.9.2" }, "packageManager": "bun@1.2.17", "private": true, "scripts": { - "clean-install": "bun install --force", - "check-types": "tsc --noEmit", "knip": "knip-bun --config knip.config.ts", - "ch": "changeset", "dev:web": "bun --elide-lines 0 --filter @nimbus/web --env-file .env dev", "dev:server": "bun --elide-lines 0 --filter @nimbus/server --env-file .env dev", "dev": "turbo dev", - "dev:verbose": "bun --elide-lines 0 --filter \"*\" --env-file .env dev", - "gh:env:sync:preview": "./scripts/gh-env-sync.sh --env preview", - "gh:env:sync:staging": "./scripts/gh-env-sync.sh --env staging", - "gh:env:sync:production": "./scripts/gh-env-sync.sh --env production", "db:up": "bun run --cwd=packages/db docker:up", "db:down": "bun run --cwd=packages/db docker:down", "db:reset": "bun run --cwd=packages/db docker:reset", "db:push": "bun --elide-lines 0 --filter @nimbus/db --env-file .env push", - "db:studio": "bun --elide-lines 0 --filter @nimbus/db --env-file .env studio", "cache:up": "bun run --cwd=packages/cache docker:up", "cache:down": "bun run --cwd=packages/cache docker:down", "cache:reset": "bun run --cwd=packages/cache docker:reset", - "build:web": "bun run --cwd=apps/web build", - "build:server": "bun run --cwd=apps/server build", "build": "turbo build", "start": "turbo start", "env:sync": "bun run scripts/copy-env-files.ts", - "env:sync:dry-run": "bun run scripts/copy-env-files.ts --dry-run", "env:clean": "bun run scripts/delete-child-env-files.ts", - "env:clean:dry-run": "bun run scripts/delete-child-env-files.ts --dry-run", - "env:clean-sync": "bun run env:clean && bun run env:sync", "docker:build": "docker compose build", "docker:up": "docker compose up", "docker:down": "docker compose down", @@ -59,15 +39,6 @@ "docker:reset": "bun run docker:remove && bun run docker:up", "format": "bun prettier . --write --list-different", "lint": "bun run oxlint --fix && cd apps/web && bun run lint --fix", - "test": "vitest run", - "test:watch": "vitest", - "test:ui": "vitest --ui", - "test:coverage": "vitest run --coverage", - "test:coverage:ui": "vitest --coverage --ui", - "test:coverage:dev": "vitest run --coverage --coverage.thresholds.statements=0 --coverage.thresholds.branches=0 --coverage.thresholds.functions=0 --coverage.thresholds.lines=0", - "test:docker:up": "docker compose -f docker-compose.test.yml up -d", - "test:docker:down": "docker compose -f docker-compose.test.yml down", - "test:docker:remove": "docker compose -f docker-compose.test.yml down --rmi local -v", "prepare": "husky" }, "type": "module", @@ -76,7 +47,6 @@ "packages/*" ], "dependencies": { - "@better-auth/stripe": "^1.3.24", "stripe": "^19.0.0" } } diff --git a/packages/auth/package.json b/packages/auth/package.json index 7af2668..1f59be2 100644 --- a/packages/auth/package.json +++ b/packages/auth/package.json @@ -8,9 +8,6 @@ "./auth-client": "./src/auth-client.ts", "./auth": "./src/auth.ts" }, - "devDependencies": { - "@nimbus/vitest": "workspace:*" - }, "dependencies": { "@better-auth/stripe": "^1.3.24", "@nimbus/cache": "workspace:*", diff --git a/packages/auth/tests/auth.test.ts b/packages/auth/tests/auth.test.ts deleted file mode 100644 index 2c8cd6b..0000000 --- a/packages/auth/tests/auth.test.ts +++ /dev/null @@ -1,103 +0,0 @@ -import { dbMock, mockFindFirst, mockSet, mockUpdate, mockWhere } from "@nimbus/db/mock"; -import { beforeEach, describe, expect, it, vi } from "vitest"; -import { afterAccountCreation, auth } from "../src/auth"; -import { betterAuth } from "better-auth"; - -// Mock better-auth -vi.mock("better-auth", () => ({ - betterAuth: vi.fn(() => ({ - api: { - getSession: vi.fn(() => - Promise.resolve({ - user: { id: "user123", email: "test@example.com" }, - }) - ), - }, - })), -})); - -// Mock @nimbus/env/server -vi.mock("@nimbus/env/server", () => ({ - __esModule: true, - default: { - DATABASE_URL: "mock-db-url", - FRONTEND_URL: "https://frontend.com", - BACKEND_URL: "https://backend.com", - GOOGLE_CLIENT_ID: "google-id", - GOOGLE_CLIENT_SECRET: "google-secret", - MICROSOFT_CLIENT_ID: "ms-id", - MICROSOFT_CLIENT_SECRET: "ms-secret", - BOX_CLIENT_ID: "box-id", - BOX_CLIENT_SECRET: "box-secret", - DROPBOX_CLIENT_ID: "dropbox-id", - DROPBOX_CLIENT_SECRET: "dropbox-secret", - }, -})); - -// Mock send-mail -vi.mock("../src/utils/send-mail", () => ({ - sendMail: vi.fn(), -})); - -// TESTS -describe("createAuth", () => { - it("should return a valid auth object", () => { - expect(auth).toBeDefined(); - expect(betterAuth).toHaveBeenCalled(); - }); -}); - -describe("afterAccountCreation", () => { - const account = { - id: "account1", - accountId: "acc123", - providerId: "google", - userId: "user1", - createdAt: new Date(), - updatedAt: new Date(), - }; - - beforeEach(() => { - // Reset the actual mocked functions - mockFindFirst.mockReset(); - mockUpdate.mockReset(); - mockSet.mockReset(); - mockWhere.mockReset(); - }); - - it("should update user with default account/provider id if not set", async () => { - // Mock findFirst to return a user without default IDs - mockFindFirst.mockResolvedValue({ - id: "user1", - defaultAccountId: "accountid", - defaultProviderId: "google", - } as any); - - await afterAccountCreation(dbMock, account); - - // For now, just test that findFirst was called - expect(mockFindFirst).toHaveBeenCalled(); - }); - - it("should do nothing if user not found", async () => { - mockFindFirst.mockResolvedValueOnce(undefined); - - await afterAccountCreation(dbMock, account); - - expect(mockFindFirst).toHaveBeenCalled(); - expect(mockSet).not.toHaveBeenCalled(); - }); - - it("should do nothing if default IDs already set", async () => { - mockFindFirst.mockResolvedValueOnce({ - id: "user1", - defaultAccountId: "acc123", - defaultProviderId: "google", - } as any); - - await afterAccountCreation(dbMock, account); - - expect(mockFindFirst).toHaveBeenCalled(); - expect(mockSet).not.toHaveBeenCalled(); - }); -}); diff --git a/packages/auth/vitest.config.ts b/packages/auth/vitest.config.ts deleted file mode 100644 index 724bcf4..0000000 --- a/packages/auth/vitest.config.ts +++ /dev/null @@ -1,3 +0,0 @@ -import defineConfig from "@nimbus/vitest"; - -export default defineConfig; diff --git a/packages/cache/package.json b/packages/cache/package.json index f855669..501051d 100644 --- a/packages/cache/package.json +++ b/packages/cache/package.json @@ -8,19 +8,15 @@ "./rate-limiters": "./src/rate-limiters.ts" }, "scripts": { + "dev": "docker compose up", "lint": "bun run oxlint . --fix", "format": "bun prettier . --write --list-different", "docker:up": "docker compose up -d", - "docker:down": "docker compose down", - "docker:remove": "docker compose down --rmi local -v", - "docker:reset": "bun run docker:remove && bun run docker:up" + "docker:down": "docker compose down" }, "dependencies": { "iovalkey": "^0.3.3", "rate-limiter-flexible": "^7.2.0", "@nimbus/env": "workspace:*" - }, - "devDependencies": { - "@nimbus/vitest": "workspace:*" } } diff --git a/packages/cache/tests/cache.test.ts b/packages/cache/tests/cache.test.ts deleted file mode 100644 index 2b67dbc..0000000 --- a/packages/cache/tests/cache.test.ts +++ /dev/null @@ -1 +0,0 @@ -// TODO: the model for the KV requires different tests. I removed the old ones to not confuse others diff --git a/packages/cache/vitest.config.ts b/packages/cache/vitest.config.ts deleted file mode 100644 index 724bcf4..0000000 --- a/packages/cache/vitest.config.ts +++ /dev/null @@ -1,3 +0,0 @@ -import defineConfig from "@nimbus/vitest"; - -export default defineConfig; diff --git a/packages/db/package.json b/packages/db/package.json index e1812a3..ec2df65 100644 --- a/packages/db/package.json +++ b/packages/db/package.json @@ -4,27 +4,18 @@ "type": "module", "private": true, "scripts": { + "dev": "docker compose up", "lint": "bun run oxlint . --fix", "format": "bun prettier . --write --list-different", - "generate": "bun --bun run drizzle-kit generate --config=drizzle.config.ts", - "migrate": "bun --bun run drizzle-kit migrate --config=drizzle.config.ts", "push": "bun --bun run drizzle-kit push --config=drizzle.config.ts", - "pull": "bun --bun run drizzle-kit pull --config=drizzle.config.ts", - "check": "bun --bun run drizzle-kit check --config=drizzle.config.ts", - "upgrade": "bun --bun run drizzle-kit up --config=drizzle.config.ts", - "studio": "bun --bun run drizzle-kit studio --config=drizzle.config.ts", "docker:up": "docker compose up -d", - "docker:down": "docker compose down", - "docker:remove": "docker compose down --rmi local -v", - "docker:reset": "bun run docker:remove && bun run docker:up" + "docker:down": "docker compose down" }, "exports": { ".": "./src/index.ts", - "./schema": "./schema.ts", - "./mock": "./src/mock.ts" + "./schema": "./schema.ts" }, "devDependencies": { - "@nimbus/vitest": "workspace:*", "drizzle-kit": "^0.31.4" }, "dependencies": { diff --git a/packages/db/src/mock.ts b/packages/db/src/mock.ts deleted file mode 100644 index af7d211..0000000 --- a/packages/db/src/mock.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { mockDeep, type DeepMockProxy } from "vitest-mock-extended"; -import type { DB } from "./index"; -import { vi } from "vitest"; - -// Create a deep mock of the DB type -export const dbMock: DeepMockProxy = mockDeep(); - -// Extract the mock functions for easy access in tests -export const mockFindFirst = dbMock.query.user.findFirst; -export const mockSet = vi.fn(); -export const mockWhere = vi.fn(); - -// Configure the mock's behavior to represent the chained methods -dbMock.update.mockReturnValue({ - set: mockSet, -} as any); - -// Export the main update mock function as well -export const mockUpdate = dbMock.update; diff --git a/packages/db/tests/db.test.ts b/packages/db/tests/db.test.ts deleted file mode 100644 index c3e17f9..0000000 --- a/packages/db/tests/db.test.ts +++ /dev/null @@ -1 +0,0 @@ -// TODO: the model for the DB requires different tests. I removed the old ones to not confuse others diff --git a/packages/db/vitest.config.ts b/packages/db/vitest.config.ts deleted file mode 100644 index 724bcf4..0000000 --- a/packages/db/vitest.config.ts +++ /dev/null @@ -1,3 +0,0 @@ -import defineConfig from "@nimbus/vitest"; - -export default defineConfig; diff --git a/packages/env/package.json b/packages/env/package.json index 2b30d03..16bbaf1 100644 --- a/packages/env/package.json +++ b/packages/env/package.json @@ -10,8 +10,5 @@ "dependencies": { "@t3-oss/env-core": "^0.13.8", "zod": "^4.0.14" - }, - "devDependencies": { - "@nimbus/vitest": "workspace:*" } } diff --git a/packages/env/vitest.config.ts b/packages/env/vitest.config.ts deleted file mode 100644 index 724bcf4..0000000 --- a/packages/env/vitest.config.ts +++ /dev/null @@ -1,3 +0,0 @@ -import defineConfig from "@nimbus/vitest"; - -export default defineConfig; diff --git a/packages/shared/package.json b/packages/shared/package.json index 3e8d0c3..f83075d 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -9,8 +9,5 @@ "dependencies": { "zod": "^4.0.14", "@nimbus/db": "workspace:*" - }, - "devDependencies": { - "@nimbus/vitest": "workspace:*" } } diff --git a/packages/shared/tests/validators.account.test.ts b/packages/shared/tests/validators.account.test.ts deleted file mode 100644 index f108bb3..0000000 --- a/packages/shared/tests/validators.account.test.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { limitedAccessAccountSchema, updateAccountSchema } from "../src"; -import { describe, expect, it } from "vitest"; - -describe("limitedAccessAccountSchema", () => { - const validData = { - id: "user_123", - providerId: "google", - accountId: "acc_456", - scope: "read_write", - nickname: "my-drive", - createdAt: new Date(), - updatedAt: new Date(), - }; - - it("should validate with all required fields", () => { - const parsed = limitedAccessAccountSchema.parse(validData); - expect(parsed).toEqual(validData); - }); - - it("should allow null nickname", () => { - const data = { ...validData, nickname: null }; - const parsed = limitedAccessAccountSchema.parse(data); - expect(parsed.nickname).toBeNull(); - }); - - it("should throw if providerId is invalid", () => { - const data = { ...validData, providerId: "invalid" }; - expect(() => limitedAccessAccountSchema.parse(data)).toThrow(); - }); - - it("should throw if nickname is too long", () => { - const data = { ...validData, nickname: "a".repeat(60) }; - expect(() => limitedAccessAccountSchema.parse(data)).toThrow(); - }); - - it("should throw if required fields are missing", () => { - const data = { ...validData }; - delete (data as any).id; - expect(() => limitedAccessAccountSchema.parse(data)).toThrow(); - }); -}); - -describe("updateAccountSchema", () => { - it("should allow valid id and nickname", () => { - const result = updateAccountSchema.parse({ - id: "user_123", - nickname: "updated-name", - }); - expect(result).toBeDefined(); - }); - - it("should allow null nickname", () => { - const result = updateAccountSchema.parse({ - id: "user_123", - nickname: null, - }); - expect(result.nickname).toBeNull(); - }); - - it("should throw if id is missing", () => { - expect(() => updateAccountSchema.parse({ nickname: "hello" })).toThrow(); - }); - - it("should throw if nickname is too short", () => { - expect(() => updateAccountSchema.parse({ id: "123", nickname: "" })).toThrow(); - }); -}); diff --git a/packages/shared/tests/validators.email.test.ts b/packages/shared/tests/validators.email.test.ts deleted file mode 100644 index 36ee68b..0000000 --- a/packages/shared/tests/validators.email.test.ts +++ /dev/null @@ -1,73 +0,0 @@ -import { emailObjectSchema, emailSchema, sendMailSchema } from "../src"; -import { describe, it, expect } from "vitest"; - -describe("emailSchema", () => { - it("should pass for a valid email", () => { - const result = emailSchema.safeParse("john.doe@example.com"); - expect(result.success).toBe(true); - }); - - it("should fail for an email without TLD", () => { - const result = emailSchema.safeParse("john.doe@example"); - expect(result.success).toBe(false); - }); - - it("should fail for an invalid domain label", () => { - const result = emailSchema.safeParse("john@exa_mple.com"); - expect(result.success).toBe(false); - }); - - it("should fail for missing domain", () => { - const result = emailSchema.safeParse("john@"); - expect(result.success).toBe(false); - }); -}); - -describe("sendMailSchema", () => { - it("should pass with all valid fields", () => { - const result = sendMailSchema.safeParse({ - to: "test@example.com", - subject: "Hello", - text: "World", - }); - expect(result.success).toBe(true); - }); - - it("should fail if subject is missing", () => { - const result = sendMailSchema.safeParse({ - to: "test@example.com", - text: "Body", - }); - expect(result.success).toBe(false); - }); - - it("should fail if text is empty", () => { - const result = sendMailSchema.safeParse({ - to: "test@example.com", - subject: "Subject", - text: "", - }); - expect(result.success).toBe(false); - }); - - it("should fail if email is invalid", () => { - const result = sendMailSchema.safeParse({ - to: "invalid-email", - subject: "Subject", - text: "Text", - }); - expect(result.success).toBe(false); - }); -}); - -describe("emailObjectSchema", () => { - it("should pass with valid email", () => { - const result = emailObjectSchema.safeParse({ email: "valid@example.com" }); - expect(result.success).toBe(true); - }); - - it("should fail with invalid email", () => { - const result = emailObjectSchema.safeParse({ email: "invalid-email" }); - expect(result.success).toBe(false); - }); -}); diff --git a/packages/shared/tests/validators.file-utils.test.ts b/packages/shared/tests/validators.file-utils.test.ts deleted file mode 100644 index 3ddfa3e..0000000 --- a/packages/shared/tests/validators.file-utils.test.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { formatFileSize, getFileExtension } from "../src"; -import { describe, it, expect } from "vitest"; - -describe("formatFileSize", () => { - it("should format bytes correctly", () => { - expect(formatFileSize(500)).toBe("500 B"); - expect(formatFileSize(1024)).toBe("1.00 KB"); - expect(formatFileSize(1536)).toBe("1.50 KB"); - expect(formatFileSize(1048576)).toBe("1.00 MB"); - expect(formatFileSize(1073741824)).toBe("1.00 GB"); - }); - - it("should handle strings as input", () => { - expect(formatFileSize("2048")).toBe("2.00 KB"); - }); - - it("should return 'Invalid size' for invalid inputs", () => { - expect(formatFileSize("abc")).toBe("Invalid size"); - expect(formatFileSize(undefined)).toBe("Invalid size"); - expect(formatFileSize(undefined)).toBe("Invalid size"); - expect(formatFileSize(-100)).toBe("Invalid size"); - }); -}); - -describe("getFileExtension", () => { - it("should return correct extension", () => { - expect(getFileExtension("document.pdf")).toBe("pdf"); - expect(getFileExtension("archive.tar.gz")).toBe("gz"); - expect(getFileExtension("image.PNG")).toBe("png"); - }); - - it("should return empty string if no extension", () => { - expect(getFileExtension("filename")).toBe(""); - expect(getFileExtension("filename.")).toBe(""); - expect(getFileExtension("noextension.")).toBe(""); - }); - - it("should handle hidden files properly", () => { - expect(getFileExtension(".env")).toBe("env"); - expect(getFileExtension(".config.local")).toBe("local"); - }); -}); diff --git a/packages/shared/tests/validators.file.test.ts b/packages/shared/tests/validators.file.test.ts deleted file mode 100644 index 247d08e..0000000 --- a/packages/shared/tests/validators.file.test.ts +++ /dev/null @@ -1,110 +0,0 @@ -import { - createFileSchema, - downloadFileSchema, - fileIdSchema, - getFilesSchema, - updateFileSchema, - uploadFileQuerySchema, -} from "../src/validators/file"; -import { describe, expect, it } from "vitest"; - -describe("fileIdSchema", () => { - it("should pass with valid file ID", () => { - const result = fileIdSchema.safeParse("abc123"); - expect(result.success).toBe(true); - }); - - it("should fail with empty ID", () => { - const result = fileIdSchema.safeParse(""); - expect(result.success).toBe(false); - }); -}); - -describe("getFilesSchema", () => { - it("should return default values when input is empty", () => { - const result = getFilesSchema.parse({}); - expect(result.parentId).toBe("root"); - expect(result.pageSize).toBe(30); - }); - - it("should fail with too large pageSize", () => { - const result = getFilesSchema.safeParse({ pageSize: 1000 }); - expect(result.success).toBe(false); - }); -}); - -describe("updateFileSchema", () => { - it("should pass with valid name and fileId", () => { - const result = updateFileSchema.safeParse({ - fileId: "abc123", - name: "Valid Name", - }); - expect(result.success).toBe(true); - }); - - it("should fail with empty name", () => { - const result = updateFileSchema.safeParse({ - fileId: "abc123", - name: "", - }); - expect(result.success).toBe(false); - }); -}); - -describe("createFileSchema", () => { - it("should pass with required fields", () => { - const result = createFileSchema.safeParse({ - name: "file.txt", - mimeType: "text/plain", - }); - expect(result.success).toBe(true); - }); - - it("should fail with empty name", () => { - const result = createFileSchema.safeParse({ - name: "", - mimeType: "text/plain", - }); - expect(result.success).toBe(false); - }); -}); - -describe("uploadFileQuerySchema", () => { - it("should pass with valid parentId", () => { - const result = uploadFileQuerySchema.safeParse({ - parentId: "parent123", - }); - expect(result.success).toBe(true); - }); - - it("should fail with empty parentId", () => { - const result = uploadFileQuerySchema.safeParse({ - parentId: "", - }); - expect(result.success).toBe(false); - }); -}); - -describe("downloadFileSchema", () => { - it("should pass with only fileId", () => { - const result = downloadFileSchema.safeParse({ - fileId: "file123", - }); - expect(result.success).toBe(true); - }); - - it("should fail with invalid fileId", () => { - const result = downloadFileSchema.safeParse({ - fileId: "", - }); - expect(result.success).toBe(false); - }); - - it("should pass with acknowledgeAbuse true", () => { - const result = downloadFileSchema.safeParse({ - fileId: "file123", - acknowledgeAbuse: true, - }); - expect(result.success).toBe(true); - }); -}); diff --git a/packages/shared/tests/validators.password.test.ts b/packages/shared/tests/validators.password.test.ts deleted file mode 100644 index 73be280..0000000 --- a/packages/shared/tests/validators.password.test.ts +++ /dev/null @@ -1,96 +0,0 @@ -import { forgotPasswordSchema, signInSchema, signUpSchema, resetPasswordSchema } from "../src/validators/password"; -import { describe, it, expect } from "vitest"; - -describe("forgotPasswordSchema", () => { - it("should pass with a valid email", () => { - const result = forgotPasswordSchema.safeParse({ email: "test@example.com" }); - expect(result.success).toBe(true); - }); - - it("should fail with invalid email", () => { - const result = forgotPasswordSchema.safeParse({ email: "invalid-email" }); - expect(result.success).toBe(false); - }); -}); - -describe("signInSchema", () => { - it("should pass with valid data", () => { - const result = signInSchema.safeParse({ - email: "user@example.com", - password: "StrongPass123", - remember: true, - }); - expect(result.success).toBe(true); - }); - - it("should fail with weak password", () => { - const result = signInSchema.safeParse({ - email: "user@example.com", - password: "weak", - remember: true, - }); - expect(result.success).toBe(false); - }); -}); - -describe("signUpSchema", () => { - it("should pass with matching passwords", () => { - const result = signUpSchema.safeParse({ - firstName: "John", - lastName: "Doe", - email: "john@example.com", - password: "StrongPass123", - confirmPassword: "StrongPass123", - }); - expect(result.success).toBe(true); - }); - - it("should fail when passwords do not match", () => { - const result = signUpSchema.safeParse({ - firstName: "John", - lastName: "Doe", - email: "john@example.com", - password: "StrongPass123", - confirmPassword: "DifferentPass123", - }); - expect(result.success).toBe(false); - expect(result.error?.format().confirmPassword?._errors).toContain("Passwords don't match"); - }); - - it("should fail if firstName is missing", () => { - const result = signUpSchema.safeParse({ - lastName: "Doe", - email: "john@example.com", - password: "StrongPass123", - confirmPassword: "StrongPass123", - }); - expect(result.success).toBe(false); - }); -}); - -describe("resetPasswordSchema", () => { - it("should pass when passwords match and are strong", () => { - const result = resetPasswordSchema.safeParse({ - password: "StrongPass123", - confirmPassword: "StrongPass123", - }); - expect(result.success).toBe(true); - }); - - it("should fail when passwords do not match", () => { - const result = resetPasswordSchema.safeParse({ - password: "StrongPass123", - confirmPassword: "Mismatch123", - }); - expect(result.success).toBe(false); - expect(result.error?.format().confirmPassword?._errors).toContain("Passwords don't match"); - }); - - it("should fail when password is weak", () => { - const result = resetPasswordSchema.safeParse({ - password: "weakpass", - confirmPassword: "weakpass", - }); - expect(result.success).toBe(false); - }); -}); diff --git a/packages/shared/tests/validators.provider.test.ts b/packages/shared/tests/validators.provider.test.ts deleted file mode 100644 index 13e66c0..0000000 --- a/packages/shared/tests/validators.provider.test.ts +++ /dev/null @@ -1,112 +0,0 @@ -import { - driveProviderParamSchema, - driveProviderSchema, - driveProviderSlugParamSchema, - driveProviderSlugSchema, - providerSchema, - providerToSlug, - slugToProvider, -} from "../src/validators/provider"; -import { describe, expect, it } from "vitest"; - -describe("driveProviderSchema", () => { - it("should accept 'google'", () => { - const result = driveProviderSchema.safeParse("google"); - expect(result.success).toBe(true); - }); - - it("should reject 'icloud'", () => { - const result = driveProviderSchema.safeParse("icloud"); - expect(result.success).toBe(false); - }); -}); - -describe("driveProviderSlugSchema", () => { - it("should accept 'g'", () => { - const result = driveProviderSlugSchema.safeParse("g"); - expect(result.success).toBe(true); - }); - - it("should reject 'z'", () => { - const result = driveProviderSlugSchema.safeParse("z"); - expect(result.success).toBe(false); - }); -}); - -describe("driveProviderParamSchema", () => { - it("should pass with valid values", () => { - const result = driveProviderParamSchema.safeParse({ - providerId: "microsoft", - accountId: "123", - }); - expect(result.success).toBe(true); - }); - - it("should fail with invalid provider", () => { - const result = driveProviderParamSchema.safeParse({ - providerId: "apple", - accountId: "123", - }); - expect(result.success).toBe(false); - }); -}); - -describe("driveProviderSlugParamSchema", () => { - it("should pass with valid values", () => { - const result = driveProviderSlugParamSchema.safeParse({ - providerSlug: "g", - accountId: "abc", - }); - expect(result.success).toBe(true); - }); - - it("should fail with invalid slug", () => { - const result = driveProviderSlugParamSchema.safeParse({ - providerSlug: "z", - accountId: "abc", - }); - expect(result.success).toBe(false); - }); -}); - -describe("providerSchema", () => { - it("should accept 'google'", () => { - const result = providerSchema.safeParse("google"); - expect(result.success).toBe(true); - }); - - it("should accept 'credential'", () => { - const result = providerSchema.safeParse("credential"); - expect(result.success).toBe(true); - }); - - it("should accept null", () => { - const result = providerSchema.safeParse(null); - expect(result.success).toBe(true); - }); - - it("should reject 'icloud'", () => { - const result = providerSchema.safeParse("icloud"); - expect(result.success).toBe(false); - }); -}); - -describe("slugToProvider", () => { - it("should return 'google' for 'g'", () => { - expect(slugToProvider("g")).toBe("google"); - }); - - it("should return undefined for 'z'", () => { - expect(slugToProvider("z" as any)).toBeUndefined(); - }); -}); - -describe("providerToSlug", () => { - it("should return 'm' for 'microsoft'", () => { - expect(providerToSlug("microsoft")).toBe("m"); - }); - - it("should return undefined for 'icloud'", () => { - expect(providerToSlug("icloud" as any)).toBeUndefined(); - }); -}); diff --git a/packages/shared/tests/validators.tag.test.ts b/packages/shared/tests/validators.tag.test.ts deleted file mode 100644 index 08fdabe..0000000 --- a/packages/shared/tests/validators.tag.test.ts +++ /dev/null @@ -1,127 +0,0 @@ -import { - addTagsToFileSchema, - createTagSchema, - hexColorSchema, - removeTagsFromFileSchema, - tagIdSchema, - tagNameSchema, - updateTagSchema, -} from "../src"; -import { describe, it, expect } from "vitest"; - -describe("tagNameSchema", () => { - it("should pass for valid string", () => { - const result = tagNameSchema.safeParse("Important"); - expect(result.success).toBe(true); - }); - - it("should fail for empty string", () => { - const result = tagNameSchema.safeParse(""); - expect(result.success).toBe(false); - }); -}); - -describe("hexColorSchema", () => { - it("should pass for valid hex", () => { - const result = hexColorSchema.safeParse("#FF5733"); - expect(result.success).toBe(true); - }); - - it("should fail for invalid hex", () => { - const result = hexColorSchema.safeParse("FF5733"); - expect(result.success).toBe(false); - }); -}); - -describe("tagIdSchema", () => { - it("should pass with valid ID", () => { - const result = tagIdSchema.safeParse("abc123"); - expect(result.success).toBe(true); - }); - - it("should fail with empty ID", () => { - const result = tagIdSchema.safeParse(""); - expect(result.success).toBe(false); - }); -}); - -describe("createTagSchema", () => { - it("should pass with name and optional parentId", () => { - const result = createTagSchema.safeParse({ - name: "Work", - color: "#123456", - parentId: "parent-id", - }); - expect(result.success).toBe(true); - }); - - it("should use default color when not provided", () => { - const result = createTagSchema.safeParse({ - name: "Work", - }); - expect(result.success).toBe(true); - expect(result.data?.color).toBe("#808080"); - }); - - it("should fail with invalid color", () => { - const result = createTagSchema.safeParse({ - name: "Work", - color: "red", - }); - expect(result.success).toBe(false); - }); -}); - -describe("updateTagSchema", () => { - it("should pass with partial fields", () => { - const result = updateTagSchema.safeParse({ - id: "tag123", - name: "New Name", - }); - expect(result.success).toBe(true); - }); - - it("should fail with invalid color", () => { - const result = updateTagSchema.safeParse({ - id: "tag123", - color: "red", - }); - expect(result.success).toBe(false); - }); -}); - -describe("addTagsToFileSchema", () => { - it("should pass with valid fileId and tagIds", () => { - const result = addTagsToFileSchema.safeParse({ - fileId: "file-123", - tagIds: ["tag-1", "tag-2"], - }); - expect(result.success).toBe(true); - }); - - it("should fail with empty tagIds array", () => { - const result = addTagsToFileSchema.safeParse({ - fileId: "file-123", - tagIds: [], - }); - expect(result.success).toBe(false); - }); - - it("should fail with empty fileId", () => { - const result = addTagsToFileSchema.safeParse({ - fileId: "", - tagIds: ["tag-1"], - }); - expect(result.success).toBe(false); - }); -}); - -describe("removeTagsFromFileSchema", () => { - it("should pass with valid data", () => { - const result = removeTagsFromFileSchema.safeParse({ - fileId: "file-123", - tagIds: ["tag-1", "tag-2"], - }); - expect(result.success).toBe(true); - }); -}); diff --git a/packages/shared/tests/validators.user.test.ts b/packages/shared/tests/validators.user.test.ts deleted file mode 100644 index d02f5db..0000000 --- a/packages/shared/tests/validators.user.test.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { userSchema, updateUserSchema } from "../src/validators/user"; -import { describe, it, expect } from "vitest"; - -describe("userSchema", () => { - it("should pass with valid data", () => { - const result = userSchema.safeParse({ - id: "user-1", - name: "John Doe", - email: "john@example.com", - emailVerified: true, - image: null, - defaultAccountId: null, - defaultProviderId: null, - createdAt: new Date(), - updatedAt: new Date(), - }); - expect(result.success).toBe(true); - }); - - it("should fail if createdAt is missing", () => { - const result = userSchema.safeParse({ - id: "user-1", - name: "John Doe", - email: "john@example.com", - emailVerified: true, - image: null, - defaultAccountId: null, - defaultProviderId: null, - updatedAt: new Date(), - }); - expect(result.success).toBe(false); - }); - - it("should fail if emailVerified is not boolean", () => { - const result = userSchema.safeParse({ - id: "user-1", - name: "John Doe", - email: "john@example.com", - emailVerified: "yes", // ❌ should be boolean - image: null, - defaultAccountId: null, - defaultProviderId: null, - createdAt: new Date(), - updatedAt: new Date(), - }); - expect(result.success).toBe(false); - }); -}); - -describe("updateUserSchema", () => { - it("should pass with valid IDs", () => { - const result = updateUserSchema.safeParse({ - defaultAccountId: "acc-123", - defaultProviderId: "g", - }); - expect(result.success).toBe(true); - }); - - it("should fail with missing fields", () => { - const result = updateUserSchema.safeParse({}); - expect(result.success).toBe(false); - }); -}); diff --git a/packages/shared/vitest.config.ts b/packages/shared/vitest.config.ts deleted file mode 100644 index 724bcf4..0000000 --- a/packages/shared/vitest.config.ts +++ /dev/null @@ -1,3 +0,0 @@ -import defineConfig from "@nimbus/vitest"; - -export default defineConfig; diff --git a/packages/vitest/package.json b/packages/vitest/package.json deleted file mode 100644 index f48c01c..0000000 --- a/packages/vitest/package.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "@nimbus/vitest", - "version": "0.0.0", - "type": "module", - "private": true, - "exports": { - ".": "./src/index.ts" - }, - "devDependencies": { - "@vitest/coverage-v8": "^3.2.4", - "vitest": "^3.2.4" - } -} diff --git a/packages/vitest/src/index.ts b/packages/vitest/src/index.ts deleted file mode 100644 index 9523065..0000000 --- a/packages/vitest/src/index.ts +++ /dev/null @@ -1,49 +0,0 @@ -import tsconfigPaths from "vite-tsconfig-paths"; -import { defineConfig } from "vitest/config"; -import { config } from "dotenv"; - -// Load environment variables from .env file -config(); - -export default defineConfig({ - plugins: [tsconfigPaths()], - test: { - globals: true, - sequence: { - concurrent: true, - }, - include: [ - "**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}", - "**/tests/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}", - ], - coverage: { - provider: "v8", - reporter: ["html", "json-summary", "lcov"], - // Only include source files from current workspace - include: ["**/src/**/*"], - exclude: [ - "**/node_modules/**", - "**/tests/**", - "**/*.test.ts", - "**/*.spec.ts", - "**/dist/**", - "**/build/**", - "**/coverage/**", - "**/*.d.ts", - "**/*.config.*", - "**/*.setup.*", - "**/index.ts", // Often just re-exports - ], - // TODO(tests): enable when we have better test coverage - thresholds: { - // statements: 80, - // branches: 80, - // functions: 80, - // lines: 80, - }, - reportsDirectory: "./coverage", - // Clean coverage directory before each run - clean: true, - }, - }, -}); diff --git a/vitest.config.ts b/vitest.config.ts deleted file mode 100644 index 724bcf4..0000000 --- a/vitest.config.ts +++ /dev/null @@ -1,3 +0,0 @@ -import defineConfig from "@nimbus/vitest"; - -export default defineConfig;