fix: oauth related tests

This commit is contained in:
Bereket Engida
2024-10-31 14:21:27 +03:00
parent 2a27f6f631
commit 7bba87369f
13 changed files with 413 additions and 439 deletions

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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,
});
},

View File

@@ -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<string, string>();
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",
);
});
});

View File

@@ -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"
}
}

View File

@@ -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<string, CookieAttributes> {
const cookieMap = new Map<string, CookieAttributes>();
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> | string | null;
setItemAsync: (key: string, value: string) => Promise<void> | void;
deleteItemAsync: (key: string) => Promise<void> | void;
setItemAsync: (key: string, value: string) => Promise<any> | any;
deleteItemAsync: (key: string) => Promise<any> | any;
};
cookies?: {
name?: string;

View File

@@ -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<string, string>();
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",
);
});
});

View File

@@ -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,
};

View File

@@ -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"]
}

View File

@@ -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,
};
});

488
pnpm-lock.yaml generated
View File

@@ -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: