From 11c15f3806d51fbabe74f0166de611290dcdb4b9 Mon Sep 17 00:00:00 2001 From: Jacek Date: Thu, 17 Oct 2024 12:31:35 -0500 Subject: [PATCH 01/12] feat: support async request methods --- .changeset/grumpy-hairs-remember.md | 7 + .changeset/loud-birds-grin.md | 5 - .changeset/serious-moose-design.md | 5 - .../next-app-router/src/app/api/me/route.ts | 4 +- .../src/app/api/settings/route.ts | 4 +- .../next-app-router/src/app/csp/page.tsx | 6 +- .../src/app/organizations-by-id/[id]/page.tsx | 4 +- .../[id]/settings/page.tsx | 4 +- .../app/organizations-by-slug/[slug]/page.tsx | 4 +- .../[slug]/settings/page.tsx | 4 +- .../src/app/page-protected/page.tsx | 5 +- .../src/app/personal-account/page.tsx | 4 +- .../src/app/settings/auth-has/page.tsx | 4 +- .../src/app/settings/auth-protect/page.tsx | 4 +- .../next-app-router/src/middleware.ts | 2 +- .../src/custom-user-button-trigger/index.tsx | 100 + .../src/custom-user-button/index.tsx | 2 +- .../src/custom-user-profile/index.tsx | 2 +- integration/templates/react-vite/src/main.tsx | 5 + .../templates/tanstack-start/app.config.ts | 2 +- integration/tests/custom-pages.test.ts | 68 +- integration/tests/dynamic-keys.test.ts | 16 +- integration/tests/restricted-mode.test.ts | 4 +- package-lock.json | 1984 ++++++++++++++--- packages/astro/CHANGELOG.md | 16 + packages/astro/package.json | 8 +- packages/backend/CHANGELOG.md | 20 + packages/backend/package.json | 6 +- packages/backend/src/api/resources/JSON.ts | 1 + .../backend/src/api/resources/Verification.ts | 1 + .../src/tokens/__tests__/request.test.ts | 11 +- packages/backend/src/tokens/request.ts | 35 +- packages/backend/src/tokens/types.ts | 4 +- packages/chrome-extension/CHANGELOG.md | 9 + packages/chrome-extension/package.json | 8 +- packages/clerk-js/CHANGELOG.md | 33 + packages/clerk-js/bundlewatch.config.json | 2 +- packages/clerk-js/package.json | 8 +- packages/clerk-js/src/core/clerk.ts | 7 + .../clerk-js/src/core/resources/Session.ts | 2 - .../clerk-js/src/core/resources/SignIn.ts | 8 +- .../clerk-js/src/core/resources/SignUp.ts | 8 +- .../src/core/resources/Verification.ts | 2 + packages/clerk-js/src/ui/Components.tsx | 10 + .../OrganizationSwitcher.tsx | 62 +- .../OrganizationSwitcherPopover.tsx | 9 +- .../__tests__/OrganizationSwitcher.test.tsx | 18 +- .../SignUp/SignUpRestrictedAccess.tsx | 31 +- .../SignUp/__tests__/SignUpStart.test.tsx | 2 +- .../ui/components/UserButton/UserButton.tsx | 43 +- .../UserButton/UserButtonPopover.tsx | 7 +- .../UserButton/__tests__/UserButton.test.tsx | 12 + .../ui/components/UserProfile/Web3Form.tsx | 4 +- .../components/prefetch-organization-list.tsx | 8 + .../clerk-js/src/ui/elements/PopoverCard.tsx | 36 +- .../clerk-js/src/ui/lazyModules/providers.tsx | 7 + packages/clerk-js/src/utils/web3.ts | 15 +- packages/elements/CHANGELOG.md | 7 + packages/elements/package.json | 8 +- packages/expo/CHANGELOG.md | 10 + packages/expo/package.json | 10 +- packages/express/CHANGELOG.md | 26 + packages/express/package.json | 8 +- .../__snapshots__/exports.test.ts.snap | 1 + packages/express/src/index.ts | 1 + packages/fastify/CHANGELOG.md | 16 + packages/fastify/package.json | 8 +- packages/localizations/CHANGELOG.md | 13 + packages/localizations/package.json | 4 +- packages/localizations/src/en-US.ts | 8 +- packages/nextjs/CHANGELOG.md | 17 + packages/nextjs/MIGRATION.md | 84 + packages/nextjs/package.json | 10 +- .../src/app-router/server/ClerkProvider.tsx | 8 +- packages/nextjs/src/app-router/server/auth.ts | 34 +- .../app-router/server/controlComponents.tsx | 22 +- .../src/app-router/server/currentUser.ts | 6 +- .../nextjs/src/app-router/server/utils.ts | 12 +- .../src/server/__tests__/clerkClient.test.ts | 4 +- .../server/__tests__/clerkMiddleware.test.ts | 38 +- packages/nextjs/src/server/clerkClient.ts | 10 +- packages/nextjs/src/server/clerkMiddleware.ts | 9 +- packages/react/CHANGELOG.md | 38 + packages/react/package.json | 8 +- .../react/src/components/uiComponents.tsx | 210 +- packages/react/src/isomorphicClerk.ts | 9 + packages/react/src/types.ts | 7 +- packages/react/src/utils/useCustomPages.tsx | 97 +- packages/remix/CHANGELOG.md | 17 + packages/remix/package.json | 10 +- packages/sdk-node/CHANGELOG.md | 16 + packages/sdk-node/package.json | 8 +- packages/shared/CHANGELOG.md | 9 + packages/shared/package.json | 4 +- packages/shared/src/loadScript.ts | 53 +- packages/tanstack-start/CHANGELOG.md | 17 + packages/tanstack-start/package.json | 10 +- packages/testing/CHANGELOG.md | 16 + packages/testing/package.json | 8 +- packages/themes/CHANGELOG.md | 7 + packages/themes/package.json | 4 +- packages/types/CHANGELOG.md | 22 + packages/types/package.json | 2 +- packages/types/src/clerk.ts | 26 + packages/types/src/json.ts | 1 + packages/types/src/localization.ts | 2 + packages/types/src/session.ts | 2 - packages/types/src/sessionVerification.ts | 11 +- packages/types/src/verification.ts | 1 + packages/upgrade/package.json | 16 +- packages/upgrade/src/app.js | 73 +- packages/upgrade/src/cli.js | 14 +- .../transform-async-request.fixtures.js | 161 ++ .../__tests__/transform-async-request.test.js | 13 + packages/upgrade/src/codemods/index.js | 17 + .../src/codemods/transform-async-request.js | 145 ++ packages/upgrade/src/components/Codemod.js | 75 + packages/upgrade/src/components/Header.js | 14 + .../upgrade/src/components/SDKWorkflow.js | 96 + .../src/{scan.js => components/Scan.js} | 4 +- packages/upgrade/src/constants/versions.js | 1 + .../src/util/detect-package-manager.js | 24 + .../upgrade/src/util/get-clerk-version.js | 27 +- packages/upgrade/vitest.config.js | 8 + playground/app-router/src/app/action/page.tsx | 2 +- .../app-router/src/app/protected/page.tsx | 10 +- .../src/pages/user/[[...index]].tsx | 2 +- playground/nextjs/app/app-dir/page.tsx | 2 +- 128 files changed, 3594 insertions(+), 801 deletions(-) create mode 100644 .changeset/grumpy-hairs-remember.md delete mode 100644 .changeset/loud-birds-grin.md delete mode 100644 .changeset/serious-moose-design.md create mode 100644 integration/templates/react-vite/src/custom-user-button-trigger/index.tsx create mode 100644 packages/clerk-js/src/ui/components/prefetch-organization-list.tsx create mode 100644 packages/nextjs/MIGRATION.md create mode 100644 packages/upgrade/src/codemods/__tests__/__fixtures__/transform-async-request.fixtures.js create mode 100644 packages/upgrade/src/codemods/__tests__/transform-async-request.test.js create mode 100644 packages/upgrade/src/codemods/index.js create mode 100644 packages/upgrade/src/codemods/transform-async-request.js create mode 100644 packages/upgrade/src/components/Codemod.js create mode 100644 packages/upgrade/src/components/Header.js create mode 100644 packages/upgrade/src/components/SDKWorkflow.js rename packages/upgrade/src/{scan.js => components/Scan.js} (97%) create mode 100644 packages/upgrade/src/util/detect-package-manager.js create mode 100644 packages/upgrade/vitest.config.js diff --git a/.changeset/grumpy-hairs-remember.md b/.changeset/grumpy-hairs-remember.md new file mode 100644 index 00000000000..d70d9c24a92 --- /dev/null +++ b/.changeset/grumpy-hairs-remember.md @@ -0,0 +1,7 @@ +--- +"@clerk/nextjs": major +"@clerk/upgrade": minor +--- + +@clerk/nextjs: Converting auth() and clerkClient() interfaces to be async +@clerk/upgrade: Adding required codemod for @clerk/nextjs breaking changes diff --git a/.changeset/loud-birds-grin.md b/.changeset/loud-birds-grin.md deleted file mode 100644 index 36ed9c77e30..00000000000 --- a/.changeset/loud-birds-grin.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@clerk/localizations": patch ---- - -Remove typos from pl-PL diff --git a/.changeset/serious-moose-design.md b/.changeset/serious-moose-design.md deleted file mode 100644 index 9d29e0cf281..00000000000 --- a/.changeset/serious-moose-design.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@clerk/clerk-js": patch ---- - -Add the `?render=explicit` query parameter to the Turnstile script. diff --git a/integration/templates/next-app-router/src/app/api/me/route.ts b/integration/templates/next-app-router/src/app/api/me/route.ts index c6088c6a977..8ae059dff05 100644 --- a/integration/templates/next-app-router/src/app/api/me/route.ts +++ b/integration/templates/next-app-router/src/app/api/me/route.ts @@ -1,6 +1,6 @@ import { auth } from '@clerk/nextjs/server'; -export function GET() { - const { userId } = auth(); +export async function GET() { + const { userId } = await auth(); return new Response(JSON.stringify({ userId })); } diff --git a/integration/templates/next-app-router/src/app/api/settings/route.ts b/integration/templates/next-app-router/src/app/api/settings/route.ts index 62553e05efd..8e6d46017e6 100644 --- a/integration/templates/next-app-router/src/app/api/settings/route.ts +++ b/integration/templates/next-app-router/src/app/api/settings/route.ts @@ -1,6 +1,6 @@ import { auth } from '@clerk/nextjs/server'; -export function GET() { - const { userId } = auth().protect(has => has({ role: 'admin' }) || has({ role: 'org:editor' })); +export async function GET() { + const { userId } = await auth.protect((has: any) => has({ role: 'admin' }) || has({ role: 'org:editor' })); return new Response(JSON.stringify({ userId })); } diff --git a/integration/templates/next-app-router/src/app/csp/page.tsx b/integration/templates/next-app-router/src/app/csp/page.tsx index 803218da796..fec6f7b09c0 100644 --- a/integration/templates/next-app-router/src/app/csp/page.tsx +++ b/integration/templates/next-app-router/src/app/csp/page.tsx @@ -1,10 +1,12 @@ import { headers } from 'next/headers'; import { ClerkLoaded } from '@clerk/nextjs'; -export default function CSPPage() { +export default async function CSPPage() { + const cspHeader = await headers().get('Content-Security-Policy'); + return (
- CSP:
{headers().get('Content-Security-Policy')}
+ CSP:
{cspHeader}

clerk loaded

diff --git a/integration/templates/next-app-router/src/app/organizations-by-id/[id]/page.tsx b/integration/templates/next-app-router/src/app/organizations-by-id/[id]/page.tsx index 41eb746d5e0..794d8c6b2a1 100644 --- a/integration/templates/next-app-router/src/app/organizations-by-id/[id]/page.tsx +++ b/integration/templates/next-app-router/src/app/organizations-by-id/[id]/page.tsx @@ -1,7 +1,7 @@ import { auth } from '@clerk/nextjs/server'; -export default function Home({ params }: { params: { id: string } }) { - const { orgId } = auth(); +export default async function Home({ params }: { params: { id: string } }) { + const { orgId } = await auth(); if (params.id != orgId) { console.log('Mismatch - returning nothing for now...', params.id, orgId); diff --git a/integration/templates/next-app-router/src/app/organizations-by-id/[id]/settings/page.tsx b/integration/templates/next-app-router/src/app/organizations-by-id/[id]/settings/page.tsx index 8d1adf2e244..f99a9eb4cd4 100644 --- a/integration/templates/next-app-router/src/app/organizations-by-id/[id]/settings/page.tsx +++ b/integration/templates/next-app-router/src/app/organizations-by-id/[id]/settings/page.tsx @@ -1,7 +1,7 @@ import { auth } from '@clerk/nextjs/server'; -export default function Home({ params }: { params: { id: string } }) { - const { orgId } = auth(); +export default async function Home({ params }: { params: { id: string } }) { + const { orgId } = await auth(); if (params.id != orgId) { console.log('Mismatch - returning nothing for now...', params.id, orgId); diff --git a/integration/templates/next-app-router/src/app/organizations-by-slug/[slug]/page.tsx b/integration/templates/next-app-router/src/app/organizations-by-slug/[slug]/page.tsx index 1847d88f181..fea8138ea7b 100644 --- a/integration/templates/next-app-router/src/app/organizations-by-slug/[slug]/page.tsx +++ b/integration/templates/next-app-router/src/app/organizations-by-slug/[slug]/page.tsx @@ -1,7 +1,7 @@ import { auth } from '@clerk/nextjs/server'; -export default function Home({ params }: { params: { slug: string } }) { - const { orgSlug } = auth(); +export default async function Home({ params }: { params: { slug: string } }) { + const { orgSlug } = await auth(); if (params.slug != orgSlug) { console.log('Mismatch - returning nothing for now...', params.slug, orgSlug); diff --git a/integration/templates/next-app-router/src/app/organizations-by-slug/[slug]/settings/page.tsx b/integration/templates/next-app-router/src/app/organizations-by-slug/[slug]/settings/page.tsx index f2613fdbcc4..7cfcdbd93a1 100644 --- a/integration/templates/next-app-router/src/app/organizations-by-slug/[slug]/settings/page.tsx +++ b/integration/templates/next-app-router/src/app/organizations-by-slug/[slug]/settings/page.tsx @@ -1,7 +1,7 @@ import { auth } from '@clerk/nextjs/server'; -export default function Home({ params }: { params: { slug: string } }) { - const { orgSlug } = auth(); +export default async function Home({ params }: { params: { slug: string } }) { + const { orgSlug } = await auth(); if (params.slug != orgSlug) { console.log('Mismatch - returning nothing for now...', params.slug, orgSlug); diff --git a/integration/templates/next-app-router/src/app/page-protected/page.tsx b/integration/templates/next-app-router/src/app/page-protected/page.tsx index d67679ce800..0cce9cdcd98 100644 --- a/integration/templates/next-app-router/src/app/page-protected/page.tsx +++ b/integration/templates/next-app-router/src/app/page-protected/page.tsx @@ -1,6 +1,7 @@ import { auth } from '@clerk/nextjs/server'; -export default function Page() { - auth().protect(); +export default async function Page() { + await auth.protect(); + return
Protected Page
; } diff --git a/integration/templates/next-app-router/src/app/personal-account/page.tsx b/integration/templates/next-app-router/src/app/personal-account/page.tsx index fdd6a1460d0..39dc9da1da9 100644 --- a/integration/templates/next-app-router/src/app/personal-account/page.tsx +++ b/integration/templates/next-app-router/src/app/personal-account/page.tsx @@ -1,7 +1,7 @@ import { auth } from '@clerk/nextjs/server'; -export default function Home(): {} { - const { orgId } = auth(); +export default async function Home() { + const { orgId } = await auth(); if (orgId != null) { console.log('Oh no, this page should only activate on the personal account!'); diff --git a/integration/templates/next-app-router/src/app/settings/auth-has/page.tsx b/integration/templates/next-app-router/src/app/settings/auth-has/page.tsx index a036ccfc7ce..b1363c49723 100644 --- a/integration/templates/next-app-router/src/app/settings/auth-has/page.tsx +++ b/integration/templates/next-app-router/src/app/settings/auth-has/page.tsx @@ -1,7 +1,7 @@ import { auth } from '@clerk/nextjs/server'; -export default function Page() { - const { userId, has } = auth(); +export default async function Page() { + const { userId, has } = await auth(); if (!userId || !has({ permission: 'org:posts:manage' })) { return

User is missing permissions

; } diff --git a/integration/templates/next-app-router/src/app/settings/auth-protect/page.tsx b/integration/templates/next-app-router/src/app/settings/auth-protect/page.tsx index cddf0f7d505..c7f9b76b514 100644 --- a/integration/templates/next-app-router/src/app/settings/auth-protect/page.tsx +++ b/integration/templates/next-app-router/src/app/settings/auth-protect/page.tsx @@ -1,6 +1,6 @@ import { auth } from '@clerk/nextjs/server'; -export default function Page() { - auth().protect({ role: 'admin' }); +export default async function Page() { + await auth.protect({ role: 'admin' }); return

User has access

; } diff --git a/integration/templates/next-app-router/src/middleware.ts b/integration/templates/next-app-router/src/middleware.ts index 2deaf8df808..b6a2c375d32 100644 --- a/integration/templates/next-app-router/src/middleware.ts +++ b/integration/templates/next-app-router/src/middleware.ts @@ -11,7 +11,7 @@ const csp = `default-src 'self'; const isProtectedRoute = createRouteMatcher(['/protected(.*)', '/user(.*)', '/switcher(.*)']); const isCSPRoute = createRouteMatcher(['/csp']); -export default clerkMiddleware((auth, req) => { +export default clerkMiddleware(async (auth, req) => { if (isProtectedRoute(req)) { auth().protect(); } diff --git a/integration/templates/react-vite/src/custom-user-button-trigger/index.tsx b/integration/templates/react-vite/src/custom-user-button-trigger/index.tsx new file mode 100644 index 00000000000..bbcd41b52e9 --- /dev/null +++ b/integration/templates/react-vite/src/custom-user-button-trigger/index.tsx @@ -0,0 +1,100 @@ +import { UserButton } from '@clerk/clerk-react'; +import { PropsWithChildren, useContext, useState } from 'react'; +import { PageContext, PageContextProvider } from '../PageContext.tsx'; + +function Page1() { + const { counter, setCounter } = useContext(PageContext); + + return ( + <> +

Page 1

+

Counter: {counter}

+ + + ); +} + +function ToggleChildren(props: PropsWithChildren) { + const [isMounted, setMounted] = useState(false); + + return ( + <> + + {isMounted ? props.children : null} + + ); +} + +export default function Page() { + return ( + + + πŸ™ƒ

} + url='page-1' + > + +
+ + πŸ™ƒ

} + url='page-2' + > +

Page 2

+
+

This is leaking

+ 🌐

} + /> + + πŸ™ƒ} + open={'page-1'} + /> + + + 🌐} + /> + + 🌐} + /> + + πŸ””} + onClick={() => alert('custom-alert')} + /> + + 🌐

} + /> + + + +
+
+ ); +} diff --git a/integration/templates/react-vite/src/custom-user-button/index.tsx b/integration/templates/react-vite/src/custom-user-button/index.tsx index e6c800bcaf3..e283cddd76b 100644 --- a/integration/templates/react-vite/src/custom-user-button/index.tsx +++ b/integration/templates/react-vite/src/custom-user-button/index.tsx @@ -38,7 +38,7 @@ export default function Page() { >

Page 2

- 🌐 +

This is leaking

Page 2

- 🌐 +

This is leaking

{ const navigate = useNavigate(); @@ -64,6 +65,10 @@ const router = createBrowserRouter([ path: '/custom-user-button', element: , }, + { + path: '/custom-user-button-trigger', + element: , + }, ], }, ]); diff --git a/integration/templates/tanstack-start/app.config.ts b/integration/templates/tanstack-start/app.config.ts index d1d9b04ded7..732f04eabe7 100644 --- a/integration/templates/tanstack-start/app.config.ts +++ b/integration/templates/tanstack-start/app.config.ts @@ -3,7 +3,7 @@ import tsConfigPaths from 'vite-tsconfig-paths' export default defineConfig({ vite: { - plugins: () => [ + plugins: [ tsConfigPaths({ projects: ['./tsconfig.json'], }), diff --git a/integration/tests/custom-pages.test.ts b/integration/tests/custom-pages.test.ts index f3dd4a51937..f7621bb9ffb 100644 --- a/integration/tests/custom-pages.test.ts +++ b/integration/tests/custom-pages.test.ts @@ -6,6 +6,7 @@ import { createTestUtils, testAgainstRunningApps } from '../testUtils'; const CUSTOM_PROFILE_PAGE = '/custom-user-profile'; const CUSTOM_BUTTON_PAGE = '/custom-user-button'; +const CUSTOM_BUTTON_TRIGGER_PAGE = '/custom-user-button-trigger'; async function waitForMountedComponent( component: 'UserButton' | 'UserProfile', @@ -106,11 +107,29 @@ testAgainstRunningApps({ withPattern: ['react.vite.withEmailCodes'] })( await u.page.waitForSelector('p[data-page="1"]', { state: 'attached' }); await expect(u.page.locator('p[data-page="1"]')).toHaveText('Counter: 0'); - u.page.locator('button[data-page="1"]').click(); + await u.page.locator('button[data-page="1"]').click(); await expect(u.page.locator('p[data-page="1"]')).toHaveText('Counter: 1'); }); + test('renders only custom pages and does not display unrelated child components', async ({ page, context }) => { + const u = createTestUtils({ app, page, context }); + await u.po.signIn.goTo(); + await u.po.signIn.waitForMounted(); + await u.po.signIn.signInWithEmailAndInstantPassword({ email: fakeUser.email, password: fakeUser.password }); + await u.po.expect.toBeSignedIn(); + + await waitForMountedComponent(component, u); + + const buttons = await u.page.locator('button.cl-navbarButton__custom-page-0').all(); + expect(buttons.length).toBe(1); + const [profilePage] = buttons; + await expect(profilePage.locator('div.cl-navbarButtonIcon__custom-page-0')).toHaveText('πŸ™ƒ'); + await profilePage.click(); + + await expect(u.page.locator('p[data-leaked-child]')).toBeHidden(); + }); + test('user profile custom external absolute link', async ({ page, context }) => { const u = createTestUtils({ app, page, context }); await u.po.signIn.goTo(); @@ -149,6 +168,53 @@ testAgainstRunningApps({ withPattern: ['react.vite.withEmailCodes'] })( }); }); + test.describe('User Button with experimental asStandalone and asProvider', () => { + test('items at the specified order', async ({ page, context }) => { + const u = createTestUtils({ app, page, context }); + await u.po.signIn.goTo(); + await u.po.signIn.waitForMounted(); + await u.po.signIn.signInWithEmailAndInstantPassword({ email: fakeUser.email, password: fakeUser.password }); + await u.po.expect.toBeSignedIn(); + + await u.page.goToRelative(CUSTOM_BUTTON_TRIGGER_PAGE); + const toggleButton = await u.page.waitForSelector('button[data-toggle-btn]'); + await toggleButton.click(); + + await u.po.userButton.waitForPopover(); + await u.po.userButton.triggerManageAccount(); + await u.po.userProfile.waitForMounted(); + + const pagesContainer = u.page.locator('div.cl-navbarButtons').first(); + + const buttons = await pagesContainer.locator('button').all(); + + expect(buttons.length).toBe(6); + + const expectedTexts = ['Profile', 'πŸ™ƒPage 1', 'Security', 'πŸ™ƒPage 2', '🌐Visit Clerk', '🌐Visit User page']; + for (let i = 0; i < buttons.length; i++) { + await expect(buttons[i]).toHaveText(expectedTexts[i]); + } + }); + + test('children should be leaking when used with asProvider', async ({ page, context }) => { + const u = createTestUtils({ app, page, context }); + await u.po.signIn.goTo(); + await u.po.signIn.waitForMounted(); + await u.po.signIn.signInWithEmailAndInstantPassword({ email: fakeUser.email, password: fakeUser.password }); + await u.po.expect.toBeSignedIn(); + + await u.page.goToRelative(CUSTOM_BUTTON_TRIGGER_PAGE); + const toggleButton = await u.page.waitForSelector('button[data-toggle-btn]'); + await toggleButton.click(); + + await u.po.userButton.waitForPopover(); + await u.po.userButton.triggerManageAccount(); + await u.po.userProfile.waitForMounted(); + + await expect(u.page.locator('p[data-leaked-child]')).toBeVisible(); + }); + }); + test.describe('User Button custom items', () => { test('items at the specified order', async ({ page, context }) => { const u = createTestUtils({ app, page, context }); diff --git a/integration/tests/dynamic-keys.test.ts b/integration/tests/dynamic-keys.test.ts index e034146c646..8e7b59f6a4f 100644 --- a/integration/tests/dynamic-keys.test.ts +++ b/integration/tests/dynamic-keys.test.ts @@ -13,8 +13,8 @@ test.describe('dynamic keys @nextjs', () => { .clone() .addFile( 'src/middleware.ts', - () => `import { clerkClient, clerkMiddleware, createRouteMatcher } from '@clerk/nextjs/server' - import { NextResponse } from 'next/server' + () => `import { clerkClient, clerkMiddleware, createRouteMatcher } from '@clerk/nextjs/server'; + import { NextResponse } from 'next/server'; const isProtectedRoute = createRouteMatcher(['/protected']); const shouldFetchBapi = createRouteMatcher(['/fetch-bapi-from-middleware']); @@ -25,10 +25,12 @@ test.describe('dynamic keys @nextjs', () => { } if (shouldFetchBapi(request)){ - const count = await clerkClient().users.getCount(); + const client = await clerkClient(); + + const count = await client.users?.getCount(); if (count){ - return NextResponse.redirect(new URL('/users-count', request.url)) + return NextResponse.redirect(new URL('/users-count', request.url)); } } }, { @@ -45,7 +47,7 @@ test.describe('dynamic keys @nextjs', () => { () => `import { clerkClient } from '@clerk/nextjs/server' export default async function Page(){ - const count = await clerkClient().users.getCount() + const count = await clerkClient().users?.getCount() ?? 0; return

Users count: {count}

} @@ -62,7 +64,7 @@ test.describe('dynamic keys @nextjs', () => { await app.teardown(); }); - test('redirects to `signInUrl` on `auth().protect()`', async ({ page, context }) => { + test('redirects to `signInUrl` on `await auth.protect()`', async ({ page, context }) => { const u = createTestUtils({ app, page, context }); await u.page.goToAppHome(); @@ -74,7 +76,7 @@ test.describe('dynamic keys @nextjs', () => { await u.page.waitForURL(/foobar/); }); - test('resolves auth signature with `secretKey` on `auth().protect()`', async ({ page, context }) => { + test('resolves auth signature with `secretKey` on `await auth.protect()`', async ({ page, context }) => { const u = createTestUtils({ app, page, context }); await u.page.goToRelative('/page-protected'); await u.page.waitForURL(/foobar/); diff --git a/integration/tests/restricted-mode.test.ts b/integration/tests/restricted-mode.test.ts index ab016126633..947f8a516a6 100644 --- a/integration/tests/restricted-mode.test.ts +++ b/integration/tests/restricted-mode.test.ts @@ -102,8 +102,8 @@ export default function Page() { await u.po.signUp.goTo(); await u.po.signUp.waitForMounted(); - await expect(u.page.getByText(/Restricted access/i).first()).toBeVisible(); - const backToSignIn = u.page.getByRole('link', { name: /Back to sign in/i }); + await expect(u.page.getByText(/Access restricted/i).first()).toBeVisible(); + const backToSignIn = u.page.getByRole('link', { name: /Sign in/i }); await backToSignIn.click(); await u.po.signUp.waitForMounted(); diff --git a/package-lock.json b/package-lock.json index ecf42ff4d1b..c48daa2ea4e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2489,42 +2489,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/register/node_modules/find-cache-dir": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@babel/register/node_modules/find-up": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@babel/register/node_modules/locate-path": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/@babel/register/node_modules/make-dir": { "version": "2.1.0", "dev": true, @@ -2537,25 +2501,6 @@ "node": ">=6" } }, - "node_modules/@babel/register/node_modules/p-locate": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@babel/register/node_modules/path-exists": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/register/node_modules/pify": { "version": "4.0.1", "dev": true, @@ -2564,17 +2509,6 @@ "node": ">=6" } }, - "node_modules/@babel/register/node_modules/pkg-dir": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/@babel/register/node_modules/semver": { "version": "5.7.2", "dev": true, @@ -7203,66 +7137,6 @@ "url": "https://opencollective.com/libvips" } }, - "node_modules/@inkjs/ui": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "chalk": "^5.2.0", - "cli-spinners": "^2.9.0", - "deepmerge": "^4.3.1", - "figures": "^5.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "peerDependencies": { - "ink": "^4.2.0" - } - }, - "node_modules/@inkjs/ui/node_modules/chalk": { - "version": "5.3.0", - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@inkjs/ui/node_modules/escape-string-regexp": { - "version": "5.0.0", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@inkjs/ui/node_modules/figures": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^5.0.0", - "is-unicode-supported": "^1.2.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@inkjs/ui/node_modules/is-unicode-supported": { - "version": "1.3.0", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@internationalized/date": { "version": "3.5.4", "license": "Apache-2.0", @@ -12991,6 +12865,12 @@ "version": "1.5.1", "license": "MIT" }, + "node_modules/@sec-ant/readable-stream": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", + "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", + "license": "MIT" + }, "node_modules/@segment/loosely-validate-event": { "version": "2.0.0", "dev": true, @@ -13966,6 +13846,56 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/jscodeshift": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/jscodeshift/-/jscodeshift-0.12.0.tgz", + "integrity": "sha512-Jr2fQbEoDmjwEa92TreR/mX2t9iAaY/l5P/GKezvK4BodXahex60PDLXaQR0vAgP0KfCzc1CivHusQB9NhzX8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ast-types": "^0.14.1", + "recast": "^0.20.3" + } + }, + "node_modules/@types/jscodeshift/node_modules/ast-types": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", + "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@types/jscodeshift/node_modules/recast": { + "version": "0.20.5", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.20.5.tgz", + "integrity": "sha512-E5qICoPoNL4yU0H0NoBDntNB0Q5oMSNh9usFctYniLBluTthi3RsQVBXIJNbApOlvSwW/RGxIuokPcAc59J5fQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ast-types": "0.14.2", + "esprima": "~4.0.0", + "source-map": "~0.6.1", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@types/jscodeshift/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@types/jsdom": { "version": "20.0.1", "dev": true, @@ -15378,6 +15308,47 @@ "node": ">= 14.16" } }, + "node_modules/@vitest/mocker": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.3.tgz", + "integrity": "sha512-eSpdY/eJDuOvuTA3ASzCjdithHa+GIF1L4PqtEELl6Qa3XafdMLBpBlZCIUCX2J+Q6sNmjmxtosAG62fK4BlqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "2.1.3", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.11" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@vitest/spy": "2.1.3", + "msw": "^2.3.5", + "vite": "^5.0.0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/mocker/node_modules/@vitest/spy": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.3.tgz", + "integrity": "sha512-Nb2UzbcUswzeSP7JksMDaqsI43Sj5+Kry6ry6jQJT4b5gAK+NS9NED6mDb8FlMRCX8m5guaHCDZmqYMMWRy5nQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyspy": "^3.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, "node_modules/@vitest/pretty-format": { "version": "2.0.5", "dev": true, @@ -17087,6 +17058,18 @@ "node": ">=8.0.0" } }, + "node_modules/auto-bind": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/auto-bind/-/auto-bind-5.0.1.tgz", + "integrity": "sha512-ooviqdwwgfIfNmDwo94wlshcdzfO64XV0Cg6oDsDYBJfITDz1EngD2z7DkbvCWn+XIMsIqW27sEVF6qcpJrRcg==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/available-typed-arrays": { "version": "1.0.7", "license": "MIT", @@ -22308,7 +22291,6 @@ }, "node_modules/environment": { "version": "1.1.0", - "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -25262,6 +25244,109 @@ "node": ">= 0.8" } }, + "node_modules/find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "license": "MIT", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-cache-dir/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "license": "MIT", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-cache-dir/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "license": "MIT", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-cache-dir/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "license": "MIT", + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-cache-dir/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "license": "MIT", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-cache-dir/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/find-cache-dir/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/find-cache-dir/node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "license": "MIT", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-cache-dir/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, "node_modules/find-root": { "version": "1.1.0", "license": "MIT" @@ -25652,7 +25737,6 @@ "node_modules/get-east-asian-width": { "version": "1.2.0", "license": "MIT", - "peer": true, "engines": { "node": ">=18" }, @@ -26978,6 +27062,7 @@ "node_modules/ink": { "version": "4.4.1", "license": "MIT", + "peer": true, "dependencies": { "@alcalzone/ansi-tokenize": "^0.1.3", "ansi-escapes": "^6.0.0", @@ -27082,81 +27167,10 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/ink-link": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "prop-types": "^15.8.1", - "terminal-link": "^3.0.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - }, - "peerDependencies": { - "ink": ">=4" - } - }, - "node_modules/ink-link/node_modules/ansi-escapes": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "type-fest": "^1.0.2" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ink-link/node_modules/has-flag": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ink-link/node_modules/supports-hyperlinks": { - "version": "2.3.0", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ink-link/node_modules/terminal-link": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "ansi-escapes": "^5.0.0", - "supports-hyperlinks": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ink-link/node_modules/type-fest": { - "version": "1.4.0", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/ink/node_modules/ansi-escapes": { "version": "6.2.1", "license": "MIT", + "peer": true, "engines": { "node": ">=14.16" }, @@ -27167,6 +27181,7 @@ "node_modules/ink/node_modules/ansi-regex": { "version": "6.0.1", "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -27177,6 +27192,7 @@ "node_modules/ink/node_modules/ansi-styles": { "version": "6.2.1", "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -27184,19 +27200,10 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/ink/node_modules/auto-bind": { - "version": "5.0.1", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/ink/node_modules/chalk": { "version": "5.3.0", "license": "MIT", + "peer": true, "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -27207,6 +27214,7 @@ "node_modules/ink/node_modules/cli-cursor": { "version": "4.0.0", "license": "MIT", + "peer": true, "dependencies": { "restore-cursor": "^4.0.0" }, @@ -27220,6 +27228,7 @@ "node_modules/ink/node_modules/indent-string": { "version": "5.0.0", "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -27230,6 +27239,7 @@ "node_modules/ink/node_modules/restore-cursor": { "version": "4.0.0", "license": "MIT", + "peer": true, "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -27243,11 +27253,13 @@ }, "node_modules/ink/node_modules/signal-exit": { "version": "3.0.7", - "license": "ISC" + "license": "ISC", + "peer": true }, "node_modules/ink/node_modules/slice-ansi": { "version": "6.0.0", "license": "MIT", + "peer": true, "dependencies": { "ansi-styles": "^6.2.1", "is-fullwidth-code-point": "^4.0.0" @@ -27262,6 +27274,7 @@ "node_modules/ink/node_modules/string-width": { "version": "5.1.2", "license": "MIT", + "peer": true, "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -27277,6 +27290,7 @@ "node_modules/ink/node_modules/strip-ansi": { "version": "7.1.0", "license": "MIT", + "peer": true, "dependencies": { "ansi-regex": "^6.0.1" }, @@ -27290,6 +27304,7 @@ "node_modules/ink/node_modules/type-fest": { "version": "0.12.0", "license": "(MIT OR CC0-1.0)", + "peer": true, "engines": { "node": ">=10" }, @@ -27300,6 +27315,7 @@ "node_modules/ink/node_modules/wrap-ansi": { "version": "8.1.0", "license": "MIT", + "peer": true, "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -27679,6 +27695,21 @@ "node": ">=0.10.0" } }, + "node_modules/is-in-ci": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-in-ci/-/is-in-ci-0.1.0.tgz", + "integrity": "sha512-d9PXLEY0v1iJ64xLiQMJ51J128EYHAaOR4yZqQi8aHGfw6KgifM3/Viw1oZZ1GCVmb3gBuyhLyHj0HgR2DhSXQ==", + "license": "MIT", + "bin": { + "is-in-ci": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-inside-container": { "version": "1.0.0", "license": "MIT", @@ -27792,6 +27823,7 @@ "node_modules/is-lower-case": { "version": "2.0.2", "license": "MIT", + "peer": true, "dependencies": { "tslib": "^2.0.3" } @@ -28022,6 +28054,7 @@ "node_modules/is-upper-case": { "version": "2.0.2", "license": "MIT", + "peer": true, "dependencies": { "tslib": "^2.0.3" } @@ -39847,8 +39880,7 @@ }, "node_modules/tinyexec": { "version": "0.3.0", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/tinygradient": { "version": "1.1.5", @@ -43265,6 +43297,19 @@ "version": "1.0.2", "license": "ISC" }, + "node_modules/write-file-atomic": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/ws": { "version": "8.17.1", "license": "MIT", @@ -43442,6 +43487,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/yoctocolors": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.1.tgz", + "integrity": "sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/yoga-wasm-web": { "version": "0.3.3", "license": "MIT" @@ -43634,12 +43691,12 @@ }, "packages/astro": { "name": "@clerk/astro", - "version": "1.3.14", + "version": "1.3.16", "license": "MIT", "dependencies": { - "@clerk/backend": "1.13.10", - "@clerk/shared": "2.9.1", - "@clerk/types": "4.25.1", + "@clerk/backend": "1.14.1", + "@clerk/shared": "2.9.2", + "@clerk/types": "4.26.0", "nanoid": "5.0.7", "nanostores": "0.11.3" }, @@ -43652,7 +43709,7 @@ "node": ">=18.17.0" }, "peerDependencies": { - "astro": "^4.16.1" + "astro": "^3.2.0 || ^4.0.0" } }, "packages/astro/node_modules/nanoid": { @@ -43686,11 +43743,11 @@ }, "packages/backend": { "name": "@clerk/backend", - "version": "1.13.10", + "version": "1.14.1", "license": "MIT", "dependencies": { - "@clerk/shared": "2.9.1", - "@clerk/types": "4.25.1", + "@clerk/shared": "2.9.2", + "@clerk/types": "4.26.0", "cookie": "0.7.0", "snakecase-keys": "5.4.4", "tslib": "2.4.1" @@ -44263,12 +44320,12 @@ }, "packages/chrome-extension": { "name": "@clerk/chrome-extension", - "version": "1.3.19", + "version": "1.3.20", "license": "MIT", "dependencies": { - "@clerk/clerk-js": "5.26.5", - "@clerk/clerk-react": "5.11.1", - "@clerk/shared": "2.9.1", + "@clerk/clerk-js": "5.27.0", + "@clerk/clerk-react": "5.12.0", + "@clerk/shared": "2.9.2", "webextension-polyfill": "^0.10.0" }, "devDependencies": { @@ -44312,12 +44369,12 @@ }, "packages/clerk-js": { "name": "@clerk/clerk-js", - "version": "5.26.5", + "version": "5.27.0", "license": "MIT", "dependencies": { - "@clerk/localizations": "3.2.1", - "@clerk/shared": "2.9.1", - "@clerk/types": "4.25.1", + "@clerk/localizations": "3.3.0", + "@clerk/shared": "2.9.2", + "@clerk/types": "4.26.0", "@coinbase/wallet-sdk": "4.0.4", "@emotion/cache": "11.11.0", "@emotion/react": "11.11.1", @@ -44603,28 +44660,6 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "packages/dev-cli/node_modules/find-cache-dir": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "packages/dev-cli/node_modules/find-up": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "packages/dev-cli/node_modules/globby": { "version": "14.0.2", "license": "MIT", @@ -44686,17 +44721,6 @@ } } }, - "packages/dev-cli/node_modules/locate-path": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "packages/dev-cli/node_modules/make-dir": { "version": "2.1.0", "license": "MIT", @@ -44719,23 +44743,6 @@ "node": ">=8.6" } }, - "packages/dev-cli/node_modules/p-locate": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "packages/dev-cli/node_modules/path-exists": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "packages/dev-cli/node_modules/path-type": { "version": "5.0.0", "license": "MIT", @@ -44753,16 +44760,6 @@ "node": ">=6" } }, - "packages/dev-cli/node_modules/pkg-dir": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "packages/dev-cli/node_modules/recast": { "version": "0.23.9", "license": "MIT", @@ -44848,23 +44845,12 @@ "node": ">=6.0.0" } }, - "packages/dev-cli/node_modules/write-file-atomic": { - "version": "5.0.1", - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, "packages/elements": { "name": "@clerk/elements", - "version": "0.16.1", + "version": "0.16.2", "license": "MIT", "dependencies": { - "@clerk/types": "^4.25.1", + "@clerk/types": "^4.26.0", "@radix-ui/react-form": "^0.1.0", "@radix-ui/react-slot": "^1.1.0", "@xstate/react": "^4.1.1", @@ -44872,9 +44858,9 @@ "xstate": "^5.15.0" }, "devDependencies": { - "@clerk/clerk-react": "5.11.1", + "@clerk/clerk-react": "5.12.0", "@clerk/eslint-config-custom": "*", - "@clerk/shared": "2.9.1", + "@clerk/shared": "2.9.2", "@statelyai/inspect": "^0.4.0", "@types/node": "^18.19.33", "@types/react": "*", @@ -45693,13 +45679,13 @@ }, "packages/expo": { "name": "@clerk/clerk-expo", - "version": "2.2.25", + "version": "2.2.26", "license": "MIT", "dependencies": { - "@clerk/clerk-js": "5.26.5", - "@clerk/clerk-react": "5.11.1", - "@clerk/shared": "2.9.1", - "@clerk/types": "4.25.1", + "@clerk/clerk-js": "5.27.0", + "@clerk/clerk-react": "5.12.0", + "@clerk/shared": "2.9.2", + "@clerk/types": "4.26.0", "base-64": "^1.0.0", "react-native-url-polyfill": "2.0.0", "tslib": "2.4.1" @@ -45978,12 +45964,12 @@ }, "packages/express": { "name": "@clerk/express", - "version": "1.2.3", + "version": "1.3.1", "license": "MIT", "dependencies": { - "@clerk/backend": "^1.13.10", - "@clerk/shared": "^2.9.1", - "@clerk/types": "4.25.1", + "@clerk/backend": "^1.14.1", + "@clerk/shared": "^2.9.2", + "@clerk/types": "4.26.0", "tslib": "2.4.1" }, "devDependencies": { @@ -46009,12 +45995,12 @@ }, "packages/fastify": { "name": "@clerk/fastify", - "version": "2.0.1", + "version": "2.0.3", "license": "MIT", "dependencies": { - "@clerk/backend": "1.13.10", - "@clerk/shared": "2.9.1", - "@clerk/types": "4.25.1", + "@clerk/backend": "1.14.1", + "@clerk/shared": "2.9.2", + "@clerk/types": "4.26.0", "cookies": "0.8.0", "fastify-plugin": "^5.0.1" }, @@ -46349,10 +46335,10 @@ }, "packages/localizations": { "name": "@clerk/localizations", - "version": "3.2.1", + "version": "3.3.0", "license": "MIT", "dependencies": { - "@clerk/types": "4.25.1" + "@clerk/types": "4.26.0" }, "devDependencies": { "@clerk/eslint-config-custom": "*", @@ -46365,13 +46351,13 @@ }, "packages/nextjs": { "name": "@clerk/nextjs", - "version": "5.7.3", + "version": "5.7.5", "license": "MIT", "dependencies": { - "@clerk/backend": "1.13.10", - "@clerk/clerk-react": "5.11.1", - "@clerk/shared": "2.9.1", - "@clerk/types": "4.25.1", + "@clerk/backend": "1.14.1", + "@clerk/clerk-react": "5.12.0", + "@clerk/shared": "2.9.2", + "@clerk/types": "4.26.0", "crypto-js": "4.2.0", "server-only": "0.0.1", "tslib": "2.4.1" @@ -46624,16 +46610,16 @@ }, "packages/react": { "name": "@clerk/clerk-react", - "version": "5.11.1", + "version": "5.12.0", "license": "MIT", "dependencies": { - "@clerk/shared": "2.9.1", - "@clerk/types": "4.25.1", + "@clerk/shared": "2.9.2", + "@clerk/types": "4.26.0", "tslib": "2.4.1" }, "devDependencies": { "@clerk/eslint-config-custom": "*", - "@clerk/themes": "2.1.36", + "@clerk/themes": "2.1.37", "@types/node": "^18.19.33", "@types/react": "*", "@types/react-dom": "*", @@ -46654,13 +46640,13 @@ }, "packages/remix": { "name": "@clerk/remix", - "version": "4.2.37", + "version": "4.2.39", "license": "MIT", "dependencies": { - "@clerk/backend": "1.13.10", - "@clerk/clerk-react": "5.11.1", - "@clerk/shared": "2.9.1", - "@clerk/types": "4.25.1", + "@clerk/backend": "1.14.1", + "@clerk/clerk-react": "5.12.0", + "@clerk/shared": "2.9.2", + "@clerk/types": "4.26.0", "cookie": "0.7.0", "tslib": "2.4.1" }, @@ -46703,12 +46689,12 @@ }, "packages/sdk-node": { "name": "@clerk/clerk-sdk-node", - "version": "5.0.50", + "version": "5.0.52", "license": "MIT", "dependencies": { - "@clerk/backend": "1.13.10", - "@clerk/shared": "2.9.1", - "@clerk/types": "4.25.1", + "@clerk/backend": "1.14.1", + "@clerk/shared": "2.9.2", + "@clerk/types": "4.26.0", "tslib": "2.4.1" }, "devDependencies": { @@ -46730,11 +46716,11 @@ }, "packages/shared": { "name": "@clerk/shared", - "version": "2.9.1", + "version": "2.9.2", "hasInstallScript": true, "license": "MIT", "dependencies": { - "@clerk/types": "4.25.1", + "@clerk/types": "4.26.0", "glob-to-regexp": "0.4.1", "js-cookie": "3.0.5", "std-env": "^3.7.0", @@ -47429,13 +47415,13 @@ }, "packages/tanstack-start": { "name": "@clerk/tanstack-start", - "version": "0.4.13", + "version": "0.4.15", "license": "MIT", "dependencies": { - "@clerk/backend": "1.13.10", - "@clerk/clerk-react": "5.11.1", - "@clerk/shared": "2.9.1", - "@clerk/types": "4.25.1", + "@clerk/backend": "1.14.1", + "@clerk/clerk-react": "5.12.0", + "@clerk/shared": "2.9.2", + "@clerk/types": "4.26.0", "tslib": "2.4.1" }, "devDependencies": { @@ -47881,12 +47867,12 @@ }, "packages/testing": { "name": "@clerk/testing", - "version": "1.3.11", + "version": "1.3.13", "license": "MIT", "dependencies": { - "@clerk/backend": "1.13.10", - "@clerk/shared": "2.9.1", - "@clerk/types": "4.25.1", + "@clerk/backend": "1.14.1", + "@clerk/shared": "2.9.2", + "@clerk/types": "4.26.0", "dotenv": "16.4.5" }, "devDependencies": { @@ -47915,10 +47901,10 @@ }, "packages/themes": { "name": "@clerk/themes", - "version": "2.1.36", + "version": "2.1.37", "license": "MIT", "dependencies": { - "@clerk/types": "4.25.1", + "@clerk/types": "4.26.0", "tslib": "2.4.1" }, "devDependencies": { @@ -47935,7 +47921,7 @@ }, "packages/types": { "name": "@clerk/types", - "version": "4.25.1", + "version": "4.26.0", "license": "MIT", "dependencies": { "csstype": "3.1.1" @@ -48254,16 +48240,18 @@ "version": "1.0.9", "license": "MIT", "dependencies": { - "@inkjs/ui": "^1.0.0", + "@inkjs/ui": "^2.0.0", "@jescalan/ink-markdown": "^2.0.0", "ejs": "3.1.10", + "execa": "9.4.1", "globby": "^14.0.1", "gray-matter": "^4.0.3", "index-to-position": "^0.1.2", - "ink": "^4.4.1", + "ink": "^5.0.1", "ink-big-text": "^2.0.0", "ink-gradient": "^3.0.0", - "ink-link": "^3.0.0", + "ink-link": "^4.1.0", + "jscodeshift": "^17.0.0", "marked": "^11.1.1", "meow": "^11.0.0", "react": "^18.3.1", @@ -48277,14 +48265,225 @@ "devDependencies": { "@babel/cli": "^7.24.7", "@babel/preset-react": "^7.24.7", - "chalk": "^5.3.0", + "@types/jscodeshift": "^0.12.0", "del-cli": "^5.1.0", - "eslint-config-custom": "*" + "eslint-config-custom": "*", + "vitest": "^2.1.3" }, "engines": { "node": ">=18.17.0" } }, + "packages/upgrade/.yalc/@clerk/upgrade": { + "version": "1.0.9", + "extraneous": true, + "license": "MIT", + "dependencies": { + "@clerk/upgrade": "file:.yalc/@clerk/upgrade", + "@inkjs/ui": "^2.0.0", + "@jescalan/ink-markdown": "^2.0.0", + "ejs": "3.1.10", + "globby": "^14.0.1", + "gray-matter": "^4.0.3", + "index-to-position": "^0.1.2", + "ink": "^5.0.1", + "ink-big-text": "^2.0.0", + "ink-gradient": "^3.0.0", + "ink-link": "^4.1.0", + "jscodeshift": "^17.0.0", + "marked": "^11.1.1", + "meow": "^11.0.0", + "react": "^18.3.1", + "read-pkg": "^9.0.1", + "semver-regex": "^4.0.5", + "temp-dir": "^3.0.0" + }, + "bin": { + "clerk-upgrade": "dist/cli.js" + }, + "engines": { + "node": ">=18.17.0" + } + }, + "packages/upgrade/node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.7.tgz", + "integrity": "sha512-bD4WQhbkx80mAyj/WCm4ZHcF4rDxkoLFO6ph8/5/mQ3z4vAzltQXAmbc7GvVJx5H+lk5Mi5EmbTeox5nMGCsbw==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-member-expression-to-functions": "^7.25.7", + "@babel/helper-optimise-call-expression": "^7.25.7", + "@babel/helper-replace-supers": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7", + "@babel/traverse": "^7.25.7", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "packages/upgrade/node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "packages/upgrade/node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.7.tgz", + "integrity": "sha512-O31Ssjd5K6lPbTX9AAYpSKrZmLeagt9uwschJd+Ixo6QiRyfpvgtVQp8qrDR9UNFjZ8+DO34ZkdrN+BnPXemeA==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "packages/upgrade/node_modules/@babel/helper-optimise-call-expression": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.7.tgz", + "integrity": "sha512-VAwcwuYhv/AT+Vfr28c9y6SHzTan1ryqrydSTFGjU0uDJHw3uZ+PduI8plCLkRsDnqK2DMEDmwrOQRsK/Ykjng==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "packages/upgrade/node_modules/@babel/helper-replace-supers": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.7.tgz", + "integrity": "sha512-iy8JhqlUW9PtZkd4pHM96v6BdJ66Ba9yWSE4z0W4TvSZwLBPkyDsiIU3ENe4SmrzRBs76F7rQXTy1lYC49n6Lw==", + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.25.7", + "@babel/helper-optimise-call-expression": "^7.25.7", + "@babel/traverse": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "packages/upgrade/node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.7.tgz", + "integrity": "sha512-pPbNbchZBkPMD50K0p3JGcFMNLVUCuU/ABybm/PGNj4JiHrpmNyqqCphBk4i19xXtNV0JhldQJJtbSW5aUvbyA==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "packages/upgrade/node_modules/@babel/plugin-syntax-flow": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.25.7.tgz", + "integrity": "sha512-fyoj6/YdVtlv2ROig/J0fP7hh/wNO1MJGm1NR70Pg7jbkF+jOUL9joorqaCOQh06Y+LfgTagHzC8KqZ3MF782w==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/upgrade/node_modules/@babel/plugin-transform-class-properties": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.7.tgz", + "integrity": "sha512-mhyfEW4gufjIqYFo9krXHJ3ElbFLIze5IDp+wQTxoPd+mwFb1NxatNAwmv8Q8Iuxv7Zc+q8EkiMQwc9IhyGf4g==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/upgrade/node_modules/@babel/plugin-transform-flow-strip-types": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.25.7.tgz", + "integrity": "sha512-q8Td2PPc6/6I73g96SreSUCKEcwMXCwcXSIAVTyTTN6CpJe0dMj8coxu1fg1T9vfBLi6Rsi6a4ECcFBbKabS5w==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/plugin-syntax-flow": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/upgrade/node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.8.tgz", + "integrity": "sha512-Z7WJJWdQc8yCWgAmjI3hyC+5PXIubH9yRKzkl9ZEG647O9szl9zvmKLzpbItlijBnVhTUf1cpyWBsZ3+2wjWPQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/upgrade/node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.8.tgz", + "integrity": "sha512-q05Bk7gXOxpTHoQ8RSzGSh/LHVB9JEIkKnk3myAWwZHnYiTGYtbdrYkIsS8Xyh4ltKf7GNUSgzs/6P2bJtBAQg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/upgrade/node_modules/@babel/plugin-transform-private-methods": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.7.tgz", + "integrity": "sha512-KY0hh2FluNxMLwOCHbxVOKfdB5sjWG4M183885FmaqWWiGMhRZq4DQRKH6mHdEucbJnyDyYiZNwNG424RymJjA==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "packages/upgrade/node_modules/@babel/plugin-transform-react-display-name": { "version": "7.24.7", "dev": true, @@ -48328,6 +48527,23 @@ "@babel/core": "^7.0.0-0" } }, + "packages/upgrade/node_modules/@babel/preset-flow": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.25.7.tgz", + "integrity": "sha512-q2x3g0YHzo/Ohsr51KOYS/BtZMsvkzVd8qEyhZAyTatYdobfgXCuyppTqTuIhdq5kR/P3nyyVvZ6H5dMc4PnCQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-validator-option": "^7.25.7", + "@babel/plugin-transform-flow-strip-types": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "packages/upgrade/node_modules/@babel/preset-react": { "version": "7.24.7", "dev": true, @@ -48347,6 +48563,187 @@ "@babel/core": "^7.0.0-0" } }, + "packages/upgrade/node_modules/@babel/register": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.25.7.tgz", + "integrity": "sha512-qHTd2Rhn/rKhSUwdY6+n98FmwXN+N+zxSVx3zWqRe9INyvTpv+aQ5gDV2+43ACd3VtMBzPPljbb0gZb8u5ma6Q==", + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "find-cache-dir": "^2.0.0", + "make-dir": "^2.1.0", + "pirates": "^4.0.6", + "source-map-support": "^0.5.16" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/upgrade/node_modules/@inkjs/ui": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@inkjs/ui/-/ui-2.0.0.tgz", + "integrity": "sha512-5+8fJmwtF9UvikzLfph9sA+LS+l37Ij/szQltkuXLOAXwNkBX9innfzh4pLGXIB59vKEQUtc6D4qGvhD7h3pAg==", + "license": "MIT", + "dependencies": { + "chalk": "^5.3.0", + "cli-spinners": "^3.0.0", + "deepmerge": "^4.3.1", + "figures": "^6.1.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "ink": ">=5" + } + }, + "packages/upgrade/node_modules/@inkjs/ui/node_modules/cli-spinners": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-3.2.0.tgz", + "integrity": "sha512-pXftdQloMZzjCr3pCTIRniDcys6dDzgpgVhAHHk6TKBDbRuP1MkuetTF5KSv4YUutbOPa7+7ZrAJ2kVtbMqyXA==", + "license": "MIT", + "engines": { + "node": ">=18.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/upgrade/node_modules/@vitest/expect": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.3.tgz", + "integrity": "sha512-SNBoPubeCJhZ48agjXruCI57DvxcsivVDdWz+SSsmjTT4QN/DfHk3zB/xKsJqMs26bLZ/pNRLnCf0j679i0uWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "2.1.3", + "@vitest/utils": "2.1.3", + "chai": "^5.1.1", + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "packages/upgrade/node_modules/@vitest/pretty-format": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.3.tgz", + "integrity": "sha512-XH1XdtoLZCpqV59KRbPrIhFCOO0hErxrQCMcvnQete3Vibb9UeIOX02uFPfVn3Z9ZXsq78etlfyhnkmIZSzIwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "packages/upgrade/node_modules/@vitest/runner": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.3.tgz", + "integrity": "sha512-JGzpWqmFJ4fq5ZKHtVO3Xuy1iF2rHGV4d/pdzgkYHm1+gOzNZtqjvyiaDGJytRyMU54qkxpNzCx+PErzJ1/JqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "2.1.3", + "pathe": "^1.1.2" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "packages/upgrade/node_modules/@vitest/snapshot": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.3.tgz", + "integrity": "sha512-qWC2mWc7VAXmjAkEKxrScWHWFyCQx/cmiZtuGqMi+WwqQJ2iURsVY4ZfAK6dVo6K2smKRU6l3BPwqEBvhnpQGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "2.1.3", + "magic-string": "^0.30.11", + "pathe": "^1.1.2" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "packages/upgrade/node_modules/@vitest/spy": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.3.tgz", + "integrity": "sha512-Nb2UzbcUswzeSP7JksMDaqsI43Sj5+Kry6ry6jQJT4b5gAK+NS9NED6mDb8FlMRCX8m5guaHCDZmqYMMWRy5nQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyspy": "^3.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "packages/upgrade/node_modules/@vitest/utils": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.3.tgz", + "integrity": "sha512-xpiVfDSg1RrYT0tX6czgerkpcKFmFOF/gCr30+Mve5V2kewCy4Prn1/NDMSRwaSmT7PRaOF83wu+bEtsY1wrvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "2.1.3", + "loupe": "^3.1.1", + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "packages/upgrade/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "packages/upgrade/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "packages/upgrade/node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "packages/upgrade/node_modules/ast-types": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz", + "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, "packages/upgrade/node_modules/camelcase": { "version": "7.0.1", "license": "MIT", @@ -48383,9 +48780,27 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "packages/upgrade/node_modules/chai": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.1.tgz", + "integrity": "sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, "packages/upgrade/node_modules/chalk": { "version": "5.3.0", - "dev": true, + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" @@ -48394,6 +48809,49 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "packages/upgrade/node_modules/check-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + } + }, + "packages/upgrade/node_modules/cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "license": "MIT", + "dependencies": { + "restore-cursor": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/upgrade/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "packages/upgrade/node_modules/decamelize": { "version": "6.0.0", "license": "MIT", @@ -48404,6 +48862,81 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "packages/upgrade/node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/upgrade/node_modules/execa": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-9.4.1.tgz", + "integrity": "sha512-5eo/BRqZm3GYce+1jqX/tJ7duA2AnE39i88fuedNFUV8XxGxUpF3aWkBRfbUcjV49gCkvS/pzc0YrCPhaIewdg==", + "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^4.0.0", + "cross-spawn": "^7.0.3", + "figures": "^6.1.0", + "get-stream": "^9.0.0", + "human-signals": "^8.0.0", + "is-plain-obj": "^4.1.0", + "is-stream": "^4.0.1", + "npm-run-path": "^6.0.0", + "pretty-ms": "^9.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^4.0.0", + "yoctocolors": "^2.0.0" + }, + "engines": { + "node": "^18.19.0 || >=20.5.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "packages/upgrade/node_modules/execa/node_modules/@sindresorhus/merge-streams": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", + "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/upgrade/node_modules/execa/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "packages/upgrade/node_modules/figures": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz", + "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==", + "license": "MIT", + "dependencies": { + "is-unicode-supported": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "packages/upgrade/node_modules/find-up": { "version": "6.3.0", "license": "MIT", @@ -48418,6 +48951,43 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "packages/upgrade/node_modules/get-stream": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", + "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", + "license": "MIT", + "dependencies": { + "@sec-ant/readable-stream": "^0.4.1", + "is-stream": "^4.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/upgrade/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "packages/upgrade/node_modules/globby": { "version": "14.0.1", "license": "MIT", @@ -48436,6 +49006,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "packages/upgrade/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "packages/upgrade/node_modules/hosted-git-info": { "version": "5.2.1", "license": "ISC", @@ -48446,6 +49025,15 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "packages/upgrade/node_modules/human-signals": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.0.tgz", + "integrity": "sha512-/1/GPCpDUCCYwlERiYjxoczfP0zfvZMU/OWgQPMya9AbAE24vseigFdhAMObpc8Q4lc/kjutPfUddDYyAmejnA==", + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, "packages/upgrade/node_modules/indent-string": { "version": "5.0.0", "license": "MIT", @@ -48456,6 +49044,294 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "packages/upgrade/node_modules/ink": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ink/-/ink-5.0.1.tgz", + "integrity": "sha512-ae4AW/t8jlkj/6Ou21H2av0wxTk8vrGzXv+v2v7j4in+bl1M5XRMVbfNghzhBokV++FjF8RBDJvYo+ttR9YVRg==", + "license": "MIT", + "dependencies": { + "@alcalzone/ansi-tokenize": "^0.1.3", + "ansi-escapes": "^7.0.0", + "ansi-styles": "^6.2.1", + "auto-bind": "^5.0.1", + "chalk": "^5.3.0", + "cli-boxes": "^3.0.0", + "cli-cursor": "^4.0.0", + "cli-truncate": "^4.0.0", + "code-excerpt": "^4.0.0", + "indent-string": "^5.0.0", + "is-in-ci": "^0.1.0", + "lodash": "^4.17.21", + "patch-console": "^2.0.0", + "react-reconciler": "^0.29.0", + "scheduler": "^0.23.0", + "signal-exit": "^3.0.7", + "slice-ansi": "^7.1.0", + "stack-utils": "^2.0.6", + "string-width": "^7.0.0", + "type-fest": "^4.8.3", + "widest-line": "^5.0.0", + "wrap-ansi": "^9.0.0", + "ws": "^8.15.0", + "yoga-wasm-web": "~0.3.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/react": ">=18.0.0", + "react": ">=18.0.0", + "react-devtools-core": "^4.19.1" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "react-devtools-core": { + "optional": true + } + } + }, + "packages/upgrade/node_modules/ink-link": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ink-link/-/ink-link-4.1.0.tgz", + "integrity": "sha512-3nNyJXum0FJIKAXBK8qat2jEOM41nJ1J60NRivwgK9Xh92R5UMN/k4vbz0A9xFzhJVrlf4BQEmmxMgXkCE1Jeg==", + "license": "MIT", + "dependencies": { + "prop-types": "^15.8.1", + "terminal-link": "^3.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + }, + "peerDependencies": { + "ink": ">=4" + } + }, + "packages/upgrade/node_modules/ink/node_modules/ansi-escapes": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", + "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", + "license": "MIT", + "dependencies": { + "environment": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/upgrade/node_modules/ink/node_modules/cli-truncate": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", + "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", + "license": "MIT", + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/upgrade/node_modules/ink/node_modules/cli-truncate/node_modules/slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "packages/upgrade/node_modules/ink/node_modules/emoji-regex": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "license": "MIT" + }, + "packages/upgrade/node_modules/ink/node_modules/slice-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz", + "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "packages/upgrade/node_modules/ink/node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", + "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/upgrade/node_modules/ink/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/upgrade/node_modules/ink/node_modules/type-fest": { + "version": "4.26.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.26.1.tgz", + "integrity": "sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/upgrade/node_modules/ink/node_modules/widest-line": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-5.0.0.tgz", + "integrity": "sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==", + "license": "MIT", + "dependencies": { + "string-width": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/upgrade/node_modules/ink/node_modules/wrap-ansi": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "packages/upgrade/node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/upgrade/node_modules/is-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/upgrade/node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/upgrade/node_modules/jscodeshift": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-17.0.0.tgz", + "integrity": "sha512-Af+MFsNwLSVO+t4kKjJdJKh6iNbNHfDfFGdyltJ2wUFN3furgbvHguJmB85iou+fY7wbHgI8eiEKpp6doGgtKg==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/plugin-transform-class-properties": "^7.24.7", + "@babel/plugin-transform-modules-commonjs": "^7.24.7", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.7", + "@babel/plugin-transform-private-methods": "^7.24.7", + "@babel/preset-flow": "^7.24.7", + "@babel/preset-typescript": "^7.24.7", + "@babel/register": "^7.24.6", + "flow-parser": "0.*", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.7", + "neo-async": "^2.5.0", + "picocolors": "^1.0.1", + "recast": "^0.23.9", + "temp": "^0.9.4", + "write-file-atomic": "^5.0.1" + }, + "bin": { + "jscodeshift": "bin/jscodeshift.js" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@babel/preset-env": "^7.1.6" + }, + "peerDependenciesMeta": { + "@babel/preset-env": { + "optional": true + } + } + }, "packages/upgrade/node_modules/locate-path": { "version": "7.2.0", "license": "MIT", @@ -48469,6 +49345,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "packages/upgrade/node_modules/loupe": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.2.tgz", + "integrity": "sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==", + "dev": true, + "license": "MIT" + }, "packages/upgrade/node_modules/lru-cache": { "version": "7.18.3", "license": "ISC", @@ -48476,6 +49359,28 @@ "node": ">=12" } }, + "packages/upgrade/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "license": "MIT", + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "packages/upgrade/node_modules/make-dir/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, "packages/upgrade/node_modules/marked": { "version": "11.2.0", "license": "MIT", @@ -48510,6 +49415,26 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "packages/upgrade/node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "packages/upgrade/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, "packages/upgrade/node_modules/normalize-package-data": { "version": "4.0.1", "license": "BSD-2-Clause", @@ -48523,6 +49448,34 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "packages/upgrade/node_modules/npm-run-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz", + "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==", + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/upgrade/node_modules/npm-run-path/node_modules/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "packages/upgrade/node_modules/p-limit": { "version": "4.0.0", "license": "MIT", @@ -48574,6 +49527,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "packages/upgrade/node_modules/parse-ms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", + "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "packages/upgrade/node_modules/path-exists": { "version": "5.0.0", "license": "MIT", @@ -48581,6 +49546,18 @@ "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, + "packages/upgrade/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "packages/upgrade/node_modules/path-type": { "version": "5.0.0", "license": "MIT", @@ -48591,6 +49568,46 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "packages/upgrade/node_modules/pathval": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", + "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.16" + } + }, + "packages/upgrade/node_modules/picocolors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", + "license": "ISC" + }, + "packages/upgrade/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/upgrade/node_modules/pretty-ms": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.1.0.tgz", + "integrity": "sha512-o1piW0n3tgKIKCwk2vpM/vOV13zjJzvP37Ioze54YlTHE06m4tjEbzg9WsKkvTuyYln2DHjo5pY4qrZGI0otpw==", + "license": "MIT", + "dependencies": { + "parse-ms": "^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "packages/upgrade/node_modules/quick-lru": { "version": "6.1.2", "license": "MIT", @@ -48748,6 +49765,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "packages/upgrade/node_modules/recast": { + "version": "0.23.9", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.9.tgz", + "integrity": "sha512-Hx/BGIbwj+Des3+xy5uAtAbdCyqK9y9wbBcDFDYanLS9JnMqf7OeF87HQwUimE87OEc72mr6tkKUKMBBL+hF9Q==", + "license": "MIT", + "dependencies": { + "ast-types": "^0.16.1", + "esprima": "~4.0.0", + "source-map": "~0.6.1", + "tiny-invariant": "^1.3.3", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">= 4" + } + }, "packages/upgrade/node_modules/redent": { "version": "4.0.0", "license": "MIT", @@ -48762,6 +49795,41 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "packages/upgrade/node_modules/restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/upgrade/node_modules/rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "packages/upgrade/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, "packages/upgrade/node_modules/slash": { "version": "5.1.0", "license": "MIT", @@ -48772,6 +49840,52 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "packages/upgrade/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/upgrade/node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "packages/upgrade/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "packages/upgrade/node_modules/strip-final-newline": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz", + "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "packages/upgrade/node_modules/strip-indent": { "version": "4.0.0", "license": "MIT", @@ -48785,6 +49899,32 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "packages/upgrade/node_modules/supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/upgrade/node_modules/temp": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.9.4.tgz", + "integrity": "sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==", + "license": "MIT", + "dependencies": { + "mkdirp": "^0.5.1", + "rimraf": "~2.6.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, "packages/upgrade/node_modules/temp-dir": { "version": "3.0.0", "license": "MIT", @@ -48792,6 +49932,49 @@ "node": ">=14.16" } }, + "packages/upgrade/node_modules/terminal-link": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-3.0.0.tgz", + "integrity": "sha512-flFL3m4wuixmf6IfhFJd1YPiLiMuxEc8uHRM1buzIeZPm22Au2pDqBJQgdo7n1WfPU1ONFGv7YDwpFBmHGF6lg==", + "license": "MIT", + "dependencies": { + "ansi-escapes": "^5.0.0", + "supports-hyperlinks": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/upgrade/node_modules/terminal-link/node_modules/ansi-escapes": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz", + "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==", + "license": "MIT", + "dependencies": { + "type-fest": "^1.0.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/upgrade/node_modules/terminal-link/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "packages/upgrade/node_modules/trim-newlines": { "version": "4.1.1", "license": "MIT", @@ -48812,6 +49995,93 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "packages/upgrade/node_modules/vite-node": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.3.tgz", + "integrity": "sha512-I1JadzO+xYX887S39Do+paRePCKoiDrWRRjp9kkG5he0t7RXNvPAJPCQSJqbGN4uCrFFeS3Kj3sLqY8NMYBEdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.3.6", + "pathe": "^1.1.2", + "vite": "^5.0.0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "packages/upgrade/node_modules/vitest": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.3.tgz", + "integrity": "sha512-Zrxbg/WiIvUP2uEzelDNTXmEMJXuzJ1kCpbDvaKByFA9MNeO95V+7r/3ti0qzJzrxdyuUw5VduN7k+D3VmVOSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/expect": "2.1.3", + "@vitest/mocker": "2.1.3", + "@vitest/pretty-format": "^2.1.3", + "@vitest/runner": "2.1.3", + "@vitest/snapshot": "2.1.3", + "@vitest/spy": "2.1.3", + "@vitest/utils": "2.1.3", + "chai": "^5.1.1", + "debug": "^4.3.6", + "magic-string": "^0.30.11", + "pathe": "^1.1.2", + "std-env": "^3.7.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.0", + "tinypool": "^1.0.0", + "tinyrainbow": "^1.2.0", + "vite": "^5.0.0", + "vite-node": "2.1.3", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/node": "^18.0.0 || >=20.0.0", + "@vitest/browser": "2.1.3", + "@vitest/ui": "2.1.3", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, "packages/upgrade/node_modules/yallist": { "version": "4.0.0", "license": "ISC" diff --git a/packages/astro/CHANGELOG.md b/packages/astro/CHANGELOG.md index bbd875bcde6..1c1b256d6d5 100644 --- a/packages/astro/CHANGELOG.md +++ b/packages/astro/CHANGELOG.md @@ -1,5 +1,21 @@ # @clerk/astro +## 1.3.16 + +### Patch Changes + +- Updated dependencies [[`e1a26547a`](https://github.com/clerk/javascript/commit/e1a26547a9c65f4c79c2bbd4dc386ddf67c2fbee)]: + - @clerk/backend@1.14.1 + +## 1.3.15 + +### Patch Changes + +- Updated dependencies [[`e81d45b72`](https://github.com/clerk/javascript/commit/e81d45b72c81403c7c206dac5454de1fef6bec57), [`752ce9bfa`](https://github.com/clerk/javascript/commit/752ce9bfa47a8eebd38cd272eeb58ae26fea3371), [`99cdf9b67`](https://github.com/clerk/javascript/commit/99cdf9b67d1e99e66cc73d8a5bfce1f1f8df1b83), [`ce40ff6f0`](https://github.com/clerk/javascript/commit/ce40ff6f0d3bc79e33375be6dd5e03f140a07000), [`fb7ba1f34`](https://github.com/clerk/javascript/commit/fb7ba1f3485abdeac5e504cce6c2d84d3f3e4ffc), [`2102052c0`](https://github.com/clerk/javascript/commit/2102052c017065ab511339870fcebaa6719f2702)]: + - @clerk/types@4.26.0 + - @clerk/shared@2.9.2 + - @clerk/backend@1.14.0 + ## 1.3.14 ### Patch Changes diff --git a/packages/astro/package.json b/packages/astro/package.json index 194d8bb7899..a88aaeeffa4 100644 --- a/packages/astro/package.json +++ b/packages/astro/package.json @@ -1,6 +1,6 @@ { "name": "@clerk/astro", - "version": "1.3.14", + "version": "1.3.16", "description": "Clerk SDK for Astro", "keywords": [ "auth", @@ -81,9 +81,9 @@ "publish:local": "npx yalc push --replace --sig" }, "dependencies": { - "@clerk/backend": "1.13.10", - "@clerk/shared": "2.9.1", - "@clerk/types": "4.25.1", + "@clerk/backend": "1.14.1", + "@clerk/shared": "2.9.2", + "@clerk/types": "4.26.0", "nanoid": "5.0.7", "nanostores": "0.11.3" }, diff --git a/packages/backend/CHANGELOG.md b/packages/backend/CHANGELOG.md index 0800d9f3028..7d255640700 100644 --- a/packages/backend/CHANGELOG.md +++ b/packages/backend/CHANGELOG.md @@ -1,5 +1,25 @@ # Change Log +## 1.14.1 + +### Patch Changes + +- Remove console error message from refresh token flow failures. ([#4351](https://github.com/clerk/javascript/pull/4351)) by [@anagstef](https://github.com/anagstef) + +## 1.14.0 + +### Minor Changes + +- Updates `organizationPatterns` to take precedence over `personalAccountPatterns` in `organizationSyncOptions` ([#4320](https://github.com/clerk/javascript/pull/4320)) by [@izaaklauer](https://github.com/izaaklauer) + +- Use EIP-4361 message spec for Web3 wallets sign in signature requests ([#4334](https://github.com/clerk/javascript/pull/4334)) by [@chanioxaris](https://github.com/chanioxaris) + +### Patch Changes + +- Updated dependencies [[`e81d45b72`](https://github.com/clerk/javascript/commit/e81d45b72c81403c7c206dac5454de1fef6bec57), [`752ce9bfa`](https://github.com/clerk/javascript/commit/752ce9bfa47a8eebd38cd272eeb58ae26fea3371), [`99cdf9b67`](https://github.com/clerk/javascript/commit/99cdf9b67d1e99e66cc73d8a5bfce1f1f8df1b83), [`ce40ff6f0`](https://github.com/clerk/javascript/commit/ce40ff6f0d3bc79e33375be6dd5e03f140a07000), [`2102052c0`](https://github.com/clerk/javascript/commit/2102052c017065ab511339870fcebaa6719f2702)]: + - @clerk/types@4.26.0 + - @clerk/shared@2.9.2 + ## 1.13.10 ### Patch Changes diff --git a/packages/backend/package.json b/packages/backend/package.json index 0f94db88b94..a1ae71f7d79 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -1,6 +1,6 @@ { "name": "@clerk/backend", - "version": "1.13.10", + "version": "1.14.1", "description": "Clerk Backend SDK - REST Client for Backend API & JWT verification utilities", "homepage": "https://clerk.com/", "bugs": { @@ -95,8 +95,8 @@ "test:cloudflare-workerd": "tests/cloudflare-workerd/run.sh" }, "dependencies": { - "@clerk/shared": "2.9.1", - "@clerk/types": "4.25.1", + "@clerk/shared": "2.9.2", + "@clerk/types": "4.26.0", "cookie": "0.7.0", "snakecase-keys": "5.4.4", "tslib": "2.4.1" diff --git a/packages/backend/src/api/resources/JSON.ts b/packages/backend/src/api/resources/JSON.ts index 7b769f4495e..a37308485a8 100644 --- a/packages/backend/src/api/resources/JSON.ts +++ b/packages/backend/src/api/resources/JSON.ts @@ -326,6 +326,7 @@ export interface VerificationJSON extends ClerkResourceJSON { verified_at_client?: string; external_verification_redirect_url?: string | null; nonce?: string | null; + message?: string | null; } export interface Web3WalletJSON extends ClerkResourceJSON { diff --git a/packages/backend/src/api/resources/Verification.ts b/packages/backend/src/api/resources/Verification.ts index 35cbfb4d369..451556ecd22 100644 --- a/packages/backend/src/api/resources/Verification.ts +++ b/packages/backend/src/api/resources/Verification.ts @@ -10,6 +10,7 @@ export class Verification { readonly attempts: number | null = null, readonly expireAt: number | null = null, readonly nonce: string | null = null, + readonly message: string | null = null, ) {} static fromJSON(data: VerificationJSON): Verification { diff --git a/packages/backend/src/tokens/__tests__/request.test.ts b/packages/backend/src/tokens/__tests__/request.test.ts index 61b5c893398..e187432ee7e 100644 --- a/packages/backend/src/tokens/__tests__/request.test.ts +++ b/packages/backend/src/tokens/__tests__/request.test.ts @@ -298,14 +298,15 @@ export default (QUnit: QUnit) => { }, }, { - name: 'personal account match precedes org match', + name: 'org match match precedes personal account', whenOrgSyncOptions: { - organizationPatterns: ['/personal-account'], // bad practice - personalAccountPatterns: ['/personal-account'], + personalAccountPatterns: ['/', '/(.*)'], // Personal account captures everything + organizationPatterns: ['/orgs/:slug'], // that isn't org scoped }, - whenAppRequestPath: '/personal-account', + whenAppRequestPath: '/orgs/my-org', thenExpectActivationEntity: { - type: 'personalAccount', + type: 'organization', + organizationSlug: 'my-org', }, }, { diff --git a/packages/backend/src/tokens/request.ts b/packages/backend/src/tokens/request.ts index 2e4ed6b9fa3..abc93dbabca 100644 --- a/packages/backend/src/tokens/request.ts +++ b/packages/backend/src/tokens/request.ts @@ -629,8 +629,7 @@ ${error.getFullMessage()}`, return signedIn(authenticateContext, data.jwtPayload, undefined, data.sessionToken); } - // If there's any error, simply fallback to the handshake flow. - console.error('Clerk: unable to refresh token:', error?.message || error); + // If there's any error, simply fallback to the handshake flow including the reason as a query parameter. if (error?.cause?.reason) { refreshError = error.cause.reason; } else { @@ -735,22 +734,6 @@ export function getOrganizationSyncTarget( return null; } - // Check for personal account activation - if (matchers.PersonalAccountMatcher) { - let personalResult: Match>>; - try { - personalResult = matchers.PersonalAccountMatcher(url.pathname); - } catch (e) { - // Intentionally not logging the path to avoid potentially leaking anything sensitive - console.error(`Failed to apply personal account pattern "${options.personalAccountPatterns}" to a path`, e); - return null; - } - - if (personalResult) { - return { type: 'personalAccount' }; - } - } - // Check for organization activation if (matchers.OrganizationMatcher) { let orgResult: Match>>; @@ -776,6 +759,22 @@ export function getOrganizationSyncTarget( ); } } + + // Check for personal account activation + if (matchers.PersonalAccountMatcher) { + let personalResult: Match>>; + try { + personalResult = matchers.PersonalAccountMatcher(url.pathname); + } catch (e) { + // Intentionally not logging the path to avoid potentially leaking anything sensitive + console.error(`Failed to apply personal account pattern "${options.personalAccountPatterns}" to a path`, e); + return null; + } + + if (personalResult) { + return { type: 'personalAccount' }; + } + } return null; } diff --git a/packages/backend/src/tokens/types.ts b/packages/backend/src/tokens/types.ts index 0e97c0026c4..235b08eb078 100644 --- a/packages/backend/src/tokens/types.ts +++ b/packages/backend/src/tokens/types.ts @@ -36,7 +36,7 @@ export type OrganizationSyncOptions = { * organization-related fields will be set to null. The server component must detect this and respond * with an appropriate error (e.g., notFound()). * - * If the route also matches the personalAccountPatterns, the personalAccountPattern takes precedence. + * If the route also matches the personalAccountPatterns, this takes precedence. * * Must have a path token named either ":id" (matches a clerk organization ID) or ":slug" (matches a clerk * organization slug). @@ -50,7 +50,7 @@ export type OrganizationSyncOptions = { /** * URL patterns for resources in the context of a clerk personal account (user-specific, outside any organization). - * If the route also matches the organizationPattern, this takes precedence. + * If the route also matches the organizationPattern, the organizationPatterns takes precedence. * * Common examples: * - ["/user", "/user/(.*)"] diff --git a/packages/chrome-extension/CHANGELOG.md b/packages/chrome-extension/CHANGELOG.md index 28f24e5243e..4ede4fc57c0 100644 --- a/packages/chrome-extension/CHANGELOG.md +++ b/packages/chrome-extension/CHANGELOG.md @@ -1,5 +1,14 @@ # Change Log +## 1.3.20 + +### Patch Changes + +- Updated dependencies [[`ce40ff6f0`](https://github.com/clerk/javascript/commit/ce40ff6f0d3bc79e33375be6dd5e03f140a07000), [`e81d45b72`](https://github.com/clerk/javascript/commit/e81d45b72c81403c7c206dac5454de1fef6bec57), [`752ce9bfa`](https://github.com/clerk/javascript/commit/752ce9bfa47a8eebd38cd272eeb58ae26fea3371), [`99cdf9b67`](https://github.com/clerk/javascript/commit/99cdf9b67d1e99e66cc73d8a5bfce1f1f8df1b83), [`48421febe`](https://github.com/clerk/javascript/commit/48421febe5feb85d8cf0706c3b150d3e8c545635), [`ce40ff6f0`](https://github.com/clerk/javascript/commit/ce40ff6f0d3bc79e33375be6dd5e03f140a07000), [`2102052c0`](https://github.com/clerk/javascript/commit/2102052c017065ab511339870fcebaa6719f2702)]: + - @clerk/clerk-react@5.12.0 + - @clerk/clerk-js@5.27.0 + - @clerk/shared@2.9.2 + ## 1.3.19 ### Patch Changes diff --git a/packages/chrome-extension/package.json b/packages/chrome-extension/package.json index a6498519531..a135d041a56 100644 --- a/packages/chrome-extension/package.json +++ b/packages/chrome-extension/package.json @@ -1,6 +1,6 @@ { "name": "@clerk/chrome-extension", - "version": "1.3.19", + "version": "1.3.20", "description": "Clerk SDK for Chrome extensions", "keywords": [ "auth", @@ -47,9 +47,9 @@ "test:coverage": "jest --collectCoverage && open coverage/lcov-report/index.html" }, "dependencies": { - "@clerk/clerk-js": "5.26.5", - "@clerk/clerk-react": "5.11.1", - "@clerk/shared": "2.9.1", + "@clerk/clerk-js": "5.27.0", + "@clerk/clerk-react": "5.12.0", + "@clerk/shared": "2.9.2", "webextension-polyfill": "^0.10.0" }, "devDependencies": { diff --git a/packages/clerk-js/CHANGELOG.md b/packages/clerk-js/CHANGELOG.md index 2edcfbafb0f..5c9e1e2457e 100644 --- a/packages/clerk-js/CHANGELOG.md +++ b/packages/clerk-js/CHANGELOG.md @@ -1,5 +1,38 @@ # Change Log +## 5.27.0 + +### Minor Changes + +- Drop `maxAgeMinutes` from `__experimental_startVerification`. ([#4338](https://github.com/clerk/javascript/pull/4338)) by [@panteliselef](https://github.com/panteliselef) + + Drop types `__experimental_SessionVerificationConfig` and `__experimental_SessionVerificationMaxAgeMinutes`. + +- The "Restricted access" screen has been improved for visual consistency and the ability to contact support. The displayed texts have been made more clear and the sign-in button has been moved to the bottom. ([#4335](https://github.com/clerk/javascript/pull/4335)) by [@nikospapcom](https://github.com/nikospapcom) + +- Add experimental standalone mode for `` and ``. ([#4042](https://github.com/clerk/javascript/pull/4042)) by [@panteliselef](https://github.com/panteliselef) + + When `__experimental_asStandalone: true` the component will not render its trigger, and instead it will render only the contents of the popover in place. + + APIs that changed: + + - (For internal usage) Added `__experimental_prefetchOrganizationSwitcher` as a way to mount an internal component that will render the `useOrganizationList()` hook and prefetch the necessary data for the popover of ``. This enhances the UX since no loading state will be visible and keeps CLS to the minimum. + - New property for `mountOrganizationSwitcher(node, { __experimental_asStandalone: true })` + - New property for `mountUserButton(node, { __experimental_asStandalone: true })` + +- Use EIP-4361 message spec for Web3 wallets sign in signature requests ([#4334](https://github.com/clerk/javascript/pull/4334)) by [@chanioxaris](https://github.com/chanioxaris) + +### Patch Changes + +- Retry with exponential backoff if loadScript fails to load the script ([#4349](https://github.com/clerk/javascript/pull/4349)) by [@nikosdouvlis](https://github.com/nikosdouvlis) + +- Add the `?render=explicit` query parameter to the Turnstile script. ([#4332](https://github.com/clerk/javascript/pull/4332)) by [@anagstef](https://github.com/anagstef) + +- Updated dependencies [[`e81d45b72`](https://github.com/clerk/javascript/commit/e81d45b72c81403c7c206dac5454de1fef6bec57), [`752ce9bfa`](https://github.com/clerk/javascript/commit/752ce9bfa47a8eebd38cd272eeb58ae26fea3371), [`0a9bf8ef4`](https://github.com/clerk/javascript/commit/0a9bf8ef4902606f06b371e11c7ae84d493eda6c), [`99cdf9b67`](https://github.com/clerk/javascript/commit/99cdf9b67d1e99e66cc73d8a5bfce1f1f8df1b83), [`ce40ff6f0`](https://github.com/clerk/javascript/commit/ce40ff6f0d3bc79e33375be6dd5e03f140a07000), [`2102052c0`](https://github.com/clerk/javascript/commit/2102052c017065ab511339870fcebaa6719f2702)]: + - @clerk/types@4.26.0 + - @clerk/shared@2.9.2 + - @clerk/localizations@3.3.0 + ## 5.26.5 ### Patch Changes diff --git a/packages/clerk-js/bundlewatch.config.json b/packages/clerk-js/bundlewatch.config.json index 6e8b142720e..30ee61bacba 100644 --- a/packages/clerk-js/bundlewatch.config.json +++ b/packages/clerk-js/bundlewatch.config.json @@ -1,6 +1,6 @@ { "files": [ - { "path": "./dist/clerk.browser.js", "maxSize": "65kB" }, + { "path": "./dist/clerk.browser.js", "maxSize": "65.5kB" }, { "path": "./dist/clerk.headless.js", "maxSize": "43kB" }, { "path": "./dist/ui-common*.js", "maxSize": "86KB" }, { "path": "./dist/vendors*.js", "maxSize": "70KB" }, diff --git a/packages/clerk-js/package.json b/packages/clerk-js/package.json index 3d2f37ad7d8..4904c807c7c 100644 --- a/packages/clerk-js/package.json +++ b/packages/clerk-js/package.json @@ -1,6 +1,6 @@ { "name": "@clerk/clerk-js", - "version": "5.26.5", + "version": "5.27.0", "description": "Clerk JS library", "keywords": [ "clerk", @@ -50,9 +50,9 @@ }, "browserslist": "last 2 versions, ios_saf > 12, Safari > 12, > 1%, not dead, not ie > 0", "dependencies": { - "@clerk/localizations": "3.2.1", - "@clerk/shared": "2.9.1", - "@clerk/types": "4.25.1", + "@clerk/localizations": "3.3.0", + "@clerk/shared": "2.9.2", + "@clerk/types": "4.26.0", "@coinbase/wallet-sdk": "4.0.4", "@emotion/cache": "11.11.0", "@emotion/react": "11.11.1", diff --git a/packages/clerk-js/src/core/clerk.ts b/packages/clerk-js/src/core/clerk.ts index 98ebad1d080..dc4b101985d 100644 --- a/packages/clerk-js/src/core/clerk.ts +++ b/packages/clerk-js/src/core/clerk.ts @@ -667,6 +667,13 @@ export class Clerk implements ClerkInterface { void this.#componentControls?.ensureMounted().then(controls => controls.unmountComponent({ node })); }; + public __experimental_prefetchOrganizationSwitcher = () => { + this.assertComponentsReady(this.#componentControls); + void this.#componentControls + ?.ensureMounted({ preloadHint: 'OrganizationSwitcher' }) + .then(controls => controls.prefetch('organizationSwitcher')); + }; + public mountOrganizationList = (node: HTMLDivElement, props?: OrganizationListProps) => { this.assertComponentsReady(this.#componentControls); if (disabledOrganizationsFeature(this, this.environment)) { diff --git a/packages/clerk-js/src/core/resources/Session.ts b/packages/clerk-js/src/core/resources/Session.ts index 9a1c3963af0..b9ef6743736 100644 --- a/packages/clerk-js/src/core/resources/Session.ts +++ b/packages/clerk-js/src/core/resources/Session.ts @@ -122,7 +122,6 @@ export class Session extends BaseResource implements SessionResource { __experimental_startVerification = async ({ level, - maxAgeMinutes, }: __experimental_SessionVerifyCreateParams): Promise<__experimental_SessionVerificationResource> => { const json = ( await BaseResource._fetch({ @@ -130,7 +129,6 @@ export class Session extends BaseResource implements SessionResource { path: `/client/sessions/${this.id}/verify`, body: { level, - maxAgeMinutes, } as any, }) )?.response as unknown as __experimental_SessionVerificationJSON; diff --git a/packages/clerk-js/src/core/resources/SignIn.ts b/packages/clerk-js/src/core/resources/SignIn.ts index e9124638042..50ce5f39e4c 100644 --- a/packages/clerk-js/src/core/resources/SignIn.ts +++ b/packages/clerk-js/src/core/resources/SignIn.ts @@ -250,14 +250,14 @@ export class SignIn extends BaseResource implements SignInResource { await this.prepareFirstFactor(web3FirstFactor); - const { nonce } = this.firstFactorVerification; - if (!nonce) { + const { message } = this.firstFactorVerification; + if (!message) { clerkVerifyWeb3WalletCalledBeforeCreate('SignIn'); } let signature: string; try { - signature = await generateSignature({ identifier, nonce, provider }); + signature = await generateSignature({ identifier, nonce: message, provider }); } catch (err) { // There is a chance that as a user when you try to setup and use the Coinbase Wallet with an existing // Passkey in order to authenticate, the initial generate signature request to be rejected. For this @@ -266,7 +266,7 @@ export class SignIn extends BaseResource implements SignInResource { // error code 4001 means the user rejected the request // Reference: https://docs.cdp.coinbase.com/wallet-sdk/docs/errors if (provider === 'coinbase_wallet' && err.code === 4001) { - signature = await generateSignature({ identifier, nonce, provider }); + signature = await generateSignature({ identifier, nonce: message, provider }); } else { throw err; } diff --git a/packages/clerk-js/src/core/resources/SignUp.ts b/packages/clerk-js/src/core/resources/SignUp.ts index 5f239241227..bf7a06932ea 100644 --- a/packages/clerk-js/src/core/resources/SignUp.ts +++ b/packages/clerk-js/src/core/resources/SignUp.ts @@ -203,14 +203,14 @@ export class SignUp extends BaseResource implements SignUpResource { await this.create({ web3Wallet, unsafeMetadata }); await this.prepareWeb3WalletVerification({ strategy }); - const { nonce } = this.verifications.web3Wallet; - if (!nonce) { + const { message } = this.verifications.web3Wallet; + if (!message) { clerkVerifyWeb3WalletCalledBeforeCreate('SignUp'); } let signature: string; try { - signature = await generateSignature({ identifier, nonce, provider }); + signature = await generateSignature({ identifier, nonce: message, provider }); } catch (err) { // There is a chance that as a first time visitor when you try to setup and use the // Coinbase Wallet from scratch in order to authenticate, the initial generate @@ -220,7 +220,7 @@ export class SignUp extends BaseResource implements SignUpResource { // error code 4001 means the user rejected the request // Reference: https://docs.cdp.coinbase.com/wallet-sdk/docs/errors if (provider === 'coinbase_wallet' && err.code === 4001) { - signature = await generateSignature({ identifier, nonce, provider }); + signature = await generateSignature({ identifier, nonce: message, provider }); } else { throw err; } diff --git a/packages/clerk-js/src/core/resources/Verification.ts b/packages/clerk-js/src/core/resources/Verification.ts index e301098065e..8028c4c1778 100644 --- a/packages/clerk-js/src/core/resources/Verification.ts +++ b/packages/clerk-js/src/core/resources/Verification.ts @@ -23,6 +23,7 @@ export class Verification extends BaseResource implements VerificationResource { status: VerificationStatus | null = null; strategy: string | null = null; nonce: string | null = null; + message: string | null = null; externalVerificationRedirectURL: URL | null = null; attempts: number | null = null; expireAt: Date | null = null; @@ -44,6 +45,7 @@ export class Verification extends BaseResource implements VerificationResource { this.verifiedAtClient = data.verified_at_client; this.strategy = data.strategy; this.nonce = data.nonce || null; + this.message = data.message || null; if (data.external_verification_redirect_url) { this.externalVerificationRedirectURL = new URL(data.external_verification_redirect_url); } else { diff --git a/packages/clerk-js/src/ui/Components.tsx b/packages/clerk-js/src/ui/Components.tsx index fa419d4c9f1..5fd0168ee3d 100644 --- a/packages/clerk-js/src/ui/Components.tsx +++ b/packages/clerk-js/src/ui/Components.tsx @@ -37,6 +37,7 @@ import { LazyModalRenderer, LazyOneTapRenderer, LazyProviders, + OrganizationSwitcherPrefetch, } from './lazyModules/providers'; import type { AvailableComponentProps } from './types'; @@ -88,6 +89,7 @@ export type ComponentControls = { notify?: boolean; }, ) => void; + prefetch: (component: 'organizationSwitcher') => void; // Special case, as the impersonation fab mounts automatically mountImpersonationFab: () => void; }; @@ -116,6 +118,7 @@ interface ComponentsState { userVerificationModal: null | __experimental_UserVerificationProps; organizationProfileModal: null | OrganizationProfileProps; createOrganizationModal: null | CreateOrganizationProps; + organizationSwitcherPrefetch: boolean; nodes: Map; impersonationFab: boolean; } @@ -193,6 +196,7 @@ const Components = (props: ComponentsProps) => { userVerificationModal: null, organizationProfileModal: null, createOrganizationModal: null, + organizationSwitcherPrefetch: false, nodes: new Map(), impersonationFab: false, }); @@ -301,6 +305,10 @@ const Components = (props: ComponentsProps) => { setState(s => ({ ...s, impersonationFab: true })); }; + componentsControls.prefetch = component => { + setState(s => ({ ...s, [`${component}Prefetch`]: true })); + }; + props.onComponentsMounted(); }, []); @@ -452,6 +460,8 @@ const Components = (props: ComponentsProps) => { )} + + {state.organizationSwitcherPrefetch && } ); diff --git a/packages/clerk-js/src/ui/components/OrganizationSwitcher/OrganizationSwitcher.tsx b/packages/clerk-js/src/ui/components/OrganizationSwitcher/OrganizationSwitcher.tsx index 234ddb9b2d6..e0fdd0be568 100644 --- a/packages/clerk-js/src/ui/components/OrganizationSwitcher/OrganizationSwitcher.tsx +++ b/packages/clerk-js/src/ui/components/OrganizationSwitcher/OrganizationSwitcher.tsx @@ -1,4 +1,5 @@ -import { useId } from 'react'; +import type { ReactElement } from 'react'; +import { cloneElement, useId } from 'react'; import { AcceptedInvitationsProvider, useOrganizationSwitcherContext, withCoreUserGuard } from '../../contexts'; import { Flow } from '../../customizables'; @@ -7,8 +8,9 @@ import { usePopover } from '../../hooks'; import { OrganizationSwitcherPopover } from './OrganizationSwitcherPopover'; import { OrganizationSwitcherTrigger } from './OrganizationSwitcherTrigger'; -const _OrganizationSwitcher = withFloatingTree(() => { +const OrganizationSwitcherWithFloatingTree = withFloatingTree<{ children: ReactElement }>(({ children }) => { const { defaultOpen } = useOrganizationSwitcherContext(); + const { floating, reference, styles, toggle, isOpen, nodeId, context } = usePopover({ defaultOpen, placement: 'bottom-start', @@ -17,34 +19,50 @@ const _OrganizationSwitcher = withFloatingTree(() => { const switcherButtonMenuId = useId(); + return ( + <> + + + {cloneElement(children, { + id: switcherButtonMenuId, + close: toggle, + ref: floating, + style: styles, + })} + + + ); +}); + +const _OrganizationSwitcher = () => { + const { __experimental_asStandalone } = useOrganizationSwitcherContext(); + return ( - - - - + {__experimental_asStandalone ? ( + + ) : ( + + + + )} ); -}); +}; export const OrganizationSwitcher = withCoreUserGuard(withCardStateProvider(_OrganizationSwitcher)); diff --git a/packages/clerk-js/src/ui/components/OrganizationSwitcher/OrganizationSwitcherPopover.tsx b/packages/clerk-js/src/ui/components/OrganizationSwitcher/OrganizationSwitcherPopover.tsx index 523a35552d4..1fbb9436e91 100644 --- a/packages/clerk-js/src/ui/components/OrganizationSwitcher/OrganizationSwitcherPopover.tsx +++ b/packages/clerk-js/src/ui/components/OrganizationSwitcher/OrganizationSwitcherPopover.tsx @@ -20,12 +20,16 @@ import { useRouter } from '../../router'; import type { PropsOfComponent, ThemableCssProp } from '../../styledSystem'; import { OrganizationActionList } from './OtherOrganizationActions'; -type OrganizationSwitcherPopoverProps = { close: () => void } & PropsOfComponent; +type OrganizationSwitcherPopoverProps = { + close?: (open: boolean | ((prevState: boolean) => boolean)) => void; +} & PropsOfComponent; export const OrganizationSwitcherPopover = React.forwardRef( (props, ref) => { - const { close, ...rest } = props; + const { close: unsafeClose, ...rest } = props; + const close = () => unsafeClose?.(false); const card = useCardState(); + const { __experimental_asStandalone } = useOrganizationSwitcherContext(); const { openOrganizationProfile, openCreateOrganization } = useClerk(); const { organization: currentOrg } = useOrganization(); const { isLoaded, setActive } = useOrganizationList(); @@ -191,6 +195,7 @@ export const OrganizationSwitcherPopover = React.forwardRef diff --git a/packages/clerk-js/src/ui/components/OrganizationSwitcher/__tests__/OrganizationSwitcher.test.tsx b/packages/clerk-js/src/ui/components/OrganizationSwitcher/__tests__/OrganizationSwitcher.test.tsx index 60a9fb997ba..bac49c52af3 100644 --- a/packages/clerk-js/src/ui/components/OrganizationSwitcher/__tests__/OrganizationSwitcher.test.tsx +++ b/packages/clerk-js/src/ui/components/OrganizationSwitcher/__tests__/OrganizationSwitcher.test.tsx @@ -1,5 +1,6 @@ import type { MembershipRole } from '@clerk/types'; import { describe } from '@jest/globals'; +import { waitFor } from '@testing-library/react'; import { act, render } from '../../../../testUtils'; import { bindCreateFixtures } from '../../../utils/test/createFixtures'; @@ -119,10 +120,25 @@ describe('OrganizationSwitcher', () => { props.setProps({ hidePersonal: true }); const { getByText, getByRole, userEvent } = render(, { wrapper }); - await userEvent.click(getByRole('button')); + await userEvent.click(getByRole('button', { name: 'Open organization switcher' })); expect(getByText('Create organization')).toBeInTheDocument(); }); + it('renders organization switcher popover as standalone', async () => { + const { wrapper, props } = await createFixtures(f => { + f.withOrganizations(); + f.withUser({ email_addresses: ['test@clerk.com'], create_organization_enabled: true }); + }); + props.setProps({ + __experimental_asStandalone: true, + }); + const { getByText, queryByRole } = render(, { wrapper }); + await waitFor(() => { + expect(queryByRole('button', { name: 'Open organization switcher' })).toBeNull(); + expect(getByText('Personal account')).toBeInTheDocument(); + }); + }); + it('lists all organizations the user belongs to', async () => { const { wrapper, props, fixtures } = await createFixtures(f => { f.withOrganizations(); diff --git a/packages/clerk-js/src/ui/components/SignUp/SignUpRestrictedAccess.tsx b/packages/clerk-js/src/ui/components/SignUp/SignUpRestrictedAccess.tsx index 44d86185ac2..2a931b5ce19 100644 --- a/packages/clerk-js/src/ui/components/SignUp/SignUpRestrictedAccess.tsx +++ b/packages/clerk-js/src/ui/components/SignUp/SignUpRestrictedAccess.tsx @@ -1,14 +1,21 @@ import { useClerk } from '@clerk/shared/react'; import { useSignUpContext } from '../../contexts'; -import { Icon, localizationKeys } from '../../customizables'; +import { Button, Flex, Icon, localizationKeys } from '../../customizables'; import { Card, Header } from '../../elements'; import { useCardState } from '../../elements/contexts'; +import { useSupportEmail } from '../../hooks/useSupportEmail'; import { Block } from '../../icons'; + export const SignUpRestrictedAccess = () => { const clerk = useClerk(); const card = useCardState(); const { signInUrl } = useSignUpContext(); + const supportEmail = useSupportEmail(); + + const handleEmailSupport = () => { + window.location.href = `mailto:${supportEmail}`; + }; return ( @@ -18,22 +25,36 @@ export const SignUpRestrictedAccess = () => { icon={Block} sx={t => ({ margin: 'auto', - width: t.sizes.$12, - height: t.sizes.$12, + width: t.sizes.$10, + height: t.sizes.$10, })} /> {card.error} + {supportEmail && ( + +