From 533b4dcf77d4112da0236945d5cb22144b9b8d83 Mon Sep 17 00:00:00 2001 From: Nate Kelley Date: Thu, 3 Jul 2025 23:56:31 -0600 Subject: [PATCH] Update import paths --- apps/web/package.json | 4 +- .../web/src/api/buster_rest/users/requests.ts | 2 +- apps/web/src/app/auth/reset-password/page.tsx | 4 +- .../ShareMenu/ShareMenuContentBody.tsx | 8 +-- .../components/features/auth/PolicyCheck.tsx | 6 +- .../features/auth/ResetEmailForm.tsx | 3 +- .../features/modal/InvitePeopleModal.tsx | 10 +-- apps/web/src/lib/email.ts | 7 ++- .../routes/busterRoutes/createRouteHelpers.ts | 2 +- pnpm-lock.yaml | 62 +++++++++---------- 10 files changed, 57 insertions(+), 51 deletions(-) diff --git a/apps/web/package.json b/apps/web/package.json index 5032574ce..ad2a98291 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -85,7 +85,7 @@ "dom-to-image": "^2.6.0", "email-validator": "^2.0.4", "font-color-contrast": "^11.1.0", - "framer-motion": "^12.20.1", + "framer-motion": "^12.23.0", "hono": "catalog:", "html-react-parser": "^5.2.5", "intersection-observer": "^0.12.2", @@ -134,7 +134,7 @@ "devDependencies": { "@chromatic-com/storybook": "^3.2.6", "@next/bundle-analyzer": "^15.3.5", - "@playwright/test": "^1.53.2", + "@playwright/test": "1.53.1", "@storybook/addon-controls": "^8.6.12", "@storybook/addon-essentials": "^8.6.14", "@storybook/addon-interactions": "^8.6.14", diff --git a/apps/web/src/api/buster_rest/users/requests.ts b/apps/web/src/api/buster_rest/users/requests.ts index b17e4cfdd..27575a608 100644 --- a/apps/web/src/api/buster_rest/users/requests.ts +++ b/apps/web/src/api/buster_rest/users/requests.ts @@ -5,7 +5,7 @@ import type { BusterUserResponse, OrganizationUser } from '@/api/asset_interfaces/users'; -import { BASE_URL } from '@/api/buster_rest/config'; +import { BASE_URL } from '../config'; import { serverFetch } from '../../createServerInstance'; import { mainApi } from '../instances'; diff --git a/apps/web/src/app/auth/reset-password/page.tsx b/apps/web/src/app/auth/reset-password/page.tsx index a4c90a1ab..79fa57848 100644 --- a/apps/web/src/app/auth/reset-password/page.tsx +++ b/apps/web/src/app/auth/reset-password/page.tsx @@ -1,5 +1,5 @@ import { redirect } from 'next/navigation'; -import { getMyUserInfo_server } from '@/api/buster_rest'; +import { getMyUserInfo_server } from '@/api/buster_rest/users/requests'; import { ResetPasswordForm } from '@/components/features/auth/ResetPasswordForm'; import { getSupabaseUserContext } from '@/lib/supabase'; import { resetPassword } from '@/lib/supabase/resetPassword'; @@ -8,7 +8,7 @@ import { BusterRoutes, createBusterRoute } from '@/routes/busterRoutes'; export default async function ResetPassword() { const { user, accessToken } = await getSupabaseUserContext(); - if (!user?.id) { + if (!user?.id || !accessToken) { return redirect( createBusterRoute({ route: BusterRoutes.AUTH_LOGIN diff --git a/apps/web/src/components/features/ShareMenu/ShareMenuContentBody.tsx b/apps/web/src/components/features/ShareMenu/ShareMenuContentBody.tsx index 546c559e0..735d1b929 100644 --- a/apps/web/src/components/features/ShareMenu/ShareMenuContentBody.tsx +++ b/apps/web/src/components/features/ShareMenu/ShareMenuContentBody.tsx @@ -1,6 +1,6 @@ -import { validate } from 'email-validator'; import React from 'react'; import type { ShareAssetType, ShareConfig, ShareRole } from '@buster/server-shared/share'; +import { isValidEmail } from '@/lib/email'; import { useShareCollection, useUnshareCollection, @@ -84,12 +84,12 @@ const ShareMenuContentShare: React.FC = React.memo( const [inputValue, setInputValue] = React.useState(''); const [defaultPermissionLevel, setDefaultPermissionLevel] = React.useState('canView'); - const disableSubmit = !inputHasText(inputValue) || !validate(inputValue); + const disableSubmit = !inputHasText(inputValue) || !isValidEmail(inputValue); const hasIndividualPermissions = !!individual_permissions?.length; const onSubmitNewEmail = useMemoizedFn(async () => { - const isValidEmail = validate(inputValue); - if (!isValidEmail) { + const emailIsValid = isValidEmail(inputValue); + if (!emailIsValid) { openErrorMessage('Invalid email address'); return; } diff --git a/apps/web/src/components/features/auth/PolicyCheck.tsx b/apps/web/src/components/features/auth/PolicyCheck.tsx index 4f65680ce..3c8ef0895 100644 --- a/apps/web/src/components/features/auth/PolicyCheck.tsx +++ b/apps/web/src/components/features/auth/PolicyCheck.tsx @@ -1,8 +1,10 @@ -import { validate } from 'email-validator'; +'use client'; + import type React from 'react'; import { useEffect, useMemo } from 'react'; import { CircleCheck, CircleXmark } from '@/components/ui/icons'; import { Text } from '@/components/ui/typography'; +import { isValidEmail } from '@/lib/email'; const PasswordCheckItem: React.FC<{ passwordGood: boolean; @@ -53,7 +55,7 @@ export const PolicyCheck: React.FC<{ const items = [ { text: 'Email is valid', - check: validate(email) + check: isValidEmail(email) }, { text: 'Contains a number', diff --git a/apps/web/src/components/features/auth/ResetEmailForm.tsx b/apps/web/src/components/features/auth/ResetEmailForm.tsx index 3718d6971..7f62eabfb 100644 --- a/apps/web/src/components/features/auth/ResetEmailForm.tsx +++ b/apps/web/src/components/features/auth/ResetEmailForm.tsx @@ -9,7 +9,8 @@ import { Input } from '@/components/ui/inputs'; import { Text, Title } from '@/components/ui/typography'; import { useBusterNotifications } from '@/context/BusterNotifications'; import { useMemoizedFn } from '@/hooks'; -import { isValidEmail, timeout } from '@/lib'; +import { isValidEmail } from '@/lib/email'; +import { timeout } from '@/lib/timeout'; import { cn } from '@/lib/classMerge'; import { BusterRoutes, createBusterRoute } from '@/routes'; diff --git a/apps/web/src/components/features/modal/InvitePeopleModal.tsx b/apps/web/src/components/features/modal/InvitePeopleModal.tsx index c07be1c71..5f963c6dd 100644 --- a/apps/web/src/components/features/modal/InvitePeopleModal.tsx +++ b/apps/web/src/components/features/modal/InvitePeopleModal.tsx @@ -1,4 +1,3 @@ -import { validate } from 'email-validator'; import uniq from 'lodash/uniq'; import React, { useMemo } from 'react'; import { useInviteUser } from '@/api/buster_rest/users'; @@ -7,6 +6,7 @@ import { AppModal } from '@/components/ui/modal'; import { useBusterNotifications } from '@/context/BusterNotifications'; import { useMemoizedFn } from '@/hooks'; import { timeout } from '@/lib'; +import { isValidEmail } from '@/lib/email'; export const InvitePeopleModal: React.FC<{ open: boolean; @@ -18,7 +18,9 @@ export const InvitePeopleModal: React.FC<{ const { openErrorMessage, openSuccessMessage } = useBusterNotifications(); const handleInvite = useMemoizedFn(async () => { - const allEmails = uniq([...emails, inputText].filter((email) => !!email && validate(email))); + const allEmails = uniq( + [...emails, inputText].filter((email) => !!email && isValidEmail(email)) + ); try { await inviteUsers({ emails: allEmails }); onClose(); @@ -40,7 +42,7 @@ export const InvitePeopleModal: React.FC<{ }, []); const isInputTextValidEmail = useMemo(() => { - return validate(inputText); + return isValidEmail(inputText); }, [inputText]); const memoizedFooter = useMemo(() => { @@ -64,7 +66,7 @@ export const InvitePeopleModal: React.FC<{ onTagAdd={(v) => { const arrayedTags = Array.isArray(v) ? v : [v]; const hadMultipleTags = arrayedTags.length > 1; - const validTags = arrayedTags.filter((tag) => validate(tag)); + const validTags = arrayedTags.filter((tag) => isValidEmail(tag)); setEmails([...emails, ...validTags]); diff --git a/apps/web/src/lib/email.ts b/apps/web/src/lib/email.ts index c9f078923..40228e323 100644 --- a/apps/web/src/lib/email.ts +++ b/apps/web/src/lib/email.ts @@ -28,8 +28,9 @@ export const isPersonalEmail = (email: string) => { return isValidEmail(email) && personalEmailDomains.some((domain) => email.includes(domain)); }; +const EMAIL_REGEX = + /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; + export const isValidEmail = (email: string) => { - const re = - /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; - return re.test(String(email).toLowerCase()); + return EMAIL_REGEX.test(String(email).toLowerCase()); }; diff --git a/apps/web/src/routes/busterRoutes/createRouteHelpers.ts b/apps/web/src/routes/busterRoutes/createRouteHelpers.ts index 5606181d8..631612080 100644 --- a/apps/web/src/routes/busterRoutes/createRouteHelpers.ts +++ b/apps/web/src/routes/busterRoutes/createRouteHelpers.ts @@ -2,10 +2,10 @@ import type { BusterAppRoutes } from './busterAppRoutes'; import { BusterRoutes, type BusterRoutesWithArgsRoute } from './busterRoutes'; export const createBusterRoute = ({ route, ...args }: BusterRoutesWithArgsRoute) => { + if (!route) return ''; if (!args) return route; // Split the route into base path and query template if it exists - const [basePath, queryTemplate] = (route as string).split('?'); // Replace path parameters diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c6579d49b..592a1858b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -226,7 +226,7 @@ importers: version: 4.7.0(monaco-editor@0.52.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@posthog/nextjs-config': specifier: ^1.0.0 - version: 1.0.0(next@14.2.30(@babel/core@7.27.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.89.2)) + version: 1.0.0(next@14.2.30(@babel/core@7.27.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.89.2)) '@radix-ui/react-avatar': specifier: ^1.1.10 version: 1.1.10(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -363,8 +363,8 @@ importers: specifier: ^11.1.0 version: 11.1.0 framer-motion: - specifier: ^12.20.1 - version: 12.20.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: ^12.23.0 + version: 12.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) hono: specifier: 'catalog:' version: 4.8.3 @@ -403,7 +403,7 @@ importers: version: 1.2.0 next: specifier: 14.2.30 - version: 14.2.30(@babel/core@7.27.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.89.2) + version: 14.2.30(@babel/core@7.27.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.89.2) next-themes: specifier: ^0.4.6 version: 0.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -505,8 +505,8 @@ importers: specifier: ^15.3.5 version: 15.3.5 '@playwright/test': - specifier: ^1.53.2 - version: 1.53.2 + specifier: 1.53.1 + version: 1.53.1 '@storybook/addon-controls': specifier: ^8.6.12 version: 8.6.14(storybook@8.6.14(prettier@3.6.2)) @@ -521,7 +521,7 @@ importers: version: 8.6.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.6.14(prettier@3.6.2)) '@storybook/nextjs': specifier: ^8.6.12 - version: 8.6.14(esbuild@0.25.5)(next@14.2.30(@babel/core@7.27.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.89.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.89.2)(storybook@8.6.14(prettier@3.6.2))(type-fest@4.41.0)(typescript@5.8.3)(webpack-hot-middleware@2.26.1)(webpack@5.99.9(esbuild@0.25.5)) + version: 8.6.14(esbuild@0.25.5)(next@14.2.30(@babel/core@7.27.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.89.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.89.2)(storybook@8.6.14(prettier@3.6.2))(type-fest@4.41.0)(typescript@5.8.3)(webpack-hot-middleware@2.26.1)(webpack@5.99.9(esbuild@0.25.5)) '@storybook/react': specifier: ^8.6.12 version: 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.6.2)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.6.14(prettier@3.6.2))(typescript@5.8.3) @@ -3506,8 +3506,8 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@playwright/test@1.53.2': - resolution: {integrity: sha512-tEB2U5z74ebBeyfGNZ3Jfg29AnW+5HlWhvHtb/Mqco9pFdZU1ZLNdVb2UtB5CvmiilNr2ZfVH/qMmAROG/XTzw==} + '@playwright/test@1.53.1': + resolution: {integrity: sha512-Z4c23LHV0muZ8hfv4jw6HngPJkbbtZxTkxPNIg7cJcTc9C28N/p2q7g3JZS2SiKBBHJ3uM1dgDye66bB7LEk5w==} engines: {node: '>=18'} hasBin: true @@ -7497,8 +7497,8 @@ packages: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} - framer-motion@12.20.1: - resolution: {integrity: sha512-NW2t2GHQcNvLHq18JyNVY15VKrwru+nkNyhLdqf4MbxbGhxZcSDi68iNcAy6O1nG0yYAQJbLioBIH1Kmg8Xr1g==} + framer-motion@12.23.0: + resolution: {integrity: sha512-xf6NxTGAyf7zR4r2KlnhFmsRfKIbjqeBupEDBAaEtVIBJX96sAon00kMlsKButSIRwPSHjbRrAPnYdJJ9kyhbA==} peerDependencies: '@emotion/is-prop-valid': '*' react: ^18.0.0 || ^19.0.0 @@ -8945,8 +8945,8 @@ packages: peerDependencies: monaco-editor: '>=0.36' - motion-dom@12.20.1: - resolution: {integrity: sha512-XyveLJ9dmQTmaEsP9RlcuoNFxWlRIGdasdPJBB4aOwPr8bRcJdhltudAbiEjRQBmsGD30sjJdaEjhkHsAHapLQ==} + motion-dom@12.22.0: + resolution: {integrity: sha512-ooH7+/BPw9gOsL9VtPhEJHE2m4ltnhMlcGMhEqA0YGNhKof7jdaszvsyThXI6LVIKshJUZ9/CP6HNqQhJfV7kw==} motion-utils@12.19.0: resolution: {integrity: sha512-BuFTHINYmV07pdWs6lj6aI63vr2N4dg0vR+td0rtrdpWOhBzIkEklZyLcvKBoEtwSqx8Jg06vUB5RS0xDiUybw==} @@ -9477,13 +9477,13 @@ packages: pkg-types@1.3.1: resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} - playwright-core@1.53.2: - resolution: {integrity: sha512-ox/OytMy+2w1jcYEYlOo1Hhp8hZkLCximMTUTMBXjGUA1KoFfiSZ+DU+3a739jsPY0yoKH2TFy9S2fsJas8yAw==} + playwright-core@1.53.1: + resolution: {integrity: sha512-Z46Oq7tLAyT0lGoFx4DOuB1IA9D1TPj0QkYxpPVUnGDqHHvDpCftu1J2hM2PiWsNMoZh8+LQaarAWcDfPBc6zg==} engines: {node: '>=18'} hasBin: true - playwright@1.53.2: - resolution: {integrity: sha512-6K/qQxVFuVQhRQhFsVZ9fGeatxirtrpPgxzBYWyZLEXJzqYwuL4fuNmfOfD5et1tJE4GScKyPNeLhZeRwuTU3A==} + playwright@1.53.1: + resolution: {integrity: sha512-LJ13YLr/ocweuwxyGf1XNFWIU4M2zUSo149Qbp+A4cpwDjsxRPj7k6H25LBrEHiEwxvRbD8HdwvQmRMSvquhYw==} engines: {node: '>=18'} hasBin: true @@ -15127,9 +15127,9 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@playwright/test@1.53.2': + '@playwright/test@1.53.1': dependencies: - playwright: 1.53.2 + playwright: 1.53.1 '@pmmmwh/react-refresh-webpack-plugin@0.5.17(react-refresh@0.14.2)(type-fest@4.41.0)(webpack-hot-middleware@2.26.1)(webpack@5.99.9(esbuild@0.25.5))': dependencies: @@ -15158,10 +15158,10 @@ snapshots: transitivePeerDependencies: - debug - '@posthog/nextjs-config@1.0.0(next@14.2.30(@babel/core@7.27.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.89.2))': + '@posthog/nextjs-config@1.0.0(next@14.2.30(@babel/core@7.27.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.89.2))': dependencies: '@posthog/cli': 0.3.1 - next: 14.2.30(@babel/core@7.27.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.89.2) + next: 14.2.30(@babel/core@7.27.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.89.2) transitivePeerDependencies: - debug @@ -16373,7 +16373,7 @@ snapshots: dependencies: storybook: 8.6.14(prettier@3.6.2) - '@storybook/nextjs@8.6.14(esbuild@0.25.5)(next@14.2.30(@babel/core@7.27.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.89.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.89.2)(storybook@8.6.14(prettier@3.6.2))(type-fest@4.41.0)(typescript@5.8.3)(webpack-hot-middleware@2.26.1)(webpack@5.99.9(esbuild@0.25.5))': + '@storybook/nextjs@8.6.14(esbuild@0.25.5)(next@14.2.30(@babel/core@7.27.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.89.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.89.2)(storybook@8.6.14(prettier@3.6.2))(type-fest@4.41.0)(typescript@5.8.3)(webpack-hot-middleware@2.26.1)(webpack@5.99.9(esbuild@0.25.5))': dependencies: '@babel/core': 7.27.7 '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.27.7) @@ -16399,7 +16399,7 @@ snapshots: find-up: 5.0.0 image-size: 1.2.1 loader-utils: 3.3.1 - next: 14.2.30(@babel/core@7.27.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.89.2) + next: 14.2.30(@babel/core@7.27.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.89.2) node-polyfill-webpack-plugin: 2.0.1(webpack@5.99.9(esbuild@0.25.5)) pnp-webpack-plugin: 1.7.0(typescript@5.8.3) postcss: 8.5.6 @@ -19783,9 +19783,9 @@ snapshots: forwarded@0.2.0: {} - framer-motion@12.20.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + framer-motion@12.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - motion-dom: 12.20.1 + motion-dom: 12.22.0 motion-utils: 12.19.0 tslib: 2.8.1 optionalDependencies: @@ -21475,7 +21475,7 @@ snapshots: vscode-uri: 3.1.0 yaml: 2.8.0 - motion-dom@12.20.1: + motion-dom@12.22.0: dependencies: motion-utils: 12.19.0 @@ -21577,7 +21577,7 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - next@14.2.30(@babel/core@7.27.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.89.2): + next@14.2.30(@babel/core@7.27.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.89.2): dependencies: '@next/env': 14.2.30 '@swc/helpers': 0.5.5 @@ -21599,7 +21599,7 @@ snapshots: '@next/swc-win32-ia32-msvc': 14.2.30 '@next/swc-win32-x64-msvc': 14.2.30 '@opentelemetry/api': 1.9.0 - '@playwright/test': 1.53.2 + '@playwright/test': 1.53.1 sass: 1.89.2 transitivePeerDependencies: - '@babel/core' @@ -22097,11 +22097,11 @@ snapshots: mlly: 1.7.4 pathe: 2.0.3 - playwright-core@1.53.2: {} + playwright-core@1.53.1: {} - playwright@1.53.2: + playwright@1.53.1: dependencies: - playwright-core: 1.53.2 + playwright-core: 1.53.1 optionalDependencies: fsevents: 2.3.2