diff --git a/docs/content/docs/concepts/cookies.mdx b/docs/content/docs/concepts/cookies.mdx index 0da67ebc22..0492be42ad 100644 --- a/docs/content/docs/concepts/cookies.mdx +++ b/docs/content/docs/concepts/cookies.mdx @@ -3,7 +3,7 @@ title: Cookies description: Learn how cookies are used in Better Auth. --- -Cookies are used to store data such as session tokens, OAuth state, and more. All cookies are signed using the `secret` key provided in the auth options. +Cookies are used to store data such as session tokens, session data, OAuth state, and more. All cookies are signed using the `secret` key provided in the auth options or the `BETTER_AUTH_SECRET` environment variable. ### Cookie Prefix diff --git a/docs/content/docs/plugins/stripe.mdx b/docs/content/docs/plugins/stripe.mdx index eba51a242e..6fc9f1a4ad 100644 --- a/docs/content/docs/plugins/stripe.mdx +++ b/docs/content/docs/plugins/stripe.mdx @@ -137,11 +137,11 @@ You can customize the customer creation process: stripe({ // ... other options createCustomerOnSignUp: true, - onCustomerCreate: async ({ customer, stripeCustomer, user }, request) => { + onCustomerCreate: async ({ stripeCustomer, user }, ctx) => { // Do something with the newly created customer - console.log(`Customer ${customer.id} created for user ${user.id}`); + console.log(`Customer ${stripeCustomer.id} created for user ${user.id}`); }, - getCustomerCreateParams: async ({ user, session }, request) => { + getCustomerCreateParams: async (user, ctx) => { // Customize the Stripe customer creation parameters return { metadata: { @@ -570,11 +570,11 @@ You can configure trial periods for your plans: // Called when a trial starts await sendTrialStartEmail(subscription.referenceId); }, - onTrialEnd: async ({ subscription, user }, request) => { + onTrialEnd: async ({ subscription }, ctx) => { // Called when a trial ends - await sendTrialEndEmail(user.email); + await sendTrialEndEmail(subscription.referenceId); }, - onTrialExpired: async (subscription) => { + onTrialExpired: async (subscription, ctx) => { // Called when a trial expires without conversion await sendTrialExpiredEmail(subscription.referenceId); } @@ -711,9 +711,9 @@ stripe({ **createCustomerOnSignUp**: `boolean` - Whether to automatically create a Stripe customer when a user signs up. Default: `false`. -**onCustomerCreate**: `(data: { customer: Customer, stripeCustomer: Stripe.Customer, user: User }, request?: Request) => Promise` - A function called after a customer is created. +**onCustomerCreate**: `(data: { stripeCustomer: Stripe.Customer, user: User }, ctx: GenericEndpointContext) => Promise` - A function called after a customer is created. -**getCustomerCreateParams**: `(data: { user: User, session: Session }, request?: Request) => Promise<{}>` - A function to customize the Stripe customer creation parameters. +**getCustomerCreateParams**: `(user: User, ctx: GenericEndpointContext) => Promise<{}>` - A function to customize the Stripe customer creation parameters. **onEvent**: `(event: Stripe.Event) => Promise` - A function called for any Stripe webhook event. @@ -725,7 +725,7 @@ stripe({ **requireEmailVerification**: `boolean` - Whether to require email verification before allowing subscription upgrades. Default: `false`. -**authorizeReference**: `(data: { user: User, session: Session, referenceId: string, action: "upgrade-subscription" | "list-subscription" | "cancel-subscription" | "restore-subscription"}, request?: Request) => Promise` - A function to authorize reference IDs. +**authorizeReference**: `(data: { user: User, session: Session, referenceId: string, action: "upgrade-subscription" | "list-subscription" | "cancel-subscription" | "restore-subscription"}, ctx: GenericEndpointContext) => Promise` - A function to authorize reference IDs. ### Plan Configuration @@ -748,8 +748,8 @@ Each plan can have the following properties: **freeTrial**: Object containing trial configuration: - **days**: `number` - Number of trial days. - **onTrialStart**: `(subscription: Subscription) => Promise` - Called when a trial starts. - - **onTrialEnd**: `(data: { subscription: Subscription, user: User }, request?: Request) => Promise` - Called when a trial ends. - - **onTrialExpired**: `(subscription: Subscription) => Promise` - Called when a trial expires without conversion. + - **onTrialEnd**: `(data: { subscription: Subscription }, ctx: GenericEndpointContext) => Promise` - Called when a trial ends. + - **onTrialExpired**: `(subscription: Subscription, ctx: GenericEndpointContext) => Promise` - Called when a trial expires without conversion. ## Advanced Usage @@ -795,7 +795,7 @@ subscription: { You can customize the Stripe Checkout session with additional parameters: ```ts title="auth.ts" -getCheckoutSessionParams: async ({ user, session, plan, subscription }, request) => { +getCheckoutSessionParams: async ({ user, session, plan, subscription }, ctx) => { return { params: { allow_promotion_codes: true, @@ -827,7 +827,7 @@ To collect tax IDs from the customer, set `tax_id_collection` to true: ```ts title="auth.ts" subscription: { // ... other options - getCheckoutSessionParams: async ({ user, session, plan, subscription }, request) => { + getCheckoutSessionParams: async ({ user, session, plan, subscription }, ctx) => { return { params: { tax_id_collection: { @@ -846,7 +846,7 @@ To enable automatic tax calculation using the customer's location, set `automati ```ts title="auth.ts" subscription: { // ... other options - getCheckoutSessionParams: async ({ user, session, plan, subscription }, request) => { + getCheckoutSessionParams: async ({ user, session, plan, subscription }, ctx) => { return { params: { automatic_tax: { @@ -903,4 +903,4 @@ For local development, you can use the Stripe CLI to forward webhooks to your lo stripe listen --forward-to localhost:3000/api/auth/stripe/webhook ``` -This will provide you with a webhook signing secret that you can use in your local environment. \ No newline at end of file +This will provide you with a webhook signing secret that you can use in your local environment. diff --git a/packages/better-auth/package.json b/packages/better-auth/package.json index a2ef515254..c03e5ade5d 100644 --- a/packages/better-auth/package.json +++ b/packages/better-auth/package.json @@ -1,6 +1,6 @@ { "name": "better-auth", - "version": "1.4.0-beta.15", + "version": "1.4.0-beta.16", "description": "The most comprehensive authentication framework for TypeScript.", "type": "module", "license": "MIT", @@ -29,402 +29,402 @@ "prepare": "prisma generate --schema ./src/adapters/prisma-adapter/test/base.prisma", "typecheck": "tsc --project tsconfig.json" }, - "main": "./dist/index.js", - "module": "./dist/index.js", + "main": "./dist/index.mjs", + "module": "./dist/index.mjs", "exports": { ".": { "better-auth-dev-source": "./src/index.ts", - "types": "./dist/index.d.ts", - "default": "./dist/index.js" + "types": "./dist/index.d.mts", + "default": "./dist/index.mjs" }, "./social-providers": { "better-auth-dev-source": "./src/social-providers/index.ts", - "types": "./dist/social-providers/index.d.ts", - "default": "./dist/social-providers/index.js" + "types": "./dist/social-providers/index.d.mts", + "default": "./dist/social-providers/index.mjs" }, "./client": { "better-auth-dev-source": "./src/client/index.ts", - "types": "./dist/client/index.d.ts", - "default": "./dist/client/index.js" + "types": "./dist/client/index.d.mts", + "default": "./dist/client/index.mjs" }, "./client/plugins": { "better-auth-dev-source": "./src/client/plugins/index.ts", - "types": "./dist/client/plugins/index.d.ts", - "default": "./dist/client/plugins/index.js" + "types": "./dist/client/plugins/index.d.mts", + "default": "./dist/client/plugins/index.mjs" }, "./types": { "better-auth-dev-source": "./src/types/index.ts", - "types": "./dist/types/index.d.ts", - "default": "./dist/types/index.js" + "types": "./dist/types/index.d.mts", + "default": "./dist/types/index.mjs" }, "./crypto": { "better-auth-dev-source": "./src/crypto/index.ts", - "types": "./dist/crypto/index.d.ts", - "default": "./dist/crypto/index.js" + "types": "./dist/crypto/index.d.mts", + "default": "./dist/crypto/index.mjs" }, "./cookies": { "better-auth-dev-source": "./src/cookies/index.ts", - "types": "./dist/cookies/index.d.ts", - "default": "./dist/cookies/index.js" + "types": "./dist/cookies/index.d.mts", + "default": "./dist/cookies/index.mjs" }, "./oauth2": { "better-auth-dev-source": "./src/oauth2/index.ts", - "types": "./dist/oauth2/index.d.ts", - "default": "./dist/oauth2/index.js" + "types": "./dist/oauth2/index.d.mts", + "default": "./dist/oauth2/index.mjs" }, "./react": { "better-auth-dev-source": "./src/client/react/index.ts", - "types": "./dist/client/react/index.d.ts", - "default": "./dist/client/react/index.js" + "types": "./dist/client/react/index.d.mts", + "default": "./dist/client/react/index.mjs" }, "./solid": { "better-auth-dev-source": "./src/client/solid/index.ts", - "types": "./dist/client/solid/index.d.ts", - "default": "./dist/client/solid/index.js" + "types": "./dist/client/solid/index.d.mts", + "default": "./dist/client/solid/index.mjs" }, "./lynx": { "better-auth-dev-source": "./src/client/lynx/index.ts", - "types": "./dist/client/lynx/index.d.ts", - "default": "./dist/client/lynx/index.js" + "types": "./dist/client/lynx/index.d.mts", + "default": "./dist/client/lynx/index.mjs" }, "./test": { "better-auth-dev-source": "./src/test-utils/index.ts", - "types": "./dist/test-utils/index.d.ts", - "default": "./dist/test-utils/index.js" + "types": "./dist/test-utils/index.d.mts", + "default": "./dist/test-utils/index.mjs" }, "./api": { "better-auth-dev-source": "./src/api/index.ts", - "types": "./dist/api/index.d.ts", - "default": "./dist/api/index.js" + "types": "./dist/api/index.d.mts", + "default": "./dist/api/index.mjs" }, "./db": { "better-auth-dev-source": "./src/db/index.ts", - "types": "./dist/db/index.d.ts", - "default": "./dist/db/index.js" + "types": "./dist/db/index.d.mts", + "default": "./dist/db/index.mjs" }, "./vue": { "better-auth-dev-source": "./src/client/vue/index.ts", - "types": "./dist/client/vue/index.d.ts", - "default": "./dist/client/vue/index.js" + "types": "./dist/client/vue/index.d.mts", + "default": "./dist/client/vue/index.mjs" }, "./plugins": { "better-auth-dev-source": "./src/plugins/index.ts", - "types": "./dist/plugins/index.d.ts", - "default": "./dist/plugins/index.js" + "types": "./dist/plugins/index.d.mts", + "default": "./dist/plugins/index.mjs" }, "./svelte-kit": { "better-auth-dev-source": "./src/integrations/svelte-kit.ts", - "types": "./dist/integrations/svelte-kit.d.ts", - "default": "./dist/integrations/svelte-kit.js" + "types": "./dist/integrations/svelte-kit.d.mts", + "default": "./dist/integrations/svelte-kit.mjs" }, "./solid-start": { "better-auth-dev-source": "./src/integrations/solid-start.ts", - "types": "./dist/integrations/solid-start.d.ts", - "default": "./dist/integrations/solid-start.js" + "types": "./dist/integrations/solid-start.d.mts", + "default": "./dist/integrations/solid-start.mjs" }, "./svelte": { "better-auth-dev-source": "./src/client/svelte/index.ts", - "types": "./dist/client/svelte/index.d.ts", - "default": "./dist/client/svelte/index.js" + "types": "./dist/client/svelte/index.d.mts", + "default": "./dist/client/svelte/index.mjs" }, "./next-js": { "better-auth-dev-source": "./src/integrations/next-js.ts", - "types": "./dist/integrations/next-js.d.ts", - "default": "./dist/integrations/next-js.js" + "types": "./dist/integrations/next-js.d.mts", + "default": "./dist/integrations/next-js.mjs" }, "./react-start": { "better-auth-dev-source": "./src/integrations/react-start.ts", - "types": "./dist/integrations/react-start.d.ts", - "default": "./dist/integrations/react-start.js" + "types": "./dist/integrations/react-start.d.mts", + "default": "./dist/integrations/react-start.mjs" }, "./node": { "better-auth-dev-source": "./src/integrations/node.ts", - "types": "./dist/integrations/node.d.ts", - "default": "./dist/integrations/node.js" + "types": "./dist/integrations/node.d.mts", + "default": "./dist/integrations/node.mjs" }, "./adapters/prisma": { "better-auth-dev-source": "./src/adapters/prisma-adapter/index.ts", - "types": "./dist/adapters/prisma-adapter/index.d.ts", - "default": "./dist/adapters/prisma-adapter/index.js" + "types": "./dist/adapters/prisma-adapter/index.d.mts", + "default": "./dist/adapters/prisma-adapter/index.mjs" }, "./adapters/drizzle": { "better-auth-dev-source": "./src/adapters/drizzle-adapter/index.ts", - "types": "./dist/adapters/drizzle-adapter/index.d.ts", - "default": "./dist/adapters/drizzle-adapter/index.js" + "types": "./dist/adapters/drizzle-adapter/index.d.mts", + "default": "./dist/adapters/drizzle-adapter/index.mjs" }, "./adapters/mongodb": { "better-auth-dev-source": "./src/adapters/mongodb-adapter/index.ts", - "types": "./dist/adapters/mongodb-adapter/index.d.ts", - "default": "./dist/adapters/mongodb-adapter/index.js" + "types": "./dist/adapters/mongodb-adapter/index.d.mts", + "default": "./dist/adapters/mongodb-adapter/index.mjs" }, "./adapters/memory": { "better-auth-dev-source": "./src/adapters/memory-adapter/index.ts", - "types": "./dist/adapters/memory-adapter/index.d.ts", - "default": "./dist/adapters/memory-adapter/index.js" + "types": "./dist/adapters/memory-adapter/index.d.mts", + "default": "./dist/adapters/memory-adapter/index.mjs" }, "./adapters/test": { "better-auth-dev-source": "./src/adapters/test.ts", - "types": "./dist/adapters/test.d.ts", - "default": "./dist/adapters/test.js" + "types": "./dist/adapters/test.d.mts", + "default": "./dist/adapters/test.mjs" }, "./adapters": { "better-auth-dev-source": "./src/adapters/index.ts", - "types": "./dist/adapters/index.d.ts", - "default": "./dist/adapters/index.js" + "types": "./dist/adapters/index.d.mts", + "default": "./dist/adapters/index.mjs" }, "./plugins/access": { "better-auth-dev-source": "./src/plugins/access/index.ts", - "types": "./dist/plugins/access/index.d.ts", - "default": "./dist/plugins/access/index.js" + "types": "./dist/plugins/access/index.d.mts", + "default": "./dist/plugins/access/index.mjs" }, "./plugins/admin": { "better-auth-dev-source": "./src/plugins/admin/index.ts", - "types": "./dist/plugins/admin/index.d.ts", - "default": "./dist/plugins/admin/index.js" + "types": "./dist/plugins/admin/index.d.mts", + "default": "./dist/plugins/admin/index.mjs" }, "./plugins/admin/access": { "better-auth-dev-source": "./src/plugins/admin/access/index.ts", - "types": "./dist/plugins/admin/access/index.d.ts", - "default": "./dist/plugins/admin/access/index.js" + "types": "./dist/plugins/admin/access/index.d.mts", + "default": "./dist/plugins/admin/access/index.mjs" }, "./plugins/anonymous": { "better-auth-dev-source": "./src/plugins/anonymous/index.ts", - "types": "./dist/plugins/anonymous/index.d.ts", - "default": "./dist/plugins/anonymous/index.js" + "types": "./dist/plugins/anonymous/index.d.mts", + "default": "./dist/plugins/anonymous/index.mjs" }, "./plugins/bearer": { "better-auth-dev-source": "./src/plugins/bearer/index.ts", - "types": "./dist/plugins/bearer/index.d.ts", - "default": "./dist/plugins/bearer/index.js" + "types": "./dist/plugins/bearer/index.d.mts", + "default": "./dist/plugins/bearer/index.mjs" }, "./plugins/custom-session": { "better-auth-dev-source": "./src/plugins/custom-session/index.ts", - "types": "./dist/plugins/custom-session/index.d.ts", - "default": "./dist/plugins/custom-session/index.js" + "types": "./dist/plugins/custom-session/index.d.mts", + "default": "./dist/plugins/custom-session/index.mjs" }, "./plugins/email-otp": { "better-auth-dev-source": "./src/plugins/email-otp/index.ts", - "types": "./dist/plugins/email-otp/index.d.ts", - "default": "./dist/plugins/email-otp/index.js" + "types": "./dist/plugins/email-otp/index.d.mts", + "default": "./dist/plugins/email-otp/index.mjs" }, "./plugins/generic-oauth": { "better-auth-dev-source": "./src/plugins/generic-oauth/index.ts", - "types": "./dist/plugins/generic-oauth/index.d.ts", - "default": "./dist/plugins/generic-oauth/index.js" + "types": "./dist/plugins/generic-oauth/index.d.mts", + "default": "./dist/plugins/generic-oauth/index.mjs" }, "./plugins/jwt": { "better-auth-dev-source": "./src/plugins/jwt/index.ts", - "types": "./dist/plugins/jwt/index.d.ts", - "default": "./dist/plugins/jwt/index.js" + "types": "./dist/plugins/jwt/index.d.mts", + "default": "./dist/plugins/jwt/index.mjs" }, "./plugins/haveibeenpwned": { "better-auth-dev-source": "./src/plugins/haveibeenpwned/index.ts", - "types": "./dist/plugins/haveibeenpwned/index.d.ts", - "default": "./dist/plugins/haveibeenpwned/index.js" + "types": "./dist/plugins/haveibeenpwned/index.d.mts", + "default": "./dist/plugins/haveibeenpwned/index.mjs" }, "./plugins/oidc-provider": { "better-auth-dev-source": "./src/plugins/oidc-provider/index.ts", - "types": "./dist/plugins/oidc-provider/index.d.ts", - "default": "./dist/plugins/oidc-provider/index.js" + "types": "./dist/plugins/oidc-provider/index.d.mts", + "default": "./dist/plugins/oidc-provider/index.mjs" }, "./plugins/magic-link": { "better-auth-dev-source": "./src/plugins/magic-link/index.ts", - "types": "./dist/plugins/magic-link/index.d.ts", - "default": "./dist/plugins/magic-link/index.js" + "types": "./dist/plugins/magic-link/index.d.mts", + "default": "./dist/plugins/magic-link/index.mjs" }, "./plugins/multi-session": { "better-auth-dev-source": "./src/plugins/multi-session/index.ts", - "types": "./dist/plugins/multi-session/index.d.ts", - "default": "./dist/plugins/multi-session/index.js" + "types": "./dist/plugins/multi-session/index.d.mts", + "default": "./dist/plugins/multi-session/index.mjs" }, "./plugins/oauth-proxy": { "better-auth-dev-source": "./src/plugins/oauth-proxy/index.ts", - "types": "./dist/plugins/oauth-proxy/index.d.ts", - "default": "./dist/plugins/oauth-proxy/index.js" + "types": "./dist/plugins/oauth-proxy/index.d.mts", + "default": "./dist/plugins/oauth-proxy/index.mjs" }, "./plugins/organization": { "better-auth-dev-source": "./src/plugins/organization/index.ts", - "types": "./dist/plugins/organization/index.d.ts", - "default": "./dist/plugins/organization/index.js" + "types": "./dist/plugins/organization/index.d.mts", + "default": "./dist/plugins/organization/index.mjs" }, "./plugins/organization/access": { "better-auth-dev-source": "./src/plugins/organization/access/index.ts", - "types": "./dist/plugins/organization/access/index.d.ts", - "default": "./dist/plugins/organization/access/index.js" + "types": "./dist/plugins/organization/access/index.d.mts", + "default": "./dist/plugins/organization/access/index.mjs" }, "./plugins/one-time-token": { "better-auth-dev-source": "./src/plugins/one-time-token/index.ts", - "types": "./dist/plugins/one-time-token/index.d.ts", - "default": "./dist/plugins/one-time-token/index.js" + "types": "./dist/plugins/one-time-token/index.d.mts", + "default": "./dist/plugins/one-time-token/index.mjs" }, "./plugins/phone-number": { "better-auth-dev-source": "./src/plugins/phone-number/index.ts", - "types": "./dist/plugins/phone-number/index.d.ts", - "default": "./dist/plugins/phone-number/index.js" + "types": "./dist/plugins/phone-number/index.d.mts", + "default": "./dist/plugins/phone-number/index.mjs" }, "./plugins/two-factor": { "better-auth-dev-source": "./src/plugins/two-factor/index.ts", - "types": "./dist/plugins/two-factor/index.d.ts", - "default": "./dist/plugins/two-factor/index.js" + "types": "./dist/plugins/two-factor/index.d.mts", + "default": "./dist/plugins/two-factor/index.mjs" }, "./plugins/username": { "better-auth-dev-source": "./src/plugins/username/index.ts", - "types": "./dist/plugins/username/index.d.ts", - "default": "./dist/plugins/username/index.js" + "types": "./dist/plugins/username/index.d.mts", + "default": "./dist/plugins/username/index.mjs" }, "./plugins/siwe": { "better-auth-dev-source": "./src/plugins/siwe/index.ts", - "types": "./dist/plugins/siwe/index.d.ts", - "default": "./dist/plugins/siwe/index.js" + "types": "./dist/plugins/siwe/index.d.mts", + "default": "./dist/plugins/siwe/index.mjs" }, "./plugins/device-authorization": { "better-auth-dev-source": "./src/plugins/device-authorization/index.ts", - "types": "./dist/plugins/device-authorization/index.d.ts", - "default": "./dist/plugins/device-authorization/index.js" + "types": "./dist/plugins/device-authorization/index.d.mts", + "default": "./dist/plugins/device-authorization/index.mjs" } }, "typesVersions": { "*": { "*": [ - "./dist/index.d.ts" + "./dist/index.d.mts" ], "node": [ - "./dist/integrations/node.d.ts" + "./dist/integrations/node.d.mts" ], "react": [ - "./dist/client/react/index.d.ts" + "./dist/client/react/index.d.mts" ], "vue": [ - "./dist/client/vue/index.d.ts" + "./dist/client/vue/index.d.mts" ], "svelte": [ - "./dist/client/svelte/index.d.ts" + "./dist/client/svelte/index.d.mts" ], "social-providers": [ - "./dist/social-providers/index.d.ts" + "./dist/social-providers/index.d.mts" ], "client": [ - "./dist/client/index.d.ts" + "./dist/client/index.d.mts" ], "client/plugins": [ - "./dist/client/plugins/index.d.ts" + "./dist/client/plugins/index.d.mts" ], "types": [ - "./dist/types/index.d.ts" + "./dist/types/index.d.mts" ], "crypto": [ - "./dist/crypto/index.d.ts" + "./dist/crypto/index.d.mts" ], "cookies": [ - "./dist/cookies/index.d.ts" + "./dist/cookies/index.d.mts" ], "oauth2": [ - "./dist/oauth2/index.d.ts" + "./dist/oauth2/index.d.mts" ], "solid": [ - "./dist/client/solid/index.d.ts" + "./dist/client/solid/index.d.mts" ], "lynx": [ - "./dist/client/lynx/index.d.ts" + "./dist/client/lynx/index.d.mts" ], "api": [ - "./dist/api/index.d.ts" + "./dist/api/index.d.mts" ], "db": [ - "./dist/db/index.d.ts" + "./dist/db/index.d.mts" ], "svelte-kit": [ - "./dist/integrations/svelte-kit.d.ts" + "./dist/integrations/svelte-kit.d.mts" ], "solid-start": [ - "./dist/integrations/solid-start.d.ts" + "./dist/integrations/solid-start.d.mts" ], "next-js": [ - "./dist/integrations/next-js.d.ts" + "./dist/integrations/next-js.d.mts" ], "react-start": [ - "./dist/integrations/react-start.d.ts" + "./dist/integrations/react-start.d.mts" ], "adapters": [ - "./dist/adapters/index.d.ts" + "./dist/adapters/index.d.mts" ], "adapters/prisma": [ - "./dist/adapters/prisma-adapter/index.d.ts" + "./dist/adapters/prisma-adapter/index.d.mts" ], "adapters/drizzle": [ - "./dist/adapters/drizzle-adapter/index.d.ts" + "./dist/adapters/drizzle-adapter/index.d.mts" ], "adapters/mongodb": [ - "./dist/adapters/mongodb-adapter/index.d.ts" + "./dist/adapters/mongodb-adapter/index.d.mts" ], "adapters/memory": [ - "./dist/adapters/memory-adapter/index.d.ts" + "./dist/adapters/memory-adapter/index.d.mts" ], "plugins": [ - "./dist/plugins/index.d.ts" + "./dist/plugins/index.d.mts" ], "plugins/access": [ - "./dist/plugins/access/index.d.ts" + "./dist/plugins/access/index.d.mts" ], "plugins/admin": [ - "./dist/plugins/admin/index.d.ts" + "./dist/plugins/admin/index.d.mts" ], "plugins/admin/access": [ - "./dist/plugins/admin/access/index.d.ts" + "./dist/plugins/admin/access/index.d.mts" ], "plugins/anonymous": [ - "./dist/plugins/anonymous/index.d.ts" + "./dist/plugins/anonymous/index.d.mts" ], "plugins/bearer": [ - "./dist/plugins/bearer/index.d.ts" + "./dist/plugins/bearer/index.d.mts" ], "plugins/custom-session": [ - "./dist/plugins/custom-session/index.d.ts" + "./dist/plugins/custom-session/index.d.mts" ], "plugins/email-otp": [ - "./dist/plugins/email-otp/index.d.ts" + "./dist/plugins/email-otp/index.d.mts" ], "plugins/generic-oauth": [ - "./dist/plugins/generic-oauth/index.d.ts" + "./dist/plugins/generic-oauth/index.d.mts" ], "plugins/haveibeenpwned": [ - "./dist/plugins/haveibeenpwned/index.d.ts" + "./dist/plugins/haveibeenpwned/index.d.mts" ], "plugins/oauth-proxy": [ - "./dist/plugins/oauth-proxy/index.d.ts" + "./dist/plugins/oauth-proxy/index.d.mts" ], "plugins/one-time-token": [ - "./dist/plugins/one-time-token/index.d.ts" + "./dist/plugins/one-time-token/index.d.mts" ], "plugins/oidc-provider": [ - "./dist/plugins/oidc-provider/index.d.ts" + "./dist/plugins/oidc-provider/index.d.mts" ], "plugins/jwt": [ - "./dist/plugins/jwt/index.d.ts" + "./dist/plugins/jwt/index.d.mts" ], "plugins/magic-link": [ - "./dist/plugins/magic-link/index.d.ts" + "./dist/plugins/magic-link/index.d.mts" ], "plugins/organization": [ - "./dist/plugins/organization/index.d.ts" + "./dist/plugins/organization/index.d.mts" ], "plugins/organization/access": [ - "./dist/plugins/organization/access/index.d.ts" + "./dist/plugins/organization/access/index.d.mts" ], "plugins/phone-number": [ - "./dist/plugins/phone-number/index.d.ts" + "./dist/plugins/phone-number/index.d.mts" ], "plugins/two-factor": [ - "./dist/plugins/two-factor/index.d.ts" + "./dist/plugins/two-factor/index.d.mts" ], "plugins/username": [ - "./dist/plugins/username/index.d.ts" + "./dist/plugins/username/index.d.mts" ], "plugins/siwe": [ - "./dist/plugins/siwe/index.d.ts" + "./dist/plugins/siwe/index.d.mts" ], "plugins/device-authorization": [ - "./dist/plugins/device-authorization/index.d.ts" + "./dist/plugins/device-authorization/index.d.mts" ] } }, @@ -514,7 +514,7 @@ "tarn": "^3.0.2", "tedious": "^18.6.1", "tsdown": "catalog:", - "type-fest": "^4.41.0", + "type-fest": "^5.2.0", "typescript": "catalog:", "vue": "^3.5.18" }, diff --git a/packages/better-auth/src/adapters/adapter-factory/index.ts b/packages/better-auth/src/adapters/adapter-factory/index.ts index ff1a1dfa7d..516cbfef06 100644 --- a/packages/better-auth/src/adapters/adapter-factory/index.ts +++ b/packages/better-auth/src/adapters/adapter-factory/index.ts @@ -333,7 +333,7 @@ export const createAdapterFactory = }); } for (const field in fields) { - const value = data[field]; + let value = data[field]; const fieldAttributes = fields[field]; let newFieldName: string = @@ -347,6 +347,26 @@ export const createAdapterFactory = ) { continue; } + + // In some endpoints (like signUpEmail) where there isn't proper Zod validation, + // we might recieve a date as a string (this is because of the client converting the Date to a string + // when sending to the server). Because of this, we'll convert the string to a Date. + if ( + fieldAttributes && + fieldAttributes.type === "date" && + !(value instanceof Date) && + typeof value === "string" + ) { + try { + value = new Date(value); + } catch { + logger.error("[Adapter Factory] Failed to convert string to date", { + value, + field, + }); + } + } + // If the value is undefined, but the fieldAttr provides a `defaultValue`, then we'll use that. let newValue = withApplyDefault(value, fieldAttributes!, action); diff --git a/packages/better-auth/src/adapters/tests/auth-flow.ts b/packages/better-auth/src/adapters/tests/auth-flow.ts index 4fe607631f..280fe0a3ce 100644 --- a/packages/better-auth/src/adapters/tests/auth-flow.ts +++ b/packages/better-auth/src/adapters/tests/auth-flow.ts @@ -1,4 +1,6 @@ import { expect } from "vitest"; +import { setCookieToHeader } from "../../cookies"; +import type { Session, User } from "../../types"; import { createTestSuite } from "../create-test-suite"; /** @@ -6,21 +8,30 @@ import { createTestSuite } from "../create-test-suite"; */ export const authFlowTestSuite = createTestSuite( "auth-flow", - {}, + { + defaultBetterAuthOptions: { + emailAndPassword: { + enabled: true, + password: { + hash: async (password) => password, + async verify(data) { + return data.hash === data.password; + }, + }, + }, + }, + }, ( - { generate, getAuth, modifyBetterAuthOptions, tryCatch }, + { + generate, + getAuth, + modifyBetterAuthOptions, + tryCatch, + getBetterAuthOptions, + }, debug?: { showDB?: () => Promise } | undefined, ) => ({ "should successfully sign up": async () => { - await modifyBetterAuthOptions( - { - emailAndPassword: { - enabled: true, - password: { hash: async (password) => password }, - }, - }, - false, - ); const auth = await getAuth(); const user = await generate("user"); const start = Date.now(); @@ -43,20 +54,6 @@ export const authFlowTestSuite = createTestSuite( expect(result.user.updatedAt).toBeDefined(); }, "should successfully sign in": async () => { - await modifyBetterAuthOptions( - { - emailAndPassword: { - enabled: true, - password: { - hash: async (password) => password, - async verify(data) { - return data.hash === data.password; - }, - }, - }, - }, - false, - ); const auth = await getAuth(); const user = await generate("user"); const password = crypto.randomUUID(); @@ -78,51 +75,37 @@ export const authFlowTestSuite = createTestSuite( expect(result.user.id).toBe(signUpResult.user.id); }, "should successfully get session": async () => { - await modifyBetterAuthOptions( - { - emailAndPassword: { - enabled: true, - password: { hash: async (password) => password }, - }, - }, - false, - ); const auth = await getAuth(); const user = await generate("user"); const password = crypto.randomUUID(); - - const { headers, response: signUpResult } = await auth.api.signUpEmail({ + const response = await auth.api.signUpEmail({ body: { email: user.email, password: password, name: user.name, image: user.image || "", }, - returnHeaders: true, + asResponse: true, }); - - // Convert set-cookie header to cookie header for getSession call - const modifiedHeaders = new Headers(headers); - if (headers.has("set-cookie")) { - modifiedHeaders.set("cookie", headers.getSetCookie().join("; ")); - modifiedHeaders.delete("set-cookie"); - } - + const headers = new Headers(); + setCookieToHeader(headers)({ response }); const start = Date.now(); const result = await auth.api.getSession({ - headers: modifiedHeaders, + headers, }); const end = Date.now(); console.log(`getSession took ${end - start}ms`); + const signUpResult = (await response.json()) as { + user: User; + session: Session; + }; + signUpResult.user.createdAt = new Date(signUpResult.user.createdAt); + signUpResult.user.updatedAt = new Date(signUpResult.user.updatedAt); expect(result?.user).toBeDefined(); expect(result?.user).toStrictEqual(signUpResult.user); expect(result?.session).toBeDefined(); }, "should not sign in with invalid email": async () => { - await modifyBetterAuthOptions( - { emailAndPassword: { enabled: true } }, - false, - ); const auth = await getAuth(); const user = await generate("user"); const { data, error } = await tryCatch( @@ -136,10 +119,6 @@ export const authFlowTestSuite = createTestSuite( "should store and retrieve timestamps correctly across timezones": async () => { using _ = recoverProcessTZ(); - await modifyBetterAuthOptions( - { emailAndPassword: { enabled: true } }, - false, - ); const auth = await getAuth(); const user = await generate("user"); const password = crypto.randomUUID(); @@ -160,6 +139,32 @@ export const authFlowTestSuite = createTestSuite( userSignIn.user.createdAt.toISOString(), ); }, + "should sign up with additional fields": async () => { + await modifyBetterAuthOptions( + { user: { additionalFields: { dateField: { type: "date" } } } }, + true, + ); + const auth = await getAuth(); + const user = await generate("user"); + const dateField = new Date(); + const response = await auth.api.signUpEmail({ + body: { + email: user.email, + name: user.name, + password: crypto.randomUUID(), + //@ts-expect-error - we are testing with additional fields + dateField: dateField.toISOString(), // using iso string to simulate client to server communication (this should be converted back to Date) + }, + asResponse: true, + }); + const headers = new Headers(); + setCookieToHeader(headers)({ response }); + const result = await auth.api.getSession({ + headers, + }); + //@ts-expect-error - we are testing with additional fields + expect(result?.user.dateField).toStrictEqual(dateField); + }, }), ); diff --git a/packages/better-auth/src/adapters/tests/normal.ts b/packages/better-auth/src/adapters/tests/normal.ts index 3918528784..9e31d468d0 100644 --- a/packages/better-auth/src/adapters/tests/normal.ts +++ b/packages/better-auth/src/adapters/tests/normal.ts @@ -113,6 +113,74 @@ export const getNormalTestSuiteTests = ({ }); expect(nullableReference).toBeNull(); }, + + "create - should apply default values to fields": async () => { + await modifyBetterAuthOptions( + { + user: { + additionalFields: { + testField: { + type: "string", + defaultValue: "test-value", + }, + cbDefaultValueField: { + type: "string", + defaultValue: () => { + return "advanced-test-value"; + }, + }, + }, + }, + plugins: [ + { + id: "default-fields-test", + schema: { + testModel: { + fields: { + testField: { + type: "string", + defaultValue: "test-value", + }, + cbDefaultValueField: { + type: "string", + defaultValue: () => { + return "advanced-test-value"; + }, + }, + }, + }, + }, + }, + ], + }, + true, + ); + const result = await adapter.create<{ + testField?: string; + id: string; + cbDefaultValueField?: string; + }>({ + model: "testModel", + data: {}, + }); + expect(result.id).toBeDefined(); + expect(result.id).toBeTypeOf("string"); + expect(result.testField).toBe("test-value"); + expect(result.cbDefaultValueField).toBe("advanced-test-value"); + + const userResult = await adapter.create< + User & { testField?: string; cbDefaultValueField?: string } + >({ + model: "user", + data: { + ...(await generate("user")), + }, + forceAllowId: true, + }); + expect(userResult).toBeDefined(); + expect(userResult?.testField).toBe("test-value"); + expect(userResult?.cbDefaultValueField).toBe("advanced-test-value"); + }, "findOne - should find a model": async () => { const [user] = await insertRandom("user"); const result = await adapter.findOne({ @@ -121,6 +189,103 @@ export const getNormalTestSuiteTests = ({ }); expect(result).toEqual(user); }, + "findOne - should not apply defaultValue if value not found": async () => { + await modifyBetterAuthOptions( + { + user: { + additionalFields: { + testField: { + type: "string", + required: false, + defaultValue: "test-value", + }, + cbDefaultValueField: { + type: "string", + required: false, + defaultValue: () => { + return "advanced-test-value"; + }, + }, + }, + }, + plugins: [ + { + id: "default-fields-test", + schema: { + testModel: { + fields: { + testField: { + type: "string", + required: false, + defaultValue: "test-value", + }, + cbDefaultValueField: { + type: "string", + required: false, + defaultValue: () => { + return "advanced-test-value"; + }, + }, + }, + }, + }, + }, + ], + }, + true, + ); + const first = await adapter.create<{ + testField?: string | null; + id: string; + cbDefaultValueField?: string | null; + }>({ + model: "testModel", + data: { + testField: null, + cbDefaultValueField: null, + }, + }); + const second = await adapter.create< + User & { + testField?: string | null; + cbDefaultValueField?: string | null; + } + >({ + model: "user", + data: { + ...(await generate("user")), + testField: null, + cbDefaultValueField: null, + }, + forceAllowId: true, + }); + + const result = await adapter.findOne<{ + testField?: string; + id: string; + cbDefaultValueField?: string; + }>({ + model: "testModel", + where: [{ field: "id", value: first.id }], + }); + expect(result).not.toBeNull(); + expect(result?.testField).toBeNull(); + expect(result?.cbDefaultValueField).toBeNull(); + + const resultTwo = await adapter.findMany< + User & { + testField?: string | null; + cbDefaultValueField?: string | null; + } + >({ + model: "user", + where: [{ field: "id", value: second.id }], + }); + expect(resultTwo).not.toBeNull(); + expect(resultTwo.length).toBe(1); + expect(resultTwo[0]?.testField).toBeNull(); + expect(resultTwo[0]?.cbDefaultValueField).toBeNull(); + }, "findOne - should find a model using a reference field": async () => { const [user, session] = await insertRandom("session"); const result = await adapter.findOne({ diff --git a/packages/better-auth/src/adapters/utils.ts b/packages/better-auth/src/adapters/utils.ts index bad0eb99aa..977b238219 100644 --- a/packages/better-auth/src/adapters/utils.ts +++ b/packages/better-auth/src/adapters/utils.ts @@ -15,12 +15,15 @@ export function withApplyDefault( } return value; } - if (value === undefined || value === null) { - if (field.defaultValue !== undefined) { - if (typeof field.defaultValue === "function") { - return field.defaultValue(); + if (action === "create") { + // we do not want to apply default values if the value is null & not required + if (value === undefined || (field.required === true && value === null)) { + if (field.defaultValue !== undefined) { + if (typeof field.defaultValue === "function") { + return field.defaultValue(); + } + return field.defaultValue; } - return field.defaultValue; } } return value; diff --git a/packages/better-auth/src/index.ts b/packages/better-auth/src/index.ts index 7a78c00046..35987cce6b 100644 --- a/packages/better-auth/src/index.ts +++ b/packages/better-auth/src/index.ts @@ -1,12 +1,14 @@ //#region Re-exports necessaries from core module +export type { StandardSchemaV1 } from "@better-auth/core"; export * from "@better-auth/core"; -//#endregion export { getCurrentAdapter } from "@better-auth/core/context"; export * from "@better-auth/core/env"; export * from "@better-auth/core/error"; export * from "@better-auth/core/oauth2"; export * from "@better-auth/core/utils"; +//#endregion +export type * from "better-call"; export * from "./auth"; export * from "./types"; export * from "./utils"; diff --git a/packages/better-auth/src/plugins/mcp/authorize.ts b/packages/better-auth/src/plugins/mcp/authorize.ts index ca3f6daaaf..24a8ed12e8 100644 --- a/packages/better-auth/src/plugins/mcp/authorize.ts +++ b/packages/better-auth/src/plugins/mcp/authorize.ts @@ -91,14 +91,14 @@ export async function authorizeMCPOAuth( } return { ...res, - redirectURLs: res.redirectURLs.split(","), + redirectUrls: res.redirectUrls.split(","), metadata: res.metadata ? JSON.parse(res.metadata) : {}, } as Client; }); if (!client) { throw ctx.redirect(`${ctx.context.baseURL}/error?error=invalid_client`); } - const redirectURI = client.redirectURLs.find( + const redirectURI = client.redirectUrls.find( (url) => url === ctx.query.redirect_uri, ); diff --git a/packages/better-auth/src/plugins/mcp/index.ts b/packages/better-auth/src/plugins/mcp/index.ts index d3d9005c48..2148e26be8 100644 --- a/packages/better-auth/src/plugins/mcp/index.ts +++ b/packages/better-auth/src/plugins/mcp/index.ts @@ -453,7 +453,7 @@ export const mcp = (options: MCPOptions) => { } return { ...res, - redirectURLs: res.redirectURLs.split(","), + redirectUrls: res.redirectUrls.split(","), metadata: res.metadata ? JSON.parse(res.metadata) : {}, } as Client; }); @@ -722,7 +722,7 @@ export const mcp = (options: MCPOptions) => { description: "Secret key for the client. Not included for public clients.", }, - redirectURLs: { + redirectUrls: { type: "array", items: { type: "string", format: "uri" }, description: "List of allowed redirect URLs", @@ -763,7 +763,7 @@ export const mcp = (options: MCPOptions) => { required: [ "name", "clientId", - "redirectURLs", + "redirectUrls", "type", "authenticationScheme", "disabled", @@ -844,7 +844,7 @@ export const mcp = (options: MCPOptions) => { metadata: body.metadata ? JSON.stringify(body.metadata) : null, clientId: clientId, clientSecret: finalClientSecret, - redirectURLs: body.redirect_uris.join(","), + redirectUrls: body.redirect_uris.join(","), type: clientType, authenticationScheme: body.token_endpoint_auth_method || "client_secret_basic", diff --git a/packages/better-auth/src/plugins/mcp/mcp.test.ts b/packages/better-auth/src/plugins/mcp/mcp.test.ts index fed9124186..43d112dfe7 100644 --- a/packages/better-auth/src/plugins/mcp/mcp.test.ts +++ b/packages/better-auth/src/plugins/mcp/mcp.test.ts @@ -106,7 +106,7 @@ describe("mcp", async () => { publicClient = { clientId: (createdClient.data as any).client_id, clientSecret: "", // Public clients don't have secrets, but our type expects a string - redirectURLs: (createdClient.data as any).redirect_uris, + redirectUrls: (createdClient.data as any).redirect_uris, metadata: {}, icon: (createdClient.data as any).logo_uri || "", type: "public", @@ -152,7 +152,7 @@ describe("mcp", async () => { confidentialClient = { clientId: (createdClient.data as any).client_id, clientSecret: (createdClient.data as any).client_secret, - redirectURLs: (createdClient.data as any).redirect_uris, + redirectUrls: (createdClient.data as any).redirect_uris, metadata: {}, icon: (createdClient.data as any).logo_uri || "", type: "web", @@ -243,7 +243,7 @@ describe("mcp", async () => { grant_type: "authorization_code", client_id: publicClient.clientId, code: authCode, - redirect_uri: publicClient.redirectURLs[0], + redirect_uri: publicClient.redirectUrls[0], // Missing code_verifier for public client }, }); @@ -435,7 +435,7 @@ describe("mcp", async () => { const userinfoClient = { clientId: (createdClient.data as any).client_id, clientSecret: (createdClient.data as any).client_secret, - redirectURLs: (createdClient.data as any).redirect_uris, + redirectUrls: (createdClient.data as any).redirect_uris, }; // Set up OAuth flow diff --git a/packages/better-auth/src/plugins/oidc-provider/authorize.ts b/packages/better-auth/src/plugins/oidc-provider/authorize.ts index f1705e5179..48336ec7a0 100644 --- a/packages/better-auth/src/plugins/oidc-provider/authorize.ts +++ b/packages/better-auth/src/plugins/oidc-provider/authorize.ts @@ -110,7 +110,7 @@ export async function authorize( ); throw ctx.redirect(errorURL); } - const redirectURI = client.redirectURLs.find( + const redirectURI = client.redirectUrls.find( (url) => url === ctx.query.redirect_uri, ); diff --git a/packages/better-auth/src/plugins/oidc-provider/index.ts b/packages/better-auth/src/plugins/oidc-provider/index.ts index 6b5231c4d0..72e0c1be64 100644 --- a/packages/better-auth/src/plugins/oidc-provider/index.ts +++ b/packages/better-auth/src/plugins/oidc-provider/index.ts @@ -62,7 +62,7 @@ export async function getClient( } return { ...res, - redirectURLs: (res.redirectURLs ?? "").split(","), + redirectUrls: (res.redirectUrls ?? "").split(","), metadata: res.metadata ? JSON.parse(res.metadata) : {}, } as Client; }); @@ -1369,7 +1369,7 @@ export const oidcProvider = (options: OIDCOptions) => { metadata: body.metadata ? JSON.stringify(body.metadata) : null, clientId: clientId, clientSecret: storedClientSecret, - redirectURLs: body.redirect_uris.join(","), + redirectUrls: body.redirect_uris.join(","), type: "web", authenticationScheme: body.token_endpoint_auth_method || "client_secret_basic", diff --git a/packages/better-auth/src/plugins/oidc-provider/oidc.test.ts b/packages/better-auth/src/plugins/oidc-provider/oidc.test.ts index 2b50cb62ce..b3e017affe 100644 --- a/packages/better-auth/src/plugins/oidc-provider/oidc.test.ts +++ b/packages/better-auth/src/plugins/oidc-provider/oidc.test.ts @@ -115,7 +115,7 @@ describe("oidc", async () => { let application: Client = { clientId: "test-client-id", clientSecret: "test-client-secret-oidc", - redirectURLs: ["http://localhost:3000/api/auth/oauth2/callback/test"], + redirectUrls: ["http://localhost:3000/api/auth/oauth2/callback/test"], metadata: {}, icon: "", type: "web", @@ -126,7 +126,7 @@ describe("oidc", async () => { it("should create oidc client", async ({ expect }) => { const createdClient = await serverClient.oauth2.register({ client_name: application.name, - redirect_uris: application.redirectURLs, + redirect_uris: application.redirectUrls, logo_uri: application.icon, }); expect(createdClient.data).toMatchObject({ @@ -145,7 +145,7 @@ describe("oidc", async () => { application = { clientId: createdClient.data.client_id, clientSecret: createdClient.data.client_secret, - redirectURLs: createdClient.data.redirect_uris, + redirectUrls: createdClient.data.redirect_uris, metadata: {}, icon: createdClient.data.logo_uri || "", type: "web", @@ -480,7 +480,7 @@ describe("oidc storage", async () => { let application: Client = { clientId: "test-client-id", clientSecret: "test-client-secret-oidc", - redirectURLs: ["http://localhost:3000/api/auth/oauth2/callback/test"], + redirectUrls: ["http://localhost:3000/api/auth/oauth2/callback/test"], metadata: {}, icon: "", type: "web", @@ -489,7 +489,7 @@ describe("oidc storage", async () => { }; const createdClient = await serverClient.oauth2.register({ client_name: application.name, - redirect_uris: application.redirectURLs, + redirect_uris: application.redirectUrls, logo_uri: application.icon, }); expect(createdClient.data).toMatchObject({ @@ -508,7 +508,7 @@ describe("oidc storage", async () => { application = { clientId: createdClient.data.client_id, clientSecret: createdClient.data.client_secret, - redirectURLs: createdClient.data.redirect_uris, + redirectUrls: createdClient.data.redirect_uris, metadata: {}, icon: createdClient.data.logo_uri || "", type: "web", @@ -858,7 +858,7 @@ describe("oidc-jwt", async () => { let application: Client = { clientId: "test-client-id", clientSecret: "test-client-secret-oidc", - redirectURLs: ["http://localhost:3000/api/auth/oauth2/callback/test"], + redirectUrls: ["http://localhost:3000/api/auth/oauth2/callback/test"], metadata: {}, icon: "", type: "web", @@ -867,7 +867,7 @@ describe("oidc-jwt", async () => { }; const createdClient = await serverClient.oauth2.register({ client_name: application.name, - redirect_uris: application.redirectURLs, + redirect_uris: application.redirectUrls, logo_uri: application.icon, }); expect(createdClient.data).toMatchObject({ @@ -886,7 +886,7 @@ describe("oidc-jwt", async () => { application = { clientId: createdClient.data.client_id, clientSecret: createdClient.data.client_secret, - redirectURLs: createdClient.data.redirect_uris, + redirectUrls: createdClient.data.redirect_uris, metadata: {}, icon: createdClient.data.logo_uri || "", type: "web", diff --git a/packages/better-auth/src/plugins/oidc-provider/schema.ts b/packages/better-auth/src/plugins/oidc-provider/schema.ts index 6cda7bd452..93770a5920 100644 --- a/packages/better-auth/src/plugins/oidc-provider/schema.ts +++ b/packages/better-auth/src/plugins/oidc-provider/schema.ts @@ -23,7 +23,7 @@ export const schema = { type: "string", required: false, }, - redirectURLs: { + redirectUrls: { type: "string", }, type: { diff --git a/packages/better-auth/src/plugins/oidc-provider/types.ts b/packages/better-auth/src/plugins/oidc-provider/types.ts index 91f7f90e59..6479c6ed14 100644 --- a/packages/better-auth/src/plugins/oidc-provider/types.ts +++ b/packages/better-auth/src/plugins/oidc-provider/types.ts @@ -313,7 +313,7 @@ export interface Client { * * For example, `https://example.com/auth/callback` */ - redirectURLs: string[]; + redirectUrls: string[]; /** * The name of the client. */ diff --git a/packages/better-auth/src/test-utils/index.ts b/packages/better-auth/src/test-utils/index.ts index e23246599b..3f61087515 100644 --- a/packages/better-auth/src/test-utils/index.ts +++ b/packages/better-auth/src/test-utils/index.ts @@ -1,257 +1,2 @@ -import type { BetterAuthClientOptions } from "@better-auth/core"; -import type { SuccessContext } from "@better-fetch/fetch"; -import { afterAll } from "vitest"; -import { mongodbAdapter } from "../adapters/mongodb-adapter"; -import { betterAuth } from "../auth"; -import { createAuthClient } from "../client"; -import { parseSetCookieHeader, setCookieToHeader } from "../cookies"; -import { getAdapter, getMigrations } from "../db"; -import { bearer } from "../plugins"; -import type { BetterAuthOptions, Session, User } from "../types"; -import { getBaseURL } from "../utils/url"; - -export async function getTestInstanceMemory< - O extends Partial, - C extends BetterAuthClientOptions, ->( - options?: O | undefined, - config?: - | { - clientOptions?: C; - port?: number; - disableTestUser?: boolean; - testUser?: Partial; - testWith?: "sqlite" | "postgres" | "mongodb" | "mysql" | "memory"; - } - | undefined, -) { - const testWith = config?.testWith || "memory"; - - async function getPostgres() { - const { Kysely, PostgresDialect } = await import("kysely"); - const { Pool } = await import("pg"); - return new Kysely({ - dialect: new PostgresDialect({ - pool: new Pool({ - connectionString: - "postgres://user:password@localhost:5432/better_auth", - }), - }), - }); - } - - async function getMysql() { - const { Kysely, MysqlDialect } = await import("kysely"); - const { createPool } = await import("mysql2/promise"); - return new Kysely({ - dialect: new MysqlDialect( - createPool("mysql://user:password@localhost:3306/better_auth"), - ), - }); - } - - async function mongodbClient() { - const { MongoClient } = await import("mongodb"); - const dbClient = async (connectionString: string, dbName: string) => { - const client = new MongoClient(connectionString); - await client.connect(); - const db = client.db(dbName); - return db; - }; - const db = await dbClient("mongodb://127.0.0.1:27017", "better-auth"); - return db; - } - - const opts = { - socialProviders: { - github: { - clientId: "test", - clientSecret: "test", - }, - google: { - clientId: "test", - clientSecret: "test", - }, - }, - secret: "better-auth.secret", - database: - testWith === "postgres" - ? { db: await getPostgres(), type: "postgres" } - : testWith === "mongodb" - ? mongodbAdapter(await mongodbClient()) - : testWith === "mysql" - ? { db: await getMysql(), type: "mysql" } - : undefined, - emailAndPassword: { - enabled: true, - }, - rateLimit: { - enabled: false, - }, - advanced: { - cookies: {}, - }, - } satisfies BetterAuthOptions; - - const auth = betterAuth({ - baseURL: "http://localhost:" + (config?.port || 3000), - ...opts, - ...options, - advanced: { - disableCSRFCheck: true, - ...options?.advanced, - }, - plugins: [bearer(), ...(options?.plugins || [])], - } as unknown as O extends undefined ? typeof opts : O & typeof opts); - - const testUser = { - email: "test@test.com", - password: "test123456", - name: "test user", - ...config?.testUser, - }; - async function createTestUser() { - if (config?.disableTestUser) { - return; - } - //@ts-expect-error - const res = await auth.api.signUpEmail({ - body: testUser, - }); - } - - if (testWith !== "mongodb" && testWith !== "memory") { - const { runMigrations } = await getMigrations({ - ...auth.options, - database: opts.database, - }); - await runMigrations(); - } - - await createTestUser(); - - afterAll(async () => { - if (testWith === "mongodb") { - const db = await mongodbClient(); - await db.dropDatabase(); - return; - } - if (testWith === "postgres") { - const { sql } = await import("kysely"); - const postgres = await getPostgres(); - await sql`DROP SCHEMA public CASCADE; CREATE SCHEMA public;`.execute( - postgres, - ); - await postgres.destroy(); - return; - } - - if (testWith === "mysql") { - const { sql } = await import("kysely"); - const mysql = await getMysql(); - await sql`SET FOREIGN_KEY_CHECKS = 0;`.execute(mysql); - const tables = await mysql.introspection.getTables(); - for (const table of tables) { - // @ts-expect-error - await mysql.deleteFrom(table.name).execute(); - } - await sql`SET FOREIGN_KEY_CHECKS = 1;`.execute(mysql); - return; - } - }); - - async function signInWithTestUser() { - if (config?.disableTestUser) { - throw new Error("Test user is disabled"); - } - let headers = new Headers(); - const setCookie = (name: string, value: string) => { - const current = headers.get("cookie"); - headers.set("cookie", `${current || ""}; ${name}=${value}`); - }; - //@ts-expect-error - const { data, error } = await client.signIn.email({ - email: testUser.email, - password: testUser.password, - fetchOptions: { - //@ts-expect-error - onSuccess(context) { - const header = context.response.headers.get("set-cookie"); - const cookies = parseSetCookieHeader(header || ""); - const signedCookie = cookies.get("better-auth.session_token")?.value; - headers.set("cookie", `better-auth.session_token=${signedCookie}`); - }, - }, - }); - return { - session: data.session as Session, - user: data.user as User, - headers, - setCookie, - }; - } - async function signInWithUser(email: string, password: string) { - let headers = new Headers(); - //@ts-expect-error - const { data } = await client.signIn.email({ - email, - password, - fetchOptions: { - //@ts-expect-error - onSuccess(context) { - const header = context.response.headers.get("set-cookie"); - const cookies = parseSetCookieHeader(header || ""); - const signedCookie = cookies.get("better-auth.session_token")?.value; - headers.set("cookie", `better-auth.session_token=${signedCookie}`); - }, - }, - }); - return { - res: data as { - user: User; - session: Session; - }, - headers, - }; - } - - const customFetchImpl = async ( - url: string | URL | Request, - init?: RequestInit | undefined, - ) => { - return auth.handler(new Request(url, init)); - }; - - function sessionSetter(headers: Headers) { - return (context: SuccessContext) => { - const header = context.response.headers.get("set-cookie"); - if (header) { - const cookies = parseSetCookieHeader(header || ""); - const signedCookie = cookies.get("better-auth.session_token")?.value; - headers.set("cookie", `better-auth.session_token=${signedCookie}`); - } - }; - } - - const client = createAuthClient({ - ...(config?.clientOptions as C extends undefined ? {} : C), - baseURL: getBaseURL( - options?.baseURL || "http://localhost:" + (config?.port || 3000), - options?.basePath || "/api/auth", - ), - fetchOptions: { - customFetchImpl, - }, - }); - return { - auth, - client, - testUser, - signInWithTestUser, - signInWithUser, - cookieSetter: setCookieToHeader, - customFetchImpl, - sessionSetter, - db: await getAdapter(auth.options), - }; -} +export { convertSetCookieToCookie } from "./headers"; +export { getTestInstance } from "./test-instance"; diff --git a/packages/better-auth/src/test-utils/state.ts b/packages/better-auth/src/test-utils/state.ts deleted file mode 100644 index 676e7c26dc..0000000000 --- a/packages/better-auth/src/test-utils/state.ts +++ /dev/null @@ -1,25 +0,0 @@ -import * as fs from "fs"; -import path from "path"; - -export type State = "IDLE" | "RUNNING"; - -export function makeTestState(dirname: string) { - const stateFilePath = path.join(dirname, "./state.txt"); - - function getState(): State { - try { - return fs - .readFileSync(stateFilePath, "utf-8") - .split("\n")[0]! - .trim() as State; - } catch { - return "IDLE"; - } - } - - function setState(state: State) { - fs.writeFileSync(stateFilePath, state, "utf-8"); - } - - return { stateFilePath, getState, setState }; -} diff --git a/packages/better-auth/src/test-utils/test-instance.ts b/packages/better-auth/src/test-utils/test-instance.ts index 0cb87f8100..3cbb374cb2 100644 --- a/packages/better-auth/src/test-utils/test-instance.ts +++ b/packages/better-auth/src/test-utils/test-instance.ts @@ -4,18 +4,12 @@ import type { BetterAuthOptions, } from "@better-auth/core"; import type { SuccessContext } from "@better-fetch/fetch"; -import Database from "better-sqlite3"; -import { Kysely, MysqlDialect, PostgresDialect, sql } from "kysely"; -import { MongoClient } from "mongodb"; -import { createPool } from "mysql2/promise"; -import { Pool } from "pg"; +import { sql } from "kysely"; import { afterAll } from "vitest"; -import { mongodbAdapter } from "../adapters/mongodb-adapter"; import { betterAuth } from "../auth"; -import { createAuthClient } from "../client/vanilla"; +import { createAuthClient } from "../client"; import { parseSetCookieHeader, setCookieToHeader } from "../cookies"; -import { getMigrations } from "../db/get-migration"; -import { getAdapter } from "../db/utils"; +import { getAdapter, getMigrations } from "../db"; import { bearer } from "../plugins"; import type { Session, User } from "../types"; import { getBaseURL } from "../utils/url"; @@ -35,7 +29,7 @@ afterAll(async () => { }); export async function getTestInstance< - O extends Partial, + O extends Omit, "database">, C extends BetterAuthClientOptions, >( options?: O | undefined, @@ -51,23 +45,36 @@ export async function getTestInstance< ) { const testWith = config?.testWith || "sqlite"; - const postgres = new Kysely({ - dialect: new PostgresDialect({ - pool: new Pool({ - connectionString: "postgres://user:password@localhost:5432/better_auth", + async function getPostgres() { + const { Kysely, PostgresDialect } = await import("kysely"); + const { Pool } = await import("pg"); + return new Kysely({ + dialect: new PostgresDialect({ + pool: new Pool({ + connectionString: + "postgres://user:password@localhost:5432/better_auth", + }), }), - }), - }); + }); + } - const sqlite = new Database(":memory:"); + async function getSqlite() { + const { default: Database } = await import("better-sqlite3"); + return new Database(":memory:"); + } - const mysql = new Kysely({ - dialect: new MysqlDialect( - createPool("mysql://user:password@localhost:3306/better_auth"), - ), - }); + async function getMysql() { + const { Kysely, MysqlDialect } = await import("kysely"); + const { createPool } = await import("mysql2/promise"); + return new Kysely({ + dialect: new MysqlDialect( + createPool("mysql://user:password@localhost:3306/better_auth"), + ), + }); + } async function mongodbClient() { + const { MongoClient } = await import("mongodb"); const dbClient = async (connectionString: string, dbName: string) => { const client = new MongoClient(connectionString); await client.connect(); @@ -92,12 +99,15 @@ export async function getTestInstance< secret: "better-auth.secret", database: testWith === "postgres" - ? { db: postgres, type: "postgres" } + ? { db: await getPostgres(), type: "postgres" } : testWith === "mongodb" - ? mongodbAdapter(await mongodbClient()) + ? await Promise.all([ + mongodbClient(), + await import("../adapters/mongodb-adapter"), + ]).then(([db, { mongodbAdapter }]) => mongodbAdapter(db)) : testWith === "mysql" - ? { db: mysql, type: "mysql" } - : sqlite, + ? { db: await getMysql(), type: "mysql" } + : await getSqlite(), emailAndPassword: { enabled: true, }, @@ -152,6 +162,7 @@ export async function getTestInstance< return; } if (testWith === "postgres") { + const postgres = await getPostgres(); await sql`DROP SCHEMA public CASCADE; CREATE SCHEMA public;`.execute( postgres, ); @@ -160,6 +171,7 @@ export async function getTestInstance< } if (testWith === "mysql") { + const mysql = await getMysql(); await sql`SET FOREIGN_KEY_CHECKS = 0;`.execute(mysql); const tables = await mysql.introspection.getTables(); for (const table of tables) { @@ -170,6 +182,7 @@ export async function getTestInstance< return; } if (testWith === "sqlite") { + const sqlite = await getSqlite(); sqlite.close(); return; } diff --git a/packages/cli/package.json b/packages/cli/package.json index 2d9307bf1f..eab63533c0 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,19 +1,19 @@ { "name": "@better-auth/cli", - "version": "1.4.0-beta.15", + "version": "1.4.0-beta.16", "type": "module", "description": "The CLI for Better Auth", - "module": "dist/index.js", + "module": "dist/index.mjs", "repository": { "type": "git", "url": "https://github.com/better-auth/better-auth", "directory": "packages/cli" }, "homepage": "https://www.better-auth.com/docs/concepts/cli", - "main": "./dist/index.js", + "main": "./dist/index.mjs", "scripts": { "build": "tsdown", - "start": "node ./dist/index.js", + "start": "node ./dist/index.mjs", "dev": "tsx ./src/index.ts", "test": "vitest", "typecheck": "tsc --project tsconfig.json" @@ -21,7 +21,7 @@ "publishConfig": { "access": "public", "executableFiles": [ - "./dist/index.js" + "./dist/index.mjs" ] }, "license": "MIT", @@ -31,15 +31,16 @@ "typescript", "better-auth" ], - "exports": "./dist/index.js", - "bin": "./dist/index.js", + "exports": "./dist/index.mjs", + "bin": "./dist/index.mjs", "devDependencies": { "@better-auth/passkey": "workspace:*", - "@types/semver": "^7.7.1", "@types/better-sqlite3": "^7.6.13", "@types/prompts": "^2.4.9", + "@types/semver": "^7.7.1", "tsdown": "catalog:", "tsx": "^4.20.6", + "type-fest": "^5.2.0", "typescript": "catalog:" }, "dependencies": { diff --git a/packages/cli/test/info.test.ts b/packages/cli/test/info.test.ts index fe5cc288e4..96b2980d85 100644 --- a/packages/cli/test/info.test.ts +++ b/packages/cli/test/info.test.ts @@ -3,6 +3,7 @@ import fs from "node:fs/promises"; import path from "node:path"; import { promisify } from "node:util"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { cliPath } from "./utils"; const execAsync = promisify(exec); @@ -43,8 +44,6 @@ describe("info command", () => { }, }), ); - - const cliPath = path.join(process.cwd(), "dist", "index.js"); const { stdout } = await execAsync(`node ${cliPath} info --json`, { cwd: tmpDir, }); @@ -109,7 +108,6 @@ describe("info command", () => { })`, ); - const cliPath = path.join(process.cwd(), "dist", "index.js"); const { stdout } = await execAsync(`node ${cliPath} info --json`, { cwd: tmpDir, }); @@ -161,7 +159,6 @@ describe("info command", () => { }), ); - const cliPath = path.join(process.cwd(), "dist", "index.js"); const { stdout } = await execAsync(`node ${cliPath} info --json`, { cwd: tmpDir, }); @@ -206,7 +203,6 @@ describe("info command", () => { }), ); - const cliPath = path.join(process.cwd(), "dist", "index.js"); const { stdout } = await execAsync(`node ${cliPath} info --json`, { cwd: tmpDir, }); @@ -263,7 +259,6 @@ describe("info command", () => { })`, ); - const cliPath = path.join(process.cwd(), "dist", "index.js"); const { stdout } = await execAsync( `node ${cliPath} info --config config/auth.config.ts --json`, { cwd: tmpDir }, @@ -314,7 +309,6 @@ describe("info command", () => { })`, ); - const cliPath = path.join(process.cwd(), "dist", "index.js"); const { stdout } = await execAsync(`node ${cliPath} info --json`, { cwd: tmpDir, }); @@ -338,7 +332,6 @@ describe("info command", () => { it("should handle missing package.json gracefully", async () => { // Don't create package.json - const cliPath = path.join(process.cwd(), "dist", "index.js"); const { stdout } = await execAsync(`node ${cliPath} info --json`, { cwd: tmpDir, }); diff --git a/packages/cli/test/utils.ts b/packages/cli/test/utils.ts new file mode 100644 index 0000000000..5b9a2fc638 --- /dev/null +++ b/packages/cli/test/utils.ts @@ -0,0 +1,14 @@ +import fs from "node:fs/promises"; +import path from "node:path"; +import type { PackageJson } from "type-fest"; + +const rootDir = path.resolve(import.meta.dirname, ".."); + +const getCliPath = async () => { + const pkgJson: PackageJson = JSON.parse( + await fs.readFile(path.join(rootDir, "package.json"), "utf-8"), + ); + return path.join(rootDir, pkgJson.bin as string); +}; + +export const cliPath = await getCliPath(); diff --git a/packages/core/package.json b/packages/core/package.json index 8dabe592a9..bf8805be7e 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,101 +1,101 @@ { "name": "@better-auth/core", - "version": "1.4.0-beta.15", + "version": "1.4.0-beta.16", "description": "The most comprehensive authentication framework for TypeScript.", "type": "module", - "main": "./dist/index.js", - "module": "./dist/index.js", + "main": "./dist/index.mjs", + "module": "./dist/index.mjs", "exports": { ".": { "better-auth-dev-source": "./src/index.ts", - "types": "./dist/index.d.ts", - "default": "./dist/index.js" + "types": "./dist/index.d.mts", + "default": "./dist/index.mjs" }, "./api": { "better-auth-dev-source": "./src/api/index.ts", - "types": "./dist/api/index.d.ts", - "default": "./dist/api/index.js" + "types": "./dist/api/index.d.mts", + "default": "./dist/api/index.mjs" }, "./async_hooks": { "better-auth-dev-source": "./src/async_hooks/index.ts", - "types": "./dist/async_hooks/index.d.ts", - "default": "./dist/async_hooks/index.js" + "types": "./dist/async_hooks/index.d.mts", + "default": "./dist/async_hooks/index.mjs" }, "./context": { "better-auth-dev-source": "./src/context/index.ts", - "types": "./dist/context/index.d.ts", - "default": "./dist/context/index.js" + "types": "./dist/context/index.d.mts", + "default": "./dist/context/index.mjs" }, "./env": { "better-auth-dev-source": "./src/env/index.ts", - "types": "./dist/env/index.d.ts", - "default": "./dist/env/index.js" + "types": "./dist/env/index.d.mts", + "default": "./dist/env/index.mjs" }, "./error": { "better-auth-dev-source": "./src/error/index.ts", - "types": "./dist/error/index.d.ts", - "default": "./dist/error/index.js" + "types": "./dist/error/index.d.mts", + "default": "./dist/error/index.mjs" }, "./utils": { "better-auth-dev-source": "./src/utils/index.ts", - "types": "./dist/utils/index.d.ts", - "default": "./dist/utils/index.js" + "types": "./dist/utils/index.d.mts", + "default": "./dist/utils/index.mjs" }, "./social-providers": { "better-auth-dev-source": "./src/social-providers/index.ts", - "types": "./dist/social-providers/index.d.ts", - "default": "./dist/social-providers/index.js" + "types": "./dist/social-providers/index.d.mts", + "default": "./dist/social-providers/index.mjs" }, "./db": { "better-auth-dev-source": "./src/db/index.ts", - "types": "./dist/db/index.d.ts", - "default": "./dist/db/index.js" + "types": "./dist/db/index.d.mts", + "default": "./dist/db/index.mjs" }, "./db/adapter": { "better-auth-dev-source": "./src/db/adapter/index.ts", - "types": "./dist/db/adapter/index.d.ts", - "default": "./dist/db/adapter/index.js" + "types": "./dist/db/adapter/index.d.mts", + "default": "./dist/db/adapter/index.mjs" }, "./oauth2": { "better-auth-dev-source": "./src/oauth2/index.ts", - "types": "./dist/oauth2/index.d.ts", - "default": "./dist/oauth2/index.js" + "types": "./dist/oauth2/index.d.mts", + "default": "./dist/oauth2/index.mjs" } }, "typesVersions": { "*": { ".": [ - "dist/index.d.ts" + "dist/index.d.mts" ], "api": [ - "dist/api/index.d.ts" + "dist/api/index.d.mts" ], "async_hooks": [ - "dist/async_hooks/index.d.ts" + "dist/async_hooks/index.d.mts" ], "context": [ - "dist/context/index.d.ts" + "dist/context/index.d.mts" ], "env": [ - "dist/env/index.d.ts" + "dist/env/index.d.mts" ], "error": [ - "dist/error/index.d.ts" + "dist/error/index.d.mts" ], "utils": [ - "dist/utils/index.d.ts" + "dist/utils/index.d.mts" ], "social-providers": [ - "dist/social-providers/index.d.ts" + "dist/social-providers/index.d.mts" ], "db": [ - "dist/db/index.d.ts" + "dist/db/index.d.mts" ], "db/adapter": [ - "dist/db/adapter/index.d.ts" + "dist/db/adapter/index.d.mts" ], "oauth2": [ - "dist/oauth2/index.d.ts" + "dist/oauth2/index.d.mts" ] } }, diff --git a/packages/expo/package.json b/packages/expo/package.json index 4dd48048da..751cd2ae08 100644 --- a/packages/expo/package.json +++ b/packages/expo/package.json @@ -1,10 +1,10 @@ { "name": "@better-auth/expo", - "version": "1.4.0-beta.15", + "version": "1.4.0-beta.16", "type": "module", "description": "Better Auth integration for Expo and React Native applications.", - "main": "dist/index.js", - "module": "dist/index.js", + "main": "dist/index.mjs", + "module": "dist/index.mjs", "repository": { "type": "git", "url": "https://github.com/better-auth/better-auth", @@ -20,22 +20,22 @@ "exports": { ".": { "better-auth-dev-source": "./src/index.ts", - "types": "./dist/index.d.ts", - "default": "./dist/index.js" + "types": "./dist/index.d.mts", + "default": "./dist/index.mjs" }, "./client": { "better-auth-dev-source": "./src/client.ts", - "types": "./dist/client.d.ts", - "default": "./dist/client.js" + "types": "./dist/client.d.mts", + "default": "./dist/client.mjs" } }, "typesVersions": { "*": { "*": [ - "./dist/index.d.ts" + "./dist/index.d.mts" ], "client": [ - "./dist/client.d.ts" + "./dist/client.d.mts" ] } }, diff --git a/packages/expo/tsdown.config.ts b/packages/expo/tsdown.config.ts index 91d19014ac..e9ddf68a15 100644 --- a/packages/expo/tsdown.config.ts +++ b/packages/expo/tsdown.config.ts @@ -3,6 +3,12 @@ import { defineConfig } from "tsdown"; export default defineConfig({ dts: { build: true, incremental: true }, format: ["esm"], + outExtension({ format }) { + if (format === "esm") { + return { js: ".mjs", dts: ".d.mts" }; + } + return { js: ".js", dts: ".d.ts" }; + }, entry: ["./src/index.ts", "./src/client.ts"], external: [ "better-auth", diff --git a/packages/passkey/package.json b/packages/passkey/package.json index d7b3260140..4a847a95b7 100644 --- a/packages/passkey/package.json +++ b/packages/passkey/package.json @@ -1,10 +1,10 @@ { "name": "@better-auth/passkey", - "version": "1.4.0-beta.15", + "version": "1.4.0-beta.16", "type": "module", "description": "Passkey plugin for Better Auth", - "main": "dist/index.js", - "module": "dist/index.js", + "main": "dist/index.mjs", + "module": "dist/index.mjs", "publishConfig": { "access": "public" }, @@ -17,22 +17,22 @@ "exports": { ".": { "better-auth-dev-source": "./src/index.ts", - "types": "./dist/index.d.ts", - "default": "./dist/index.js" + "types": "./dist/index.d.mts", + "default": "./dist/index.mjs" }, "./client": { "better-auth-dev-source": "./src/client.ts", - "types": "./dist/client.d.ts", - "default": "./dist/client.js" + "types": "./dist/client.d.mts", + "default": "./dist/client.mjs" } }, "typesVersions": { "*": { "*": [ - "./dist/index.d.ts" + "./dist/index.d.mts" ], "client": [ - "./dist/client.d.ts" + "./dist/client.d.mts" ] } }, diff --git a/packages/passkey/src/passkey.test.ts b/packages/passkey/src/passkey.test.ts index 2e2754bb2a..28a5d5b2cc 100644 --- a/packages/passkey/src/passkey.test.ts +++ b/packages/passkey/src/passkey.test.ts @@ -1,5 +1,5 @@ import { createAuthClient } from "better-auth/client"; -import { getTestInstanceMemory as getTestInstance } from "better-auth/test"; +import { getTestInstance } from "better-auth/test"; import { describe, expect, it } from "vitest"; import { type Passkey, passkey } from "."; import { passkeyClient } from "./client"; diff --git a/packages/passkey/tsdown.config.ts b/packages/passkey/tsdown.config.ts index d086d2767a..3fc9afbf8c 100644 --- a/packages/passkey/tsdown.config.ts +++ b/packages/passkey/tsdown.config.ts @@ -3,6 +3,12 @@ import { defineConfig } from "tsdown"; export default defineConfig({ dts: { build: true, incremental: true }, format: ["esm"], + outExtension({ format }) { + if (format === "esm") { + return { js: ".mjs", dts: ".d.mts" }; + } + return { js: ".js", dts: ".d.ts" }; + }, entry: ["./src/index.ts", "./src/client.ts"], external: [ "nanostores", diff --git a/packages/sso/package.json b/packages/sso/package.json index 16fddeb75d..8fb204e7a3 100644 --- a/packages/sso/package.json +++ b/packages/sso/package.json @@ -1,9 +1,9 @@ { "name": "@better-auth/sso", "author": "Bereket Engida", - "version": "1.4.0-beta.15", + "version": "1.4.0-beta.16", "type": "module", - "main": "dist/index.js", + "main": "dist/index.mjs", "homepage": "https://www.better-auth.com/docs/plugins/sso", "repository": { "type": "git", @@ -26,7 +26,7 @@ "publishConfig": { "access": "public" }, - "module": "dist/index.js", + "module": "dist/index.mjs", "description": "SSO plugin for Better Auth", "scripts": { "test": "vitest", @@ -37,22 +37,22 @@ "exports": { ".": { "better-auth-dev-source": "./src/index.ts", - "types": "./dist/index.d.ts", - "default": "./dist/index.js" + "types": "./dist/index.d.mts", + "default": "./dist/index.mjs" }, "./client": { "better-auth-dev-source": "./src/client.ts", - "types": "./dist/client.d.ts", - "default": "./dist/client.js" + "types": "./dist/client.d.mts", + "default": "./dist/client.mjs" } }, "typesVersions": { "*": { "*": [ - "./dist/index.d.ts" + "./dist/index.d.mts" ], "client": [ - "./dist/client.d.ts" + "./dist/client.d.mts" ] } }, diff --git a/packages/sso/src/oidc.test.ts b/packages/sso/src/oidc.test.ts index 3b4daac214..d32dbf387c 100644 --- a/packages/sso/src/oidc.test.ts +++ b/packages/sso/src/oidc.test.ts @@ -1,7 +1,7 @@ import { betterFetch } from "@better-fetch/fetch"; import { createAuthClient } from "better-auth/client"; import { organization } from "better-auth/plugins"; -import { getTestInstanceMemory as getTestInstance } from "better-auth/test"; +import { getTestInstance } from "better-auth/test"; import { OAuth2Server } from "oauth2-mock-server"; import { afterAll, beforeAll, describe, expect, it } from "vitest"; import { sso } from "."; diff --git a/packages/sso/src/saml.test.ts b/packages/sso/src/saml.test.ts index d8c7133dba..4226fd346b 100644 --- a/packages/sso/src/saml.test.ts +++ b/packages/sso/src/saml.test.ts @@ -4,7 +4,7 @@ import { memoryAdapter } from "better-auth/adapters/memory"; import { createAuthClient } from "better-auth/client"; import { setCookieToHeader } from "better-auth/cookies"; import { bearer } from "better-auth/plugins"; -import { getTestInstanceMemory } from "better-auth/test"; +import { getTestInstance } from "better-auth/test"; import bodyParser from "body-parser"; import { randomUUID } from "crypto"; import type { @@ -926,7 +926,7 @@ describe("SAML SSO", async () => { }); it("should not allow creating a provider if limit is set to 0", async () => { - const { auth, signInWithTestUser } = await getTestInstanceMemory({ + const { auth, signInWithTestUser } = await getTestInstance({ plugins: [sso({ providersLimit: 0 })], }); const { headers } = await signInWithTestUser(); @@ -957,7 +957,7 @@ describe("SAML SSO", async () => { }); it("should not allow creating a provider if limit is reached", async () => { - const { auth, signInWithTestUser } = await getTestInstanceMemory({ + const { auth, signInWithTestUser } = await getTestInstance({ plugins: [sso({ providersLimit: 1 })], }); const { headers } = await signInWithTestUser(); @@ -1011,7 +1011,7 @@ describe("SAML SSO", async () => { }); it("should not allow creating a provider if limit from function is reached", async () => { - const { auth, signInWithTestUser } = await getTestInstanceMemory({ + const { auth, signInWithTestUser } = await getTestInstance({ plugins: [ sso({ providersLimit: async (user) => { diff --git a/packages/stripe/package.json b/packages/stripe/package.json index 0c1ea7aaaf..e8982fb552 100644 --- a/packages/stripe/package.json +++ b/packages/stripe/package.json @@ -1,9 +1,9 @@ { "name": "@better-auth/stripe", "author": "Bereket Engida", - "version": "1.4.0-beta.15", + "version": "1.4.0-beta.16", "type": "module", - "main": "dist/index.js", + "main": "dist/index.mjs", "license": "MIT", "homepage": "https://www.better-auth.com/docs/plugins/stripe", "repository": { @@ -16,7 +16,7 @@ "auth", "stripe" ], - "module": "dist/index.js", + "module": "dist/index.mjs", "description": "Stripe plugin for Better Auth", "scripts": { "test": "vitest", @@ -30,22 +30,22 @@ "exports": { ".": { "better-auth-dev-source": "./src/index.ts", - "types": "./dist/index.d.ts", - "default": "./dist/index.js" + "types": "./dist/index.d.mts", + "default": "./dist/index.mjs" }, "./client": { "better-auth-dev-source": "./src/client.ts", - "types": "./dist/client.d.ts", - "default": "./dist/client.js" + "types": "./dist/client.d.mts", + "default": "./dist/client.mjs" } }, "typesVersions": { "*": { "*": [ - "./dist/index.d.ts" + "./dist/index.d.mts" ], "client": [ - "./dist/client.d.ts" + "./dist/client.d.mts" ] } }, diff --git a/packages/telemetry/package.json b/packages/telemetry/package.json index a5fdd48b65..fb0c9544c2 100644 --- a/packages/telemetry/package.json +++ b/packages/telemetry/package.json @@ -1,21 +1,21 @@ { "name": "@better-auth/telemetry", - "version": "1.4.0-beta.15", + "version": "1.4.0-beta.16", "description": "Telemetry package for Better Auth", "type": "module", - "main": "./dist/index.js", - "module": "./dist/index.js", + "main": "./dist/index.mjs", + "module": "./dist/index.mjs", "exports": { ".": { "better-auth-dev-source": "./src/index.ts", - "types": "./dist/index.d.ts", - "default": "./dist/index.js" + "types": "./dist/index.d.mts", + "default": "./dist/index.mjs" } }, "typesVersions": { "*": { "index": [ - "dist/index.d.ts" + "dist/index.d.mts" ] } }, @@ -27,7 +27,7 @@ "devDependencies": { "@better-auth/core": "workspace:*", "tsdown": "catalog:", - "type-fest": "^4.31.0" + "type-fest": "^5.2.0" }, "dependencies": { "@better-auth/utils": "0.3.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f4a22d840b..0d415c71b8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,8 +13,8 @@ catalogs: specifier: 1.0.26 version: 1.0.26 tsdown: - specifier: ^0.15.11 - version: 0.15.11 + specifier: ^0.16.0 + version: 0.16.0 typescript: specifier: ^5.9.3 version: 5.9.3 @@ -355,7 +355,7 @@ importers: version: 12.23.12(react-dom@19.2.0(react@19.2.0))(react@19.2.0) geist: specifier: ^1.4.2 - version: 1.4.2(next@16.0.1(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.55.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.90.0)) + version: 1.4.2(next@16.0.1(@opentelemetry/api@1.9.0)(@playwright/test@1.55.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.90.0)) input-otp: specifier: ^1.4.2 version: 1.4.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) @@ -642,7 +642,7 @@ importers: version: 15.8.3(@oramacloud/client@2.1.4)(@tanstack/react-router@1.131.27(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(algoliasearch@5.36.0)(lucide-react@0.542.0(react@19.2.0))(next@16.0.1(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.55.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.90.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(tailwindcss@4.1.13) geist: specifier: ^1.4.2 - version: 1.4.2(next@16.0.1(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.55.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.90.0)) + version: 1.4.2(next@16.0.1(@opentelemetry/api@1.9.0)(@playwright/test@1.55.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.90.0)) gray-matter: specifier: ^4.0.3 version: 4.0.3 @@ -794,7 +794,7 @@ importers: version: 0.15.3(solid-js@1.9.9) '@solidjs/start': specifier: ^1.1.7 - version: 1.1.7(2349f88bdc5d85b81d15bb9fce6dda26) + version: 1.1.7(3308c04babfa7dd313cc562daa7d6672) better-auth: specifier: workspace:* version: link:../../../packages/better-auth @@ -806,7 +806,7 @@ importers: version: 1.9.9 vinxi: specifier: ^0.5.8 - version: 0.5.8(@azure/identity@4.11.1)(@libsql/client@0.15.14)(@netlify/blobs@10.0.8)(@types/node@24.9.2)(better-sqlite3@12.4.1)(db0@0.3.2(@libsql/client@0.15.14)(better-sqlite3@12.4.1)(drizzle-orm@0.44.5(@cloudflare/workers-types@4.20250903.0)(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.15.5)(better-sqlite3@12.4.1)(bun-types@1.3.1(@types/react@19.2.2))(kysely@0.28.5)(mysql2@3.14.4)(pg@8.16.3)(postgres@3.4.7)(prisma@5.22.0))(mysql2@3.14.4))(drizzle-orm@0.44.5(@cloudflare/workers-types@4.20250903.0)(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.15.5)(better-sqlite3@12.4.1)(bun-types@1.3.1(@types/react@19.2.2))(kysely@0.28.5)(mysql2@3.14.4)(pg@8.16.3)(postgres@3.4.7)(prisma@5.22.0))(ioredis@5.7.0)(jiti@2.6.1)(less@4.4.1)(lightningcss@1.30.1)(mysql2@3.14.4)(rolldown@1.0.0-beta.45)(sass@1.90.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + version: 0.5.8(@azure/identity@4.11.1)(@libsql/client@0.15.14)(@netlify/blobs@10.0.8)(@types/node@24.9.2)(better-sqlite3@12.4.1)(db0@0.3.2(@libsql/client@0.15.14)(better-sqlite3@12.4.1)(drizzle-orm@0.44.5(@cloudflare/workers-types@4.20250903.0)(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.15.5)(better-sqlite3@12.4.1)(bun-types@1.3.1(@types/react@19.2.2))(kysely@0.28.5)(mysql2@3.14.4)(pg@8.16.3)(postgres@3.4.7)(prisma@5.22.0))(mysql2@3.14.4))(drizzle-orm@0.44.5(@cloudflare/workers-types@4.20250903.0)(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.15.5)(better-sqlite3@12.4.1)(bun-types@1.3.1(@types/react@19.2.2))(kysely@0.28.5)(mysql2@3.14.4)(pg@8.16.3)(postgres@3.4.7)(prisma@5.22.0))(ioredis@5.7.0)(jiti@2.6.1)(less@4.4.1)(lightningcss@1.30.1)(mysql2@3.14.4)(rolldown@1.0.0-beta.46)(sass@1.90.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) devDependencies: '@better-auth/test-utils': specifier: workspace:* @@ -985,7 +985,7 @@ importers: version: 2.37.1(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.2)(vite@7.1.11(@types/node@24.9.2)(jiti@2.6.1)(less@4.4.1)(lightningcss@1.30.1)(sass@1.90.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.38.2)(vite@7.1.11(@types/node@24.9.2)(jiti@2.6.1)(less@4.4.1)(lightningcss@1.30.1)(sass@1.90.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) '@tanstack/react-start': specifier: ^1.131.3 - version: 1.131.27(b110b882dd6b12444cfb3c083a97718f) + version: 1.131.27(2d8e7679b040dff6853256ee92c3c2ba) '@tanstack/start-server-core': specifier: ^1.131.36 version: 1.131.36 @@ -1075,10 +1075,10 @@ importers: version: 18.6.1 tsdown: specifier: 'catalog:' - version: 0.15.11(typescript@5.9.3) + version: 0.16.0(typescript@5.9.3)(unrun@0.2.1) type-fest: - specifier: ^4.41.0 - version: 4.41.0 + specifier: ^5.2.0 + version: 5.2.0 typescript: specifier: 'catalog:' version: 5.9.3 @@ -1175,10 +1175,13 @@ importers: version: 7.7.1 tsdown: specifier: 'catalog:' - version: 0.15.11(typescript@5.9.3) + version: 0.16.0(typescript@5.9.3)(unrun@0.2.1) tsx: specifier: ^4.20.6 version: 4.20.6 + type-fest: + specifier: ^5.2.0 + version: 5.2.0 typescript: specifier: 'catalog:' version: 5.9.3 @@ -1218,7 +1221,7 @@ importers: version: 1.0.1 tsdown: specifier: 'catalog:' - version: 0.15.11(typescript@5.9.3) + version: 0.16.0(typescript@5.9.3)(unrun@0.2.1) packages/expo: dependencies: @@ -1264,7 +1267,7 @@ importers: version: 0.80.2(@babel/core@7.28.4)(@react-native-community/cli@20.0.1(typescript@5.9.3))(@types/react@19.2.2)(react@19.2.0) tsdown: specifier: 'catalog:' - version: 0.15.11(typescript@5.9.3) + version: 0.16.0(typescript@5.9.3)(unrun@0.2.1) packages/passkey: dependencies: @@ -1298,7 +1301,7 @@ importers: version: link:../better-auth tsdown: specifier: 'catalog:' - version: 0.15.11(typescript@5.9.3) + version: 0.16.0(typescript@5.9.3)(unrun@0.2.1) packages/sso: dependencies: @@ -1341,7 +1344,7 @@ importers: version: 7.2.1 tsdown: specifier: 'catalog:' - version: 0.15.11(typescript@5.9.3) + version: 0.16.0(typescript@5.9.3)(unrun@0.2.1) packages/stripe: dependencies: @@ -1366,7 +1369,7 @@ importers: version: 19.1.0(@types/node@24.9.2) tsdown: specifier: 'catalog:' - version: 0.15.11(typescript@5.9.3) + version: 0.16.0(typescript@5.9.3)(unrun@0.2.1) packages/telemetry: dependencies: @@ -1382,10 +1385,10 @@ importers: version: link:../core tsdown: specifier: 'catalog:' - version: 0.15.11(typescript@5.9.3) + version: 0.16.0(typescript@5.9.3)(unrun@0.2.1) type-fest: - specifier: ^4.31.0 - version: 4.41.0 + specifier: ^5.2.0 + version: 5.2.0 packages: @@ -2464,8 +2467,8 @@ packages: '@emnapi/core@1.5.0': resolution: {integrity: sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==} - '@emnapi/core@1.6.0': - resolution: {integrity: sha512-zq/ay+9fNIJJtJiZxdTnXS20PllcYMX3OE23ESc4HK/bdYu3cOWYVhsOhVnXALfU/uqJIxn5NBPd9z4v+SfoSg==} + '@emnapi/core@1.7.0': + resolution: {integrity: sha512-pJdKGq/1iquWYtv1RRSljZklxHCOCAJFJrImO5ZLKPJVJlVUcs8yFwNQlqS0Lo8xT1VAXXTCZocF9n26FWEKsw==} '@emnapi/runtime@1.5.0': resolution: {integrity: sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==} @@ -2473,6 +2476,9 @@ packages: '@emnapi/runtime@1.6.0': resolution: {integrity: sha512-obtUmAHTMjll499P+D9A3axeJFlhdjOWdKUNs/U6QIGT7V5RjcUW1xToAzjvmgTSQhDbYn/NwfTRoJcQ2rNBxA==} + '@emnapi/runtime@1.7.0': + resolution: {integrity: sha512-oAYoQnCYaQZKVS53Fq23ceWMRxq5EhQsE0x0RdQ55jT7wagMu5k+fS39v1fiSLrtrLQlXwVINenqhLMtTrV/1Q==} + '@emnapi/wasi-threads@1.1.0': resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} @@ -3944,6 +3950,9 @@ packages: '@oxc-project/types@0.95.0': resolution: {integrity: sha512-vACy7vhpMPhjEJhULNxrdR0D943TkA/MigMpJCHmBHvMXxRStRi/dPtTlfQ3uDwWSzRpT8z+7ImjZVf8JWBocQ==} + '@oxc-project/types@0.96.0': + resolution: {integrity: sha512-r/xkmoXA0xEpU6UGtn18CNVjXH6erU3KCpCDbpLmbVxBFor1U9MqN5Z2uMmCHJuXjJzlnDR+hWY+yPoLo8oHDw==} + '@oxc-transform/binding-android-arm64@0.75.1': resolution: {integrity: sha512-nCWttA1TJpRlK6CFd8VbHHh7G8x06Fo1WKjuziwls112eSJrqPKQMCzWlpemgcbkzii1llviWOhNi46F+/rV3Q==} engines: {node: '>=14.0.0'} @@ -5302,89 +5311,175 @@ packages: cpu: [arm64] os: [android] + '@rolldown/binding-android-arm64@1.0.0-beta.46': + resolution: {integrity: sha512-1nfXUqZ227uKuLw9S12OQZU5z+h+cUOXLW5orntWVxHWvt20pt1PGUcVoIU8ssngKABu0vzHY268kAxuYX24BQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + '@rolldown/binding-darwin-arm64@1.0.0-beta.45': resolution: {integrity: sha512-xjCv4CRVsSnnIxTuyH1RDJl5OEQ1c9JYOwfDAHddjJDxCw46ZX9q80+xq7Eok7KC4bRSZudMJllkvOKv0T9SeA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] + '@rolldown/binding-darwin-arm64@1.0.0-beta.46': + resolution: {integrity: sha512-w4IyumCQkpA3ezZ37COG3mMusFYxjEE8zqCfXZU/qb5k1JMD2kVl0fgJafIbGli27tgelYMweXkJGnlrxSGT9Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + '@rolldown/binding-darwin-x64@1.0.0-beta.45': resolution: {integrity: sha512-ddcO9TD3D/CLUa/l8GO8LHzBOaZqWg5ClMy3jICoxwCuoz47h9dtqPsIeTiB6yR501LQTeDsjA4lIFd7u3Ljfw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] + '@rolldown/binding-darwin-x64@1.0.0-beta.46': + resolution: {integrity: sha512-9QqaRHPbdAnv306+7nzltq4CktJ49Z4W9ybHLWYxSeDSoOGL4l1QmxjDWoRHrqYEkNr+DWHqqoD4NNHgOk7lKw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + '@rolldown/binding-freebsd-x64@1.0.0-beta.45': resolution: {integrity: sha512-MBTWdrzW9w+UMYDUvnEuh0pQvLENkl2Sis15fHTfHVW7ClbGuez+RWopZudIDEGkpZXdeI4CkRXk+vdIIebrmg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] + '@rolldown/binding-freebsd-x64@1.0.0-beta.46': + resolution: {integrity: sha512-Cuk5opdEMb+Evi7QcGArc4hWVoHSGz/qyUUWLTpFJWjylb8wH1u4f+HZE6gVGACuf4w/5P/VhAIamHyweAbBVQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.45': resolution: {integrity: sha512-4YgoCFiki1HR6oSg+GxxfzfnVCesQxLF1LEnw9uXS/MpBmuog0EOO2rYfy69rWP4tFZL9IWp6KEfGZLrZ7aUog==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.46': + resolution: {integrity: sha512-BPWDxEnxb4JNMXrSmPuc5ywI6cHOELofmT0e/WGkbL1MwKYRVvqTf+gMcGLF6zAV+OF5hLYMAEk8XKfao6xmDQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.45': resolution: {integrity: sha512-LE1gjAwQRrbCOorJJ7LFr10s5vqYf5a00V5Ea9wXcT2+56n5YosJkcp8eQ12FxRBv2YX8dsdQJb+ZTtYJwb6XQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.46': + resolution: {integrity: sha512-CDQSVlryuRC955EwgbBK1h/6xQyttSxQG8+6/PeOfvUlfKGPMbBdcsOEHzGve5ED1Y7Ovh2UFjY/eT106aQqig==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.45': resolution: {integrity: sha512-tdy8ThO/fPp40B81v0YK3QC+KODOmzJzSUOO37DinQxzlTJ026gqUSOM8tzlVixRbQJltgVDCTYF8HNPRErQTA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.46': + resolution: {integrity: sha512-6IZHycZetmVaC9zwcl1aA9fPYPuxLa5apALjJRoJu/2BZdER3zBWxDnCzlEh4SUlo++cwdfV9ZQRK9JS8cLNuA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.45': resolution: {integrity: sha512-lS082ROBWdmOyVY/0YB3JmsiClaWoxvC+dA8/rbhyB9VLkvVEaihLEOr4CYmrMse151C4+S6hCw6oa1iewox7g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.46': + resolution: {integrity: sha512-R/kI8fMnsxXvWzcMv5A408hfvrwtAwD/HdQKIE1HKWmfxdSHB11Y3PVwlnt7RVo7I++6mWCIxxj5o3gut4ibEw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + '@rolldown/binding-linux-x64-musl@1.0.0-beta.45': resolution: {integrity: sha512-Hi73aYY0cBkr1/SvNQqH8Cd+rSV6S9RB5izCv0ySBcRnd/Wfn5plguUoGYwBnhHgFbh6cPw9m2dUVBR6BG1gxA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + '@rolldown/binding-linux-x64-musl@1.0.0-beta.46': + resolution: {integrity: sha512-vGUXKuHGUlG2XBwvN4A8KIegeaVVxN2ZxdGG9thycwRkzUvZ9ccKvqUVZM8cVRyNRWgVgsGCS18qLUefVplwKw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + '@rolldown/binding-openharmony-arm64@1.0.0-beta.45': resolution: {integrity: sha512-fljEqbO7RHHogNDxYtTzr+GNjlfOx21RUyGmF+NrkebZ8emYYiIqzPxsaMZuRx0rgZmVmliOzEp86/CQFDKhJQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] + '@rolldown/binding-openharmony-arm64@1.0.0-beta.46': + resolution: {integrity: sha512-6SpDGH+0Dud3/RFDoC6fva6+Cm/0COnMRKR8kI4ssHWlCXPymlM59kYFCIBLZZqwURpNVVMPln4rWjxXuwD23w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + '@rolldown/binding-wasm32-wasi@1.0.0-beta.45': resolution: {integrity: sha512-ZJDB7lkuZE9XUnWQSYrBObZxczut+8FZ5pdanm8nNS1DAo8zsrPuvGwn+U3fwU98WaiFsNrA4XHngesCGr8tEQ==} engines: {node: '>=14.0.0'} cpu: [wasm32] + '@rolldown/binding-wasm32-wasi@1.0.0-beta.46': + resolution: {integrity: sha512-peWDGp8YUAbTw5RJzr9AuPlTuf2adr+TBNIGF6ysMbobBKuQL41wYfGQlcerXJfLmjnQLf6DU2zTPBTfrS2Y8A==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.45': resolution: {integrity: sha512-zyzAjItHPUmxg6Z8SyRhLdXlJn3/D9KL5b9mObUrBHhWS/GwRH4665xCiFqeuktAhhWutqfc+rOV2LjK4VYQGQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.46': + resolution: {integrity: sha512-Ydbwg1JCnVbTAuDyKtu3dOuBLgZ6iZsy8p1jMPX/r7LMPnpXnS15GNcmMwa11nyl/M2VjGE1i/MORUTMt8mnRQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.45': resolution: {integrity: sha512-wODcGzlfxqS6D7BR0srkJk3drPwXYLu7jPHN27ce2c4PUnVVmJnp9mJzUQGT4LpmHmmVdMZ+P6hKvyTGBzc1CA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.46': + resolution: {integrity: sha512-XcPZG2uDxEn6G3takXQvi7xWgDiJqdC0N6mubL/giKD4I65zgQtbadwlIR8oDB/erOahZr5IX8cRBVcK3xcvpg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.45': resolution: {integrity: sha512-wiU40G1nQo9rtfvF9jLbl79lUgjfaD/LTyUEw2Wg/gdF5OhjzpKMVugZQngO+RNdwYaNj+Fs+kWBWfp4VXPMHA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.46': + resolution: {integrity: sha512-VPC+F9S6nllv02aGG+gxHRgpOaOlYBPn94kDe9DCFSLOztf4uYIAkN+tLDlg5OcsOC8XNR5rP49zOfI0PfnHYw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + '@rolldown/pluginutils@1.0.0-beta.32': resolution: {integrity: sha512-QReCdvxiUZAPkvp1xpAg62IeNzykOFA6syH2CnClif4YmALN1XKpB39XneL80008UbtMShthSVDKmrx05N1q/g==} '@rolldown/pluginutils@1.0.0-beta.45': resolution: {integrity: sha512-Le9ulGCrD8ggInzWw/k2J8QcbPz7eGIOWqfJ2L+1R0Opm7n6J37s2hiDWlh6LJN0Lk9L5sUzMvRHKW7UxBZsQA==} + '@rolldown/pluginutils@1.0.0-beta.46': + resolution: {integrity: sha512-xMNwJo/pHkEP/mhNVnW+zUiJDle6/hxrwO0mfSJuEVRbBfgrJFuUSRoZx/nYUw5pCjrysl9OkNXCkAdih8GCnA==} + '@rollup/plugin-alias@5.1.1': resolution: {integrity: sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==} engines: {node: '>=14.0.0'} @@ -6381,16 +6476,24 @@ packages: resolution: {integrity: sha512-eR8SYtf9Nem1Tnl0IWrY33qJ5wCtIWlt3Fs3c6V4aAaTFLtkEQErXu3SSZg/XCHrj9hXSJ8/8t+CdMk5Qec/ZA==} engines: {node: '>=18.0.0'} + '@whatwg-node/fetch@0.10.12': + resolution: {integrity: sha512-XmsCdDgQxbM8ha7xvIbDQyO/iES2ga0wQcM5sb+mugll1F+IzSshOMPK6n1TuqDDgjTwoU01mMa6oRhHWnpDcw==} + engines: {node: '>=18.0.0'} + '@whatwg-node/node-fetch@0.8.0': resolution: {integrity: sha512-+z00GpWxKV/q8eMETwbdi80TcOoVEVZ4xSRkxYOZpn3kbV3nej5iViNzXVke/j3v4y1YpO5zMS/CVDIASvJnZQ==} engines: {node: '>=18.0.0'} + '@whatwg-node/node-fetch@0.8.2': + resolution: {integrity: sha512-1PihEl0a8hm/AZD/LVRs1lEWCZCo2Q65Xm1goaHeqR314e+/Z7NI7YE10Yser8+2iZFGtv542IYr685o3aaZ/g==} + engines: {node: '>=18.0.0'} + '@whatwg-node/promise-helpers@1.3.2': resolution: {integrity: sha512-Nst5JdK47VIl9UcGwtv2Rcgyn5lWtZ0/mhRQ4G8NN2isxpq2TO30iqHzmwoJycjWuyUfg3GFXqP/gFHXeV57IA==} engines: {node: '>=16.0.0'} - '@whatwg-node/server@0.10.13': - resolution: {integrity: sha512-Otmxo+0mp8az3B48pLI1I4msNOXPIoP7TLm6h5wOEQmynqHt8oP9nR6NJUeJk6iI5OtFpQtkbJFwfGkmplvc3Q==} + '@whatwg-node/server@0.10.15': + resolution: {integrity: sha512-/BqffJYRIbX1HfNUZkPvtiSloC3QCvxAYC82g0uo3ruiJ44GOiCGH1q/XWF0/l5tWBvFsgX5VBA8l7IhQkCNfA==} engines: {node: '>=18.0.0'} '@whatwg-node/server@0.9.71': @@ -6767,8 +6870,8 @@ packages: birpc@0.2.14: resolution: {integrity: sha512-37FHE8rqsYM5JEKCnXFyHpBCzvgHEExwVVTq+nUmloInU7l8ezD1TpOhKpS8oe1DTYFqEK27rFZVKG43oTqXRA==} - birpc@2.6.1: - resolution: {integrity: sha512-LPnFhlDpdSH6FJhJyn4M0kFO7vtQ5iPw24FnG0y21q09xC7e8+1LeR31S1MAIrDAHp4m7aas4bEkTDTvMAtebQ==} + birpc@2.7.0: + resolution: {integrity: sha512-tub/wFGH49vNCm0xraykcY3TcRgX/3JsALYq/Lwrtti+bTyFHkCUAWF5wgYoie8P41wYwig2mIKiqoocr1EkEQ==} bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} @@ -7393,8 +7496,8 @@ packages: dax-sh@0.43.2: resolution: {integrity: sha512-uULa1sSIHgXKGCqJ/pA0zsnzbHlVnuq7g8O2fkHokWFNwEGIhh5lAJlxZa1POG5En5ba7AU4KcBAvGQWMMf8rg==} - dayjs@1.11.18: - resolution: {integrity: sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA==} + dayjs@1.11.19: + resolution: {integrity: sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==} db0@0.3.2: resolution: {integrity: sha512-xzWNQ6jk/+NtdfLyXEipbX55dmDSeteLFt/ayF+wZUU5bzKgmrDOxmInUTbyVRp46YwnJdkDA1KhB7WIXFofJw==} @@ -8017,8 +8120,8 @@ packages: resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - envinfo@7.19.0: - resolution: {integrity: sha512-DoSM9VyG6O3vqBf+p3Gjgr/Q52HYBBtO3v+4koAxt1MnWr+zEnxE+nke/yXS4lt2P4SYCHQ4V3f1i88LQVOpAw==} + envinfo@7.20.0: + resolution: {integrity: sha512-+zUomDcLXsVkQ37vUqWBvQwLaLlj8eZPSi61llaEFAVBY5mhcXdaSw1pSJVl4yTYD5g/gEfpNl28YYk4IPvrrg==} engines: {node: '>=4'} hasBin: true @@ -8132,8 +8235,8 @@ packages: engines: {node: '>=4'} hasBin: true - esrap@2.1.1: - resolution: {integrity: sha512-ebTT9B6lOtZGMgJ3o5r12wBacHctG7oEWazIda8UlPfA3HD/Wrv8FdXoVo73vzdpwCxNyXjPauyN2bbJzMkB9A==} + esrap@2.1.2: + resolution: {integrity: sha512-DgvlIQeowRNyvLPWW4PT7Gu13WznY288Du086E751mwwbsgr29ytBiYeLzAGIo0qk3Ujob0SDk8TiSaM5WQzNg==} estraverse@5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} @@ -11694,8 +11797,8 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true - rolldown-plugin-dts@0.17.2: - resolution: {integrity: sha512-tbLm7FoDvZAhAY33wJbq0ACw+srToKZ5xFqwn/K4tayGloZPXQHyOEPEYi7whEfTCaMndZWaho9+oiQTlwIe6Q==} + rolldown-plugin-dts@0.17.3: + resolution: {integrity: sha512-8mGnNUVNrqEdTnrlcaDxs4sAZg0No6njO+FuhQd4L56nUbJO1tHxOoKDH3mmMJg7f/BhEj/1KjU5W9kZ9zM/kQ==} engines: {node: '>=20.18.0'} peerDependencies: '@ts-macro/tsc': ^0.3.6 @@ -11718,6 +11821,11 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} hasBin: true + rolldown@1.0.0-beta.46: + resolution: {integrity: sha512-FYUbq0StVHOjkR/hEJ667Pup3ugeB9odBcbmxU5il9QfT9X2t/FPhkqFYQthbYxD2bKnQyO+2vHTgnmOHwZdeA==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + rollup-plugin-visualizer@6.0.3: resolution: {integrity: sha512-ZU41GwrkDcCpVoffviuM9Clwjy5fcUxlz0oMoTXTYsK+tcIFzbdacnrr2n8TXcHxbGKKXtOdjxM2HUS4HjkwIw==} engines: {node: '>=18'} @@ -11785,6 +11893,9 @@ packages: sax@1.4.1: resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} + sax@1.4.3: + resolution: {integrity: sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==} + scheduler@0.26.0: resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==} @@ -12269,6 +12380,10 @@ packages: resolution: {integrity: sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA==} engines: {node: '>=18'} + tagged-tag@1.0.0: + resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==} + engines: {node: '>=20'} + tailwind-merge@3.3.1: resolution: {integrity: sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g==} @@ -12379,6 +12494,10 @@ packages: tinyexec@1.0.1: resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==} + tinyexec@1.0.2: + resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==} + engines: {node: '>=18'} + tinyglobby@0.2.15: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} @@ -12464,19 +12583,23 @@ packages: ts-morph@26.0.0: resolution: {integrity: sha512-ztMO++owQnz8c/gIENcM9XfCEzgoGphTv+nKpYNM1bgsdOVC/jRZuEBf6N+mLLDNg68Kl+GgUZfOySaRiG1/Ug==} - tsdown@0.15.11: - resolution: {integrity: sha512-7k2OglWWt6LzvJKwEf1izbGvETvVfPYRBr9JgEYVRnz/R9LeJSp+B51FUMO46wUeEGtZ1jA3E3PtWWLlq3iygA==} + tsdown@0.16.0: + resolution: {integrity: sha512-VCqqxT5FbjCmxmLNlOLHiNhu1MBtdvCsk43murvUFloQzQzr/C0FRauWtAw7lAPmS40rZlgocCoTNFqX72WSTg==} engines: {node: '>=20.19.0'} hasBin: true peerDependencies: '@arethetypeswrong/core': ^0.18.1 + '@vitejs/devtools': ^0.0.0-alpha.10 publint: ^0.3.0 typescript: ^5.0.0 unplugin-lightningcss: ^0.4.0 unplugin-unused: ^0.5.0 + unrun: ^0.2.1 peerDependenciesMeta: '@arethetypeswrong/core': optional: true + '@vitejs/devtools': + optional: true publint: optional: true typescript: @@ -12485,6 +12608,8 @@ packages: optional: true unplugin-unused: optional: true + unrun: + optional: true tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -12553,6 +12678,10 @@ packages: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} + type-fest@5.2.0: + resolution: {integrity: sha512-xxCJm+Bckc6kQBknN7i9fnP/xobQRsRQxR01CztFkp/h++yfVxUUcmMgfR2HttJx/dpWjS9ubVuyspJv24Q9DA==} + engines: {node: '>=20'} + type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} @@ -14722,7 +14851,7 @@ snapshots: tslib: 2.8.1 optional: true - '@emnapi/core@1.6.0': + '@emnapi/core@1.7.0': dependencies: '@emnapi/wasi-threads': 1.1.0 tslib: 2.8.1 @@ -14738,6 +14867,11 @@ snapshots: tslib: 2.8.1 optional: true + '@emnapi/runtime@1.7.0': + dependencies: + tslib: 2.8.1 + optional: true + '@emnapi/wasi-threads@1.1.0': dependencies: tslib: 2.8.1 @@ -15404,7 +15538,7 @@ snapshots: postcss: 8.4.49 resolve-from: 5.0.0 optionalDependencies: - expo: 54.0.21(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.14)(graphql@16.11.0)(react-native@0.81.5(@babel/core@7.28.4)(@react-native-community/cli@20.0.1(typescript@5.9.3))(@react-native/metro-config@0.81.0(@babel/core@7.28.4))(@types/react@19.2.2)(react@19.2.0))(react@19.2.0) + expo: 54.0.21(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.14)(graphql@16.11.0)(react-native@0.80.2(@babel/core@7.28.4)(@react-native-community/cli@20.0.1(typescript@5.9.3))(@types/react@19.2.2)(react@19.2.0))(react@19.2.0) transitivePeerDependencies: - bufferutil - supports-color @@ -15489,7 +15623,7 @@ snapshots: '@expo/json-file': 10.0.7 '@react-native/normalize-colors': 0.81.5 debug: 4.4.3 - expo: 54.0.21(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.14)(graphql@16.11.0)(react-native@0.81.5(@babel/core@7.28.4)(@react-native-community/cli@20.0.1(typescript@5.9.3))(@react-native/metro-config@0.81.0(@babel/core@7.28.4))(@types/react@19.2.2)(react@19.2.0))(react@19.2.0) + expo: 54.0.21(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.14)(graphql@16.11.0)(react-native@0.80.2(@babel/core@7.28.4)(@react-native-community/cli@20.0.1(typescript@5.9.3))(@types/react@19.2.2)(react@19.2.0))(react@19.2.0) resolve-from: 5.0.0 semver: 7.7.3 xml2js: 0.6.0 @@ -16085,8 +16219,8 @@ snapshots: '@napi-rs/wasm-runtime@1.0.7': dependencies: - '@emnapi/core': 1.6.0 - '@emnapi/runtime': 1.6.0 + '@emnapi/core': 1.7.0 + '@emnapi/runtime': 1.7.0 '@tybys/wasm-util': 0.10.1 optional: true @@ -16121,7 +16255,7 @@ snapshots: '@netlify/dev-utils@4.1.1': dependencies: - '@whatwg-node/server': 0.10.13 + '@whatwg-node/server': 0.10.15 ansis: 4.2.0 chokidar: 4.0.3 decache: 4.6.2 @@ -16301,9 +16435,13 @@ snapshots: '@orama/orama': 3.1.14 lodash: 4.17.21 - '@oxc-project/runtime@0.95.0': {} + '@oxc-project/runtime@0.95.0': + optional: true - '@oxc-project/types@0.95.0': {} + '@oxc-project/types@0.95.0': + optional: true + + '@oxc-project/types@0.96.0': {} '@oxc-transform/binding-android-arm64@0.75.1': optional: true @@ -16458,7 +16596,8 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@pkgr/core@0.2.9': {} + '@pkgr/core@0.2.9': + optional: true '@playwright/test@1.55.0': dependencies: @@ -17364,7 +17503,7 @@ snapshots: chalk: 4.1.2 command-exists: 1.2.9 deepmerge: 4.3.1 - envinfo: 7.19.0 + envinfo: 7.20.0 execa: 5.1.1 node-stream-zip: 1.15.0 ora: 5.4.1 @@ -17713,7 +17852,9 @@ snapshots: metro-runtime: 0.83.3 transitivePeerDependencies: - '@babel/core' + - bufferutil - supports-color + - utf-8-validate optional: true '@react-native/normalize-colors@0.74.89': {} @@ -17939,50 +18080,97 @@ snapshots: '@rolldown/binding-android-arm64@1.0.0-beta.45': optional: true + '@rolldown/binding-android-arm64@1.0.0-beta.46': + optional: true + '@rolldown/binding-darwin-arm64@1.0.0-beta.45': optional: true + '@rolldown/binding-darwin-arm64@1.0.0-beta.46': + optional: true + '@rolldown/binding-darwin-x64@1.0.0-beta.45': optional: true + '@rolldown/binding-darwin-x64@1.0.0-beta.46': + optional: true + '@rolldown/binding-freebsd-x64@1.0.0-beta.45': optional: true + '@rolldown/binding-freebsd-x64@1.0.0-beta.46': + optional: true + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.45': optional: true + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.46': + optional: true + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.45': optional: true + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.46': + optional: true + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.45': optional: true + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.46': + optional: true + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.45': optional: true + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.46': + optional: true + '@rolldown/binding-linux-x64-musl@1.0.0-beta.45': optional: true + '@rolldown/binding-linux-x64-musl@1.0.0-beta.46': + optional: true + '@rolldown/binding-openharmony-arm64@1.0.0-beta.45': optional: true + '@rolldown/binding-openharmony-arm64@1.0.0-beta.46': + optional: true + '@rolldown/binding-wasm32-wasi@1.0.0-beta.45': dependencies: '@napi-rs/wasm-runtime': 1.0.7 optional: true + '@rolldown/binding-wasm32-wasi@1.0.0-beta.46': + dependencies: + '@napi-rs/wasm-runtime': 1.0.7 + optional: true + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.45': optional: true + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.46': + optional: true + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.45': optional: true + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.46': + optional: true + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.45': optional: true + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.46': + optional: true + '@rolldown/pluginutils@1.0.0-beta.32': {} - '@rolldown/pluginutils@1.0.0-beta.45': {} + '@rolldown/pluginutils@1.0.0-beta.45': + optional: true + + '@rolldown/pluginutils@1.0.0-beta.46': {} '@rollup/plugin-alias@5.1.1(rollup@4.52.5)': optionalDependencies: @@ -18264,11 +18452,11 @@ snapshots: dependencies: solid-js: 1.9.9 - '@solidjs/start@1.1.7(2349f88bdc5d85b81d15bb9fce6dda26)': + '@solidjs/start@1.1.7(3308c04babfa7dd313cc562daa7d6672)': dependencies: '@tanstack/server-functions-plugin': 1.121.21(vite@7.1.11(@types/node@24.9.2)(jiti@2.6.1)(less@4.4.1)(lightningcss@1.30.1)(sass@1.90.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) - '@vinxi/plugin-directives': 0.5.1(18aff52efe60c48bd3c1cb537716a94a) - '@vinxi/server-components': 0.5.1(18aff52efe60c48bd3c1cb537716a94a) + '@vinxi/plugin-directives': 0.5.1(9d1ca3e4a0c0663aa460843f53ff1261) + '@vinxi/server-components': 0.5.1(9d1ca3e4a0c0663aa460843f53ff1261) defu: 6.1.4 error-stack-parser: 2.1.4 html-to-image: 1.11.13 @@ -18279,7 +18467,7 @@ snapshots: source-map-js: 1.2.1 terracotta: 1.0.6(solid-js@1.9.9) tinyglobby: 0.2.15 - vinxi: 0.5.8(@azure/identity@4.11.1)(@libsql/client@0.15.14)(@netlify/blobs@10.0.8)(@types/node@24.9.2)(better-sqlite3@12.4.1)(db0@0.3.2(@libsql/client@0.15.14)(better-sqlite3@12.4.1)(drizzle-orm@0.44.5(@cloudflare/workers-types@4.20250903.0)(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.15.5)(better-sqlite3@12.4.1)(bun-types@1.3.1(@types/react@19.2.2))(kysely@0.28.5)(mysql2@3.14.4)(pg@8.16.3)(postgres@3.4.7)(prisma@5.22.0))(mysql2@3.14.4))(drizzle-orm@0.44.5(@cloudflare/workers-types@4.20250903.0)(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.15.5)(better-sqlite3@12.4.1)(bun-types@1.3.1(@types/react@19.2.2))(kysely@0.28.5)(mysql2@3.14.4)(pg@8.16.3)(postgres@3.4.7)(prisma@5.22.0))(ioredis@5.7.0)(jiti@2.6.1)(less@4.4.1)(lightningcss@1.30.1)(mysql2@3.14.4)(rolldown@1.0.0-beta.45)(sass@1.90.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vinxi: 0.5.8(@azure/identity@4.11.1)(@libsql/client@0.15.14)(@netlify/blobs@10.0.8)(@types/node@24.9.2)(better-sqlite3@12.4.1)(db0@0.3.2(@libsql/client@0.15.14)(better-sqlite3@12.4.1)(drizzle-orm@0.44.5(@cloudflare/workers-types@4.20250903.0)(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.15.5)(better-sqlite3@12.4.1)(bun-types@1.3.1(@types/react@19.2.2))(kysely@0.28.5)(mysql2@3.14.4)(pg@8.16.3)(postgres@3.4.7)(prisma@5.22.0))(mysql2@3.14.4))(drizzle-orm@0.44.5(@cloudflare/workers-types@4.20250903.0)(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.15.5)(better-sqlite3@12.4.1)(bun-types@1.3.1(@types/react@19.2.2))(kysely@0.28.5)(mysql2@3.14.4)(pg@8.16.3)(postgres@3.4.7)(prisma@5.22.0))(ioredis@5.7.0)(jiti@2.6.1)(less@4.4.1)(lightningcss@1.30.1)(mysql2@3.14.4)(rolldown@1.0.0-beta.46)(sass@1.90.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) vite-plugin-solid: 2.11.8(solid-js@1.9.9)(vite@7.1.11(@types/node@24.9.2)(jiti@2.6.1)(less@4.4.1)(lightningcss@1.30.1)(sass@1.90.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) transitivePeerDependencies: - '@testing-library/jest-dom' @@ -18473,9 +18661,9 @@ snapshots: tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - ? '@tanstack/react-start-plugin@1.131.27(@libsql/client@0.15.14)(@tanstack/react-router@1.131.27(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@vitejs/plugin-react@5.0.1(vite@7.1.11(@types/node@24.9.2)(jiti@2.6.1)(less@4.4.1)(lightningcss@1.30.1)(sass@1.90.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(better-sqlite3@12.4.1)(drizzle-orm@0.38.4(@cloudflare/workers-types@4.20250903.0)(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.15.5)(@types/react@19.2.2)(better-sqlite3@12.4.1)(bun-types@1.3.1(@types/react@19.2.2))(kysely@0.28.5)(mysql2@3.14.4)(pg@8.16.3)(postgres@3.4.7)(prisma@5.22.0)(react@19.2.0))(mysql2@3.14.4)(rolldown@1.0.0-beta.45)(vite-plugin-solid@2.11.8(solid-js@1.9.9)(vite@7.1.11(@types/node@24.9.2)(jiti@2.6.1)(less@4.4.1)(lightningcss@1.30.1)(sass@1.90.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(vite@7.1.11(@types/node@24.9.2)(jiti@2.6.1)(less@4.4.1)(lightningcss@1.30.1)(sass@1.90.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))' - : dependencies: - '@tanstack/start-plugin-core': 1.131.27(@libsql/client@0.15.14)(@tanstack/react-router@1.131.27(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(better-sqlite3@12.4.1)(drizzle-orm@0.38.4(@cloudflare/workers-types@4.20250903.0)(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.15.5)(@types/react@19.2.2)(better-sqlite3@12.4.1)(bun-types@1.3.1(@types/react@19.2.2))(kysely@0.28.5)(mysql2@3.14.4)(pg@8.16.3)(postgres@3.4.7)(prisma@5.22.0)(react@19.2.0))(mysql2@3.14.4)(rolldown@1.0.0-beta.45)(vite-plugin-solid@2.11.8(solid-js@1.9.9)(vite@7.1.11(@types/node@24.9.2)(jiti@2.6.1)(less@4.4.1)(lightningcss@1.30.1)(sass@1.90.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(vite@7.1.11(@types/node@24.9.2)(jiti@2.6.1)(less@4.4.1)(lightningcss@1.30.1)(sass@1.90.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + '@tanstack/react-start-plugin@1.131.27(@libsql/client@0.15.14)(@tanstack/react-router@1.131.27(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@vitejs/plugin-react@5.0.1(vite@7.1.11(@types/node@24.9.2)(jiti@2.6.1)(less@4.4.1)(lightningcss@1.30.1)(sass@1.90.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(better-sqlite3@12.4.1)(drizzle-orm@0.38.4(@cloudflare/workers-types@4.20250903.0)(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.15.5)(@types/react@19.2.2)(better-sqlite3@12.4.1)(bun-types@1.3.1(@types/react@19.2.2))(kysely@0.28.5)(mysql2@3.14.4)(pg@8.16.3)(postgres@3.4.7)(prisma@5.22.0)(react@19.2.0))(mysql2@3.14.4)(vite-plugin-solid@2.11.8(solid-js@1.9.9)(vite@7.1.11(@types/node@24.9.2)(jiti@2.6.1)(less@4.4.1)(lightningcss@1.30.1)(sass@1.90.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(vite@7.1.11(@types/node@24.9.2)(jiti@2.6.1)(less@4.4.1)(lightningcss@1.30.1)(sass@1.90.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': + dependencies: + '@tanstack/start-plugin-core': 1.131.27(@libsql/client@0.15.14)(@tanstack/react-router@1.131.27(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(better-sqlite3@12.4.1)(drizzle-orm@0.38.4(@cloudflare/workers-types@4.20250903.0)(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.15.5)(@types/react@19.2.2)(better-sqlite3@12.4.1)(bun-types@1.3.1(@types/react@19.2.2))(kysely@0.28.5)(mysql2@3.14.4)(pg@8.16.3)(postgres@3.4.7)(prisma@5.22.0)(react@19.2.0))(mysql2@3.14.4)(vite-plugin-solid@2.11.8(solid-js@1.9.9)(vite@7.1.11(@types/node@24.9.2)(jiti@2.6.1)(less@4.4.1)(lightningcss@1.30.1)(sass@1.90.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(vite@7.1.11(@types/node@24.9.2)(jiti@2.6.1)(less@4.4.1)(lightningcss@1.30.1)(sass@1.90.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) '@vitejs/plugin-react': 5.0.1(vite@7.1.11(@types/node@24.9.2)(jiti@2.6.1)(less@4.4.1)(lightningcss@1.30.1)(sass@1.90.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) pathe: 2.0.3 vite: 7.1.11(@types/node@24.9.2)(jiti@2.6.1)(less@4.4.1)(lightningcss@1.30.1)(sass@1.90.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) @@ -18524,10 +18712,10 @@ snapshots: react: 19.2.0 react-dom: 19.2.0(react@19.2.0) - '@tanstack/react-start@1.131.27(b110b882dd6b12444cfb3c083a97718f)': + '@tanstack/react-start@1.131.27(2d8e7679b040dff6853256ee92c3c2ba)': dependencies: '@tanstack/react-start-client': 1.131.27(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@tanstack/react-start-plugin': 1.131.27(@libsql/client@0.15.14)(@tanstack/react-router@1.131.27(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@vitejs/plugin-react@5.0.1(vite@7.1.11(@types/node@24.9.2)(jiti@2.6.1)(less@4.4.1)(lightningcss@1.30.1)(sass@1.90.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(better-sqlite3@12.4.1)(drizzle-orm@0.38.4(@cloudflare/workers-types@4.20250903.0)(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.15.5)(@types/react@19.2.2)(better-sqlite3@12.4.1)(bun-types@1.3.1(@types/react@19.2.2))(kysely@0.28.5)(mysql2@3.14.4)(pg@8.16.3)(postgres@3.4.7)(prisma@5.22.0)(react@19.2.0))(mysql2@3.14.4)(rolldown@1.0.0-beta.45)(vite-plugin-solid@2.11.8(solid-js@1.9.9)(vite@7.1.11(@types/node@24.9.2)(jiti@2.6.1)(less@4.4.1)(lightningcss@1.30.1)(sass@1.90.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(vite@7.1.11(@types/node@24.9.2)(jiti@2.6.1)(less@4.4.1)(lightningcss@1.30.1)(sass@1.90.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + '@tanstack/react-start-plugin': 1.131.27(@libsql/client@0.15.14)(@tanstack/react-router@1.131.27(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@vitejs/plugin-react@5.0.1(vite@7.1.11(@types/node@24.9.2)(jiti@2.6.1)(less@4.4.1)(lightningcss@1.30.1)(sass@1.90.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(better-sqlite3@12.4.1)(drizzle-orm@0.38.4(@cloudflare/workers-types@4.20250903.0)(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.15.5)(@types/react@19.2.2)(better-sqlite3@12.4.1)(bun-types@1.3.1(@types/react@19.2.2))(kysely@0.28.5)(mysql2@3.14.4)(pg@8.16.3)(postgres@3.4.7)(prisma@5.22.0)(react@19.2.0))(mysql2@3.14.4)(vite-plugin-solid@2.11.8(solid-js@1.9.9)(vite@7.1.11(@types/node@24.9.2)(jiti@2.6.1)(less@4.4.1)(lightningcss@1.30.1)(sass@1.90.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(vite@7.1.11(@types/node@24.9.2)(jiti@2.6.1)(less@4.4.1)(lightningcss@1.30.1)(sass@1.90.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) '@tanstack/react-start-server': 1.131.27(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@tanstack/start-server-functions-client': 1.131.27(vite@7.1.11(@types/node@24.9.2)(jiti@2.6.1)(less@4.4.1)(lightningcss@1.30.1)(sass@1.90.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) '@tanstack/start-server-functions-server': 1.131.2(vite@7.1.11(@types/node@24.9.2)(jiti@2.6.1)(less@4.4.1)(lightningcss@1.30.1)(sass@1.90.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) @@ -18689,7 +18877,7 @@ snapshots: tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@tanstack/start-plugin-core@1.131.27(@libsql/client@0.15.14)(@tanstack/react-router@1.131.27(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(better-sqlite3@12.4.1)(drizzle-orm@0.38.4(@cloudflare/workers-types@4.20250903.0)(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.15.5)(@types/react@19.2.2)(better-sqlite3@12.4.1)(bun-types@1.3.1(@types/react@19.2.2))(kysely@0.28.5)(mysql2@3.14.4)(pg@8.16.3)(postgres@3.4.7)(prisma@5.22.0)(react@19.2.0))(mysql2@3.14.4)(rolldown@1.0.0-beta.45)(vite-plugin-solid@2.11.8(solid-js@1.9.9)(vite@7.1.11(@types/node@24.9.2)(jiti@2.6.1)(less@4.4.1)(lightningcss@1.30.1)(sass@1.90.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(vite@7.1.11(@types/node@24.9.2)(jiti@2.6.1)(less@4.4.1)(lightningcss@1.30.1)(sass@1.90.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': + '@tanstack/start-plugin-core@1.131.27(@libsql/client@0.15.14)(@tanstack/react-router@1.131.27(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(better-sqlite3@12.4.1)(drizzle-orm@0.38.4(@cloudflare/workers-types@4.20250903.0)(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.15.5)(@types/react@19.2.2)(better-sqlite3@12.4.1)(bun-types@1.3.1(@types/react@19.2.2))(kysely@0.28.5)(mysql2@3.14.4)(pg@8.16.3)(postgres@3.4.7)(prisma@5.22.0)(react@19.2.0))(mysql2@3.14.4)(vite-plugin-solid@2.11.8(solid-js@1.9.9)(vite@7.1.11(@types/node@24.9.2)(jiti@2.6.1)(less@4.4.1)(lightningcss@1.30.1)(sass@1.90.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(vite@7.1.11(@types/node@24.9.2)(jiti@2.6.1)(less@4.4.1)(lightningcss@1.30.1)(sass@1.90.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@babel/code-frame': 7.26.2 '@babel/core': 7.28.4 @@ -18705,7 +18893,7 @@ snapshots: babel-dead-code-elimination: 1.0.10 cheerio: 1.1.2 h3: 1.13.0 - nitropack: 2.12.4(@libsql/client@0.15.14)(better-sqlite3@12.4.1)(drizzle-orm@0.38.4(@cloudflare/workers-types@4.20250903.0)(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.15.5)(@types/react@19.2.2)(better-sqlite3@12.4.1)(bun-types@1.3.1(@types/react@19.2.2))(kysely@0.28.5)(mysql2@3.14.4)(pg@8.16.3)(postgres@3.4.7)(prisma@5.22.0)(react@19.2.0))(mysql2@3.14.4)(rolldown@1.0.0-beta.45) + nitropack: 2.12.4(@libsql/client@0.15.14)(better-sqlite3@12.4.1)(drizzle-orm@0.38.4(@cloudflare/workers-types@4.20250903.0)(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.15.5)(@types/react@19.2.2)(better-sqlite3@12.4.1)(bun-types@1.3.1(@types/react@19.2.2))(kysely@0.28.5)(mysql2@3.14.4)(pg@8.16.3)(postgres@3.4.7)(prisma@5.22.0)(react@19.2.0))(mysql2@3.14.4) pathe: 2.0.3 ufo: 1.6.1 vite: 7.1.11(@types/node@24.9.2)(jiti@2.6.1)(less@4.4.1)(lightningcss@1.30.1)(sass@1.90.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) @@ -19173,7 +19361,7 @@ snapshots: untun: 0.1.3 uqr: 0.1.2 - '@vinxi/plugin-directives@0.5.1(18aff52efe60c48bd3c1cb537716a94a)': + '@vinxi/plugin-directives@0.5.1(9d1ca3e4a0c0663aa460843f53ff1261)': dependencies: '@babel/parser': 7.28.4 acorn: 8.15.0 @@ -19184,18 +19372,18 @@ snapshots: magicast: 0.2.11 recast: 0.23.11 tslib: 2.8.1 - vinxi: 0.5.8(@azure/identity@4.11.1)(@libsql/client@0.15.14)(@netlify/blobs@10.0.8)(@types/node@24.9.2)(better-sqlite3@12.4.1)(db0@0.3.2(@libsql/client@0.15.14)(better-sqlite3@12.4.1)(drizzle-orm@0.44.5(@cloudflare/workers-types@4.20250903.0)(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.15.5)(better-sqlite3@12.4.1)(bun-types@1.3.1(@types/react@19.2.2))(kysely@0.28.5)(mysql2@3.14.4)(pg@8.16.3)(postgres@3.4.7)(prisma@5.22.0))(mysql2@3.14.4))(drizzle-orm@0.44.5(@cloudflare/workers-types@4.20250903.0)(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.15.5)(better-sqlite3@12.4.1)(bun-types@1.3.1(@types/react@19.2.2))(kysely@0.28.5)(mysql2@3.14.4)(pg@8.16.3)(postgres@3.4.7)(prisma@5.22.0))(ioredis@5.7.0)(jiti@2.6.1)(less@4.4.1)(lightningcss@1.30.1)(mysql2@3.14.4)(rolldown@1.0.0-beta.45)(sass@1.90.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vinxi: 0.5.8(@azure/identity@4.11.1)(@libsql/client@0.15.14)(@netlify/blobs@10.0.8)(@types/node@24.9.2)(better-sqlite3@12.4.1)(db0@0.3.2(@libsql/client@0.15.14)(better-sqlite3@12.4.1)(drizzle-orm@0.44.5(@cloudflare/workers-types@4.20250903.0)(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.15.5)(better-sqlite3@12.4.1)(bun-types@1.3.1(@types/react@19.2.2))(kysely@0.28.5)(mysql2@3.14.4)(pg@8.16.3)(postgres@3.4.7)(prisma@5.22.0))(mysql2@3.14.4))(drizzle-orm@0.44.5(@cloudflare/workers-types@4.20250903.0)(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.15.5)(better-sqlite3@12.4.1)(bun-types@1.3.1(@types/react@19.2.2))(kysely@0.28.5)(mysql2@3.14.4)(pg@8.16.3)(postgres@3.4.7)(prisma@5.22.0))(ioredis@5.7.0)(jiti@2.6.1)(less@4.4.1)(lightningcss@1.30.1)(mysql2@3.14.4)(rolldown@1.0.0-beta.46)(sass@1.90.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - '@vinxi/server-components@0.5.1(18aff52efe60c48bd3c1cb537716a94a)': + '@vinxi/server-components@0.5.1(9d1ca3e4a0c0663aa460843f53ff1261)': dependencies: - '@vinxi/plugin-directives': 0.5.1(18aff52efe60c48bd3c1cb537716a94a) + '@vinxi/plugin-directives': 0.5.1(9d1ca3e4a0c0663aa460843f53ff1261) acorn: 8.15.0 acorn-loose: 8.5.2 acorn-typescript: 1.4.13(acorn@8.15.0) astring: 1.9.0 magicast: 0.2.11 recast: 0.23.11 - vinxi: 0.5.8(@azure/identity@4.11.1)(@libsql/client@0.15.14)(@netlify/blobs@10.0.8)(@types/node@24.9.2)(better-sqlite3@12.4.1)(db0@0.3.2(@libsql/client@0.15.14)(better-sqlite3@12.4.1)(drizzle-orm@0.44.5(@cloudflare/workers-types@4.20250903.0)(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.15.5)(better-sqlite3@12.4.1)(bun-types@1.3.1(@types/react@19.2.2))(kysely@0.28.5)(mysql2@3.14.4)(pg@8.16.3)(postgres@3.4.7)(prisma@5.22.0))(mysql2@3.14.4))(drizzle-orm@0.44.5(@cloudflare/workers-types@4.20250903.0)(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.15.5)(better-sqlite3@12.4.1)(bun-types@1.3.1(@types/react@19.2.2))(kysely@0.28.5)(mysql2@3.14.4)(pg@8.16.3)(postgres@3.4.7)(prisma@5.22.0))(ioredis@5.7.0)(jiti@2.6.1)(less@4.4.1)(lightningcss@1.30.1)(mysql2@3.14.4)(rolldown@1.0.0-beta.45)(sass@1.90.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vinxi: 0.5.8(@azure/identity@4.11.1)(@libsql/client@0.15.14)(@netlify/blobs@10.0.8)(@types/node@24.9.2)(better-sqlite3@12.4.1)(db0@0.3.2(@libsql/client@0.15.14)(better-sqlite3@12.4.1)(drizzle-orm@0.44.5(@cloudflare/workers-types@4.20250903.0)(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.15.5)(better-sqlite3@12.4.1)(bun-types@1.3.1(@types/react@19.2.2))(kysely@0.28.5)(mysql2@3.14.4)(pg@8.16.3)(postgres@3.4.7)(prisma@5.22.0))(mysql2@3.14.4))(drizzle-orm@0.44.5(@cloudflare/workers-types@4.20250903.0)(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.15.5)(better-sqlite3@12.4.1)(bun-types@1.3.1(@types/react@19.2.2))(kysely@0.28.5)(mysql2@3.14.4)(pg@8.16.3)(postgres@3.4.7)(prisma@5.22.0))(ioredis@5.7.0)(jiti@2.6.1)(less@4.4.1)(lightningcss@1.30.1)(mysql2@3.14.4)(rolldown@1.0.0-beta.46)(sass@1.90.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) '@vitejs/plugin-react@5.0.1(vite@7.1.11(@types/node@24.9.2)(jiti@2.6.1)(less@4.4.1)(lightningcss@1.30.1)(sass@1.90.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: @@ -19325,6 +19513,12 @@ snapshots: '@whatwg-node/node-fetch': 0.8.0 urlpattern-polyfill: 10.1.0 + '@whatwg-node/fetch@0.10.12': + dependencies: + '@whatwg-node/node-fetch': 0.8.2 + urlpattern-polyfill: 10.1.0 + optional: true + '@whatwg-node/node-fetch@0.8.0': dependencies: '@fastify/busboy': 3.2.0 @@ -19332,15 +19526,23 @@ snapshots: '@whatwg-node/promise-helpers': 1.3.2 tslib: 2.8.1 + '@whatwg-node/node-fetch@0.8.2': + dependencies: + '@fastify/busboy': 3.2.0 + '@whatwg-node/disposablestack': 0.0.6 + '@whatwg-node/promise-helpers': 1.3.2 + tslib: 2.8.1 + optional: true + '@whatwg-node/promise-helpers@1.3.2': dependencies: tslib: 2.8.1 - '@whatwg-node/server@0.10.13': + '@whatwg-node/server@0.10.15': dependencies: '@envelop/instrumentation': 1.0.0 '@whatwg-node/disposablestack': 0.0.6 - '@whatwg-node/fetch': 0.10.11 + '@whatwg-node/fetch': 0.10.12 '@whatwg-node/promise-helpers': 1.3.2 tslib: 2.8.1 optional: true @@ -19704,7 +19906,7 @@ snapshots: resolve-from: 5.0.0 optionalDependencies: '@babel/runtime': 7.28.4 - expo: 54.0.21(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.14)(graphql@16.11.0)(react-native@0.81.5(@babel/core@7.28.4)(@react-native-community/cli@20.0.1(typescript@5.9.3))(@react-native/metro-config@0.81.0(@babel/core@7.28.4))(@types/react@19.2.2)(react@19.2.0))(react@19.2.0) + expo: 54.0.21(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.14)(graphql@16.11.0)(react-native@0.80.2(@babel/core@7.28.4)(@react-native-community/cli@20.0.1(typescript@5.9.3))(@types/react@19.2.2)(react@19.2.0))(react@19.2.0) transitivePeerDependencies: - '@babel/core' - supports-color @@ -19777,7 +19979,7 @@ snapshots: birpc@0.2.14: {} - birpc@2.6.1: {} + birpc@2.7.0: {} bl@4.1.0: dependencies: @@ -20472,7 +20674,7 @@ snapshots: '@deno/shim-deno': 0.19.2 undici-types: 5.28.4 - dayjs@1.11.18: + dayjs@1.11.19: optional: true db0@0.3.2(@libsql/client@0.15.14)(better-sqlite3@12.4.1)(drizzle-orm@0.38.4(@cloudflare/workers-types@4.20250903.0)(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.15.5)(@types/react@19.2.2)(better-sqlite3@12.4.1)(bun-types@1.3.1(@types/react@19.2.2))(kysely@0.28.5)(mysql2@3.14.4)(pg@8.16.3)(postgres@3.4.7)(prisma@5.22.0)(react@19.2.0))(mysql2@3.14.4): @@ -20808,7 +21010,7 @@ snapshots: env-paths@3.0.0: {} - envinfo@7.19.0: + envinfo@7.20.0: optional: true errno@0.1.8: @@ -21008,7 +21210,7 @@ snapshots: esprima@4.0.1: {} - esrap@2.1.1: + esrap@2.1.2: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -21193,7 +21395,7 @@ snapshots: expo-keep-awake@15.0.7(expo@54.0.21)(react@19.2.0): dependencies: - expo: 54.0.21(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.14)(graphql@16.11.0)(react-native@0.81.5(@babel/core@7.28.4)(@react-native-community/cli@20.0.1(typescript@5.9.3))(@react-native/metro-config@0.81.0(@babel/core@7.28.4))(@types/react@19.2.2)(react@19.2.0))(react@19.2.0) + expo: 54.0.21(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.14)(graphql@16.11.0)(react-native@0.80.2(@babel/core@7.28.4)(@react-native-community/cli@20.0.1(typescript@5.9.3))(@types/react@19.2.2)(react@19.2.0))(react@19.2.0) react: 19.2.0 expo-linking@7.1.7(expo@54.0.21)(react-native@0.80.2(@babel/core@7.28.4)(@react-native-community/cli@20.0.1(typescript@5.9.3))(@types/react@19.2.2)(react@19.2.0))(react@19.2.0): @@ -21845,7 +22047,7 @@ snapshots: function-bind@1.1.2: {} - geist@1.4.2(next@16.0.1(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.55.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.90.0)): + geist@1.4.2(next@16.0.1(@opentelemetry/api@1.9.0)(@playwright/test@1.55.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.90.0)): dependencies: next: 16.0.1(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.55.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.90.0) @@ -22925,7 +23127,7 @@ snapshots: logkitty@0.7.1: dependencies: ansi-fragments: 0.2.1 - dayjs: 1.11.18 + dayjs: 1.11.19 yargs: 15.4.1 optional: true @@ -24218,7 +24420,7 @@ snapshots: needle@3.3.1: dependencies: iconv-lite: 0.6.3 - sax: 1.4.1 + sax: 1.4.3 optional: true negotiator@0.6.3: {} @@ -24270,7 +24472,7 @@ snapshots: - '@babel/core' - babel-plugin-macros - nitropack@2.12.4(@azure/identity@4.11.1)(@libsql/client@0.15.14)(@netlify/blobs@10.0.8)(better-sqlite3@12.4.1)(drizzle-orm@0.44.5(@cloudflare/workers-types@4.20250903.0)(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.15.5)(better-sqlite3@12.4.1)(bun-types@1.3.1(@types/react@19.2.2))(kysely@0.28.5)(mysql2@3.14.4)(pg@8.16.3)(postgres@3.4.7)(prisma@5.22.0))(mysql2@3.14.4)(rolldown@1.0.0-beta.45): + nitropack@2.12.4(@azure/identity@4.11.1)(@libsql/client@0.15.14)(@netlify/blobs@10.0.8)(better-sqlite3@12.4.1)(drizzle-orm@0.44.5(@cloudflare/workers-types@4.20250903.0)(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.15.5)(better-sqlite3@12.4.1)(bun-types@1.3.1(@types/react@19.2.2))(kysely@0.28.5)(mysql2@3.14.4)(pg@8.16.3)(postgres@3.4.7)(prisma@5.22.0))(mysql2@3.14.4)(rolldown@1.0.0-beta.46): dependencies: '@cloudflare/kv-asset-handler': 0.4.0 '@netlify/functions': 3.1.10(rollup@4.52.5) @@ -24324,7 +24526,7 @@ snapshots: pretty-bytes: 6.1.1 radix3: 1.1.2 rollup: 4.52.5 - rollup-plugin-visualizer: 6.0.3(rolldown@1.0.0-beta.45)(rollup@4.52.5) + rollup-plugin-visualizer: 6.0.3(rolldown@1.0.0-beta.46)(rollup@4.52.5) scule: 1.3.0 semver: 7.7.3 serve-placeholder: 2.0.2 @@ -24370,7 +24572,7 @@ snapshots: - supports-color - uploadthing - nitropack@2.12.4(@libsql/client@0.15.14)(better-sqlite3@12.4.1)(drizzle-orm@0.38.4(@cloudflare/workers-types@4.20250903.0)(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.15.5)(@types/react@19.2.2)(better-sqlite3@12.4.1)(bun-types@1.3.1(@types/react@19.2.2))(kysely@0.28.5)(mysql2@3.14.4)(pg@8.16.3)(postgres@3.4.7)(prisma@5.22.0)(react@19.2.0))(mysql2@3.14.4)(rolldown@1.0.0-beta.45): + nitropack@2.12.4(@libsql/client@0.15.14)(better-sqlite3@12.4.1)(drizzle-orm@0.38.4(@cloudflare/workers-types@4.20250903.0)(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.15.5)(@types/react@19.2.2)(better-sqlite3@12.4.1)(bun-types@1.3.1(@types/react@19.2.2))(kysely@0.28.5)(mysql2@3.14.4)(pg@8.16.3)(postgres@3.4.7)(prisma@5.22.0)(react@19.2.0))(mysql2@3.14.4): dependencies: '@cloudflare/kv-asset-handler': 0.4.0 '@netlify/functions': 3.1.10(rollup@4.52.5) @@ -24424,7 +24626,7 @@ snapshots: pretty-bytes: 6.1.1 radix3: 1.1.2 rollup: 4.52.5 - rollup-plugin-visualizer: 6.0.3(rolldown@1.0.0-beta.45)(rollup@4.52.5) + rollup-plugin-visualizer: 6.0.3(rolldown@1.0.0-beta.46)(rollup@4.52.5) scule: 1.3.0 semver: 7.7.3 serve-placeholder: 2.0.2 @@ -25905,18 +26107,18 @@ snapshots: dependencies: glob: 7.2.3 - rolldown-plugin-dts@0.17.2(rolldown@1.0.0-beta.45)(typescript@5.9.3): + rolldown-plugin-dts@0.17.3(rolldown@1.0.0-beta.46)(typescript@5.9.3): dependencies: '@babel/generator': 7.28.5 '@babel/parser': 7.28.5 '@babel/types': 7.28.5 ast-kit: 2.1.3 - birpc: 2.6.1 + birpc: 2.7.0 debug: 4.4.3 dts-resolver: 2.1.2 get-tsconfig: 4.13.0 magic-string: 0.30.21 - rolldown: 1.0.0-beta.45 + rolldown: 1.0.0-beta.46 optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: @@ -25942,15 +26144,36 @@ snapshots: '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.45 '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.45 '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.45 + optional: true - rollup-plugin-visualizer@6.0.3(rolldown@1.0.0-beta.45)(rollup@4.52.5): + rolldown@1.0.0-beta.46: + dependencies: + '@oxc-project/types': 0.96.0 + '@rolldown/pluginutils': 1.0.0-beta.46 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.0.0-beta.46 + '@rolldown/binding-darwin-arm64': 1.0.0-beta.46 + '@rolldown/binding-darwin-x64': 1.0.0-beta.46 + '@rolldown/binding-freebsd-x64': 1.0.0-beta.46 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.46 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.46 + '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.46 + '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.46 + '@rolldown/binding-linux-x64-musl': 1.0.0-beta.46 + '@rolldown/binding-openharmony-arm64': 1.0.0-beta.46 + '@rolldown/binding-wasm32-wasi': 1.0.0-beta.46 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.46 + '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.46 + '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.46 + + rollup-plugin-visualizer@6.0.3(rolldown@1.0.0-beta.46)(rollup@4.52.5): dependencies: open: 8.4.2 picomatch: 4.0.3 source-map: 0.7.6 yargs: 17.7.2 optionalDependencies: - rolldown: 1.0.0-beta.45 + rolldown: 1.0.0-beta.46 rollup: 4.52.5 rollup@4.52.5: @@ -26054,6 +26277,9 @@ snapshots: sax@1.4.1: {} + sax@1.4.3: + optional: true + scheduler@0.26.0: {} scheduler@0.27.0: {} @@ -26600,7 +26826,7 @@ snapshots: axobject-query: 4.1.0 clsx: 2.1.1 esm-env: 1.2.2 - esrap: 2.1.1 + esrap: 2.1.2 is-reference: 3.0.3 locate-character: 3.0.0 magic-string: 0.30.21 @@ -26615,9 +26841,12 @@ snapshots: synckit@0.11.11: dependencies: '@pkgr/core': 0.2.9 + optional: true system-architecture@0.1.0: {} + tagged-tag@1.0.0: {} + tailwind-merge@3.3.1: {} tailwindcss-animate@1.0.7(tailwindcss@4.1.13): @@ -26763,6 +26992,8 @@ snapshots: tinyexec@1.0.1: {} + tinyexec@1.0.2: {} + tinyglobby@0.2.15: dependencies: fdir: 6.5.0(picomatch@4.0.3) @@ -26827,7 +27058,7 @@ snapshots: '@ts-morph/common': 0.27.0 code-block-writer: 13.0.3 - tsdown@0.15.11(typescript@5.9.3): + tsdown@0.16.0(typescript@5.9.3)(unrun@0.2.1): dependencies: ansis: 4.2.0 cac: 6.7.14 @@ -26836,16 +27067,16 @@ snapshots: diff: 8.0.2 empathic: 2.0.0 hookable: 5.5.3 - rolldown: 1.0.0-beta.45 - rolldown-plugin-dts: 0.17.2(rolldown@1.0.0-beta.45)(typescript@5.9.3) + rolldown: 1.0.0-beta.46 + rolldown-plugin-dts: 0.17.3(rolldown@1.0.0-beta.46)(typescript@5.9.3) semver: 7.7.3 - tinyexec: 1.0.1 + tinyexec: 1.0.2 tinyglobby: 0.2.15 tree-kill: 1.2.2 unconfig: 7.3.3 - unrun: 0.2.1 optionalDependencies: typescript: 5.9.3 + unrun: 0.2.1 transitivePeerDependencies: - '@ts-macro/tsc' - '@typescript/native-preview' @@ -26906,6 +27137,10 @@ snapshots: type-fest@4.41.0: {} + type-fest@5.2.0: + dependencies: + tagged-tag: 1.0.0 + type-is@1.6.18: dependencies: media-typer: 0.3.0 @@ -27088,6 +27323,7 @@ snapshots: '@oxc-project/runtime': 0.95.0 rolldown: 1.0.0-beta.45 synckit: 0.11.11 + optional: true unstorage@1.16.1(@azure/identity@4.11.1)(@netlify/blobs@10.0.8)(db0@0.3.2(@libsql/client@0.15.14)(better-sqlite3@12.4.1)(drizzle-orm@0.44.5(@cloudflare/workers-types@4.20250903.0)(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.15.5)(better-sqlite3@12.4.1)(bun-types@1.3.1(@types/react@19.2.2))(kysely@0.28.5)(mysql2@3.14.4)(pg@8.16.3)(postgres@3.4.7)(prisma@5.22.0))(mysql2@3.14.4))(ioredis@5.7.0): dependencies: @@ -27238,7 +27474,7 @@ snapshots: d3-time: 3.1.0 d3-timer: 3.0.1 - vinxi@0.5.8(@azure/identity@4.11.1)(@libsql/client@0.15.14)(@netlify/blobs@10.0.8)(@types/node@24.9.2)(better-sqlite3@12.4.1)(db0@0.3.2(@libsql/client@0.15.14)(better-sqlite3@12.4.1)(drizzle-orm@0.44.5(@cloudflare/workers-types@4.20250903.0)(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.15.5)(better-sqlite3@12.4.1)(bun-types@1.3.1(@types/react@19.2.2))(kysely@0.28.5)(mysql2@3.14.4)(pg@8.16.3)(postgres@3.4.7)(prisma@5.22.0))(mysql2@3.14.4))(drizzle-orm@0.44.5(@cloudflare/workers-types@4.20250903.0)(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.15.5)(better-sqlite3@12.4.1)(bun-types@1.3.1(@types/react@19.2.2))(kysely@0.28.5)(mysql2@3.14.4)(pg@8.16.3)(postgres@3.4.7)(prisma@5.22.0))(ioredis@5.7.0)(jiti@2.6.1)(less@4.4.1)(lightningcss@1.30.1)(mysql2@3.14.4)(rolldown@1.0.0-beta.45)(sass@1.90.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1): + vinxi@0.5.8(@azure/identity@4.11.1)(@libsql/client@0.15.14)(@netlify/blobs@10.0.8)(@types/node@24.9.2)(better-sqlite3@12.4.1)(db0@0.3.2(@libsql/client@0.15.14)(better-sqlite3@12.4.1)(drizzle-orm@0.44.5(@cloudflare/workers-types@4.20250903.0)(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.15.5)(better-sqlite3@12.4.1)(bun-types@1.3.1(@types/react@19.2.2))(kysely@0.28.5)(mysql2@3.14.4)(pg@8.16.3)(postgres@3.4.7)(prisma@5.22.0))(mysql2@3.14.4))(drizzle-orm@0.44.5(@cloudflare/workers-types@4.20250903.0)(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.15.5)(better-sqlite3@12.4.1)(bun-types@1.3.1(@types/react@19.2.2))(kysely@0.28.5)(mysql2@3.14.4)(pg@8.16.3)(postgres@3.4.7)(prisma@5.22.0))(ioredis@5.7.0)(jiti@2.6.1)(less@4.4.1)(lightningcss@1.30.1)(mysql2@3.14.4)(rolldown@1.0.0-beta.46)(sass@1.90.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1): dependencies: '@babel/core': 7.28.4 '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4) @@ -27259,7 +27495,7 @@ snapshots: hookable: 5.5.3 http-proxy: 1.18.1 micromatch: 4.0.8 - nitropack: 2.12.4(@azure/identity@4.11.1)(@libsql/client@0.15.14)(@netlify/blobs@10.0.8)(better-sqlite3@12.4.1)(drizzle-orm@0.44.5(@cloudflare/workers-types@4.20250903.0)(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.15.5)(better-sqlite3@12.4.1)(bun-types@1.3.1(@types/react@19.2.2))(kysely@0.28.5)(mysql2@3.14.4)(pg@8.16.3)(postgres@3.4.7)(prisma@5.22.0))(mysql2@3.14.4)(rolldown@1.0.0-beta.45) + nitropack: 2.12.4(@azure/identity@4.11.1)(@libsql/client@0.15.14)(@netlify/blobs@10.0.8)(better-sqlite3@12.4.1)(drizzle-orm@0.44.5(@cloudflare/workers-types@4.20250903.0)(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.15.5)(better-sqlite3@12.4.1)(bun-types@1.3.1(@types/react@19.2.2))(kysely@0.28.5)(mysql2@3.14.4)(pg@8.16.3)(postgres@3.4.7)(prisma@5.22.0))(mysql2@3.14.4)(rolldown@1.0.0-beta.46) node-fetch-native: 1.6.7 path-to-regexp: 6.3.0 pathe: 1.1.2 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 78231be7c7..8f9436ae01 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -7,7 +7,7 @@ packages: catalog: '@better-fetch/fetch': 1.1.18 better-call: 1.0.26 - tsdown: ^0.15.11 + tsdown: ^0.16.0 typescript: ^5.9.3 vitest: ^3.2.4