From 7bba87369fd72a0d2af3d59aec85b92feaca40fe Mon Sep 17 00:00:00 2001 From: Bereket Engida Date: Thu, 31 Oct 2024 14:21:27 +0300 Subject: [PATCH] fix: oauth related tests --- examples/expo-example/package.json | 2 +- examples/nextjs-example/package.json | 1 + packages/better-auth/package.json | 3 - .../src/api/routes/account.test.ts | 10 +- .../better-auth/src/api/routes/account.ts | 36 +- .../better-auth/src/plugins/expo/expo.test.ts | 84 --- packages/expo/package.json | 36 ++ .../src/plugins/expo => expo/src}/client.ts | 36 +- packages/expo/src/expo.test.ts | 116 +++++ .../src/plugins/expo => expo/src}/index.ts | 7 +- packages/expo/tsconfig.json | 20 + packages/expo/tsup.config.ts | 13 + pnpm-lock.yaml | 488 +++++++----------- 13 files changed, 413 insertions(+), 439 deletions(-) delete mode 100644 packages/better-auth/src/plugins/expo/expo.test.ts create mode 100644 packages/expo/package.json rename packages/{better-auth/src/plugins/expo => expo/src}/client.ts (80%) create mode 100644 packages/expo/src/expo.test.ts rename packages/{better-auth/src/plugins/expo => expo/src}/index.ts (87%) create mode 100644 packages/expo/tsconfig.json create mode 100644 packages/expo/tsup.config.ts diff --git a/examples/expo-example/package.json b/examples/expo-example/package.json index 8d29635350..e8e7cf51b9 100644 --- a/examples/expo-example/package.json +++ b/examples/expo-example/package.json @@ -23,8 +23,8 @@ "@rn-primitives/slot": "^1.1.0", "@rn-primitives/types": "^1.1.0", "babel-plugin-transform-import-meta": "^2.2.1", - "better-auth": "workspace:*", "expo": "~51.0.38", + "@better-auth/expo": "workspace:*", "expo-constants": "~16.0.2", "expo-font": "~12.0.9", "expo-linking": "~6.3.1", diff --git a/examples/nextjs-example/package.json b/examples/nextjs-example/package.json index 5cafe9140d..68b109eec9 100644 --- a/examples/nextjs-example/package.json +++ b/examples/nextjs-example/package.json @@ -14,6 +14,7 @@ "dependencies": { "@hookform/resolvers": "^3.9.0", "@libsql/client": "^0.12.0", + "@better-auth/expo": "workspace:*", "@libsql/kysely-libsql": "^0.4.1", "@prisma/adapter-libsql": "^5.19.1", "@prisma/client": "^5.19.1", diff --git a/packages/better-auth/package.json b/packages/better-auth/package.json index e2cbd085d8..f0228f8ded 100644 --- a/packages/better-auth/package.json +++ b/packages/better-auth/package.json @@ -229,9 +229,6 @@ "@types/react": "^18.3.3", "better-sqlite3": "^11.3.0", "drizzle-orm": "^0.33.0", - "expo-linking": "~6.3.1", - "expo-secure-store": "~13.0.2", - "expo-web-browser": "~13.0.3", "happy-dom": "^15.7.4", "hono": "^4.5.4", "listhen": "^1.7.2", diff --git a/packages/better-auth/src/api/routes/account.test.ts b/packages/better-auth/src/api/routes/account.test.ts index 040ea82e27..58286a3d36 100644 --- a/packages/better-auth/src/api/routes/account.test.ts +++ b/packages/better-auth/src/api/routes/account.test.ts @@ -56,6 +56,7 @@ describe("account", async () => { }, }, }); + const { headers } = await signInWithTestUser(); it("should list all accounts", async () => { const accounts = await client.listAccounts({ @@ -87,17 +88,14 @@ describe("account", async () => { ); expect(linkAccountRes.data).toMatchObject({ url: expect.stringContaining("google.com"), - codeVerifier: expect.any(String), - state: { - hash: expect.any(String), - raw: expect.any(String), - }, redirect: true, }); + const state = + new URL(linkAccountRes.data!.url).searchParams.get("state") || ""; email = "test@test.com"; await client.$fetch("/callback/google", { query: { - state: linkAccountRes.data?.state.raw, + state, code: "test", }, method: "GET", diff --git a/packages/better-auth/src/api/routes/account.ts b/packages/better-auth/src/api/routes/account.ts index 6e9a4e2827..abe76f567d 100644 --- a/packages/better-auth/src/api/routes/account.ts +++ b/packages/better-auth/src/api/routes/account.ts @@ -74,44 +74,14 @@ export const linkSocialAccount = createAuthEndpoint( message: "Provider not found", }); } - const cookie = c.context.authCookies; - const currentURL = c.query?.currentURL - ? new URL(c.query?.currentURL) - : null; - - const callbackURL = c.body.callbackURL?.startsWith("http") - ? c.body.callbackURL - : `${currentURL?.origin}${c.body.callbackURL || ""}`; - - const state = await generateState( - callbackURL || currentURL?.origin || c.context.options.baseURL, - { - email: session.user.email, - userId: session.user.id, - }, - ); - await c.setSignedCookie( - cookie.state.name, - state.hash, - c.context.secret, - cookie.state.options, - ); - const codeVerifier = generateCodeVerifier(); - await c.setSignedCookie( - cookie.pkCodeVerifier.name, - codeVerifier, - c.context.secret, - cookie.pkCodeVerifier.options, - ); + const state = await generateState(c); const url = await provider.createAuthorizationURL({ - state: state.raw, - codeVerifier, + state: state.state, + codeVerifier: state.codeVerifier, redirectURI: `${c.context.baseURL}/callback/${provider.id}`, }); return c.json({ url: url.toString(), - state: state, - codeVerifier, redirect: true, }); }, diff --git a/packages/better-auth/src/plugins/expo/expo.test.ts b/packages/better-auth/src/plugins/expo/expo.test.ts deleted file mode 100644 index 8fbc671c57..0000000000 --- a/packages/better-auth/src/plugins/expo/expo.test.ts +++ /dev/null @@ -1,84 +0,0 @@ -import { describe, expect, it, vi } from "vitest"; -import { getTestInstance } from "../../test-utils/test-instance"; -import { expo } from "."; -import { expoClient } from "./client"; - -vi.mock("expo-web-browser", async () => { - return { - openAuthSessionAsync: vi.fn(async (...args) => { - fn(...args); - return { - type: "success", - url: "better-auth://?cookie=better-auth.session_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjYxMzQwZj", - }; - }), - }; -}); - -const fn = vi.fn(); - -describe("expo", async () => { - const storage = new Map(); - const { client, testUser } = await getTestInstance( - { - plugins: [expo()], - trustedOrigins: ["better-auth://"], - }, - { - clientOptions: { - plugins: [ - expoClient({ - scheme: "better-auth", - storage: { - getItemAsync(key) { - return Promise.resolve(storage.get(key) || null); - }, - setItemAsync(key, value) { - storage.set(key, value); - }, - deleteItemAsync(key) { - storage.delete(key); - }, - }, - }), - ], - }, - }, - ); - - it("should store cookie with expires date", async () => { - await client.signIn.email({ - email: testUser.email, - password: testUser.password, - }); - const storedCookie = storage.get("better-auth_cookie"); - expect(storedCookie).toBeDefined(); - const parsedCookie = JSON.parse(storedCookie || ""); - expect(parsedCookie["better-auth.session_token"]).toMatchObject({ - value: expect.any(String), - expires: expect.any(String), - }); - }); - - it("should send cookie and get session", async () => { - const { data } = await client.getSession(); - expect(data).toMatchObject({ - session: expect.any(Object), - user: expect.any(Object), - }); - }); - - it("should use the scheme to open the browser", async () => { - const { data: res } = await client.signIn.social({ - provider: "google", - callbackURL: "/dashboard", - }); - expect(res).toMatchObject({ - url: expect.stringContaining("accounts.google"), - }); - expect(fn).toHaveBeenCalledWith( - expect.stringContaining("accounts.google"), - "better-auth:///dashboard", - ); - }); -}); diff --git a/packages/expo/package.json b/packages/expo/package.json new file mode 100644 index 0000000000..8bf427f91e --- /dev/null +++ b/packages/expo/package.json @@ -0,0 +1,36 @@ +{ + "name": "@better-auth/expo", + "version": "0.6.3-beta.3", + "description": "", + "main": "dist/index.js", + "module": "dist/index.mjs", + "scripts": { + "test": "vitest", + "build": "tsup --dts --minify --clean", + "dev": "tsup --watch --sourcemap --dts" + }, + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.mjs", + "require": "./dist/index.js" + }, + "./client": { + "types": "./dist/client.d.ts", + "import": "./dist/client.mjs", + "require": "./dist/client.js" + } + }, + "keywords": [], + "author": "", + "license": "ISC", + "devDependencies": { + "better-auth": "workspace:*", + "better-sqlite3": "^11.5.0", + "expo-constants": "~16.0.2", + "expo-linking": "~6.3.1", + "expo-secure-store": "~13.0.2", + "expo-web-browser": "~13.0.3", + "vitest": "^1.6.0" + } +} diff --git a/packages/better-auth/src/plugins/expo/client.ts b/packages/expo/src/client.ts similarity index 80% rename from packages/better-auth/src/plugins/expo/client.ts rename to packages/expo/src/client.ts index 7167e87b0d..113622e40b 100644 --- a/packages/better-auth/src/plugins/expo/client.ts +++ b/packages/expo/src/client.ts @@ -2,14 +2,44 @@ import type { BetterAuthClientPlugin, Store } from "better-auth"; import * as Browser from "expo-web-browser"; import * as Linking from "expo-linking"; import * as SecureStorage from "expo-secure-store"; -import { parseSetCookieHeader } from "../../cookies"; + +interface CookieAttributes { + value: string; + expires?: Date; + "max-age"?: number; + domain?: string; + path?: string; + secure?: boolean; + httpOnly?: boolean; + sameSite?: "Strict" | "Lax" | "None"; +} + +function parseSetCookieHeader(header: string): Map { + const cookieMap = new Map(); + const cookies = header.split(", "); + cookies.forEach((cookie) => { + const [nameValue, ...attributes] = cookie.split("; "); + const [name, value] = nameValue.split("="); + + const cookieObj: CookieAttributes = { value }; + + attributes.forEach((attr) => { + const [attrName, attrValue] = attr.split("="); + cookieObj[attrName.toLowerCase() as "value"] = attrValue; + }); + + cookieMap.set(name, cookieObj); + }); + + return cookieMap; +} interface ExpoClientOptions { scheme: string; storage?: { getItemAsync: (key: string) => Promise | string | null; - setItemAsync: (key: string, value: string) => Promise | void; - deleteItemAsync: (key: string) => Promise | void; + setItemAsync: (key: string, value: string) => Promise | any; + deleteItemAsync: (key: string) => Promise | any; }; cookies?: { name?: string; diff --git a/packages/expo/src/expo.test.ts b/packages/expo/src/expo.test.ts new file mode 100644 index 0000000000..7486dc8282 --- /dev/null +++ b/packages/expo/src/expo.test.ts @@ -0,0 +1,116 @@ +import { createAuthClient } from "better-auth/client"; +import Database from "better-sqlite3"; +import { beforeAll, describe, expect, it, vi } from "vitest"; +import { expo } from "."; +import { expoClient } from "./client"; +import { betterAuth } from "better-auth"; +import { getMigrations } from "better-auth/db"; + +vi.mock("expo-web-browser", async () => { + return { + openAuthSessionAsync: vi.fn(async (...args) => { + fn(...args); + return { + type: "success", + url: "better-auth://?cookie=better-auth.session_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjYxMzQwZj", + }; + }), + }; +}); +vi.mock("expo-linking", async () => { + return { + createURL: vi.fn((url) => `better-auth://${url}`), + }; +}); + +vi.mock("expo-secure-store", async () => { + return { + getItemAsync: vi.fn(async (key) => null), + setItemAsync: vi.fn(), + deleteItemAsync: vi.fn(), + }; +}); + +const fn = vi.fn(); + +describe("expo", async () => { + const storage = new Map(); + + const auth = betterAuth({ + baseURL: "http://localhost:3000", + database: new Database(":memory:"), + emailAndPassword: { + enabled: true, + }, + socialProviders: { + google: { + clientId: "test", + clientSecret: "test", + }, + }, + plugins: [expo()], + trustedOrigins: ["better-auth://"], + }); + + const client = createAuthClient({ + baseURL: "http://localhost:3000", + fetchOptions: { + customFetchImpl: (url, init) => { + const req = new Request(url.toString(), init); + return auth.handler(req); + }, + }, + plugins: [ + expoClient({ + scheme: "better-auth", + storage: { + getItemAsync: async (key) => storage.get(key) || null, + setItemAsync: async (key, value) => storage.set(key, value), + deleteItemAsync: async (key) => storage.delete(key), + }, + }), + ], + }); + beforeAll(async () => { + const { runMigrations } = await getMigrations(auth.options); + await runMigrations(); + }); + + it("should store cookie with expires date", async () => { + const testUser = { + email: "test@test.com", + password: "password", + name: "Test User", + }; + await client.signUp.email(testUser); + const storedCookie = storage.get("better-auth_cookie"); + expect(storedCookie).toBeDefined(); + const parsedCookie = JSON.parse(storedCookie || ""); + expect(parsedCookie["better-auth.session_token"]).toMatchObject({ + value: expect.any(String), + expires: expect.any(String), + }); + }); + + it("should send cookie and get session", async () => { + const { data } = await client.getSession(); + expect(data).toMatchObject({ + session: expect.any(Object), + user: expect.any(Object), + }); + }); + + it("should use the scheme to open the browser", async () => { + const { data: res } = await client.signIn.social({ + provider: "google", + callbackURL: "/dashboard", + }); + expect(res).toMatchObject({ + url: expect.stringContaining("accounts.google"), + }); + expect(fn).toHaveBeenCalledWith( + expect.stringContaining("accounts.google"), + "better-auth:///dashboard", + ); + }); +}); diff --git a/packages/better-auth/src/plugins/expo/index.ts b/packages/expo/src/index.ts similarity index 87% rename from packages/better-auth/src/plugins/expo/index.ts rename to packages/expo/src/index.ts index d79967d2ea..1f69ec00ab 100644 --- a/packages/better-auth/src/plugins/expo/index.ts +++ b/packages/expo/src/index.ts @@ -1,16 +1,16 @@ import type { BetterAuthPlugin } from "better-auth"; -import { isDevelopment } from "../../utils/env"; export const expo = () => { return { id: "expo", - init: (ctx) => { + init: () => { return { options: { /** * Add expo go as a trusted origin on dev */ - trustedOrigins: isDevelopment ? ["exp://"] : [], + trustedOrigins: + process.env.NODE_ENV === "development" ? ["exp://"] : [], }, }; }, @@ -43,7 +43,6 @@ export const expo = () => { const url = new URL(location); url.searchParams.set("cookie", cookie); response.headers.set("location", url.toString()); - console.log("Redirecting to", url.toString()); return { response, }; diff --git a/packages/expo/tsconfig.json b/packages/expo/tsconfig.json new file mode 100644 index 0000000000..c347c9346a --- /dev/null +++ b/packages/expo/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "esModuleInterop": true, + "skipLibCheck": true, + "target": "es2022", + "allowJs": true, + "resolveJsonModule": true, + "module": "ESNext", + "noEmit": true, + "moduleResolution": "Bundler", + "moduleDetection": "force", + "isolatedModules": true, + "verbatimModuleSyntax": true, + "strict": true, + "noImplicitOverride": true, + "noFallthroughCasesInSwitch": true + }, + "exclude": ["node_modules"], + "include": ["src"] +} diff --git a/packages/expo/tsup.config.ts b/packages/expo/tsup.config.ts new file mode 100644 index 0000000000..e9bf0177a8 --- /dev/null +++ b/packages/expo/tsup.config.ts @@ -0,0 +1,13 @@ +import { defineConfig } from "tsup"; + +export default defineConfig((env) => { + return { + entry: { + index: "src/index.ts", + client: "src/client.ts", + }, + format: ["esm", "cjs"], + bundle: true, + skipNodeModulesBundle: true, + }; +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7ae32423ef..5cf7c30523 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -684,6 +684,9 @@ importers: examples/expo-example: dependencies: + '@better-auth/expo': + specifier: workspace:* + version: link:../../packages/expo '@expo/vector-icons': specifier: ^14.0.2 version: 14.0.4 @@ -711,9 +714,6 @@ importers: babel-plugin-transform-import-meta: specifier: ^2.2.1 version: 2.2.1(@babel/core@7.26.0) - better-auth: - specifier: workspace:* - version: link:../../packages/better-auth expo: specifier: ~51.0.38 version: 51.0.38(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(encoding@0.1.13) @@ -808,6 +808,9 @@ importers: examples/nextjs-example: dependencies: + '@better-auth/expo': + specifier: workspace:* + version: link:../../packages/expo '@hookform/resolvers': specifier: ^3.9.0 version: 3.9.0(react-hook-form@7.53.0(react@19.0.0-rc-7771d3a7-20240827)) @@ -1105,7 +1108,7 @@ importers: version: 2.5.2 tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.14) + version: 1.0.7(tailwindcss@3.4.14(ts-node@10.9.1(@types/node@22.8.4)(typescript@5.6.3))) v-calendar: specifier: ^3.1.2 version: 3.1.2(@popperjs/core@2.11.8)(vue@3.5.12(typescript@5.6.3)) @@ -1648,15 +1651,6 @@ importers: drizzle-orm: specifier: ^0.33.0 version: 0.33.0(@cloudflare/workers-types@4.20241011.0)(@libsql/client@0.12.0)(@prisma/client@5.20.0(prisma@5.20.0))(@types/better-sqlite3@7.6.11)(@types/pg@8.11.10)(@types/react@18.3.9)(better-sqlite3@11.3.0)(bun-types@1.1.32)(kysely@0.27.4)(mysql2@3.11.3)(pg@8.13.0)(postgres@3.4.4)(prisma@5.20.0)(react@18.3.1) - expo-linking: - specifier: ~6.3.1 - version: 6.3.1(expo@51.0.38(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(encoding@0.1.13)) - expo-secure-store: - specifier: ~13.0.2 - version: 13.0.2(expo@51.0.38(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(encoding@0.1.13)) - expo-web-browser: - specifier: ~13.0.3 - version: 13.0.3(expo@51.0.38(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(encoding@0.1.13)) happy-dom: specifier: ^15.7.4 version: 15.7.4 @@ -1774,38 +1768,28 @@ importers: version: 1.6.0(@edge-runtime/vm@3.2.0)(@types/node@22.8.4)(happy-dom@15.7.4)(jsdom@25.0.1)(lightningcss@1.27.0)(terser@5.33.0) packages/expo: - dependencies: - '@better-fetch/fetch': - specifier: 1.1.12 - version: 1.1.12 - nanostores: - specifier: ^0.11.2 - version: 0.11.3 - react: - specifier: 17.0.2 - version: 17.0.2 - react-native: - specifier: ~0.74.6 - version: 0.74.6(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(encoding@0.1.13)(react@17.0.2) devDependencies: better-auth: - specifier: workspace:^ + specifier: workspace:* version: link:../better-auth + better-sqlite3: + specifier: ^11.5.0 + version: 11.5.0 expo-constants: specifier: ~16.0.2 - version: 16.0.2(expo@51.0.38(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(encoding@0.1.13)) + version: 16.0.2(expo@51.0.38(encoding@0.1.13)) expo-linking: specifier: ~6.3.1 - version: 6.3.1(expo@51.0.38(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(encoding@0.1.13)) + version: 6.3.1(expo@51.0.38(encoding@0.1.13)) expo-secure-store: specifier: ~13.0.2 - version: 13.0.2(expo@51.0.38(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(encoding@0.1.13)) + version: 13.0.2(expo@51.0.38(encoding@0.1.13)) expo-web-browser: specifier: ~13.0.3 - version: 13.0.3(expo@51.0.38(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(encoding@0.1.13)) - unbuild: - specifier: ^2.0.0 - version: 2.0.0(typescript@5.6.3) + version: 13.0.3(expo@51.0.38(encoding@0.1.13)) + vitest: + specifier: ^1.6.0 + version: 1.6.0(@edge-runtime/vm@3.2.0)(@types/node@22.8.4)(happy-dom@15.7.4)(jsdom@25.0.1)(lightningcss@1.27.0)(terser@5.33.0) packages: @@ -11498,10 +11482,6 @@ packages: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} - globby@13.2.2: - resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - globby@14.0.2: resolution: {integrity: sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==} engines: {node: '>=18'} @@ -13505,21 +13485,6 @@ packages: engines: {node: '>=10'} hasBin: true - mkdist@1.6.0: - resolution: {integrity: sha512-nD7J/mx33Lwm4Q4qoPgRBVA9JQNKgyE7fLo5vdPWVDdjz96pXglGERp/fRnGPCTB37Kykfxs5bDdXa9BWOT9nw==} - hasBin: true - peerDependencies: - sass: ^1.78.0 - typescript: '>=5.5.4' - vue-tsc: ^1.8.27 || ^2.0.21 - peerDependenciesMeta: - sass: - optional: true - typescript: - optional: true - vue-tsc: - optional: true - mlly@1.7.1: resolution: {integrity: sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==} @@ -15220,10 +15185,6 @@ packages: react: '>=16.13' react-dom: '>=16.13' - react@17.0.2: - resolution: {integrity: sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==} - engines: {node: '>=0.10.0'} - react@18.3.1: resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} engines: {node: '>=0.10.0'} @@ -15562,13 +15523,6 @@ packages: robust-predicates@3.0.2: resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} - rollup-plugin-dts@6.1.1: - resolution: {integrity: sha512-aSHRcJ6KG2IHIioYlvAOcEq6U99sVtqDDKVhnwt70rW6tsz3tv5OSjEiWcgzfsHdLyGXZ/3b/7b/+Za3Y6r1XA==} - engines: {node: '>=16'} - peerDependencies: - rollup: ^3.29.4 || ^4 - typescript: ^4.5 || ^5.0 - rollup-plugin-inject@3.0.2: resolution: {integrity: sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==} deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject. @@ -15589,11 +15543,6 @@ packages: rollup-pluginutils@2.8.2: resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==} - rollup@3.29.5: - resolution: {integrity: sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==} - engines: {node: '>=14.18.0', npm: '>=8.0.0'} - hasBin: true - rollup@4.22.4: resolution: {integrity: sha512-vD8HJ5raRcWOyymsR6Z3o6+RzfEPCnVLMFJ6vRslO1jt4LO6dUo5Qnpg7y4RkZFM2DMe3WUirkI5c16onjrc6A==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -15862,10 +15811,6 @@ packages: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} - slash@4.0.0: - resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} - engines: {node: '>=12'} - slash@5.1.0: resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} engines: {node: '>=14.16'} @@ -16878,15 +16823,6 @@ packages: unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} - unbuild@2.0.0: - resolution: {integrity: sha512-JWCUYx3Oxdzvw2J9kTAp+DKE8df/BnH/JTSj6JyA4SH40ECdFu7FoJJcrm8G92B7TjofQ6GZGjJs50TRxoH6Wg==} - hasBin: true - peerDependencies: - typescript: ^5.1.6 - peerDependenciesMeta: - typescript: - optional: true - uncrypto@0.1.3: resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} @@ -19144,6 +19080,12 @@ snapshots: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-react-jsx-development@7.24.7': + dependencies: + '@babel/plugin-transform-react-jsx': 7.25.2(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-react-jsx-development@7.24.7(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 @@ -19369,6 +19311,17 @@ snapshots: '@babel/types': 7.26.0 esutils: 2.0.3 + '@babel/preset-react@7.24.7': + dependencies: + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-validator-option': 7.24.8 + '@babel/plugin-transform-react-display-name': 7.24.7(@babel/core@7.26.0) + '@babel/plugin-transform-react-jsx': 7.25.2(@babel/core@7.25.2) + '@babel/plugin-transform-react-jsx-development': 7.24.7 + '@babel/plugin-transform-react-pure-annotations': 7.24.7(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color + '@babel/preset-react@7.24.7(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 @@ -19381,6 +19334,16 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/preset-typescript@7.24.7': + dependencies: + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-validator-option': 7.24.8 + '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-modules-commonjs': 7.24.8(@babel/core@7.26.0) + '@babel/plugin-transform-typescript': 7.25.2(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color + '@babel/preset-typescript@7.24.7(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 @@ -21900,7 +21863,7 @@ snapshots: postcss: 8.4.47 postcss-nesting: 12.1.5(postcss@8.4.47) tailwind-config-viewer: 2.0.4(tailwindcss@3.4.14) - tailwindcss: 3.4.14 + tailwindcss: 3.4.14(ts-node@10.9.1(@types/node@22.8.4)(typescript@5.6.3)) ufo: 1.5.4 unctx: 2.3.1 transitivePeerDependencies: @@ -25459,6 +25422,54 @@ snapshots: - '@babel/preset-env' - supports-color + '@react-native/babel-preset@0.74.87': + dependencies: + '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.26.0) + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.26.0) + '@babel/plugin-proposal-export-default-from': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-proposal-logical-assignment-operators': 7.20.7(@babel/core@7.26.0) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.26.0) + '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.26.0) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.26.0) + '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.26.0) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.26.0) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-export-default-from': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-syntax-flow': 7.26.0(@babel/core@7.26.0) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-block-scoping': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-flow-strip-types': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-modules-commonjs': 7.24.8(@babel/core@7.26.0) + '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-react-display-name': 7.24.7(@babel/core@7.26.0) + '@babel/plugin-transform-react-jsx': 7.25.2(@babel/core@7.25.2) + '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-runtime': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-typescript': 7.25.2(@babel/core@7.26.0) + '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.26.0) + '@babel/template': 7.25.9 + '@react-native/babel-plugin-codegen': 0.74.87(@babel/preset-env@7.26.0(@babel/core@7.26.0)) + babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.26.0) + react-refresh: 0.14.2 + transitivePeerDependencies: + - '@babel/preset-env' + - supports-color + '@react-native/babel-preset@0.74.87(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))': dependencies: '@babel/core': 7.26.0 @@ -25672,15 +25683,6 @@ snapshots: '@react-native/normalize-colors@0.74.88': {} - '@react-native/virtualized-lists@0.74.88(@types/react@18.3.12)(react-native@0.74.6(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(encoding@0.1.13)(react@17.0.2))(react@17.0.2)': - dependencies: - invariant: 2.2.4 - nullthrows: 1.1.1 - react: 17.0.2 - react-native: 0.74.6(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(encoding@0.1.13)(react@17.0.2) - optionalDependencies: - '@types/react': 18.3.12 - '@react-native/virtualized-lists@0.74.88(@types/react@18.3.12)(react-native@0.74.6(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(encoding@0.1.13)(react@18.3.1))(react@18.3.1)': dependencies: invariant: 2.2.4 @@ -26090,25 +26092,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@rollup/plugin-alias@5.1.1(rollup@3.29.5)': - optionalDependencies: - rollup: 3.29.5 - '@rollup/plugin-alias@5.1.1(rollup@4.22.4)': optionalDependencies: rollup: 4.22.4 - '@rollup/plugin-commonjs@25.0.8(rollup@3.29.5)': - dependencies: - '@rollup/pluginutils': 5.1.2(rollup@3.29.5) - commondir: 1.0.1 - estree-walker: 2.0.2 - glob: 8.1.0 - is-reference: 1.2.1 - magic-string: 0.30.11 - optionalDependencies: - rollup: 3.29.5 - '@rollup/plugin-commonjs@25.0.8(rollup@4.22.4)': dependencies: '@rollup/pluginutils': 5.1.2(rollup@4.22.4) @@ -26128,28 +26115,12 @@ snapshots: optionalDependencies: rollup: 4.22.4 - '@rollup/plugin-json@6.1.0(rollup@3.29.5)': - dependencies: - '@rollup/pluginutils': 5.1.2(rollup@3.29.5) - optionalDependencies: - rollup: 3.29.5 - '@rollup/plugin-json@6.1.0(rollup@4.22.4)': dependencies: '@rollup/pluginutils': 5.1.2(rollup@4.22.4) optionalDependencies: rollup: 4.22.4 - '@rollup/plugin-node-resolve@15.3.0(rollup@3.29.5)': - dependencies: - '@rollup/pluginutils': 5.1.2(rollup@3.29.5) - '@types/resolve': 1.20.2 - deepmerge: 4.3.1 - is-module: 1.0.0 - resolve: 1.22.8 - optionalDependencies: - rollup: 3.29.5 - '@rollup/plugin-node-resolve@15.3.0(rollup@4.22.4)': dependencies: '@rollup/pluginutils': 5.1.2(rollup@4.22.4) @@ -26160,13 +26131,6 @@ snapshots: optionalDependencies: rollup: 4.22.4 - '@rollup/plugin-replace@5.0.7(rollup@3.29.5)': - dependencies: - '@rollup/pluginutils': 5.1.2(rollup@3.29.5) - magic-string: 0.30.11 - optionalDependencies: - rollup: 3.29.5 - '@rollup/plugin-replace@5.0.7(rollup@4.22.4)': dependencies: '@rollup/pluginutils': 5.1.2(rollup@4.22.4) @@ -26187,14 +26151,6 @@ snapshots: estree-walker: 2.0.2 picomatch: 2.3.1 - '@rollup/pluginutils@5.1.2(rollup@3.29.5)': - dependencies: - '@types/estree': 1.0.6 - estree-walker: 2.0.2 - picomatch: 2.3.1 - optionalDependencies: - rollup: 3.29.5 - '@rollup/pluginutils@5.1.2(rollup@4.22.4)': dependencies: '@types/estree': 1.0.6 @@ -29240,6 +29196,23 @@ snapshots: '@babel/template': 7.25.9 tslib: 2.7.0 + babel-preset-expo@11.0.15: + dependencies: + '@babel/plugin-proposal-decorators': 7.24.7(@babel/core@7.26.0) + '@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.0) + '@babel/preset-react': 7.24.7 + '@babel/preset-typescript': 7.24.7 + '@react-native/babel-preset': 0.74.87 + babel-plugin-react-compiler: 0.0.0-experimental-592953e-20240517 + babel-plugin-react-native-web: 0.19.13 + react-refresh: 0.14.2 + transitivePeerDependencies: + - '@babel/core' + - '@babel/preset-env' + - supports-color + babel-preset-expo@11.0.15(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0)): dependencies: '@babel/plugin-proposal-decorators': 7.24.7(@babel/core@7.26.0) @@ -31974,6 +31947,15 @@ snapshots: transitivePeerDependencies: - supports-color + expo-asset@10.0.10(expo@51.0.38(encoding@0.1.13)): + dependencies: + expo: 51.0.38(encoding@0.1.13) + expo-constants: 16.0.2(expo@51.0.38(encoding@0.1.13)) + invariant: 2.2.4 + md5-file: 3.2.3 + transitivePeerDependencies: + - supports-color + expo-constants@16.0.2(expo@51.0.38(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(encoding@0.1.13)): dependencies: '@expo/config': 9.0.4 @@ -31982,19 +31964,40 @@ snapshots: transitivePeerDependencies: - supports-color + expo-constants@16.0.2(expo@51.0.38(encoding@0.1.13)): + dependencies: + '@expo/config': 9.0.4 + '@expo/env': 0.3.0 + expo: 51.0.38(encoding@0.1.13) + transitivePeerDependencies: + - supports-color + expo-file-system@17.0.1(expo@51.0.38(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(encoding@0.1.13)): dependencies: expo: 51.0.38(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(encoding@0.1.13) + expo-file-system@17.0.1(expo@51.0.38(encoding@0.1.13)): + dependencies: + expo: 51.0.38(encoding@0.1.13) + expo-font@12.0.10(expo@51.0.38(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(encoding@0.1.13)): dependencies: expo: 51.0.38(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(encoding@0.1.13) fontfaceobserver: 2.3.0 + expo-font@12.0.10(expo@51.0.38(encoding@0.1.13)): + dependencies: + expo: 51.0.38(encoding@0.1.13) + fontfaceobserver: 2.3.0 + expo-keep-awake@13.0.2(expo@51.0.38(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(encoding@0.1.13)): dependencies: expo: 51.0.38(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(encoding@0.1.13) + expo-keep-awake@13.0.2(expo@51.0.38(encoding@0.1.13)): + dependencies: + expo: 51.0.38(encoding@0.1.13) + expo-linking@6.3.1(expo@51.0.38(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(encoding@0.1.13)): dependencies: expo-constants: 16.0.2(expo@51.0.38(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(encoding@0.1.13)) @@ -32003,6 +32006,14 @@ snapshots: - expo - supports-color + expo-linking@6.3.1(expo@51.0.38(encoding@0.1.13)): + dependencies: + expo-constants: 16.0.2(expo@51.0.38(encoding@0.1.13)) + invariant: 2.2.4 + transitivePeerDependencies: + - expo + - supports-color + expo-modules-autolinking@1.11.3: dependencies: chalk: 4.1.2 @@ -32048,6 +32059,10 @@ snapshots: dependencies: expo: 51.0.38(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(encoding@0.1.13) + expo-secure-store@13.0.2(expo@51.0.38(encoding@0.1.13)): + dependencies: + expo: 51.0.38(encoding@0.1.13) + expo-splash-screen@0.27.5(encoding@0.1.13)(expo-modules-autolinking@1.11.3)(expo@51.0.38(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(encoding@0.1.13)): dependencies: '@expo/prebuild-config': 7.0.6(encoding@0.1.13)(expo-modules-autolinking@1.11.3) @@ -32080,6 +32095,10 @@ snapshots: dependencies: expo: 51.0.38(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(encoding@0.1.13) + expo-web-browser@13.0.3(expo@51.0.38(encoding@0.1.13)): + dependencies: + expo: 51.0.38(encoding@0.1.13) + expo@51.0.38(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(encoding@0.1.13): dependencies: '@babel/runtime': 7.26.0 @@ -32105,6 +32124,31 @@ snapshots: - supports-color - utf-8-validate + expo@51.0.38(encoding@0.1.13): + dependencies: + '@babel/runtime': 7.26.0 + '@expo/cli': 0.18.30(encoding@0.1.13)(expo-modules-autolinking@1.11.3) + '@expo/config': 9.0.4 + '@expo/config-plugins': 8.0.10 + '@expo/metro-config': 0.18.11 + '@expo/vector-icons': 14.0.4 + babel-preset-expo: 11.0.15 + expo-asset: 10.0.10(expo@51.0.38(encoding@0.1.13)) + expo-file-system: 17.0.1(expo@51.0.38(encoding@0.1.13)) + expo-font: 12.0.10(expo@51.0.38(encoding@0.1.13)) + expo-keep-awake: 13.0.2(expo@51.0.38(encoding@0.1.13)) + expo-modules-autolinking: 1.11.3 + expo-modules-core: 1.12.26 + fbemitter: 3.0.0(encoding@0.1.13) + whatwg-url-without-unicode: 8.0.0-3 + transitivePeerDependencies: + - '@babel/core' + - '@babel/preset-env' + - bufferutil + - encoding + - supports-color + - utf-8-validate + exponential-backoff@3.1.1: {} express@4.21.0: @@ -32890,14 +32934,6 @@ snapshots: merge2: 1.4.1 slash: 3.0.0 - globby@13.2.2: - dependencies: - dir-glob: 3.0.1 - fast-glob: 3.3.2 - ignore: 5.3.2 - merge2: 1.4.1 - slash: 4.0.0 - globby@14.0.2: dependencies: '@sindresorhus/merge-streams': 2.3.0 @@ -35661,24 +35697,6 @@ snapshots: mkdirp@1.0.4: {} - mkdist@1.6.0(typescript@5.6.3): - dependencies: - autoprefixer: 10.4.20(postcss@8.4.47) - citty: 0.1.6 - cssnano: 7.0.6(postcss@8.4.47) - defu: 6.1.4 - esbuild: 0.24.0 - jiti: 1.21.6 - mlly: 1.7.1 - pathe: 1.1.2 - pkg-types: 1.2.0 - postcss: 8.4.47 - postcss-nested: 6.2.0(postcss@8.4.47) - semver: 7.6.3 - tinyglobby: 0.2.9 - optionalDependencies: - typescript: 5.6.3 - mlly@1.7.1: dependencies: acorn: 8.12.1 @@ -37703,57 +37721,6 @@ snapshots: transitivePeerDependencies: - encoding - react-native@0.74.6(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(encoding@0.1.13)(react@17.0.2): - dependencies: - '@jest/create-cache-key-function': 29.7.0 - '@react-native-community/cli': 13.6.9(encoding@0.1.13) - '@react-native-community/cli-platform-android': 13.6.9(encoding@0.1.13) - '@react-native-community/cli-platform-ios': 13.6.9(encoding@0.1.13) - '@react-native/assets-registry': 0.74.88 - '@react-native/codegen': 0.74.88(@babel/preset-env@7.26.0(@babel/core@7.26.0)) - '@react-native/community-cli-plugin': 0.74.88(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(encoding@0.1.13) - '@react-native/gradle-plugin': 0.74.88 - '@react-native/js-polyfills': 0.74.88 - '@react-native/normalize-colors': 0.74.88 - '@react-native/virtualized-lists': 0.74.88(@types/react@18.3.12)(react-native@0.74.6(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(encoding@0.1.13)(react@17.0.2))(react@17.0.2) - abort-controller: 3.0.0 - anser: 1.4.10 - ansi-regex: 5.0.1 - base64-js: 1.5.1 - chalk: 4.1.2 - event-target-shim: 5.0.1 - flow-enums-runtime: 0.0.6 - glob: 7.2.3 - invariant: 2.2.4 - jest-environment-node: 29.7.0 - jsc-android: 250231.0.0 - memoize-one: 5.2.1 - metro-runtime: 0.80.12 - metro-source-map: 0.80.12 - mkdirp: 0.5.6 - nullthrows: 1.1.1 - pretty-format: 26.6.2 - promise: 8.3.0 - react: 17.0.2 - react-devtools-core: 5.3.2 - react-refresh: 0.14.2 - react-shallow-renderer: 16.15.0(react@17.0.2) - regenerator-runtime: 0.13.11 - scheduler: 0.24.0-canary-efb381bbf-20230505 - stacktrace-parser: 0.1.10 - whatwg-fetch: 3.6.20 - ws: 6.2.3 - yargs: 17.7.2 - optionalDependencies: - '@types/react': 18.3.12 - transitivePeerDependencies: - - '@babel/core' - - '@babel/preset-env' - - bufferutil - - encoding - - supports-color - - utf-8-validate - react-native@0.74.6(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(encoding@0.1.13)(react@18.3.1): dependencies: '@jest/create-cache-key-function': 29.7.0 @@ -38167,12 +38134,6 @@ snapshots: '@remix-run/router': 1.19.2 react: 18.3.1 - react-shallow-renderer@16.15.0(react@17.0.2): - dependencies: - object-assign: 4.1.1 - react: 17.0.2 - react-is: 18.3.1 - react-shallow-renderer@16.15.0(react@18.3.1): dependencies: object-assign: 4.1.1 @@ -38286,11 +38247,6 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react@17.0.2: - dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - react@18.3.1: dependencies: loose-envify: 1.4.0 @@ -38802,14 +38758,6 @@ snapshots: robust-predicates@3.0.2: {} - rollup-plugin-dts@6.1.1(rollup@3.29.5)(typescript@5.6.3): - dependencies: - magic-string: 0.30.11 - rollup: 3.29.5 - typescript: 5.6.3 - optionalDependencies: - '@babel/code-frame': 7.26.0 - rollup-plugin-inject@3.0.2: dependencies: estree-walker: 0.6.1 @@ -38836,10 +38784,6 @@ snapshots: estree-walker: 0.6.1 optional: true - rollup@3.29.5: - optionalDependencies: - fsevents: 2.3.3 - rollup@4.22.4: dependencies: '@types/estree': 1.0.5 @@ -39202,8 +39146,6 @@ snapshots: slash@3.0.0: {} - slash@4.0.0: {} - slash@5.1.0: {} slice-ansi@2.1.0: @@ -39762,7 +39704,7 @@ snapshots: open: 7.4.2 portfinder: 1.0.32 replace-in-file: 6.3.5 - tailwindcss: 3.4.14 + tailwindcss: 3.4.14(ts-node@10.9.1(@types/node@22.8.4)(typescript@5.6.3)) transitivePeerDependencies: - supports-color @@ -39795,10 +39737,6 @@ snapshots: dependencies: tailwindcss: 3.4.14(ts-node@10.9.1(@types/node@22.8.4)(typescript@5.6.3)) - tailwindcss-animate@1.0.7(tailwindcss@3.4.14): - dependencies: - tailwindcss: 3.4.14 - tailwindcss@3.4.13(ts-node@10.9.1(@types/node@20.16.9)(typescript@5.6.2)): dependencies: '@alloc/quick-lru': 5.2.0 @@ -39907,33 +39845,6 @@ snapshots: transitivePeerDependencies: - ts-node - tailwindcss@3.4.14: - dependencies: - '@alloc/quick-lru': 5.2.0 - arg: 5.0.2 - chokidar: 3.6.0 - didyoumean: 1.2.2 - dlv: 1.1.3 - fast-glob: 3.3.2 - glob-parent: 6.0.2 - is-glob: 4.0.3 - jiti: 1.21.6 - lilconfig: 2.1.0 - micromatch: 4.0.8 - normalize-path: 3.0.0 - object-hash: 3.0.0 - picocolors: 1.1.0 - postcss: 8.4.47 - postcss-import: 15.1.0(postcss@8.4.47) - postcss-js: 4.0.1(postcss@8.4.47) - postcss-load-config: 4.0.2(postcss@8.4.47)(ts-node@10.9.1(@types/node@20.16.9)(typescript@5.6.3)) - postcss-nested: 6.2.0(postcss@8.4.47) - postcss-selector-parser: 6.1.2 - resolve: 1.22.8 - sucrase: 3.35.0 - transitivePeerDependencies: - - ts-node - tailwindcss@3.4.14(ts-node@10.9.1(@types/node@22.3.0)(typescript@5.6.2)): dependencies: '@alloc/quick-lru': 5.2.0 @@ -40615,39 +40526,6 @@ snapshots: has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 - unbuild@2.0.0(typescript@5.6.3): - dependencies: - '@rollup/plugin-alias': 5.1.1(rollup@3.29.5) - '@rollup/plugin-commonjs': 25.0.8(rollup@3.29.5) - '@rollup/plugin-json': 6.1.0(rollup@3.29.5) - '@rollup/plugin-node-resolve': 15.3.0(rollup@3.29.5) - '@rollup/plugin-replace': 5.0.7(rollup@3.29.5) - '@rollup/pluginutils': 5.1.2(rollup@3.29.5) - chalk: 5.3.0 - citty: 0.1.6 - consola: 3.2.3 - defu: 6.1.4 - esbuild: 0.19.12 - globby: 13.2.2 - hookable: 5.5.3 - jiti: 1.21.6 - magic-string: 0.30.11 - mkdist: 1.6.0(typescript@5.6.3) - mlly: 1.7.1 - pathe: 1.1.2 - pkg-types: 1.2.0 - pretty-bytes: 6.1.1 - rollup: 3.29.5 - rollup-plugin-dts: 6.1.1(rollup@3.29.5)(typescript@5.6.3) - scule: 1.3.0 - untyped: 1.5.0 - optionalDependencies: - typescript: 5.6.3 - transitivePeerDependencies: - - sass - - supports-color - - vue-tsc - uncrypto@0.1.3: {} unctx@2.3.1: